@@ -62,6 +62,10 @@ void DigitsTask::initialize(o2::framework::InitContext& /*ctx*/)
6262
6363 mIsSignalDigit = o2::mch::createDigitFilter (20 , true , true );
6464
65+ // flags to enable the publication of either 1D and 2D maps of channel rates
66+ mEnable1DRateMaps = getConfigurationParameter<bool >(mCustomParameters , " Enable1DRateMaps" , mEnable1DRateMaps );
67+ mEnable2DRateMaps = getConfigurationParameter<bool >(mCustomParameters , " Enable2DRateMaps" , mEnable2DRateMaps );
68+
6569 // flag to enable extra disagnostics plots; it also enables on-cycle plots
6670 mFullHistos = getConfigurationParameter<bool >(mCustomParameters , " FullHistos" , mFullHistos );
6771
@@ -70,13 +74,25 @@ void DigitsTask::initialize(o2::framework::InitContext& /*ctx*/)
7074 const uint32_t nElecXbins = NumberOfDualSampas;
7175
7276 // Histograms in electronics coordinates
73- mHistogramOccupancyElec = std::make_unique<TH2FRatio>(" Occupancy_Elec" , " Occupancy" , nElecXbins, 0 , nElecXbins, 64 , 0 , 64 , true );
74- mHistogramOccupancyElec ->Sumw2 (kFALSE );
75- publishObject (mHistogramOccupancyElec .get (), " colz" , false , false );
77+ if (mEnable1DRateMaps ) {
78+ mHistogramRatePerDualSampa = std::make_unique<TH1DRatio>(" RatePerDualSampa" , " Average rate per dual sampa;DS index;rate (kHz)" , o2::mch::NumberOfDualSampas, 0 , o2::mch::NumberOfDualSampas, false );
79+ mHistogramRatePerDualSampa ->Sumw2 (kFALSE );
80+ publishObject (mHistogramRatePerDualSampa .get (), " hist" , false , false );
81+
82+ mHistogramRateSignalPerDualSampa = std::make_unique<TH1DRatio>(" RateSignalPerDualSampa" , " Average rate per dual sampa (signal);DS index;rate (kHz)" , o2::mch::NumberOfDualSampas, 0 , o2::mch::NumberOfDualSampas, false );
83+ mHistogramRateSignalPerDualSampa ->Sumw2 (kFALSE );
84+ publishObject (mHistogramRateSignalPerDualSampa .get (), " hist" , false , false );
85+ }
7686
77- mHistogramSignalOccupancyElec = std::make_unique<TH2FRatio>(" OccupancySignal_Elec" , " Occupancy (signal)" , nElecXbins, 0 , nElecXbins, 64 , 0 , 64 , true );
78- mHistogramSignalOccupancyElec ->Sumw2 (kFALSE );
79- publishObject (mHistogramSignalOccupancyElec .get (), " colz" , false , false );
87+ if (mEnable2DRateMaps ) {
88+ mHistogramOccupancyElec = std::make_unique<TH2FRatio>(" Occupancy_Elec" , " Occupancy" , nElecXbins, 0 , nElecXbins, 64 , 0 , 64 , true );
89+ mHistogramOccupancyElec ->Sumw2 (kFALSE );
90+ publishObject (mHistogramOccupancyElec .get (), " colz" , false , false );
91+
92+ mHistogramSignalOccupancyElec = std::make_unique<TH2FRatio>(" OccupancySignal_Elec" , " Occupancy (signal)" , nElecXbins, 0 , nElecXbins, 64 , 0 , 64 , true );
93+ mHistogramSignalOccupancyElec ->Sumw2 (kFALSE );
94+ publishObject (mHistogramSignalOccupancyElec .get (), " colz" , false , false );
95+ }
8096
8197 mHistogramDigitsOrbitElec = std::make_unique<TH2F>(" DigitOrbit_Elec" , " Digit orbits vs DS Id" , nElecXbins, 0 , nElecXbins, 130 , -1 , 129 );
8298 publishObject (mHistogramDigitsOrbitElec .get (), " colz" , true , false );
@@ -159,9 +175,17 @@ void DigitsTask::plotDigit(const o2::mch::Digit& digit)
159175 // fecId and channel uniquely identify each physical pad
160176 int fecId = getDsIndex (DsDetId{ deId, dsId });
161177
162- mHistogramOccupancyElec ->getNum ()->Fill (fecId, channel);
163- if (isSignal) {
164- mHistogramSignalOccupancyElec ->getNum ()->Fill (fecId, channel);
178+ if (mEnable1DRateMaps ) {
179+ mHistogramRatePerDualSampa ->getNum ()->Fill (fecId);
180+ if (isSignal) {
181+ mHistogramRateSignalPerDualSampa ->getNum ()->Fill (fecId);
182+ }
183+ }
184+ if (mEnable2DRateMaps ) {
185+ mHistogramOccupancyElec ->getNum ()->Fill (fecId, channel);
186+ if (isSignal) {
187+ mHistogramSignalOccupancyElec ->getNum ()->Fill (fecId, channel);
188+ }
165189 }
166190
167191 // --------------------------------------------------------------------------
@@ -201,8 +225,17 @@ void DigitsTask::updateOrbits()
201225 static constexpr double sOrbitLengthInMicroseconds = sOrbitLengthInNanoseconds / 1000 ;
202226 static constexpr double sOrbitLengthInMilliseconds = sOrbitLengthInMicroseconds / 1000 ;
203227
204- mHistogramOccupancyElec ->getDen ()->SetBinContent (1 , 1 , mNOrbits * sOrbitLengthInMilliseconds );
205- mHistogramSignalOccupancyElec ->getDen ()->SetBinContent (1 , 1 , mNOrbits * sOrbitLengthInMilliseconds );
228+ if (mEnable1DRateMaps ) {
229+ for (int dsIndex = 0 ; dsIndex <= NumberOfDualSampas; dsIndex++) {
230+ mHistogramRatePerDualSampa ->getDen ()->SetBinContent (dsIndex + 1 , mNOrbits * sOrbitLengthInMilliseconds * numberOfDualSampaChannels (dsIndex));
231+ mHistogramRateSignalPerDualSampa ->getDen ()->SetBinContent (dsIndex + 1 , mNOrbits * sOrbitLengthInMilliseconds * numberOfDualSampaChannels (dsIndex));
232+ }
233+ }
234+
235+ if (mEnable2DRateMaps ) {
236+ mHistogramOccupancyElec ->getDen ()->SetBinContent (1 , 1 , mNOrbits * sOrbitLengthInMilliseconds );
237+ mHistogramSignalOccupancyElec ->getDen ()->SetBinContent (1 , 1 , mNOrbits * sOrbitLengthInMilliseconds );
238+ }
206239}
207240
208241void DigitsTask::resetOrbits ()
@@ -217,8 +250,14 @@ void DigitsTask::endOfCycle()
217250 updateOrbits ();
218251
219252 // update mergeable ratios
220- mHistogramOccupancyElec ->update ();
221- mHistogramSignalOccupancyElec ->update ();
253+ if (mEnable1DRateMaps ) {
254+ mHistogramRatePerDualSampa ->update ();
255+ mHistogramRateSignalPerDualSampa ->update ();
256+ }
257+ if (mEnable2DRateMaps ) {
258+ mHistogramOccupancyElec ->update ();
259+ mHistogramSignalOccupancyElec ->update ();
260+ }
222261}
223262
224263void DigitsTask::endOfActivity (const Activity& /* activity*/ )
0 commit comments