Startup
This commit is contained in:
@@ -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)
|
||||
|
||||
|
||||
@@ -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)
|
||||
@@ -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)
|
||||
+11
-63
@@ -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
|
||||
###################################################################################################
|
||||
|
||||
Reference in New Issue
Block a user