]>
Commit | Line | Data |
---|---|---|
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 | ||
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 | */ | |
25 | ||
26 | // --- ROOT system --- | |
27 | #include <TSystem.h> | |
28 | #include <TFile.h> | |
6c18591a | 29 | #include <TList.h> |
d76c31f4 | 30 | #include <TTree.h> |
421ab0fb | 31 | |
32 | // --- Standard library --- | |
33 | ||
34 | // --- AliRoot header files --- | |
35 | #include "AliLog.h" | |
36 | #include "AliQualAssDataMaker.h" | |
d76c31f4 | 37 | #include "AliESDEvent.h" |
421ab0fb | 38 | |
39 | ClassImp(AliQualAssDataMaker) | |
40 | ||
41 | TString AliQualAssDataMaker::fDetectorDirName("") ; | |
42 | ||
43 | ||
44 | //____________________________________________________________________________ | |
45 | AliQualAssDataMaker::AliQualAssDataMaker(const char * name, const char * title) : | |
46 | TNamed(name, title), | |
47 | fOutput(0x0), | |
6c18591a | 48 | fDetectorDir(0x0), |
49 | fDigitsQAList(0x0), | |
50 | fESDsQAList(0x0), | |
51 | fHitsQAList(0x0), | |
52 | fRawsQAList(0x0), | |
53 | fRecPointsQAList(0x0), | |
5b188f2f | 54 | fSDigitsQAList(0x0), |
55 | fCurrentCycle(-1), | |
56 | fCycle(9999999), | |
57 | fCycleCounter(0), | |
58 | fRun(0) | |
421ab0fb | 59 | { |
60 | // ctor | |
a5fa6165 | 61 | TString tmp(GetName()) ; |
62 | tmp.Append("QA") ; | |
63 | SetName(tmp.Data()) ; | |
421ab0fb | 64 | fDetectorDirName = GetName() ; |
65 | } | |
66 | ||
67 | //____________________________________________________________________________ | |
68 | AliQualAssDataMaker::AliQualAssDataMaker(const AliQualAssDataMaker& qadm) : | |
69 | TNamed(qadm.GetName(), qadm.GetTitle()), | |
70 | fOutput(qadm.fOutput), | |
6c18591a | 71 | fDetectorDir(qadm.fDetectorDir), |
72 | fDigitsQAList(qadm.fDigitsQAList), | |
73 | fESDsQAList(qadm.fESDsQAList), | |
74 | fHitsQAList(qadm.fHitsQAList), | |
75 | fRawsQAList(qadm.fRecPointsQAList), | |
76 | fRecPointsQAList(qadm.fRecPointsQAList), | |
5b188f2f | 77 | fSDigitsQAList(qadm.fSDigitsQAList), |
78 | fCurrentCycle(qadm.fCurrentCycle), | |
79 | fCycle(qadm.fCycle), | |
80 | fCycleCounter(qadm.fCycleCounter), | |
81 | fRun(qadm.fRun) | |
421ab0fb | 82 | { |
83 | //copy ctor | |
84 | fDetectorDirName = GetName() ; | |
85 | } | |
86 | ||
87 | //__________________________________________________________________ | |
88 | AliQualAssDataMaker& AliQualAssDataMaker::operator = (const AliQualAssDataMaker& qadm ) | |
89 | { | |
90 | // Equal operator. | |
91 | this->~AliQualAssDataMaker(); | |
92 | new(this) AliQualAssDataMaker(qadm); | |
93 | return *this; | |
94 | } | |
95 | ||
5b188f2f | 96 | //____________________________________________________________________________ |
97 | void AliQualAssDataMaker::EndOfCycle(AliQualAss::TASKINDEX task) | |
98 | { | |
99 | // Finishes a cycle of QA data acquistion | |
100 | ||
101 | EndOfDetectorCycle() ; | |
102 | TDirectory * subDir = fDetectorDir->GetDirectory(AliQualAss::GetTaskName(task)) ; | |
103 | ||
104 | switch (task) { | |
105 | ||
106 | case AliQualAss::kRAWS: | |
107 | subDir->cd() ; | |
108 | fRawsQAList->Write() ; | |
109 | break ; | |
110 | ||
111 | case AliQualAss::kHITS: | |
112 | subDir->cd() ; | |
113 | fHitsQAList->Write() ; | |
114 | break ; | |
115 | ||
116 | case AliQualAss::kSDIGITS: | |
117 | subDir->cd() ; | |
118 | fSDigitsQAList->Write() ; | |
119 | break ; | |
120 | ||
121 | case AliQualAss::kDIGITS: | |
122 | subDir->cd() ; | |
123 | fDigitsQAList->Write() ; | |
124 | break ; | |
125 | ||
126 | case AliQualAss::kRECPOINTS: | |
127 | subDir->cd() ; | |
128 | fRecPointsQAList->Write() ; | |
129 | break ; | |
130 | ||
131 | case AliQualAss::kTRACKSEGMENTS: | |
132 | break ; | |
133 | ||
134 | case AliQualAss::kRECPARTICLES: | |
135 | break ; | |
136 | ||
137 | case AliQualAss::kESDS: | |
138 | subDir->cd() ; | |
139 | fESDsQAList->Write() ; | |
140 | break ; | |
141 | } | |
142 | } | |
143 | ||
421ab0fb | 144 | //____________________________________________________________________________ |
d76c31f4 | 145 | void AliQualAssDataMaker::Exec(AliQualAss::TASKINDEX task, TObject * data) |
421ab0fb | 146 | { |
147 | // creates the quality assurance data for the various tasks (Hits, SDigits, Digits, ESDs) | |
5b188f2f | 148 | |
421ab0fb | 149 | switch (task) { |
6c18591a | 150 | |
151 | case AliQualAss::kRAWS: | |
152 | AliInfo("Processing Raws QA") ; | |
153 | MakeRaws(data) ; | |
154 | break ; | |
155 | ||
421ab0fb | 156 | case AliQualAss::kHITS: |
157 | AliInfo("Processing Hits QA") ; | |
d76c31f4 | 158 | MakeHits(data) ; |
421ab0fb | 159 | break ; |
160 | ||
d76c31f4 | 161 | case AliQualAss::kSDIGITS: |
421ab0fb | 162 | AliInfo("Processing SDigits QA") ; |
d76c31f4 | 163 | MakeSDigits(data) ; |
421ab0fb | 164 | break ; |
d76c31f4 | 165 | |
166 | case AliQualAss::kDIGITS: | |
167 | MakeDigits(data) ; | |
421ab0fb | 168 | break ; |
169 | ||
170 | case AliQualAss::kRECPOINTS: | |
d76c31f4 | 171 | AliInfo("Processing RecPoints QA") ; |
6c18591a | 172 | TTree * recpoints = dynamic_cast<TTree *>(data) ; |
173 | if (recpoints) | |
174 | MakeRecPoints(recpoints) ; | |
175 | else | |
176 | AliError("Wrong type of recpoints container") ; | |
421ab0fb | 177 | break ; |
178 | ||
179 | case AliQualAss::kTRACKSEGMENTS: | |
d76c31f4 | 180 | AliInfo("Processing Track Segments QA: not existing anymore") ; |
181 | // TTree * ts = dynamic_cast<TTree *>(data) ; | |
182 | // if (ts) | |
183 | // MakeTrackSegments(ts) ; | |
184 | // else | |
185 | // AliError("Wrong type of track segments container") ; | |
421ab0fb | 186 | break ; |
187 | ||
d76c31f4 | 188 | case AliQualAss::kRECPARTICLES: |
189 | AliInfo("Processing RecParticles QA: not existing anymore") ; | |
190 | // TTree * recpar = dynamic_cast<TTree *>(data) ; | |
191 | // if (recpar) | |
192 | // MakeRecParticles(recpar) ; | |
193 | // else | |
194 | // AliError("Wrong type of recparticles container") ; | |
195 | break ; | |
196 | ||
421ab0fb | 197 | case AliQualAss::kESDS: |
198 | AliInfo("Processing ESDs QA") ; | |
d76c31f4 | 199 | AliESDEvent * esd = dynamic_cast<AliESDEvent *>(data) ; |
200 | if (esd) | |
201 | MakeESDs(esd) ; | |
202 | else | |
203 | AliError("Wrong type of esd container") ; | |
421ab0fb | 204 | break ; |
5b188f2f | 205 | } |
421ab0fb | 206 | } |
207 | ||
208 | //____________________________________________________________________________ | |
5b188f2f | 209 | void AliQualAssDataMaker::Finish(AliQualAss::TASKINDEX) const |
421ab0fb | 210 | { |
5b188f2f | 211 | // write to the output File |
421ab0fb | 212 | } |
213 | ||
214 | //____________________________________________________________________________ | |
5b188f2f | 215 | TList * AliQualAssDataMaker::Init(AliQualAss::TASKINDEX task, Int_t run, Int_t cycles) |
421ab0fb | 216 | { |
217 | // general intialisation | |
421ab0fb | 218 | |
5b188f2f | 219 | fRun = run ; |
220 | if (cycles > 0) | |
221 | SetCycle(cycles) ; | |
222 | ||
421ab0fb | 223 | switch (task) { |
6c18591a | 224 | case AliQualAss::kRAWS: |
6c18591a | 225 | fRawsQAList = new TList() ; |
226 | InitRaws() ; | |
227 | return fRawsQAList ; | |
228 | break ; | |
229 | ||
421ab0fb | 230 | case AliQualAss::kHITS: |
6c18591a | 231 | fHitsQAList = new TList() ; |
421ab0fb | 232 | InitHits() ; |
6c18591a | 233 | return fHitsQAList ; |
421ab0fb | 234 | break ; |
235 | ||
236 | case AliQualAss::kSDIGITS: | |
6c18591a | 237 | fSDigitsQAList = new TList() ; |
421ab0fb | 238 | InitSDigits() ; |
6c18591a | 239 | return fSDigitsQAList ; |
421ab0fb | 240 | break ; |
241 | ||
242 | case AliQualAss::kDIGITS: | |
6c18591a | 243 | fDigitsQAList = new TList(); |
421ab0fb | 244 | InitDigits() ; |
6c18591a | 245 | return fDigitsQAList ; |
421ab0fb | 246 | break ; |
247 | ||
248 | case AliQualAss::kRECPOINTS: | |
6c18591a | 249 | fRecPointsQAList = new TList ; |
421ab0fb | 250 | InitRecPoints() ; |
6c18591a | 251 | return fRecPointsQAList ; |
421ab0fb | 252 | break ; |
253 | ||
254 | case AliQualAss::kTRACKSEGMENTS: | |
6c18591a | 255 | // InitTrackSegments() ; |
421ab0fb | 256 | break ; |
257 | ||
258 | case AliQualAss::kRECPARTICLES: | |
6c18591a | 259 | // InitRecParticles() ; |
421ab0fb | 260 | break ; |
261 | ||
262 | case AliQualAss::kESDS: | |
6c18591a | 263 | fESDsQAList = new TList() ; |
264 | InitESDs() ; | |
265 | return fRecPointsQAList ; | |
421ab0fb | 266 | break ; |
267 | } | |
6c18591a | 268 | return 0x0 ; |
421ab0fb | 269 | } |
5b188f2f | 270 | |
271 | //____________________________________________________________________________ | |
272 | void AliQualAssDataMaker::StartOfCycle(AliQualAss::TASKINDEX task, Option_t * sameCycle) | |
273 | { | |
274 | // Finishes a cycle of QA data acquistion | |
275 | ||
276 | if ( (strcmp(sameCycle, "same") != 0) ) { | |
277 | fCurrentCycle++ ; | |
278 | ResetCycle() ; | |
279 | } else if ( !(strcmp(sameCycle, "") != 0) ) | |
280 | AliFatal(Form("%s is an invalid option, valid options are: same", sameCycle)) ; | |
281 | ||
282 | fOutput = AliQualAss::GetQADMOutFile(fRun, fCurrentCycle) ; | |
283 | ||
284 | AliInfo(Form(" Run %d Cycle %d task %s file %s", | |
285 | fRun, fCurrentCycle, AliQualAss::GetTaskName(task).Data(), fOutput->GetName() )) ; | |
286 | ||
287 | fDetectorDir = fOutput->GetDirectory(GetDetectorDirName()) ; | |
288 | if (!fDetectorDir) | |
289 | fDetectorDir = fOutput->mkdir(GetDetectorDirName()) ; | |
290 | ||
291 | TDirectory * subDir = fDetectorDir->GetDirectory(AliQualAss::GetTaskName(task)) ; | |
292 | if (!subDir) | |
293 | subDir = fDetectorDir->mkdir(AliQualAss::GetTaskName(task)) ; | |
294 | subDir->cd() ; | |
295 | ||
296 | TList * list = 0x0 ; | |
297 | ||
298 | switch (task) { | |
299 | case AliQualAss::kRAWS: | |
300 | list = fRawsQAList ; | |
301 | break ; | |
302 | ||
303 | case AliQualAss::kHITS: | |
304 | list = fHitsQAList ; | |
305 | break ; | |
306 | ||
307 | case AliQualAss::kSDIGITS: | |
308 | list = fSDigitsQAList ; | |
309 | break ; | |
310 | ||
311 | case AliQualAss::kDIGITS: | |
312 | list = fDigitsQAList ; | |
313 | break ; | |
314 | ||
315 | case AliQualAss::kRECPOINTS: | |
316 | list = fRecPointsQAList ; | |
317 | break ; | |
318 | ||
319 | case AliQualAss::kTRACKSEGMENTS: | |
320 | break ; | |
321 | ||
322 | case AliQualAss::kRECPARTICLES: | |
323 | break ; | |
324 | ||
325 | case AliQualAss::kESDS: | |
326 | list = fESDsQAList ; | |
327 | break ; | |
328 | } | |
329 | ||
330 | TIter next(list) ; | |
331 | TH1 * h ; | |
332 | while ( (h = dynamic_cast<TH1 *>(next())) ) | |
333 | h->Reset() ; | |
334 | ||
335 | StartOfDetectorCycle() ; | |
336 | ||
337 | } |