1.The QA data created on demand according to the event species at filling time. 2...
[u/mrichter/AliRoot.git] / ITS / AliITSQASDDDataMakerSim.cxx
1 /**************************************************************************\r
2  * Copyright(c) 2007-2009, ALICE Experiment at CERN, All rights reserved. *\r
3  *                                                                        *\r
4  * Author: The ALICE Off-line Project.                                    *\r
5  * Contributors are mentioned in the code where appropriate.              *\r
6  *                                                                        *\r
7  * Permission to use, copy, modify and distribute this software and its   *\r
8  * documentation strictly for non-commercial purposes is hereby granted   *\r
9  * without fee, provided that the above copyright notice appears in all   *\r
10  * copies and that both the copyright notice and this permission notice   *\r
11  * appear in the supporting documentation. The authors make no claims     *\r
12  * about the suitability of this software for any purpose. It is          *\r
13  * provided "as is" without express or implied warranty.                  *\r
14  **************************************************************************/\r
15 \r
16 /* $Id$ */\r
17 \r
18 //  *************************************************************\r
19 //  Checks the quality assurance \r
20 //  by comparing with reference data\r
21 //  contained in a DB\r
22 //  -------------------------------------------------------------\r
23 //  W. Ferrarese + P. Cerello Feb 2008\r
24 //  INFN Torino\r
25 \r
26 // --- ROOT system ---\r
27 #include <TTree.h>\r
28 // --- Standard library ---\r
29 \r
30 // --- AliRoot header files ---\r
31 #include "AliITSQASDDDataMakerSim.h"\r
32 #include "AliLog.h"\r
33 #include "AliQAv1.h"\r
34 #include "AliQAChecker.h"\r
35 #include "AliQADataMakerSim.h"\r
36 #include "AliITSQADataMakerSim.h"\r
37 #include "AliRawReader.h"\r
38 #include "AliITSdigit.h"\r
39 #include "AliITS.h"\r
40 #include "AliITSmodule.h"\r
41 #include "AliITShit.h"\r
42 #include "AliITSLoader.h"\r
43 #include "AliRunLoader.h"\r
44 #include "AliRun.h"\r
45 #include "AliITSsegmentationSDD.h"\r
46 #include "AliITSpList.h"\r
47 \r
48 ClassImp(AliITSQASDDDataMakerSim)\r
49 \r
50 //____________________________________________________________________________ \r
51 AliITSQASDDDataMakerSim::AliITSQASDDDataMakerSim(AliITSQADataMakerSim *aliITSQADataMakerSim) :\r
52 TObject(),\r
53 fAliITSQADataMakerSim(aliITSQADataMakerSim),\r
54 fSDDhHTask(0),\r
55 fSDDhSTask(0),\r
56 fSDDhDTask(0),\r
57 fGenOffsetH(0),\r
58 fGenOffsetS(0),\r
59 fGenOffsetD(0)\r
60 {\r
61   //ctor used to discriminate OnLine-Offline analysis   \r
62 }\r
63 \r
64 //____________________________________________________________________________ \r
65 AliITSQASDDDataMakerSim::AliITSQASDDDataMakerSim(const AliITSQASDDDataMakerSim& qadm) :\r
66 TObject(),\r
67 fAliITSQADataMakerSim(qadm.fAliITSQADataMakerSim),\r
68 fSDDhHTask(qadm.fSDDhHTask),\r
69 fSDDhSTask(qadm.fSDDhSTask),\r
70 fSDDhDTask(qadm.fSDDhDTask),\r
71 fGenOffsetH(qadm.fGenOffsetH),\r
72 fGenOffsetS(qadm.fGenOffsetS),\r
73 fGenOffsetD(qadm.fGenOffsetD)\r
74 {\r
75   //copy ctor \r
76   fAliITSQADataMakerSim->SetName((const char*)qadm.fAliITSQADataMakerSim->GetName()) ; \r
77   fAliITSQADataMakerSim->SetTitle((const char*)qadm.fAliITSQADataMakerSim->GetTitle());\r
78   }\r
79 \r
80 //__________________________________________________________________\r
81 AliITSQASDDDataMakerSim& AliITSQASDDDataMakerSim::operator = (const AliITSQASDDDataMakerSim& qac )\r
82 {\r
83   // Equal operator.\r
84   this->~AliITSQASDDDataMakerSim();\r
85   new(this) AliITSQASDDDataMakerSim(qac);\r
86   return *this;\r
87 }\r
88 \r
89 //____________________________________________________________________________ \r
90 void AliITSQASDDDataMakerSim::StartOfDetectorCycle()\r
91 {\r
92   //Detector specific actions at start of cycle\r
93   AliDebug(AliQAv1::GetQADebugLevel(),"AliITSQADM::Start of SDD Cycle\n");\r
94 }\r
95 \r
96 //____________________________________________________________________________ \r
97 void AliITSQASDDDataMakerSim::EndOfDetectorCycle(AliQAv1::TASKINDEX_t /*task*/, TObjArray* /*list*/)\r
98 {\r
99   // launch the QA checking\r
100   AliDebug(AliQAv1::GetQADebugLevel(),"AliITSDM instantiates checker with Run(AliQAv1::kITS, task, list)\n"); \r
101   //AliQAChecker::Instance()->Run( AliQAv1::kITS , task, list);\r
102 }\r
103 \r
104 //____________________________________________________________________________ \r
105 Int_t AliITSQASDDDataMakerSim::InitDigits()\r
106\r
107   // Initialization for DIGIT data - SDD -  \r
108   const Bool_t expert   = kTRUE ; \r
109   const Bool_t image    = kTRUE ;\r
110   Int_t rv = 0 ; \r
111   //fGenOffsetD = (fAliITSQADataMakerSim->fDigitsQAList[AliRecoParam::kDefault])->GetEntries();\r
112   //fSDDhTask must be incremented by one unit every time a histogram is ADDED to the QA List\r
113   TH1F* h0=new TH1F("SDD DIGITS Module Pattern","SDD DIGITS Module Pattern",260,239.5,499.5);       //hmod\r
114   h0->GetXaxis()->SetTitle("SDD Module Number");\r
115   h0->GetYaxis()->SetTitle("# DIGITS");\r
116   rv = fAliITSQADataMakerSim->Add2DigitsList(h0,fGenOffsetD, !expert, image);\r
117   fSDDhDTask ++;\r
118   TH1F* h1=new TH1F("SDD Anode Distribution","SDD DIGITS Anode Distribution",512,-0.5,511.5);      //hanocc\r
119   h1->GetXaxis()->SetTitle("Anode Number");\r
120   h1->GetYaxis()->SetTitle("# DIGITS");\r
121   rv = fAliITSQADataMakerSim->Add2DigitsList(h1,1+fGenOffsetD, !expert, image);\r
122   fSDDhDTask ++;\r
123   TH1F* h2=new TH1F("SDD Tbin Distribution","SDD DIGITS Tbin Distribution",256,-0.5,255.5);      //htbocc\r
124   h2->GetXaxis()->SetTitle("Tbin Number");\r
125   h2->GetYaxis()->SetTitle("# DIGITS");\r
126   rv = fAliITSQADataMakerSim->Add2DigitsList(h2,2+fGenOffsetD, !expert, image);\r
127   fSDDhDTask ++;\r
128   TH1F* h3=new TH1F("SDD ADC Counts Distribution","SDD DIGITS ADC Counts Distribution",200,0.,1024.);          //hsig\r
129   h3->GetXaxis()->SetTitle("ADC Value");\r
130   h3->GetYaxis()->SetTitle("# DIGITS");\r
131   rv = fAliITSQADataMakerSim->Add2DigitsList(h3,3+fGenOffsetD, !expert, image);\r
132   fSDDhDTask ++;\r
133   AliDebug(AliQAv1::GetQADebugLevel(),Form("%d SDD Digits histograms booked\n",fSDDhDTask));\r
134   return rv ; \r
135 }\r
136 \r
137 //____________________________________________________________________________\r
138 Int_t AliITSQASDDDataMakerSim::MakeDigits(TTree * digits)\r
139\r
140 \r
141   // Fill QA for DIGIT - SDD -\r
142   Int_t rv = 0 ; \r
143   // Check id histograms already created for this Event Specie\r
144   if ( ! fAliITSQADataMakerSim->GetDigitsData(fGenOffsetD) )\r
145     rv = InitDigits() ;\r
146  \r
147   AliITS *fITS  = (AliITS*)gAlice->GetModule("ITS");\r
148   fITS->SetTreeAddress();\r
149   TClonesArray *iITSdigits  = fITS->DigitsAddress(1);\r
150   for(Int_t i=0; i<260; i++){\r
151     Int_t nmod=i+240;\r
152     digits->GetEvent(nmod);\r
153     Int_t ndigits = iITSdigits->GetEntries();\r
154     fAliITSQADataMakerSim->GetDigitsData(fGenOffsetD)->Fill(nmod,ndigits);\r
155     for (Int_t idig=0; idig<ndigits; idig++) {\r
156       AliITSdigit *dig=(AliITSdigit*)iITSdigits->UncheckedAt(idig);\r
157       Int_t iz=dig->GetCoord1();  // cell number z\r
158       Int_t ix=dig->GetCoord2();  // cell number x\r
159       Int_t sig=dig->GetSignal();\r
160       fAliITSQADataMakerSim->GetDigitsData(1+fGenOffsetD)->Fill(iz);\r
161       fAliITSQADataMakerSim->GetDigitsData(2+fGenOffsetD)->Fill(ix);\r
162       fAliITSQADataMakerSim->GetDigitsData(3+fGenOffsetD)->Fill(sig);\r
163     }\r
164   }\r
165   return rv ; \r
166 }\r
167 \r
168 //____________________________________________________________________________ \r
169 Int_t AliITSQASDDDataMakerSim::InitSDigits()\r
170\r
171   // Initialization for SDIGIT data - SDD -\r
172   const Bool_t expert   = kTRUE ; \r
173   const Bool_t image    = kTRUE ;\r
174   Int_t rv = 0 ; \r
175   //fGenOffsetS = (fAliITSQADataMakerSim->fSDigitsQAList[AliRecoParam::kDefault])->GetEntries();\r
176   //fSDDhTask must be incremented by one unit every time a histogram is ADDED to the QA List\r
177   TH1F* h0=new TH1F("SDD SDIGITS Module Pattern","SDIGITS SDD Module Pattern",260,239.5,499.5);       //hmod\r
178   h0->GetXaxis()->SetTitle("SDD Module Number");\r
179   h0->GetYaxis()->SetTitle("# SDIGITS");\r
180   rv = fAliITSQADataMakerSim->Add2SDigitsList(h0,fGenOffsetS, !expert, image);\r
181   fSDDhSTask ++;\r
182   TH1F* h1=new TH1F("SDD Anode Distribution","SDIGITS SDD Anode Distribution",512,-0.5,511.5);      //hanocc\r
183   h1->GetXaxis()->SetTitle("Anode Number");\r
184   h1->GetYaxis()->SetTitle("# SDIGITS");\r
185   rv = fAliITSQADataMakerSim->Add2SDigitsList(h1,1+fGenOffsetS, !expert, image);\r
186   fSDDhSTask ++;\r
187   TH1F* h2=new TH1F("SDD Tbin Distribution","SDIGITS SDD Tbin Distribution",256,-0.5,255.5);      //htbocc\r
188   h2->GetXaxis()->SetTitle("Tbin Number");\r
189   h2->GetYaxis()->SetTitle("# SDIGITS");\r
190   rv = fAliITSQADataMakerSim->Add2SDigitsList(h2,2+fGenOffsetS);\r
191   fSDDhSTask ++;\r
192   TH1F* h3=new TH1F("SDD ADC Counts Distribution","SDIGITS SDD ADC Counts Distribution",200,0.,1024.);          //hsig\r
193   h3->GetXaxis()->SetTitle("ADC Value");\r
194   h3->GetYaxis()->SetTitle("# SDIGITS");\r
195   rv = fAliITSQADataMakerSim->Add2SDigitsList(h3,3+fGenOffsetS, !expert, image);\r
196   fSDDhSTask ++;\r
197 \r
198   AliDebug(AliQAv1::GetQADebugLevel(),Form("%d SDD SDigits histograms booked\n",fSDDhSTask));\r
199   return rv ; \r
200 }\r
201 \r
202 //____________________________________________________________________________\r
203 Int_t AliITSQASDDDataMakerSim::MakeSDigits(TTree * sdigits)\r
204\r
205   // Fill QA for SDIGIT - SDD -\r
206   Int_t rv = 0 ; \r
207   // Check id histograms already created for this Event Specie\r
208   if ( ! fAliITSQADataMakerSim->GetSDigitsData(fGenOffsetS) )\r
209     rv = InitSDigits() ;\r
210   \r
211    AliITSsegmentationSDD* seg = new AliITSsegmentationSDD();\r
212   Int_t nan=seg->Npz();\r
213   Int_t ntb=seg->Npx();\r
214   Int_t scaleSize=4;\r
215   AliITSpList* list=new AliITSpList(nan,ntb*scaleSize);\r
216 \r
217   //AliITS *fITS  = (AliITS*)gAlice->GetModule("ITS");\r
218   //fITS->SetTreeAddress();\r
219   //TClonesArray *ITSdigits  = fITS->DigitsAddress(1);\r
220   //TFile *sper = new TFile("sper.root","CREATE"); //agginto a mano x prova\r
221   //digits->Write();\r
222   //sper->Close();\r
223 \r
224 \r
225   TBranch *brchSDigits = sdigits->GetBranch("ITS");\r
226   for(Int_t id=0; id<260; id++){\r
227     Int_t nmod=id+240;\r
228     TClonesArray * sdig = new TClonesArray( "AliITSpListItem",1000 );\r
229     brchSDigits->SetAddress( &sdig );\r
230     brchSDigits->GetEvent(nmod);\r
231     Int_t nsdig=sdig->GetEntries();\r
232     fAliITSQADataMakerSim->GetSDigitsData(fGenOffsetS)->Fill(nmod,nsdig);\r
233     for(Int_t i=0;i<nsdig;i++){\r
234       AliITSpListItem *cell=(AliITSpListItem*)sdig->At(i);\r
235       Float_t sig=cell->GetSignal();\r
236       Int_t idx=cell->GetIndex();\r
237       Int_t ia,it;\r
238       list->GetCell(idx,ia,it);\r
239       fAliITSQADataMakerSim->GetSDigitsData(1+fGenOffsetS)->Fill(ia);\r
240       fAliITSQADataMakerSim->GetSDigitsData(2+fGenOffsetS)->Fill(it);\r
241       fAliITSQADataMakerSim->GetSDigitsData(3+fGenOffsetS)->Fill(sig);\r
242     }\r
243     delete sdig;\r
244   }\r
245   return rv ; \r
246 }\r
247 \r
248 //____________________________________________________________________________ \r
249 Int_t AliITSQASDDDataMakerSim::InitHits()\r
250\r
251 \r
252   // Initialization for HITS data - SDD -\r
253   const Bool_t expert   = kTRUE ; \r
254   const Bool_t image    = kTRUE ;\r
255   Int_t rv = 0 ; \r
256 \r
257   //fGenOffsetH = (fAliITSQADataMakerSim->fHitsQAList[AliRecoParam::kDefault])->GetEntries();\r
258   //fSDDhTask must be incremented by one unit every time a histogram is ADDED to the QA List\r
259   //printf("AliITSQASDDDataMakerSim::InitHits called \n");\r
260   TH1F *h0=new TH1F("SDD HITS Module Pattern","SDD HITS Module Pattern",260,239.5,499.5);  \r
261   h0->GetXaxis()->SetTitle("SDD Module Number");\r
262   h0->GetYaxis()->SetTitle("# HITS");\r
263   rv = fAliITSQADataMakerSim->Add2HitsList(h0,fGenOffsetH, !expert, image);\r
264   fSDDhHTask ++;\r
265   TH1F *h1=new TH1F("SDD HIT lenght along local Y Coord","SDD HIT lenght along local Y Coord",200,0.,350.);\r
266   h1->GetXaxis()->SetTitle("HIT lenght (um)");\r
267   h1->GetYaxis()->SetTitle("# HITS");\r
268   rv = fAliITSQADataMakerSim->Add2HitsList(h1,1+fGenOffsetH, !expert, image);\r
269   fSDDhHTask ++;\r
270   TH1F *h2=new TH1F("SDD HIT lenght along local Y Coord - Zoom","SDD HIT lenght along local Y Coord - Zoom",200,250.,350.);\r
271   h2->GetXaxis()->SetTitle("HIT lenght (um)");\r
272   h2->GetYaxis()->SetTitle("# HITS");\r
273   rv = fAliITSQADataMakerSim->Add2HitsList(h2,2+fGenOffsetH, !expert, image);\r
274   fSDDhHTask ++;\r
275   TH1F *h3=new TH1F("SDD Deposited Energy Distribution (loc Y > 200um)","SDD HITS Deposited Energy Distribution (loc Y > 200um)",200,0.,350.);\r
276   h3->GetXaxis()->SetTitle("ADC counts ");\r
277   h3->GetYaxis()->SetTitle("# HITS");\r
278   rv = fAliITSQADataMakerSim->Add2HitsList(h3,3+fGenOffsetH, !expert, image);\r
279   fSDDhHTask ++;\r
280   AliDebug(AliQAv1::GetQADebugLevel(),Form("%d SDD Hits histograms booked\n",fSDDhHTask));\r
281   return rv ; \r
282 }\r
283 \r
284 //____________________________________________________________________________\r
285 Int_t AliITSQASDDDataMakerSim::MakeHits(TTree * hits)\r
286\r
287   // Fill QA for HITS - SDD -\r
288   Int_t rv = 0 ; \r
289   // Check id histograms already created for this Event Specie\r
290   if ( ! fAliITSQADataMakerSim->GetHitsData(fGenOffsetH) )\r
291     rv = InitHits() ;\r
292   \r
293    AliITS *fITS  = (AliITS*)gAlice->GetModule("ITS");\r
294   fITS->SetTreeAddress();\r
295   Int_t nmodules;\r
296   if(!(fITS->InitModules(-1,nmodules))){\r
297     AliError("ITS geometry not available - nothing done");\r
298     return rv;\r
299   }\r
300  \r
301   fITS->FillModules(hits,0);\r
302 \r
303   for(Int_t i=0; i<260; i++){\r
304     Int_t nmod=i+240;\r
305     AliITSmodule *modu = fITS->GetModule(nmod);\r
306     TObjArray *arrHits = modu->GetHits();\r
307     Int_t nhits = arrHits->GetEntriesFast();\r
308     ////printf("--w--AliITSQASDDDataMakerSim::MakeHits  nhits = %d\n",nhits);\r
309     for (Int_t iHit=0;iHit<nhits;iHit++) {\r
310       AliITShit *hit = (AliITShit*) arrHits->At(iHit);\r
311       fAliITSQADataMakerSim->GetHitsData(fGenOffsetH)->Fill(nmod);\r
312       Double_t xl,yl,zl,xl0,yl0,zl0;\r
313       Double_t tof,tof0;\r
314       hit->GetPositionL(xl,yl,zl,tof);\r
315       hit->GetPositionL0(xl0,yl0,zl0,tof0);\r
316       Float_t dyloc=TMath::Abs(yl-yl0)*10000.;\r
317       fAliITSQADataMakerSim->GetHitsData(1+fGenOffsetH)->Fill(dyloc);\r
318       Float_t edep=hit->GetIonization()*1000000;\r
319       if(dyloc>200.){ \r
320         fAliITSQADataMakerSim->GetHitsData(2+fGenOffsetH)->Fill(edep);\r
321         fAliITSQADataMakerSim->GetHitsData(3+fGenOffsetH)->Fill(dyloc);\r
322       }\r
323     }\r
324   }\r
325   return rv ; \r
326 }\r
327 \r
328 //_______________________________________________________________\r
329 \r
330 Int_t AliITSQASDDDataMakerSim::GetOffset(AliQAv1::TASKINDEX_t task){\r
331   // Returns histogram offset according to the specified task\r
332   Int_t offset=0;\r
333   if( task == AliQAv1::kHITS){\r
334     offset=fGenOffsetH;  \r
335   }\r
336   else if( task == AliQAv1::kSDIGITS) {\r
337     offset=fGenOffsetS;   \r
338   }\r
339   else if( task == AliQAv1::kDIGITS) {\r
340     offset=fGenOffsetD;   \r
341   }\r
342   else {\r
343     AliInfo("No task has been selected. TaskHisto set to zero.\n");\r
344   }\r
345 \r
346   return offset;\r
347 }\r
348 \r
349 //____________________________________________________________________________ \r
350 void AliITSQASDDDataMakerSim::SetOffset(AliQAv1::TASKINDEX_t task, Int_t offset){\r
351   // Returns histogram offset according to the specified task\r
352   if( task == AliQAv1::kHITS){\r
353     fGenOffsetH = offset;  \r
354   }\r
355   else if( task == AliQAv1::kSDIGITS) {\r
356     fGenOffsetS = offset;   \r
357   }\r
358   else if( task == AliQAv1::kDIGITS) {\r
359     fGenOffsetD = offset;   \r
360   }\r
361   else {\r
362     AliInfo("No task has been selected. TaskHisto set to zero.\n");\r
363   }\r
364 }\r
365 \r
366 //_______________________________________________________________\r
367 \r
368 Int_t AliITSQASDDDataMakerSim::GetTaskHisto(AliQAv1::TASKINDEX_t task) {\r
369   // Returns the number of booked histograms for the selected task\r
370   Int_t histotot=0;\r
371   if( task == AliQAv1::kHITS) {\r
372     histotot=fSDDhHTask ;  \r
373   }\r
374   else if( task == AliQAv1::kSDIGITS) {\r
375     histotot=fSDDhSTask;   \r
376   }\r
377   else if( task == AliQAv1::kDIGITS) {\r
378     histotot=fSDDhDTask ;   \r
379   }\r
380   else {\r
381     AliInfo("No task has been selected. TaskHisto set to zero.\n");\r
382   }\r
383   return histotot;\r
384 \r
385 }\r