def __start__(self):

        self.sysconfig = SystemConfig.fromFile(self['chimera_config'])

        self.localManager = Manager(self.sysconfig.chimera["host"], 9090)

        self.offsets = dict(
            zip(self["focus_filters"].split(),
                [int(x) for x in self["focus_difference"].split()]))

        @callback(self.localManager)
        def filterChange(newFilter, oldFilter):
            self.log.debug("Moved from %s to %s" % (oldFilter, newFilter))
            diff = self.offsets[newFilter] - self.offsets[oldFilter]
            if diff < 0:
                diff = int(ceil(abs(diff)))
                self.log.debug("Moving focuser %i steps IN due filter change" %
                               diff)
                self.focuser.moveIn(diff)
            elif diff > 0:
                diff = int(ceil(abs(diff)))
                self.log.debug(
                    "Moving focuser %i steps OUT due filter change" % diff)
                self.focuser.moveOut(diff)

        self.filterwheel = self.getManager().getProxy(self["filterwheel"])
        self.filterwheel.filterChange += filterChange
        self.focuser = self.getManager().getProxy(self["focuser"])
Esempio n. 2
0
    def setup (self):

        self.manager = Manager(port=8000)

        self.manager.addClass(Site, "lna", {"name": "LNA",
                                            "latitude": "-22 32 03",
                                            "longitude": "-45 34 57",
                                            "altitude": "1896",
                                            "utc_offset": "-3"})

        self.manager.addClass(Meade, "meade", {"device": "/dev/ttyS0"})

        @callback(self.manager)
        def slewBeginClbk(target):
            print time.time(), "Slew begin. target=%s" % str(target)

        @callback(self.manager)
        def slewCompleteClbk(position):
            print time.time(), "Slew complete. position=%s" % str(position)

        @callback(self.manager)
        def parkCompleteClbk(position):
            print time.time(), "Park complete. position=%s" % str(position)

        @callback(self.manager)
        def unparkCompleteClbk(position):
            print time.time(), "Unpark complete. position=%s" % str(position)

        self.m = self.manager.getProxy(Meade)
        self.m.slewBegin    += slewBeginClbk
        self.m.slewComplete += slewCompleteClbk
        self.m.parkComplete += parkCompleteClbk
        self.m.unparkComplete += unparkCompleteClbk
Esempio n. 3
0
    def __start__(self):

        # Reset data
        self._data = dict()
        self.setHz(1. / self["query_delay"])

        self.localManager = Manager(self["local_manager_ip"],
                                    self["local_manager_port"])

        # Define callbacks for scheduler actions
        if self["schedulers"] is not None:

            self.CallBacks = []

            for sched in self["schedulers"]:
                self.schedname = sched.split('/')[-1]
                self._data['scheduler_msg_%s' % self.schedname] = dict()
                self._data['scheduler_state_%s' % self.schedname] = dict()

                self.CallBacks.append(
                    SchedCallbacks(self.localManager, self.schedname,
                                   self._data))

                self.getManager().getProxy(
                    sched
                ).actionBegin += self.CallBacks[-1].SchedActionBeginClbk
                self.getManager().getProxy(
                    sched
                ).stateChanged += self.CallBacks[-1].SchedStateChangedClbk

            self.update_schedulers()

        self.control()
    def setup (self):

        self.manager = Manager(port=8000)

        #self.manager.addClass(Site, "lna", {"name": "LNA",
        #                                    "latitude": "-22 32 03",
        #                                    "longitude": "-45 34 57",
        #                                    "altitude": "1896",
        #                                    "utc_offset": "-3"})

        self.manager.addClass(Site, "lna", {"name": "UFSC",
                                            "latitude": "-27 36 13 ",
                                            "longitude": "-48 31 20",
                                            "altitude": "20",
                                            "utc_offset": "-3"})

        #self.manager.addClass(Meade, "meade", {"device": "/dev/ttyS6"})
        #self.manager.addClass(Telescope, "meade", {"driver": "/Meade/meade"})

        self.manager.addClass(FakeTelescope, "fake")
        self.manager.addClass(Telescope, "fake", {"driver": "/FakeTelescope/fake"})

        #self.manager.addClass(Telescope, "meade",
        #                      {"driver": "200.131.64.134:7666/TheSkyTelescope/0"})

        self.tel = self.manager.getProxy(Telescope)
