From 1bad8e08e908fba710a70c4bbce7a9664a5bad6a Mon Sep 17 00:00:00 2001
From: Marko Mecina <marko.mecina@univie.ac.at>
Date: Sun, 17 Dec 2023 22:58:02 +0100
Subject: [PATCH] add calibration function for all FEE HK signals

---
 Ccs/calibrations_SMILE.py | 119 +++++++++++++++++++++++++++++++++++---
 1 file changed, 112 insertions(+), 7 deletions(-)

diff --git a/Ccs/calibrations_SMILE.py b/Ccs/calibrations_SMILE.py
index 6e2f6f2..70fe0e8 100644
--- a/Ccs/calibrations_SMILE.py
+++ b/Ccs/calibrations_SMILE.py
@@ -15,13 +15,6 @@ T_ZERO = 273.15
 ADC_INPRNG = 7.34783  # V
 ADC_OFFSET = -1.69565  # V
 
-# FEE HK gains/offsets
-# EQM
-FEE_CCD2TsA_gain = 0.048589971
-FEE_CCD2TsA_offset = 326.709604
-FEE_CCD4TsB_gain = 0.048346072
-FEE_CCD4TsB_offset = 317.546000
-
 
 class Dpu:
 
@@ -591,6 +584,118 @@ def t_ccd_fee_deg_to_adu(t, ccd):
         raise ValueError("CCD must be either 2 or 4!")
 
 
