Remove AliTRDanalysisTaskTP
[u/mrichter/AliRoot.git] / MUON / AliMUONTriggerQAChecker.cxx
CommitLineData
ece56eb9 1/**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3 * *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
6 * *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
15
16// $Id$
17
18#include "AliMUONTriggerQAChecker.h"
19
20/// \class AliMUONTriggerQAChecker
21///
22/// Implementation of QAChecker for MTR
23///
24/// For the moment we only implement the checking of raw data QA for the trigger
25/// by looking at the local structure and trigger response errors.
26///
a026ce9e 27/// \author Diego Stocco, Subatech
ece56eb9 28
29
30#include "AliRecoParam.h"
6482f70b 31#include "AliMUONQAIndices.h"
ffaafee5 32#include "AliQAv1.h"
ece56eb9 33#include "TH1.h"
34#include "TPaveText.h"
35#include "TString.h"
36#include "TObjArray.h"
37#include "TList.h"
38
39/// \cond CLASSIMP
40ClassImp(AliMUONTriggerQAChecker)
41/// \endcond
42
43//__________________________________________________________________
44AliMUONTriggerQAChecker::AliMUONTriggerQAChecker() : AliMUONVQAChecker()
45{
46 /// ctor
47}
48
49//__________________________________________________________________
50AliMUONTriggerQAChecker::~AliMUONTriggerQAChecker()
51{
52 /// dtor
53}
54
55//______________________________________________________________________________
56AliMUONVQAChecker::ECheckCode
57AliMUONTriggerQAChecker::MarkHisto(TH1& histo, AliMUONVQAChecker::ECheckCode value) const
58{
59 /// Mark histo as originator of some QA error/warning
60
61 if ( value != AliMUONVQAChecker::kInfo )
62 {
63 histo.SetBit(AliQAv1::GetQABit());
64 }
65
66 return value;
67}
68
69//__________________________________________________________________
70AliMUONVQAChecker::ECheckCode*
486788fc 71AliMUONTriggerQAChecker::CheckRaws(TObjArray** list, const AliMUONRecoParam* )
ece56eb9 72{
73 /// Check raw data
74
81813481 75 AliMUONVQAChecker::ECheckCode * rv = new AliMUONVQAChecker::ECheckCode[AliRecoParam::kNSpecies];
ece56eb9 76
77 Int_t histoRawsPercentIndex[] = {
6482f70b 78 AliMUONQAIndices::kTriggerErrorSummaryNorm,
79 AliMUONQAIndices::kTriggerCalibSummaryNorm,
80 AliMUONQAIndices::kTriggerReadOutErrorsNorm
ece56eb9 81 };
82 const Int_t kNrawsHistos = sizeof(histoRawsPercentIndex)/sizeof(histoRawsPercentIndex[0]);
83
81813481 84 // BEGIN OF LIMITS
85 // Fixme: Move me to reference histos
86 Float_t safeFactor = 5.;
87 Float_t alarmPercentTrigAlgo[AliMUONQAIndices::kNtrigAlgoErrorBins] = {safeFactor*1., safeFactor*1., safeFactor*1., 100., 100., 100., 100., safeFactor*1., safeFactor*1., safeFactor*1.};
88 Float_t alarmPercentCalib[AliMUONQAIndices::kNtrigCalibSummaryBins] = {safeFactor*0.4, safeFactor*1., 6.2, 0.0001, safeFactor*0.4};
89 Float_t alarmPercentReadout[AliMUONQAIndices::kNtrigStructErrorBins] = {safeFactor*1., safeFactor*1., safeFactor*1., safeFactor*1.};
90
91 Float_t* alarmPercent[kNrawsHistos] = {alarmPercentTrigAlgo, alarmPercentCalib, alarmPercentReadout};
92 // END OF LIMTS
93
94 TObjArray messages;
95 messages.SetOwner(kTRUE);
96
ece56eb9 97 TH1* currHisto = 0x0;
98 for (Int_t specie = 0 ; specie < AliRecoParam::kNSpecies ; specie++) {
81813481 99 rv[specie] = AliMUONVQAChecker::kInfo;
100 AliMUONVQAChecker::ECheckCode currRv = rv[specie];
101
fa7e0953 102 TH1* hAnalyzedEvents = AliQAv1::GetData(list,AliMUONQAIndices::kTriggerRawNAnalyzedEvents,AliRecoParam::ConvertIndex(specie));
103 Int_t nAnalyzedEvents = 0;
104 if ( hAnalyzedEvents )
7c19bb9a 105 nAnalyzedEvents = TMath::Nint(hAnalyzedEvents->GetBinContent(1));
81813481 106
107 if ( nAnalyzedEvents == 0 )
108 currRv = AliMUONVQAChecker::kFatal;
109
ece56eb9 110 for(Int_t ihisto = 0; ihisto<kNrawsHistos; ihisto++){
81813481 111 messages.Clear();
ece56eb9 112 currHisto = AliQAv1::GetData(list,histoRawsPercentIndex[ihisto],AliRecoParam::ConvertIndex(specie));
81813481 113 if ( ! currHisto ) continue;
114
115 Int_t nbins = currHisto->GetXaxis()->GetNbins();
116 for (Int_t ibin = 1; ibin<=nbins; ibin++){
117 Double_t binContent = currHisto->GetBinContent(ibin);
118 if (binContent > alarmPercent[ihisto][ibin-1])
119 currRv = AliMUONVQAChecker::kWarning;
120 } // loop on bins
121 if ( currRv != AliMUONVQAChecker::kInfo ) {
122 switch ( histoRawsPercentIndex[ihisto] ) {
123 case AliMUONQAIndices::kTriggerErrorSummaryNorm:
124 case AliMUONQAIndices::kTriggerCalibSummaryNorm:
125 messages.Add(new TObjString("Trigger algo errors"));
126 break;
127 case AliMUONQAIndices::kTriggerReadOutErrorsNorm:
128 messages.Add(new TObjString("Readout errors"));
ece56eb9 129 }
81813481 130 if ( currRv == AliMUONVQAChecker::kWarning )
131 messages.Add(new TObjString("are a little bit high"));
132 else if ( currRv == AliMUONVQAChecker::kError ||
133 currRv == AliMUONVQAChecker::kFatal )
134 messages.Add(new TObjString("are too high"));
135 }
136 else {
137 switch ( histoRawsPercentIndex[ihisto] ) {
138 case AliMUONQAIndices::kTriggerErrorSummaryNorm:
139 case AliMUONQAIndices::kTriggerCalibSummaryNorm:
140 case AliMUONQAIndices::kTriggerReadOutErrorsNorm:
141 messages.Add(new TObjString("Values within limits"));
142 break;
ece56eb9 143 }
ece56eb9 144 }
81813481 145 rv[specie] = MarkHisto(*currHisto, currRv);
146 currHisto->GetYaxis()->SetRangeUser(0., 110.);
147 SetupHisto(nAnalyzedEvents, messages, *currHisto, rv[specie]);
ece56eb9 148 } // loop on histos
149 } // loop on species
150
151 return rv;
152}
153
154//__________________________________________________________________
155AliMUONVQAChecker::ECheckCode*
486788fc 156AliMUONTriggerQAChecker::CheckRecPoints(TObjArray** , const AliMUONRecoParam* )
ece56eb9 157{
158 /// Check rec points
159 return 0x0;
160}
161
162//__________________________________________________________________
163AliMUONVQAChecker::ECheckCode*
486788fc 164AliMUONTriggerQAChecker::CheckESD(TObjArray** , const AliMUONRecoParam* )
ece56eb9 165{
166 /// Check esd
167 return 0x0;
168}
81813481 169
170
171//___________________________________________________________________
172void AliMUONTriggerQAChecker::SetupHisto(Int_t nevents, const TObjArray& messages, TH1& histo, AliMUONVQAChecker::ECheckCode code)
173{
174 //
175 /// Add text to histos
176 //
177
178 Double_t y1 = 0.97 - (messages.GetLast()+2)*0.075;
179 TPaveText* text = new TPaveText(0.5,y1,0.99,0.99,"NDC");
180
181 text->AddText(Form("MTR - Total events %i", nevents));
182
183 TIter next(&messages);
184 TObjString* str;
185
186 while ( ( str = static_cast<TObjString*>(next()) ) ){
187 text->AddText(str->String());
188 }
189
190 if ( nevents == 0 ) {
191 text->AddText("No event analyzed.");
192 text->AddText("Please make sure this is the MTR agent!");
193 text->AddText("(we share plots with MCH)");
194 }
195
196 TString defaultText = "";
197
198 Int_t color = 0;
199 switch ( code ) {
200 case AliMUONVQAChecker::kInfo:
201 color = kGreen;
202 defaultText = "All is fine!";
203 break;
204 case AliMUONVQAChecker::kWarning:
205 color = kYellow;
206 defaultText = "Please keep an eye on it!";
207 break;
208 case AliMUONVQAChecker::kFatal:
209 color = kRed;
210 defaultText = "This is bad: PLEASE CALL EXPERT!!!";
211 break;
212 default:
213 color = kOrange;
214 defaultText = "PLEASE NOTIFY EXPERT! (NOT at night)";
215 break;
216 }
217
218 if ( nevents == 0 )
219 defaultText = "Otherwise PLEASE CALL EXPERT!";
220
221 text->AddText(defaultText.Data());
222 text->SetFillColor(color);
223
224 histo.SetFillStyle(1001);
225 histo.SetFillColor(color);
226
227 histo.SetStats(kFALSE);
228
229 histo.GetListOfFunctions()->Add(text);
230}