Esempio n. 5
0
    def startup(self):

        if self.options.daemon:
            # detach
            log.info("FIXME: Daemon...")

        # system config
        self.config = SystemConfig.fromFile(self.options.config_file,
                                            self.options.use_global)

        # manager
        if not self.options.dry:
            log.info("Starting system.")
            log.info("Chimera version: %s" % find_dev_version()
                     or _chimera_version_)
            log.info("Chimera prefix: %s" % ChimeraPath.root())

            try:
                self.manager = Manager(**self.config.chimera)
            except ChimeraException, e:
                log.error(
                    "Chimera is already running on this machine. Use chimera-admin to manage it."
                )
                sys.exit(1)

            log.info("Chimera: running on " + self.manager.getHostname() +
                     ":" + str(self.manager.getPort()))
            if self.options.use_global:
                log.info("Chimera: reading configuration from %s" %
                         SYSTEM_CONFIG_DEFAULT_GLOBAL)
            log.info("Chimera: reading configuration from %s" %
                     os.path.realpath(self.options.config_file))
Esempio n. 6
0
    def setup(self):
        self.manager = Manager(port=8000)
        from chimera.instruments.fakecamera import FakeCamera
        self.manager.addClass(FakeCamera, "fake")
        self.CAMERA = "/FakeCamera/0"

        FiredEvents = {}
        self.setupEvents()
Esempio n. 7
0
class ChimeraGUI:

    def __init__(self):

        self.setupGUI()
        self.setupChimera()
        self.setupViews()

    def setupGUI(self):
        self.builder = gtk.Builder()
        self.builder.add_from_file(
            os.path.join(os.path.dirname(__file__), "chimera.xml"))

        self.mainWindow = self.builder.get_object("mainWindow")
        self.builder.connect_signals({"window_destroy": self.chimera_quit,
                                      "chimera_connect_handler": self.chimera_connect_handler,
                                      "chimera_quit_handler": self.chimera_quit})

        self.dock = gdl.Dock()
        self.dock_layout = gdl.DockLayout()

        if os.path.exists("chimera_gui_layout.xml"):
            self.dock_layout.load_from_file("chimera_gui_layout.xml")
            self.dock_layout.load_layout("_-default__")

        self.builder.get_object("main_area").pack_end(self.dock)

        self.mainWindow.set_default_size(640, 480)
        self.mainWindow.show_all()

    def chimera_quit(self, *arga, **kwargs):
        # self.dock_layout.save_to_file("chimera_gui_layout.xml")
        gtk.main_quit()

    def chimera_connect_handler(self, action):
        threading.Thread(target=self.showConnectDialog).start()

    def showConnectDialog(self):
        dialog = self.builder.get_object("chimera_connect_dialog")
        response = dialog.run()
        dialog.hide()
        dialog.destroy()

    def setupChimera(self):
        try:
            self.sysconfig = SystemConfig.fromFile(
                SYSTEM_CONFIG_DEFAULT_FILENAME)
        except IOError, e:
            logging.exception(e)
            logging.error(
                "There was a problem reading your configuration file. (%s)" % e)
            return False

        self.localManager = Manager(
            host=self.sysconfig.chimera["host"], port=9000)
        self.manager = ManagerLocator.locate(
            self.sysconfig.chimera["host"], self.sysconfig.chimera["port"])
Esempio n. 8
0
    def setup(self):

        self.manager = Manager(port=8000)

        self.manager.addClass(FakeFilterWheel, "fake",
                              {"device": "/dev/ttyS0"})
        self.manager.addClass(FilterWheel, "filter", {
            "driver": "/FakeFilterWheel/0",
            "filters": "U B V R I"
        })
