- Update thresholds with online values
[u/mrichter/AliRoot.git] / MUON / AliMUONTriggerQAChecker.cxx
index 8f5f5fb..d23d235 100644 (file)
@@ -84,39 +84,51 @@ AliMUONTriggerQAChecker::CheckRaws(TObjArray** list, const AliMUONRecoParam* )
   // BEGIN OF LIMITS
   // Fixme: Move me to reference histos
   Float_t safeFactor = 5.;
-  Float_t alarmPercentTrigAlgo[AliMUONQAIndices::kNtrigAlgoErrorBins] = {safeFactor*1., safeFactor*1., safeFactor*1., 100., 100., 100., 100., safeFactor*1., safeFactor*1., safeFactor*1.};
-  Float_t alarmPercentCalib[AliMUONQAIndices::kNtrigCalibSummaryBins] = {safeFactor*0.4, safeFactor*1., 6.2, 0.0001, safeFactor*0.4};
-  Float_t alarmPercentReadout[AliMUONQAIndices::kNtrigStructErrorBins] = {safeFactor*1., safeFactor*1., safeFactor*1., safeFactor*1.};
+  Float_t warningPercentTrigAlgo[AliMUONQAIndices::kNtrigAlgoErrorBins] = {safeFactor*1., safeFactor*1., safeFactor*1., 100., 100., 100., 100., safeFactor*1., safeFactor*1., safeFactor*1.};
+  Float_t warningPercentCalib[AliMUONQAIndices::kNtrigCalibSummaryBins] = {safeFactor*0.4, safeFactor*1., 6.2, 0.0001, safeFactor*0.4};
+  Float_t warningPercentReadout[AliMUONQAIndices::kNtrigStructErrorBins] = {safeFactor*1., safeFactor*1., safeFactor*1., safeFactor*1.};
 
-  Float_t* alarmPercent[kNrawsHistos] = {alarmPercentTrigAlgo, alarmPercentCalib, alarmPercentReadout};
+  Float_t* warningPercent[kNrawsHistos] = {warningPercentTrigAlgo, warningPercentCalib, warningPercentReadout};
+  
+  Float_t errorFactor = 30.;
+  Float_t errorPercentTrigAlgo[AliMUONQAIndices::kNtrigAlgoErrorBins] = {errorFactor*1., errorFactor*1., errorFactor*1., 100., 100., 100., 100., errorFactor*1., errorFactor*1., errorFactor*1.};
+  Float_t errorPercentCalib[AliMUONQAIndices::kNtrigCalibSummaryBins] = {errorFactor*0.4, errorFactor*1., 3.*6.2, 3.*0.0001, errorFactor*0.4};
+  Float_t errorPercentReadout[AliMUONQAIndices::kNtrigStructErrorBins] = {errorFactor*1., errorFactor*1., errorFactor*1., errorFactor*1.};
   // END OF LIMTS
 
+  Float_t* errorPercent[kNrawsHistos] = {errorPercentTrigAlgo, errorPercentCalib, errorPercentReadout};
+  
   TObjArray messages;
   messages.SetOwner(kTRUE);
 
   TH1* currHisto = 0x0;
   for (Int_t specie = 0 ; specie < AliRecoParam::kNSpecies ; specie++) {
     rv[specie] = AliMUONVQAChecker::kInfo;
-    AliMUONVQAChecker::ECheckCode currRv = rv[specie];
 
     TH1* hAnalyzedEvents = AliQAv1::GetData(list,AliMUONQAIndices::kTriggerRawNAnalyzedEvents,AliRecoParam::ConvertIndex(specie));
     Int_t nAnalyzedEvents = 0;
     if ( hAnalyzedEvents ) 
       nAnalyzedEvents = TMath::Nint(hAnalyzedEvents->GetBinContent(1));
 
-    if ( nAnalyzedEvents == 0 )
-      currRv = AliMUONVQAChecker::kFatal;
+    //if ( nAnalyzedEvents == 0 ) rv[specie] = AliMUONVQAChecker::kFatal;
 
     for(Int_t ihisto = 0; ihisto<kNrawsHistos; ihisto++){
+      AliMUONVQAChecker::ECheckCode currRv = AliMUONVQAChecker::kInfo;
       messages.Clear();
       currHisto = AliQAv1::GetData(list,histoRawsPercentIndex[ihisto],AliRecoParam::ConvertIndex(specie));
       if ( ! currHisto ) continue;
 
       Int_t nbins = currHisto->GetXaxis()->GetNbins();
       for (Int_t ibin = 1; ibin<=nbins; ibin++){
-       Double_t binContent = currHisto->GetBinContent(ibin);
-       if (binContent > alarmPercent[ihisto][ibin-1])
-         currRv = AliMUONVQAChecker::kWarning;
+        Double_t binContent = currHisto->GetBinContent(ibin);
+        if ( binContent > errorPercent[ihisto][ibin-1] )
+          currRv = AliMUONVQAChecker::kError;
+        else if ( binContent > warningPercent[ihisto][ibin-1] )
+          currRv = AliMUONVQAChecker::kWarning;
+        else if ( ibin == 4 && binContent > 50. && AliRecoParam::ConvertIndex(specie) == AliRecoParam::kCalib) {
+          messages.Add(new TObjString("Do not panic:")); 
+          messages.Add(new TObjString("copy errors do not affect data"));
+        }
       } // loop on bins
       if ( currRv != AliMUONVQAChecker::kInfo ) {
        switch ( histoRawsPercentIndex[ihisto] ) {
@@ -126,6 +138,7 @@ AliMUONTriggerQAChecker::CheckRaws(TObjArray** list, const AliMUONRecoParam* )
          break;
        case AliMUONQAIndices::kTriggerReadOutErrorsNorm:
          messages.Add(new TObjString("Readout errors"));
+         break;
        }
        if ( currRv == AliMUONVQAChecker::kWarning )
          messages.Add(new TObjString("are a little bit high"));
@@ -133,7 +146,7 @@ AliMUONTriggerQAChecker::CheckRaws(TObjArray** list, const AliMUONRecoParam* )
                  currRv == AliMUONVQAChecker::kFatal )
          messages.Add(new TObjString("are too high"));
       }
-      else {
+      else if ( nAnalyzedEvents != 0 ) {
        switch ( histoRawsPercentIndex[ihisto] ) {
        case AliMUONQAIndices::kTriggerErrorSummaryNorm:
        case AliMUONQAIndices::kTriggerCalibSummaryNorm:
@@ -142,9 +155,10 @@ AliMUONTriggerQAChecker::CheckRaws(TObjArray** list, const AliMUONRecoParam* )
          break;
        }
       }
-      rv[specie] = MarkHisto(*currHisto, currRv);
+      if ( MarkHisto(*currHisto, currRv) < rv[specie] )
+       rv[specie] = currRv;
       currHisto->GetYaxis()->SetRangeUser(0., 110.);
-      SetupHisto(nAnalyzedEvents, messages, *currHisto, rv[specie]);
+      SetupHisto(nAnalyzedEvents, messages, *currHisto, currRv);
     } // loop on histos
   } // loop on species
 
