#Script imported from: XES_W1.xml #Pre-actions caput('X10DA-ES1:START-CSMPL', '0') sleep(0.1) caput('X10DA-ES1:TOTAL-CYCLES', '1') sleep(0.1) caput('X10DA-PILATUS-1:cam1:AcquireTime', '1') caput('X10DA-PILATUS-1:cam1:AcquirePeriod', '1.1') caput('X10DA-ES1-MA1:TRX.VAL', '-18') caput('X10DA-ES1-MA1:TRX1.VAL', '-15') ROI1size=487 ROI2size=487 #DelayOn=0 DelayShift=480 DelayOff=DelayOn+DelayShift DELAY = ChannelInteger('X10DA-ES2-TIM:SET3-DELAY','X10DA-ES2-TIM:SET3-DELAY') DELAY.initialize() #Creating channels: dimension 1 #PseudoPositioner Pseudo #ScalarDetector SAI01-MEAN SAI01 = ChannelDouble('X10DA-ES1-SAI_01:MEAN', 'X10DA-ES1-SAI_01:MEAN') #ScalarDetector SAI02 SAI02 = ChannelDouble('X10DA-ES1-SAI_02:MEAN', 'X10DA-ES1-SAI_02:MEAN') #ScalarDetector Ring-current RingCurrent = ChannelDouble('ARIDI-PCT:CURRENT', 'ARIDI-PCT:CURRENT') #ScalarDetector PilExpTime PilExpTime = ChannelDouble('X10DA-PILATUS-1:cam1:AcquireTime_RBV', 'X10DA-PILATUS-1:cam1:AcquireTime_RBV') #Timestamp Timestamp #ScalarDetector PilFileNum PilFileNum = ChannelDouble('X10DA-PILATUS-1:cam1:FileNumber_RBV', 'X10DA-PILATUS-1:cam1:FileNumber_RBV') #ScalarDetector TotalCounts TotalCounts = ChannelDouble('X10DA-PILATUS-1:Stats1:Total_RBV', 'X10DA-PILATUS-1:Stats1:Total_RBV') #ScalarDetector TiffFileNumber TiffFileNumber = ChannelDouble('X10DA-PILATUS-1:Magick1:FileNumber_RBV', 'X10DA-PILATUS-1:Magick1:FileNumber_RBV') #ScalarDetector ROI4 ROI4 = ChannelDouble('X10DA-PILATUS-1:Stats4:Total_RBV', 'X10DA-PILATUS-1:Stats4:Total_RBV') #ArrayDetector ROI1 ROI1_On = ChannelDoubleArray('Roi1', 'X10DA-PILATUS-1:Stats1:ProfileCursorX_RBV', ROI1size) #ArrayDetector ROI2 ROI2_On = ChannelDoubleArray('Roi2', 'X10DA-PILATUS-1:Stats2:ProfileCursorX_RBV' , ROI2size) detectors = [SAI01, SAI02, RingCurrent, PilExpTime, PilFileNum, TotalCounts, TiffFileNumber, TiffFileNumber, ROI4, ROI1_On, ROI2_On] for det in detectors: det.initialize() #Pseudo-devices class Roi1Off(Readable, ReadableArray): def read(self): DELAY.write(DelayOn+DelayShift) time.sleep(0.1) run_aquisition() self.cache = caget(ROI1_On.channelName, '[d') return self.cache def getSize(self): return ROI1.getSize() class Roi2Off(Readable, ReadableArray): def read(self): self.cache = caget(ROI2_On.channelName, '[d') # DELAY.write(DelayOn) return self.cache def getSize(self): return ROI2.getSize() ROI1_Off=Roi1Off() ROI2_Off=Roi2Off() class RoiDiff(Readable, ReadableArray): def __init__(self, roi_on, roi_off): self.roi_on = roi_on self.roi_off = roi_off def read(self): return arrsub(self.roi_on.take(), self.roi_off.cache) def getSize(self): return self.roi_on.getSize() ROI1_Diff=RoiDiff(ROI1_On, ROI1_Off) set_device_alias(ROI1_Diff, "Roi1Diff") ROI2_Diff=RoiDiff(ROI2_On, ROI2_Off) set_device_alias(ROI2_Diff, "Roi2Diff") def run_aquisition(): caputq('X10DA-PILATUS-1:cam1:Acquire', 1) caputq('X10DA-ES1:SMPL', '1') sleep(0.1) cawait('X10DA-PILATUS-1:cam1:Acquire', 0, type = 'l') cawait('X10DA-ES1:SMPL-DONE', 1, type = 'l') sleep(0.1) def before_sample(): DELAY.write(DelayOn) run_aquisition() class PseudoPositioner(Writable): def write(self,pos): global DelayOn DelayOn=pos dl=PseudoPositioner() try: # tscan(detectors + [ROI1_Off, ROI2_Off, ROI1_Diff, ROI2_Diff], 30, 0, before_read = before_sample, \ # line_plots = [ROI1_Diff, ROI2_Diff]) lscan(dl, detectors + [ROI1_Off, ROI2_Off, ROI1_Diff, ROI2_Diff], 0, 200,20, before_read = before_sample, line_plots = [ROI1_Diff, ROI2_Diff,SAI02], enabled_plots = [ROI1_Diff, ROI2_Diff,SAI02]) finally: for det in detectors: det.close()