Esempio n. 9
0
    def setup(self):

        self.manager = Manager()

        from chimera.instruments.sbig import SBIG
        self.manager.addClass(SBIG, "sbig", {"filters": "R G B LUNAR CLEAR"})
        self.FILTER_WHEEL = "/SBIG/0"

        FiredEvents = {}
        self.setupEvents()
Esempio n. 10
0
    def setup(self):

        self.manager = Manager(port=8000)

        from chimera.instruments.sbig import SBIG
        self.manager.addClass(SBIG, "sbig")
        self.CAMERA = "/SBIG/0"

        FiredEvents = {}
        self.setupEvents()
Esempio n. 11
0
    def setup(self):

        self.manager = Manager(port=8000)

        # fake
        self.manager.addClass(FakeCamera, "fake")
        self.manager.addClass(Camera, "cam", {"driver": "/FakeCamera/fake"})

        self.manager.addClass(FakeFocuser, "fake")
        self.manager.addClass(Focuser, "focus", {"driver": "/FakeFocuser/0"})

        # real
        #self.manager.addClass(SBIG, "sbig", {"device": "USB"})
        #self.manager.addClass(Camera, "cam", {"driver": "/SBIG/0"})

        #self.manager.addClass(OptecTCFS, "optec", {"device": "/dev/ttyS0"})
        #self.manager.addClass(Focuser, "focus", {"driver": "/OptecTCFS/0"})

        #self.manager.addClass(Autofocus, "autofocus", {"camera" : "200.131.64.203:7666/Camera/0",
        #                                               "focuser": "******"})

        self.manager.addClass(Autofocus, "autofocus", {
            "camera": "/Camera/0",
            "focuser": "******"
        })

        @callback(self.manager)
        def exposeBeginClbk(exp_time):
            print time.time(), "Expose begin for %.3f s." % exp_time

        @callback(self.manager)
        def exposeCompleteClbk():
            print time.time(), "Expose complete."

        @callback(self.manager)
        def readoutBeginClbk(frame):
            print time.time(), "Readout begin for %s." % frame

        @callback(self.manager)
        def readoutCompleteClbk(frame):
            print time.time(), "Readout complete for %s." % frame

        @callback(self.manager)
        def abortCompleteClbk():
            print time.time(), "Abort complete."

        cam = self.manager.getProxy(Camera)
        cam.exposeBegin += exposeBeginClbk
        cam.exposeComplete += exposeCompleteClbk
        cam.readoutBegin += readoutBeginClbk
        cam.readoutComplete += readoutCompleteClbk
        cam.abortComplete += abortCompleteClbk
Esempio n. 12
0
    def setup(self):
        self.manager = Manager(port=8000)
        self.manager.addClass(
            Site, "lna", {
                "name": "LNA",
                "latitude": "-22 32 03",
                "longitude": "-45 34 57",
                "altitude": "1896"
            })

        from chimera.instruments.optectcfs import OptecTCFS
        self.manager.addClass(OptecTCFS, "optec", {"device": "/dev/ttyS4"})
        self.FOCUSER = "******"
Esempio n. 13
0
    def setup (self):

        self.manager = Manager(port=8000)

        #self.manager.addClass(Site, "lna", {"name": "LNA",
        #                                    "latitude": "-22 32 03",
        #                                    "longitude": "-45 34 57",
        #                                    "altitude": "1896"}

        self.manager.addClass(Site, "lna", {"name": "UFSC",
                                            "latitude": "-27 36 13 ",
                                            "longitude": "-48 31 20",
                                            "altitude": "20"})
Esempio n. 14
0
    def setup(self):

        self.manager = Manager(port=8000)

        from chimera.instruments.fakefilterwheel import FakeFilterWheel
        self.manager.addClass(FakeFilterWheel, "fake", {
            "device": "/dev/ttyS0",
            "filters": "U B V R I"
        })
        self.FILTER_WHEEL = "/FakeFilterWheel/0"

        FiredEvents = {}
        self.setupEvents()
