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 : // SSD QA part: P. Christakoglou - NIKHEF/UU
26 :
27 : // --- ROOT system ---
28 : #include <TTree.h>
29 : #include <TH1.h>
30 : #include <TH2.h>
31 : #include <TMath.h>
32 : // --- Standard library ---
33 :
34 : // --- AliRoot header files ---
35 : #include "AliITS.h"
36 : #include "AliITSmodule.h"
37 : #include "AliITShit.h"
38 : #include "AliITSdigit.h"
39 : #include "AliITSpListItem.h"
40 : #include "AliRun.h"
41 : #include "AliITSQADataMakerSim.h"
42 : #include "AliITSQASSDDataMakerSim.h"
43 : #include "AliLog.h"
44 : #include "AliQAv1.h"
45 : #include "AliQAChecker.h"
46 : #include "AliRawReader.h"
47 :
48 116 : ClassImp(AliITSQASSDDataMakerSim)
49 :
50 : //____________________________________________________________________________
51 : AliITSQASSDDataMakerSim::AliITSQASSDDataMakerSim(AliITSQADataMakerSim *aliITSQADataMakerSim) :
52 1 : TObject(),
53 1 : fAliITSQADataMakerSim(aliITSQADataMakerSim),
54 : //fSSDhTask(0),
55 1 : fSSDhHTask(0),
56 1 : fSSDhSTask(0),
57 1 : fSSDhDTask(0),
58 1 : fGenOffsetH(0),
59 1 : fGenOffsetS(0),
60 1 : fGenOffsetD(0)
61 5 : {
62 : //ctor used to discriminate OnLine-Offline analysis
63 2 : fGenOffsetH= new Int_t[AliRecoParam::kNSpecies];
64 2 : fGenOffsetS= new Int_t[AliRecoParam::kNSpecies];
65 2 : fGenOffsetD= new Int_t[AliRecoParam::kNSpecies];
66 12 : for(Int_t i=0; i<AliRecoParam::kNSpecies; i++)
67 : {
68 5 : fGenOffsetH[i]= 0;
69 5 : fGenOffsetS[i]= 0;
70 5 : fGenOffsetD[i]= 0;
71 : }
72 2 : }
73 :
74 : //____________________________________________________________________________
75 : AliITSQASSDDataMakerSim::AliITSQASSDDataMakerSim(const AliITSQASSDDataMakerSim& qadm) :
76 0 : TObject(),
77 0 : fAliITSQADataMakerSim(qadm.fAliITSQADataMakerSim),
78 : //fSSDhTask(qadm.fSSDhTask),
79 0 : fSSDhHTask(qadm.fSSDhHTask),
80 0 : fSSDhSTask(qadm.fSSDhSTask),
81 0 : fSSDhDTask(qadm.fSSDhDTask),
82 0 : fGenOffsetH(qadm.fGenOffsetH),
83 0 : fGenOffsetS(qadm.fGenOffsetS),
84 0 : fGenOffsetD(qadm.fGenOffsetD)
85 0 : {
86 : //copy ctor
87 0 : fAliITSQADataMakerSim->SetName((const char*)qadm.fAliITSQADataMakerSim->GetName()) ;
88 0 : fAliITSQADataMakerSim->SetTitle((const char*)qadm.fAliITSQADataMakerSim->GetTitle());
89 0 : }
90 :
91 : //__________________________________________________________________
92 : AliITSQASSDDataMakerSim& AliITSQASSDDataMakerSim::operator = (const AliITSQASSDDataMakerSim& qac ) {
93 : // Equal operator.
94 0 : this->~AliITSQASSDDataMakerSim();
95 0 : new(this) AliITSQASSDDataMakerSim(qac);
96 0 : return *this;
97 0 : }
98 :
99 : //____________________________________________________________________________
100 : void AliITSQASSDDataMakerSim::StartOfDetectorCycle() {
101 : //Detector specific actions at start of cycle
102 24 : AliDebug(AliQAv1::GetQADebugLevel(),"AliITSQADM::Start of SSD Cycle\n");
103 6 : }
104 :
105 : //____________________________________________________________________________
106 : void AliITSQASSDDataMakerSim::EndOfDetectorCycle(AliQAv1::TASKINDEX_t /*task*/, TObjArray** /*list*/) {
107 : // launch the QA checking
108 0 : AliDebug(AliQAv1::GetQADebugLevel(),"AliITSDM instantiates checker with Run(AliQAv1::kITS, task, list)\n");
109 :
110 : // AliQAChecker::Instance()->Run( AliQAv1::kITS , task, list);
111 0 : }
112 :
113 : //____________________________________________________________________________
114 : Int_t AliITSQASSDDataMakerSim::InitDigits() {
115 : // Initialization for DIGIT data - SSD -
116 : const Bool_t expert = kTRUE ;
117 : const Bool_t image = kTRUE ;
118 : Int_t rv = 0 ;
119 : // fGenOffsetD = (fAliITSQADataMakerSim->fDigitsQAList[AliRecoParam::kDefault])->GetEntries();
120 :
121 : // custom code here
122 2 : TH1F *fHistSSDModule = new TH1F("fHistSSDDigitsModule",
123 : "SSD Digits Module;SSD Module Number;N_{DIGITS}",
124 : 1698,499.5,2197.5);
125 2 : rv = fAliITSQADataMakerSim->Add2DigitsList(fHistSSDModule,
126 1 : fGenOffsetD[fAliITSQADataMakerSim->GetEventSpecie()] + 0, !expert, image);
127 1 : fSSDhDTask += 1;
128 1 : TH2F *fHistSSDModuleStrip = new TH2F("fHistSSDDigitsModuleStrip",
129 : "SSD Digits Module Strip;N_{Strip};N_{Module}",
130 : 1540,0,1540,1698,499.5,2197.5);
131 2 : rv = fAliITSQADataMakerSim->Add2DigitsList(fHistSSDModuleStrip,
132 1 : fGenOffsetD[fAliITSQADataMakerSim->GetEventSpecie()] + 1, !expert, image);
133 1 : fSSDhDTask += 1;
134 :
135 3 : AliDebug(AliQAv1::GetQADebugLevel(),Form("%d SSD Digits histograms booked\n",fSSDhDTask));
136 1 : return rv ;
137 0 : }
138 :
139 : //____________________________________________________________________________
140 : Int_t AliITSQASSDDataMakerSim::MakeDigits(TTree *digits)
141 : {
142 : // Fill QA for DIGIT - SSD -
143 : Int_t rv = 0 ;
144 :
145 8 : AliITS *fITS = (AliITS*)gAlice->GetModule("ITS");
146 4 : fITS->SetTreeAddress();
147 4 : TClonesArray *iSSDdigits = fITS->DigitsAddress(2);
148 13592 : for(Int_t iModule = 500; iModule < 2198; iModule++) {
149 6792 : iSSDdigits->Clear();
150 6792 : digits->GetEvent(iModule);
151 6792 : Int_t ndigits = iSSDdigits->GetEntries();
152 6792 : fAliITSQADataMakerSim->FillDigitsData(fGenOffsetD[fAliITSQADataMakerSim->GetEventSpecie()] + 0,iModule,ndigits);
153 6792 : if(ndigits != 0)
154 16572 : AliDebug(AliQAv1::GetQADebugLevel(),Form("Module: %d - Digits: %d",iModule,ndigits));
155 :
156 38514 : for (Int_t iDigit = 0; iDigit < ndigits; iDigit++) {
157 12465 : AliITSdigit *dig = (AliITSdigit*)iSSDdigits->UncheckedAt(iDigit);
158 12465 : Int_t fStripNumber = (dig->GetCoord1() == 0) ? dig->GetCoord2() : dig->GetCoord2() + fgkNumberOfPSideStrips;
159 12465 : fAliITSQADataMakerSim->FillDigitsData(fGenOffsetD[fAliITSQADataMakerSim->GetEventSpecie()] + 1,fStripNumber,iModule,dig->GetSignal());
160 : }//digit loop
161 : }//module loop
162 : //
163 4 : return rv ;
164 : }
165 :
166 : //____________________________________________________________________________
167 : Int_t AliITSQASSDDataMakerSim::InitSDigits() {
168 : // Initialization for SDIGIT data - SSD -
169 : const Bool_t expert = kTRUE ;
170 : const Bool_t image = kTRUE ;
171 : Int_t rv = 0 ;
172 : //fGenOffsetS = (fAliITSQADataMakerSim->fSDigitsQAList[AliRecoParam::kDefault])->GetEntries();
173 :
174 : // custom code here
175 0 : TH1F *fHistSSDModule = new TH1F("fHistSSDSDigitsModule",
176 : "SSD SDigits Module;SSD Module Number;N_{SDIGITS}",
177 : 1698,499.5,2197.5);
178 0 : rv = fAliITSQADataMakerSim->Add2SDigitsList(fHistSSDModule,
179 0 : fGenOffsetS[fAliITSQADataMakerSim->GetEventSpecie()] + 0, !expert, image);
180 0 : fSSDhSTask += 1;
181 :
182 0 : AliDebug(AliQAv1::GetQADebugLevel(),Form("%d SSD SDigits histograms booked\n",fSSDhSTask));
183 : //
184 0 : return rv ;
185 0 : }
186 :
187 : //____________________________________________________________________________
188 : Int_t AliITSQASSDDataMakerSim::MakeSDigits(TTree *sdigits) {
189 : // Fill QA for SDIGIT - SSD -
190 : Int_t rv = 0 ;
191 :
192 0 : static TClonesArray iSSDEmpty("AliITSpListItem",10000);
193 0 : iSSDEmpty.Clear();
194 0 : TClonesArray *iSSDsdigits = &iSSDEmpty;
195 :
196 : // AliDebug(AliQAv1::GetQADebugLevel(), Form("Trying to access the sdigits histogram: %d\n",fGenOffsetS));
197 :
198 0 : TBranch *brchSDigits = sdigits->GetBranch("ITS");
199 0 : brchSDigits->SetAddress(&iSSDsdigits);
200 0 : for(Int_t iModule = 500; iModule < 2198; iModule++) {
201 0 : iSSDsdigits->Clear();
202 0 : sdigits->GetEvent(iModule);
203 0 : Int_t ndigits = iSSDsdigits->GetEntries();
204 0 : fAliITSQADataMakerSim->FillSDigitsData(fGenOffsetS[fAliITSQADataMakerSim->GetEventSpecie()] + 0,iModule,ndigits);
205 0 : if(ndigits != 0)
206 0 : AliDebug(AliQAv1::GetQADebugLevel(),Form("Module: %d - Digits: %d",iModule,ndigits));
207 :
208 : // for (Int_t iDigit = 0; iDigit < ndigits; iDigit++) {
209 : // AliITSpListItem *dig=(AliITSpListItem*)iSSDsdigits->At(iDigit);
210 : // dig=0;
211 : // }//digit loop
212 : }//module loop
213 : //
214 0 : return rv ;
215 0 : }
216 :
217 : //____________________________________________________________________________
218 : Int_t AliITSQASSDDataMakerSim::InitHits() {
219 : // Initialization for HITS data - SSD -
220 : const Bool_t expert = kTRUE ;
221 : const Bool_t image = kTRUE ;
222 : Int_t rv = 0 ;
223 :
224 : //fGenOffsetH = (fAliITSQADataMakerSim->fHitsQAList[fEventSpecie])->GetEntries();
225 :
226 : // custom code here
227 2 : TH1F *fHistSSDModule = new TH1F("fHistSSDHitsModule",
228 : "SSD Hits Module;SSD Module Number;N_{HITS}",
229 : 1698,499.5,2197.5);
230 2 : rv = fAliITSQADataMakerSim->Add2HitsList(fHistSSDModule,
231 1 : fGenOffsetH[fAliITSQADataMakerSim->GetEventSpecie()] + 0, !expert, image);
232 1 : fSSDhHTask += 1;
233 1 : TH1F *fHistSSDGlobalX = new TH1F("fHistSSDHitsGlobalX",
234 : "SSD Hits Global X;x [cm];Entries",
235 : 1000,-50.,50.);
236 2 : rv = fAliITSQADataMakerSim->Add2HitsList(fHistSSDGlobalX,
237 1 : fGenOffsetH[fAliITSQADataMakerSim->GetEventSpecie()] + 1, !expert, image);
238 1 : fSSDhHTask += 1;
239 1 : TH1F *fHistSSDGlobalY = new TH1F("fHistSSDHitsGlobalY",
240 : "SSD Hits Global Y;y [cm];Entries",
241 : 1000,-50.,50.);
242 2 : rv = fAliITSQADataMakerSim->Add2HitsList(fHistSSDGlobalY,
243 1 : fGenOffsetH[fAliITSQADataMakerSim->GetEventSpecie()] + 2, !expert, image);
244 1 : fSSDhHTask += 1;
245 1 : TH1F *fHistSSDGlobalZ = new TH1F("fHistSSDHitsGlobalZ",
246 : "SSD Hits Global Z ;z [cm];Entries",
247 : 1000,-60.,60.);
248 2 : rv = fAliITSQADataMakerSim->Add2HitsList(fHistSSDGlobalZ,
249 1 : fGenOffsetH[fAliITSQADataMakerSim->GetEventSpecie()] + 3, !expert, image);
250 1 : fSSDhHTask += 1;
251 1 : TH1F *fHistSSDLocalX = new TH1F("fHistSSDHitsLocalX",
252 : "SSD Hits Local X;x [cm];Entries",
253 : 1000,-4.,4.);
254 2 : rv = fAliITSQADataMakerSim->Add2HitsList(fHistSSDLocalX,
255 1 : fGenOffsetH[fAliITSQADataMakerSim->GetEventSpecie()] + 4, !expert, image);
256 1 : fSSDhHTask += 1;
257 1 : TH1F *fHistSSDLocalY = new TH1F("fHistSSDHitsLocalY",
258 : "SSD Hits Local Y;y [cm];Entries",
259 : 1000,-0.1,0.1);
260 2 : rv = fAliITSQADataMakerSim->Add2HitsList(fHistSSDLocalY,
261 1 : fGenOffsetH[fAliITSQADataMakerSim->GetEventSpecie()] + 5, !expert, image);
262 1 : fSSDhHTask += 1;
263 1 : TH1F *fHistSSDLocalZ = new TH1F("fHistSSDHitsLocalZ",
264 : "SSD Hits Local Z;z [cm];Entries",
265 : 1000,-4.,4.);
266 2 : rv = fAliITSQADataMakerSim->Add2HitsList(fHistSSDLocalZ,
267 1 : fGenOffsetH[fAliITSQADataMakerSim->GetEventSpecie()] + 6, !expert, image);
268 1 : fSSDhHTask += 1;
269 1 : TH1F *fHistSSDIonization = new TH1F("fHistSSDHitsIonization",
270 : "SSD Hits Ionization;log(dE/dx) [KeV];N_{Hits}",
271 : 100,-7,-2);
272 2 : rv = fAliITSQADataMakerSim->Add2HitsList(fHistSSDIonization,
273 1 : fGenOffsetH[fAliITSQADataMakerSim->GetEventSpecie()] + 7, !expert, image);
274 1 : fSSDhHTask += 1;
275 1 : TH2F *fHistSSDGlobalXY = new TH2F("fHistSSDHitsGlobalXY",
276 : "SSD Hits Global XY;x [cm];y [cm]",
277 : 1000,-50.,50.,
278 : 1000,-50.,50.);
279 2 : rv = fAliITSQADataMakerSim->Add2HitsList(fHistSSDGlobalXY,
280 1 : fGenOffsetH[fAliITSQADataMakerSim->GetEventSpecie()] + 8, !expert, image);
281 1 : fSSDhHTask += 1;
282 :
283 3 : AliDebug(AliQAv1::GetQADebugLevel(),Form("%d SSD Hits histograms booked\n",fSSDhHTask));
284 1 : return rv ;
285 0 : }
286 :
287 :
288 : //____________________________________________________________________________
289 : Int_t AliITSQASSDDataMakerSim::MakeHits(TTree *hits) {
290 : // Fill QA for HITS - SSD -
291 : Int_t rv = 0 ;
292 :
293 8 : AliITS *fITS = (AliITS*)gAlice->GetModule("ITS");
294 4 : fITS->SetTreeAddress();
295 4 : Int_t nmodules;
296 4 : fITS->InitModules(-1,nmodules);
297 4 : fITS->FillModules(hits,0);
298 13592 : for(Int_t iModule = 500; iModule < 2198; iModule++) {
299 6792 : AliITSmodule *module = fITS->GetModule(iModule);
300 6792 : TObjArray *arrHits = module->GetHits();
301 6792 : Int_t nhits = arrHits->GetEntriesFast();
302 6792 : if(nhits != 0)
303 465 : AliDebug(AliQAv1::GetQADebugLevel(),Form("Module: %d - Hits: %d",iModule,nhits));
304 14530 : for (Int_t iHit = 0; iHit < nhits; iHit++) {
305 473 : AliITShit *hit = (AliITShit*) arrHits->At(iHit);
306 :
307 473 : fAliITSQADataMakerSim->FillHitsData(fGenOffsetH[fAliITSQADataMakerSim->GetEventSpecie()] + 0,iModule);
308 473 : fAliITSQADataMakerSim->FillHitsData(fGenOffsetH[fAliITSQADataMakerSim->GetEventSpecie()] + 1,hit->GetXG());
309 473 : fAliITSQADataMakerSim->FillHitsData(fGenOffsetH[fAliITSQADataMakerSim->GetEventSpecie()] + 2,hit->GetYG());
310 473 : fAliITSQADataMakerSim->FillHitsData(fGenOffsetH[fAliITSQADataMakerSim->GetEventSpecie()] + 3,hit->GetZG());
311 473 : fAliITSQADataMakerSim->FillHitsData(fGenOffsetH[fAliITSQADataMakerSim->GetEventSpecie()] + 4,hit->GetXL());
312 473 : fAliITSQADataMakerSim->FillHitsData(fGenOffsetH[fAliITSQADataMakerSim->GetEventSpecie()] + 5,hit->GetYL());
313 473 : fAliITSQADataMakerSim->FillHitsData(fGenOffsetH[fAliITSQADataMakerSim->GetEventSpecie()] + 6,hit->GetZL());
314 473 : if(hit->GetIonization())
315 473 : fAliITSQADataMakerSim->FillHitsData(fGenOffsetH[fAliITSQADataMakerSim->GetEventSpecie()] + 7,TMath::Log10(hit->GetIonization()));
316 473 : fAliITSQADataMakerSim->FillHitsData(fGenOffsetH[fAliITSQADataMakerSim->GetEventSpecie()] + 8,hit->GetXG(),hit->GetYG());
317 : }//hit loop
318 : }//module loop
319 4 : return rv ;
320 4 : }
321 :
322 : //____________________________________________________________________________
323 : Int_t AliITSQASSDDataMakerSim::GetOffset(AliQAv1::TASKINDEX_t task,Int_t specie){
324 : // Returns histogram offset according to the specified task
325 : Int_t offset=0;
326 0 : if( task == AliQAv1::kHITS){
327 0 : offset=fGenOffsetH[specie];
328 0 : }
329 0 : else if( task == AliQAv1::kSDIGITS) {
330 0 : offset=fGenOffsetS[specie];
331 0 : }
332 0 : else if( task == AliQAv1::kDIGITS) {
333 0 : offset=fGenOffsetD[specie];
334 0 : }
335 : else {
336 0 : AliInfo("No task has been selected. TaskHisto set to zero.\n");
337 : }
338 :
339 0 : return offset;
340 : }
341 :
342 :
343 : //____________________________________________________________________________
344 : void AliITSQASSDDataMakerSim::SetOffset(AliQAv1::TASKINDEX_t task, Int_t offset,Int_t specie ){
345 : // Returns histogram offset according to the specified task
346 4 : if( task == AliQAv1::kHITS){
347 1 : fGenOffsetH[specie] = offset;
348 1 : }
349 1 : else if( task == AliQAv1::kSDIGITS) {
350 0 : fGenOffsetS[specie] = offset;
351 0 : }
352 1 : else if( task == AliQAv1::kDIGITS) {
353 1 : fGenOffsetD[specie] = offset;
354 1 : }
355 : else {
356 0 : AliInfo("No task has been selected. TaskHisto set to zero.\n");
357 : }
358 2 : }
359 :
360 : //____________________________________________________________________________
361 : Int_t AliITSQASSDDataMakerSim::GetTaskHisto(AliQAv1::TASKINDEX_t task) {
362 : // Returns the number of booked histograms for the selected task
363 : Int_t histotot=0;
364 0 : if( task == AliQAv1::kHITS) {
365 0 : histotot=fSSDhHTask ;
366 0 : }
367 0 : else if( task == AliQAv1::kSDIGITS) {
368 0 : histotot=fSSDhSTask;
369 0 : }
370 0 : else if( task == AliQAv1::kDIGITS) {
371 0 : histotot=fSSDhDTask ;
372 0 : }
373 : else {
374 0 : AliInfo("No task has been selected. TaskHisto set to zero.\n");
375 : }
376 0 : return histotot;
377 :
378 : }
|