Update scripts and plugins to 2.0

This commit is contained in:
2025-08-04 12:38:24 +02:00
parent b45d3b4202
commit b631d4c589
44 changed files with 347 additions and 350 deletions
@@ -28,7 +28,7 @@ if SHOW_COMPOSITE_IMG:
def before_read(pos, scan):
trigger_peemcam()
ProviderTIFF.setMetadata(get_diags())
FormatTIFF.setMetadata(get_diags())
def after_read(rec, scan):
x,y = rec.index%bins_x, rec.index/bins_x
@@ -32,7 +32,7 @@ if SHOW_COMPOSITE_IMG:
def before_read(pos, scan):
trigger_peemcam()
ProviderTIFF.setMetadata(get_diags())
FormatTIFF.setMetadata(get_diags())
def after_read(rec, scan):
x,y = rec.index%bins_x, rec.index/bins_x
+2 -2
View File
@@ -24,6 +24,6 @@
#roi_contrast.read()
#image_contrast.read()
lscan([slit_motion], [image.contrast], [-10500.0], [-6500.0], [100.0], latency=0.0, relative=False, passes=1, zigzag=False, title='slit', keep=False, name='test', layout='table', provider='txt')
lscan([slit_motion], [image.contrast], [-10500.0], [-6500.0], [100.0], latency=0.0, relative=False, passes=1, zigzag=False, title='slit', keep=False, name='test', layout='table', format='txt')
#cscan([slit_motion], ['ca://X11MA-PC-ET7000:SW-K3'], [-9700.0], [-9500.0], [1.0], latency=2.0, time=1.0, relative=False, passes=1, zigzag=False, title='testslit', keep=False, name='Unknown')
#lscan([objective], ['ca://X11MA-ES1-PREP:PRESSURE'], [1475.0], [1485.0], [2.0], latency=10.0, relative=False, passes=1, zigzag=False, title='test', keep=False, name='testt', layout='default', provider='txt')
#lscan([objective], ['ca://X11MA-ES1-PREP:PRESSURE'], [1475.0], [1485.0], [2.0], latency=10.0, relative=False, passes=1, zigzag=False, title='test', keep=False, name='testt', layout='default', format='txt')
@@ -25,7 +25,7 @@ abs_spec(ranges="Fe_L3_fine", roi="test", switch_pol=False, scans=1, exposure=EX
#eiger_threshold.write(7500)
#eiger.start()
#tscan(['ca://X11MA-PC-ET7000:SW-K'], points=10, interval=1.0, title='temperature', keep=False, name='tewsst', layout='table', provider='txt', auto_range=True, domain_axis='Time')
#tscan(['ca://X11MA-PC-ET7000:SW-K'], points=10, interval=1.0, title='temperature', keep=False, name='tewsst', layout='table', format='txt', auto_range=True, domain_axis='Time')
#Direct functions to change energy, pol, offset:
#change_energy(700)
+4 -5
View File
@@ -5,7 +5,7 @@ import ch.psi.pshell.imaging.Pen as Pen
import java.awt.Rectangle as Rectangle
import ch.psi.pshell.imaging.Data as Data
import ch.psi.pshell.device.Camera.DataType as DataType
import ch.psi.utils.Chrono as Chrono
import ch.psi.pshell.utils.Chrono as Chrono
import subprocess
#GRAB_MIN_TIME = 1000
@@ -463,10 +463,9 @@ if False:
add_device(RoiIntensity("Region1", image, 10, 5, 20, 10), True)
add_device(RoiIntensity("Region2", image, 10, 5, 40, 20), True)
import ch.psi.pshell.data.ProviderCSV as ProviderCSV
ProviderCSV.setDefaultItemSeparator(" ")
tscan((Region1, Region2), 10, 0.1, layout="table", provider = "csv")
FormatCSV.setDefaultItemSeparator(" ")
tscan((Region1, Region2), 10, 0.1, layout="table", format = "csv")
ret = grab_frames(image, 10, sleep=0.1)
av = integrate_frames(ret)
+3 -3
View File
@@ -39,9 +39,9 @@ def load_corr_stack(title="Corr", show=False):
return load_stack(title, file_list, show)
def instantiate_dynamic_class(name):
if get_context().getPluginManager().getDynamicClass(name) is None:
get_context().getPluginManager().loadInitializePlugin(name + ".java")
return get_context().getClassByName(name).newInstance()
if get_plugin_manager().getDynamicClass(name) is None:
get_plugin_manager().loadInitializePlugin(name + ".java")
return Context.getClassByName(name).newInstance()
def complex_edge_filtering(imp, complex=True, g_sigma=3.0, g_resolution=1e-4, show=False, java_code=False):
+10 -21
View File
@@ -1,16 +1,5 @@
###################################################################################################
# Deployment specific global definitions - executed after startup.py
###################################################################################################
import ntpath
import traceback
from rsync import *
from mathutils import estimate_peak_indexes, fit_gaussians, create_fit_point_list, Gaussian
from mathutils import fit_polynomial,fit_gaussian, fit_harmonic, calculate_peaks
from mathutils import PolynomialFunction, Gaussian, HarmonicOscillator
from collections import OrderedDict
ProviderCSV.setDefaultItemSeparator(", ")
get_context().dataManager.createLogs=False
FormatCSV.setDefaultItemSeparator(", ")
get_data_manager().createLogs=False
IMAGING_ROI = None
@@ -226,7 +215,7 @@ def convert_file(input_file_name, output_file_name, pol = None):
out.write(Ecrbk + s + CADC1 + s + CADC2 + s + CADC3 + s + normtey + s + normdiode + line_sep)
except:
traceback.print_exc()
#os.rename(input_file_name, get_context().setup.expandPath("{data}/OTF/" + ntpath.basename(input_file_name)))
#os.rename(input_file_name, Setup.expandPath("{data}/OTF/" + ntpath.basename(input_file_name)))
def convert_file_full(input_file_name, output_file_name, pol = None):
print "Converting data file: " + input_file_name + " to " + output_file_name
@@ -258,7 +247,7 @@ def convert_file_full(input_file_name, output_file_name, pol = None):
out.write(Ecrbk + s + CADC1 + s + CADC2 + s + CADC3 + s + CADC4 + s + CADC5 + s + mcurr + s + time + s + fieldx + s + fieldz + s + str(pol) + s + temp + s + normtey + s + normdiode + line_sep)
except:
traceback.print_exc()
#os.rename(input_file_name, get_context().setup.expandPath("{data}/OTF/" + ntpath.basename(input_file_name)))
#os.rename(input_file_name, Setup.expandPath("{data}/OTF/" + ntpath.basename(input_file_name)))
###################################################################################################
#Scan commands
@@ -268,7 +257,7 @@ def otf(start, end, time, delay = 0.0, mode = None, offset = None, alpha = None,
"""
if name is None:
name = get_exec_pars().name
#folder = get_context().setup.expandPath("{year}_{month}/{date}");
#folder = Setup.expandPath("{year}_{month}/{date}");
run("templates/EnergyScan", {"E1":start, "E2":end, "TIME":time, "DELAY":float(delay), "MODE":mode, "OFFSET":(offset), "FOLDER":folder, "FILE":name, "ALPHA":float(alpha) if alpha is not None else None})
def otf2(start, end, time, delay = 0.0, mode = None, offset = None, alpha = None, name = None, folder = 'TEST'):
@@ -280,7 +269,7 @@ def otf2(start, end, time, delay = 0.0, mode = None, offset = None, alpha = None
run("templates/EnergyScan_v4", {"E1":start, "E2":end, "TIME":time, "DELAY":float(delay), "MODE":mode, "OFFSET":(offset), "FOLDER":folder, "FILE":name, "TAG":name, "ALPHA":float(alpha) if alpha is not None else None})
def otf_img(start, end, time, delay = 0.0, exposure=0.2, roi=None, name = None, save_images=False):
folder = get_context().setup.expandPath("{year}_{month}/{date}");
folder = Setup.expandPath("{year}_{month}/{date}");
if is_string(roi):
with open(expand_path("{config}/ROIs/" + roi + ".roi"), 'rb') as f:
roi = OrderedDict()
@@ -698,12 +687,12 @@ def on_change_data_path(path):
#Sounds
###################################################################################################
def on_command_started(info):
if not get_context().isLocalMode():
if not get_interpreter().isLocalMode():
if info.script and not info.background:
play_sound("start")
def on_command_finished(info):
if not get_context().isLocalMode():
if not get_interpreter().isLocalMode():
if info.script and not info.background:
if (info.isError()):
if not info.isAborted():
@@ -712,12 +701,12 @@ def on_command_finished(info):
play_sound("success")
import ch.psi.utils.Audio as Audio
import ch.psi.pshell.utils.Audio as Audio
import java.io.File as File
def play_sound(name):
try:
Audio.playFile(File(get_context().setup.expandPath("{home}/sounds/" + name + ".wav")), False)
Audio.playFile(File(Setup.expandPath("{home}/sounds/" + name + ".wav")), False)
except:
#TODO: sound does not work when logged as e-account
if not Sys.getUserName().startswith("e"):
+9 -9
View File
@@ -33,12 +33,12 @@ class DataLayout( ch.psi.pshell.data.LayoutTable):
data_file = time.strftime('%Y%m%d_%H%M') + '_' + get_exec_pars().name + '_' + str(get_exec_pars().count).zfill(4)
print "Opened data file: " + get_exec_pars().path + "/" + data_file
return data_file
get_context().dataManager.setLayout(DataLayout())
get_data_manager.setLayout(DataLayout())
"""
#Reading Energy Scan configuration file
def getPars(element):
f = open(get_context().setup.getConfigPath() + '/energy_scan.properties')
f = open(Setup.getConfigPath() + '/energy_scan.properties')
try:
for line in f:
tokens = line.split("=")
@@ -157,7 +157,7 @@ def convert_file(input_file_name, output_file_name, pol = None):
out.write(Ecrbk + s + CADC1 + s + CADC2 + s + CADC3 + s + CADC4 + s + CADC5 + s + MCurr + s + time + s + MAGX + s + MAGZ + s + str(pol) + s + EXPT + s + normtey + s + normdiode + line_sep)
except:
traceback.print_exc()
os.rename(input_file_name, get_context().setup.expandPath("{data}/OTF/" + ntpath.basename(input_file_name)))
os.rename(input_file_name, Setup.expandPath("{data}/OTF/" + ntpath.basename(input_file_name)))
def plot_file(file_name, title = None):
"""
@@ -171,7 +171,7 @@ def elog(title, message, attachments = [], author = None, category = "Info", dom
Add entry to ELOG.
"""
if author is None:
author = "pshell" #get_context().user.name
author = "pshell" #Context.getUserName()
typ = "pshell"
entry = ""
@@ -196,7 +196,7 @@ def elog(title, message, attachments = [], author = None, category = "Info", dom
raise Exception(err)
print out
def get_plot_snapshots(title = None, file_type = "png", temp_path = get_context().setup.getContextPath()):
def get_plot_snapshots(title = None, file_type = "png", temp_path = Setup.getContextPath()):
"""
Returns list with file names of plots snapshots from a plotting context.
"""
@@ -214,12 +214,12 @@ def get_plot_snapshots(title = None, file_type = "png", temp_path = get_context(
# Controller state listener
###################################################################################################
#class Listener(ControllerListener):
# def onControllerStateChanged(self, state, former):
#class Listener(InterpreterListener):
# def onStateChanged(self, state, former):
# global FILENAME
# if former == State.Busy:
# FILENAME = None
#get_context().addListener(Listener()) #Old listeners are cleande in startup
#get_interpreter().addListener(Listener()) #Old listeners are cleande in startup
###################################################################################################
@@ -444,7 +444,7 @@ def otf(start, end, time, delay=0.0, mode = None, offset = None, alpha = None, n
"""
if name is None:
name = get_exec_pars().name
folder = get_context().setup.expandPath("{year}_{month}/{date}");
folder = Setup.expandPath("{year}_{month}/{date}");
run("EnergyScan", {"E1":start, "E2":end, "TIME":time, "DELAY":float(delay), "MODE":mode, "OFFSET":(offset), "FOLDER":folder, "FILE":name, "ALPHA":alpha})
def hyst_cont(field, init_field, final_field, ramp_speed, energies):
+4 -4
View File
@@ -45,7 +45,7 @@ def get_image_file_name(cycle=-1, frame_index=0, short_name=False, shifted=False
root = "" if short_name else (data_path + "/")
abs_index=run_index + frame_index
max_index= max(max_index, frame_index)
prefix = get_context().setup.expandPath("i{date}%02d_" + ("%03d" % (abs_index,)))
prefix = Setup.expandPath("i{date}%02d_" + ("%03d" % (abs_index,)))
if cycle < 0:
if (shifted):
@@ -54,7 +54,7 @@ def get_image_file_name(cycle=-1, frame_index=0, short_name=False, shifted=False
else:
prefix = prefix + ("_corr/c" if shifted else "/")
ret= root + prefix + "i{date}%02d"+ ("_%03d#%03d" % (abs_index,cycle)) + ".tif"
return get_context().setup.expandPath(ret)
return Setup.expandPath(ret)
"""
@@ -126,7 +126,7 @@ def save_image_file(frame, cycle=-1, frame_index=0, processed_shift=False):
init_eiger(exposure=EXPOSURE)
run_index = get_context().getDaySequentialNumber()
run_index = Context.getDaySequentialNumber()
print " ---- Run index : %d" %(run_index,)
max_index=0
@@ -244,7 +244,7 @@ try:
print " ---- New un index : %d" %(run_index,)
finally:
for i in range(max_index):
get_context().incrementDaySequentialNumber()
Context.incrementDaySequentialNumber()
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":
@@ -36,12 +36,12 @@ threads = []
#path = "{data}/{year}_{month}/{date}" + "/" + "{seq}%03d_" + METHOD
#set_exec_pars(path= path, format="txt", layout="table", open=True)
#data_path = get_context().setup.expandPath(path)
#data_path = Setup.expandPath(path)
data_path = "{data}/{year}_{month}/{date}/{date}_{name}"
set_exec_pars(name=METHOD, path = data_path, format="txt", layout="table", open=True)
#data_path = get_exec_pars().path
#get_context().incrementFileSequentialNumber()
Context.incrementFileSequentialNumber()
def get_image_file_name(cycle=-1, frame_index=0, short_name=False):
@@ -49,17 +49,17 @@ def get_image_file_name(cycle=-1, frame_index=0, short_name=False):
if (METHOD == "Two_Pol") and (SEQUENCE == "A") and (frame_index<2) and ((cycle%2)==0): #Swapped
frame_index = 0 if frame_index else 1
root = "" if short_name else (data_path + "/")
#prefix = get_context().setup.expandPath("i{seq}%03d" + "_" + ("%d" % frame_index))
#prefix = Setup.expandPath("i{seq}%03d" + "_" + ("%d" % frame_index))
abs_index=run_index + frame_index
max_index= max(max_index, frame_index)
#prefix = get_context().setup.expandPath("i{date}%02d_{seq}%03d")
prefix = get_context().setup.expandPath("i{date}%02d_" + ("%03d" % (abs_index,)))
#prefix = Setup.expandPath("i{date}%02d_{seq}%03d")
prefix = Setup.expandPath("i{date}%02d_" + ("%03d" % (abs_index,)))
if cycle < 0:
ret = root + prefix + ".tif"
else:
ret= root + prefix + "/i{date}%02d"+ ("_%03d#%03d" % (abs_index,cycle)) + ".tif"
return get_context().setup.expandPath(ret)
return Setup.expandPath(ret)
@@ -102,7 +102,7 @@ def save_image_file(frame, cycle=-1, frame_index=0):
init_eiger(exposure=EXPOSURE)
run_index = get_context().getDaySequentialNumber()
run_index = Context.getDaySequentialNumber()
print " ---- Run index : %d" %(run_index,)
max_index=0
@@ -213,7 +213,7 @@ try:
#set_exec_pars(then_success="run('templates/Eiger2Img')")
"""
get_context().incrementDaySequentialNumber()
Context.incrementDaySequentialNumber()
set_exec_pars(open=False)
set_exec_pars(open=True)
@@ -234,7 +234,7 @@ try:
print " ---- New un index : %d" %(run_index,)
finally:
for i in range(max_index):
get_context().incrementDaySequentialNumber()
Context.incrementDaySequentialNumber()
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":
+9 -9
View File
@@ -36,12 +36,12 @@ threads = []
#path = "{data}/{year}_{month}/{date}" + "/" + "{seq}%03d_" + METHOD
#set_exec_pars(path= path, format="txt", layout="table", open=True)
#data_path = get_context().setup.expandPath(path)
#data_path = Setup.expandPath(path)
data_path = "{data}/{year}_{month}/{date}/{date}_{name}"
set_exec_pars(name=METHOD, path = data_path, format="txt", layout="table", open=True)
#data_path = get_exec_pars().path
#get_context().incrementFileSequentialNumber()
#Context.incrementFileSequentialNumber()
def get_image_file_name(cycle=-1, frame_index=0, short_name=False):
@@ -49,17 +49,17 @@ def get_image_file_name(cycle=-1, frame_index=0, short_name=False):
if (METHOD == "Two_Pol") and (SEQUENCE == "A") and (frame_index<2) and ((cycle%2)==0): #Swapped
frame_index = 0 if frame_index else 1
root = "" if short_name else (data_path + "/")
#prefix = get_context().setup.expandPath("i{seq}%03d" + "_" + ("%d" % frame_index))
#prefix = Setup.expandPath("i{seq}%03d" + "_" + ("%d" % frame_index))
abs_index=run_index + frame_index
max_index= max(max_index, frame_index)
#prefix = get_context().setup.expandPath("i{date}%02d_{seq}%03d")
prefix = get_context().setup.expandPath("i{date}%02d_" + ("%03d" % (abs_index,)))
#prefix = Setup.expandPath("i{date}%02d_{seq}%03d")
prefix = Setup.expandPath("i{date}%02d_" + ("%03d" % (abs_index,)))
if cycle < 0:
ret = root + prefix + ".tif"
else:
ret= root + prefix + "/i{date}%02d"+ ("_%03d#%03d" % (abs_index,cycle)) + ".tif"
return get_context().setup.expandPath(ret)
return Setup.expandPath(ret)
@@ -101,7 +101,7 @@ def save_image_file(frame, cycle=-1, frame_index=0):
init_eiger(exposure=EXPOSURE)
run_index = get_context().getDaySequentialNumber()
run_index = Context.getDaySequentialNumber()
print " ---- Run index : %d" %(run_index,)
max_index=0
@@ -207,7 +207,7 @@ try:
#set_exec_pars(then_success="run('templates/Eiger2Img')")
"""
get_context().incrementDaySequentialNumber()
Context.incrementDaySequentialNumber()
set_exec_pars(open=False)
set_exec_pars(open=True)
@@ -228,7 +228,7 @@ try:
print " ---- New un index : %d" %(run_index,)
finally:
for i in range(max_index):
get_context().incrementDaySequentialNumber()
Context.incrementDaySequentialNumber()
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":
+2 -2
View File
@@ -69,14 +69,14 @@ def grab_image(position, scan):
#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)
filename = Setup.expandPath(filename)
print filename
metadata = get_diags() if SAVE_DIAGS else {}
save_as_tiff(av, filename, metadata=metadata)
if DRIFT_CORRECTION and (calc_roi is not None):
global ref_image
filename = get_exec_pars().path + "/" + str(scan.currentPass) + "_corr/cs" + "{seq}%03d" + "_" + ("%03d.tif" % scan.recordIndex)
filename = get_context().setup.expandPath(filename)
filename = Setup.expandPath(filename)
if ref_image is None:
ref_image = av
save_as_tiff(av, filename, metadata=metadata)
+1 -1
View File
@@ -4,7 +4,7 @@ if (get_exec_pars().source == CommandSource.ui) and (get_exec_pars().script == "
E2 = 820
TIME = 1 #min
DELAY = 0.1 #s
FOLDER = get_context().setup.expandPath("{year}_{month}/{date}")
FOLDER = Setup.expandPath("{year}_{month}/{date}")
FILE = 'ImageOTF'
ROI = {"Region1": [286, 86, 79, 70], "Region2": [153, 279, 95, 82]}
SAVE_IMAGES=True
+1 -1
View File
@@ -13,7 +13,7 @@ def grab_image(position, scan):
av = average_frames(frames)
if True:
filename = get_exec_pars().path + "/" + ("%03d.tif" % scan.recordIndex)
filename = get_context().setup.expandPath(filename)
filename = Setup.expandPath(filename)
print filename
save_as_tiff(av, filename, parallel=True)
+4 -4
View File
@@ -38,8 +38,8 @@ threads = []
path = "{data}/{year}_{month}/{date}" + "/" + "{seq}%03d_" + METHOD
set_exec_pars(path= path, format="txt", layout="table", open=True)
data_path = get_context().setup.expandPath(path)
#get_context().incrementFileSequentialNumber()
data_path = Setup.expandPath(path)
#Context.incrementFileSequentialNumber()
def get_image_file_name(cycle=-1, frame_index=0, short_name=False):
root = "" if short_name else (data_path + "/")
@@ -47,7 +47,7 @@ def get_image_file_name(cycle=-1, frame_index=0, short_name=False):
ret = root + "i"+"{seq}%03d" + "_" + ("%d" % frame_index) + ".tif"
else:
ret= root + ("%d/" % frame_index) + "i"+"{seq}%03d" + "_" + str(cycle) + ("_%d" % frame_index) + ".tif"
ret = get_context().setup.expandPath(ret)
ret = Setup.expandPath(ret)
return ret
@@ -59,7 +59,7 @@ def getLEEM():
LEEMtemp=getLEEMtemp()
"""
set_exec_pars(path= path, format="txt", layout="table", open=True)
data_path = get_context().setup.expandPath(path)
data_path = Setup.expandPath(path)
+1 -1
View File
@@ -67,7 +67,7 @@ def grab_image(position, scan):
#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)
filename = Setup.expandPath(filename)
print filename
save_as_tiff(av, filename, metadata=(get_diags() if SAVE_DIAGS else {}))
+1 -1
View File
@@ -28,7 +28,7 @@ if SHOW_COMPOSITE_IMG:
def before_read(pos, scan):
trigger_peemcam()
ProviderTIFF.setMetadata(get_diags())
FormatTIFF.setMetadata(get_diags())
def after_read(rec, scan):
x,y = rec.index%bins_x, rec.index/bins_x
+1 -1
View File
@@ -44,7 +44,7 @@ def convert_file(input_file_name, output_file_name, pol = None):
out.write(Ecrbk + s + CADC1 + s + CADC2 + s + CADC3 + s + normtey + s + str(pol) + line_sep)
except:
traceback.print_exc()
os.rename(input_file_name, get_context().setup.expandPath("{data}/OTF/" + ntpath.basename(input_file_name)))
os.rename(input_file_name, Setup.expandPath("{data}/OTF/" + ntpath.basename(input_file_name)))
"""
##################### Plotting function #############################
"""