@@ -175,8 +189,8 @@ void AliMUONTriggerQAChecker::SetupHisto(Int_t nevents, const TObjArray& message
   /// Add text to histos
   //
 
-  Double_t y1 = 0.97 - (messages.GetLast()+2)*0.075;
-  TPaveText* text = new TPaveText(0.5,y1,0.99,0.99,"NDC");
+  Double_t y1 = 0.87 - (messages.GetLast()+2)*0.075;
+  TPaveText* text = new TPaveText(0.25,y1,0.75,0.89,"NDC");
     
   text->AddText(Form("MTR - Total events %i", nevents));
     
@@ -186,37 +200,39 @@ void AliMUONTriggerQAChecker::SetupHisto(Int_t nevents, const TObjArray& message
   while ( ( str = static_cast<TObjString*>(next()) ) ){
     text->AddText(str->String());
   }
-    
-  if ( nevents == 0 ) {
-    text->AddText("No event analyzed.");
-    text->AddText("Please make sure this is the MTR agent!");
-    text->AddText("(we share plots with MCH)");
-  }
-
-  TString defaultText = "";
 
+  TString defaultText = "";  
   Int_t color = 0;
-  switch ( code ) {
-  case AliMUONVQAChecker::kInfo:
-    color = kGreen;
-    defaultText = "All is fine!";
-    break;
-  case AliMUONVQAChecker::kWarning:
-    color = kYellow;
-    defaultText = "Please keep an eye on it!";
-    break;
-  case AliMUONVQAChecker::kFatal:
-    color = kRed;
-    defaultText = "This is bad: PLEASE CALL EXPERT!!!";
-    break;
-  default:
-    color = kOrange;
-    defaultText = "PLEASE NOTIFY EXPERT! (NOT at night)";
-    break;
+  
+  if ( nevents == 0 ) {
+    color = AliMUONVQAChecker::kFatalColor;
+    defaultText = "No events analyzed!";
+  }
+  else if ( nevents <= 20 ) {
+    color = AliMUONVQAChecker::kWarningColor;
+    text->AddText("Not enough events to judge");
+    text->AddText("Please wait for more statistics");
+  }
+  else {
+    switch ( code ) {
+      case AliMUONVQAChecker::kInfo:
+        color = AliMUONVQAChecker::kInfoColor;
+        defaultText = "All is fine!";
+        break;
+      case AliMUONVQAChecker::kWarning:
+        color = AliMUONVQAChecker::kWarningColor;
+        defaultText = "Please keep an eye on it!";
+        break;
+      case AliMUONVQAChecker::kFatal:
+        color = AliMUONVQAChecker::kFatalColor;
+        defaultText = "PLEASE CALL MUON TRIGGER EXPERT!!!";
+        break;
+      default:
+        color = AliMUONVQAChecker::kErrorColor;
+        defaultText = "PLEASE CALL MUON TRIGGER EXPERT!";
+        break;
+    }
   }
-
-  if ( nevents == 0 )
-    defaultText = "Otherwise PLEASE CALL EXPERT!";
 
   text->AddText(defaultText.Data());
   text->SetFillColor(color);
@@ -226,5 +242,6 @@ void AliMUONTriggerQAChecker::SetupHisto(Int_t nevents, const TObjArray& message
 
   histo.SetStats(kFALSE);
     
+  histo.GetListOfFunctions()->Delete();
   histo.GetListOfFunctions()->Add(text);
 }