예제 #1
0
    def __init__(self, name, pgm_grat_pitch, pgm_mirr_pitch, pgmpvroot, energy, idupvroot, iddpvroot, move_pgm=True, move_id=True): # motors, maybe also detector to set the delay time
        self.logger = LoggerFactory.getLogger("ContinuousPgmGratingIDGapEnergyMoveController:%s" % name)
        self.verbose = False
        self.setName(name)
        self._start_event = threading.Event()
        self._movelog_time = datetime.now()
        #PGM
        self._pgm_grat_pitch = pgm_grat_pitch
        self._pgm_mirr_pitch = pgm_mirr_pitch
        self._pgm_grat_pitch_speed_orig = None
        self._pgm_runupdown_time = None
        self._move_pgm = move_pgm
        self._move_id  = move_id

        self.pvs = PvManager({'grating_density':                'NLINES',
                              'cff':                            'CFF',
                              'grating_offset':                 'GRTOFFSET',
                              'plane_mirror_offset':            'MIROFFSET',
                              'pgm_energy':                     'ENERGY',
                              'grating_pitch':                  'GRT:PITCH',
                              'mirror_pitch':                   'MIR:PITCH',
                              'energy_calibration_gradient':    'MX',
                              'energy_calibration_reference':   'REFERENCE'}, pgmpvroot)
        if installation.isLive():
            self.pvs.configure()
            
        #ID
        self.energy = energy
        self.idd = energy.idd
        self.idu = energy.idu
        self._id_gap_speed_orig=None
        self._id_runupdown_time = None
        self.idupvs = PvManager({'vel':'BLGSETVEL',
                                'acc':'IDGSETACC'}, idupvroot)
        if installation.isLive():
            self.idupvs.configure()
            
        self.iddpvs = PvManager({'vel':'BLGSETVEL',
                                'acc':'IDGSETACC'}, iddpvroot)
        if installation.isLive():
            self.iddpvs.configure()
            
        self.grating_pitch_positions=[]
        self.mirror_pitch_positions=[]
        self.pgm_energy_positions=[]
        self._start_time = None
        self.idspeedfactor=1.0
        self.pgmspeedfactor=1.0
        self.idstartdelaytime=0.0
        self._move_start = 0.0
        self._move_end = 1.0
        self._move_step = 0.1
        self._triggerPeriod = 0.0
        self.idcontrols = None
        self.continuousMovingStarted = False
예제 #2
0
    def __init__(self,
                 name,
                 pvroot,
                 filepath=None,
                 stdNotArr=True,
                 reconnect=True,
                 verbose=False,
                 acquireToCagetDelay_s=0.1):
        # BL07I-DI-PHDGN-06:CAM:DATA
        self.name = name
        self.extraNames = []
        self.outputFormat = []
        self.level = 9
        self.verbose = verbose
        self.acquireToCagetDelay_s = acquireToCagetDelay_s
        stdArr = "STD" if stdNotArr else "ARR"
        pvs = {
            "DATA": stdArr + ":ArrayData",
            "START": "CAM:Acquire",
            "WIDTH": "CAM:ArraySizeX_RBV",
            "HEIGHT": "CAM:ArraySizeY_RBV",
            "COLLECTTIME": "CAM:AcquireTime"
        }
        if reconnect:
            pvs["RECONNECT"] = "CAM:RESET.PROC"

        self.pvs = PvManager(pvs, pvroot)
        self.pvs.configure()

        self.filepath = filepath
        self.ds = None

        self.disableStop = False
예제 #3
0
    def __init__(
            self, name, pgm_grat_pitch, pgm_mirr_pitch,
            pgmpvroot):  # motors, maybe also detector to set the delay time
        self.logger = LoggerFactory.getLogger(
            "ContinuousPgmGratingEnergyMoveController:%s" % name)
        self.verbose = False

        self.name = name
        self._pgm_grat_pitch = pgm_grat_pitch
        self._pgm_mirr_pitch = pgm_mirr_pitch
        self._start_event = threading.Event()
        self._pgm_grat_pitch_speed_orig = None
        self._movelog_time = datetime.now()
        self._pgm_runupdown_time = None

        self.pvs = PvManager(
            {
                'grating_density': 'NLINES',
                'cff': 'CFF',
                'grating_offset': 'GRTOFFSET',
                'plane_mirror_offset': 'MIROFFSET',
                'pgm_energy': 'ENERGY',
                'grating_pitch': 'GRT:PITCH',
                'mirror_pitch': 'MIR:PITCH',
                'energy_calibration_gradient': 'MX',
                'energy_calibration_reference': 'REFERENCE'
            }, pgmpvroot)
        if installation.isLive():
            self.pvs.configure()
