This commit is contained in:
root
2017-11-15 13:44:56 +01:00
parent d0df2f2537
commit 1ee2b4a865
4 changed files with 72 additions and 119 deletions
-1
View File
@@ -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)
+44
View 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
View File
@@ -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
###################################################################################################