+class Fee:
+
+    CCD2_TS_A = "FRMHKccd2TsA"
+    CCD4_TS_B = "FRMHKccd4TsB"
+    PRT1 = "FRMHKprt1"
+    PRT2 = "FRMHKprt2"
+    PRT3 = "FRMHKprt3"
+    PRT4 = "FRMHKprt4"
+    PRT5 = "FRMHKprt5"
+    CCD4_VOD_MON_E = "FRMHKccd4VodMonE"
+    CCD4_VOG_MON = "FRMHKccd4VogMon"
+    CCD4_VRD_MON_E = "FRMHKccd4VrdMonE"
+    CCD2_VOD_MON_E = "FRMHKccd2VodMonE"
+    CCD2_VOG_MON = "FRMHKccd2VogMon"
+    CCD2_VRD_MON_E = "FRMHKccd2VrdMonE"
+    CCD4_VRD_MON_F = "FRMHKccd4VrdMonF"
+    CCD4_VDD_MON = "FRMHKccd4VddMon"
+    CCD4_VGD_MON = "FRMHKccd4VgdMon"
+    CCD2_VRD_MON_F = "FRMHKccd2VrdMonF"
+    CCD2_VDD_MON = "FRMHKccd2VddMon"
+    CCD2_VGD_MON = "FRMHKccd2VgdMon"
+    VCCD = "FRMHKvccd"
+    VRCLK_MON = "FRMHKvrclkMon"
+    VICLK = "FRMHKviclk"
+    CCD4_VOD_MON_F = "FRMHKccd4VodMonF"
+    P5VB_POS_MON = "FRMHK5vbPosMon"
+    P5VB_NEG_MON = "FRMHK5vbNegMon"
+    P3V3B_MON = "FRMHK3v3bMon"
+    P2V5A_MON = "FRMHK2v5aMon"
+    P3V3D_MON = "FRMHK3v3dMon"
+    P2V5D_MON = "FRMHK2v5dMon"
+    P1V2D_MON = "FRMHK1v2dMon"
+    P5VREF_MON = "FRMHK5vrefMon"
+    VCCD_POS_RAW = "FRMHKvccdPosRaw"
+    VCLK_POS_RAW = "FRMHKvclkPosRaw"
+    VAN1_POS_RAW = "FRMHKvan1PosRaw"
+    VAN3_NEG_MON = "FRMHKvan3NegMon"
+    VAN2_POS_RAW = "FRMHKvan2PosRaw"
+    VDIG_RAW = "FRMHKvdigRaw"
+    IG_HI_MON = "FRMHKigHiMon"
+    CCD2_VOD_MON_F = "FRMHKccd2VodMonF"
+
+
+# FEE HK gains/offsets
+# EQM
+FEE_GAIN_OFFSET = {
+    Fee.CCD2_TS_A: (0.048589970854, 326.709603726099),
+    Fee.CCD4_TS_B: (0.048346071846, 317.545999899085),
+    Fee.PRT1: (0.049337666752, 310.304954966437),
+    Fee.PRT2: (0.048871723231, 322.563832689621),
+    Fee.PRT3: (0.048882740559, 322.418053560869),
+    Fee.PRT4: (0.048777132761, 322.321990156487),
+    Fee.PRT5: (0.048683458078, 323.746239172483),
+    Fee.CCD4_VOD_MON_E: (0.000563088127, -0.00209746042908421),
+    Fee.CCD4_VOG_MON: (0.000135181804, -0.166559933290103),
+    Fee.CCD4_VRD_MON_E: (0.000563174116, 0.0193461050916852),
+    Fee.CCD2_VOD_MON_E: (0.000563015464, -0.0097318620270066),
+    Fee.CCD2_VOG_MON: (0.000135565734, -0.164272515606305),
+    Fee.CCD2_VRD_MON_E: (0.000562914749, 0.0221158942564337),
+    Fee.CCD4_VRD_MON_F: (0.000563425754, 0.00833790912991361),
+    Fee.CCD4_VDD_MON: (0.000816121249, 0),
+    Fee.CCD4_VGD_MON: (0.000562165835, 0.0483795532258782),
+    Fee.CCD2_VRD_MON_F: (0.000563631207, -0.00437775179765865),
+    Fee.CCD2_VDD_MON: (0.000815982604, 0),
+    Fee.CCD2_VGD_MON: (0.000556683023, 0.225687270717021),
+    Fee.VCCD: (0.000756606970, 0),
+    Fee.VRCLK_MON: (0.000360316440, 0),
+    Fee.VICLK: (0.000360364766, 0),
+    Fee.CCD4_VOD_MON_F: (0.000562995879, 0.00807772719949895),
+    Fee.P5VB_POS_MON: (0.000092728181, 0),
+    Fee.P5VB_NEG_MON: (-0.000125745208, 0),
+    Fee.P3V3B_MON: (0.000062672872, 0),
+    Fee.P2V5A_MON: (0.000062623239, 0),
+    Fee.P3V3D_MON: (0.000062667814, 0),
+    Fee.P2V5D_MON: (0.000062623117, 0),
+    Fee.P1V2D_MON: (0.000031361075, 0),
+    Fee.P5VREF_MON: (0.000097218804, 0),
+    Fee.VCCD_POS_RAW: (0.000756449617, 0),
+    Fee.VCLK_POS_RAW: (0.000360291117, 0),
+    Fee.VAN1_POS_RAW: (0.000163267788, 0),
+    Fee.VAN3_NEG_MON: (-0.000208630551, 0),
+    Fee.VAN2_POS_RAW: (0.000163196727, 0),
+    Fee.VDIG_RAW: (0.000097250522, 0),
+    Fee.IG_HI_MON: (0.000186900810, 0),
+    Fee.CCD2_VOD_MON_F: (0.000562860544, -0.00642286504851342)
+}
+
+FEE_CCD2TsA_gain, FEE_CCD2TsA_offset = FEE_GAIN_OFFSET[Fee.CCD2_TS_A]
+FEE_CCD4TsB_gain, FEE_CCD4TsB_offset = FEE_GAIN_OFFSET[Fee.CCD4_TS_B]
+
+
+def cal_fee_hk(adu, signal):
+    """
+    Calibrate raw FEE HK reading to engineering value
+
+    @param signal:
+    @param adu:
+    @return:
+    """
+
+    if signal not in FEE_GAIN_OFFSET:
+        raise ValueError('Unknown signal "{}"'.format(signal))
+
+    gain, offset = FEE_GAIN_OFFSET[signal]
+    val = adu * gain + offset
+
+    if signal in [Fee.CCD2_TS_A, Fee.CCD4_TS_B, Fee.PRT1, Fee.PRT2, Fee.PRT3, Fee.PRT4, Fee.PRT5]:
+        val = _pt1000_curve_inv(val)
+
+    return val
+
+
 if __name__ == '__main__':
 
     import matplotlib.pyplot as plt
-- 
GitLab