Esempio n. 15
0
    def setup(self):

        self.manager = Manager(port=8000)
        self.manager.addClass(
            Site, "lna", {
                "name": "LNA",
                "latitude": "-22 32 03",
                "longitude": "-45 34 57",
                "altitude": "1896"
            })

        from chimera.instruments.fakefocuser import FakeFocuser
        self.manager.addClass(FakeFocuser, "fake", {"device": "/dev/ttyS0"})
        self.FOCUSER = "******"
Esempio n. 16
0
    def test_locate(self):

        manager = Manager(host='localhost', port=9999)

        proxy = ManagerLocator.locate()
        assert proxy.ping() == True

        assert proxy.URI.address == gethostbyname("localhost")
        assert proxy.URI.port == 9999

        manager.shutdown()

        # where are you
        assert_raises(ManagerNotFoundException, ManagerLocator.locate)
Esempio n. 17
0
    def setup(self):

        self.manager = Manager(port=8000)

        self.manager.addClass(
            Site, "lna", {
                "name": "LNA",
                "latitude": "-22 32 03",
                "longitude": "-45 34 57",
                "altitude": "1896",
                "utc_offset": "-3"
            })

        self.manager.addClass(FakeFocuser, "fake", {"device": "/dev/ttyS0"})
        self.manager.addClass(Focuser, "focus", {"driver": "/FakeFocuser/0"})
Esempio n. 18
0
    def _startSystem(self, options):

        try:
            self.sysconfig = SystemConfig.fromFile(options.config)
            self.localManager = Manager(self.sysconfig.chimera["host"],
                                        getattr(options, 'port', 9000))
            self._remoteManager = ManagerLocator.locate(
                self.sysconfig.chimera["host"], self.sysconfig.chimera["port"])
        except ManagerNotFoundException:
            # FIXME: better way to start Chimera
            site = SiteController(wait=False)
            site.startup()

            self._keepRemoteManager = False
            self._remoteManager = ManagerLocator.locate(
                self.sysconfig.chimera["host"], self.sysconfig.chimera["port"])
Esempio n. 19
0
    def setup(self):

        self.manager = Manager(port=8000)

        self.manager.addClass(Site, "lna", {"name": "UFSC",
                                            "latitude": "-27 36 13 ",
                                            "longitude": "-48 31 20",
                                            "altitude": "20"})

        from chimera.instruments.faketelescope import FakeTelescope
        self.manager.addClass(FakeTelescope, "fake")
        self.TELESCOPE = "/FakeTelescope/0"

        self.tel = self.manager.getProxy(self.TELESCOPE)

        FiredEvents = {}
        self.setupEvents()
Esempio n. 20
0
    def setup (self):

        self.manager = Manager(port=8000)

        self.manager.addClass(Site, "lna", {"name": "UFSC",
                                            "latitude": "-27 36 13 ",
                                            "longitude": "-48 31 20",
                                            "altitude": "20"})

        from chimera.instruments.meade import Meade
        self.manager.addClass(Meade, "meade", {"device": "/dev/ttyS6"})
        self.TELESCOPE = "/Meade/0"
        #self.TELESCOPE = "150.162.110.3:7666/TheSkyTelescope/0"
        self.tel = self.manager.getProxy(self.TELESCOPE)

        FiredEvents = {}
        self.setupEvents()
Esempio n. 21
0
    def setup(self):

        self.manager = Manager(port=8000)

        # real
        self.manager.addClass(SBIG, "sbig", {"device": "USB"})
        self.manager.addClass(Camera, "cam", {"driver": "/SBIG/0"})

        self.manager.addClass(
            Site, "lna", {
                "name": "UFSC",
                "latitude": "-27 36 13 ",
                "longitude": "-48 31 20",
                "altitude": "20"
            })

        self.manager.addClass(Meade, "meade", {"device": "/dev/ttyS6"})
        self.manager.addClass(Telescope, "meade", {"driver": "/Meade/meade"})

        self.manager.addClass(PointVerify, "Point")
