Files
x11ma/script/templates/EnergyScan_img.py
gac-x11ma d6803e82ba
2022-10-05 09:33:25 +02:00

135 lines
3.7 KiB
Python

#Parameters
if (get_exec_pars().source == CommandSource.ui) and (get_exec_pars().script == "EnergyScan_img") :
E1 = 800
E2 = 820
TIME = 1 #min
DELAY = 0.1 #s
FOLDER = get_context().setup.expandPath("{year}_{month}/{date}")
FILE = 'ImageOTF'
ROI = {"Region1": [286, 86, 79, 70], "Region2": [153, 279, 95, 82]}
SAVE_IMAGES=True
EXPOSURE = 0.2
SAVE_DIAGS = True
print "\nStart image energy scan..."
print E1,"eV ->",E2,"eV,",TIME,"min duration,",DELAY,"sec delay"
print "ROIs: ", ROI
#set_exec_pars(format="h5", layout="default")
folder = os.path.expanduser("~/Data1/") + FOLDER + "/";
set_exec_pars(name=FILE)
rois = create_roi_devices(ROI)
class NormROI(Readable):
def __init__(self, roi):
self.roi = roi
def read(self):
return float(self.roi.take())/float(CADC1.take())
def getName(self):
return self.roi.name + " norm"
#sensors = [Ecrbk, eiger.getDataMatrix().getCache(), CADC1]
sensors = [Ecrbk, eiger.getImageCounter().getCache(), CADC1]
for roi in rois:
sensors.append(roi)
sensors.append(NormROI(roi))
#Pre-actions
#if NO_BEAM_CHECK == False:
# print "Wait beam"
# wait_beam()
"""
if MODE is not None:
pol_mode.write(MODE)
if MODE == 'LINEAR':
if ALPHA is not None:
pol_angle.write(ALPHA)
time.sleep(0.5)
if OFFSET is not None:
pol_offset.write(OFFSET)
wait_device(pol_done, "DONE")
"""
energy.write(float(E1))
time.sleep(0.5)
wait_channel(ALL_DONE, 1, type = 'i')
caput('E1', E1)
caput('E2', E2)
caput('TIME', TIME)
caput('FOLDER', FOLDER)
caput('FILE', FILE)
time.sleep(DELAY)
caput('START', '1')
#Pseudo-devices
class Time(Readable):
def __init__(self):
self.start = time.time()
def read(self):
return time.time()-self.start
scan_completed = False
if not get_dry_run() and str(get_setting("AUTO_SWITCH_VALVE")).lower() == "true":
open_vg10()
if not get_dry_run() and str(get_setting("AUTO_SWITCH_SHUTTER")).lower() == "true":
caput(FAST_SHTR, 'Open')
try:
if EXPOSURE != eiger.getExposure():
restore_eiger(exposure_time = EXPOSURE)
caput('START', '1')
#av = create_averager(CADC1, -1, -1)
def monitoring_task():
global scan_completed
time.sleep(1.0)
wait_channel('START', 'STOP', type = 's')
scan_completed = True
get_exec_pars().currentScan.abort()
ret = fork(monitoring_task)
def before_read():
pass
def after_read():
if SAVE_DIAGS:
index = eiger.getImageCounter().take()
filename = get_exec_pars().path + "/" + str(index) + ".tif"
save_as_tiff(image.data, filename, check=False, parallel=True, metadata=(get_diags() if SAVE_DIAGS else {}))
print "Scanning...",
try:
CADC1.alias = "I0"
mscan(image.trigger, sensors, -1, None, async = False, range="auto", domain_axis="Ecrbk", before_read=before_read, after_read=after_read)
finally:
CADC1.alias = None
ret[0].cancel(True)
print "Finished Energy scan."
except:
if not scan_completed:
print sys.exc_info()
print("Aborting...")
while caget('START') == 'START':
caput('START', '0')
time.sleep(0.1)
raise
finally:
if not get_dry_run() and str(get_setting("AUTO_SWITCH_VALVE")).lower() == "true":
close_vg10()
if not get_dry_run() and str(get_setting("AUTO_SWITCH_SHUTTER")).lower() == "true":
caput(FAST_SHTR, 'Close')
restore_eiger()
after_sample() #To call check_id_error()