Line data Source code
1 : /**************************************************************************
2 : * Copyright(c) 2007-2009, 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 : // Checks the quality assurance
20 : // by comparing with reference data
21 : // contained in a DB
22 : // -------------------------------------------------------------
23 : // W. Ferrarese + P. Cerello Feb 2008
24 : // INFN Torino
25 :
26 : // --- ROOT system ---
27 : #include <TTree.h>
28 : #include <TMath.h>
29 : // --- Standard library ---
30 :
31 : // --- AliRoot header files ---
32 : #include "AliITSQADataMakerSim.h"
33 : #include "AliITSQASPDDataMakerSim.h"
34 : #include "AliITSQASDDDataMakerSim.h"
35 : #include "AliITSQASSDDataMakerSim.h"
36 : #include "AliLog.h"
37 : #include "AliQAv1.h"
38 : #include "AliQAChecker.h"
39 : #include "AliITSQAChecker.h"
40 : #include "AliRawReader.h"
41 :
42 116 : ClassImp(AliITSQADataMakerSim)
43 :
44 : //____________________________________________________________________________
45 : AliITSQADataMakerSim::AliITSQADataMakerSim(Short_t subDet) :
46 3 : AliQADataMakerSim(AliQAv1::GetDetName(AliQAv1::kITS), "ITS Quality Assurance Data Maker"),
47 1 : fSubDetector(subDet),
48 1 : fSPDDataMaker(NULL),
49 1 : fSDDDataMaker(NULL),
50 1 : fSSDDataMaker(NULL)
51 5 : {
52 : //ctor used to discriminate OnLine-Offline analysis
53 2 : if(fSubDetector < 0 || fSubDetector > 3) {
54 0 : AliError("Error: fSubDetector number out of range; return\n");
55 : }
56 :
57 : // Initialization for each subdetector
58 1 : if(fSubDetector == 0 || fSubDetector == 1) {
59 5 : AliDebug(AliQAv1::GetQADebugLevel(),"AliITSQADM::Create SPD DataMakerSim\n");
60 3 : fSPDDataMaker = new AliITSQASPDDataMakerSim(this);
61 1 : }
62 1 : if(fSubDetector == 0 || fSubDetector == 2) {
63 5 : AliDebug(AliQAv1::GetQADebugLevel(),"AliITSQADM::Create SDD DataMakerSim\n");
64 : //printf("AliITSQADM::Create SDD DataMakerSim\n");
65 3 : fSDDDataMaker = new AliITSQASDDDataMakerSim(this);
66 1 : }
67 1 : if(fSubDetector == 0 || fSubDetector == 3) {
68 5 : AliDebug(AliQAv1::GetQADebugLevel(),"AliITSQADM::Create SSD DataMakerSim\n");
69 3 : fSSDDataMaker = new AliITSQASSDDataMakerSim(this);
70 1 : }
71 2 : }
72 :
73 : //____________________________________________________________________________
74 6 : AliITSQADataMakerSim::~AliITSQADataMakerSim(){
75 : // destructor
76 3 : if(fSPDDataMaker)delete fSPDDataMaker;
77 3 : if(fSDDDataMaker)delete fSDDDataMaker;
78 3 : if(fSSDDataMaker)delete fSSDDataMaker;
79 3 : }
80 :
81 : //____________________________________________________________________________
82 : AliITSQADataMakerSim::AliITSQADataMakerSim(const AliITSQADataMakerSim& qadm) :
83 0 : AliQADataMakerSim(),
84 0 : fSubDetector(qadm.fSubDetector),
85 0 : fSPDDataMaker(NULL),
86 0 : fSDDDataMaker(NULL),
87 0 : fSSDDataMaker(NULL)
88 0 : {
89 : //copy ctor
90 0 : SetName((const char*)qadm.GetName()) ;
91 0 : SetTitle((const char*)qadm.GetTitle());
92 0 : }
93 :
94 : //__________________________________________________________________
95 : AliITSQADataMakerSim& AliITSQADataMakerSim::operator = (const AliITSQADataMakerSim& qac )
96 : {
97 : // Equal operator.
98 0 : this->~AliITSQADataMakerSim();
99 0 : new(this) AliITSQADataMakerSim(qac);
100 0 : return *this;
101 0 : }
102 :
103 : //____________________________________________________________________________
104 : void AliITSQADataMakerSim::StartOfDetectorCycle()
105 : {
106 : //Detector specific actions at start of cycle
107 24 : AliDebug(AliQAv1::GetQADebugLevel(),"AliITSQADM::Start of ITS Cycle\n");
108 6 : ResetEventTrigClasses(); // reset triggers list to select all histos
109 6 : ResetEvCountCycle();
110 : //
111 12 : if(fSubDetector == 0 || fSubDetector == 1) fSPDDataMaker->StartOfDetectorCycle();
112 12 : if(fSubDetector == 0 || fSubDetector == 2) fSDDDataMaker->StartOfDetectorCycle();
113 12 : if(fSubDetector == 0 || fSubDetector == 3) fSSDDataMaker->StartOfDetectorCycle();
114 6 : }
115 :
116 : //____________________________________________________________________________
117 : void AliITSQADataMakerSim::EndOfDetectorCycle(AliQAv1::TASKINDEX_t task, TObjArray** list)
118 : {
119 : //
120 54 : AliInfo(Form("End of Dedetctor Cycle called for %s\n",AliQAv1::GetTaskName(task).Data() ));
121 9 : ResetEventTrigClasses(); // reset triggers list to select all histos
122 : //
123 : // launch the QA checking
124 108 : for (Int_t specie = 0 ; specie < AliRecoParam::kNSpecies ; specie++) {
125 45 : if (! IsValidEventSpecie(specie, list) ) continue;
126 0 : SetEventSpecie(AliRecoParam::ConvertIndex(specie));
127 : //
128 0 : Int_t idnumber=list[specie]->GetUniqueID();
129 : //printf("specie %s \t id number == %d\n",AliRecoParam::GetEventSpecieName(specie),idnumber);
130 0 : if(idnumber==0) {
131 : //AliInfo(Form("No check for %s\n",AliQAv1::GetTaskName(task).Data() ))
132 0 : continue;
133 : } //skip kDigitsR and not filled TobjArray specie
134 : else{
135 0 : AliDebug(AliQAv1::GetQADebugLevel(),"AliITSDM instantiates checker with Run(AliQAv1::kITS, task, list)\n");
136 0 : if(fSubDetector == 0 || fSubDetector == 1) fSPDDataMaker->EndOfDetectorCycle(task, list); //[specie]);
137 0 : if(fSubDetector == 0 || fSubDetector == 2) fSDDDataMaker->EndOfDetectorCycle(task, list); //[specie]);
138 0 : if(fSubDetector == 0 || fSubDetector == 3) fSSDDataMaker->EndOfDetectorCycle(task, list); //[specie]);
139 : //
140 0 : AliQAChecker *qac = AliQAChecker::Instance();
141 0 : AliITSQAChecker *qacb = (AliITSQAChecker *) qac->GetDetQAChecker(0);
142 0 : Int_t subdet=GetSubDet();
143 0 : qacb->SetSubDet(subdet);
144 :
145 0 : if(subdet== 0 ){
146 0 : qacb->SetTaskOffset(fSPDDataMaker->GetOffset(task,specie),fSDDDataMaker->GetOffset(task,specie),fSSDDataMaker->GetOffset(task,specie)); //Setting the offset for the QAChecker list
147 0 : qacb->SetHisto(fSPDDataMaker->GetTaskHisto(task), fSDDDataMaker->GetTaskHisto(task), fSSDDataMaker->GetTaskHisto(task));
148 0 : }
149 : else
150 0 : if(subdet!=0){
151 0 : Int_t offset=GetDetTaskOffset(subdet, task);
152 0 : qacb->SetDetTaskOffset(subdet,offset);
153 0 : Int_t histo=GetDetTaskHisto(subdet, task);
154 0 : qacb->SetDetHisto(subdet,histo);
155 0 : }
156 0 : qac->Run( AliQAv1::kITS , task, list);
157 : }//end else unique id
158 0 : }//end for
159 9 : }
160 :
161 : //____________________________________________________________________________
162 : void AliITSQADataMakerSim::InitDigits()
163 : {
164 :
165 : // Initialization for Digits data
166 2 : fDigitsQAList[AliRecoParam::AConvert(fEventSpecie)]->SetUniqueID(60);
167 1 : if(fSubDetector == 0 || fSubDetector == 1) {
168 3 : AliDebug(AliQAv1::GetQADebugLevel(),"AliITSQADM:: SPD InitDigits\n");
169 :
170 1 : fSPDDataMaker->InitDigits();
171 1 : }
172 1 : if(fSubDetector == 0 || fSubDetector == 2) {
173 3 : AliDebug(AliQAv1::GetQADebugLevel(),"AliITSQADM:: SDD InitDigits\n");
174 :
175 1 : fSDDDataMaker->SetOffset(AliQAv1::kDIGITS, fDigitsQAList[AliRecoParam::AConvert(fEventSpecie)]->GetEntries(),AliRecoParam::AConvert(fEventSpecie));
176 1 : fSDDDataMaker->InitDigits();
177 1 : }
178 1 : if(fSubDetector == 0 || fSubDetector == 3) {
179 3 : AliDebug(AliQAv1::GetQADebugLevel(),"AliITSQADM:: SSD InitDigits\n");
180 :
181 1 : fSSDDataMaker->SetOffset(AliQAv1::kDIGITS, fDigitsQAList[AliRecoParam::AConvert(fEventSpecie)]->GetEntries(),AliRecoParam::AConvert(fEventSpecie));
182 1 : fSSDDataMaker->InitDigits();
183 1 : }
184 : //
185 1 : ClonePerTrigClass(AliQAv1::kDIGITS); // this should be the last line
186 1 : }
187 :
188 : //____________________________________________________________________________
189 : void AliITSQADataMakerSim::MakeDigits()
190 : {
191 : // Fill QA for digits
192 0 : if(fSubDetector == 0 || fSubDetector == 1) fSPDDataMaker->MakeDigits();
193 0 : if(fSubDetector == 0 || fSubDetector == 2) fSDDDataMaker->MakeDigits();
194 0 : if(fSubDetector == 0 || fSubDetector == 3) fSSDDataMaker->MakeDigits();
195 : //
196 0 : IncEvCountCycleDigits();
197 0 : IncEvCountTotalDigits();
198 : //
199 0 : }
200 :
201 : //____________________________________________________________________________
202 : void AliITSQADataMakerSim::MakeDigits(TTree * digits)
203 : {
204 : // Fill QA for digits
205 12 : if(fSubDetector == 0 || fSubDetector == 1) fSPDDataMaker->MakeDigits(digits);
206 8 : if(fSubDetector == 0 || fSubDetector == 2) fSDDDataMaker->MakeDigits(digits);
207 8 : if(fSubDetector == 0 || fSubDetector == 3) fSSDDataMaker->MakeDigits(digits);
208 : //
209 4 : IncEvCountCycleDigits();
210 4 : IncEvCountTotalDigits();
211 : //
212 4 : }
213 :
214 : //____________________________________________________________________________
215 : void AliITSQADataMakerSim::InitSDigits()
216 : {
217 : // Initialization for SDigits
218 0 : fSDigitsQAList[AliRecoParam::AConvert(fEventSpecie)]->SetUniqueID(70);
219 0 : if(fSubDetector == 0 || fSubDetector == 1) {
220 0 : AliDebug(AliQAv1::GetQADebugLevel(),"AliITSQADM:: SPD InitSDigits\n");
221 :
222 0 : fSPDDataMaker->InitSDigits();
223 0 : }
224 0 : if(fSubDetector == 0 || fSubDetector == 2){
225 0 : AliDebug(AliQAv1::GetQADebugLevel(),"AliITSQADM:: SDD InitSDigits\n");
226 :
227 0 : fSDDDataMaker->SetOffset(AliQAv1::kSDIGITS, fSDigitsQAList [AliRecoParam::AConvert(fEventSpecie)]->GetEntries(),AliRecoParam::AConvert(fEventSpecie));
228 0 : fSDDDataMaker->InitSDigits();
229 0 : }
230 0 : if(fSubDetector == 0 || fSubDetector == 3) {
231 0 : AliDebug(AliQAv1::GetQADebugLevel(),"AliITSQADM:: SSD InitSDigits\n");
232 :
233 0 : fSSDDataMaker->SetOffset(AliQAv1::kSDIGITS, fSDigitsQAList [AliRecoParam::AConvert(fEventSpecie)]->GetEntries(),AliRecoParam::AConvert(fEventSpecie));
234 0 : fSSDDataMaker->InitSDigits();
235 0 : }
236 : //
237 0 : ClonePerTrigClass(AliQAv1::kSDIGITS); // this should be the last line
238 0 : }
239 :
240 : //____________________________________________________________________________
241 : void AliITSQADataMakerSim::MakeSDigits()
242 : {
243 : // Fill QA for sdigits
244 0 : if(fSubDetector == 0 || fSubDetector == 1) fSPDDataMaker->MakeSDigits();
245 0 : if(fSubDetector == 0 || fSubDetector == 2) fSDDDataMaker->MakeSDigits();
246 0 : if(fSubDetector == 0 || fSubDetector == 3) fSSDDataMaker->MakeSDigits();
247 : //
248 0 : IncEvCountCycleSDigits();
249 0 : IncEvCountTotalSDigits();
250 : //
251 0 : }
252 :
253 : //____________________________________________________________________________
254 : void AliITSQADataMakerSim::MakeSDigits(TTree * sdigits)
255 : {
256 : // Fill QA for recpoints
257 0 : if(fSubDetector == 0 || fSubDetector == 1) fSPDDataMaker->MakeSDigits(sdigits);
258 0 : if(fSubDetector == 0 || fSubDetector == 2) fSDDDataMaker->MakeSDigits(sdigits);
259 0 : if(fSubDetector == 0 || fSubDetector == 3) fSSDDataMaker->MakeSDigits(sdigits);
260 : //
261 0 : IncEvCountCycleSDigits();
262 0 : IncEvCountTotalSDigits();
263 : //
264 0 : }
265 :
266 : //____________________________________________________________________________
267 : void AliITSQADataMakerSim::InitHits()
268 : {
269 : // Initialization for hits
270 2 : fHitsQAList[AliRecoParam::AConvert(fEventSpecie)]->SetUniqueID(50);
271 1 : if(fSubDetector == 0 || fSubDetector == 1) {
272 3 : AliDebug(AliQAv1::GetQADebugLevel(),"AliITSQADM:: SPD InitHits\n");
273 1 : fSPDDataMaker->InitHits();
274 1 : }
275 1 : if(fSubDetector == 0 || fSubDetector == 2) {
276 3 : AliDebug(AliQAv1::GetQADebugLevel(),"AliITSQADM:: SDD InitHits\n");
277 :
278 1 : fSDDDataMaker->SetOffset(AliQAv1::kHITS, fHitsQAList[AliRecoParam::AConvert(fEventSpecie)]->GetEntries(),AliRecoParam::AConvert(fEventSpecie));
279 1 : fSDDDataMaker->InitHits();
280 1 : }
281 1 : if(fSubDetector == 0 || fSubDetector == 3) {
282 3 : AliDebug(AliQAv1::GetQADebugLevel(),"AliITSQADM:: SSD InitHits\n");
283 :
284 1 : fSSDDataMaker->SetOffset(AliQAv1::kHITS, fHitsQAList[AliRecoParam::AConvert(fEventSpecie)]->GetEntries(),AliRecoParam::AConvert(fEventSpecie));
285 1 : fSSDDataMaker->InitHits();
286 1 : }
287 : //
288 1 : ClonePerTrigClass(AliQAv1::kHITS); // this should be the last line
289 1 : }
290 :
291 : //____________________________________________________________________________
292 : void AliITSQADataMakerSim::MakeHits()
293 : {
294 : // Fill QA for hits
295 0 : if(fSubDetector == 0 || fSubDetector == 1) fSPDDataMaker->MakeHits();
296 0 : if(fSubDetector == 0 || fSubDetector == 2) fSDDDataMaker->MakeHits();
297 0 : if(fSubDetector == 0 || fSubDetector == 3) fSSDDataMaker->MakeHits();
298 : //
299 0 : IncEvCountCycleHits();
300 0 : IncEvCountTotalHits();
301 : //
302 0 : }
303 :
304 : //____________________________________________________________________________
305 : void AliITSQADataMakerSim::MakeHits(TTree * hits)
306 : {
307 : // Fill QA for hits
308 12 : if(fSubDetector == 0 || fSubDetector == 1) fSPDDataMaker->MakeHits(hits);
309 8 : if(fSubDetector == 0 || fSubDetector == 2) fSDDDataMaker->MakeHits(hits);
310 8 : if(fSubDetector == 0 || fSubDetector == 3) fSSDDataMaker->MakeHits(hits);
311 : //
312 4 : IncEvCountCycleHits();
313 4 : IncEvCountTotalHits();
314 : //
315 4 : }
316 :
317 : //_________________________________________________________________
318 : Int_t AliITSQADataMakerSim::GetDetTaskOffset(Int_t subdet,AliQAv1::TASKINDEX_t task)
319 : {
320 :
321 : //return the offset for each subdetector
322 0 : switch(subdet)
323 : {
324 : Int_t offset;
325 : case 1:
326 0 : offset=fSPDDataMaker->GetOffset(task);
327 0 : return offset;
328 : break;
329 : case 2:
330 0 : offset=fSDDDataMaker->GetOffset(task);
331 0 : return offset;
332 : break;
333 : case 3:
334 0 : offset=fSSDDataMaker->GetOffset(task);
335 0 : return offset;
336 : break;
337 : default:
338 0 : AliWarning("No specific subdetector (SPD, SDD, SSD) selected!! Offset set to zero \n");
339 : offset=0;
340 0 : return offset;
341 : break;
342 : }
343 : //return offset;
344 0 : }
345 :
346 : //_________________________________________________________________
347 : Int_t AliITSQADataMakerSim::GetDetTaskHisto(Int_t subdet,AliQAv1::TASKINDEX_t task)
348 : {
349 : //return of the number of histograms for each task and for each sub detector
350 0 : switch(subdet)
351 : {
352 :
353 : Int_t histo;
354 : case 1:
355 0 : histo=fSPDDataMaker->GetOffset(task);
356 0 : return histo;
357 : break;
358 : case 2:
359 0 : histo=fSDDDataMaker->GetOffset(task);
360 0 : return histo;
361 : break;
362 : case 3:
363 0 : histo=fSSDDataMaker->GetOffset(task);
364 0 : return histo;
365 : break;
366 : default:
367 0 : AliWarning("No specific subdetector (SPD, SDD, SSD) selected!! Offset set to zero \n");
368 : histo=0;
369 0 : return histo;
370 : break;
371 : }
372 : //return offset;
373 0 : }
|