diff --git a/script/local.py b/script/local.py index 6ff0661..7c9e694 100644 --- a/script/local.py +++ b/script/local.py @@ -85,6 +85,14 @@ def trigger_detectors(position, scan): count_id = + 1 close_shutter() + +def save_metadata(rec): + if get_exec_pars().persist: + if rec.index == 0: + create_diag_datasets() + append_diag_datasets() + + """ #get_counts @@ -109,8 +117,49 @@ def trigger_detectors(position, scan): """ +diag_channels = [ phi.readback, \ + omegaH.readback, + nu.readback,\ + omegaV.readback, \ + alpha.readback, \ + delta.readback, \ + gamma.readback, \ + xv.readback, \ + y1.readback, \ + y2.readback, \ + y3.readback, \ + trx.readback, \ + thy.readback, \ + ] -MOTOR_READBACKS = phi.readback, omegaH.readback, nu.readback, omegaV.readback, alpha.readback, delta.readback, gamma.readback, \ - xv.readback, y1.readback, y2.readback, y3.readback, trx.readback, thy.readback + +def get_diag_name(diag): + return ch.psi.utils.Str.toTitleCase(diag.getName()).replace(" ", "") + +def print_diag(): + for f in diag_channels: + print "%-25s %s" % (get_diag_name(f) , str(f.read())) + +def create_diag_datasets(parent = None): + if parent is None: + parent = get_exec_pars().group + group = parent + "meta/" + print "Creating ", group + for f in diag_channels: + create_dataset(group+get_diag_name(f) , 's' if (type(f) is ch.psi.pshell.epics.ChannelString) else 'd') + +def append_diag_datasets(parent = None): + if parent is None: + parent = get_exec_pars().group + group = parent + "meta/" + for f in diag_channels: + try: + x = f.read() + if x is None: + x = '' if (type(f) is ch.psi.pshell.epics.ChannelString) else float('nan') + append_dataset(group+get_diag_name(f), x) + except: + log("Error sampling " + str(get_diag_name(f)) + ": " + str(sys.exc_info()[1])) + #PSEUDO_DEVICES = h, k, l, lambda \ No newline at end of file