Files
sf-op/script/Undulators/EnergyLoss_AT.py
2025-12-15 16:53:16 +01:00

54 lines
2.1 KiB
Python

lat = 0.01
sample = 1000
ELECTRON_CHARGE = 1.60217663e-19
BPM1 = "SATBD02-DBPM010:Y2-RT"
BPM2 = "SATBD02-DBPM040:Y2-RT"
DISP_BPM1 = "SATBD02-DBPM010:DISPERSION-OP" #198.0 mm natural disp. Holylist
DISP_BPM2 = "SATBD02-DBPM040:DISPERSION-OP" #397.8 mm natural disp. Holylist
SFB_BEAM_DUMP = "SFB_BEAM_DUMP_AT:ONOFF1"
LASING_OFF = "Undulators/K_AT_lasing_off.py"
LASING_ON = "Undulators/K_AT_taper.py"
BUNCH_CHARGE = "SATBD02-DBPM010:Q2-AVG"
ELECTRON_ENERGY = "SATCB01:ENE-FILT-OP"
ENE_BPM1 = "SATBD02-DBPM010:PULSE-ENE-OP"
ENE_BPM2 = "SATBD02-DBPM040:PULSE-ENE-OP"
ERR_BPM1 = "SATBD02-DBPM010:PULSE-ENE-ERR-OP"
ERR_BPM2 = "SATBD02-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)