From 7aa92c757c3a54a10a5d4c325da3e3e4578e48f0 Mon Sep 17 00:00:00 2001 From: Marko Mecina <marko.mecina@univie.ac.at> Date: Wed, 19 Jun 2024 13:14:03 +0200 Subject: [PATCH] update SMILE calibration functions --- Ccs/calibrations_SMILE.py | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/Ccs/calibrations_SMILE.py b/Ccs/calibrations_SMILE.py index d0b486b..727a87f 100644 --- a/Ccs/calibrations_SMILE.py +++ b/Ccs/calibrations_SMILE.py @@ -254,6 +254,7 @@ class Rse: # fit polynomial of degree POLY_DEG through CCD ADU-degC relation (operational range) +# IASW coefs for EQM: [-3.55073060e+02, 2.04890302e-02, 3.32985037e-06, -2.20945595e-10, 6.07858723e-15] # IASW coefs for PFM nom: ['-4.02587E+02', '4.33198E-02', '-9.26990E-07', '1.53423E-10', '-6.16102E-15'] # IASW coefs for PFM red: ['-3.78077E+02', '2.99914E-02', '1.66375E-06', '-7.20486E-11', '1.17412E-15'] POLY_DEG = 4 @@ -262,7 +263,8 @@ _ccd_temp_fit_adu = np.polynomial.polynomial.Polynomial.fit(_ccd_temp_adu_array[ POLY_DEG).convert() _ccd_temp_fit_adu_inv = np.polynomial.polynomial.Polynomial.fit(_ccd_temp_adu_array[0], _ccd_temp_adu_array[2], POLY_DEG).convert() - +_ccd_temp_interp_adu_inv = sp.interpolate.interp1d(_ccd_temp_adu_array[0], _ccd_temp_adu_array[2], kind='cubic', + fill_value='extrapolate') # cubic-spline interpolation of PSU ADU-degC relation (nominal values) _psu_temp_adu_array = np.array(PSU_TEMP).T # (degC, ADC_V, ADU_dec, ADU_hex) @@ -283,7 +285,7 @@ def t_ccd_deg_to_adu_oper(t, warn=True): if not ((_ccd_temp_adu_array[0].min() <= t) & (t <= _ccd_temp_adu_array[0].max())).all() and warn: print('WARNING! Value(s) outside operational range ({} - {})!'.format(_ccd_temp_adu_array[0].min(), _ccd_temp_adu_array[0].max())) - return np.rint(_ccd_temp_fit_adu_inv(t)).astype(int) + return np.rint(_ccd_temp_interp_adu_inv(t)).astype(int) def t_ccd_adu_to_deg_nonoper(adu): @@ -565,6 +567,23 @@ class Limits: # raw ambient CCD limits ADC_TEMP_CCD_AMB = (0x1968, 0x19DD, 0x29DB, 0x2A49) + @classmethod + def limitparametersformram(cls): + + MRAM_ORDER = ["ADC_P3V9","ADC_P3V3","ADC_P3V3_LVDS","ADC_P2V5","ADC_P1V8","ADC_P1V2","ADC_REF","ADC_TEMP1", + "ADC_TEMP_CCD","ADC_TEMP_FEE","ADC_I_FEE_ANA","ADC_I_FEE_DIG","ADC_I_DPU","ADC_I_RSE", + "ADC_I_HEATER","ADC_PSU_TEMP"] + + out = [] + cmd = [] + for par in MRAM_ORDER: + ll,lw,uw,ul = getattr(Limits,par) + line = '{nn}WarnLowerLimit = {}\n{nn}AlarmLowerLimit = {}\n{nn}WarnUpperLimit = {}\n{nn}AlarmUpperLimit = {}'.format(lw, ll, uw, ul,nn=par) + out.append(line) + cmd.append('{nn}WarnLowerLimit, {nn}AlarmLowerLimit, {nn}WarnUpperLimit, {nn}AlarmUpperLimit'.format(nn=par)) + + print('\n'.join(out) + '\n\n\n' + ', '.join(cmd)) + class LimitTables: -- GitLab