Esempio n. 22
0
    def setup(self):

        self.manager = Manager(port=8000)

        #self.manager.addClass(SBIG, "sbig", {"device": Device.USB})
        #self.manager.addClass(Camera, "cam", {"driver": "/SBIG/sbig"})

        self.manager.addClass(FakeCamera, "fake", {"device": Device.USB})
        self.manager.addClass(Camera, "cam", {"driver": "/FakeCamera/fake"})

        @callback(self.manager)
        def exposeBeginClbk(request):
            print
            print time.time(), "Expose begin for request %s." % request

        @callback(self.manager)
        def exposeCompleteClbk(request):
            print time.time(), "Expose complete for request %s." % request

        @callback(self.manager)
        def readoutBeginClbk(request):
            print time.time(
            ), "Readout begin for request %s." % request["filename"]

        @callback(self.manager)
        def readoutCompleteClbk(request):
            print time.time(
            ), "Readout complete for request %s." % request["filename"]

        @callback(self.manager)
        def abortCompleteClbk():
            print time.time(), "Abort complete."

        cam = self.manager.getProxy(Camera)
        cam.exposeBegin += exposeBeginClbk
        cam.exposeComplete += exposeCompleteClbk
        cam.readoutBegin += readoutBeginClbk
        cam.readoutComplete += readoutCompleteClbk
        cam.abortComplete += abortCompleteClbk
Esempio n. 23
0
    def test_log(self):
        class Simple(ChimeraObject):
            def __init__(self):
                ChimeraObject.__init__(self)

            def answer(self):
                try:
                    raise ChimeraException("I'm an Exception, sorry.")
                except ChimeraException:
                    self.log.exception("from except: wow, exception caught.")
                    raise ChimeraException("I'm a new Exception, sorry again")

        manager = Manager()
        manager.addClass(Simple, "simple")

        simple = manager.getProxy(Simple)

        try:
            simple.answer()
        except ChimeraException, e:
            assert e.cause != None
            log.exception("wow, something wrong")
Esempio n. 24
0
    def _startSystem(self, options, needRemoteManager=True):

        self.localManager = Manager(getattr(options, 'host', 'localhost'),
                                    getattr(options, 'port', 9000),
                                    local=True)

        # if we need a remote Manager, check if it is up, if not, start it
        if needRemoteManager:
            try:
                self._remoteManager = ManagerLocator.locate()
                self._remoteManager.ping()

            except ManagerNotFoundException:

                # FIXME: better way to start Chimera
                site = SiteController(wait=False)
                site.startup()

                self._keepRemoteManager = False

                self._remoteManager = ManagerLocator.locate()
                self._remoteManager.ping()
