import ch.psi.pshell.epics.ControlledVariable as ControlledVariable if get_exec_pars().source == CommandSource.ui: start = -10.0 stop = 180.0 step = 5.0 nb = 3 lat = 0.300 else: start = args[0] stop = args[1] step = args[2] nb = int(args[3]) lat = args[4] bphase = ControlledVariable("Beam phase", "SINEG01-RSYS:SET-BEAM-PHASE", "SINEG01-RSYS:GET-BEAM-PHASE") bphase.config.minValue =-180.0 bphase.config.maxValue = 360.0 bphase.config.precision = 3 bphase.config.resolution = 1.0 bphase.config.save() bphase.initialize() st = Stream("Schottky", dispatcher) q = st.addScalar("Charge", "SINEG01-DICT215:B1_CHARGE", 1, 0) st.initialize() st.start() rphase = Channel("SINEG01-RSYS:GET-VSUM-PHASE", type = 'd', alias = 'RF phase') bphase0 = bphase.read() try: q_averager = create_averager(q, nb, 0.100) rphase_averager = create_averager(rphase, nb, 0.100) r = lscan(bphase, (q_averager, rphase_averager), start, stop, step, latency=lat) beamphase = r.getPositions(0) charge = [val.mean for val in r.getReadable(0)] chargerms = [val.stdev for val in r.getReadable(0)] rfphase = [val.mean for val in r.getReadable(1)] rfphaserms = [val.stdev for val in r.getReadable(1)] finally: bphase.write(phase0) bphase.close() st.close() q.close() rphase.close() #Setting the return value index_max = charge.index(max(charge)) rphase_ref = rfphase[index_max] - 80 set_return(rphase_ref) # save the entry in the logbook #if get_option("Generated data file:\n" + get_exec_pars().path +"\n\n" + "Save to ELOG?", "YesNo") == "Yes": # log_msg = "Start: %0.1f" % start + "deg\n" # log_msg = log_msg + "Stop: %0.1f" % stop + "deg\n" # log_msg = log_msg + "Step: %0.1f" % nb + "deg\n" # log_msg = log_msg + "Nb samples: %0.0f" % nb + "\n" # log_msg = log_msg + "Latency: %0.3f" % lat + "s\n" # log_msg = log_msg + "Data file: " + get_exec_pars().path # elog("Schottky Scan", log_msg, get_plot_snapshots())