]> git.uio.no Git - u/mrichter/AliRoot.git/blame - STEER/AliQADataMakerSteer.cxx
changed format
[u/mrichter/AliRoot.git] / STEER / AliQADataMakerSteer.cxx
CommitLineData
312e6f8d 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$ */
202374b1 17///////////////////////////////////////////////////////////////////////////////
18// //
19// class for running the QA makers //
20// //
21// AliQADataMakerSteer qas; //
22// qas.Run(AliQA::kRAWS, rawROOTFileName); //
23// qas.Run(AliQA::kHITS); //
24// qas.Run(AliQA::kSDIGITS); //
25// qas.Run(AliQA::kDIGITS); //
26// qas.Run(AliQA::kRECPOINTS); //
27// qas.Run(AliQA::kESDS); //
28// //
29///////////////////////////////////////////////////////////////////////////////
312e6f8d 30
4edbc5bc 31#include <TKey.h>
312e6f8d 32#include <TFile.h>
567d83d9 33#include <TFileMerger.h>
312e6f8d 34#include <TPluginManager.h>
35#include <TROOT.h>
36#include <TString.h>
37#include <TSystem.h>
38
4edbc5bc 39#include "AliCDBManager.h"
40#include "AliCDBEntry.h"
41#include "AliCDBId.h"
42#include "AliCDBMetaData.h"
312e6f8d 43#include "AliESDEvent.h"
6441b07a 44#include "AliHeader.h"
312e6f8d 45#include "AliLog.h"
007fcebb 46#include "AliModule.h"
312e6f8d 47#include "AliQA.h"
04236e67 48#include "AliQADataMakerRec.h"
49#include "AliQADataMakerSim.h"
312e6f8d 50#include "AliQADataMakerSteer.h"
4ecde5fc 51#include "AliRawReaderDate.h"
52#include "AliRawReaderFile.h"
312e6f8d 53#include "AliRawReaderRoot.h"
54#include "AliRun.h"
55#include "AliRunLoader.h"
56
57ClassImp(AliQADataMakerSteer)
58
59//_____________________________________________________________________________
60AliQADataMakerSteer::AliQADataMakerSteer(const char* gAliceFilename, const char * name, const char * title) :
61 TNamed(name, title),
018c2b09 62 fCurrentEvent(0),
c65c502a 63 fCycleSame(kFALSE),
fff5167b 64 fDetectors("ALL"),
65 fDetectorsW("ALL"),
312e6f8d 66 fESD(NULL),
67 fESDTree(NULL),
68 fFirst(kTRUE),
69 fGAliceFileName(gAliceFilename),
f0c6fb4b 70 fMaxEvents(0),
774ac967 71 fNumberOfEvents(999999),
f0c6fb4b 72 fRunNumber(0),
312e6f8d 73 fRawReader(NULL),
6441b07a 74 fRawReaderDelete(kTRUE),
312e6f8d 75 fRunLoader(NULL)
76{
77 // default ctor
f0c6fb4b 78 fMaxEvents = fNumberOfEvents ;
312e6f8d 79 for (UInt_t iDet = 0; iDet < fgkNDetectors; iDet++) {
4d52736b 80 if (IsSelected(AliQA::GetDetName(iDet))) {
81 fLoader[iDet] = NULL ;
82 fQADataMaker[iDet] = NULL ;
83 fQACycles[iDet] = 999999 ;
84 }
312e6f8d 85 }
86}
87
88//_____________________________________________________________________________
89AliQADataMakerSteer::AliQADataMakerSteer(const AliQADataMakerSteer & qas) :
90 TNamed(qas),
018c2b09 91 fCurrentEvent(qas.fCurrentEvent),
c65c502a 92 fCycleSame(kFALSE),
fff5167b 93 fDetectors(qas.fDetectors),
94 fDetectorsW(qas.fDetectorsW),
312e6f8d 95 fESD(NULL),
96 fESDTree(NULL),
97 fFirst(qas.fFirst),
98 fGAliceFileName(qas.fGAliceFileName),
f0c6fb4b 99 fMaxEvents(qas.fMaxEvents),
312e6f8d 100 fNumberOfEvents(qas.fNumberOfEvents),
f0c6fb4b 101 fRunNumber(qas.fRunNumber),
312e6f8d 102 fRawReader(NULL),
6441b07a 103 fRawReaderDelete(kTRUE),
312e6f8d 104 fRunLoader(NULL)
105{
106 // cpy ctor
107 for (UInt_t iDet = 0; iDet < fgkNDetectors; iDet++) {
108 fLoader[iDet] = qas.fLoader[iDet] ;
109 fQADataMaker[iDet] = qas.fQADataMaker[iDet] ;
110 fQACycles[iDet] = qas.fQACycles[iDet] ;
111 }
112}
113
114//_____________________________________________________________________________
115AliQADataMakerSteer & AliQADataMakerSteer::operator = (const AliQADataMakerSteer & qas)
116{
117 // assignment operator
118 this->~AliQADataMakerSteer() ;
119 new(this) AliQADataMakerSteer(qas) ;
120 return *this ;
121}
122
123//_____________________________________________________________________________
124AliQADataMakerSteer::~AliQADataMakerSteer()
125{
126 // dtor
127 for (UInt_t iDet = 0; iDet < fgkNDetectors; iDet++) {
4d52736b 128 if (IsSelected(AliQA::GetDetName(iDet))) {
129 fLoader[iDet] = NULL;
130 if (fQADataMaker[iDet]) {
131 (fQADataMaker[iDet])->Finish() ;
132 delete fQADataMaker[iDet] ;
133 fQADataMaker[iDet] = NULL ;
134 }
135 }
312e6f8d 136 }
137
6441b07a 138 if (fRawReaderDelete) {
139 fRunLoader = NULL ;
140 delete fRawReader ;
141 fRawReader = NULL ;
142 }
312e6f8d 143}
144
4d52736b 145//_____________________________________________________________________________
04236e67 146Bool_t AliQADataMakerSteer::DoIt(const AliQA::TASKINDEX taskIndex, const char * mode)
4d52736b 147{
148 // Runs all the QA data Maker for every detector
fff5167b 149
4d52736b 150 Bool_t rv = kFALSE ;
4d52736b 151 // Fill QA data in event loop
f0c6fb4b 152 for (UInt_t iEvent = 0 ; iEvent < (UInt_t)fMaxEvents ; iEvent++) {
018c2b09 153 fCurrentEvent++ ;
4d52736b 154 // Get the event
a6f6970e 155 if ( iEvent%10 == 0 )
156 AliInfo(Form("processing event %d", iEvent));
4d52736b 157 if ( taskIndex == AliQA::kRAWS ) {
158 if ( !fRawReader->NextEvent() )
159 break ;
160 } else if ( taskIndex == AliQA::kESDS ) {
774ac967 161 if ( fESDTree->GetEntry(iEvent) == 0 )
162 break ;
4d52736b 163 } else {
774ac967 164 if ( fRunLoader->GetEvent(iEvent) != 0 )
165 break ;
4d52736b 166 }
167 // loop over detectors
168 TObjArray* detArray = NULL ;
169 if (fRunLoader) // check if RunLoader exists
170 if ( fRunLoader->GetAliRun() ) // check if AliRun exists in gAlice.root
171 detArray = fRunLoader->GetAliRun()->Detectors() ;
172 for (UInt_t iDet = 0 ; iDet < fgkNDetectors ; iDet++) {
173 if (detArray) {
174 AliModule* det = static_cast<AliModule*>(detArray->FindObject(AliQA::GetDetName(iDet))) ;
175 if (!det || !det->IsActive())
176 continue ;
177 }
178 if (!IsSelected(AliQA::GetDetName(iDet)))
179 continue ;
04236e67 180 AliQADataMaker * qadm = GetQADataMaker(iDet, mode) ;
4d52736b 181 if (!qadm) {
182 rv = kFALSE ;
183 } else {
184 if ( qadm->IsCycleDone() ) {
185 qadm->EndOfCycle(AliQA::kRAWS) ;
186 qadm->StartOfCycle(AliQA::kRAWS) ;
187 }
188 TTree * data ;
189 switch (taskIndex) {
190 case AliQA::kRAWS :
191 qadm->Exec(taskIndex, fRawReader) ;
192 break ;
193 case AliQA::kHITS :
194 GetLoader(iDet)->LoadHits() ;
195 data = GetLoader(iDet)->TreeH() ;
196 if ( ! data ) {
197 AliWarning(Form(" Hit Tree not found for %s", AliQA::GetDetName(iDet))) ;
198 } else {
199 qadm->Exec(taskIndex, data) ;
200 }
201 break ;
202 case AliQA::kSDIGITS :
203 GetLoader(iDet)->LoadSDigits() ;
204 data = GetLoader(iDet)->TreeS() ;
205 if ( ! data ) {
206 AliWarning(Form(" SDigit Tree not found for %s", AliQA::GetDetName(iDet))) ;
207 } else {
208 qadm->Exec(taskIndex, data) ;
209 }
210 break;
211 case AliQA::kDIGITS :
212 GetLoader(iDet)->LoadDigits() ;
213 data = GetLoader(iDet)->TreeD() ;
214 if ( ! data ) {
215 AliWarning(Form(" Digit Tree not found for %s", AliQA::GetDetName(iDet))) ;
216 } else {
217 qadm->Exec(taskIndex, data) ;
218 }
219 break;
220 case AliQA::kRECPOINTS :
221 GetLoader(iDet)->LoadRecPoints() ;
222 data = GetLoader(iDet)->TreeR() ;
223 if (!data) {
224 AliWarning(Form("RecPoints not found for %s", AliQA::GetDetName(iDet))) ;
225 } else {
226 qadm->Exec(taskIndex, data) ;
227 }
228 break;
229 case AliQA::kTRACKSEGMENTS :
230 break;
231 case AliQA::kRECPARTICLES :
232 break;
233 case AliQA::kESDS :
234 qadm->Exec(taskIndex, fESD) ;
235 break;
4edbc5bc 236 case AliQA::kNTASKINDEX :
237 break;
4d52736b 238 } //task switch
fff5167b 239 //qadm->Increment() ;
4d52736b 240 } //data maker exist
241 } // detector loop
242 } // event loop
a6f6970e 243// // Save QA data for all detectors
04236e67 244 rv = Finish(taskIndex, mode) ;
fff5167b 245
4d52736b 246 return rv ;
247}
248
4edbc5bc 249//_____________________________________________________________________________
04236e67 250Bool_t AliQADataMakerSteer::Finish(const AliQA::TASKINDEX taskIndex, const char * mode)
4edbc5bc 251{
252 // write output to file for all detectors
253 for (UInt_t iDet = 0; iDet < fgkNDetectors ; iDet++) {
254 if (IsSelected(AliQA::GetDetName(iDet))) {
04236e67 255 AliQADataMaker * qadm = GetQADataMaker(iDet, mode) ;
4edbc5bc 256 if (qadm) {
257 qadm->EndOfCycle(taskIndex) ;
258 }
259 }
260 }
261 return kTRUE ;
262}
263
264//_____________________________________________________________________________
f73f556a 265TObjArray * AliQADataMakerSteer::GetFromOCDB(AliQA::DETECTORINDEX det, AliQA::TASKINDEX task) const
4edbc5bc 266{
267 // Retrieve the list of QA data for a given detector and a given task
f73f556a 268 TObjArray * rv = NULL ;
269 TString tmp(AliQA::GetQARefStorage()) ;
270 if ( tmp.IsNull() ) {
271 AliError("No storage defined, use AliQA::SetQARefStorage") ;
272 return NULL ;
273 }
4edbc5bc 274 AliCDBManager* man = AliCDBManager::Instance() ;
f73f556a 275 if ( ! man->IsDefaultStorageSet() ) {
276 man->SetDefaultStorage(AliQA::GetQARefDefaultStorage()) ;
277 man->SetSpecificStorage(Form("%s/*", AliQA::GetQAOCDBDirName()), AliQA::GetQARefStorage()) ;
278 }
279 char detOCDBDir[10] ;
280 sprintf(detOCDBDir, "%s/%s/%s", AliQA::GetQAOCDBDirName(), AliQA::GetDetName((Int_t)det), AliQA::GetRefOCDBDirName()) ;
281 AliInfo(Form("Retrieving reference data from %s/%s for %s", AliQA::GetQARefStorage(), detOCDBDir, AliQA::GetTaskName(task).Data())) ;
282 AliCDBEntry* entry = man->Get(detOCDBDir, 0) ; //FIXME 0 --> Run Number
4edbc5bc 283 TList * listDetQAD = dynamic_cast<TList *>(entry->GetObject()) ;
284 if ( listDetQAD )
f73f556a 285 rv = dynamic_cast<TObjArray *>(listDetQAD->FindObject(AliQA::GetTaskName(task))) ;
4edbc5bc 286 return rv ;
287}
288
312e6f8d 289//_____________________________________________________________________________
290AliLoader * AliQADataMakerSteer::GetLoader(Int_t iDet)
291{
292 // get the loader for a detector
293
294 TString detName = AliQA::GetDetName(iDet) ;
295 fLoader[iDet] = fRunLoader->GetLoader(detName + "Loader");
296 if (fLoader[iDet])
297 return fLoader[iDet] ;
298
299 // load the QA data maker object
300 TPluginManager* pluginManager = gROOT->GetPluginManager() ;
301 TString loaderName = "Ali" + detName + "Loader" ;
302
303 AliLoader * loader = NULL ;
304 // first check if a plugin is defined for the quality assurance data maker
305 TPluginHandler* pluginHandler = pluginManager->FindHandler("AliLoader", detName) ;
306 // if not, add a plugin for it
307 if (!pluginHandler) {
308 AliDebug(1, Form("defining plugin for %s", loaderName.Data())) ;
309 TString libs = gSystem->GetLibraries() ;
310 if (libs.Contains("lib" + detName + "base.so") || (gSystem->Load("lib" + detName + "base.so") >= 0)) {
311 pluginManager->AddHandler("AliQADataMaker", detName, loaderName, detName + "loader", loaderName + "()") ;
312 } else {
313 pluginManager->AddHandler("AliLoader", detName, loaderName, detName, loaderName + "()") ;
314 }
315 pluginHandler = pluginManager->FindHandler("AliLoader", detName) ;
316 }
317 if (pluginHandler && (pluginHandler->LoadPlugin() == 0)) {
318 loader = (AliLoader *) pluginHandler->ExecPlugin(0) ;
319 }
320 if (loader)
321 fLoader[iDet] = loader ;
322 return loader ;
323}
324
325//_____________________________________________________________________________
04236e67 326AliQADataMaker * AliQADataMakerSteer::GetQADataMaker(const Int_t iDet, const char * mode )
312e6f8d 327{
328 // get the quality assurance data maker for a detector
329
330 if (fQADataMaker[iDet])
331 return fQADataMaker[iDet] ;
332
333 AliQADataMaker * qadm = NULL ;
334
335 if (fFirst) {
336 // load the QA data maker object
337 TPluginManager* pluginManager = gROOT->GetPluginManager() ;
338 TString detName = AliQA::GetDetName(iDet) ;
9afca7a6 339 TString tmp(mode) ;
340 if (tmp.Contains("sim"))
341 tmp.ReplaceAll("s", "S") ;
342 else if (tmp.Contains("rec"))
343 tmp.ReplaceAll("r", "R") ;
344 TString qadmName = "Ali" + detName + "QADataMaker" + tmp ;
312e6f8d 345
346 // first check if a plugin is defined for the quality assurance data maker
347 TPluginHandler* pluginHandler = pluginManager->FindHandler("AliQADataMaker", detName) ;
348 // if not, add a plugin for it
349 if (!pluginHandler) {
350 AliDebug(1, Form("defining plugin for %s", qadmName.Data())) ;
351 TString libs = gSystem->GetLibraries() ;
04236e67 352 if (libs.Contains("lib" + detName + mode + ".so") || (gSystem->Load("lib" + detName + mode + ".so") >= 0)) {
312e6f8d 353 pluginManager->AddHandler("AliQADataMaker", detName, qadmName, detName + "qadm", qadmName + "()") ;
354 } else {
355 pluginManager->AddHandler("AliQADataMaker", detName, qadmName, detName, qadmName + "()") ;
356 }
357 pluginHandler = pluginManager->FindHandler("AliQADataMaker", detName) ;
358 }
359 if (pluginHandler && (pluginHandler->LoadPlugin() == 0)) {
360 qadm = (AliQADataMaker *) pluginHandler->ExecPlugin(0) ;
361 }
362 if (qadm)
363 fQADataMaker[iDet] = qadm ;
364 }
365 return qadm ;
366}
367
368//_____________________________________________________________________________
04236e67 369Bool_t AliQADataMakerSteer::Init(const AliQA::TASKINDEX taskIndex, const char * mode, const char * input )
312e6f8d 370{
371 // Initialize the event source and QA data makers
372
6441b07a 373 if (taskIndex == AliQA::kRAWS) {
374 if (!fRawReader) {
375 TString fileName(input);
376 if (fileName.EndsWith("/")) {
377 fRawReader = new AliRawReaderFile(fileName);
378 } else if (fileName.EndsWith(".root")) {
379 fRawReader = new AliRawReaderRoot(fileName);
380 } else if (!fileName.IsNull()) {
381 fRawReader = new AliRawReaderDate(fileName);
382 fRawReader->SelectEvents(7);
383 }
4ecde5fc 384 }
312e6f8d 385 if ( ! fRawReader )
386 return kFALSE ;
fff5167b 387 fRawReaderDelete = kTRUE ;
312e6f8d 388 fRawReader->NextEvent() ;
389 fRunNumber = fRawReader->GetRunNumber() ;
04236e67 390 AliCDBManager::Instance()->SetRun(fRunNumber) ;
312e6f8d 391 fRawReader->RewindEvents();
392 fNumberOfEvents = 999999 ;
f0c6fb4b 393 if ( fMaxEvents < 0 )
394 fMaxEvents = fNumberOfEvents ;
395 } else if (taskIndex == AliQA::kESDS) {
ad265f3e 396 if (!gSystem->AccessPathName("AliESDs.root")) { // AliESDs.root exists
397 TFile * esdFile = TFile::Open("AliESDs.root") ;
398 fESDTree = dynamic_cast<TTree *> (esdFile->Get("esdTree")) ;
04236e67 399 if ( !fESDTree ) {
400 AliError("esdTree not found") ;
401 return kFALSE ;
402 } else {
403 fESD = new AliESDEvent() ;
404 fESD->ReadFromTree(fESDTree) ;
405 fESDTree->GetEntry(0) ;
406 fRunNumber = fESD->GetRunNumber() ;
407 fNumberOfEvents = fESDTree->GetEntries() ;
f0c6fb4b 408 if ( fMaxEvents < 0 )
409 fMaxEvents = fNumberOfEvents ;
04236e67 410 }
ad265f3e 411 } else {
412 AliError("AliESDs.root not found") ;
413 return kFALSE ;
414 }
312e6f8d 415 } else {
774ac967 416 if ( !InitRunLoader() ) {
417 AliWarning("No Run Loader not found") ;
312e6f8d 418 } else {
312e6f8d 419 fNumberOfEvents = fRunLoader->GetNumberOfEvents() ;
f0c6fb4b 420 if ( fMaxEvents < 0 )
421 fMaxEvents = fNumberOfEvents ;
422
312e6f8d 423 }
ad265f3e 424 }
774ac967 425 // Initialize all QA data makers for all detectors
312e6f8d 426 for (UInt_t iDet = 0; iDet < fgkNDetectors ; iDet++) {
fff5167b 427
4d52736b 428 if (IsSelected(AliQA::GetDetName(iDet))) {
04236e67 429 AliQADataMaker * qadm = GetQADataMaker(iDet, mode) ;
4d52736b 430 if (!qadm) {
fff5167b 431 AliError(Form("AliQADataMaker not found for %s", AliQA::GetDetName(iDet))) ;
432 fDetectorsW.ReplaceAll(AliQA::GetDetName(iDet), "") ;
4d52736b 433 } else {
fff5167b 434 AliDebug(1, Form("Data Maker found for %s", qadm->GetName())) ;
4d52736b 435 qadm->Init(taskIndex, fRunNumber, GetQACycles(iDet)) ;
436 qadm->StartOfCycle(taskIndex, fCycleSame) ;
437 }
312e6f8d 438 }
439 }
440 fFirst = kFALSE ;
441 return kTRUE ;
442}
443
444//_____________________________________________________________________________
445Bool_t AliQADataMakerSteer::InitRunLoader()
446{
447 // get or create the run loader
448 if (fRunLoader) {
c65c502a 449 fCycleSame = kTRUE ;
312e6f8d 450 return kTRUE ;
451 }
452
453 if (!gSystem->AccessPathName(fGAliceFileName.Data())) { // galice.root exists
454 // load all base libraries to get the loader classes
455 TString libs = gSystem->GetLibraries() ;
456 for (UInt_t iDet = 0; iDet < fgkNDetectors; iDet++) {
4d52736b 457 if (!IsSelected(AliQA::GetDetName(iDet)))
458 continue ;
312e6f8d 459 TString detName = AliQA::GetDetName(iDet) ;
460 if (detName == "HLT")
461 continue;
462 if (libs.Contains("lib" + detName + "base.so"))
463 continue;
464 gSystem->Load("lib" + detName + "base.so");
465 }
466 fRunLoader = AliRunLoader::Open(fGAliceFileName.Data());
467 if (!fRunLoader) {
468 AliError(Form("no run loader found in file %s", fGAliceFileName.Data()));
469 return kFALSE;
470 }
471 fRunLoader->CdGAFile();
472 if (fRunLoader->LoadgAlice() == 0) {
473 gAlice = fRunLoader->GetAliRun();
474 }
4d52736b 475
312e6f8d 476 if (!gAlice) {
477 AliError(Form("no gAlice object found in file %s", fGAliceFileName.Data()));
478 return kFALSE;
479 }
480
481 } else { // galice.root does not exist
482 AliError(Form("the file %s does not exist", fGAliceFileName.Data()));
483 return kFALSE;
484 }
485
486 return kTRUE;
487}
488
04236e67 489//_____________________________________________________________________________
490Bool_t AliQADataMakerSteer::IsSelected(const char * det)
491{
492 // check whether detName is contained in detectors
493 // if yes, it is removed from detectors
494
495 const TString detName(det) ;
496 // check if all detectors are selected
497 if ((fDetectors.CompareTo("ALL") == 0) ||
498 fDetectors.BeginsWith("ALL ") ||
499 fDetectors.EndsWith(" ALL") ||
500 fDetectors.Contains(" ALL ")) {
501 fDetectors = "ALL";
502 return kTRUE;
503 }
504
505 // search for the given detector
506 Bool_t rv = kFALSE;
fff5167b 507 //AliInfo(Form("SSSSSSSSSSSSS fd = %s det = %s ", fDetectors.Data(), det)) ;
04236e67 508 if ((fDetectors.CompareTo(detName) == 0) ||
509 fDetectors.BeginsWith(detName+" ") ||
510 fDetectors.EndsWith(" "+detName) ||
511 fDetectors.Contains(" "+detName+" ")) {
512 // fDetectors.ReplaceAll(detName, "");
513 rv = kTRUE;
514 }
515
516 // clean up the detectors string
517 // while (fDetectors.Contains(" "))
518 // fDetectors.ReplaceAll(" ", " ");
519 // while (fDetectors.BeginsWith(" "))
520 // fDetectors.Remove(0, 1);
521 // while (fDetectors.EndsWith(" "))
522 // fDetectors.Remove(fDetectors.Length()-1, 1);
523
524 return rv ;
525}
526
312e6f8d 527//_____________________________________________________________________________
4edbc5bc 528Bool_t AliQADataMakerSteer::Merge(const Int_t runNumber) const
315bba70 529{
567d83d9 530 // Merge all the cycles from all detectors in one single file per run
4edbc5bc 531 char cmd[80] ;
532 if ( runNumber == -1 )
533 sprintf(cmd, ".! ls *%s*.*.*.root > tempo.txt", AliQA::GetQADataFileName()) ;
534 else
535 sprintf(cmd, ".! ls *%s*.%d.*.root > tempo.txt", AliQA::GetQADataFileName(), runNumber) ;
536 gROOT->ProcessLine(cmd) ;
567d83d9 537 ifstream in("tempo.txt") ;
538 const Int_t runMax = 10 ;
539 TString file[AliQA::kNDET*runMax] ;
540 Int_t run[AliQA::kNDET*runMax] ;
541
542 Int_t index = 0 ;
543 while ( 1 ) {
4edbc5bc 544 in >> file[index] ;
dbf9dc0d 545 AliInfo(Form("index = %d file = %s", index, (file[index]).Data())) ;
546 index++ ;
567d83d9 547 if ( !in.good() )
548 break ;
4edbc5bc 549 }
550
551 if ( index == 0 ) {
552 AliError(Form("run number %d not found", runNumber)) ;
553 return kFALSE ;
567d83d9 554 }
4edbc5bc 555
fff5167b 556 Int_t runIndex = 0 ;
557 Int_t runIndexMax = 0 ;
4edbc5bc 558 char stmp[10] ;
559 sprintf(stmp, ".%s.", AliQA::GetQADataFileName()) ;
dbf9dc0d 560 for (Int_t ifile = 0 ; ifile < index ; ifile++) {
567d83d9 561 TString tmp(file[ifile]) ;
562 tmp.ReplaceAll(".root", "") ;
563 TString det = tmp(0, tmp.Index(".")) ;
4edbc5bc 564 tmp.Remove(0, tmp.Index(stmp)+4) ;
567d83d9 565 TString ttmp = tmp(0, tmp.Index(".")) ;
566 Int_t newRun = ttmp.Atoi() ;
fff5167b 567 for (Int_t irun = 0; irun <= runIndexMax; irun++) {
436a9f16 568 if (newRun == run[irun])
569 break ;
567d83d9 570 run[runIndex] = newRun ;
567d83d9 571 runIndex++ ;
572 }
fff5167b 573 runIndexMax = runIndex ;
574 ttmp = tmp(tmp.Index(".")+1, tmp.Length()) ;
567d83d9 575 Int_t cycle = ttmp.Atoi() ;
fff5167b 576 AliDebug(1, Form("%s : det = %s run = %d cycle = %d \n", file[ifile].Data(), det.Data(), newRun, cycle)) ;
567d83d9 577 }
fff5167b 578 for (Int_t irun = 0 ; irun < runIndexMax ; irun++) {
567d83d9 579 TFileMerger merger ;
4edbc5bc 580 char outFileName[20] ;
436a9f16 581 sprintf(outFileName, "Merged.%s.%d.root", AliQA::GetQADataFileName(), run[irun]) ;
567d83d9 582 merger.OutputFile(outFileName) ;
583 for (Int_t ifile = 0 ; ifile < index-1 ; ifile++) {
584 char pattern[100] ;
436a9f16 585 sprintf(pattern, "%s.%d.", AliQA::GetQADataFileName(), run[irun]) ;
567d83d9 586 TString tmp(file[ifile]) ;
fff5167b 587 if (tmp.Contains(pattern)) {
567d83d9 588 merger.AddFile(tmp) ;
fff5167b 589 }
567d83d9 590 }
591 merger.Merge() ;
592 }
593
594 return kTRUE ;
315bba70 595}
596
c65c502a 597//_____________________________________________________________________________
fff5167b 598void AliQADataMakerSteer::Reset(const Bool_t sameCycle)
c65c502a 599{
600 // Reset the default data members
601 for (UInt_t iDet = 0; iDet < fgkNDetectors; iDet++) {
4d52736b 602 if (IsSelected(AliQA::GetDetName(iDet))) {
603 fLoader[iDet] = NULL;
604 if (fQADataMaker[iDet]) {
fff5167b 605 (fQADataMaker[iDet])->Reset(sameCycle) ;
4d52736b 606 //delete fQADataMaker[iDet] ;
607 //fQADataMaker[iDet] = NULL ;
608 }
c65c502a 609 }
610 }
611
6441b07a 612 if (fRawReaderDelete) {
613 delete fRawReader ;
614 fRawReader = NULL ;
615 }
c65c502a 616
fff5167b 617 fCycleSame = sameCycle ;
c65c502a 618 fESD = NULL ;
619 fESDTree = NULL ;
620 fFirst = kTRUE ;
774ac967 621 fNumberOfEvents = 999999 ;
c65c502a 622}
623
6441b07a 624//_____________________________________________________________________________
4d52736b 625Bool_t AliQADataMakerSteer::Run(const char * detectors, AliRawReader * rawReader)
6441b07a 626{
627 //Runs all the QA data Maker for Raws only
4d52736b 628 fRawReader = rawReader ;
6441b07a 629 fRawReaderDelete = kFALSE ;
4d52736b 630 fCycleSame = kTRUE ;
631 fDetectors = detectors ;
57d86b61 632 fRunNumber = fRawReader->GetRunNumber() ;
6441b07a 633 // Initialize all QA data makers for all detectors
634 for (UInt_t iDet = 0; iDet < fgkNDetectors ; iDet++) {
4d52736b 635 if (IsSelected(AliQA::GetDetName(iDet))) {
1aa42107 636 AliQADataMaker * qadm = GetQADataMaker(iDet, "rec") ;
4d52736b 637 if (!qadm) {
638 AliWarning(Form("AliQADataMaker not found for %s", AliQA::GetDetName(iDet))) ;
639 } else {
640 AliInfo(Form("Data Maker found for %s", qadm->GetName())) ;
641 qadm->Init(AliQA::kRAWS, fRunNumber, GetQACycles(iDet)) ;
642 qadm->StartOfCycle(AliQA::kRAWS, fCycleSame) ;
643 }
6441b07a 644 }
645 }
646 fFirst = kFALSE ;
647
1aa42107 648 return DoIt(AliQA::kRAWS, "rec") ;
04236e67 649}
650
651//_____________________________________________________________________________
fff5167b 652TString AliQADataMakerSteer::Run(const char * detectors, const char * fileName)
04236e67 653{
654 //Runs all the QA data Maker for Raws only
fff5167b 655 //fCycleSame = kTRUE ;
04236e67 656 fDetectors = detectors ;
fff5167b 657 fDetectorsW = detectors ;
658
04236e67 659
1aa42107 660 if ( !Init(AliQA::kRAWS, "rec", fileName) )
04236e67 661 return kFALSE ;
662
663 // Initialize all QA data makers for all detectors
fff5167b 664 //for (UInt_t iDet = 0; iDet < fgkNDetectors ; iDet++) {
665// if (IsSelected(AliQA::GetDetName(iDet))) {
666// AliQADataMaker * qadm = GetQADataMaker(iDet, "rec") ;
667// if (!qadm) {
668// AliWarning(Form("AliQADataMaker not found for %s", AliQA::GetDetName(iDet))) ;
669// } else {
670// AliInfo(Form("Data Maker found for %s", qadm->GetName())) ;
671// qadm->Init(AliQA::kRAWS, fRunNumber, GetQACycles(iDet)) ;
672// qadm->StartOfCycle(AliQA::kRAWS, fCycleSame) ;
673// }
674// }
675// }
04236e67 676 fFirst = kFALSE ;
fff5167b 677 DoIt(AliQA::kRAWS, "rec") ;
678 return fDetectorsW ;
6441b07a 679}
680
312e6f8d 681//_____________________________________________________________________________
4d52736b 682Bool_t AliQADataMakerSteer::Run(const char * detectors, const AliQA::TASKINDEX taskIndex, const char * fileName )
312e6f8d 683{
684 // Runs all the QA data Maker for every detector
6441b07a 685
4d52736b 686 Bool_t rv = kFALSE ;
687 fDetectors = detectors ;
04236e67 688
689 char * mode ;
690 if ( (taskIndex == AliQA::kHITS) || (taskIndex == AliQA::kSDIGITS) || (taskIndex == AliQA::kDIGITS) )
1aa42107 691 mode = "sim" ;
04236e67 692 else if ( (taskIndex == AliQA::kRAWS) || (taskIndex == AliQA::kRECPOINTS) || (taskIndex == AliQA::kESDS) )
1aa42107 693 mode = "rec" ;
04236e67 694 else {
695 AliError(Form("%s not implemented", AliQA::GetTaskName(taskIndex).Data())) ;
696 return rv ;
697 }
fff5167b 698
04236e67 699 if ( !Init(taskIndex, mode, fileName) )
312e6f8d 700 return kFALSE ;
fff5167b 701
04236e67 702 rv = DoIt(taskIndex, mode) ;
4d52736b 703
704 return rv ;
6441b07a 705
14e1eccc 706}
4edbc5bc 707
708//_____________________________________________________________________________
709Bool_t AliQADataMakerSteer::Save2OCDB(const Int_t runNumber, const Int_t cycleNumber, const char * detectors) const
710{
711 // take the locasl QA data merge into a single file and save in OCDB
712 Bool_t rv = kTRUE ;
713 TString tmp(AliQA::GetQARefStorage()) ;
714 if ( tmp.IsNull() ) {
715 AliError("No storage defined, use AliQA::SetQARefStorage") ;
716 return kFALSE ;
717 }
718 if ( !(tmp.Contains(AliQA::GetLabLocalOCDB()) || tmp.Contains(AliQA::GetLabAliEnOCDB())) ) {
719 AliError(Form("%s is a wrong storage, use %s or %s", AliQA::GetQARefStorage(), AliQA::GetLabLocalOCDB().Data(), AliQA::GetLabAliEnOCDB().Data())) ;
720 return kFALSE ;
721 }
722 TString sdet(detectors) ;
723 sdet.ToUpper() ;
724 TFile * inputFile ;
725 if ( sdet.Contains("ALL") ) {
726 rv = Merge(runNumber) ;
727 if ( ! rv )
728 return kFALSE ;
729 char inputFileName[20] ;
730 sprintf(inputFileName, "Merged.%s.%d.root", AliQA::GetQADataFileName(), runNumber) ;
731 inputFile = TFile::Open(inputFileName) ;
f73f556a 732 rv = SaveIt2OCDB(runNumber, inputFile) ;
4edbc5bc 733 } else {
734 for (Int_t index = 0; index < AliQA::kNDET; index++) {
735 if (sdet.Contains(AliQA::GetDetName(index))) {
736 char inputFileName[20] ;
737 sprintf(inputFileName, "%s.%s.%d.%d.root", AliQA::GetDetName(index), AliQA::GetQADataFileName(), runNumber, cycleNumber) ;
738 inputFile = TFile::Open(inputFileName) ;
f73f556a 739 rv *= SaveIt2OCDB(runNumber, inputFile) ;
4edbc5bc 740 }
741 }
742 }
743 return rv ;
744}
745
746//_____________________________________________________________________________
f73f556a 747Bool_t AliQADataMakerSteer::SaveIt2OCDB(const Int_t runNumber, TFile * inputFile) const
4edbc5bc 748{
749 // reads the TH1 from file and adds it to appropriate list before saving to OCDB
750 Bool_t rv = kTRUE ;
751 AliInfo(Form("Saving TH1s in %s to %s", inputFile->GetName(), AliQA::GetQARefStorage())) ;
752 AliCDBManager* man = AliCDBManager::Instance() ;
f73f556a 753 if ( ! man->IsDefaultStorageSet() ) {
754 man->SetDefaultStorage(AliQA::GetQARefDefaultStorage()) ;
755 man->SetSpecificStorage(Form("%s/*", AliQA::GetQAOCDBDirName()), AliQA::GetQARefStorage()) ;
756 }
04236e67 757 if(man->GetRun() < 0)
758 man->SetRun(runNumber);
759
4edbc5bc 760 for ( Int_t detIndex = 0 ; detIndex < AliQA::kNDET ; detIndex++) {
761 TDirectory * detDir = inputFile->GetDirectory(AliQA::GetDetName(detIndex)) ;
762 if ( detDir ) {
763 AliInfo(Form("Entering %s", detDir->GetName())) ;
f73f556a 764 char detOCDBDir[20] ;
765 sprintf(detOCDBDir, "%s/%s/%s", AliQA::GetQAOCDBDirName(), AliQA::GetDetName(detIndex), AliQA::GetRefOCDBDirName()) ;
766 AliCDBId idr(detOCDBDir, runNumber, 999999999) ;
4edbc5bc 767 TList * listDetQAD = new TList() ;
768 char listName[20] ;
769 sprintf(listName, "%s QA data Reference", AliQA::GetDetName(detIndex)) ;
770 listDetQAD->SetName(listName) ;
771 TList * taskList = detDir->GetListOfKeys() ;
772 TIter nextTask(taskList) ;
773 TKey * taskKey ;
774 while ( (taskKey = dynamic_cast<TKey*>(nextTask())) ) {
775 TDirectory * taskDir = detDir->GetDirectory(taskKey->GetName()) ;
776 AliInfo(Form("Saving %s", taskDir->GetName())) ;
f73f556a 777 TObjArray * listTaskQAD = new TObjArray(100) ;
4edbc5bc 778 listTaskQAD->SetName(taskKey->GetName()) ;
779 listDetQAD->Add(listTaskQAD) ;
780 TList * histList = taskDir->GetListOfKeys() ;
781 TIter nextHist(histList) ;
782 TKey * histKey ;
783 while ( (histKey = dynamic_cast<TKey*>(nextHist())) ) {
784 TObject * odata = taskDir->Get(histKey->GetName()) ;
785 if ( odata->IsA()->InheritsFrom("TH1") ) {
786 AliInfo(Form("Adding %s", histKey->GetName())) ;
787 TH1 * hdata = static_cast<TH1*>(odata) ;
788 listTaskQAD->Add(hdata) ;
789 }
790 }
791 }
792 AliCDBMetaData mdr ;
793 man->Put(listDetQAD, idr, &mdr) ;
794 }
795 }
796 return rv ;
797}
a6f6970e 798