Sprint Dez/2020

This commit is contained in:
gac-x11ma
2020-12-15 08:47:22 +01:00
parent c05f807efb
commit 5f313a0a2b
12 changed files with 960 additions and 760 deletions
+3 -1
View File
@@ -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
View File
@@ -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
+1
View File
@@ -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)
+7 -15
View File
@@ -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)
+3 -3
View File
@@ -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)