From 21b7fb6816993987013273ff498d1aa391097d44 Mon Sep 17 00:00:00 2001 From: Ana Clara Oliveira Date: Mon, 22 Jul 2024 10:52:04 -0300 Subject: [PATCH 1/3] ENH: add first snippet for FOFB Lamp acquisition --- ...ipt-si-acquire-fastcorrs-triggered-data.py | 94 +++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100755 bin/sirius-script-si-acquire-fastcorrs-triggered-data.py diff --git a/bin/sirius-script-si-acquire-fastcorrs-triggered-data.py b/bin/sirius-script-si-acquire-fastcorrs-triggered-data.py new file mode 100755 index 0000000..52d859b --- /dev/null +++ b/bin/sirius-script-si-acquire-fastcorrs-triggered-data.py @@ -0,0 +1,94 @@ +#!/usr/bin/env python-sirius +""".""" + +import time as _time +from datetime import datetime + +from mathphys.functions import save +from siriuspy.devices import BOPSRampStandbyHandler, BORFRampStandbyHandler, \ + BunchbyBunch, FamFOFBLamp, HLFOFB, SOFB + + +def create_devices(): + """.""" + sofb = SOFB(SOFB.DEVICES.SI) + fofb = HLFOFB(HLFOFB.DEVICES.SI) + bbbl = BunchbyBunch(BunchbyBunch.DEVICES.L) + bbbh = BunchbyBunch(BunchbyBunch.DEVICES.H) + bbbv = BunchbyBunch(BunchbyBunch.DEVICES.V) + bopsrmp = BOPSRampStandbyHandler() + borfrmp = BORFRampStandbyHandler() + return sofb, fofb, bbbl, bbbh, bbbv, bopsrmp, borfrmp + + +def read_feedback_status(devs, lampacq): + """.""" + sofb, fofb, bbbl, bbbh, bbbv, bopsrmp, borfrmp = devs + lampacq.data['sofb_loop_state'] = sofb.autocorrsts + lampacq.data['fofb_loop_state'] = fofb.loop_state + lampacq.data['bbbl_loop_state'] = bbbl.feedback.loop_state + lampacq.data['bbbh_loop_state'] = bbbh.feedback.loop_state + lampacq.data['bbbv_loop_state'] = bbbv.feedback.loop_state + lampacq.data['bo_ps_ramp_state'] = bopsrmp.is_on + lampacq.data['bo_rf_ramp_state'] = borfrmp.is_on + + +if __name__ == "__main__": + """.""" + import argparse as _argparse + + parser = _argparse.ArgumentParser( + description="FOFB LAMP triggered acquisition script.") + parser.add_argument( + '-f', '--filename', type=str, default='', + help='name of the file to save (Default: FOFBLAMP-_YY-MM-DD_HHhMMmSSs)') + # 3 minutes between top-up injections, timeout > 3*60s + parser.add_argument( + '-b', '--nrptsbefore', type=int, default=1_000, + help='nr points before trigger (Default: 1000)') + parser.add_argument( + '-a', '--nrptsafter', type=int, default=10_000, + help='nr points after trigger (Default: 10000)') + + args = parser.parse_args() + + # prepare acquisition + lampacq = FamFOFBLamp() + + for dev in lampacq.ctrldevs.values(): + dev.cmd_ctrl(1) # stop + for dev in lampacq.ctrldevs.values(): + dev.nrsamples_pre = args.nrptsbefore + for dev in lampacq.ctrldevs.values(): + dev.nrsamples_post = args.nrptsafter + for dev in lampacq.ctrldevs.values(): + dev.repeat = 0 # normal + for dev in lampacq.ctrldevs.values(): + dev.trigger = 1 # external + for dev in lampacq.ctrldevs.values(): + dev.cmd_ctrl(0) # start + + _time.sleep(1) + + # trigger acquisition + lampacq.evtdev.cmd_external_trigger() + + # create devices to complement data + devs = create_devices() + + # get lamp data + data = dict() + for datatyp in ['Current', 'Voltage']: + data[datatyp] = dict() + for psname, psdev in lampacq.psdevs.items(): + data[datatyp][psname] = psdev[f'LAMP{datatyp}Data'] + + # get extra data + read_feedback_status(devs, lampacq) + + # save file + now = datetime.now() + str_now = now.strftime('%Y-%m-%d_%Hh%Mm%Ss') + filename = args.filename or 'FOFBLAMP' + str_now + save(data, filename + '.hdf5', overwrite=False) + print(f'\nData saved at {str_now:s}') From 36febdd122dbb89ec2549a8a11fd456d25494e42 Mon Sep 17 00:00:00 2001 From: ximenes Date: Mon, 22 Jul 2024 12:26:26 -0300 Subject: [PATCH 2/3] Fixes and improvements in fast corrector acquisition snippet --- ...ipt-si-acquire-fastcorrs-triggered-data.py | 46 +++++++++++-------- 1 file changed, 28 insertions(+), 18 deletions(-) diff --git a/bin/sirius-script-si-acquire-fastcorrs-triggered-data.py b/bin/sirius-script-si-acquire-fastcorrs-triggered-data.py index 52d859b..1271235 100755 --- a/bin/sirius-script-si-acquire-fastcorrs-triggered-data.py +++ b/bin/sirius-script-si-acquire-fastcorrs-triggered-data.py @@ -21,16 +21,16 @@ def create_devices(): return sofb, fofb, bbbl, bbbh, bbbv, bopsrmp, borfrmp -def read_feedback_status(devs, lampacq): +def read_feedback_status(devs, data): """.""" sofb, fofb, bbbl, bbbh, bbbv, bopsrmp, borfrmp = devs - lampacq.data['sofb_loop_state'] = sofb.autocorrsts - lampacq.data['fofb_loop_state'] = fofb.loop_state - lampacq.data['bbbl_loop_state'] = bbbl.feedback.loop_state - lampacq.data['bbbh_loop_state'] = bbbh.feedback.loop_state - lampacq.data['bbbv_loop_state'] = bbbv.feedback.loop_state - lampacq.data['bo_ps_ramp_state'] = bopsrmp.is_on - lampacq.data['bo_rf_ramp_state'] = borfrmp.is_on + data['sofb_loop_state'] = sofb.autocorrsts + data['fofb_loop_state'] = fofb.loop_state + data['bbbl_loop_state'] = bbbl.feedback.loop_state + data['bbbh_loop_state'] = bbbh.feedback.loop_state + data['bbbv_loop_state'] = bbbv.feedback.loop_state + data['bo_ps_ramp_state'] = bopsrmp.is_on + data['bo_rf_ramp_state'] = borfrmp.is_on if __name__ == "__main__": @@ -44,17 +44,18 @@ def read_feedback_status(devs, lampacq): help='name of the file to save (Default: FOFBLAMP-_YY-MM-DD_HHhMMmSSs)') # 3 minutes between top-up injections, timeout > 3*60s parser.add_argument( - '-b', '--nrptsbefore', type=int, default=1_000, - help='nr points before trigger (Default: 1000)') + '-b', '--nrptsbefore', type=int, default=500_000, + help='nr points before trigger (Default: 500000)') parser.add_argument( - '-a', '--nrptsafter', type=int, default=10_000, - help='nr points after trigger (Default: 10000)') + '-a', '--nrptsafter', type=int, default=500_000, + help='nr points after trigger (Default: 500000)') args = parser.parse_args() # prepare acquisition - lampacq = FamFOFBLamp() + lampacq = FamFOFBLamp(event='Study') + print('Configuring lamp...') for dev in lampacq.ctrldevs.values(): dev.cmd_ctrl(1) # stop for dev in lampacq.ctrldevs.values(): @@ -67,28 +68,37 @@ def read_feedback_status(devs, lampacq): dev.trigger = 1 # external for dev in lampacq.ctrldevs.values(): dev.cmd_ctrl(0) # start - - _time.sleep(1) + print('...done...') + _time.sleep(2) # trigger acquisition + print('...sending trigger...') lampacq.evtdev.cmd_external_trigger() + # sleep waiting for data + print('...waiting for data...') + _time.sleep(30) + print('...done...') + # create devices to complement data devs = create_devices() # get lamp data + print('...getting data...') data = dict() for datatyp in ['Current', 'Voltage']: data[datatyp] = dict() for psname, psdev in lampacq.psdevs.items(): - data[datatyp][psname] = psdev[f'LAMP{datatyp}Data'] + pvo = psdev.pv_object(f'LAMP{datatyp}Data') + data[datatyp][psname] = pvo.get(use_monitor=False, timeout=5.0) # get extra data - read_feedback_status(devs, lampacq) + read_feedback_status(devs, data) # save file + print('...saving data to file...') now = datetime.now() str_now = now.strftime('%Y-%m-%d_%Hh%Mm%Ss') filename = args.filename or 'FOFBLAMP' + str_now - save(data, filename + '.hdf5', overwrite=False) + save(data, filename + '.hdf5', overwrite=False, compress=True) print(f'\nData saved at {str_now:s}') From 75789292603b3b5ee06192d95ce6dd05356dedc3 Mon Sep 17 00:00:00 2001 From: Ana Clara Oliveira Date: Mon, 26 Aug 2024 10:17:36 -0300 Subject: [PATCH 3/3] bin.fastcorrs_acq: Update sleep intervals --- bin/sirius-script-si-acquire-fastcorrs-triggered-data.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bin/sirius-script-si-acquire-fastcorrs-triggered-data.py b/bin/sirius-script-si-acquire-fastcorrs-triggered-data.py index 1271235..4d71291 100755 --- a/bin/sirius-script-si-acquire-fastcorrs-triggered-data.py +++ b/bin/sirius-script-si-acquire-fastcorrs-triggered-data.py @@ -69,7 +69,7 @@ def read_feedback_status(devs, data): for dev in lampacq.ctrldevs.values(): dev.cmd_ctrl(0) # start print('...done...') - _time.sleep(2) + _time.sleep(5) # trigger acquisition print('...sending trigger...') @@ -77,7 +77,7 @@ def read_feedback_status(devs, data): # sleep waiting for data print('...waiting for data...') - _time.sleep(30) + _time.sleep(40) print('...done...') # create devices to complement data