@@ -64,56 +64,65 @@ Quality DigitsQcCheck::check(std::map<std::string, std::shared_ptr<MonitorObject
6464{
6565 Quality result = Quality::Null;
6666 // This info must be available from the beginning
67+ TH1 * meanMultiHits = nullptr ;
6768 for (auto & item : *moMap) {
6869 if (item.second ->getName () == " NbDigitTF" ) {
6970 mHistoHelper .setNTFs (static_cast <TH1F *>(item.second ->getObject ())->GetBinContent (1 ));
70- break ;
71+ } else if (item.second ->getName () == " MeanMultiHits" ) {
72+ meanMultiHits = static_cast <TH1 *>(item.second ->getObject ());
7173 }
7274 }
7375
74- for (auto & [moName, mo] : *moMap) {
75- if (mo->getName () == " MeanMultiHits" ) {
76- int nGood = 0 , nNull = 0 , nBad = 0 , nMedium = 0 ;
77- auto globalQual = Quality::Null;
78- for (int icath = 0 ; icath < 2 ; ++icath) {
79- for (int ich = 0 ; ich < 4 ; ++ich) {
80- int ibin = 1 + 4 * icath + ich;
81- auto histo = static_cast <TH1F *>(mo->getObject ());
82- auto mean = histo->GetBinContent (ibin);
83- auto qual = Quality::Good;
84- if (mean == 0 .) {
85- ++nNull;
86- qual = Quality::Null;
87- } else if (mean > mMeanMultThreshold || mean < mMinMultThreshold ) {
88- qual = Quality::Bad;
89- result = qual;
90- ++nBad;
91- } else if (mean > mMeanMultThreshold / 2 .) {
92- qual = Quality::Medium;
93- ++nMedium;
94- } else {
95- ++nGood;
96- }
97- std::string hName = " MultHit" ;
98- hName += histo->GetXaxis ()->GetBinLabel (ibin);
99- mQualityMap [hName] = qual;
76+ // Fill the summary multiplicity histogram
77+ if (meanMultiHits) {
78+ meanMultiHits->Reset ();
79+ std::unordered_map<std::string, int > ref;
80+ for (int ibin = 1 ; ibin <= meanMultiHits->GetNbinsX (); ++ibin) {
81+ std::string hName = " MultHit" ;
82+ hName += meanMultiHits->GetXaxis ()->GetBinLabel (ibin);
83+ ref[hName] = ibin;
84+ }
85+
86+ int nGood = 0 , nNull = 0 , nBad = 0 , nMedium = 0 ;
87+ auto globalQual = Quality::Null;
88+ for (auto & item : *moMap) {
89+ if (item.second ->getName ().find (" MultHitMT" ) != std::string::npos) {
90+ std::string hName = item.second ->getName ();
91+ auto mean = static_cast <TH1 *>(item.second ->getObject ())->GetMean ();
92+ meanMultiHits->SetBinContent (ref[hName], mean);
93+ auto qual = Quality::Good;
94+ if (mean == 0 .) {
95+ ++nNull;
96+ qual = Quality::Null;
97+ } else if (mean > mMeanMultThreshold || mean < mMinMultThreshold ) {
98+ qual = Quality::Bad;
99+ result = qual;
100+ ++nBad;
101+ } else if (mean > mMeanMultThreshold / 2 .) {
102+ qual = Quality::Medium;
103+ ++nMedium;
104+ } else {
105+ ++nGood;
100106 }
107+ mQualityMap [hName] = qual;
101108 }
102- if (nBad > 0 ) {
103- globalQual = Quality::Bad;
104- } else if (nMedium > 0 ) {
105- globalQual = Quality::Medium;
106- } else if (nGood == 8 ) {
107- globalQual = Quality::Good;
108- }
109- mQualityMap [mo->getName ()] = globalQual;
110109 }
110+ if (nBad > 0 ) {
111+ globalQual = Quality::Bad;
112+ } else if (nMedium > 0 ) {
113+ globalQual = Quality::Medium;
114+ } else if (nGood == 8 ) {
115+ globalQual = Quality::Good;
116+ }
117+ mQualityMap [meanMultiHits->GetName ()] = globalQual;
118+ }
111119
112- if (mo->getName () == " LocalBoardsMap" ) {
120+ for (auto & item : *moMap) {
121+ if (item.second ->getName () == " LocalBoardsMap" ) {
113122 if (mHistoHelper .getNTFs () > 0 ) {
114123 int nEmptyLB = 0 ;
115124 int nBadLB = 0 ;
116- auto histo = static_cast <TH2F *>(mo ->getObject ());
125+ auto histo = static_cast <TH2F *>(item. second ->getObject ());
117126 mHistoHelper .normalizeHistoTokHz (histo);
118127 for (int bx = 1 ; bx < 15 ; bx++) {
119128 for (int by = 1 ; by < 37 ; by++) {
@@ -147,7 +156,7 @@ Quality DigitsQcCheck::check(std::map<std::string, std::shared_ptr<MonitorObject
147156 auto flag = o2::quality_control::FlagReason ();
148157 qual.addReason (flag, fmt::format (" {} boards empty" , nEmptyLB));
149158 }
150- mQualityMap [mo ->getName ()] = qual;
159+ mQualityMap [item. second ->getName ()] = qual;
151160 } // if mNTFInSeconds > 0.
152161 }
153162 }
0 commit comments