예제 #1
0
    def set(self, conf, mnt_grps=None):
        """Sets the ExperimentConfiguration dictionary."""
        if mnt_grps is None:
            mnt_grps = list(conf['MntGrpConfigs'].keys())

        codec = CodecFactory().getCodec('json')
        msg_error = ''
        for mnt_grp in mnt_grps:
            try:
                mnt_grp_cfg = conf['MntGrpConfigs'][mnt_grp]
                if mnt_grp_cfg is None:  # a mntGrp to be deleted
                    pool = self._getPoolOfElement(mnt_grp)
                    pool.DeleteElement(mnt_grp)
                else:
                    try:
                        # TODO: Fix incorrect implementation. It must check if
                        #  the measurement group is part of the Pools
                        #  controlled by the MacroServer. Otherwise,
                        #  it must raise an exception.
                        mnt_grp_dev = Device(mnt_grp)
                    except Exception:
                        # if the mnt_grp did not already exist, create it now
                        chconfigs = getChannelConfigs(mnt_grp_cfg)
                        chnames, chinfos = list(zip(*chconfigs))  # unzipping
                        # We assume that all the channels belong to the same
                        # pool!
                        pool = self._getPoolOfElement(chnames[0])
                        pool.createMeasurementGroup([mnt_grp] + list(chnames))
                        mnt_grp_dev = Device(mnt_grp)

                    # TODO when we start using measurement group extension
                    # change the code below with the following:
                    # mnt_grp.setConfiguration(mnt_grp_cfg)

                    data = codec.encode(('', mnt_grp_cfg))[1]
                    mnt_grp_dev.write_attribute('configuration', data)
            except PyTango.DevFailed as df:
                # Take the description of the first exception.
                desc = df.args[0].desc
                desc = desc.replace('\r', '')
                desc = desc.replace('\n', '')
                msg_error += 'Measurement Group {0}:\n'\
                             '{1}\n\n'.format(mnt_grp, desc)

        if len(msg_error) > 0:
            raise RuntimeError(msg_error)

        # Send the environment changes
        env = dict(ScanDir=conf.get('ScanDir'),
                   ScanFile=conf.get('ScanFile'),
                   DataCompressionRank=conf.get('DataCompressionRank', -1),
                   ActiveMntGrp=conf.get('ActiveMntGrp'),
                   PreScanSnapshot=conf.get('PreScanSnapshot'))

        self._door.putEnvironments(env)
예제 #2
0
파일: standard.py 프로젝트: suyzhu/sardana
    def prepare(self, integ_time, mnt_grp, **opts):

        self.print_value = False

        if mnt_grp is None:
            self.mnt_grp_name = self.getEnv('ActiveMntGrp')
            self.mnt_grp = self.getObj(self.mnt_grp_name,
                                       type_class=Type.MeasurementGroup)
        else:
            self.mnt_grp_name = mnt_grp.name
            self.mnt_grp = mnt_grp

        if self.mnt_grp is None:
            return

        names = self.mnt_grp.getChannelLabels()
        self.names = [[n] for n in names]
        self.channels = []
        self.values = []
        for channel_info in self.mnt_grp.getChannels():
            full_name = channel_info["full_name"]
            channel = Device(full_name)
            self.channels.append(channel)
            value = channel.getValue(force=True)
            self.values.append([value])
            valueObj = channel.getValueObj_()
            valueObj.subscribeEvent(self.counterChanged, channel)
예제 #3
0
    def onPlayMacro(self):
        door = Device(self.doorName())
        try:
            doorState = door.state()
        except TypeError:
            # TODO: For Taurus 4 adaptation
            doorState = door.getState()
        if doorState == PyTango.DevState.ON or doorState == PyTango.DevState.ALARM:
            self.setFocus()
            paramEditorModel = self.paramEditorModel()
            macroNode = paramEditorModel.root()
            id = macroNode.assignId()
            self.setMacroId(id)
            params, alerts = macroNode.toRun()
            xmlString = paramEditorModel.toXmlString()
            if len(alerts) > 0:
                Qt.QMessageBox.warning(self, "Macro parameters warning",
                                       alerts)
                return
            door.runMacro(xmlString)
            self.addToHistory()


