]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - MUON/AliMUONTriggerQAChecker.cxx
adding protections
[u/mrichter/AliRoot.git] / MUON / AliMUONTriggerQAChecker.cxx
index 3450f2cfc0ce7f64770f4a30f392688ff7aeb34b..5ff45df18fca6993793aee933ea6afef2159ea6e 100644 (file)
@@ -84,13 +84,20 @@ 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., 3.1, 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., 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);
 
@@ -99,14 +106,13 @@ AliMUONTriggerQAChecker::CheckRaws(TObjArray** list, const AliMUONRecoParam* )
     rv[specie] = AliMUONVQAChecker::kInfo;
 
     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 )
-      rv[specie] = AliMUONVQAChecker::kFatal;
+    //if ( nAnalyzedEvents == 0 ) rv[specie] = AliMUONVQAChecker::kFatal;
 
     for(Int_t ihisto = 0; ihisto<kNrawsHistos; ihisto++){
+      Int_t nAnalyzedEvents = 0;
+      Int_t ibinNevents = ( histoRawsPercentIndex[ihisto] == AliMUONQAIndices::kTriggerReadOutErrorsNorm ) ? 1 : 2;
+      if ( hAnalyzedEvents ) nAnalyzedEvents = TMath::Nint(hAnalyzedEvents->GetBinContent(ibinNevents));
       AliMUONVQAChecker::ECheckCode currRv = AliMUONVQAChecker::kInfo;
       messages.Clear();
       currHisto = AliQAv1::GetData(list,histoRawsPercentIndex[ihisto],AliRecoParam::ConvertIndex(specie));
@@ -114,13 +120,15 @@ AliMUONTriggerQAChecker::CheckRaws(TObjArray** list, const AliMUONRecoParam* )
 
       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;
-       else if ( ibin == 4 && binContent > 50. ) {
-         messages.Add(new TObjString("Do not panic:")); 
-         messages.Add(new TObjString("copy errors do not affect data"));
-       }
+        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] ) {
@@ -138,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:
@@ -150,7 +158,7 @@ AliMUONTriggerQAChecker::CheckRaws(TObjArray** list, const AliMUONRecoParam* )
       if ( MarkHisto(*currHisto, currRv) < rv[specie] )
        rv[specie] = currRv;
       currHisto->GetYaxis()->SetRangeUser(0., 110.);
-      SetupHisto(nAnalyzedEvents, messages, *currHisto, currRv);
+      SetupHisto(nAnalyzedEvents, messages, *currHisto, currRv, specie);
     } // loop on histos
   } // loop on species
 
@@ -175,54 +183,59 @@ AliMUONTriggerQAChecker::CheckESD(TObjArray** , const AliMUONRecoParam* )
 
 
 //___________________________________________________________________ 
-void AliMUONTriggerQAChecker::SetupHisto(Int_t nevents, const TObjArray& messages, TH1& histo, AliMUONVQAChecker::ECheckCode code)
+void AliMUONTriggerQAChecker::SetupHisto(Int_t nevents, const TObjArray& messages, TH1& histo, AliMUONVQAChecker::ECheckCode code, Int_t esIndex)
 {
   //
   /// 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");
-    
-  text->AddText(Form("MTR - Total events %i", nevents));
-    
-  TIter next(&messages);
-  TObjString* str;
-    
-  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)");
-  }
+  Double_t y1 = 0.87 - (messages.GetLast()+2)*0.075;
+  TPaveText* text = new TPaveText(0.25,y1,0.75,0.89,"NDC");
+  
+  Int_t eventLimit = ( AliRecoParam::ConvertIndex(esIndex) == AliRecoParam::kCalib ) ? 5 : 20;
 
-  TString defaultText = "";
+  text->AddText(Form("MTR - Specie: %s", AliRecoParam::GetEventSpecieName(esIndex)));
+  text->AddText(Form("Total events %i", nevents));
 
+  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 <= eventLimit ) {
+    color = AliMUONVQAChecker::kWarningColor;
+    text->AddText("Not enough events to judge");
+    defaultText = "Please wait for more statistics";
+  }
+  else {
+    TIter next(&messages);
+    TObjString* str;
+    
+    while ( ( str = static_cast<TObjString*>(next()) ) ){
+      text->AddText(str->String());
+    }
+    
+    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);
@@ -232,5 +245,6 @@ void AliMUONTriggerQAChecker::SetupHisto(Int_t nevents, const TObjArray& message
 
   histo.SetStats(kFALSE);
     
+  histo.GetListOfFunctions()->Delete();
   histo.GetListOfFunctions()->Add(text);
 }