Esempio n. 25
0
    def setup(self):

        self.manager = Manager(port=8000)

        self.manager.addClass(
            Site, "lna", {
                "name": "LNA",
                "latitude": "-22 32 03",
                "longitude": "-45 34 57",
                "altitude": "1896",
                "utc_offset": "-3"
            })

        # fake
        self.manager.addClass(FakeTelescope, "fake", {"skip_init": False})
        self.manager.addClass(Telescope, "fake",
                              {"driver": "/FakeTelescope/0"})

        self.manager.addClass(FakeCamera, "fake")
        self.manager.addClass(Camera, "cam", {"driver": "/FakeCamera/0"})

        self.manager.addClass(FakeDome, "fake")
        self.manager.addClass(Dome, "dome", {
            "driver": "/FakeDome/0",
            "mode": "Track",
            "telescope": "/Telescope/0"
        })

        # real
        #self.manager.addClass(Meade, "meade", {"device": "/dev/ttyS6", "skip_init": False})
        #self.manager.addClass(Telescope, "meade", {"driver": "/Meade/meade"})

        #self.manager.addClass(SBIG, "sbig", {"device": "USB"})
        #self.manager.addClass(Camera, "cam", {"driver": "/SBIG/0"})

        #self.manager.addClass(DomeLNA40cm, "lna40", {"device": "/dev/ttyS0"})
        #self.manager.addClass(Dome, "dome", {"driver": "/DomeLNA40cm/0",
        #                                     "mode": "Track",
        #                                     "telescope": "/Telescope/0"})

        @callback(self.manager)
        def exposeBeginClbk(exp_time):
            print time.time(), "[cam] Expose begin for %.3f s." % exp_time

        @callback(self.manager)
        def exposeCompleteClbk():
            print time.time(), "[cam] Expose complete."

        @callback(self.manager)
        def readoutBeginClbk(frame):
            print time.time(), "[cam] Readout begin for %s." % frame

        @callback(self.manager)
        def readoutCompleteClbk(frame):
            print time.time(), "[cam] Readout complete for %s." % frame

        @callback(self.manager)
        def camAbortCompleteClbk():
            print time.time(), "[cam] Abort complete."

        cam = self.manager.getProxy(Camera)
        cam.exposeBegin += exposeBeginClbk
        cam.exposeComplete += exposeCompleteClbk
        cam.readoutBegin += readoutBeginClbk
        cam.readoutComplete += readoutCompleteClbk
        cam.abortComplete += camAbortCompleteClbk

        @callback(self.manager)
        def slewBeginClbk(target):
            print time.time(), "[tel] Slew begin. target=%s" % str(target)

        @callback(self.manager)
        def slewCompleteClbk(position):
            print time.time(
            ), "[tel] Slew complete. position=%s" % str(position)

        @callback(self.manager)
        def telAbortCompleteClbk(position):
            print time.time(
            ), "[tel] Abort complete. position=%s" % str(position)

        self.tel = self.manager.getProxy(Telescope)
        self.tel.slewBegin += slewBeginClbk
        self.tel.slewComplete += slewCompleteClbk
        self.tel.abortComplete += telAbortCompleteClbk

        @callback(self.manager)
        def domeSlewBeginClbk(target):
            print
            print time.time(), "[dome] Slew begin. target=%s" % str(target)

        @callback(self.manager)
        def domeSlewCompleteClbk(position):
            print time.time(
            ), "[dome] Slew complete. position=%s" % str(position)

        @callback(self.manager)
        def domeAbortCompleteClbk(position):
            print time.time(
            ), "[dome] Abort slew at position=%s" % str(position)

        dome = self.manager.getProxy(Dome)
        dome.slewBegin += domeSlewBeginClbk
        dome.slewComplete += domeSlewCompleteClbk
        dome.abortComplete += domeAbortCompleteClbk
Esempio n. 26
0
 def setup(self):
     self.manager = Manager()
Esempio n. 27
0
    def setup(self):

        self.manager = Manager()

        self.manager.addClass(
            Site, "lna", {
                "name": "LNA",
                "latitude": "-22 32 03",
                "longitude": "-45 34 57",
                "altitude": "1896",
                "utc_offset": "-3"
            })

        #self.manager.addClass(Meade, "meade", {"device": "/dev/ttyUSB0"})
        #self.manager.addClass(Telescope, "tel", {"driver": "/Meade/meade"})

        #self.manager.addClass(DomeLNA40cm, "lna40", {"device": "/dev/ttyS0"})
        #self.manager.addClass(Dome, "dome", {"driver": "/DomeLNA40cm/0",
        #                                     "telescope": "/Telescope/0"})

        self.manager.addClass(FakeTelescope, "fake")
        self.manager.addClass(Telescope, "tel", {"driver": "/FakeTelescope/0"})

        self.manager.addClass(FakeDome, "fake")
        self.manager.addClass(Dome, "dome", {
            "driver": "/FakeDome/0",
            "telescope": "/Telescope/0"
        })

        @callback(self.manager)
        def slewBeginClbk(target):
            print
            print time.time(), "[dome] Slew begin. target=%s" % str(target)
            print

        @callback(self.manager)
        def slewCompleteClbk(position):
            print
            print time.time(
            ), "[dome] Slew complete. position=%s" % str(position)
            print

        @callback(self.manager)
        def abortCompleteClbk(position):
            print
            print time.time(
            ), "[dome] Abort slew at position=%s" % str(position)
            print

        @callback(self.manager)
        def slitOpenedClbk(position):
            print
            print time.time(
            ), "[dome] Slit opened with dome at at position=%s" % str(position)
            print

        @callback(self.manager)
        def slitClosedClbk(position):
            print
            print time.time(
            ), "[dome] Slit closed with dome at at position=%s" % str(position)
            print

        dome = self.manager.getProxy(Dome)
        dome.slewBegin += slewBeginClbk
        dome.slewComplete += slewCompleteClbk
        dome.abortComplete += abortCompleteClbk
        dome.slitOpened += slitOpenedClbk
        dome.slitClosed += slitClosedClbk