#            door.runMacro(str(macroNode.name()), params)
        elif doorState == PyTango.DevState.STANDBY:
            door.command_inout("ResumeMacro")
        else:
            Qt.QMessageBox.warning(
                self, "Error while starting/resuming macro",
                "It was not possible to start/resume macro, because state of the door was different than ON/STANDBY"
            )
예제 #4
0
 def stress_count(self, elements, repeats, synchronizer, synchronization):
     if (elements == ["_test_ct_1_1", "_test_0d_1_1"]
             and synchronizer == "_test_tg_1_1"
             and synchronization == AcqSynchType.Trigger
             and os.name == "nt"):
         self.skipTest("fails on Windows")
     mg_name = str(uuid.uuid1())
     argin = [mg_name] + elements
     self.pool.CreateMeasurementGroup(argin)
     try:
         mg = Device(mg_name)
         mg.setSynchronizer(synchronizer, elements[0], apply=False)
         mg.setSynchronization(synchronization, elements[0])
         for i in range(repeats):
             state, values = mg.count(.001)
             self.assertEqual(state, DevState.ON,
                              "wrong state after measurement {}".format(i))
             for channel_name, value in values.items():
                 msg = ("Value {} for {} is not numerical in "
                        "measurement {}").format(value, channel_name, i)
                 self.assertTrue(is_numerical(value), msg)
     finally:
         mg.cleanUp()
         if os.name != "nt":
             self.pool.DeleteElement(mg_name)
예제 #5
0
    def test_ValueRefEnabled(self, elements=["_test_2d_1_1", "_test_2d_1_2",
                                             "_test_ct_1_3",
                                             "_test_mt_1_3/position"]):
        mg_name = str(uuid.uuid1())
        argin = [mg_name] + elements
        self.pool.CreateMeasurementGroup(argin)
        try:
            mg = Device(mg_name)

            # Check initial state of all kind of channels, nonexistent
            # channels for the feature return None as result.
            enabled = mg.getValueRefEnabled(*elements)
            expected = [False, False, None, None]
            self._assertMultipleResults(enabled, elements, expected)

            # Check if the nonexistent channels raise error if trying to set
            with self.assertRaises(Exception):
                mg.setValueRefEnabled(True, *elements[-2])
            with self.assertRaises(Exception):
                mg.setValueRefEnabled(True, *elements[-1])

            # Redefine elements to ony use existing values
            elements = ["_test_2d_1_1", "_test_2d_1_2"]

            # Test every possible combination of setting values
            # Check that changing one channel doesn't affect the other
            mg.setValueRefEnabled(True, *elements)
            enabled = mg.getValueRefEnabled(*elements)
            self._assertResult(enabled, elements, True)
            mg.setValueRefEnabled(False, elements[0])
            result = mg.getValueRefEnabled(*elements)
            expected = [True] * len(elements)
            expected[0] = False
            self._assertMultipleResults(result, elements, expected)
            mg.setValueRefEnabled(True, *elements)
            enabled = mg.getValueRefEnabled(*elements)
            self._assertResult(enabled, elements, True)

            # Set values using the controller instead of channels
            mg.setValueRefEnabled(True, "_test_2d_ctrl_1")
            enabled = mg.getValueRefEnabled(*elements)
            self._assertResult(enabled, elements, True)

            # Get values by controller
            mg.setValueRefEnabled(False, *elements)
            enabled = mg.getValueRefEnabled("_test_2d_ctrl_1")
            self._assertResult(enabled, elements, False)

            # Check ret_full_name
            v = TangoDeviceNameValidator()
            full_names = [v.getNames(element)[0] for element in elements]
            enabled = mg.getValueRefEnabled(*full_names)
            self._assertResult(enabled, elements, False)
            mg.setValueRefEnabled(True, *full_names)
            enabled = mg.getValueRefEnabled(*elements, ret_full_name=True)
            self._assertResult(enabled, full_names, True)
        finally:
            mg.cleanUp()
            if os.name != "nt":
                self.pool.DeleteElement(mg_name)
예제 #6
0
    def init_device(self):

        try:
            self.device = Device(self.taurusname)
        except DevFailed, traceback:
            last_error = traceback[-1]
            logging.getLogger('HWR').error("%s: %s", str(self.name()),
                                           last_error['desc'])
            self.device = None
