@@ -63,22 +63,13 @@ class EMCALChannelCalibDevice : public o2::framework::Task
6363 mTimeCalibrator = std::make_unique<o2::emcal::EMCALChannelCalibrator<o2::emcal::EMCALTimeCalibData, o2::emcal::TimeCalibrationParams>>();
6464 }
6565 mTimeCalibrator ->SetCalibExtractor (mCalibExtractor );
66- mTimeCalibrator ->setSlotLength (EMCALCalibParams::Instance ().slotLength_tc );
67- if (EMCALCalibParams::Instance ().UpdateAtEndOfRunOnly_tc ) {
68- mBadChannelCalibrator ->setUpdateAtTheEndOfRunOnly ();
69- }
7066
7167 } else { // bad cell calibration
7268 isBadChannelCalib = true ;
7369 if (!mBadChannelCalibrator ) {
7470 mBadChannelCalibrator = std::make_unique<o2::emcal::EMCALChannelCalibrator<o2::emcal::EMCALChannelData, o2::emcal::BadChannelMap>>();
7571 }
7672 mBadChannelCalibrator ->SetCalibExtractor (mCalibExtractor );
77- mBadChannelCalibrator ->setSlotLength (EMCALCalibParams::Instance ().slotLength_bc );
78- if (EMCALCalibParams::Instance ().UpdateAtEndOfRunOnly_bc ) {
79- mBadChannelCalibrator ->setUpdateAtTheEndOfRunOnly ();
80- }
81- mBadChannelCalibrator ->setIsTest (EMCALCalibParams::Instance ().enableTestMode_bc );
8273 }
8374 }
8475
@@ -89,11 +80,14 @@ class EMCALChannelCalibDevice : public o2::framework::Task
8980 // check if calib params need to be updated
9081 if (matcher == ConcreteDataMatcher (" EMC" , " EMCALCALIBPARAM" , 0 )) {
9182 LOG (info) << " EMCal CalibParams updated" ;
83+ EMCALCalibParams::Instance ().printKeyValues (true , true );
9284 return ;
9385 }
9486 if (matcher == ConcreteDataMatcher (" EMC" , " SCALEFACTORS" , 0 )) {
9587 if (mBadChannelCalibrator && EMCALCalibParams::Instance ().useScaledHisto_bc ) {
88+ LOG (info) << " Configuring scale factors for bad channel map" ;
9689 mBadChannelCalibrator ->getCalibExtractor ()->setBCMScaleFactors (reinterpret_cast <o2::emcal::EMCALChannelScaleFactors*>(obj));
90+ mScaleFactorsInitialized = true ;
9791 }
9892 }
9993 }
@@ -113,10 +107,21 @@ class EMCALChannelCalibDevice : public o2::framework::Task
113107 }
114108
115109 if (mLoadCalibParamsFromCCDB ) {
116- // for reading the calib objects from the ccdb
110+ // for reading the calib objects from the CCDB
117111 pc.inputs ().get <o2::emcal::EMCALCalibParams*>(" EMC_CalibParam" );
118112 }
119113
114+ if (mBadChannelCalibrator && EMCALCalibParams::Instance ().useScaledHisto_bc && !mScaleFactorsInitialized ) {
115+ // Trigger reading the scale factors from the CCDB (Bad channel calib only)
116+ pc.inputs ().get <o2::emcal::EMCALChannelScaleFactors*>(" EMC_Scalefactors" );
117+ }
118+
119+ if (!mIsConfigured ) {
120+ // configure calibrators (after calib params are loaded from the CCDB)
121+ configureCalibrators ();
122+ mIsConfigured = true ;
123+ }
124+
120125 auto tfcounter = o2::header::get<o2::framework::DataProcessingHeader*>(pc.inputs ().get (getCellBinding ()).header )->startTime ;
121126
122127 auto data = pc.inputs ().get <gsl::span<o2::emcal::Cell>>(getCellBinding ());
@@ -171,13 +176,15 @@ class EMCALChannelCalibDevice : public o2::framework::Task
171176 static const char * getCellTriggerRecordBinding () { return " EMCCellsTrgR" ; }
172177
173178 private:
174- std::unique_ptr<o2::emcal::EMCALChannelCalibrator<o2::emcal::EMCALChannelData, o2::emcal::BadChannelMap>> mBadChannelCalibrator ;
175- std::unique_ptr<o2::emcal::EMCALChannelCalibrator<o2::emcal::EMCALTimeCalibData, o2::emcal::TimeCalibrationParams>> mTimeCalibrator ;
176- std::shared_ptr<o2::emcal::EMCALCalibExtractor> mCalibExtractor ;
177- std::shared_ptr<o2::base::GRPGeomRequest> mCCDBRequest ;
178- std::string mCalibType ;
179- bool isBadChannelCalib = true ;
180- bool mLoadCalibParamsFromCCDB = true ;
179+ std::unique_ptr<o2::emcal::EMCALChannelCalibrator<o2::emcal::EMCALChannelData, o2::emcal::BadChannelMap>> mBadChannelCalibrator ; // /< Bad channel calibrator
180+ std::unique_ptr<o2::emcal::EMCALChannelCalibrator<o2::emcal::EMCALTimeCalibData, o2::emcal::TimeCalibrationParams>> mTimeCalibrator ; // /< Time calibrator
181+ std::shared_ptr<o2::emcal::EMCALCalibExtractor> mCalibExtractor ; // /< Calibration postprocessing
182+ std::shared_ptr<o2::base::GRPGeomRequest> mCCDBRequest ; // /< CCDB request for geometry
183+ std::string mCalibType ; // /< Name of the calibration type
184+ bool mIsConfigured = false ; // /< Configure status of calibrators
185+ bool mScaleFactorsInitialized = false ; // /< Scale factor init status
186+ bool isBadChannelCalib = true ; // /< Calibration mode bad channel calib (false := time calib)
187+ bool mLoadCalibParamsFromCCDB = true ; // /< Switch for loading calib params from the CCDB
181188 std::array<double , 2 > timeMeas;
182189
183190 // ________________________________________________________________
@@ -223,6 +230,26 @@ class EMCALChannelCalibDevice : public o2::framework::Task
223230 }
224231 }
225232 }
233+
234+ // / \brief Configure calibrators from the calib params
235+ void configureCalibrators ()
236+ {
237+ if (mTimeCalibrator ) {
238+ LOG (info) << " Configuring time calibrator" ;
239+ mTimeCalibrator ->setSlotLength (EMCALCalibParams::Instance ().slotLength_tc );
240+ if (EMCALCalibParams::Instance ().UpdateAtEndOfRunOnly_tc ) {
241+ mBadChannelCalibrator ->setUpdateAtTheEndOfRunOnly ();
242+ }
243+ }
244+ if (mBadChannelCalibrator ) {
245+ LOG (info) << " Configuring bad channel calibrator" ;
246+ mBadChannelCalibrator ->setSlotLength (EMCALCalibParams::Instance ().slotLength_bc );
247+ if (EMCALCalibParams::Instance ().UpdateAtEndOfRunOnly_bc ) {
248+ mBadChannelCalibrator ->setUpdateAtTheEndOfRunOnly ();
249+ }
250+ mBadChannelCalibrator ->setIsTest (EMCALCalibParams::Instance ().enableTestMode_bc );
251+ }
252+ }
226253};
227254
228255} // namespace calibration
0 commit comments