class Slit2D(Device): "Center and gap with virtual motors" xc = Cpt(Slit2DCenter, '12-Ax:X}') yc = Cpt(Slit2DCenter, '12-Ax:Y}') xg = Cpt(Slit2DGap, '12-Ax:X}') yg = Cpt(Slit2DGap, '12-Ax:Y}')
class HxnZP_OSA(NamedDevice): zposax = Cpt(EpicsMotor, 'XF:03IDC-ES{ANC350:5-Ax:0}Mtr', doc='coarse x') zposay = Cpt(EpicsMotor, 'XF:03IDC-ES{ANC350:5-Ax:1}Mtr', doc='coarse y') zposaz = Cpt(EpicsMotor, 'XF:03IDC-ES{ANC350:5-Ax:2}Mtr', doc='coarse z')
class VirtualMotorCenterAndGap(Device): "Center and gap with virtual motors" x_cntr = Cpt(VirtualCenter, '-Ax:X}') y_cntr = Cpt(VirtualCenter, '-Ax:Y}') x_gap = Cpt(VirtualGap, '-Ax:X}') y_gap = Cpt(VirtualGap, '-Ax:Y}')
class SRXSlits2(Device): inb = Cpt(EpicsMotor, 'I}Mtr') out = Cpt(EpicsMotor, 'O}Mtr')
class Agilent53210A(BaseInterface, Device): """ Agililent 53210A frequency counter class. For use with IOC ioc/common/agilent5322. """ protocol = Cpt(EpicsSignal, ':PROTOCOL_RBV', write_pv=':PROTOCOL', kind='omitted') freq_rbck = Cpt(EpicsSignalRO, ':FREQ_RBCK', kind='normal') freq_rbck_raw = Cpt(EpicsSignalRO, ':FREQ_RBCK_RAW', kind='omitted') auto_level = Cpt(EpicsSignal, ':GET_AUTO_LEVEL', write_pv=':SET_AUTO_LEVEL', kind='config') coupling = Cpt(EpicsSignal, ':GET_COUPLING', write_pv=':SET_COUPLING', kind='config') impedance = Cpt(EpicsSignal, ':GET_IMPEDANCE', write_pv=':SET_IMPEDANCE', kind='config') noise_rej = Cpt(EpicsSignal, ':GET_NOISE_REJ', write_pv=':SET_NOISE_REJ', kind='config') trig_level = Cpt(EpicsSignal, ':GET_TRIG_LEVEL', write_pv=':SET_TRIG_LEVEL', kind='config') trig_percent = Cpt(EpicsSignal, ':GET_TRIG_PERCENT', write_pv=':SET_TRIG_PERCENT', kind='config') identity = Cpt(EpicsSignalRO, ':IDENTITY', kind='omitted') reset = Cpt(EpicsSignal, ':RESET', kind='config') set_metadata(reset, dict(variety='command-proc', value=1))
class SRXHFM(Device): x = Cpt(EpicsMotor, 'X}Mtr') y = Cpt(EpicsMotor, 'Y}Mtr') pitch = Cpt(EpicsMotor, 'P}Mtr') bend = Cpt(EpicsMotor, 'Bend}Mtr')
class SRXM3(Device): x = Cpt(EpicsMotor, 'X}Mtr') pitch = Cpt(EpicsMotor, 'P}Mtr')
class Navigator(AgilentSerial): """ Class for Navigator Pump controlled via serial """ low_speed = Cpt(EpicsSignalRO, ':LOW_SPEED_RBV', kind='omitted') low_speed_freq = Cpt(EpicsSignalRO, ':LOW_SPEED_FREQ_RBV', kind='omitted') sp_power = Cpt(EpicsSignalRO, ':SP_POWER_RBV', kind='omitted') sp_time = Cpt(EpicsSignalRO, ':SP_TIME_RBV', kind='omitted') sp_normal = Cpt(EpicsSignalRO, ':SP_NORMAL_RBV', kind='omitted') sp_pressure = Cpt(EpicsSignalRO, ':SP_PRESSURE_RBV', kind='omitted') vent_open_time = Cpt(EpicsSignalRO, ':VENT_OPEN_TIME_RBV', kind='omitted') vent_open_time_raw = Cpt(EpicsSignalRO, ':VENT_OPEN_TIME_RAW_RBV', kind='omitted') power_limit = Cpt(EpicsSignalRO, ':POWER_LIMIT_RBV', kind='omitted') gas_load_type = Cpt(EpicsSignalRO, ':GAS_LOAD_TYPE_RBV', kind='omitted') press_read_corr = Cpt(EpicsSignalRO, ':PRESS_READ_CORR_RBV', kind='omitted') sp_press_unit = Cpt(EpicsSignalRO, ':SP_PRESS_UNIT_RBV', kind='omitted') sp_write_press_unit = Cpt(EpicsSignalRO, ':SP_WRITE_PRESS_UNIT_RBV', kind='omitted') stop_speed_reading = Cpt(EpicsSignalRO, ':STOP_SPEED_READING_RBV', kind='omitted') ctrl_heatsink_temp = Cpt(EpicsSignalRO, ':CTRL_HEATSINK_TEMP_RBV', kind='omitted') ctrl_air_temp = Cpt(EpicsSignalRO, ':CTRL_AIR_TEMP_RBV', kind='omitted')
class QPCPCT(GammaPCT): """ Class for Quad Pump Controller accessed via ethernet """ do_reset = Cpt(EpicsSignal, ':DO_RESET', kind='omitted')
class PTMPLC(Device): """ Class for PLC-controlled Turbo Pump """ switch_pump_on = Cpt(EpicsSignalWithRBV, ':RUN_SW', kind='omitted') reset_fault = Cpt(EpicsSignalWithRBV, ':RST_SW', kind='normal') run_do = Cpt(EpicsSignalRO, ':RUN_DO_RBV', kind='normal') pump_at_speed = Cpt(EpicsSignalRO, ':AT_SPD_RBV', kind='omitted') pump_accelerating = Cpt(EpicsSignalRO, ':ACCEL_RBV', kind='normal') pump_speed = Cpt(EpicsSignalRO, ':SPEED_RBV', kind='normal') fault = Cpt(EpicsSignalRO, ':FAULT_RBV', kind='normal') warn = Cpt(EpicsSignalRO, ':WARN_RBV', kind='normal') alarm = Cpt(EpicsSignalRO, ':ALARM_RBV', kind='normal') bp_sp = Cpt(EpicsSignalWithRBV, ':BP_SP', kind='omitted') ip_sp = Cpt(EpicsSignalWithRBV, ':IP_SP', kind='omitted') interlock_status = Cpt(EpicsSignalRO, ':ILK_STATUS_RBV', kind='normal', doc='interlock is ok when true')
class AgilentSerial(Device): """ Class for Agilent Turbo Pump controlled via serial """ run = Cpt(EpicsSignal, ':RUN', kind='omitted') config = Cpt(EpicsSignal, ':CONFIG', kind='omitted') softstart = Cpt(EpicsSignal, ':SOFTSTART', kind='omitted') sp_type = Cpt(EpicsSignal, ':SP_TYPE', kind='omitted') sp_calcdis = Cpt(EpicsSignal, ':SP_CALCDIS', kind='omitted') sp_dis = Cpt(EpicsSignal, ':SP_DIS', kind='omitted') sp_writeval = Cpt(EpicsSignal, ':SP_WRITEVAL', kind='omitted') sp_freq = Cpt(EpicsSignal, ':SP_FREQ', kind='omitted') sp_current = Cpt(EpicsSignal, ':SP_CURRENT', kind='omitted') sp_time = Cpt(EpicsSignal, ':SP_TIME', kind='omitted') sp_delay = Cpt(EpicsSignal, ':SP_DELAY', kind='omitted') sp_polarity = Cpt(EpicsSignal, ':SP_POLARITY', kind='omitted') sp_hys = Cpt(EpicsSignal, ':SP_HYS', kind='omitted') water_cooling = Cpt(EpicsSignal, ':WATER_COOLING', kind='normal') active_stop = Cpt(EpicsSignal, ':ACTIVE_STOP', kind='normal') interlock_type = Cpt(EpicsSignal, ':INTERLOCK_TYPE', kind='omitted') ao_type = Cpt(EpicsSignal, ':AO_TYPE', kind='omitted') rot_freq = Cpt(EpicsSignal, ':ROT_FREQ', kind='normal') vent_valve = Cpt(EpicsSignal, ':VENT_VALVE', kind='omitted') vent_valve_operation = Cpt(EpicsSignal, ':VENT_VALVE_OPERATION', kind='omitted') vent_valve_delay = Cpt(EpicsSignal, ':VENT_VALVE_DELAY', kind='omitted') vent_valve_raw = Cpt(EpicsSignal, ':VENT_VALVE_RAW', kind='omitted') pump_current = Cpt(EpicsSignalRO, ':PUMP_CURRENT_RBV', kind='omitted') pump_voltage = Cpt(EpicsSignalRO, ':PUMP_VOLTAGE_RBV', kind='normal') pump_power = Cpt(EpicsSignalRO, ':PUMP_POWER_RBV', kind='normal') pump_drive_freq = Cpt(EpicsSignalRO, ':PUMP_DRIVE_FREQ_RBV', kind='normal') pump_temp = Cpt(EpicsSignalRO, ':PUMP_TEMP_RBV', kind='normal') pump_status = Cpt(EpicsSignalRO, ':PUMP_STATUS_RBV', kind='normal') pump_error = Cpt(EpicsSignalRO, ':PUMP_ERROR_RBV', kind='normal')
class Acromag(BaseInterface, Device): """ Class for Acromag analog input/ouput signals. Parameters ---------- prefix : str The EPICS base PV of the Acromag. name : str A name to refer to the Acromag. """ # Components for each channel # Output channels ao1_0 = Cpt(EpicsSignal, ":ao1:0", kind='normal') ao1_1 = Cpt(EpicsSignal, ":ao1:1", kind='normal') ao1_2 = Cpt(EpicsSignal, ":ao1:2", kind='normal') ao1_3 = Cpt(EpicsSignal, ":ao1:3", kind='normal') ao1_4 = Cpt(EpicsSignal, ":ao1:4", kind='normal') ao1_5 = Cpt(EpicsSignal, ":ao1:5", kind='normal') ao1_6 = Cpt(EpicsSignal, ":ao1:6", kind='normal') ao1_7 = Cpt(EpicsSignal, ":ao1:7", kind='normal') ao1_8 = Cpt(EpicsSignal, ":ao1:8", kind='normal') ao1_9 = Cpt(EpicsSignal, ":ao1:9", kind='normal') ao1_10 = Cpt(EpicsSignal, ":ao1:10", kind='normal') ao1_11 = Cpt(EpicsSignal, ":ao1:11", kind='normal') ao1_12 = Cpt(EpicsSignal, ":ao1:12", kind='normal') ao1_13 = Cpt(EpicsSignal, ":ao1:13", kind='normal') ao1_14 = Cpt(EpicsSignal, ":ao1:14", kind='normal') ao1_15 = Cpt(EpicsSignal, ":ao1:15", kind='normal') # Input channels ai1_0 = Cpt(EpicsSignalRO, ":ai1:0", kind='normal') ai1_1 = Cpt(EpicsSignalRO, ":ai1:1", kind='normal') ai1_2 = Cpt(EpicsSignalRO, ":ai1:2", kind='normal') ai1_3 = Cpt(EpicsSignalRO, ":ai1:3", kind='normal') ai1_4 = Cpt(EpicsSignalRO, ":ai1:4", kind='normal') ai1_5 = Cpt(EpicsSignalRO, ":ai1:5", kind='normal') ai1_6 = Cpt(EpicsSignalRO, ":ai1:6", kind='normal') ai1_7 = Cpt(EpicsSignalRO, ":ai1:7", kind='normal') ai1_8 = Cpt(EpicsSignalRO, ":ai1:8", kind='normal') ai1_9 = Cpt(EpicsSignalRO, ":ai1:9", kind='normal') ai1_10 = Cpt(EpicsSignalRO, ":ai1:10", kind='normal') ai1_11 = Cpt(EpicsSignalRO, ":ai1:11", kind='normal') ai1_12 = Cpt(EpicsSignalRO, ":ai1:12", kind='normal') ai1_13 = Cpt(EpicsSignalRO, ":ai1:13", kind='normal') ai1_14 = Cpt(EpicsSignalRO, ":ai1:14", kind='normal') ai1_15 = Cpt(EpicsSignalRO, ":ai1:15", kind='normal') tab_component_names = True
class CRL(Device): x = Cpt(EpicsMotor, '-Ax:X}Mtr') y = Cpt(EpicsMotor, '-Ax:Y}Mtr') th = Cpt(EpicsMotor, '-Ax:P}Mtr')
class Slit2DBlades(Device): top = Cpt(EpicsMotor, '1-Ax:T}Mtr') bottom = Cpt(EpicsMotor, '2-Ax:B}Mtr') outboard = Cpt(EpicsMotor, '1-Ax:O}Mtr') inboard = Cpt(EpicsMotor, '2-Ax:I}Mtr')
class SRXSSAVG(PVPositionerPC): setpoint = Cpt(EpicsSignal, 'Y}size') readback = Cpt(EpicsSignalRO, 'Y}t2.C')
class PIPSerial(Device): """ Class for Positive Ion Pump controlled via serial """ imon = Cpt(EpicsSignalRO, ':IMON_RBV', kind='hinted') pmon = Cpt(EpicsSignalRO, ':PMON_RBV', kind='hinted') pmonlog = Cpt(EpicsSignalRO, ':PMONLOG_RBV', kind='normal') vmon = Cpt(EpicsSignalRO, ':VMON_RBV', kind='normal') statusraw = Cpt(EpicsSignalRO, ':STATUSRAW_RBV', kind='omitted') statuscalc = Cpt(EpicsSignalRO, ':STATUSCALC_RBV', kind='omitted') status = Cpt(EpicsSignalRO, ':STATUS_RBV', kind='normal') statuscodecl = Cpt(EpicsSignalRO, ':STATUSCODECL_RBV', kind='omitted') statuscode = Cpt(EpicsSignalRO, ':STATUSCODE_RBV', kind='omitted') pumpsizedes = Cpt(EpicsSignal, ':PUMPSIZEDES', kind='omitted') pumpsize = Cpt(EpicsSignal, ':PUMPSIZE', kind='omitted') calfactordes = Cpt(EpicsSignal, ':CALFACTORDES', kind='omitted') calfactor = Cpt(EpicsSignal, ':CALFACTOR', kind='omitted') aomodedes = Cpt(EpicsSignal, ':AOMODEDES', kind='omitted') aomode = Cpt(EpicsSignal, ':AOMODE', kind='omitted') statedes = Cpt(EpicsSignal, ':STATEDES', kind='omitted') statemon = Cpt(EpicsSignalRO, ':STATEMON_RBV', kind='normal') dispdes = Cpt(EpicsSignal, ':DISPDES', kind='omitted') pname = Cpt(EpicsSignalRO, ':PNAME_RBV', kind='normal') pnamedes = Cpt(EpicsSignal, ':PNAMEDES', kind='omitted') vpcname = Cpt(EpicsSignal, ':VPCNAME', kind='omitted')
class SRXSSAVC(PVPositionerPC): setpoint = Cpt(EpicsSignal, 'Y}center') readback = Cpt(EpicsSignalRO, 'Y}t2.D')
class IonPumpBase(Device, BaseInterface): """ %s """ __doc__ = (__doc__ % IonPump_base).replace('Ion Pump', 'Ion Pump Base Class') _pressure = Cpt(EpicsSignalRO, ':PMON', kind='hinted') _egu = Cpt(EpicsSignalRO, ':PMON.EGU', kind='omitted') current = Cpt(EpicsSignalRO, ':IMON', kind='normal') voltage = Cpt(EpicsSignalRO, ':VMON', kind='normal') status_code = Cpt(EpicsSignalRO, ':STATUSCODE', kind='normal', string=True) status = Cpt(EpicsSignalRO, ':STATUS', kind='normal') # check if this work as its an enum state = Cpt(EpicsSignal, ':STATEMON', write_pv=':STATEDES', kind='normal', string=True) # state_cmd = Cpt(EpicsSignal, ':STATEDES', kind='normal') pumpsize = Cpt(EpicsSignal, ':PUMPSIZEDES', write_pv=':PUMPSIZE', kind='omitted') controllername = Cpt(EpicsSignal, ':VPCNAME', kind='omitted') hvstrapping = Cpt(EpicsSignal, ':VDESRBCK', kind='omitted') supplysize = Cpt(EpicsSignalRO, ':SUPPLYSIZE', kind='omitted') aomode = Cpt(EpicsSignal, ':AOMODEDES', write_pv=':AOMODE', kind='config') calfactor = Cpt(EpicsSignal, ':CALFACTORDES', write_pv=':CALFACTOR', kind='config') tab_whitelist = ['on', 'off', 'info', 'pressure'] tab_component_names = True def on(self): self.state.put(1) def off(self): self.state.put(0) def info(self): outString = ('%s is an ion pump with base PV %s which is %s \n' % (self.name, self.prefix, self.state.get())) if self.state.get() == 'ON': outString += 'Pressure: %g \n' % self.pressure() outString += 'Current: %g \n' % self.current.get() outString += 'Voltage: %g' % self.voltage.get() return outString def pressure(self): if self.state.get() == 'ON': return self._pressure.get() else: return -1. def egu(self): return self._egu.get()
class SRXM2(Device): x = Cpt(EpicsMotor, 'X}Mtr') y = Cpt(EpicsMotor, 'Y}Mtr') pitch = Cpt(EpicsMotor, 'P}Mtr') roll = Cpt(EpicsMotor, 'R}Mtr') yaw = Cpt(EpicsMotor, 'Yaw}Mtr')
class FMXMercury(Mercury1, SoftDXPTrigger): count_time = Cpt(Signal, value=None)
class SRXBPM(Device): y = Cpt(EpicsMotor, 'YFoil}Mtr') diode_x = Cpt(EpicsMotor, 'XDiode}Mtr') diode_y = Cpt(EpicsMotor, 'YDiode}Mtr')
class SelectorBoxValvePair(SelectorBoxValve): valve01 = Cpt(SelectorBoxValve, ':VLV:01') valve02 = Cpt(SelectorBoxValve, ':VLV:02')
class SAXSPindiode(Device): x = Cpt(EpicsMotor, 'OBB}Mtr') y = Cpt(EpicsMotor, 'OBM}Mtr')
class SelectorBoxReservoir(SelectorBoxReservoirStates): res = Cpt(SelectorBoxReservoirStates, ':RES') res1 = Cpt(SelectorBoxReservoirStates, ':RES:1') res2 = Cpt(SelectorBoxReservoirStates, ':RES:2') res3 = Cpt(SelectorBoxReservoirStates, ':RES:3') res4 = Cpt(SelectorBoxReservoirStates, ':RES:4') res5 = Cpt(SelectorBoxReservoirStates, ':RES:5') res6 = Cpt(SelectorBoxReservoirStates, ':RES:6') res7 = Cpt(SelectorBoxReservoirStates, ':RES:7') res8 = Cpt(SelectorBoxReservoirStates, ':RES:8') res9 = Cpt(SelectorBoxReservoirStates, ':RES:9') res10 = Cpt(SelectorBoxReservoirStates, ':RES:10')
class HxnZPSample(NamedDevice): # Zoneplate module fine sample stage axes (closed on cap # sensors/interferometer) zpssx = Cpt(EpicsMotor, 'XF:03IDC-ES{Ppmac:1-zpssx}Mtr', doc='fine x') zpssy = Cpt(EpicsMotor, 'XF:03IDC-ES{Ppmac:1-zpssy}Mtr', doc='fine y') zpssz = Cpt(EpicsMotor, 'XF:03IDC-ES{Ppmac:1-zpssz}Mtr', doc='fine z') # rotary underneath sample zpsth = Cpt(EpicsMotor, 'XF:03IDC-ES{SC210:1-Ax:1}Mtr', doc='theta') # PI controller underneath smarpod zpsx = Cpt(EpicsMotor, 'XF:03IDC-ES{ZpPI:1-zpsx}Mtr', doc='coarse x') zpsz = Cpt(EpicsMotor, 'XF:03IDC-ES{ZpPI:1-zpsz}Mtr', doc='coarse z') smarx = Cpt(SmarpodTranslationAxis, axis=2, doc='smarpod x') smary = Cpt(SmarpodTranslationAxis, axis=3, doc='smarpod y') smarz = Cpt(SmarpodTranslationAxis, axis=1, doc='smarpod z') smarthx = Cpt(SmarpodRotationAxis, axis=2, doc='smarpod theta around x') smarthy = Cpt(SmarpodRotationAxis, axis=3, doc='smarpod theta around y') smarthz = Cpt(SmarpodRotationAxis, axis=1, doc='smarpod theta around z') kill = Cpt(EpicsSignal, 'XF:03IDC-ES{Ppmac:1-ZP}Kill-Cmd.PROC') zero = Cpt(EpicsSignal, 'XF:03IDC-ES{Ppmac:1-ZP}Zero-Cmd.PROC') mode = Cpt(EpicsSignal, 'XF:03IDC-ES{Ppmac:1-ZP}Mode-I')
class Proportionair(Device): chA = Cpt(GX_readback, ':01') chB = Cpt(GX_readback, ':02')
class VirtualCenter(PVPositioner): readback = Cpt(EpicsSignalRO, 't2.D') setpoint = Cpt(EpicsSignal, 'center') done = Cpt(EpicsSignalRO, 'DMOV') done_value = 1
class HPLC(Device): status_setpoint = Cpt(EpicsSignal, ':Run') status_value = Cpt(EpicsSignalRO, ':Status') flowrate_setpoint = Cpt(EpicsSignal, ':SetFlowRate') flowrate_value = Cpt(EpicsSignalRO, ':FlowRate') flowrate_setpoint_value = Cpt(EpicsSignalRO, ':FlowRateSP') max_pressure_setpoint = Cpt(EpicsSignal, ':SetMaxPress') max_pressure = Cpt(EpicsSignalRO, ':MaxPress') min_pressure_setpoint = Cpt(EpicsSignal, ':SetMinPress') min_pressure = Cpt(EpicsSignalRO, ':MinPress') error_state = Cpt(EpicsSignalRO, ':Error') error_process = Cpt(EpicsSignal, ':ClearError.PROC') # def __init__(self, *args, **kwargs, inFlowrate = 0.0, inStatus=1): # super().__init__(*args, **kwargs) # self.pressure_setpoint = inPressure # self.status = inStatus def set_flowrate_setpoint(self, inFlowrate): if inFlowrate >= 0.1: print( "The units are mL/min so verify you really want this flowrate") if inFlowrate < 0: print( "Stop being stupid, flowrate shouldn't be negative. Setting the flowrate to 0" ) inFlowrate = 0 self.flowrate_setpoint.put(inFlowrate) return self.flowrate_setpoint_value.get() def set_status(self, inStatus): self.status_setpoint.put(inStatus) return self.status_value.get() def set_pressure_limit(self, inLimit): self.limit_setpoint.put(inLimit) return self.limit_value.get() def clear_error(self): state = self.error_process.get() if state == 1: self.error_process.put(0) else: self.error_process.put(1) return self.error_state.get() def hplc2_resume(self): self.clear_error() self.set_status(1) return self.status_value.get()
class VirtualGap(PVPositioner): readback = Cpt(EpicsSignalRO, 't2.C') setpoint = Cpt(EpicsSignal, 'size') done = Cpt(EpicsSignalRO, 'DMOV') done_value = 1
class Slit2DCenter(PVPositionerPC): readback = Cpt(EpicsSignalRO, 't2.D') setpoint = Cpt(EpicsSignal, 'center') done = Cpt(EpicsSignalRO, 'DMOV') done_value = 1