예제 #7
0
    def onPauseMacro(self):
        door = Device(self.doorName())
        doorState = door.getState()

        if doorState == PyTango.DevState.RUNNING:
            door.command_inout("PauseMacro")
        else:
            Qt.QMessageBox.warning(self, "Error while pausing macro",
                                   "It was not possible to pause macro, because state of the door was different than RUNNING")
예제 #8
0
    def onStopMacro(self):
        door = Device(self.doorName())
        doorState = door.getState()

        if doorState in (PyTango.DevState.RUNNING, PyTango.DevState.STANDBY):
            door.command_inout("StopMacro")
        else:
            Qt.QMessageBox.warning(self, "Error while stopping macro",
                                   "It was not possible to stop macro, because state of the door was different than RUNNING or STANDBY")
예제 #9
0
 def test_value_ref_enabled(self):
     mg_name = str(uuid.uuid1())
     channel_name = "_test_2d_1_1"
     argin = [mg_name, channel_name]
     self.pool.CreateMeasurementGroup(argin)
     try:
         mg = Device(mg_name)
         channel = Device(channel_name)
         mg.setValueRefEnabled(True, channel_name)
         _, values = mg.count(.1)
         for channel_name, value in values.items():
             msg = "ValueRef (%s) for %s is not string" %\
                   (value, channel_name)
             self.assertTrue(is_pure_str(value), msg)
     finally:
         channel.cleanUp()
         mg.cleanUp()
         self.pool.DeleteElement(mg_name)
예제 #10
0
 def test_value_ref_disabled(self):
     mg_name = str(uuid.uuid1())
     channel_name = "_test_2d_1_1"
     argin = [mg_name, channel_name]
     self.pool.CreateMeasurementGroup(argin)
     try:
         mg = Device(mg_name)
         channel = Device(channel_name)
         conf = mg.getConfiguration().raw_data
         _set_value_ref_enabled(conf, channel, False)
         mg.setConfiguration(conf)
         _, values = mg.count(.1)
         for channel_name, value in values.iteritems():
             msg = "Value (%s) for %s is not numerical" %\
                   (value, channel_name)
             self.assertTrue(is_numerical(value), msg)
     finally:
         channel.cleanUp()
         mg.cleanUp()
         self.pool.DeleteElement(mg_name)
예제 #11
0
 def count(self, elements):
     argin = [self.mg_name] + elements
     self.pool.CreateMeasurementGroup(argin)
     try:
         self.mg = Device(self.mg_name)
         _, values = self.mg.count(1)
         for channel, value in values.iteritems():
             msg = "Value for %s is not numerical" % channel
             self.assertTrue(is_numerical(value), msg)
     finally:
         self.pool.DeleteElement(self.mg_name)
예제 #12
0
 def onDoorChanged(self, doorName):
     MacroExecutionWindow.onDoorChanged(self, doorName)
     if self._qDoor:
         Qt.QObject.disconnect(
             self._qDoor, Qt.SIGNAL("macroStatusUpdated"),
             self.taurusMacroExecutorWidget.onMacroStatusUpdated)
     if doorName == "": return
     self._qDoor = Device(doorName)
     Qt.QObject.connect(self._qDoor, Qt.SIGNAL("macroStatusUpdated"),
                        self.taurusMacroExecutorWidget.onMacroStatusUpdated)
     self.taurusMacroExecutorWidget.onDoorChanged(doorName)
예제 #13
0
 def onDoorChanged(self, doorName):
     MacroExecutionWindow.onDoorChanged(self, doorName)
     if self._qDoor:
         self._qDoor.macroStatusUpdated.disconnect(
             self.taurusMacroExecutorWidget.onMacroStatusUpdated)
     if doorName == "":
         return
     self._qDoor = Device(doorName)
     self._qDoor.macroStatusUpdated.connect(
         self.taurusMacroExecutorWidget.onMacroStatusUpdated)
     self.taurusMacroExecutorWidget.onDoorChanged(doorName)