예제 #4
0
 def __init__(self, name, rootPV, continuousMoveController):
     self.name = name
     self.setInputNames([name])
     self.setExtraNames(self._getExtraNames())
     self.setOutputFormat(self._getOutputFormat())
     self.setLevel(100)
     self.pvs = PvManager(pvroot=rootPV)
     self.continuousMoveController = continuousMoveController
     #from gda.device.zebra.controller.impl import ZebraImpl
     #self.zebra = ZebraImpl()
     self.verbose = False
     self.negative_offset = 0.05
     self.setDelayAfterRise(-0.01)
     self.setDelayAfterFall(-0.01)
     self.setAcquireTimePerPulse(0.02)
예제 #5
0
    def __init__(self, pvroot):
        if isinstance(pvroot, str):
            from gdascripts.scannable.epics.PvManager import PvManager

            self.pvs = PvManager(
                {
                    'setpoint': 'SET:SETPOINTFIELD',
                    'setpointRbv': 'RBV:SETPOINTFIELD',
                    'sweeprate': 'SET:FIELDSWEEPRATE',
                    'sweeprateRbv': 'RBV:FIELDSWEEPRATE',
                    'demand_field': 'RBV:DEMANDFIELD'
                }, pvroot)
            self.pvs.configure()
        else:
            self.pvs = pvroot
            self.pvs.pvroot = ""
예제 #6
0
    def __init__(self, name, pvroot, filepath, filename, fileformat):
        self.name = name
        self.inputNames = ['ExposureTime']
        self.extraNames = ['FileNum']
        self.outputFormat = ['%.2f', '%.0f']
        self.level = 9

        self.filepath = None
        self.filename = None
        self.fileformat = None
        self.filenum = None
        self.cached_exptime = None
        self.filenum = None

        self.pvs = PvManager([
            'Acquire', 'NImages', 'Abort', 'ExposureTime', 'FilePath',
            'Filename', 'FileNumber', 'FileFormat', 'ThresholdEnergy'
        ], pvroot)
        self.configure(filepath, filename, fileformat)
예제 #7
0
    def __init__(
            self,
            name,
            energy,
            idgap,
            idpvroot,
            move_mono=True,
            move_id=True):  # motors, maybe also detector to set the delay time
        self.logger = LoggerFactory.getLogger(
            "ContinuousEnergyMoveController:%s" % name)
        self.verbose = False
        self.setName(name)
        self._start_event = threading.Event()
        self._movelog_time = datetime.now()
        self._energy = energy
        #PGM
        self._mono_energy = energy.mono_energy
        self._mono_energy_speed_orig = None
        self._mono_runupdown_time = None
        #ID
        self._id_gap = idgap
        self._id_gap_speed_orig = None
        self._id_runupdown_time = None
        self.idpvs = PvManager({
            'vel': 'BLGSETVEL',
            'acc': 'IDGSETACC'
        }, idpvroot)
        if installation.isLive():
            self.idpvs.configure()

        self.mono_energy_positions = []
        self.id_gap_positions = []
        self._start_time = None

        #behaviour properties
        self._move_mono = move_mono
        self._move_id = move_id
        self.idspeedfactor = 1.0
        self.monospeedfactor = 1.0
        self.idstartdelaytime = 0.0
        self.continuousMovingStarted = False
예제 #8
0
    def __init__(self,
                 name,
                 pvroot,
                 filepath=None,
                 determine_data_pv_based_on_zoom=False,
                 numtracker_extension='tmp',
                 filename_template='fire%d_%05d.png'):
        # BL07I-DI-PHDGN-06:CAM:DATA
        self.determine_data_pv_based_on_zoom = determine_data_pv_based_on_zoom

        self.name = name
        self.extraNames = []
        self.outputFormat = []
        self.level = 9

        self.pvs = PvManager(['SET_SHUTTR', 'WIDTH', 'HEIGHT', 'ZOOM'], pvroot)
        self.pv_data = []
        self.pv_data.append(
            gda.epics.LazyPVFactory.newReadOnlyIntegerArrayPV(pvroot + 'DATA'))
        self.pv_data.append(
            gda.epics.LazyPVFactory.newReadOnlyIntegerArrayPV(pvroot +
                                                              'DATA1'))
        self.pv_data.append(
            gda.epics.LazyPVFactory.newReadOnlyIntegerArrayPV(pvroot +
                                                              'DATA2'))
        self.pv_data.append(
            gda.epics.LazyPVFactory.newReadOnlyIntegerArrayPV(pvroot +
                                                              'DATA3'))
        self.pv_data.append(
            gda.epics.LazyPVFactory.newReadOnlyIntegerArrayPV(pvroot +
                                                              'DATA4'))
        self.pvs.configure()

        self.filepath = filepath
        self.ds = None
        self.last_image_path = None
        self.last_filename = None
        self.last_image_number = 0
        self.numtracker_extension = numtracker_extension
        self.filename_template = filename_template