Esempio n. 28
0
import logging
logging.getLogger("chimera").setLevel(logging.INFO)

from chimera.core.manager import Manager

from minimo import Minimo

manager = Manager(host='localhost', port=8000)
manager.addClass(Minimo, "m", config={"option1": "blah blah"}, start=True)
manager.wait()

Esempio n. 29
0
import logging
logging.getLogger("chimera").setLevel(logging.WARNING)

from chimera.core.manager import Manager
from chimera.core.callback import callback
from chimera.core.exceptions import printException

from minimo import Minimo, MinimoException

manager = Manager()

m = manager.getProxy(Minimo, "m", host='localhost', port=8000)

# method
print m.doMethod("bar")

# event


@callback(manager)
def doEventClbk(result):
    print result


m.eventDone += doEventClbk
m.doEvent()

# exception
try:
    m.doRaise()
except MinimoException, e:
Esempio n. 30
0
    def startup(self):

        if self.options.daemon:
            # detach
            log.info("FIXME: Daemon...")

        # system config
        try:
            self.config = SystemConfig.fromFile(self.options.config_file)
        except (InvalidLocationException, IOError) as e:
            log.exception(e)
            log.error(
                "There was a problem reading your configuration file. (%s)" %
                e)
            sys.exit(1)

        # manager
        if not self.options.dry:
            log.info("Starting system.")
            log.info("Chimera: %s" % _chimera_version_)
            log.info("Chimera prefix: %s" % ChimeraPath().root())
            log.info("Python: %s" % platform.python_version())
            log.info("System: %s" % ' '.join(platform.uname()))

            try:
                self.manager = Manager(**self.config.chimera)
            except ChimeraException as e:
                log.error(
                    "Chimera is already running on this machine. Use chimera-admin to manage it."
                )
                sys.exit(1)

            log.info("Chimera: running on " + self.manager.getHostname() +
                     ":" + str(self.manager.getPort()))
            log.info("Chimera: reading configuration from %s" %
                     os.path.realpath(self.options.config_file))

        # add site object
        if not self.options.dry:

            for site in self.config.sites:
                self.manager.addClass(Site, site.name, site.config, True)

        # search paths
        log.info(
            "Setting objects include path from command line parameters...")
        for _dir in self.options.inst_dir:
            self.paths["instruments"].append(_dir)

        for _dir in self.options.ctrl_dir:
            self.paths["controllers"].append(_dir)

        # init from config
        log.info("Trying to start instruments...")
        for inst in self.config.instruments + self.options.instruments:

            if self.options.dry:
                print(inst)
            else:
                self._add(inst, path=self.paths["instruments"], start=True)

        log.info("Trying to start controllers...")
        for ctrl in self.config.controllers + self.options.controllers:

            if self.options.dry:
                print(ctrl)
            else:
                self._add(ctrl, path=self.paths["controllers"], start=True)

        log.info("System up and running.")

        # ok, let's wait manager work
        if self.wait and not self.options.dry:
            self.manager.wait()