예제 #14
0
    def test_ValueRefPattern(self,
                             elements=[
                                 "_test_2d_1_1", "_test_2d_1_2",
                                 "_test_ct_1_3", "_test_mt_1_3/position"
                             ]):
        mg_name = str(uuid.uuid1())
        argin = [mg_name] + elements
        self.pool.CreateMeasurementGroup(argin)
        try:
            mg = Device(mg_name)

            # Check initial state of all kind of channels, nonexistent
            # channels for the feature return None as result.
            pattern = mg.getValueRefPattern(*elements)
            expected = ['', '', None, None]
            self._assertMultipleResults(pattern, elements, expected)

            # Check if the nonexistent channels raise error if trying to set
            with self.assertRaises(Exception):
                mg.setValueRefPattern('/tmp/test_foo.txt', *elements[-2])
            with self.assertRaises(Exception):
                mg.setValueRefPattern('/tmp/test_foo.txt', *elements[-1])

            # Redefine elements to ony use existing values
            elements = ["_test_2d_1_1", "_test_2d_1_2"]

            # Test every possible combination of setting values
            # Check that changing one channel doesn't affect the other
            mg.setValueRefPattern('/tmp/test_foo.txt', *elements)
            pattern = mg.getValueRefPattern(*elements)
            self._assertResult(pattern, elements, '/tmp/test_foo.txt')

            # Set values using the controller instead of channels
            mg.setValueRefPattern('/tmp/test_foo2.txt', "_test_2d_ctrl_1")
            pattern = mg.getValueRefPattern(*elements)
            self._assertResult(pattern, elements, '/tmp/test_foo2.txt')

            # Get values by controller
            mg.setValueRefPattern('/tmp/test_foo.txt', *elements)
            pattern = mg.getValueRefPattern("_test_2d_ctrl_1")
            self._assertResult(pattern, elements, '/tmp/test_foo.txt')

            # Check ret_full_name
            v = TangoDeviceNameValidator()
            full_names = [v.getNames(element)[0] for element in elements]
            pattern = mg.getValueRefPattern(*full_names)
            self._assertResult(pattern, elements, '/tmp/test_foo.txt')
            mg.setValueRefPattern('/tmp/test_foo2.txt', *full_names)
            pattern = mg.getValueRefPattern(*elements, ret_full_name=True)
            self._assertResult(pattern, full_names, '/tmp/test_foo2.txt')

        finally:
            mg.cleanUp()
            self.pool.DeleteElement(mg_name)
예제 #15
0
    def set(self, conf, mnt_grps=None):
        """Sets the ExperimentConfiguration dictionary."""
        env = dict(ScanDir=conf.get('ScanDir'),
                   ScanFile=conf.get('ScanFile'),
                   DataCompressionRank=conf.get('DataCompressionRank', -1),
                   ActiveMntGrp=conf.get('ActiveMntGrp'),
                   PreScanSnapshot=conf.get('PreScanSnapshot'))
        if mnt_grps is None:
            mnt_grps = conf['MntGrpConfigs'].keys()
        self._door.putEnvironments(env)

        codec = CodecFactory().getCodec('json')
        for mnt_grp in mnt_grps:
            try:
                mnt_grp_cfg = conf['MntGrpConfigs'][mnt_grp]
                if mnt_grp_cfg is None:  # a mntGrp to be deleted
                    pool = self._getPoolOfElement(mnt_grp)
                    pool.DeleteElement(mnt_grp)
                else:
                    try:
                        mnt_grp_dev = Device(mnt_grp)
                    except:  # if the mnt_grp did not already exist, create it now
                        chconfigs = getChannelConfigs(mnt_grp_cfg)
                        chnames, chinfos = zip(*chconfigs)  # unzipping
                        # We assume that all the channels belong to the same
                        # pool!
                        pool = self._getPoolOfElement(chnames[0])
                        pool.createMeasurementGroup([mnt_grp] + list(chnames))
                        mnt_grp_dev = Device(mnt_grp)

                    # TODO when we start using measurement group extension change the
                    # code below with the following:
                    # mnt_grp.setConfiguration(mnt_grp_cfg)
                    data = codec.encode(('', mnt_grp_cfg))[1]
                    mnt_grp_dev.write_attribute('configuration', data)
            except Exception, e:
                from taurus.core.util.log import error
                error(
                    'Could not create/delete/modify Measurement group "%s": %s',
                    mnt_grp, repr(e))
