Skip to content

Commit

Permalink
Add acc filter gain
Browse files Browse the repository at this point in the history
  • Loading branch information
juliacscarvalho committed May 9, 2024
1 parent f4f0324 commit 0a0a0ef
Show file tree
Hide file tree
Showing 4 changed files with 55 additions and 6 deletions.
24 changes: 24 additions & 0 deletions siriuspy/siriuspy/devices/fofb.py
Original file line number Diff line number Diff line change
Expand Up @@ -715,6 +715,7 @@ class FamFastCorrs(_DeviceSet):
DEF_ATOL_CURRENT_RB = 1e-6
DEF_ATOL_CURRENT_MON = 2e-2
DEF_ATOL_ACCFILTER = 2**-17
DEF_ATOL_ACCFILTERGAIN = 2**-12

def __init__(self, psnames=None):
"""Init."""
Expand Down Expand Up @@ -1112,6 +1113,29 @@ def check_fofbacc_filter(
if not _np.allclose(values[i], dev.fofbacc_filter, atol=atol):
return False
return True

def set_fofbacc_filter_gain(self, value, psnames=None, psindices=None):
"""Command to set accumulator filter gain."""
if not isinstance(value, (list, tuple, _np.ndarray)):
raise ValueError('Value must be iterable.')
devs = self._get_devices(psnames, psindices)
for i, dev in enumerate(devs):
dev.fofbacc_filter_gain = value
return True

def check_fofbacc_filter_gain(
self, values, psnames=None, psindices=None,
atol=DEF_ATOL_ACCFILTERGAIN):
"""Check accumulator filter gain."""
if not self.connected:
return False
devs = self._get_devices(psnames, psindices)
impltd = _np.asarray([d.fofbacc_filter_gain for d in devs])
if isinstance(values, (int, float)):
values = len(devs) * [values]
if _np.allclose(values, impltd, atol=atol):
return True
return False

# ----- private methods -----

Expand Down
11 changes: 10 additions & 1 deletion siriuspy/siriuspy/devices/pwrsupply.py
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,8 @@ class _PSDev(_Device):
'FOFBAccSatMin-SP', 'FOFBAccSatMin-RB',
'FOFBAcc-Mon',
'FOFBAccDecimation-SP', 'FOFBAccDecimation-RB',
'FOFBAccFilter-SP', 'FOFBAccFilter-RB',
'FOFBAccFilter-SP', 'FOFBAccFilter-RB',
'FOFBAccFilterGain-SP', 'FOFBAccFilterGain-RB',
)
_properties_pulsed = (
'Voltage-SP', 'Voltage-RB', 'Voltage-Mon',
Expand Down Expand Up @@ -1041,6 +1042,14 @@ def fofbacc_filter(self):
def fofbacc_filter(self, value):
self['FOFBAccFilter-SP'] = value

@property
def fofbacc_filter_gain(self):
"""FOFB accumulator filter gain."""
return self['FOFBAccFilterGain-RB']

@fofbacc_filter_gain.setter
def fofbacc_filter_gain(self, value):
self['FOFBAccFilterGain-SP'] = value

class PowerSupplyFBP(PowerSupply):
"""FBP Power Supply Device."""
Expand Down
10 changes: 6 additions & 4 deletions siriuspy/siriuspy/fofb/csdev.py
Original file line number Diff line number Diff line change
Expand Up @@ -130,10 +130,6 @@ def __init__(self):
self.dccenbl_min = _np.array([
bpm.sub[2:] in ['M1', 'M2'] for bpm in self.bpm_names])

# acc filters
# self.acc_filter_unit = 50*[1]
# self

def get_hlfofb_database(self):
"""Return Soft IOC database."""
pvs_database = {
Expand Down Expand Up @@ -287,6 +283,12 @@ def get_hlfofb_database(self):
'FOFBAccFilter-RB': {
'type': 'float', 'value': 50*[0], 'prec': 5, 'count': 50,
'unit': 'coef'},
'FOFBAccFilterGain-SP': {
'type': 'float', 'value': 1.0, 'prec': 5,
'lolim': 0, 'hilim': 1000,'unit': 'gain'},
'FOFBAccFilterGain-RB': {
'type': 'float', 'value': 1.0, 'prec': 5,
'unit': 'gain'},

# Reference Orbit (same order of SOFB)
'RefOrbX-SP': {
Expand Down
16 changes: 15 additions & 1 deletion siriuspy/siriuspy/fofb/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,7 @@ def __init__(self, tests=False):
self._corr_accdec_enm = self._const.DecOpt.FOFB
self._corr_accfilter_val = 20*[0.0]
self._corr_accfilter_enm = self._const.FilterOpt.Unit
self._corr_accfilter_gain = 1.0
self._thread_enbllist = None
self._abort_thread_enbllist = False
self._min_sing_val = self._const.MIN_SING_VAL
Expand Down Expand Up @@ -156,6 +157,7 @@ def __init__(self, tests=False):
'FOFBAccDecimation-SP': _part(self.set_corr_accdec, 'value'),
'FOFBAccFilter-Sel': _part(self.set_corr_accfilter, 'enum'),
'FOFBAccFilter-SP': _part(self.set_corr_accfilter, 'value'),
'FOFBAccFilterGain-SP': self.set_corr_accfilter_gain,
'RefOrbX-SP': _part(self.set_reforbit, 'x'),
'RefOrbY-SP': _part(self.set_reforbit, 'y'),
'RespMat-SP': self.set_respmat,
Expand Down Expand Up @@ -729,7 +731,7 @@ def set_corr_accfilter(self, option, value):

else:
filter = self._corr_accfilter_val
self._corr_accdfilter_enm = value
self._corr_accfilter_enm = value
self.run_callbacks('FOFBAccFilter-Sts', value)
self.run_callbacks('FOFBAccFilter-SP', filter)
else:
Expand All @@ -743,6 +745,18 @@ def set_corr_accfilter(self, option, value):

return True

def set_corr_accfilter_gain(self, value):
"""Set corrector accumulator filter gain."""

self._corr_accfilter_gain = value
self.run_callbacks('FOFBAccFilterGain-RB', value)

self._update_log('Setting FOFB Acc filter gain...')
self._corrs_dev.set_fofbacc_filter_gain(value)
self._update_log('...done!')

return True

def _thread_corr_currzero(self):
if self._corrs_dev.check_current(0):
self._update_log('Current of all correctors already zeroed.')
Expand Down

0 comments on commit 0a0a0ef

Please sign in to comment.