Fixing some problems for the QA
authorlaphecet <laphecet@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 11 Oct 2010 09:57:55 +0000 (09:57 +0000)
committerlaphecet <laphecet@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 11 Oct 2010 09:57:55 +0000 (09:57 +0000)
 - uniformized color scheme used for info, warning, error (for Pt2)
 - quality bit was not correctly set (important for Pt2)
 - some expert trigger histo were unfortunately "masked" by a previous commit, now hopefully fixed
 - allow checking to run properly even if only MCH or only MTR QA is activated.

(Laurent)

MUON/AliMUONQAChecker.cxx
MUON/AliMUONQAChecker.h
MUON/AliMUONQAIndices.h
MUON/AliMUONTrackerQAChecker.cxx
MUON/AliMUONTrackerQADataMakerRec.cxx
MUON/AliMUONTriggerQAChecker.cxx
MUON/AliMUONTriggerQADataMakerRec.cxx
MUON/AliMUONVQAChecker.h

index 463ef7d..2b8db5f 100644 (file)
 #include "AliMUONTrackerQAChecker.h"
 #include "AliMUONTriggerQAChecker.h"
 #include "AliCodeTimer.h"
+#include "AliMUONQAIndices.h"
 
 /// \cond CLASSIMP
 ClassImp(AliMUONQAChecker)
 /// \endcond
 
+namespace
+{
+  const Int_t TRACKER=0;
+  const Int_t TRIGGER=1;
+}
+
 //__________________________________________________________________
 AliMUONQAChecker::AliMUONQAChecker() : 
     AliQACheckerBase("MUON","MUON Quality Assurance Data Maker"),
@@ -39,8 +46,8 @@ fCheckers(new TObjArray)
 {
        /// ctor
   fCheckers->SetOwner(kTRUE);
-  fCheckers->Add(new AliMUONTrackerQAChecker());
-  fCheckers->Add(new AliMUONTriggerQAChecker());
+  fCheckers->AddAt(new AliMUONTrackerQAChecker(),TRACKER);
+  fCheckers->AddAt(new AliMUONTriggerQAChecker(),TRIGGER);
 }          
 
 //__________________________________________________________________