예제 #16
0
    def test_Synchronization(self, elements=["_test_ct_1_1", "_test_ct_1_2",
                                             "_test_ct_1_3", "_test_2d_1_1",
                                             "_test_mt_1_3/position"]):
        mg_name = str(uuid.uuid1())
        argin = [mg_name] + elements
        self.pool.CreateMeasurementGroup(argin)
        try:
            mg = Device(mg_name)
            result = mg.getSynchronization()
            expected = [AcqSynchType.Trigger, AcqSynchType.Trigger,
                        AcqSynchType.Trigger, AcqSynchType.Trigger, None]
            self._assertMultipleResults(result, elements, expected)
            # TODO: maybe we should raise an exception here?
            # with self.assertRaises(Exception):
            #     mg.setSynchronization(AcqSynchType.Trigger,
            #                           "_test_mt_1_3/position")

            mg.setSynchronization(AcqSynchType.Gate, "_test_ct_ctrl_1",
                                  "_test_2d_ctrl_1")

            expected = [AcqSynchType.Gate, AcqSynchType.Gate,
                        AcqSynchType.Gate, AcqSynchType.Gate, None]
            result = mg.getSynchronization()
            self._assertMultipleResults(result, elements, expected)

            mg.setSynchronization(AcqSynchType.Start, "_test_ct_ctrl_1",
                                  "_test_2d_ctrl_1")
            result = mg.getSynchronization()
            expected = [AcqSynchType.Start, AcqSynchType.Start,
                        AcqSynchType.Start, AcqSynchType.Start, None]
            self._assertMultipleResults(result, elements, expected)

            with self.assertRaises(Exception):
                mg.setSynchronization('asdf', "_test_ct_ctrl_1",
                                      "_test_2d_ctrl_1")

            # Check ret_full_name
            v = TangoDeviceNameValidator()
            counters = ["_test_ct_1_1", "_test_ct_1_2", "_test_ct_1_3",
                        '_test_2d_1_1']
            full_names = [v.getNames(counter)[0] for counter in counters]
            mg.setSynchronization(AcqSynchType.Trigger, "_test_ct_ctrl_1",
                                  "_test_2d_ctrl_1")

            result = mg.getSynchronization(*counters, ret_full_name=True)

            self._assertResult(result, full_names, AcqSynchType.Trigger)

        finally:
            mg.cleanUp()
            if os.name != "nt":
                self.pool.DeleteElement(mg_name)
예제 #17
0
    def test_Synchronizer(self,
                          elements=[
                              "_test_ct_1_1", "_test_ct_1_2", "_test_ct_1_3",
                              "_test_2d_1_1", "_test_mt_1_3/position"
                          ]):
        mg_name = str(uuid.uuid1())
        argin = [mg_name] + elements
        self.pool.CreateMeasurementGroup(argin)
        try:
            mg = Device(mg_name)
            result = mg.getSynchronizer()
            expected = ['software', 'software', 'software', 'software', None]
            self._assertMultipleResults(result, elements, expected)
            with self.assertRaises(Exception):
                mg.setSynchronizer('_test_tg_1_2', "_test_mt_1_3/position")

            mg.setSynchronizer('_test_tg_1_2', "_test_ct_ctrl_1",
                               "_test_2d_ctrl_1")

            expected = [
                '_test_tg_1_2', '_test_tg_1_2', '_test_tg_1_2', '_test_tg_1_2',
                None
            ]
            result = mg.getSynchronizer()
            self._assertMultipleResults(result, elements, expected)

            mg.setSynchronizer('software', "_test_ct_ctrl_1",
                               "_test_2d_ctrl_1")
            result = mg.getSynchronizer()
            expected = ['software', 'software', 'software', 'software', None]
            self._assertMultipleResults(result, elements, expected)

            with self.assertRaises(Exception):
                mg.setSynchronizer('asdf', "_test_ct_ctrl_1",
                                   "_test_2d_ctrl_1")

            # Check ret_full_name
            v = TangoDeviceNameValidator()
            counters = [
                "_test_ct_1_1", "_test_ct_1_2", "_test_ct_1_3", '_test_2d_1_1'
            ]
            full_names = [v.getNames(counter)[0] for counter in counters]
            mg.setSynchronizer('_test_tg_1_2', "_test_ct_ctrl_1",
                               "_test_2d_ctrl_1")

            result = mg.getSynchronizer(*counters, ret_full_name=True)

            self._assertResult(result, full_names, '_test_tg_1_2')

        finally:
            mg.cleanUp()
            self.pool.DeleteElement(mg_name)
