Files
x11ma/script/templates/EigerAbsSpec.py
2020-02-03 16:57:46 +01:00

129 lines
3.4 KiB
Python

#If running from editor
if get_exec_pars().source == CommandSource.ui:
ID = "ID2"
SWITCHING = "Normal"
POL_ID_1 = "Circ_Plus"
ALPHA_ID_1 = 0.0
HARMONIC_ID_1 = 1
OFFSET_ID_1 = 0.0
POL_ID_2 = "Circ_Minus"
ALPHA_ID_2 = 0.0
HARMONIC_ID_2 = 1
OFFSET_ID_2 = 0.0
ROI = {"Region1": [10,5,20, 10], "Region2": [20,15,20, 10]}
SAVE_SPECTRUM = True
SAVE_IMAGES = False
WITH_I0 = True
SWITCH_POL = False
EXPOSURE = 1.0
AVERAGE = 2
NUMBER_SCANS =1
RANGES = [[500.0, 1000.0, 100.0]]
DRY_RUN=False
if len(RANGES) == 0:
raise Exception("No scan range defined")
eiger.stop()
eiger.grabMode=eiger.GrabMode.Single
eiger.setExposure(EXPOSURE)
set_exec_pars(path="{data}/{year}_{month}/{date}/AbsortionSpectrum_{seq}%03d", format="csv", layout="table")
tag= "AbsortionSpectrum_{seq}%03d"
rois = create_roi_devices(ROI)
if AVERAGE>1:
for i in range(len(rois)):
rois[i].monitored = True
rois[i] = create_averager(rois[i], AVERAGE, -1)
rois[i].monitored = True
frames=[]
class SyncEnergy(Writable):
def write(self,pos):
if not DRY_RUN:
put_energy(pos)
else:
print "Energy=" + str(pos)
sync_energy=SyncEnergy()
set_device_alias(sync_energy, "Energy") #Set display name
sensors = rois + [machine_cur]
if WITH_I0:
sensors = rois + [keithley_1a]
av=None
def grab_image(position, scan):
global av
frames = grab_frames(image, AVERAGE, roi=None, wait_next=True)
av = average_frames(frames)
if SAVE_IMAGES:
Scan_Nr = (scan.recordIndex-1)/NUMBER_SCANS
filename = get_exec_pars().path + "/" + ("%02d" % Scan_Nr) + "/s" + "{seq}%03d" + "_" + ("%03d.tif" % scan.recordIndex)
print filename
save_as_tiff(av, filename)
class Average(ReadableMatrix):
def read(self):
return av.matrix
def getWidth(self):
return eiger.dataMatrix.getWidth()
def getHeight(self):
return eiger.dataMatrix.getHeight()
averager=Average()
set_device_alias(averager, "Image") #Set display name
sensors.append(averager) #sensors.append(eiger.getDataMatrix())
#Initialize vartiables
open_vg10()
if ID=='ID1':
caput('X11PHS-E:OPT',1)
elif ID=='ID2':
caput('X11PHS-E:OPT',2)
elif ID =='ID1_ID2':
caput('X11PHS-E:OPT',3)
put_id_offset(1, OFFSET_ID_1) #offset on ID1
put_id_offset(2, OFFSET_ID_2) #offset on ID2
active_id = 1
current_pol=None
polID1=None
polID2=None
if ID == "ID1":
current_pol=POL_IDS[POL_ID_1] #get_id_pol(1)
put_id_pol(1,current_pol)
caput('X11MA-ID2-GAP:SET',100) #open Gap ID2
elif ID == "ID2":
current_pol=POL_IDS[POL_ID_2]#get_id_pol(2)
put_id_pol(2,current_pol)
caput('X11MA-ID1-GAP:SET',100) #open Gap ID1
elif ID == "ID1_ID2":
polID1=POL_IDS[POL_ID_1]
polID2=POL_IDS[POL_ID_2]
put_id_pol(1,polID1)
put_id_pol(2,polID2)
wait_channel("X11PHS:alldone", 1)
try:
#tscan(rois, 10, 0.1, format="csv", before_read=grab_image, passes = NUMBER_SCANS, tag=tag)
rscan(sync_energy, sensors, RANGES, latency = 0.0 , passes = NUMBER_SCANS, tag=tag, before_read=grab_image, save=SAVE_SPECTRUM)
finally:
if AVERAGE>1:
for i in range(len(rois)):
rois[i].parent.monitored = False # Remove listeners on the image
close_vg10()
eiger.grabMode=eiger.GrabMode.Continuous
eiger.start()