lat = 0.01 sample = 1000 ELECTRON_CHARGE = 1.60217663e-19 BPM1 = "SARBD02-DBPM010:Y1-RT" BPM2 = "SARBD02-DBPM040:Y1-RT" DISP_BPM1 = "SARBD02-DBPM010:DISPERSION-OP" #198.0 mm natural disp. Holylist DISP_BPM2 = "SARBD02-DBPM040:DISPERSION-OP" #397.8 mm natural disp. Holylist SFB_BEAM_DUMP = "SFB_BEAM_DUMP_AR:ONOFF1" LASING_OFF = "Undulators/K_AR_lasing_off.py" LASING_ON = "Undulators/K_AR_taper.py" BUNCH_CHARGE = "SARBD02-DBPM010:Q1-AVG" ELECTRON_ENERGY = "SARCL02-MBND100:P-READ" ENE_BPM1 = "SARBD02-DBPM010:PULSE-ENE-OP" ENE_BPM2 = "SARBD02-DBPM040:PULSE-ENE-OP" ERR_BPM1 = "SARBD02-DBPM010:PULSE-ENE-ERR-OP" ERR_BPM2 = "SARBD02-DBPM040:PULSE-ENE-ERR-OP" y_bpm1 = ChannelDouble(BPM1, BPM1) y_bpm2 = ChannelDouble(BPM2, BPM2) y_bpm2.monitored = True y_bpm1.initialize() y_bpm2.initialize() y_averager_bpm1 = create_averager(y_bpm1, sample, lat) y_averager_bpm2 = create_averager(y_bpm2, sample, lat) feedback_state_init = caget(SFB_BEAM_DUMP) caput(SFB_BEAM_DUMP, 0) bpm1_las_on = y_averager_bpm1.read() bpm2_las_on = y_averager_bpm2.read() run(LASING_OFF) time.sleep(1.0) bpm1_las_off = y_averager_bpm1.read() bpm2_las_off = y_averager_bpm2.read() run(LASING_ON) caput(SFB_BEAM_DUMP, feedback_state_init) y_bpm1.close() y_bpm2.close() bunch_charge = caget(BUNCH_CHARGE) ene_elect = caget(ELECTRON_ENERGY) disp1 = caget(DISP_BPM1) * 1000 disp2 = caget(DISP_BPM2) * 1000 ene_bunch = ene_elect * 1e6 * bunch_charge * 1e-12 dy_bpm1 = bpm1_las_off.mean - bpm1_las_on.mean dy_bpm2 = bpm2_las_off.mean - bpm2_las_on.mean pulse_energy_bpm1 = dy_bpm1 / disp1 * ene_bunch * 1000 pulse_energy_bpm2 = dy_bpm2 / disp2 * ene_bunch * 1000 dy_bpm1_stdev = bpm1_las_off.stdev + bpm1_las_on.stdev dy_bpm2_stdev = bpm2_las_off.stdev + bpm2_las_on.stdev pulse_energy_bpm1_stdev = dy_bpm1_stdev / disp1 * ene_bunch * 1000 pulse_energy_bpm2_stdev = dy_bpm2_stdev / disp2 * ene_bunch * 1000 print(pulse_energy_bpm1, pulse_energy_bpm1_stdev) print(pulse_energy_bpm2, pulse_energy_bpm2_stdev) caput(ENE_BPM1, pulse_energy_bpm1) caput(ERR_BPM1, pulse_energy_bpm1_stdev) caput(ENE_BPM2, pulse_energy_bpm2) caput(ERR_BPM2, pulse_energy_bpm2_stdev)