예제 #18
0
    def prepare(self, integ_time, countable_elem, **opts):

        self.print_value = False

        if countable_elem is None:
            try:
                self.countable_elem_name = self.getEnv('ActiveMntGrp')
            except UnknownEnv:
                return
            self.countable_elem = self.getObj(self.countable_elem_name)
        else:
            self.countable_elem_name = countable_elem.name
            self.countable_elem = countable_elem

        if self.countable_elem is None:
            return

        self.channels = []
        self.values = []
        if self.countable_elem.type == Type.MeasurementGroup:
            names = self.countable_elem.getChannelLabels()
            self.names = [[n] for n in names]
            for channel_info in self.countable_elem.getChannels():
                full_name = channel_info["full_name"]
                channel = Device(full_name)
                self.channels.append(channel)
                value = channel.getValue(force=True)
                self.values.append([value])
                valueObj = channel.getValueObj_()
                valueObj.subscribeEvent(self.counterChanged, channel)
        else:
            channel = self.countable_elem
            self.names = [[channel.getName()]]
            channel = Device(channel.full_name)
            self.channels.append(channel)
            value = channel.getValue(force=True)
            self.values.append([value])
            valueObj = channel.getValueObj_()
            valueObj.subscribeEvent(self.counterChanged, channel)
예제 #19
0
 def onDoorChanged(self, doorName):
     self.setDoorName(doorName)
     if self.doorName() == "":
         self.doorStateLed.setModel(None)
         return
     self.doorStateLed.setModel(self.doorName() + "/State")
     door = Device(doorName)
     doorState = door.stateObj.rvalue
     if doorState == PyTango.DevState.ON:
         self.playMacroAction.setText("Start macro")
         self.playMacroAction.setToolTip("Start macro")
     elif doorState == PyTango.DevState.STANDBY:
         self.playMacroAction.setText("Resume macro")
         self.playMacroAction.setToolTip("Resume macro")
예제 #20
0
 def onPauseSequence(self):
     door = Device(self.doorName())
     try:
         doorState = door.state()
     except TypeError:
         # TODO: For Taurus 4 adaptation
         doorState = door.getState()
     if doorState == PyTango.DevState.RUNNING:
         door.command_inout("PauseMacro")
     else:
         Qt.QMessageBox.warning(
             self, "Error while pausing sequence",
             "It was not possible to pause sequence, "
             "because state of the door was different than RUNNING")
예제 #21
0
 def count(self, elements):
     mg_name = str(uuid.uuid1())
     argin = [mg_name] + elements
     self.pool.CreateMeasurementGroup(argin)
     try:
         mg = Device(mg_name)
         _, values = mg.count(.1)
         for channel_name, value in values.iteritems():
             msg = "Value (%s) for %s is not numerical" % \
                   (value, channel_name)
             self.assertTrue(is_numerical(value), msg)
     finally:
         mg.cleanUp()
         self.pool.DeleteElement(mg_name)
예제 #22
0
    def test_PlotType(self,
                      elements=[
                          "_test_ct_1_1", "_test_ct_1_2", "_test_ct_1_3",
                          "_test_2d_1_3", "_test_mt_1_3/position"
                      ]):
        mg_name = str(uuid.uuid1())
        argin = [mg_name] + elements
        self.pool.CreateMeasurementGroup(argin)

        try:
            mg = Device(mg_name)
            plottype = mg.getPlotType()
            self._assertResult(plottype, elements, 0)
            mg.setPlotType("Image", elements[0])
            mg.setPlotType("Spectrum", elements[1])
            mg.setPlotType("No", elements[2])
            mg.setPlotType("Image", elements[3])
            mg.setPlotType("Image", elements[4])
            plottype = mg.getPlotType()
            expected_values = [2, 1, 0, 2, 2]
            self._assertMultipleResults(plottype, elements, expected_values)
            with self.assertRaises(ValueError):
                mg.setPlotType("asdf", elements[2])

            # Redefine elements
            elements = ["_test_ct_1_1", "_test_ct_1_2", "_test_ct_1_3"]

            # Set values using the controller instead of channels
            mg.setPlotType("Image", "_test_ct_ctrl_1")
            plottype = mg.getPlotType(*elements)
            self._assertResult(plottype, elements, 2)

            # Get values by controller
            mg.setPlotType("Spectrum", *elements)
            plottype = mg.getPlotType("_test_ct_ctrl_1")
            self._assertResult(plottype, elements, 1)

            # Check ret_full_name
            v = TangoDeviceNameValidator()
            full_names = [v.getNames(element)[0] for element in elements]
            plottype = mg.getPlotType(*full_names)
            self._assertResult(plottype, elements, 1)
            mg.setPlotType("Image", *full_names)
            plottype = mg.getPlotType(*elements, ret_full_name=True)
            self._assertResult(plottype, full_names, 2)

        finally:
            mg.cleanUp()
            self.pool.DeleteElement(mg_name)
