From 893016c2e79a36af80d4e32a6346794c77acc422 Mon Sep 17 00:00:00 2001 From: "Murilo B. Alves" Date: Wed, 9 Oct 2024 17:31:49 -0300 Subject: [PATCH 1/4] RFCav in BunchbyBunch --- siriuspy/siriuspy/devices/bbb.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/siriuspy/siriuspy/devices/bbb.py b/siriuspy/siriuspy/devices/bbb.py index 860dccd80..d63a40d3f 100644 --- a/siriuspy/siriuspy/devices/bbb.py +++ b/siriuspy/siriuspy/devices/bbb.py @@ -42,7 +42,7 @@ def __init__(self, devname, props2init='all'): "props2init must be 'all' or bool(props2init) == False") self.dcct = DCCT(DCCT.DEVICES.SI_13C4, props2init=props2init) - self.rfcav = RFCav(RFCav.DEVICES.SI, props2init=props2init) + self.rfcav = RFCav(RFCav.DEVICES.SIA, props2init=props2init) self.info = SystemInfo(devname, props2init=props2init) self.timing = Timing(devname, props2init=props2init) self.sram = Acquisition(devname, acqtype='SRAM', props2init=props2init) From e7004c5fd92d3f46e4ca7fd6f7b7bf84455206e6 Mon Sep 17 00:00:00 2001 From: murilobalves Date: Fri, 11 Oct 2024 14:25:43 -0300 Subject: [PATCH 2/4] DEVICES.BBB.FIX: Use 2 RFCavs in sweep_rf_phase of BbB --- siriuspy/siriuspy/devices/bbb.py | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/siriuspy/siriuspy/devices/bbb.py b/siriuspy/siriuspy/devices/bbb.py index d63a40d3f..9e3531dd1 100644 --- a/siriuspy/siriuspy/devices/bbb.py +++ b/siriuspy/siriuspy/devices/bbb.py @@ -42,7 +42,8 @@ def __init__(self, devname, props2init='all'): "props2init must be 'all' or bool(props2init) == False") self.dcct = DCCT(DCCT.DEVICES.SI_13C4, props2init=props2init) - self.rfcav = RFCav(RFCav.DEVICES.SIA, props2init=props2init) + self.rfcav_a = RFCav(RFCav.DEVICES.SIA, props2init=props2init) + self.rfcav_b = RFCav(RFCav.DEVICES.SIB, props2init=props2init) self.info = SystemInfo(devname, props2init=props2init) self.timing = Timing(devname, props2init=props2init) self.sram = Acquisition(devname, acqtype='SRAM', props2init=props2init) @@ -61,7 +62,7 @@ def __init__(self, devname, props2init='all'): self.info, self.timing, self.sram, self.bram, self.coeffs, self.feedback, self.drive0, self.drive1, self.drive2, self.bunch_clean, self.fbe, self.dcct, - self.rfcav, self.single_bunch, self.phase_track] + self.rfcav_a, self.rfcav_b, self.single_bunch, self.phase_track] if devname.endswith('-L'): self.pwr_amp1 = PwrAmpL(devname, num=0, props2init=props2init) @@ -194,16 +195,23 @@ def sweep_feedback_phase(self, values, wait=2, mon_type='peak'): self.coeffs.cmd_edit_apply() return _np.array(mon_values) - def sweep_rf_phase(self, values, wait=2, mon_type='mean'): + def sweep_rf_phase(self, values, wait=2, mon_type='mean', cavity='A'): """Sweep RF Phase for each `value` in `values`.""" mon_values = [] ctrl, mon = 'RF Phase', 'SRAM Mean' print(f'Idx: {ctrl:15s} {mon:15s}') - llrf = self.rfcav.dev_llrf + if cavity.upper() == 'A': + rfcav = self.rfcav_a + if cavity.upper() == 'B': + rfcav = self.rfcav_b + else: + raise ValueError("cavity must be 'A' or 'B'.") + + llrf = rfcav.dev_llrf init_val = llrf.phase for i, val in enumerate(values): - self.rfcav.set_phase(val) + rfcav.set_phase(val) _time.sleep(wait) if mon_type.lower() in 'mean': mon_val = self.sram.data_mean @@ -211,7 +219,7 @@ def sweep_rf_phase(self, values, wait=2, mon_type='mean'): mon_val = self.sram.spec_marker1_mag mon_values.append(mon_val) print(f'{i:03d}: {val:15.6f} {_np.mean(mon_val):15.6f}') - llrf.value = init_val + llrf.phase = init_val return _np.array(mon_values) From f41efb56a4e11000bfabdf75b6d0549e51d2d44d Mon Sep 17 00:00:00 2001 From: murilobalves Date: Fri, 11 Oct 2024 14:43:15 -0300 Subject: [PATCH 3/4] DEVICES.BBB.FIX: Apply delta phase in both RF cavities --- siriuspy/siriuspy/devices/bbb.py | 25 ++++++++++--------------- 1 file changed, 10 insertions(+), 15 deletions(-) diff --git a/siriuspy/siriuspy/devices/bbb.py b/siriuspy/siriuspy/devices/bbb.py index 9e3531dd1..71a6d2bf4 100644 --- a/siriuspy/siriuspy/devices/bbb.py +++ b/siriuspy/siriuspy/devices/bbb.py @@ -195,31 +195,26 @@ def sweep_feedback_phase(self, values, wait=2, mon_type='peak'): self.coeffs.cmd_edit_apply() return _np.array(mon_values) - def sweep_rf_phase(self, values, wait=2, mon_type='mean', cavity='A'): - """Sweep RF Phase for each `value` in `values`.""" + def sweep_rf_phase(self, delta_phases, wait=2, mon_type='mean'): + """Sweep RF Phase for each dphase in `delta_phases`.""" mon_values = [] ctrl, mon = 'RF Phase', 'SRAM Mean' print(f'Idx: {ctrl:15s} {mon:15s}') - if cavity.upper() == 'A': - rfcav = self.rfcav_a - if cavity.upper() == 'B': - rfcav = self.rfcav_b - else: - raise ValueError("cavity must be 'A' or 'B'.") - - llrf = rfcav.dev_llrf - init_val = llrf.phase - for i, val in enumerate(values): - rfcav.set_phase(val) + rfcavs = [self.rfcav_a, self.rfcav_b] + init_phases = [rfcav.dev_llrf.phase for rfcav in rfcavs] + for i, dphase in enumerate(delta_phases): + for phase0, rfcav in zip(init_phases, rfcavs): + rfcav.set_phase(phase0 + dphase) _time.sleep(wait) if mon_type.lower() in 'mean': mon_val = self.sram.data_mean else: mon_val = self.sram.spec_marker1_mag mon_values.append(mon_val) - print(f'{i:03d}: {val:15.6f} {_np.mean(mon_val):15.6f}') - llrf.phase = init_val + print(f'{i:03d}: {dphase:15.6f} {_np.mean(mon_val):15.6f}') + for phase0, rfcav in zip(init_phases, rfcavs): + rfcav.set_phase(phase0) return _np.array(mon_values) From 3ac3fb020bec4657bb40a6e62895e11eed08543b Mon Sep 17 00:00:00 2001 From: Fernando Date: Sun, 13 Oct 2024 11:10:53 -0300 Subject: [PATCH 4/4] DEV.FAMBPM.BUG: Fix method `get_mturn_timestamps`. --- siriuspy/siriuspy/devices/bpm_fam.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/siriuspy/siriuspy/devices/bpm_fam.py b/siriuspy/siriuspy/devices/bpm_fam.py index a4f921e61..12ed62c5d 100644 --- a/siriuspy/siriuspy/devices/bpm_fam.py +++ b/siriuspy/siriuspy/devices/bpm_fam.py @@ -264,8 +264,8 @@ def get_mturn_timestamps(self): (len(self._mturn_signals2acq), len(self.bpms)), dtype=float) for i, s in enumerate(self._mturn_signals2acq): for j, bpm in enumerate(self.bpms): - s = self.conv_signal2pvname_format(s) - pvo = bpm.pv_object(f'GEN{s}Data') + pname = self.conv_signal2pvname_format(s) + pvo = bpm.pv_object(f'GEN{pname}Data') tv = pvo.get_timevars(timeout=self.TIMEOUT) tsmps[i, j] = pvo.timestamp if tv is None else tv['timestamp'] return tsmps