Files
x10da/script/daq/PumpProbeXES_DelayScan.py
2019-03-19 18:13:51 +01:00

121 lines
3.8 KiB
Python

#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()