예제 #23
0
    def init_device(self):

        try:
            self.device = Device(self.taurusname)
        except DevFailed as traceback:
            last_error = traceback[-1]
            logging.getLogger("HWR").error("%s: %s", str(self.name()),
                                           last_error["desc"])
            self.device = None
        else:
            try:
                self.device.ping()
            except ConnectionFailed:
                self.device = None
                raise ConnectionError
예제 #24
0
 def fill_sardana_config(self, config):
     import sardana.spock
     profile = 'spockdoor'
     if not config.Spock:
         if hasattr(Qt.qApp, 'SDM'):
             dm = Qt.qApp.SDM.getDataModelProxy('doorName')
             if dm is not None:
                 door_name = dm.getData()
                 door = Device(door_name)
                 dalias, dname = door.getSimpleName(), door.getNormalName()
                 create_sardana_profile(dalias, dname)
                 profile = dalias
                 config.Spock.door_name = dname
     sardana.spock.load_config(config)
     return profile
예제 #25
0
 def checkDoorState(self):
     door = Device(self.doorName())
     doorState = door.getState()
     if doorState == PyTango.DevState.RUNNING:
         self.playMacroAction.setEnabled(False)
         self.pauseMacroAction.setEnabled(True)
         self.stopMacroAction.setEnabled(True)
     elif doorState == PyTango.DevState.ON or doorState == PyTango.DevState.ALARM:
         self.playMacroAction.setEnabled(True)
         self.pauseMacroAction.setEnabled(False)
         self.stopMacroAction.setEnabled(False)
     elif doorState == PyTango.DevState.STANDBY:
         self.playMacroAction.setEnabled(True)
         self.pauseMacroAction.setEnabled(False)
         self.stopMacroAction.setEnabled(True)
예제 #26
0
 def onStopSequence(self):
     door = Device(self.doorName())
     try:
         doorState = door.state()
     except TypeError:
         # TODO: For Taurus 4 adaptation
         doorState = door.getState()
     if doorState in (PyTango.DevState.RUNNING, PyTango.DevState.STANDBY):
         door.command_inout("StopMacro")
     else:
         Qt.QMessageBox.warning(
             self, "Error while stopping sequence",
             "It was not possible to stop sequence, "
             "because state of the door was different than "
             "RUNNING or STANDBY")
예제 #27
0
    def test_Monitor(self,
                     elements=[
                         "_test_ct_1_1", "_test_ct_1_2", "_test_ct_1_3",
                         "_test_2d_1_1", '_test_2d_1_2',
                         "_test_mt_1_3/position"
                     ]):
        mg_name = str(uuid.uuid1())
        argin = [mg_name] + elements
        self.pool.CreateMeasurementGroup(argin)
        try:
            mg = Device(mg_name)

            with self.assertRaises(Exception):
                mg.setMonitor("_test_mt_1_3/position")

            mg.setMonitor('_test_2d_1_2')
            mg.setMonitor("_test_ct_1_3")
            expected = [
                "_test_ct_1_3", "_test_ct_1_3", "_test_ct_1_3", "_test_2d_1_2",
                '_test_2d_1_2', None
            ]
            result = mg.getMonitor()
            self._assertMultipleResults(result, elements, expected)

            expected = ["_test_ct_1_3", '_test_2d_1_2', None]
            result = mg.getMonitor(ret_by_ctrl=True)
            ctrls = ['_test_ct_ctrl_1', '_test_2d_ctrl_1', '__tango__']
            self._assertMultipleResults(result, ctrls, expected)

            # Check ret_full_name
            v = TangoDeviceNameValidator()
            counters = [
                "_test_ct_1_1", "_test_ct_1_2", "_test_ct_1_3", '_test_2d_1_1',
                '_test_2d_1_2'
            ]
            full_names = [v.getNames(counter)[0] for counter in counters]
            mg.setMonitor(v.getNames('_test_ct_1_1')[0])
            mg.setMonitor(v.getNames('_test_2d_1_2')[0])

            result = mg.getMonitor(*counters, ret_full_name=True)
            expected = [
                "_test_ct_1_1", "_test_ct_1_1", "_test_ct_1_1", "_test_2d_1_2",
                '_test_2d_1_2'
            ]
            self._assertMultipleResults(result, full_names, expected)
        finally:
            mg.cleanUp()
            self.pool.DeleteElement(mg_name)
