1 /**************************************************************************
\r
2 * Copyright(c) 2007-2009, ALICE Experiment at CERN, All rights reserved. *
\r
4 * Author: The ALICE Off-line Project. *
\r
5 * Contributors are mentioned in the code where appropriate. *
\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
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
26 // --- ROOT system ---
\r
28 // --- Standard library ---
\r
30 // --- AliRoot header files ---
\r
31 #include "AliITSQASDDDataMakerSim.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
40 #include "AliITSmodule.h"
\r
41 #include "AliITShit.h"
\r
42 #include "AliITSLoader.h"
\r
43 #include "AliRunLoader.h"
\r
45 #include "AliITSsegmentationSDD.h"
\r
46 #include "AliITSpList.h"
\r
48 ClassImp(AliITSQASDDDataMakerSim)
\r
50 //____________________________________________________________________________
\r
51 AliITSQASDDDataMakerSim::AliITSQASDDDataMakerSim(AliITSQADataMakerSim *aliITSQADataMakerSim) :
\r
53 fAliITSQADataMakerSim(aliITSQADataMakerSim),
\r
61 //ctor used to discriminate OnLine-Offline analysis
\r
62 fGenOffsetH= new Int_t[AliRecoParam::kNSpecies];
\r
63 fGenOffsetS= new Int_t[AliRecoParam::kNSpecies];
\r
64 fGenOffsetD= new Int_t[AliRecoParam::kNSpecies];
\r
65 for(Int_t i=0; i<AliRecoParam::kNSpecies; i++)
\r
73 //____________________________________________________________________________
\r
74 AliITSQASDDDataMakerSim::AliITSQASDDDataMakerSim(const AliITSQASDDDataMakerSim& qadm) :
\r
76 fAliITSQADataMakerSim(qadm.fAliITSQADataMakerSim),
\r
77 fSDDhHTask(qadm.fSDDhHTask),
\r
78 fSDDhSTask(qadm.fSDDhSTask),
\r
79 fSDDhDTask(qadm.fSDDhDTask),
\r
80 fGenOffsetH(qadm.fGenOffsetH),
\r
81 fGenOffsetS(qadm.fGenOffsetS),
\r
82 fGenOffsetD(qadm.fGenOffsetD)
\r
85 fAliITSQADataMakerSim->SetName((const char*)qadm.fAliITSQADataMakerSim->GetName()) ;
\r
86 fAliITSQADataMakerSim->SetTitle((const char*)qadm.fAliITSQADataMakerSim->GetTitle());
\r
90 //__________________________________________________________________
\r
91 AliITSQASDDDataMakerSim& AliITSQASDDDataMakerSim::operator = (const AliITSQASDDDataMakerSim& qac )
\r
94 this->~AliITSQASDDDataMakerSim();
\r
95 new(this) AliITSQASDDDataMakerSim(qac);
\r
99 //____________________________________________________________________________
\r
100 void AliITSQASDDDataMakerSim::StartOfDetectorCycle()
\r
102 //Detector specific actions at start of cycle
\r
103 AliDebug(AliQAv1::GetQADebugLevel(),"AliITSQADM::Start of SDD Cycle\n");
\r
106 //____________________________________________________________________________
\r
107 void AliITSQASDDDataMakerSim::EndOfDetectorCycle(AliQAv1::TASKINDEX_t /*task*/, TObjArray* /*list*/)
\r
109 // launch the QA checking
\r
110 AliDebug(AliQAv1::GetQADebugLevel(),"AliITSDM instantiates checker with Run(AliQAv1::kITS, task, list)\n");
\r
111 //AliQAChecker::Instance()->Run( AliQAv1::kITS , task, list);
\r
114 //____________________________________________________________________________
\r
115 Int_t AliITSQASDDDataMakerSim::InitDigits()
\r
117 // Initialization for DIGIT data - SDD -
\r
118 const Bool_t expert = kTRUE ;
\r
119 const Bool_t image = kTRUE ;
\r
121 //fGenOffsetD = (fAliITSQADataMakerSim->fDigitsQAList[AliRecoParam::kDefault])->GetEntries();
\r
122 //fSDDhTask must be incremented by one unit every time a histogram is ADDED to the QA List
\r
123 TH1F* h0=new TH1F("SDD DIGITS Module Pattern","SDD DIGITS Module Pattern",260,239.5,499.5); //hmod
\r
124 h0->GetXaxis()->SetTitle("SDD Module Number");
\r
125 h0->GetYaxis()->SetTitle("# DIGITS");
\r
126 rv = fAliITSQADataMakerSim->Add2DigitsList(h0,fGenOffsetD[fAliITSQADataMakerSim->GetEventSpecie()], !expert, image);
\r
128 TH1F* h1=new TH1F("SDD Anode Distribution","SDD DIGITS Anode Distribution",512,-0.5,511.5); //hanocc
\r
129 h1->GetXaxis()->SetTitle("Anode Number");
\r
130 h1->GetYaxis()->SetTitle("# DIGITS");
\r
131 rv = fAliITSQADataMakerSim->Add2DigitsList(h1,1+fGenOffsetD[fAliITSQADataMakerSim->GetEventSpecie()], !expert, image);
\r
133 TH1F* h2=new TH1F("SDD Tbin Distribution","SDD DIGITS Tbin Distribution",256,-0.5,255.5); //htbocc
\r
134 h2->GetXaxis()->SetTitle("Tbin Number");
\r
135 h2->GetYaxis()->SetTitle("# DIGITS");
\r
136 rv = fAliITSQADataMakerSim->Add2DigitsList(h2,2+fGenOffsetD[fAliITSQADataMakerSim->GetEventSpecie()], !expert, image);
\r
138 TH1F* h3=new TH1F("SDD ADC Counts Distribution","SDD DIGITS ADC Counts Distribution",200,0.,1024.); //hsig
\r
139 h3->GetXaxis()->SetTitle("ADC Value");
\r
140 h3->GetYaxis()->SetTitle("# DIGITS");
\r
141 rv = fAliITSQADataMakerSim->Add2DigitsList(h3,3+fGenOffsetD[fAliITSQADataMakerSim->GetEventSpecie()], !expert, image);
\r
143 AliDebug(AliQAv1::GetQADebugLevel(),Form("%d SDD Digits histograms booked\n",fSDDhDTask));
\r
147 //____________________________________________________________________________
\r
148 Int_t AliITSQASDDDataMakerSim::MakeDigits(TTree * digits)
\r
151 // Fill QA for DIGIT - SDD -
\r
154 AliITS *fITS = (AliITS*)gAlice->GetModule("ITS");
\r
155 fITS->SetTreeAddress();
\r
156 TClonesArray *iITSdigits = fITS->DigitsAddress(1);
\r
157 for(Int_t i=0; i<260; i++){
\r
159 digits->GetEvent(nmod);
\r
160 Int_t ndigits = iITSdigits->GetEntries();
\r
161 fAliITSQADataMakerSim->GetDigitsData(fGenOffsetD[fAliITSQADataMakerSim->GetEventSpecie()])->Fill(nmod,ndigits);
\r
162 for (Int_t idig=0; idig<ndigits; idig++) {
\r
163 AliITSdigit *dig=(AliITSdigit*)iITSdigits->UncheckedAt(idig);
\r
164 Int_t iz=dig->GetCoord1(); // cell number z
\r
165 Int_t ix=dig->GetCoord2(); // cell number x
\r
166 Int_t sig=dig->GetSignal();
\r
167 fAliITSQADataMakerSim->GetDigitsData(1+fGenOffsetD[fAliITSQADataMakerSim->GetEventSpecie()])->Fill(iz);
\r
168 fAliITSQADataMakerSim->GetDigitsData(2+fGenOffsetD[fAliITSQADataMakerSim->GetEventSpecie()])->Fill(ix);
\r
169 fAliITSQADataMakerSim->GetDigitsData(3+fGenOffsetD[fAliITSQADataMakerSim->GetEventSpecie()])->Fill(sig);
\r
175 //____________________________________________________________________________
\r
176 Int_t AliITSQASDDDataMakerSim::InitSDigits()
\r
178 // Initialization for SDIGIT data - SDD -
\r
179 const Bool_t expert = kTRUE ;
\r
180 const Bool_t image = kTRUE ;
\r
182 //fGenOffsetS = (fAliITSQADataMakerSim->fSDigitsQAList[AliRecoParam::kDefault])->GetEntries();
\r
183 //fSDDhTask must be incremented by one unit every time a histogram is ADDED to the QA List
\r
184 TH1F* h0=new TH1F("SDD SDIGITS Module Pattern","SDIGITS SDD Module Pattern",260,239.5,499.5); //hmod
\r
185 h0->GetXaxis()->SetTitle("SDD Module Number");
\r
186 h0->GetYaxis()->SetTitle("# SDIGITS");
\r
187 rv = fAliITSQADataMakerSim->Add2SDigitsList(h0,fGenOffsetS[fAliITSQADataMakerSim->GetEventSpecie()], !expert, image);
\r
189 TH1F* h1=new TH1F("SDD Anode Distribution","SDIGITS SDD Anode Distribution",512,-0.5,511.5); //hanocc
\r
190 h1->GetXaxis()->SetTitle("Anode Number");
\r
191 h1->GetYaxis()->SetTitle("# SDIGITS");
\r
192 rv = fAliITSQADataMakerSim->Add2SDigitsList(h1,1+fGenOffsetS[fAliITSQADataMakerSim->GetEventSpecie()], !expert, image);
\r
194 TH1F* h2=new TH1F("SDD Tbin Distribution","SDIGITS SDD Tbin Distribution",256,-0.5,255.5); //htbocc
\r
195 h2->GetXaxis()->SetTitle("Tbin Number");
\r
196 h2->GetYaxis()->SetTitle("# SDIGITS");
\r
197 rv = fAliITSQADataMakerSim->Add2SDigitsList(h2,2+fGenOffsetS[fAliITSQADataMakerSim->GetEventSpecie()]);
\r
199 TH1F* h3=new TH1F("SDD ADC Counts Distribution","SDIGITS SDD ADC Counts Distribution",200,0.,1024.); //hsig
\r
200 h3->GetXaxis()->SetTitle("ADC Value");
\r
201 h3->GetYaxis()->SetTitle("# SDIGITS");
\r
202 rv = fAliITSQADataMakerSim->Add2SDigitsList(h3,3+fGenOffsetS[fAliITSQADataMakerSim->GetEventSpecie()], !expert, image);
\r
205 AliDebug(AliQAv1::GetQADebugLevel(),Form("%d SDD SDigits histograms booked\n",fSDDhSTask));
\r
209 //____________________________________________________________________________
\r
210 Int_t AliITSQASDDDataMakerSim::MakeSDigits(TTree * sdigits)
\r
212 // Fill QA for SDIGIT - SDD -
\r
215 AliITSsegmentationSDD* seg = new AliITSsegmentationSDD();
\r
216 Int_t nan=seg->Npz();
\r
217 Int_t ntb=seg->Npx();
\r
219 AliITSpList* list=new AliITSpList(nan,ntb*scaleSize);
\r
221 //AliITS *fITS = (AliITS*)gAlice->GetModule("ITS");
\r
222 //fITS->SetTreeAddress();
\r
223 //TClonesArray *ITSdigits = fITS->DigitsAddress(1);
\r
224 //TFile *sper = new TFile("sper.root","CREATE"); //agginto a mano x prova
\r
229 TBranch *brchSDigits = sdigits->GetBranch("ITS");
\r
230 static TClonesArray * sdig ;
\r
232 sdig = new TClonesArray( "AliITSpListItem",1000 );
\r
233 for(Int_t id=0; id<260; id++){
\r
235 brchSDigits->SetAddress( &sdig );
\r
236 brchSDigits->GetEvent(nmod);
\r
237 Int_t nsdig=sdig->GetEntries();
\r
238 fAliITSQADataMakerSim->GetSDigitsData(fGenOffsetS[fAliITSQADataMakerSim->GetEventSpecie()])->Fill(nmod,nsdig);
\r
239 for(Int_t i=0;i<nsdig;i++){
\r
240 AliITSpListItem *cell=(AliITSpListItem*)sdig->At(i);
\r
241 Float_t sig=cell->GetSignal();
\r
242 Int_t idx=cell->GetIndex();
\r
244 list->GetCell(idx,ia,it);
\r
245 fAliITSQADataMakerSim->GetSDigitsData(1+fGenOffsetS[fAliITSQADataMakerSim->GetEventSpecie()])->Fill(ia);
\r
246 fAliITSQADataMakerSim->GetSDigitsData(2+fGenOffsetS[fAliITSQADataMakerSim->GetEventSpecie()])->Fill(it);
\r
247 fAliITSQADataMakerSim->GetSDigitsData(3+fGenOffsetS[fAliITSQADataMakerSim->GetEventSpecie()])->Fill(sig);
\r
254 //____________________________________________________________________________
\r
255 Int_t AliITSQASDDDataMakerSim::InitHits()
\r
258 // Initialization for HITS data - SDD -
\r
259 const Bool_t expert = kTRUE ;
\r
260 const Bool_t image = kTRUE ;
\r
263 //fGenOffsetH = (fAliITSQADataMakerSim->fHitsQAList[AliRecoParam::kDefault])->GetEntries();
\r
264 //fSDDhTask must be incremented by one unit every time a histogram is ADDED to the QA List
\r
265 //printf("AliITSQASDDDataMakerSim::InitHits called \n");
\r
266 TH1F *h0=new TH1F("SDD HITS Module Pattern","SDD HITS Module Pattern",260,239.5,499.5);
\r
267 h0->GetXaxis()->SetTitle("SDD Module Number");
\r
268 h0->GetYaxis()->SetTitle("# HITS");
\r
269 rv = fAliITSQADataMakerSim->Add2HitsList(h0,fGenOffsetH[fAliITSQADataMakerSim->GetEventSpecie()], !expert, image);
\r
271 TH1F *h1=new TH1F("SDD HIT lenght along local Y Coord","SDD HIT lenght along local Y Coord",200,0.,350.);
\r
272 h1->GetXaxis()->SetTitle("HIT lenght (um)");
\r
273 h1->GetYaxis()->SetTitle("# HITS");
\r
274 rv = fAliITSQADataMakerSim->Add2HitsList(h1,1+fGenOffsetH[fAliITSQADataMakerSim->GetEventSpecie()], !expert, image);
\r
276 TH1F *h2=new TH1F("SDD HIT lenght along local Y Coord - Zoom","SDD HIT lenght along local Y Coord - Zoom",200,250.,350.);
\r
277 h2->GetXaxis()->SetTitle("HIT lenght (um)");
\r
278 h2->GetYaxis()->SetTitle("# HITS");
\r
279 rv = fAliITSQADataMakerSim->Add2HitsList(h2,2+fGenOffsetH[fAliITSQADataMakerSim->GetEventSpecie()], !expert, image);
\r
281 TH1F *h3=new TH1F("SDD Deposited Energy Distribution (loc Y > 200um)","SDD HITS Deposited Energy Distribution (loc Y > 200um)",200,0.,350.);
\r
282 h3->GetXaxis()->SetTitle("ADC counts ");
\r
283 h3->GetYaxis()->SetTitle("# HITS");
\r
284 rv = fAliITSQADataMakerSim->Add2HitsList(h3,3+fGenOffsetH[fAliITSQADataMakerSim->GetEventSpecie()], !expert, image);
\r
286 AliDebug(AliQAv1::GetQADebugLevel(),Form("%d SDD Hits histograms booked\n",fSDDhHTask));
\r
290 //____________________________________________________________________________
\r
291 Int_t AliITSQASDDDataMakerSim::MakeHits(TTree * hits)
\r
293 // Fill QA for HITS - SDD -
\r
296 AliITS *fITS = (AliITS*)gAlice->GetModule("ITS");
\r
297 fITS->SetTreeAddress();
\r
299 if(!(fITS->InitModules(-1,nmodules))){
\r
300 AliError("ITS geometry not available - nothing done");
\r
304 fITS->FillModules(hits,0);
\r
306 for(Int_t i=0; i<260; i++){
\r
308 AliITSmodule *modu = fITS->GetModule(nmod);
\r
309 TObjArray *arrHits = modu->GetHits();
\r
310 Int_t nhits = arrHits->GetEntriesFast();
\r
311 ////printf("--w--AliITSQASDDDataMakerSim::MakeHits nhits = %d\n",nhits);
\r
312 for (Int_t iHit=0;iHit<nhits;iHit++) {
\r
313 AliITShit *hit = (AliITShit*) arrHits->At(iHit);
\r
314 fAliITSQADataMakerSim->GetHitsData(fGenOffsetH[fAliITSQADataMakerSim->GetEventSpecie()])->Fill(nmod);
\r
315 Double_t xl,yl,zl,xl0,yl0,zl0;
\r
317 hit->GetPositionL(xl,yl,zl,tof);
\r
318 hit->GetPositionL0(xl0,yl0,zl0,tof0);
\r
319 Float_t dyloc=TMath::Abs(yl-yl0)*10000.;
\r
320 fAliITSQADataMakerSim->GetHitsData(1+fGenOffsetH[fAliITSQADataMakerSim->GetEventSpecie()])->Fill(dyloc);
\r
321 Float_t edep=hit->GetIonization()*1000000;
\r
323 fAliITSQADataMakerSim->GetHitsData(2+fGenOffsetH[fAliITSQADataMakerSim->GetEventSpecie()])->Fill(edep);
\r
324 fAliITSQADataMakerSim->GetHitsData(3+fGenOffsetH[fAliITSQADataMakerSim->GetEventSpecie()])->Fill(dyloc);
\r
331 //_______________________________________________________________
\r
333 Int_t AliITSQASDDDataMakerSim::GetOffset(AliQAv1::TASKINDEX_t task, Int_t specie){
\r
334 // Returns histogram offset according to the specified task
\r
336 if( task == AliQAv1::kHITS){
\r
337 offset=fGenOffsetH[specie];
\r
339 else if( task == AliQAv1::kSDIGITS) {
\r
340 offset=fGenOffsetS[specie];
\r
342 else if( task == AliQAv1::kDIGITS) {
\r
343 offset=fGenOffsetD[specie];
\r
346 AliInfo("No task has been selected. TaskHisto set to zero.\n");
\r
352 //____________________________________________________________________________
\r
353 void AliITSQASDDDataMakerSim::SetOffset(AliQAv1::TASKINDEX_t task, Int_t offset,Int_t specie ){
\r
354 // Returns histogram offset according to the specified task
\r
355 if( task == AliQAv1::kHITS){
\r
356 fGenOffsetH[specie] = offset;
\r
358 else if( task == AliQAv1::kSDIGITS) {
\r
359 fGenOffsetS[specie] = offset;
\r
361 else if( task == AliQAv1::kDIGITS) {
\r
362 fGenOffsetD[specie] = offset;
\r
365 AliInfo("No task has been selected. TaskHisto set to zero.\n");
\r
369 //_______________________________________________________________
\r
371 Int_t AliITSQASDDDataMakerSim::GetTaskHisto(AliQAv1::TASKINDEX_t task) {
\r
372 // Returns the number of booked histograms for the selected task
\r
374 if( task == AliQAv1::kHITS) {
\r
375 histotot=fSDDhHTask ;
\r
377 else if( task == AliQAv1::kSDIGITS) {
\r
378 histotot=fSDDhSTask;
\r
380 else if( task == AliQAv1::kDIGITS) {
\r
381 histotot=fSDDhDTask ;
\r
384 AliInfo("No task has been selected. TaskHisto set to zero.\n");
\r