@@ -30,14 +30,31 @@ namespace o2::quality_control_modules::its
3030
3131Quality ITSDecodingErrorCheck::check (std::map<std::string, std::shared_ptr<MonitorObject>>* moMap)
3232{
33+ // set timer
34+ if (nCycle == 0 ) {
35+ start = std::chrono::high_resolution_clock::now ();
36+ nCycle++;
37+ } else {
38+ end = std::chrono::high_resolution_clock::now ();
39+ TIME = std::chrono::duration_cast<std::chrono::seconds>(end - start).count ();
40+ }
3341 std::vector<int > vDecErrorLimits = convertToArray<int >(o2::quality_control_modules::common::getFromConfig<string>(mCustomParameters , " DecLinkErrorLimits" , " " ));
3442 if (vDecErrorLimits.size () != o2::itsmft::GBTLinkDecodingStat::NErrorsDefined) {
3543 LOG (error) << " Incorrect vector with DecodingError limits, check .json" << ENDM ;
3644 doFlatCheck = true ;
3745 }
46+ std::vector<float > vDecErrorLimitsRatio = convertToArray<float >(o2::quality_control_modules::common::getFromConfig<string>(mCustomParameters , " DecLinkErrorLimitsRatio" , " " ));
47+ if (vDecErrorLimitsRatio.size () != o2::itsmft::GBTLinkDecodingStat::NErrorsDefined) {
48+ LOG (error) << " Incorrect vector with DecodingError limits Ratio, check .json" << ENDM ;
49+ doFlatCheck = true ;
50+ }
51+ std::vector<int > vDecErrorType = convertToArray<int >(o2::quality_control_modules::common::getFromConfig<string>(mCustomParameters , " DecLinkErrorType" , " " ));
52+ if (vDecErrorType.size () != o2::itsmft::GBTLinkDecodingStat::NErrorsDefined) {
53+ LOG (error) << " Incorrect vector with DecodingError Type, check .json" << ENDM ;
54+ doFlatCheck = true ;
55+ }
3856
3957 Quality result = Quality::Null;
40-
4158 for (auto & [moName, mo] : *moMap) {
4259 (void )moName;
4360 if (mo->getName () == " General/ChipErrorPlots" ) {
@@ -60,15 +77,30 @@ Quality ITSDecodingErrorCheck::check(std::map<std::string, std::shared_ptr<Monit
6077
6178 if (vDecErrorLimits[iBin - 1 ] < 0 )
6279 continue ; // skipping bin
63- if (vDecErrorLimits[iBin - 1 ] <= h->GetBinContent (iBin)) {
64- vListErrorIdBad.push_back (iBin - 1 );
65- result.set (Quality::Bad);
66- result.addReason (o2::quality_control::FlagReasonFactory::Unknown (), Form (" BAD: ID = %d, %s" , iBin - 1 , std::string (statistics.ErrNames [iBin - 1 ]).c_str ()));
67- } else if (vDecErrorLimits[iBin - 1 ] / 2 < h->GetBinContent (iBin)) {
68- vListErrorIdMedium.push_back (iBin - 1 );
69- if (result != Quality::Bad) {
70- result.addReason (o2::quality_control::FlagReasonFactory::Unknown (), Form (" Medium: ID = %d, %s" , iBin - 1 , std::string (statistics.ErrNames [iBin - 1 ]).c_str ()));
71- result.set (Quality::Medium);
80+
81+ if (vDecErrorType[iBin - 1 ] == 1 && TIME != 0 ) {
82+ if (vDecErrorLimitsRatio[iBin - 1 ] <= h->GetBinContent (iBin) / TIME ) {
83+ vListErrorIdBad.push_back (iBin - 1 );
84+ result.set (Quality::Bad);
85+ result.addReason (o2::quality_control::FlagReasonFactory::Unknown (), Form (" BAD: ID = %d, %s" , iBin - 1 , std::string (statistics.ErrNames [iBin - 1 ]).c_str ()));
86+ } else if (vDecErrorLimitsRatio[iBin - 1 ] / 2 < h->GetBinContent (iBin) / TIME ) {
87+ vListErrorIdMedium.push_back (iBin - 1 );
88+ if (result != Quality::Bad) {
89+ result.addReason (o2::quality_control::FlagReasonFactory::Unknown (), Form (" Medium: ID = %d, %s" , iBin - 1 , std::string (statistics.ErrNames [iBin - 1 ]).c_str ()));
90+ result.set (Quality::Medium);
91+ }
92+ }
93+ } else { // normal check, as we have in the code now
94+ if (vDecErrorLimits[iBin - 1 ] <= h->GetBinContent (iBin)) {
95+ vListErrorIdBad.push_back (iBin - 1 );
96+ result.set (Quality::Bad);
97+ result.addReason (o2::quality_control::FlagReasonFactory::Unknown (), Form (" BAD: ID = %d, %s" , iBin - 1 , std::string (statistics.ErrNames [iBin - 1 ]).c_str ()));
98+ } else if (vDecErrorLimits[iBin - 1 ] / 2 < h->GetBinContent (iBin)) {
99+ vListErrorIdMedium.push_back (iBin - 1 );
100+ if (result != Quality::Bad) {
101+ result.addReason (o2::quality_control::FlagReasonFactory::Unknown (), Form (" Medium: ID = %d, %s" , iBin - 1 , std::string (statistics.ErrNames [iBin - 1 ]).c_str ()));
102+ result.set (Quality::Medium);
103+ }
72104 }
73105 }
74106 }
0 commit comments