adding Mihaela's macros to be used for the analysis train...
[u/mrichter/AliRoot.git] / STEER / AliQADataMaker.cxx
CommitLineData
421ab0fb 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
17/* $Id$ */
18
202374b1 19//
20// Base Class
21// Produces the data needed to calculate the quality assurance.
22// All data must be mergeable objects.
23// Y. Schutz CERN July 2007
24//
421ab0fb 25
26// --- ROOT system ---
27#include <TSystem.h>
28#include <TFile.h>
6c18591a 29#include <TList.h>
d76c31f4 30#include <TTree.h>
d5cf81bd 31#include <TClonesArray.h>
a2b64fbd 32#include <TParameter.h>
57acd2d2 33#include <TH1K.h>
34#include <TH2C.h>
35#include <TH2D.h>
36#include <TH2F.h>
37#include <TH2I.h>
38#include <TH3C.h>
39#include <TH3D.h>
40#include <TH3F.h>
41#include <TH3I.h>
42#include <TH3S.h>
421ab0fb 43
44// --- Standard library ---
45
46// --- AliRoot header files ---
47#include "AliLog.h"
2e42b4d4 48#include "AliQADataMaker.h"
49#include "AliQAChecker.h"
d76c31f4 50#include "AliESDEvent.h"
d5cf81bd 51#include "AliRawReader.h"
421ab0fb 52
2e42b4d4 53ClassImp(AliQADataMaker)
312e6f8d 54
421ab0fb 55//____________________________________________________________________________
2e42b4d4 56AliQADataMaker::AliQADataMaker(const char * name, const char * title) :
421ab0fb 57 TNamed(name, title),
58 fOutput(0x0),
6c18591a 59 fDetectorDir(0x0),
312e6f8d 60 fDetectorDirName(""),
930e6e3e 61 fCurrentCycle(0),
5b188f2f 62 fCycle(9999999),
63 fCycleCounter(0),
b1af1125 64 fWriteExpert(kFALSE),
57acd2d2 65 fParameterList(new TList*[AliRecoParam::kNSpecies]),
66 fRun(0),
67 fEventSpecie(AliRecoParam::kDefault)
421ab0fb 68{
69 // ctor
421ab0fb 70 fDetectorDirName = GetName() ;
57acd2d2 71 for (Int_t specie = 0 ; specie < AliRecoParam::kNSpecies ; specie++)
72 fParameterList[specie] = NULL ;
421ab0fb 73}
74
75//____________________________________________________________________________
2e42b4d4 76AliQADataMaker::AliQADataMaker(const AliQADataMaker& qadm) :
421ab0fb 77 TNamed(qadm.GetName(), qadm.GetTitle()),
78 fOutput(qadm.fOutput),
6c18591a 79 fDetectorDir(qadm.fDetectorDir),
312e6f8d 80 fDetectorDirName(qadm.fDetectorDirName),
5b188f2f 81 fCurrentCycle(qadm.fCurrentCycle),
82 fCycle(qadm.fCycle),
83 fCycleCounter(qadm.fCycleCounter),
b1af1125 84 fWriteExpert(qadm.fWriteExpert),
a2b64fbd 85 fParameterList(qadm.fParameterList),
57acd2d2 86 fRun(qadm.fRun),
87 fEventSpecie(qadm.fEventSpecie)
421ab0fb 88{
89 //copy ctor
90 fDetectorDirName = GetName() ;
91}
92
421ab0fb 93//____________________________________________________________________________
57acd2d2 94Int_t AliQADataMaker::Add2List(TH1 * hist, const Int_t index, TObjArray ** list, const Bool_t expert, const Bool_t saveForCorr)
ba7aca7d 95{
04236e67 96 // Set histograms memory resident and add to the list
ab4351aa 97 // Maximm allowed is 10000
57acd2d2 98
99 Int_t rv = -1 ;
100 TClass * classType = hist->Class() ;
101 TString className(classType->GetName()) ;
102 if( ! className.BeginsWith("T") && ! classType->InheritsFrom("TH1") ) {
103 AliError(Form("QA data Object must be a generic ROOT object and derive fom TH1 and not %s", className.Data())) ;
104 } else if ( index > 10000 ) {
ab4351aa 105 AliError("Max number of authorized QA objects is 10000") ;
57acd2d2 106 } else {
750730d8 107 if (expert)
108 hist->SetBit(AliQA::GetExpertBit()) ;
57acd2d2 109 TH1 * histClone[AliRecoParam::kNSpecies] ;
110 for (Int_t specie = 0 ; specie < AliRecoParam::kNSpecies ; specie++) {
111 histClone[specie] = CloneMe(hist, specie) ;
112 histClone[specie]->SetDirectory(0) ;
113 list[specie]->AddAtAndExpand(histClone[specie], index) ;
114 if(saveForCorr) {
115 char * name = Form("%s_%s", list[AliRecoParam::kDefault]->GetName(), hist->GetName()) ;
116 TParameter<double> * p = new TParameter<double>(name, 9999.9999) ;
117 if ( fParameterList[specie] == NULL )
118 fParameterList[specie] = new TList() ;
119 fParameterList[specie]->Add(p) ;
120 }
a2b64fbd 121 }
57acd2d2 122 rv = list[AliRecoParam::kDefault]->GetLast() ;
a2b64fbd 123 }
57acd2d2 124 delete hist ;
125 return rv ;
126}
127
128//____________________________________________________________________________
129TH1 * AliQADataMaker::CloneMe(TH1 * hist, Int_t specie) const
130{
131 // clones a histogram
132 char * name = Form("%s_%s", AliRecoParam::GetEventSpecieName(specie), hist->GetName()) ;
75373542 133 TH1 * hClone = dynamic_cast<TH1 *>(hist->Clone(name)) ;
134 if ( hist->TestBit(AliQA::GetExpertBit()) )
135 hClone->SetBit(AliQA::GetExpertBit()) ;
136 return hClone ;
421ab0fb 137}
138
96d67a8d 139//____________________________________________________________________________
140void AliQADataMaker::DefaultEndOfDetectorCycle(AliQA::TASKINDEX_t task)
141{
142 // this method must be oveloaded by detectors
143 // sets the QA result to Fatal
7c002d48 144 AliQA::Instance(AliQA::GetDetIndex(GetName())) ;
96d67a8d 145 AliQA * qa = AliQA::Instance(task) ;
57acd2d2 146 for (Int_t specie = 0 ; specie < AliRecoParam::kNSpecies ; specie++)
147 qa->Set(AliQA::kFATAL, specie) ;
96d67a8d 148 AliQA::GetQAResultFile()->cd() ;
149 qa->Write(AliQA::GetQAName(), kWriteDelete) ;
150 AliQA::GetQAResultFile()->Close() ;
151}
152
421ab0fb 153//____________________________________________________________________________
c65c502a 154void AliQADataMaker::Finish() const
421ab0fb 155{
96d67a8d 156 // write to the output File
d9cbd8fd 157 if (fOutput)
158 fOutput->Close() ;
421ab0fb 159}
160
161//____________________________________________________________________________
57acd2d2 162TObject * AliQADataMaker::GetData(TObjArray ** list, const Int_t index)
04236e67 163{
164 // Returns the QA object at index. Limit is 100.
76c42cb4 165 if ( ! list ) {
166 AliError("Data list is NULL !!") ;
167 return NULL ;
168 }
57acd2d2 169 if (list[AliRecoParam::AConvert(fEventSpecie)]) {
27773260 170 if ( index > 10000 ) {
171 AliError("Max number of authorized QA objects is 10000") ;
172 return NULL ;
173 } else {
57acd2d2 174 Int_t esindex = AliRecoParam::AConvert(fEventSpecie) ;
175 return list[esindex]->At(index) ;
27773260 176 }
57acd2d2 177 } else {
27773260 178 AliError("Data list is NULL !!") ;
179 return NULL ;
04236e67 180 }
27773260 181}