diff --git a/pykat/__init__.py b/pykat/__init__.py index 7d2920ba0635ec19cfc8add4e073e4b3a8ec1d79..01a75cd6f05d0f3d4b0ce043f68a3a20ec2c698f 100644 --- a/pykat/__init__.py +++ b/pykat/__init__.py @@ -1,4 +1,11 @@ -__version__ = "0.5" +__version__ = "0.6.1" + +# This flag is used to switch on the gui features in pkat at import time +USE_GUI = False + +import pykat.exceptions as pkex + +NoGUIException = pkex.BasePyKatException("No PyQt4 module was found so cannot open a GUI") import finesse import components @@ -6,3 +13,7 @@ import detectors import commands from pykat.utilities.optics.gaussian_beams import beam_param + + + + diff --git a/pykat/components.py b/pykat/components.py index 5684525deaed2d6cae90e19e2a1977870b887106..37ff73bee7a835e2fe2b23ffaa552c888c7a9855 100644 --- a/pykat/components.py +++ b/pykat/components.py @@ -11,9 +11,6 @@ from pykat.node_network import * from pykat.exceptions import * import abc -import pykat.gui.resources -import pykat.gui.graphics -from pykat.gui.graphics import * from pykat.SIfloat import * from pykat.param import Param, AttrParam import weakref @@ -21,6 +18,13 @@ import pykat.exceptions as pkex next_component_id = 1 +from pykat import USE_GUI, NoGUIException + +if USE_GUI: + import pykat.gui.resources + import pykat.gui.graphics + from pykat.gui.graphics import * + class NodeGaussSetter(object): def __init__(self, component, node): self.__comp = weakref.ref(component) @@ -149,6 +153,9 @@ class Component(object): @abc.abstractmethod def getQGraphicsItem(self): + if not USE_GUI: + raise NoGUIException + return None @property @@ -403,6 +410,9 @@ class mirror(AbstractMirrorComponent): return rtn def getQGraphicsItem(self): + if not USE_GUI: + raise NoGUIException + if self._svgItem == None: self._svgItem = pykat.gui.graphics.ComponentQGraphicsItem(":/resources/mirror_flat.svg", self ,[(-4,15,self.nodes[0]), (14,15,self.nodes[1])]) @@ -473,6 +483,9 @@ class beamSplitter(AbstractMirrorComponent): return rtn def getQGraphicsItem(self): + if not USE_GUI: + raise NoGUIException + if self._svgItem == None: # FIXME: make proper SVG component for beam splitter self._svgItem = pykat.gui.graphics.ComponentQGraphicsItem(":/resources/mirror_flat.svg", self ,[(-4,24,self.nodes[0]), (-4,6,self.nodes[1]), (14,6,self.nodes[2]), (14,24,self.nodes[3])]) @@ -566,6 +579,9 @@ class space(Component): return rtn def getQGraphicsItem(self): + if not USE_GUI: + raise NoGUIException + if self._QItem == None: self._QItem = pykat.gui.graphics.SpaceQGraphicsItem(self) @@ -696,6 +712,9 @@ class grating(Component): return rtn def getQGraphicsItem(self): + if not USE_GUI: + raise NoGUIException + if self._svgItem == None: self._svgItem = pykat.gui.graphics.SpaceQGraphicsItem(self) # TODO: make SVG graphic for grating @@ -742,6 +761,9 @@ class isolator(Component): return rtn def getQGraphicsItem(self): + if not USE_GUI: + raise NoGUIException + if self._svgItem == None: self._svgItem = pykat.gui.graphics.ComponentQGraphicsItem(":/resources/isolator.svg", self ,[(-4,15,self.nodes[0]), (14,15,self.nodes[1]), (14,24,self.nodes[2])]) @@ -784,6 +806,9 @@ class lens(Component): return rtn def getQGraphicsItem(self): + if not USE_GUI: + raise NoGUIException + if self._svgItem == None: self._svgItem = pykat.gui.graphics.ComponentQGraphicsItem(":/resources/lens.svg", self ,[(-4,15,self.nodes[0]), (14,15,self.nodes[1])]) @@ -861,6 +886,9 @@ class modulator(Component): return rtn def getQGraphicsItem(self): + if not USE_GUI: + raise NoGUIException + if self._svgItem == None: self._svgItem = pykat.gui.graphics.ComponentQGraphicsItem(":/resources/modulator.svg", self ,[(-4,15,self.nodes[0]), (14,15,self.nodes[1])]) @@ -926,6 +954,9 @@ class laser(Component): return rtn def getQGraphicsItem(self): + if not USE_GUI: + raise NoGUIException + if self._svgItem == None: self._svgItem = pykat.gui.graphics.ComponentQGraphicsItem(":/resources/laser.svg", self, [(65,25,self.nodes[0])]) @@ -989,6 +1020,9 @@ class squeezer(Component): return rtn def getQGraphicsItem(self): + if not USE_GUI: + raise NoGUIException + if self._svgItem == None: self._svgItem = pykat.gui.graphics.ComponentQGraphicsItem(":/resources/laser.svg", self, [(65,25,self.nodes[0])]) diff --git a/pykat/detectors.py b/pykat/detectors.py index df246f0c9cd5b047e586a4fd3c03e87fba94cf17..9ceb2e4ab5987b81d5070ab948d68d79512b6ff9 100644 --- a/pykat/detectors.py +++ b/pykat/detectors.py @@ -5,17 +5,21 @@ Created on Fri Feb 01 0split()9:09:10 2013 @author: Daniel """ import exceptions -import pykat.gui.resources - from pykat.utils import * -from pykat.gui.graphics import * from pykat.node_network import * from pykat.param import Param + import collections import pykat.exceptions as pkex import warnings import copy +from pykat import USE_GUI, NoGUIException + +if USE_GUI: + import pykat.gui.resources + from pykat.gui.graphics import * + class BaseDetector(object) : """ This is a base class for all detectors. Classes Detector1 and Detector2 should be used directly. @@ -94,6 +98,9 @@ class BaseDetector(object) : raise NotImplementedError("This function is not implemented") def getQGraphicsItem(self): + if not USE_GUI: + raise NoGUIException + return None @property diff --git a/pykat/finesse.py b/pykat/finesse.py index 96d7af9fcd00ca1e769c369d7580ea0698972e48..b8c1aeef4486b7d80a73fad7c1e6ad3e6c2c3ba5 100644 --- a/pykat/finesse.py +++ b/pykat/finesse.py @@ -46,18 +46,20 @@ from pykat.node_network import NodeNetwork from pykat.detectors import BaseDetector as Detector from pykat.components import Component from pykat.commands import Command, xaxis -from pykat.gui.gui import pyKatGUI from pykat.SIfloat import * from pykat.param import Param, AttrParam import pykat.exceptions as pkex -from PyQt4.QtCore import QCoreApplication -from PyQt4.QtGui import QApplication +from pykat import USE_GUI, NoGUIException + +if USE_GUI: + from pykat.gui.gui import pyKatGUI + from PyQt4.QtCore import QCoreApplication + from PyQt4.QtGui import QApplication from multiprocessing import Process, Manager -NO_GUI = False NO_BLOCK = "NO_BLOCK" pykat_web = "www.gwoptics.org/pykat" @@ -1323,8 +1325,8 @@ class kat(object): return out def openGUI(self): - if NO_GUI: - print "No PyQt4 module was installed so cannot open a GUI" + if not USE_GUI: + raise NoGUIException else: self.app = QCoreApplication.instance() created = False