Sprint Dez/2020
This commit is contained in:
@@ -8,6 +8,7 @@ class LEEM2000(TcpDevice):
|
||||
self._mnemonics = None
|
||||
self._names = None
|
||||
self.high_voltage = Channel("X11MA-ES1-PEEM:UMON", alias = "PEEM high voltage", monitored=True)
|
||||
self.debug = False
|
||||
|
||||
def doInitialize(self):
|
||||
super(LEEM2000, self).doInitialize()
|
||||
@@ -37,7 +38,8 @@ class LEEM2000(TcpDevice):
|
||||
value = float(ret)
|
||||
return value
|
||||
except:
|
||||
self.getLogger().info("Received invalid value for %s: %s" % (name, ret))
|
||||
if self.debug:
|
||||
self.getLogger().info("Received invalid value for %s: %s" % (name, ret))
|
||||
return None
|
||||
|
||||
def set_value(self, name, value, timeout = 1000, retries = 1):
|
||||
|
||||
+36
-7
@@ -86,7 +86,7 @@ def average_frames(source, samples=1, roi=None, wait_next=False, sleep=0, as_flo
|
||||
def integrate_frames(source, samples=1, roi=None, wait_next=False, sleep=0, as_float=True):
|
||||
return integrate_ips(grab_frames(source, samples, roi, wait_next, sleep), as_float)
|
||||
"""
|
||||
def grab_frame(source, roi=None, wait_next=False, outliers_threshold=None, outliers_mask=None):
|
||||
def grab_frame(source, roi=None, wait_next=False, outliers_threshold=None, outliers_mask=None):
|
||||
if outliers_threshold is None:
|
||||
outliers_threshold = get_outliers_threshold()
|
||||
if outliers_mask is None:
|
||||
@@ -94,6 +94,7 @@ def grab_frame(source, roi=None, wait_next=False, outliers_threshold=None, outli
|
||||
|
||||
if wait_next:
|
||||
if str(eiger.grabMode)=="Single":
|
||||
eiger.waitReady(5000)
|
||||
eiger.start()
|
||||
#eiger.getDataArray().waitCacheChange(2000)
|
||||
source.waitNext(20000 + int(eiger.exposure * 1000))
|
||||
@@ -133,6 +134,7 @@ def average_frames(frames):
|
||||
return ret
|
||||
|
||||
|
||||
|
||||
def _timestamp(prec=0):
|
||||
t = time.time()
|
||||
s = time.strftime("%y/%m/%d %H:%M:%S", time.localtime(t))
|
||||
@@ -176,6 +178,7 @@ def save_as_tiff(data, filename, check=False, show = False, parallel=True, metad
|
||||
_save_as_tiff(data, filename, check, show, metadata)
|
||||
|
||||
def trigger_eiger(wait=False):
|
||||
eiger.waitReady(5000)
|
||||
eiger.start()
|
||||
if wait:
|
||||
eiger.waitNewImage(20000)
|
||||
@@ -183,7 +186,7 @@ def trigger_eiger(wait=False):
|
||||
def get_eiger_exposure_readback():
|
||||
return caget("X11MA-ES1-SD1:cam1:AcquireTime_RBV",'f')
|
||||
|
||||
def set_exposure_time(value, check = True, retries=3):
|
||||
def set_exposure_time(value, check = True, retries=5):
|
||||
if value == eiger.getExposure():
|
||||
return
|
||||
started = eiger.isStarted()
|
||||
@@ -238,9 +241,10 @@ def stop_eiger():
|
||||
eiger.stop()
|
||||
eiger.grabMode=eiger.GrabMode.Single
|
||||
eiger.stop()
|
||||
time.sleep(0.3)
|
||||
if eiger.acquire.read() >0:
|
||||
raise Exception("Error stopping Eiger")
|
||||
eiger.waitReady(5000)
|
||||
time.sleep(0.1)
|
||||
#if eiger.acquire.read() >0:
|
||||
# raise Exception("Error stopping Eiger")
|
||||
|
||||
chrono_eiger = Chrono()
|
||||
|
||||
@@ -257,6 +261,7 @@ def init_eiger(exposure=None, check=True, retries=2):
|
||||
set_eiger_number_of_frames(1)
|
||||
if exposure:
|
||||
set_exposure_time(exposure, check)
|
||||
apply_averaging_detector(is_averaging_detector())
|
||||
break
|
||||
except:
|
||||
if i==(retries-1):
|
||||
@@ -275,8 +280,9 @@ def restore_eiger(check=True, retries=2):
|
||||
eiger.setNumImages(1)# Is it relevant?
|
||||
set_eiger_number_of_frames(1, check)
|
||||
set_exposure_time(0.2, check)
|
||||
eiger.grabMode=eiger.GrabMode.Continuous
|
||||
eiger.start()
|
||||
apply_averaging_detector(False)
|
||||
eiger.grabMode=eiger.GrabMode.Continuous
|
||||
eiger.start()
|
||||
chrono_eiger = Chrono()
|
||||
break
|
||||
except:
|
||||
@@ -285,6 +291,29 @@ def restore_eiger(check=True, retries=2):
|
||||
else:
|
||||
print "Error restoring Eiger, retrying " + str(sys.exc_info()[1])
|
||||
|
||||
def is_averaging_detector():
|
||||
return str(get_setting("AVERAGING_DETECTOR")).lower()=="true"
|
||||
|
||||
def apply_averaging_detector(value):
|
||||
if value:
|
||||
caput("X11MA-ES1-SD1:Proc1:EnableCallbacks", True)
|
||||
caput("X11MA-ES1-SD1:Proc1:EnableFilter", True)
|
||||
else:
|
||||
caput("X11MA-ES1-SD1:Proc1:EnableFilter", False)
|
||||
caput("X11MA-ES1-SD1:Proc1:NumFilter", 1)
|
||||
caput("X11MA-ES1-SD1:cam1:NumCycles", 1)
|
||||
|
||||
|
||||
def average_eiger_frames(samples, roi=None, wait_next=False, sleep=0, outliers_threshold=None, outliers_mask=None):
|
||||
if is_averaging_detector():
|
||||
caput("X11MA-ES1-SD1:Proc1:NumFilter", samples)
|
||||
caput("X11MA-ES1-SD1:cam1:NumCycles", samples)
|
||||
return grab_frame(image, roi, wait_next, outliers_threshold, outliers_mask)
|
||||
else:
|
||||
ret = grab_frames(image, samples, roi, wait_next, sleep, outliers_threshold, outliers_mask)
|
||||
return average_frames(ret) if samples > 1 else ret[0]
|
||||
|
||||
|
||||
|
||||
_outliers_mask_timestamp = 0
|
||||
_outliers_mask = None
|
||||
|
||||
@@ -437,6 +437,7 @@ def put_energy(v):
|
||||
def change_energy(v):
|
||||
if v<91 or v>2500:
|
||||
raise Exception ("Invalid energy: " + str(v))
|
||||
print "Setting energy: " + str(v)
|
||||
if DRY_RUN:
|
||||
return
|
||||
put_energy(v)
|
||||
|
||||
@@ -5,14 +5,10 @@ if get_exec_pars().source == CommandSource.ui:
|
||||
SWITCHING = "Tune_Detune"
|
||||
MEASUREMENTS = 4
|
||||
AUTO_SAVE = True
|
||||
EXPOSURE_1 = 1.0
|
||||
AVERAGE_1 = 2.0
|
||||
EXPOSURE = 1.0
|
||||
AVERAGE = 2.0
|
||||
ENERGY_1 = 850.0
|
||||
#POLARIZATION_1 = "Circ_Plus"
|
||||
EXPOSURE_2 = 1.0
|
||||
AVERAGE_2 = 2.0
|
||||
ENERGY_2= 900.0
|
||||
#POLARIZATION_2 = "Circ_Minus"
|
||||
␍
|
||||
|
||||
DRY_RUN = get_dry_run()
|
||||
@@ -21,8 +17,6 @@ SAVE_DIAGS = True
|
||||
|
||||
ID = get_setting("ID")
|
||||
|
||||
EXPOSURE = [EXPOSURE_1, EXPOSURE_2]
|
||||
AVERAGE = [int(AVERAGE_1), int(AVERAGE_2)]
|
||||
ENERGY = [ENERGY_1, ENERGY_2]
|
||||
#POLARIZATION = [POLARIZATION_1, POLARIZATION_2]
|
||||
|
||||
@@ -117,7 +111,7 @@ def save_image_file(frame, cycle=-1, frame_index=0):
|
||||
print filename
|
||||
# log("SV:"+Format(startvoltage,"0.000")+" OB:"+Format(objective,"0.00")+" ST:"+Format(LEEMtemp,"0.0"))
|
||||
|
||||
init_eiger()
|
||||
init_eiger(exposure=EXPOSURE)
|
||||
#print "Startup time: " + str(time.time() - start)
|
||||
try:
|
||||
#Do the measurement loop
|
||||
@@ -132,13 +126,12 @@ try:
|
||||
|
||||
for i in range(2):
|
||||
if (cycle == 1) or (METHOD != "Take_Image"):
|
||||
assert_status_ok()
|
||||
set_exposure_time(EXPOSURE[i])
|
||||
print "--- Grabing " + str(AVERAGE[i])+ " frames - cycle: " + str(cycle) + " step: " + str(i)
|
||||
assert_status_ok()
|
||||
print "--- Grabing " + str(AVERAGE)+ " frames - cycle: " + str(cycle) + " step: " + str(i)
|
||||
#s=time.time()
|
||||
ret = grab_frames(image, AVERAGE[i], roi=None, wait_next=True)
|
||||
av = average_eiger_frames(AVERAGE, roi=None, wait_next=True)
|
||||
#print "--- Time: " + str(time.time() - s)
|
||||
frames.append(average_frames(ret) if AVERAGE[i] > 1 else ret[0])
|
||||
frames.append(av)
|
||||
imageinfo("I")
|
||||
save_image_file(frames[i], cycle, i)
|
||||
|
||||
@@ -150,7 +143,6 @@ try:
|
||||
print "--- Switching polatization..."
|
||||
switch_pol()
|
||||
if METHOD == "Two_Energies":
|
||||
print "--- Switching energy..."
|
||||
change_energy(ENERGY_2)
|
||||
#time.sleep(1)
|
||||
|
||||
|
||||
@@ -59,9 +59,9 @@ if WITH_I0:
|
||||
|
||||
av=None
|
||||
def grab_image(position, scan):
|
||||
global av
|
||||
frames = grab_frames(image, AVERAGE, roi=None, wait_next=True)
|
||||
av = average_frames(frames)
|
||||
global av
|
||||
av = average_eiger_frames(AVERAGE, roi=None, wait_next=True)
|
||||
|
||||
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)
|
||||
|
||||
Reference in New Issue
Block a user