@@ -43,21 +43,9 @@ void DigitContainer::fillOutputContainer(std::vector<Digit>& output,
4343 // Without this we might get crashes in the clusterization step.
4444 static const int maxTimeBinForTimeFrame = o2::conf::DigiParams::Instance ().maxOrbitsToDigitize != -1 ? ((o2::conf::DigiParams::Instance ().maxOrbitsToDigitize * 3564 + 2 * 8 - 2 ) / 8 ) : -1 ;
4545
46- auto & cdb = CDBInterface::instance ();
47-
48- // ion tail per pad parameters
49- const CalPad* padParams[3 ] = {nullptr , nullptr , nullptr };
50-
51- if (eleParam.doIonTailPerPad ) {
52- const auto & itSettings = IonTailSettings::Instance ();
53- if (itSettings.padITCorrFile .size ()) {
54- cdb.setFEEParamsFromFile (itSettings.padITCorrFile );
55- }
56- padParams[0 ] = &cdb.getITFraction ();
57- padParams[1 ] = &cdb.getITExpLambda ();
58- }
59- if (eleParam.doCommonModePerPad ) {
60- padParams[2 ] = &cdb.getCMkValues ();
46+ if (!mCalibrationsUpdated ) {
47+ LOG (debug) << " TPC DigitContainer: calibrations not set up before the first flush, fetching them now" ;
48+ updateCalibrations ();
6149 }
6250
6351 const bool needsPrevDigArray = eleParam.doIonTail || eleParam.doIonTailPerPad || eleParam.doSaturationTail ;
@@ -68,17 +56,11 @@ void DigitContainer::fillOutputContainer(std::vector<Digit>& output,
6856 mPrevDigArr = std::make_unique<DigitTime::PrevDigitInfoArray>();
6957 }
7058
71- // dead channel map
72- const CalDet<bool >* deadMap = {nullptr };
73- if (eleParam.applyDeadMap ) {
74- deadMap = &cdb.getDeadChannelMap ();
75- }
76-
7759 static bool reportedSettings = false ;
7860 if (!reportedSettings) {
7961 reportSettings ();
80- if (deadMap ) {
81- LOGP (info, " Using dead map with {} masked pads" , deadMap ->getSum <int >());
62+ if (mDeadMap ) {
63+ LOGP (info, " Using dead map with {} masked pads" , mDeadMap ->getSum <int >());
8264 }
8365 reportedSettings = true ;
8466 }
@@ -109,35 +91,34 @@ void DigitContainer::fillOutputContainer(std::vector<Digit>& output,
10991 if (time) {
11092 switch (digitizationMode) {
11193 case DigitzationMode::FullMode: {
112- time->fillOutputContainer <DigitzationMode::FullMode>(output, mcTruth, commonModeOutput, sector, timeBin, mPrevDigArr .get (), debugStream, padParams, deadMap );
94+ time->fillOutputContainer <DigitzationMode::FullMode>(output, mcTruth, commonModeOutput, sector, timeBin, mPrevDigArr .get (), debugStream, mPadParams , mDeadMap );
11395 break ;
11496 }
11597 case DigitzationMode::ZeroSuppression: {
116- time->fillOutputContainer <DigitzationMode::ZeroSuppression>(output, mcTruth, commonModeOutput, sector, timeBin, mPrevDigArr .get (), debugStream, padParams, deadMap );
98+ time->fillOutputContainer <DigitzationMode::ZeroSuppression>(output, mcTruth, commonModeOutput, sector, timeBin, mPrevDigArr .get (), debugStream, mPadParams , mDeadMap );
11799 break ;
118100 }
119101 case DigitzationMode::ZeroSuppressionCMCorr: {
120- time->fillOutputContainer <DigitzationMode::ZeroSuppressionCMCorr>(output, mcTruth, commonModeOutput, sector, timeBin, mPrevDigArr .get (), debugStream, padParams, deadMap );
102+ time->fillOutputContainer <DigitzationMode::ZeroSuppressionCMCorr>(output, mcTruth, commonModeOutput, sector, timeBin, mPrevDigArr .get (), debugStream, mPadParams , mDeadMap );
121103 break ;
122104 }
123105 case DigitzationMode::SubtractPedestal: {
124- time->fillOutputContainer <DigitzationMode::SubtractPedestal>(output, mcTruth, commonModeOutput, sector, timeBin, mPrevDigArr .get (), debugStream, padParams, deadMap );
106+ time->fillOutputContainer <DigitzationMode::SubtractPedestal>(output, mcTruth, commonModeOutput, sector, timeBin, mPrevDigArr .get (), debugStream, mPadParams , mDeadMap );
125107 break ;
126108 }
127109 case DigitzationMode::NoSaturation: {
128- time->fillOutputContainer <DigitzationMode::NoSaturation>(output, mcTruth, commonModeOutput, sector, timeBin, mPrevDigArr .get (), debugStream, padParams, deadMap );
110+ time->fillOutputContainer <DigitzationMode::NoSaturation>(output, mcTruth, commonModeOutput, sector, timeBin, mPrevDigArr .get (), debugStream, mPadParams , mDeadMap );
129111 break ;
130112 }
131113 case DigitzationMode::PropagateADC: {
132- time->fillOutputContainer <DigitzationMode::PropagateADC>(output, mcTruth, commonModeOutput, sector, timeBin, mPrevDigArr .get (), debugStream, padParams, deadMap );
114+ time->fillOutputContainer <DigitzationMode::PropagateADC>(output, mcTruth, commonModeOutput, sector, timeBin, mPrevDigArr .get (), debugStream, mPadParams , mDeadMap );
133115 break ;
134116 }
135117 case DigitzationMode::Auto: {
136- const auto & feeConfig = cdb.getFEEConfig ();
137- if (feeConfig.isCMCEnabled ()) {
138- time->fillOutputContainer <DigitzationMode::ZeroSuppressionCMCorr>(output, mcTruth, commonModeOutput, sector, timeBin, mPrevDigArr .get (), debugStream, padParams, deadMap);
118+ if (mCMCEnabled ) {
119+ time->fillOutputContainer <DigitzationMode::ZeroSuppressionCMCorr>(output, mcTruth, commonModeOutput, sector, timeBin, mPrevDigArr .get (), debugStream, mPadParams , mDeadMap );
139120 } else {
140- time->fillOutputContainer <DigitzationMode::ZeroSuppression>(output, mcTruth, commonModeOutput, sector, timeBin, mPrevDigArr .get (), debugStream, padParams, deadMap );
121+ time->fillOutputContainer <DigitzationMode::ZeroSuppression>(output, mcTruth, commonModeOutput, sector, timeBin, mPrevDigArr .get (), debugStream, mPadParams , mDeadMap );
141122 }
142123 break ;
143124 }
@@ -158,6 +139,34 @@ void DigitContainer::fillOutputContainer(std::vector<Digit>& output,
158139 }
159140}
160141
142+ void DigitContainer::updateCalibrations ()
143+ {
144+ const auto & eleParam = ParameterElectronics::Instance ();
145+ auto & cdb = CDBInterface::instance ();
146+
147+ // ion tail per pad parameters
148+ mPadParams [0 ] = mPadParams [1 ] = mPadParams [2 ] = nullptr ;
149+ if (eleParam.doIonTailPerPad ) {
150+ const auto & itSettings = IonTailSettings::Instance ();
151+ if (itSettings.padITCorrFile .size ()) {
152+ cdb.setFEEParamsFromFile (itSettings.padITCorrFile );
153+ }
154+ mPadParams [0 ] = &cdb.getITFraction ();
155+ mPadParams [1 ] = &cdb.getITExpLambda ();
156+ }
157+ if (eleParam.doCommonModePerPad ) {
158+ mPadParams [2 ] = &cdb.getCMkValues ();
159+ }
160+
161+ // dead channel map
162+ mDeadMap = eleParam.applyDeadMap ? &cdb.getDeadChannelMap () : nullptr ;
163+
164+ // common mode correction in the FEE, needed to resolve DigiMode Auto
165+ mCMCEnabled = (eleParam.DigiMode == DigitzationMode::Auto) && cdb.getFEEConfig ().isCMCEnabled ();
166+
167+ mCalibrationsUpdated = true ;
168+ }
169+
161170void DigitContainer::reportSettings ()
162171{
163172 auto & cdb = CDBInterface::instance ();
0 commit comments