import ch.psi.pshell.epics.ChannelDouble as ChannelDouble run("CPython/wrapper") #t = ChannelDouble("delay (us)", "SINEG01-DICT009-EVR0:Pul0-Delay-SP") #t = ChannelDouble("fine delay (ns)", "SINEG01-DICT009-EVR0:UnivDlyModule0-Delay0-SP") #q = ChannelDouble("charge (pC)", "SINEG01-DICT215:B1_CHARGE") #V = ChannelDouble("DC output (V)", "SINEG01-DICT215:B1_VOLTAGE") #t = ChannelDouble("delay (us)", "S10DI01-DICT113-EVR0:Pul0-Delay-SP") t = ChannelDouble("fine delay (ns)", "S10DI01-DICT113-EVR0:UnivDlyModule0-Delay0-SP") q = ChannelDouble("charge (pC)", "S10DI01-DICT025:B1_CHARGE") V = ChannelDouble("DC output (V)", "S10DI01-DICT025:B1_VOLTAGE") t.initialize() q.initialize() V.initialize() t0 = t.read() #start = 1001.340 #stop = 1001.400 #step = 0.001 #nb = 1 #lat = 0.300 start = 2.2 stop = 12.7 step = 0.1 nb = 5 lat = 0.150 try: q_averager = create_averager(q, nb, lat) V_averager = create_averager(V, nb, lat) V_averager.monitored=True r = lscan(t, (q_averager, V_averager), start, stop, step, latency=lat) delay = r.getPositions(0) charge = [val.mean for val in r.getReadable(0)] chargerms = [val.stdev for val in r.getReadable(0)] volt = [val.mean for val in r.getReadable(1)] voltrms = [val.stdev for val in r.getReadable(1)] finally: t.write(t0) t.close() q.close() V.close() try: i_max = charge.index(max(charge)) min_i, max_i = max(i_max-10, 0), min(i_max+11, len(charge)) (delay_charge_max, charge_max, delay_charge_fit, charge_fit) = extremum(delay[min_i:max_i], charge[min_i:max_i]) print delay_charge_max, charge_max except: raise Exception("Fit failure")