예제 #28
0
    def test_Timer(self,
                   elements=[
                       "_test_ct_1_1", "_test_ct_1_2", "_test_ct_1_3",
                       "_test_mt_1_3/position"
                   ]):
        mg_name = str(uuid.uuid1())
        argin = [mg_name] + elements
        self.pool.CreateMeasurementGroup(argin)
        try:
            mg = Device(mg_name)

            result = mg.getTimer("_test_mt_1_3/position")
            with self.assertRaises(Exception):
                mg.setTimer("_test_mt_1_3/position")
            self._assertResult(result, ["_test_mt_1_3/position"], None)
            mg.setTimer('_test_ct_1_3')
            result = mg.getTimer(*elements)
            expected = ['_test_ct_1_3', '_test_ct_1_3', '_test_ct_1_3', None]
            self._assertMultipleResults(result, elements, expected)

            mg.setTimer('_test_ct_1_2')
            result = mg.getTimer(*elements)
            expected = ['_test_ct_1_2', '_test_ct_1_2', '_test_ct_1_2', None]
            self._assertMultipleResults(result, elements, expected)

            result = mg.getTimer(*elements, ret_by_ctrl=True)
            self._assertMultipleResults(result,
                                        ['_test_ct_ctrl_1', '__tango__'],
                                        ['_test_ct_1_2', None])

            # Check ret_full_name
            v = TangoDeviceNameValidator()
            counters = ["_test_ct_1_1", "_test_ct_1_2", "_test_ct_1_3"]
            full_names = [v.getNames(counter)[0] for counter in counters]
            mg.setTimer(v.getNames('_test_ct_1_1')[0])
            result = mg.getTimer()
            expected = ['_test_ct_1_1', '_test_ct_1_1', '_test_ct_1_1', None]
            self._assertMultipleResults(result, elements, expected)
            # TODO ret_full_name gives controler name
            mg.setTimer("_test_ct_1_2")
            result = mg.getTimer(*counters, ret_full_name=True)
            self._assertResult(result, full_names, "_test_ct_1_2")
        finally:
            mg.cleanUp()
            self.pool.DeleteElement(mg_name)
예제 #29
0
    def init_device(self):
        self.door = Device(self.doorname)
        self.door.set_timeout_millis(10000)

        #
        # DIRTY FIX to make compatible taurus listeners and existence of Tango channels/commands
        # as defined in Command/Tango.py
        #
        # if self.door.__class__ == taurus.core.tango.tangodevice.TangoDevice:
        #    dp = self.door.getHWObj()
        #    try:
        #        dp.subscribe_event = dp._subscribe_event
        #    except AttributeError:
        #        pass

        if self.macroStatusAttr is None:
            self.macroStatusAttr = self.door.getAttribute("State")
            self.macroStatusAttr.addListener(self.objectListener)
예제 #30
0
 def onDoorChanged(self, doorName):
     self.setDoorName(doorName)
     if self.doorName() == "":
         self.doorStateLed.setModel(None)
         return
     self.doorStateLed.setModel(self.doorName() + "/State")
     door = Device(doorName)
     try:
         doorState = door.state()
     except TypeError:
         # TODO: For Taurus 4 adaptation
         doorState = door.getState()
     if doorState == PyTango.DevState.ON:
         self.playMacroAction.setText("Start macro")
         self.playMacroAction.setToolTip("Start macro")
     elif doorState == PyTango.DevState.STANDBY:
         self.playMacroAction.setText("Resume macro")
         self.playMacroAction.setToolTip("Resume macro")