122 lines
3.6 KiB
Python
Executable File
122 lines
3.6 KiB
Python
Executable File
#If running from editor
|
|
if get_exec_pars().source == CommandSource.ui:
|
|
ROI = {"Region1": [10,5,20, 10], "Region2": [20,15,20, 10]}
|
|
SAVE_SPECTRUM = True
|
|
SAVE_IMAGES = True
|
|
WITH_I0 = True
|
|
SWITCH_POL = False
|
|
EXPOSURE = 1.0
|
|
AVERAGE = 2
|
|
NUMBER_SCANS =1
|
|
RANGES = [[500.0, 1000.0, 100.0]]
|
|
|
|
DRY_RUN = True
|
|
SAVE_DIAGS = False
|
|
|
|
log("ROIs: " + str(ROI))
|
|
|
|
if len(RANGES) == 0:
|
|
raise Exception("No scan range defined")
|
|
|
|
start = time.time()
|
|
|
|
#eiger.stop()
|
|
#eiger.grabMode=eiger.GrabMode.Single
|
|
time.sleep(0.3)
|
|
#set_exposure_time(EXPOSURE)
|
|
|
|
set_exec_pars(path="{data}/{year}_{month}/{date}/{seq}%03d_AbsortionSpectrum", format="csv", layout="table")
|
|
tag= "AbsortionSpectrum_{seq}%03d_{count}%02d"
|
|
|
|
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)
|
|
frames = []
|
|
for j in range( AVERAGE):
|
|
frames.append(Data(Arr.indexesDouble(600),30,20))
|
|
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)
|
|
filename = get_exec_pars().path + "/" + str(scan.currentPass) + "/s" + "{seq}%03d" + "_" + ("%03d.tif" % scan.recordIndex)
|
|
filename = get_context().setup.expandPath(filename)
|
|
print filename
|
|
save_as_tiff(av, filename, metadata=(get_diags() if SAVE_DIAGS else {}))
|
|
|
|
class Average(ReadableMatrix):
|
|
def read(self):
|
|
return av.matrix
|
|
def getWidth(self):
|
|
return 30 #eiger.dataMatrix.getWidth()
|
|
def getHeight(self):
|
|
return 20 #eiger.dataMatrix.getHeight()
|
|
averager=Average()
|
|
set_device_alias(averager, "Image") #Set display name
|
|
sensors.append(averager) #sensors.append(eiger.getDataMatrix())
|
|
|
|
#Initialize vartiables
|
|
if not DRY_RUN and str(get_setting("AUTO_SWITCH_VALVE")).lower() == "true":
|
|
open_vg10()
|
|
|
|
#put_id_offset(1, OFFSET_ID_1) #offset on ID1
|
|
#put_id_offset(2, OFFSET_ID_2) #offset on ID2
|
|
|
|
|
|
|
|
"""
|
|
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-Ivg10D1-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, split=True, keep=False)
|
|
finally:
|
|
if AVERAGE>1:
|
|
for i in range(len(rois)):
|
|
rois[i].parent.monitored = False # Remove listeners on the image
|
|
if not DRY_RUN and str(get_setting("AUTO_SWITCH_VALVE")).lower() == "true":
|
|
close_vg10()
|
|
#restore_eiger()
|
|
print "Running time: " + str(time.time() - start) |