]> git.uio.no Git - u/mrichter/AliRoot.git/blame_incremental - STEER/STEER/AliQAChecker.cxx
Some warning going to error and viceversa:
[u/mrichter/AliRoot.git] / STEER / STEER / AliQAChecker.cxx
... / ...
CommitLineData
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///////////////////////////////////////////////////////////////////////////////
19// //
20// class for running the Quality Assurance Checker
21// //
22///////////////////////////////////////////////////////////////////////////////
23
24#include "AliCDBEntry.h"
25#include "AliQAManager.h"
26#include "AliCDBStorage.h"
27#include "AliRunInfo.h"
28#include "AliLog.h"
29#include "AliModule.h"
30#include "AliQAv1.h"
31#include "AliQAChecker.h"
32#include "AliQACheckerBase.h"
33#include "AliCorrQAChecker.h"
34#include "AliGlobalQAChecker.h"
35#include "AliGRPObject.h"
36
37#include <TKey.h>
38#include <TObjArray.h>
39#include <TObjString.h>
40#include <TPluginManager.h>
41#include <TROOT.h>
42#include <TStopwatch.h>
43#include <TString.h>
44#include <TSystem.h>
45#include <TList.h>
46#include <TNtupleD.h>
47
48ClassImp(AliQAChecker)
49 AliQAChecker * AliQAChecker::fgQAChecker = 0x0 ;
50
51//_____________________________________________________________________________
52AliQAChecker::AliQAChecker(const char* name, const char* title) :
53 TNamed(name, title),
54 fDataFile(0x0),
55 fRunInfo(0x0),
56 fRunInfoOwner(kFALSE),
57 fRefFile(0x0),
58 fFoundDetectors("."),
59 fEventSpecie(AliRecoParam::kDefault),
60 fRun(0)
61{
62 // ctor: initialise checkers and open the data file
63 for (Int_t det = 0 ; det < AliQAv1::kNDET ; det++)
64 fCheckers[det] = NULL ;
65}
66
67//_____________________________________________________________________________
68AliQAChecker::AliQAChecker(const AliQAChecker& qac) :
69 TNamed(qac),
70 fDataFile(qac.fDataFile),
71 fRunInfo(qac.fRunInfo),
72 fRunInfoOwner(kFALSE),
73 fRefFile(qac.fRefFile),
74 fFoundDetectors(qac.fFoundDetectors),
75 fEventSpecie(qac.fEventSpecie),
76 fRun(qac.fRun)
77{
78 // copy constructor
79
80 for (Int_t det = 0 ; det < AliQAv1::kNDET ; det++)
81 fCheckers[det] = NULL ;
82}
83
84//_____________________________________________________________________________
85AliQAChecker& AliQAChecker::operator = (const AliQAChecker& qac)
86{
87// assignment operator
88
89 this->~AliQAChecker();
90 new(this) AliQAChecker(qac);
91 return *this;
92}
93
94//_____________________________________________________________________________
95AliQAChecker::~AliQAChecker()
96{
97// clean up
98 if (fRunInfo)
99 delete fRunInfo ;
100 for (Int_t det=0; det<AliQAv1::kNDET; det++)
101 delete fCheckers[det] ;
102 AliQAv1::Close() ;
103}
104
105//_____________________________________________________________________________
106 AliQACheckerBase * AliQAChecker::GetDetQAChecker(Int_t det)
107{
108 // Gets the Quality Assurance checker for the detector specified by its name
109
110 if (det<0 || det>=AliQAv1::kNDET) return NULL;
111
112 if (fCheckers[det])
113 return fCheckers[det];
114
115 AliQACheckerBase * qac = NULL ;
116
117 TString detName(AliQAv1::GetDetName(det)) ;
118
119 if (det == AliQAv1::kGLOBAL) {
120 qac = new AliGlobalQAChecker() ;
121 } else if (det == AliQAv1::kCORR) {
122 qac = new AliCorrQAChecker() ;
123 } else {
124 AliDebugClass(AliQAv1::GetQADebugLevel(), Form("Retrieving QA checker for %s", detName.Data())) ;
125 TPluginManager* pluginManager = gROOT->GetPluginManager() ;
126 TString qacName = "Ali" + detName + "QAChecker" ;
127
128 // first check if a plugin is defined for the quality assurance checker
129 TPluginHandler* pluginHandler = pluginManager->FindHandler("AliQAChecker", detName.Data());
130 // if not, add a plugin for it
131 if (!pluginHandler) {
132 //AliDebug(AliQAv1::GetQADebugLevel(), Form("defining plugin for %s", qacName.Data()));
133 TString libs = gSystem->GetLibraries();
134
135 if (libs.Contains("lib" + detName + "base.so") || (gSystem->Load("lib" + detName + "base.so") >= 0))
136 pluginManager->AddHandler("AliQAChecker", detName, qacName, detName + "qac", qacName + "()");
137 else
138 pluginManager->AddHandler("AliQAChecker", detName, qacName, detName, qacName + "()");
139
140 pluginHandler = pluginManager->FindHandler("AliQAChecker", detName);
141
142 if (pluginHandler && (pluginHandler->LoadPlugin() == 0))
143 qac = (AliQACheckerBase *) pluginHandler->ExecPlugin(0);
144
145 }
146 }
147 if (qac)
148 fCheckers[det] = qac ;
149
150 return qac ;
151}
152
153//_____________________________________________________________________________
154AliQAChecker * AliQAChecker::Instance()
155{
156 // returns unique instance of the checker
157 if ( ! fgQAChecker )
158 fgQAChecker = new AliQAChecker() ;
159 return fgQAChecker ;
160}
161
162//_____________________________________________________________________________
163void AliQAChecker::LoadRunInfoFromGRP()
164{
165 AliCDBManager* man = AliCDBManager::Instance() ;
166 AliCDBEntry* entry = man->Get(AliQAv1::GetGRPPath().Data());
167 AliGRPObject* grpObject = 0x0;
168 if (entry) {
169
170 TMap* m = static_cast<TMap*>(entry->GetObject()); // old GRP entry
171
172 if (m) {
173 AliDebug(AliQAv1::GetQADebugLevel(), "It is a map");
174 //m->Print();
175 grpObject = new AliGRPObject();
176 grpObject->ReadValuesFromMap(m);
177 }
178
179 else {
180 AliDebug(AliQAv1::GetQADebugLevel(), "It is a new GRP object");
181 grpObject = static_cast<AliGRPObject*>(entry->GetObject()); // new GRP entry
182 }
183
184 entry->SetOwner(0);
185 AliCDBManager::Instance()->UnloadFromCache("GRP/GRP/Data");
186 }
187
188 if (!grpObject) {
189 AliFatal("No GRP entry found in OCDB!");
190 }
191
192 TString lhcState = grpObject->GetLHCState();
193 if (lhcState==AliGRPObject::GetInvalidString()) {
194 AliError("GRP/GRP/Data entry: missing value for the LHC state ! Using UNKNOWN");
195 lhcState = "UNKNOWN";
196 }
197
198 TString beamType = grpObject->GetBeamType();
199 if (beamType==AliGRPObject::GetInvalidString()) {
200 AliError("GRP/GRP/Data entry: missing value for the beam type ! Using UNKNOWN");
201 beamType = "UNKNOWN";
202 }
203
204 Float_t beamEnergy = grpObject->GetBeamEnergy();
205 if (beamEnergy==AliGRPObject::GetInvalidFloat()) {
206 AliError("GRP/GRP/Data entry: missing value for the beam energy ! Using 0");
207 beamEnergy = 0;
208 }
209
210 TString runType = grpObject->GetRunType();
211 if (runType==AliGRPObject::GetInvalidString()) {
212 AliError("GRP/GRP/Data entry: missing value for the run type ! Using UNKNOWN");
213 runType = "UNKNOWN";
214 }
215
216 Int_t activeDetectors = grpObject->GetDetectorMask();
217 if (activeDetectors==AliGRPObject::GetInvalidInt()) {
218 AliError("GRP/GRP/Data entry: missing value for the detector mask ! Using 1074790399");
219 activeDetectors = 1074790399;
220 }
221
222 fRunInfo = new AliRunInfo(lhcState, beamType, beamEnergy, runType, activeDetectors);
223
224 fRunInfoOwner = kTRUE ;
225
226 // set the event specie
227 fEventSpecie = AliRecoParam::kDefault ;
228 if (strcmp(runType,"PHYSICS")) {
229 // Not a physics run, the event specie is set to kCalib
230 fEventSpecie = AliRecoParam::kCalib ;
231 return;
232 }
233 if (strcmp(lhcState,"STABLE_BEAMS") == 0) {
234 // Heavy ion run (any beam tha is not pp, the event specie is set to kHighMult
235 fEventSpecie = AliRecoParam::kHighMult ;
236 if ((strcmp(beamType,"p-p") == 0) ||
237 (strcmp(beamType,"p-") == 0) ||
238 (strcmp(beamType,"-p") == 0) ||
239 (strcmp(beamType,"P-P") == 0) ||
240 (strcmp(beamType,"P-") == 0) ||
241 (strcmp(beamType,"-P") == 0)) {
242 // Proton run, the event specie is set to kLowMult
243 fEventSpecie = AliRecoParam::kLowMult ;
244 }
245 else if (strcmp(beamType,"-") == 0) {
246 // No beams, we assume cosmic data
247 fEventSpecie = AliRecoParam::kCosmic ;
248 }
249 else if (strcmp(beamType,"UNKNOWN") == 0) {
250 // No LHC beam information is available, we use the default event specie
251 fEventSpecie = AliRecoParam::kDefault ;
252 }
253 }
254}
255
256//_____________________________________________________________________________
257Bool_t AliQAChecker::Run(const char * fileName, AliDetectorRecoParam * recoParam)
258{
259 // run the Quality Assurance Checker for all tasks Hits, SDigits, Digits, DigitsR, RecPoints, TrackSegments, RecParticles and ESDs
260 // starting from data in file
261 TStopwatch stopwatch;
262 stopwatch.Start();
263
264 //search for all detectors QA directories
265 TList * detKeyList = AliQAv1::GetQADataFile(fileName)->GetListOfKeys() ;
266 TIter nextd(detKeyList) ;
267 TKey * detKey ;
268 while ( (detKey = static_cast<TKey *>(nextd()) ) ) {
269 AliDebug(AliQAv1::GetQADebugLevel(), Form("Found %s", detKey->GetName())) ;
270 //Check which detector
271 TString detName ;
272 TString detNameQA(detKey->GetName()) ;
273 Int_t det ;
274 for ( det = 0; det < AliQAv1::kNDET ; det++) {
275 detName = AliQAv1::GetDetName(det) ;
276 if (detNameQA.Contains(detName)) {
277 fFoundDetectors+=detName ;
278 fFoundDetectors+="." ;
279 break ;
280 }
281 }
282 TDirectory * detDir = AliQAv1::GetQADataFile(fileName)->GetDirectory(detKey->GetName()) ;
283 TList * taskKeyList = detDir->GetListOfKeys() ;
284 TIter nextt(taskKeyList) ;
285 TKey * taskKey ;
286 // now search for the tasks dir
287 while ( (taskKey = static_cast<TKey *>(nextt()) ) ) {
288 TString taskName( taskKey->GetName() ) ;
289 AliDebug(AliQAv1::GetQADebugLevel(), Form("Found %s", taskName.Data())) ;
290 TDirectory * taskDir = detDir->GetDirectory(taskName.Data()) ;
291 taskDir->cd() ;
292 AliQACheckerBase * qac = GetDetQAChecker(det) ;
293 if (qac)
294 AliDebug(AliQAv1::GetQADebugLevel(), Form("QA checker found for %s", detName.Data())) ;
295 if (!qac)
296 AliFatal(Form("QA checker not found for %s", detName.Data())) ;
297 AliQAv1::ALITASK_t index = AliQAv1::kNULLTASK ;
298 if ( taskName == AliQAv1::GetTaskName(AliQAv1::kHITS) )
299 index = AliQAv1::kSIM ;
300 if ( taskName == AliQAv1::GetTaskName(AliQAv1::kSDIGITS) )
301 index = AliQAv1::kSIM ;
302 if ( taskName == AliQAv1::GetTaskName(AliQAv1::kDIGITS) )
303 index = AliQAv1::kSIM ;
304 if ( taskName == AliQAv1::GetTaskName(AliQAv1::kRAWS) )
305 index = AliQAv1::kRAW ;
306 if ( taskName == AliQAv1::GetTaskName(AliQAv1::kDIGITSR) )
307 index = AliQAv1::kREC ;
308 if ( taskName == AliQAv1::GetTaskName(AliQAv1::kRECPOINTS) )
309 index = AliQAv1::kREC ;
310 if ( taskName == AliQAv1::GetTaskName(AliQAv1::kTRACKSEGMENTS) )
311 index = AliQAv1::kREC ;
312 if ( taskName == AliQAv1::GetTaskName(AliQAv1::kRECPARTICLES) )
313 index = AliQAv1::kREC ;
314 if ( taskName == AliQAv1::GetTaskName(AliQAv1::kESDS) )
315 index = AliQAv1::kESD ;
316 qac->Init(AliQAv1::DETECTORINDEX_t(det)) ;
317 qac->Run(index, recoParam) ;
318 }
319 }
320 TString detList ;
321 for ( Int_t det = 0; det < AliQAv1::kNDET; det++) {
322 if (fFoundDetectors.Contains(AliQAv1::GetDetName(det))) {
323 detList += AliQAv1::GetDetName(det) ;
324 detList += " " ;
325 fFoundDetectors.ReplaceAll(AliQAv1::GetDetName(det), "") ;
326 AliQAv1::Instance()->Show(AliQAv1::GetDetIndex(AliQAv1::GetDetName(det))) ;
327 }
328 }
329 AliInfo(Form("QA performed for following detectors: %s", detList.Data())) ;
330 return kTRUE ;
331}
332
333//_____________________________________________________________________________
334Bool_t AliQAChecker::Run(AliQAv1::DETECTORINDEX_t det, AliQAv1::TASKINDEX_t task, TObjArray ** list, AliDetectorRecoParam * recoParam)
335{
336 // run the Quality Assurance Checker for detector det, for task task starting from data in list
337
338 if (det >= AliQAv1::kNDET) {
339 AliError(Form("det = %i is larger than AliQAv1::kNDET ... should never happen", det));
340 return kFALSE ;
341 }
342 AliQACheckerBase * qac = GetDetQAChecker(det) ;
343 if (qac)
344 AliDebug(AliQAv1::GetQADebugLevel(), Form("QA checker found for %s", AliQAv1::GetDetName(det).Data())) ;
345 if (!qac) {
346 AliError(Form("QA checker not found for %s", AliQAv1::GetDetName(det).Data())) ;
347 return kFALSE;
348 }
349
350 AliQAv1::ALITASK_t index = AliQAv1::kNULLTASK ;
351 if ( task == AliQAv1::kRAWS )
352 index = AliQAv1::kRAW ;
353 else if ( task == AliQAv1::kHITS )
354 index = AliQAv1::kSIM ;
355 else if ( task == AliQAv1::kSDIGITS )
356 index = AliQAv1::kSIM ;
357 else if ( task == AliQAv1::kDIGITS )
358 index = AliQAv1::kSIM ;
359 else if ( task == AliQAv1::kDIGITSR )
360 index = AliQAv1::kREC ;
361 else if ( task == AliQAv1::kRECPOINTS )
362 index = AliQAv1::kREC ;
363 else if ( task == AliQAv1::kTRACKSEGMENTS )
364 index = AliQAv1::kREC ;
365 else if ( task == AliQAv1::kRECPARTICLES )
366 index = AliQAv1::kREC ;
367 else if ( task == AliQAv1::kESDS )
368 index = AliQAv1::kESD ;
369
370 qac->Init(det) ;
371 qac->Run(index, list, recoParam) ;
372
373 // make the image
374 qac->MakeImage(list, task, AliQAv1::Mode(task)) ;
375
376 return kTRUE ;
377}
378
379//_____________________________________________________________________________
380Bool_t AliQAChecker::Run(AliQAv1::DETECTORINDEX_t det, AliQAv1::TASKINDEX_t task, TNtupleD ** list, AliDetectorRecoParam * recoParam)
381{
382 // run the Quality Assurance Checker for detector det, for task task starting from data in list
383
384 AliQACheckerBase * qac = GetDetQAChecker(det) ;
385 if (qac)
386 AliDebug(AliQAv1::GetQADebugLevel(), Form("QA checker found for %s", AliQAv1::GetDetName(det).Data())) ;
387 if (!qac) {
388 AliError(Form("QA checker not found for %s", AliQAv1::GetDetName(det).Data())) ;
389 return kFALSE;
390 }
391
392 AliQAv1::ALITASK_t index = AliQAv1::kNULLTASK ;
393 if ( task == AliQAv1::kRAWS )
394 index = AliQAv1::kRAW ;
395 else if ( task == AliQAv1::kHITS )
396 index = AliQAv1::kSIM ;
397 else if ( task == AliQAv1::kSDIGITS )
398 index = AliQAv1::kSIM ;
399 else if ( task == AliQAv1::kDIGITS )
400 index = AliQAv1::kSIM ;
401 else if ( task == AliQAv1::kDIGITSR )
402 index = AliQAv1::kREC ;
403 else if ( task == AliQAv1::kRECPOINTS )
404 index = AliQAv1::kREC ;
405 else if ( task == AliQAv1::kTRACKSEGMENTS )
406 index = AliQAv1::kREC ;
407 else if ( task == AliQAv1::kRECPARTICLES )
408 index = AliQAv1::kREC ;
409 else if ( task == AliQAv1::kESDS )
410 index = AliQAv1::kESD ;
411
412 qac->Init(det) ;
413 qac->Run(index, list, recoParam) ;
414
415 return kTRUE ;
416}