From 1ee2b4a8659e36ed4b089c362c4a4ac23d3ee21c Mon Sep 17 00:00:00 2001 From: root Date: Wed, 15 Nov 2017 13:44:56 +0100 Subject: [PATCH] Startup --- script/Devices/Elements.py | 1 - .../{save_snapshot_mult.py => CameraTools.py} | 72 +++++------------- script/Tools/save_camera_data.py | 44 +++++++++++ script/local.py | 74 +++---------------- 4 files changed, 72 insertions(+), 119 deletions(-) rename script/Tools/{save_snapshot_mult.py => CameraTools.py} (69%) create mode 100644 script/Tools/save_camera_data.py diff --git a/script/Devices/Elements.py b/script/Devices/Elements.py index 451b014..98f3033 100644 --- a/script/Devices/Elements.py +++ b/script/Devices/Elements.py @@ -286,7 +286,6 @@ def get_wire_scanners_blms(wire_scan): ret.append(None) return ret - #for w in get_wire_scanners(): # print w, get_wire_scanners_blms(w) diff --git a/script/Tools/save_snapshot_mult.py b/script/Tools/CameraTools.py similarity index 69% rename from script/Tools/save_snapshot_mult.py rename to script/Tools/CameraTools.py index 3dd5946..6d66a98 100644 --- a/script/Tools/save_snapshot_mult.py +++ b/script/Tools/CameraTools.py @@ -1,41 +1,4 @@ -import ch.psi.pshell.imaging.ImageBuffer as ImageBuffer -import java.math.BigInteger as BigInteger -import org.python.core.PyLong as PyLong -import org.python.core.PyFloat as PyFloat -import json -import traceback -import datetime - - -if get_exec_pars().source == CommandSource.ui: - camera_name = "SARBD02-DSCR050_sp1" # "SLG-LCAM-C041_sp" - shared = True - images = 1 - interval = -1 - roi = "" #"[540, 200, 430,100]" -else: - camera_name = args[0] - shared = args[1].lower() == "true" - images = int(args[2]) - interval = int(args[3]) - roi = args[4] - - -set_exec_pars(name="camera_snapshot") - -cam_server.start(camera_name, shared) - -if roi is not None and len(roi.strip())>0: - roi = json.loads(roi) - cam_server.setRoi(roi[0], roi[2], roi[1], roi[3]) - while True: - cam_server.waitNext(10000) - r = json.loads(cam_server.stream.take()["processing_parameters"]) - if roi == r["image_region_of_interest"]: - break; -else: - cam_server.waitNext(10000) - +run("Devices/Elements") def _create_tables( stream_value, paths, data_type, shape): create_dataset(paths["image"], data_type, dimensions = [images, shape[0], shape[1]]) @@ -85,8 +48,21 @@ def _append_frame(stream_value, index, paths, data_type, shape): traceback.print_exc() print "Saved frame: ", index + + +def _write_metadata(camera_name, shared = False, images = 1, interval = -1): + set_attribute("/", "Camera", camera_name) + set_attribute("/", "Shared", shared) + set_attribute("/", "Images", images) + set_attribute("/", "Interval", interval) + cam_type = get_camera_type(camera_name) + set_attribute("/", "Type", cam_type) + if cam_type=="ELECTRONS": + set_attribute("/", "Screen", caget(camera_name + (":POSITION" if (camera_name.startswith("DSRM")) else ":GET_SCREEN1_POS"), 's')) + set_attribute("/", "Filter", caget(camera_name + ":GET_FILTER", 's')) + -def save_camera(camera_name, shared = False, server = cam_server, images = 1, interval = -1, parallel = True, pause = False): +def save_camera_data(server, camera_name, shared = False, images = 1, interval = -1, parallel = True, pause = False): stream_value = server.stream.take() if stream_value is None: server.waitNext(10000) @@ -94,15 +70,7 @@ def save_camera(camera_name, shared = False, server = cam_server, images = 1, in paths = {"image":"/image", "pid":"/pulse_id", "timestamp_str":"/timestamp_str"} shape = [stream_value.getValue("height"),stream_value.getValue("width")] - - data_type = type(stream_value.getValue("image")[0]) - if data_type== float: data_type = 'f' - elif data_type == short: data_type = 'h' - elif data_type == int: data_type = 'i' - elif data_type == long: data_type = 'l' - elif data_type == byte: data_type = 'b' - else: data_type = 'd' - print "Data type: ", data_type + data_type = stream_value.getValue("image").typecode tasks = [] if pause: @@ -110,6 +78,7 @@ def save_camera(camera_name, shared = False, server = cam_server, images = 1, in try: for i in range(images): if i==0: + _write_metadata(camera_name, shared, images, interval) _create_tables(stream_value, paths, data_type, shape) start = time.time() @@ -133,10 +102,3 @@ def save_camera(camera_name, shared = False, server = cam_server, images = 1, in print "Waiting finish persisting..." join(tasks) print "Done" - -save_camera(camera_name, shared, cam_server, images, interval, True, True) - - -data_file = get_exec_pars().path - -set_return(data_file) \ No newline at end of file diff --git a/script/Tools/save_camera_data.py b/script/Tools/save_camera_data.py new file mode 100644 index 0000000..1677537 --- /dev/null +++ b/script/Tools/save_camera_data.py @@ -0,0 +1,44 @@ +import ch.psi.pshell.imaging.ImageBuffer as ImageBuffer +import java.math.BigInteger as BigInteger +import org.python.core.PyLong as PyLong +import org.python.core.PyFloat as PyFloat +import json +import traceback +import datetime + + +if get_exec_pars().source == CommandSource.ui: + camera_name = "SARBD02-DSCR050_sp1" # "SLG-LCAM-C041_sp" + shared = True + images = 1 + interval = -1 + roi = "" #"[540, 200, 430,100]" +else: + camera_name = args[0] + shared = args[1].lower() == "true" + images = int(args[2]) + interval = int(args[3]) + roi = args[4] + +run("Tools/CameraTools") +set_exec_pars(name="camera_snapshot") + +cam_server.start(camera_name, shared) + +if roi is not None and len(roi.strip())>0: + roi = json.loads(roi) + cam_server.setRoi(roi[0], roi[2], roi[1], roi[3]) + while True: + cam_server.waitNext(10000) + r = json.loads(cam_server.stream.take()["processing_parameters"]) + if roi == r["image_region_of_interest"]: + break; +else: + cam_server.waitNext(10000) + +save_camera_data(cam_server, camera_name, shared, images, interval, parallel=True, pause=True) + +cam_server.stop() + +data_file = get_exec_pars().path +set_return(data_file) \ No newline at end of file diff --git a/script/local.py b/script/local.py index 4f41b98..c7657fc 100755 --- a/script/local.py +++ b/script/local.py @@ -308,72 +308,20 @@ def wait_cam_server_background(background, timeout = 10000): raise Exception("Timeout waiting for camera server background: " + str(background)) time.sleep(0.01) -################################################################################################### -# Camtool -################################################################################################### -def wait_camtool_message(number_messages = 1, timeout = 10000): - for i in range (number_messages): - if not camtool.stream.waitCacheChange(timeout): - raise Exception("Timeout receiving from Camtool") - -def get_camtool_stats(number_images=1, async = True, interval=-1, good_region = False): - ret = [] - wait_camtool_message() - prefix = "gr_" if good_region else "" - for ident in [prefix+"x_center_of_mass", prefix+"y_center_of_mass", prefix+"x_rms", prefix+"y_rms"]: - child = camtool.stream.getChild(ident) - av = create_averager(child, number_images, interval) - av.monitored = async - ret.append(av) - return ret +def get_camera_type(camera_name): + if camera_name.contains("LCAM"): return "LASER" + if camera_name.contains("DSCR") or \ + camera_name.contains("DSRM") or \ + camera_name.contains("DLAC"): return "ELECTRONS" + if camera_name.contains("PROF") or \ + camera_name.contains("PPRM") or \ + camera_name.contains("PSSS") or \ + camera_name.contains("PSCR") or \ + camera_name.contains("PSRD"): return "ELECTRONS" + return "UNKNOWN" -#Managing local camtool server -CAMTOOL_SERVER_SCRIPT = "camtool_pshell" #"cam_server" -PRINT_CAMTOOL_OUTPUT = True #When process quit -def _get_camtool_port(): - return camtool.url[camtool.url.rfind(":")+1:] - -def is_camtool_running(): - """ - """ - return int(exec_cmd("pgrep " + CAMTOOL_SERVER_SCRIPT + " | wc -l")) > 0 - #return int(exec_cmd('pgrep -f "' + CAMTOOL_SERVER_SCRIPT + ' -p ' + _get_camtool_port() + '" | wc -l')) > 0 - -def kill_camtool(): - """ - Kill the private camtool instance and child pocesses - """ - #return exec_cmd("killall -9 " + CAMTOOL_SERVER_SCRIPT) - return exec_cmd('pkill -f " \-p ' + _get_camtool_port() + '"') - -def _run_camtool(): - try: - #cmd = "source /opt/gfa/python\n" - cmd = CAMTOOL_SERVER_SCRIPT + " -p " + _get_camtool_port() + " -b /afs/psi.ch/intranet/SF/Applications/config/camtool_n" - if not PRINT_CAMTOOL_OUTPUT: - cmd = cmd + " > /dev/null 2>&1" - print "Executing: ", cmd - print exec_cmd(cmd) - except: - import traceback - print >> sys.stderr, traceback.format_exc() - -def check_camtool(): - """ - Checks if private camtool server is running, otherwise starts it. - """ - if is_camtool_running(): - return False - print "Staring Camtool" - fork(_run_camtool) - start =time.time() - while not is_camtool_running(): - if time.time() - start > 2.0: - raise Exception("Error starting camtool process") - time.sleep(3.0) - ################################################################################################### # Camera scans ###################################################################################################