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