@@ -60,8 +67,6 @@ AliMUONQAChecker::Check(Double_t* rv, AliQAv1::ALITASK_t index,
   
   AliCodeTimerAuto(AliQAv1::GetTaskName(index),0);
   
-  TIter next(fCheckers);
-  AliMUONVQAChecker* qac;
   const AliMUONRecoParam* muonRecoParam = static_cast<const AliMUONRecoParam*>(recoParam);
   AliMUONVQAChecker::ECheckCode* ecc(0x0);
 
@@ -70,8 +75,34 @@ AliMUONQAChecker::Check(Double_t* rv, AliQAv1::ALITASK_t index,
     rv[i] = -1.0;
   }
   
-  while ( ( qac = static_cast<AliMUONVQAChecker*>(next())) )
+  for ( Int_t ic = 0; ic <= fCheckers->GetLast(); ++ic )
   {
+    if ( ic != TRACKER && ic != TRIGGER ) continue;
+
+    Bool_t trackerRequested(kTRUE);
+    Bool_t triggerRequested(kTRUE);
+    
+    for ( Int_t i = 0; i < AliRecoParam::kNSpecies; ++i ) 
+    {
+      // no need to take into account detector that was not requested
+      if ( ic == TRACKER && AliQAv1::GetData(list,AliMUONQAIndices::kTrackerIsThere,AliRecoParam::ConvertIndex(i))==0x0 ) trackerRequested=kFALSE;
+      if ( ic == TRIGGER && AliQAv1::GetData(list,AliMUONQAIndices::kTriggerIsThere,AliRecoParam::ConvertIndex(i))==0x0 ) triggerRequested=kFALSE;
+    }
+    
+    if ( ic == TRACKER && !trackerRequested ) 
+    {
+      AliInfo("Skipping tracker check as tracker not requested");
+      continue;      
+    }
+    
+    if ( ic == TRIGGER && !triggerRequested ) 
+    {
+      AliInfo("Skipping trigger check as trigger not requested");
+      continue;      
+    }
+    
+    AliMUONVQAChecker* qac = static_cast<AliMUONVQAChecker*>(fCheckers->At(ic));
+    
     if ( index == AliQAv1::kRAW ) 
     {    
       ecc = qac->CheckRaws(list,muonRecoParam);
@@ -91,6 +122,10 @@ AliMUONQAChecker::Check(Double_t* rv, AliQAv1::ALITASK_t index,
     {
       for ( Int_t i = 0; i < AliRecoParam::kNSpecies; ++i ) 
       {
+        // no need to take into account detector that was not requested
+        if ( ic == TRACKER && AliQAv1::GetData(list,AliMUONQAIndices::kTrackerIsThere,AliRecoParam::ConvertIndex(i))==0x0 ) continue;
+        if ( ic == TRIGGER && AliQAv1::GetData(list,AliMUONQAIndices::kTriggerIsThere,AliRecoParam::ConvertIndex(i))==0x0 ) continue;
+                
         switch ( ecc[i] ) 
         {
           case AliMUONVQAChecker::kInfo:
@@ -106,6 +141,7 @@ AliMUONQAChecker::Check(Double_t* rv, AliQAv1::ALITASK_t index,
             rv[i] = -1.0;
             break;
           default:
+            AliError("Invalid ecc value. FIXME !");
             rv[i] = -1.0;
             break;
         }
@@ -133,32 +169,3 @@ void AliMUONQAChecker::Init(const AliQAv1::DETECTORINDEX_t det)
   hiValue[AliQAv1::kFATAL]      = 0.0 ; 
   SetHiLo(&hiValue[0], &lowValue[0]) ; 
 }
-
-//______________________________________________________________________________
-void 
-AliMUONQAChecker::SetQA(AliQAv1::ALITASK_t index, Double_t * value) const
-{
-  /// sets the QA according the return value of the Check
-
-  AliQAv1 * qa = AliQAv1::Instance(index);
-  
-  for (Int_t specie = 0 ; specie < AliRecoParam::kNSpecies ; specie++) {
-    qa->UnSet(AliQAv1::kFATAL, specie);
-    qa->UnSet(AliQAv1::kWARNING, specie);
-    qa->UnSet(AliQAv1::kERROR, specie);
-    qa->UnSet(AliQAv1::kINFO, specie);
-
-    if ( ! value ) { // No checker is implemented, set all QA to Fatal
-      qa->Set(AliQAv1::kFATAL, specie) ; 
-    } else {
-      if ( value[specie] >= fLowTestValue[AliQAv1::kFATAL] && value[specie] < fUpTestValue[AliQAv1::kFATAL] ) 
-        qa->Set(AliQAv1::kFATAL, specie) ; 
-      else if ( value[specie] > fLowTestValue[AliQAv1::kERROR] && value[specie] <= fUpTestValue[AliQAv1::kERROR]  )
-        qa->Set(AliQAv1::kERROR, specie) ; 
-      else if ( value[specie] > fLowTestValue[AliQAv1::kWARNING] && value[specie] <= fUpTestValue[AliQAv1::kWARNING]  )
-        qa->Set(AliQAv1::kWARNING, specie) ;
-      else if ( value[specie] > fLowTestValue[AliQAv1::kINFO] && value[specie] <= fUpTestValue[AliQAv1::kINFO] ) 
-        qa->Set(AliQAv1::kINFO, specie) ;      
-    }
-  }
-}
index dade2c1..de16304 100644 (file)
@@ -31,8 +31,6 @@ protected:
 
   virtual void Check(Double_t* test, AliQAv1::ALITASK_t index, TObjArray ** list, const AliDetectorRecoParam * recoParam); 
 
-  virtual void SetQA(AliQAv1::ALITASK_t index, Double_t * value) const;        
-
 private:
   /// Not implemented
   AliMUONQAChecker(const AliMUONQAChecker& qac);
index 48a588c..7c77d90 100644 (file)
@@ -31,7 +31,9 @@ namespace AliMUONQAIndices
     kTrackerDDLOccupancy              =  8, ///< DDL occupancy in percent
     kTrackerDDLNofEventsUsed          =  9, ///< nof of events per DDL (used) *WARNING* : same as above
     kTrackerDDLNofEventsSeen          = 10,  ///< nof of events per DDL (seen)
-    kTrackerData                      = 11 ///< Accumulated data
+    kTrackerData                      = 11, ///< Accumulated data
+    kTrackerIsThere                   = 12, ///< whether we're making QA of tracker or not
+    kTriggerIsThere                   = 13  ///< whether we're making QA of trigger or not
   };
   
   /// Raw/digits histograms indices
@@ -44,41 +46,41 @@ namespace AliMUONQAIndices
 
     kTriggerScalersTime       = 60, ///< Trigger scalers acquisition time index
     kTriggerScalers           = 61, ///< Trigger scalers histogram per plane index
-    kTriggerScalersDisplay    = 62, ///< Trigger scalers display histogram per plane index
-    kTriggerCalibSummary      = 63, ///< Number of responding strips/boards and noisy strips 
-    kTriggerCalibSummaryNorm  = 64, ///< Percentage of responding strips/boards and noisy strips
-    kTriggerErrorLocalXPos = 65, ///< Local board: Number of XPos Error vs Local Board Id
-    kTriggerErrorLocalYPos = 66, ///< Local board: Number of YPos Error vs Local Board Id
-    kTriggerErrorLocalDev  = 67, ///< Local board: Number of Deviation Error vs Local Board
-    kTriggerErrorLocalTriggerDec = 68, ///< Local board: Number of Trigger Decision (All Pt) Error vs Local Board Id
-    kTriggerErrorLocalLPtLSB = 69, ///< Local board: Number of LSB Low Pt Error vs Local Board Id
-    kTriggerErrorLocalLPtMSB = 70, ///< Local board: Number of MSB Low Pt Error vs Local Board Id
-    kTriggerErrorLocalHPtLSB = 71, ///< Local board: Number of LSB High Pt Error vs Local Board Id
-    kTriggerErrorLocalHPtMSB = 72, ///< Local board: Number of MSB High Pt Error vs Local Board Id
-    kTriggerErrorLocalTrigY  = 73, ///< Local board: Number of TrigY Error vs Local Board Id
-    kTriggerErrorLocal2RegionalLPtLSB  = 74, ///< Local to Regional: Number of LPt LSB error vs Local Board Id
-    kTriggerErrorLocal2RegionalLPtMSB  = 75, ///< Local to Regional: Number of LPt MSB error vs Local Board Id
-    kTriggerErrorLocal2RegionalHPtLSB  = 76, ///< Local to Regional: Number of HPt LSB error vs Local Board Id
-    kTriggerErrorLocal2RegionalHPtMSB  = 77, ///< Local to Regional: Number of HPt MSB error vs Local Board Id
-    kTriggerErrorOutGlobalFromInGlobal = 78, ///< Global board: Number of error vs output bit    with a re-reconstruction from Global inputs
-    kTriggerErrorOutGlobalFromInLocal = 79, ///< Global board: Number of error vs output bit  with a re-reconstruction from Local inputs
-    kTriggerErrorSummary      = 80,  ///< Number of errors for each trigger decision level (Local, Reg->Local, Reg, Reg->Glob, Global)
-    kTriggerErrorSummaryNorm  = 81,  ///< Percentage of errors for each trigger decision level
-    kTriggerErrorLocalYCopy     = 82, ///< Local board: Number of Y Copy Error vs Local Board Id
-    kTriggerErrorLocalYCopyTest = 83, ///< Local Board: Number of Y copy error tests (for normalization)
-    kTriggerErrorLocalYCopyNorm = 84, ///< Local Board: Number of Y Copy Error vs Local Board Id Normalized to the number of tests
-    kTriggeredBoards          = 85,  ///< Triggered boards histogram index
-    kTriggerBoardsDisplay     = 86,  ///< Triggered boards display histogram index
-    kTriggerReadOutErrors     = 87,  ///< Number of read-out errors
-    kTriggerReadOutErrorsNorm = 88,  ///< Percentage of read-out errors
-    kTriggerGlobalOutput      = 90,  ///< Number of Global outputs and Global algo errors
-    kTriggerGlobalOutputNorm  = 91,  ///< Percentage of Global outputs and Global algo errors
-    kTriggerRawNAnalyzedEvents= 100,  ///< Number of analyzed events per event specie
-    kTriggerLocalRatio4434           = 101,  ///< Ratio 44/34 vs Local Board Id
-    kTriggerRatio4434AllEvents       = 102,  ///< Ratio 44/34 since the beginning of the run vs Event Number
-    kTriggerRatio4434SinceLastUpdate = 103,  ///< Ratio 44/34 for the last kUpdateRatio4434 events vs Event Number
-    kTriggerNumberOf34Dec            = 104,  ///< Number of Decision in coincidence 3/4 vs Local Board
-    kTriggerNumberOf44Dec            = 105   ///< Number of Decision in coincidence 4/4 vs Local Board
+    kTriggerScalersDisplay    = 71, ///< Trigger scalers display histogram per plane index
+    kTriggerCalibSummary      = 80, ///< Number of responding strips/boards and noisy strips 
+    kTriggerCalibSummaryNorm  = 81, ///< Percentage of responding strips/boards and noisy strips
+    kTriggerErrorLocalXPos = 82, ///< Local board: Number of XPos Error vs Local Board Id
+    kTriggerErrorLocalYPos = 83, ///< Local board: Number of YPos Error vs Local Board Id
+    kTriggerErrorLocalDev  = 84, ///< Local board: Number of Deviation Error vs Local Board
+    kTriggerErrorLocalTriggerDec = 85, ///< Local board: Number of Trigger Decision (All Pt) Error vs Local Board Id
+    kTriggerErrorLocalLPtLSB = 86, ///< Local board: Number of LSB Low Pt Error vs Local Board Id
+    kTriggerErrorLocalLPtMSB = 87, ///< Local board: Number of MSB Low Pt Error vs Local Board Id
+    kTriggerErrorLocalHPtLSB = 88, ///< Local board: Number of LSB High Pt Error vs Local Board Id
+    kTriggerErrorLocalHPtMSB = 89, ///< Local board: Number of MSB High Pt Error vs Local Board Id
+    kTriggerErrorLocalTrigY  = 90, ///< Local board: Number of TrigY Error vs Local Board Id
+    kTriggerErrorLocal2RegionalLPtLSB  = 91, ///< Local to Regional: Number of LPt LSB error vs Local Board Id
+    kTriggerErrorLocal2RegionalLPtMSB  = 92, ///< Local to Regional: Number of LPt MSB error vs Local Board Id
+    kTriggerErrorLocal2RegionalHPtLSB  = 93, ///< Local to Regional: Number of HPt LSB error vs Local Board Id
+    kTriggerErrorLocal2RegionalHPtMSB  = 94, ///< Local to Regional: Number of HPt MSB error vs Local Board Id
+    kTriggerErrorOutGlobalFromInGlobal = 95, ///< Global board: Number of error vs output bit    with a re-reconstruction from Global inputs
+    kTriggerErrorOutGlobalFromInLocal = 96, ///< Global board: Number of error vs output bit  with a re-reconstruction from Local inputs
+    kTriggerErrorSummary      = 97,  ///< Number of errors for each trigger decision level (Local, Reg->Local, Reg, Reg->Glob, Global)
+    kTriggerErrorSummaryNorm  = 98,  ///< Percentage of errors for each trigger decision level
+    kTriggerErrorLocalYCopy     = 99, ///< Local board: Number of Y Copy Error vs Local Board Id
+    kTriggerErrorLocalYCopyTest = 100, ///< Local Board: Number of Y copy error tests (for normalization)
+    kTriggerErrorLocalYCopyNorm = 101, ///< Local Board: Number of Y Copy Error vs Local Board Id Normalized to the number of tests
+    kTriggeredBoards          = 102,  ///< Triggered boards histogram index
+    kTriggerBoardsDisplay     = 103,  ///< Triggered boards display histogram index
+    kTriggerReadOutErrors     = 104,  ///< Number of read-out errors
+    kTriggerReadOutErrorsNorm = 105,  ///< Percentage of read-out errors
+    kTriggerGlobalOutput      = 106,  ///< Number of Global outputs and Global algo errors
+    kTriggerGlobalOutputNorm  = 107,  ///< Percentage of Global outputs and Global algo errors
+    kTriggerRawNAnalyzedEvents= 108,  ///< Number of analyzed events per event specie
+    kTriggerLocalRatio4434           = 109,  ///< Ratio 44/34 vs Local Board Id
+    kTriggerRatio4434AllEvents       = 110,  ///< Ratio 44/34 since the beginning of the run vs Event Number
+    kTriggerRatio4434SinceLastUpdate = 111,  ///< Ratio 44/34 for the last kUpdateRatio4434 events vs Event Number
+    kTriggerNumberOf34Dec            = 112,  ///< Number of Decision in coincidence 3/4 vs Local Board
+    kTriggerNumberOf44Dec            = 113   ///< Number of Decision in coincidence 4/4 vs Local Board
     
   };
   
index c4a73fe..cc5fc6d 100644 (file)
@@ -141,15 +141,10 @@ namespace {
   //___________________________________________________________________________  
   Int_t GetColorFromCheckCode(AliMUONVQAChecker::ECheckCode code)
   {
-    const Int_t INFOCOLOR(kGreen);  // green = INFO
-    const Int_t WARNINGCOLOR(kYellow); // yellow = WARNING
-    const Int_t ERRORCOLOR(kOrange); // orange = ERROR
-    const Int_t FATALCOLOR(kRed); // red = FATAL
-    
-    if ( code == AliMUONVQAChecker::kInfo ) return INFOCOLOR;
-    else if ( code == AliMUONVQAChecker::kWarning ) return WARNINGCOLOR;
-    else if ( code ==  AliMUONVQAChecker::kFatal) return FATALCOLOR;
-    else return ERRORCOLOR;
+    if ( code == AliMUONVQAChecker::kInfo ) return AliMUONVQAChecker::kInfoColor;
+    else if ( code == AliMUONVQAChecker::kWarning ) return AliMUONVQAChecker::kWarningColor;
+    else if ( code ==  AliMUONVQAChecker::kFatal) return AliMUONVQAChecker::kFatalColor;
+    else return AliMUONVQAChecker::kErrorColor;
   }
   
   const char* NOTENOUGHEVENTMESSAGE = "Not enough event to judge. Please wait a bit";
@@ -435,6 +430,8 @@ AliMUONTrackerQAChecker::BeautifyOccupancyHistograms(TH1& hddl,
   line2->SetLineColor(1);
   line2->SetLineWidth(1);
   
+  hbp.GetListOfFunctions()->Delete();
+  
   hbp.GetListOfFunctions()->Add(line1);
   hbp.GetListOfFunctions()->Add(line2);
     
@@ -673,7 +670,7 @@ AliMUONTrackerQAChecker::BeautifyEventsizeHistograms(TH1& heventsize,
     
     if ( totalEventSizePerEvent > recoParam.EventSizeHardLimit() ) 
     {
-      rv = AliMUONVQAChecker::kFatal;
+      rv = AliMUONVQAChecker::kError;
       msg = "That is really too high.";
       action = NOTIFYEXPERTMESSAGE;
     }
@@ -681,7 +678,7 @@ AliMUONTrackerQAChecker::BeautifyEventsizeHistograms(TH1& heventsize,
     {
       msg = "That is a bit high.";
       action = "Please keep an eye on it.";
-      rv = AliMUONVQAChecker::kError;
+      rv = AliMUONVQAChecker::kWarning;
     }
     else 
     {
index 030b5cb..b7d206b 100644 (file)
@@ -952,6 +952,7 @@ void AliMUONTrackerQADataMakerRec::InitRaws()
   h->SetStats(kFALSE);
   Add2RawsList(h,AliMUONQAIndices::kTrackerDDLEventSizePerEvent,kFALSE,kTRUE,kFALSE);
     
+  Add2RawsList(new TH1F("hTrackerIsThere","tracker is there",1,0,1),AliMUONQAIndices::kTrackerIsThere,kTRUE,kFALSE,kFALSE);
 }
 
 //__________________________________________________________________
@@ -1318,8 +1319,6 @@ void AliMUONTrackerQADataMakerRec::MakeRaws(AliRawReader* rawReader)
        
   AliCodeTimerAuto(Form("%s",AliRecoParam::GetEventSpecieName(AliRecoParam::AConvert(Master()->GetEventSpecie()))),0);
 
-  AliInfo(Form("rawReader class=%s",rawReader->ClassName()));
-  
   /// forces init
   GetRawsData(AliMUONQAIndices::kTrackerBusPatchOccupancy);
   
@@ -1573,8 +1572,6 @@ AliMUONTrackerQADataMakerRec::ResetDetectorRaws(TObjArray* list)
   /// Reset those histograms that must be reset (and only those), plus
   /// the trackerdata itself.
   
-  AliInfo("");
-  
   TIter next(list);
   TObject* o;
   while ( ( o = next() ) )
@@ -1586,28 +1583,13 @@ AliMUONTrackerQADataMakerRec::ResetDetectorRaws(TObjArray* list)
       
       if ( !hn.Contains("TrackerBusPatchConfig") )
       {
-        AliInfo(Form("Resetting %s",hn.Data()));
-
-        if ( hn.Contains("DDLMeanEventSize") )
-        {
-          h->Print();
-          h->GetListOfFunctions()->ls();
-          cout << ">>>>>" << endl;
-        }          
+        AliDebug(1,Form("Resetting %s",hn.Data()));
 
         h->Reset();
-        
-        if ( hn.Contains("DDLMeanEventSize") )
-        {
-          h->Print();
-          h->GetListOfFunctions()->ls();
-          cout << "<<<<<<" << endl;
-        }          
       }
       else
       {
-        //        AliDebug(1,Form("Will not reset histogram %s",hn.Data()));
-        AliInfo(Form("Will not reset histogram %s",hn.Data()));          
+        AliDebug(1,Form("Will not reset histogram %s",hn.Data()));          
       }
     }
     else
index 3450f2c..f802b0b 100644 (file)
@@ -103,8 +103,8 @@ AliMUONTriggerQAChecker::CheckRaws(TObjArray** list, const AliMUONRecoParam* )
     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++){
       AliMUONVQAChecker::ECheckCode currRv = AliMUONVQAChecker::kInfo;
@@ -193,10 +193,9 @@ void AliMUONTriggerQAChecker::SetupHisto(Int_t nevents, const TObjArray& message
     text->AddText(str->String());
   }
     
-  if ( nevents == 0 ) {
+  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 = "";
@@ -204,26 +203,23 @@ void AliMUONTriggerQAChecker::SetupHisto(Int_t nevents, const TObjArray& message
   Int_t color = 0;
   switch ( code ) {
   case AliMUONVQAChecker::kInfo:
-    color = kGreen;
+    color = AliMUONVQAChecker::kInfoColor;
     defaultText = "All is fine!";
     break;
   case AliMUONVQAChecker::kWarning:
-    color = kYellow;
+    color = AliMUONVQAChecker::kWarningColor;
     defaultText = "Please keep an eye on it!";
     break;
   case AliMUONVQAChecker::kFatal:
-    color = kRed;
+    color = AliMUONVQAChecker::kFatalColor;
     defaultText = "This is bad: PLEASE CALL EXPERT!!!";
     break;
   default:
-    color = kOrange;
+    color = AliMUONVQAChecker::kErrorColor;
     defaultText = "PLEASE NOTIFY EXPERT! (NOT at night)";
     break;
   }
 
-  if ( nevents == 0 )
-    defaultText = "Otherwise PLEASE CALL EXPERT!";
-
   text->AddText(defaultText.Data());
   text->SetFillColor(color);
                       
@@ -232,5 +228,6 @@ void AliMUONTriggerQAChecker::SetupHisto(Int_t nevents, const TObjArray& message
 
   histo.SetStats(kFALSE);
     
+  histo.GetListOfFunctions()->Clear();
   histo.GetListOfFunctions()->Add(text);
 }
index 689032d..7d0ec7b 100644 (file)
@@ -426,6 +426,9 @@ void AliMUONTriggerQADataMakerRec::InitRaws()
     histo1D->GetYaxis()->SetTitle("Number of 4/4");
     Add2RawsList(histo1D, AliMUONQAIndices::kTriggerNumberOf44Dec, expert, !image, !saveCorr);
   }
+  
+  Add2RawsList(new TH1F("hTriggerIsThere","trigger is there",1,0,1),AliMUONQAIndices::kTriggerIsThere,kTRUE,kFALSE,kFALSE);
+
 }
 
 //__________________________________________________________________
index 4eceaa6..fece8d5 100644 (file)
@@ -30,6 +30,13 @@ public:
     kInfo=2     ///< just so you know...
   };
   
+  enum EColor {
+    kInfoColor=kSpring-8, ///< color for information (online convention)
+    kWarningColor=kOrange, ///< color for warning (online convention)
+    kErrorColor=kRed, ///< color for normal error (online convention)
+    kFatalColor=kMagenta+1 ///< color for fatal error (online convention)
+  };
+  
   AliMUONVQAChecker();
   virtual ~AliMUONVQAChecker();