Shuttle debugging line removed.
[u/mrichter/AliRoot.git] / TOF / AliTOFQADataMakerSim.cxx
1 /**************************************************************************
2  * Copyright(c) 1998-1999, 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 ///////////////////////////////////////////////////////////////////////
17 //                                                                   //
18 //  Produces the data needed to calculate the TOF quality assurance. //
19 //  QA objects are 1 & 2 Dimensional histograms.                     //
20 //  author: S.Arcelli                                                //
21 //                                                                   //
22 ///////////////////////////////////////////////////////////////////////
23
24 #include <TClonesArray.h>
25 //#include <TFile.h> 
26 //#include <TH1I.h> 
27 #include <TH1F.h> 
28 #include <TH2F.h> 
29 #include <TTree.h>
30 #include <TMath.h>
31
32 #include "AliLog.h"
33
34 #include "AliTOFdigit.h"
35 #include "AliTOFSDigit.h"
36 #include "AliTOFhitT0.h"
37 #include "AliTOFQADataMakerSim.h"
38 #include "AliQAChecker.h"
39 #include "AliTOFGeometry.h"
40
41
42 ClassImp(AliTOFQADataMakerSim)
43            
44 //____________________________________________________________________________ 
45   AliTOFQADataMakerSim::AliTOFQADataMakerSim() : 
46   AliQADataMakerSim(AliQA::GetDetName(AliQA::kTOF), "TOF Quality Assurance Data Maker")
47 {
48   //
49   // ctor
50   //
51 }
52
53 //____________________________________________________________________________ 
54 AliTOFQADataMakerSim::AliTOFQADataMakerSim(const AliTOFQADataMakerSim& qadm) :
55   AliQADataMakerSim()
56 {
57   //
58   //copy ctor 
59   //
60   SetName((const char*)qadm.GetName()) ; 
61   SetTitle((const char*)qadm.GetTitle()); 
62 }
63
64 //__________________________________________________________________
65 AliTOFQADataMakerSim& AliTOFQADataMakerSim::operator = (const AliTOFQADataMakerSim& qadm )
66 {
67   //
68   // assignment operator.
69   //
70   this->~AliTOFQADataMakerSim();
71   new(this) AliTOFQADataMakerSim(qadm);
72   return *this;
73 }
74  
75 //____________________________________________________________________________ 
76 void AliTOFQADataMakerSim::InitHits()
77 {
78   //
79   // create Hits histograms in Hits subdir
80   //
81   TH1F * h0 = new TH1F("hTOFHits",    "Number of TOF Hits ",301, -1.02, 5.) ; 
82   h0->Sumw2() ;
83   Add2HitsList(h0, 0) ;
84
85   TH1F * h1  = new TH1F("hTOFHitsTime", "Hits Time Spectrum in TOF (ns)", 2000, 0., 200) ; 
86   h1->Sumw2() ;
87   Add2HitsList(h1, 1) ;
88
89   TH1F * h2  = new TH1F("hTOFHitsLength", "Length Spectrum in TOF (cm)", 500, 0., 500) ; 
90   h2->Sumw2() ;
91   Add2HitsList(h2, 2) ;
92
93   TH2F * h3  = new TH2F("hTOFHitsClusMap","Hits vs TOF eta-phi",183, -0.5, 182.5,865,-0.5,864.5) ; 
94   h3->Sumw2() ;
95   Add2HitsList(h3, 3) ;
96 }
97
98 //____________________________________________________________________________ 
99 void AliTOFQADataMakerSim::InitDigits()
100 {
101   //
102   // create Digits histograms in Digits subdir
103   //
104   TH1F * h0 = new TH1F("hTOFDigits",    "Number of TOF Digits ",301, -1.02, 5.) ;   h0->Sumw2() ;
105   Add2DigitsList(h0, 0) ;
106
107   TH1F * h1  = new TH1F("hTOFDigitsTime", "Digits Time Spectrum in TOF (ns)", 2000, 0., 200) ; 
108   h1->Sumw2() ;
109   Add2DigitsList(h1, 1) ;
110
111   TH1F * h2  = new TH1F("hTOFDigitsToT", "Digits ToT Spectrum in TOF (ns)", 500, 0., 50) ; 
112   h2->Sumw2() ;
113   Add2DigitsList(h2, 2) ;
114
115   TH2F * h3  = new TH2F("hTOFDigitsClusMap","Digits vs TOF eta-phi",183, -0.5, 182.5,865,-0.5,864.5) ; 
116   h3->Sumw2() ;
117   Add2DigitsList(h3, 3) ;
118
119 }
120
121 //____________________________________________________________________________ 
122 void AliTOFQADataMakerSim::InitSDigits()
123 {
124   //
125   // create SDigits histograms in SDigits subdir
126   //
127   TH1F * h0 = new TH1F("hTOFSDigits",    "Number of TOF SDigits ",301, -1.02, 5.) ;   h0->Sumw2() ;
128   Add2SDigitsList(h0, 0) ;
129
130   TH1F * h1  = new TH1F("hTOFSDigitsTime", "SDigits Time Spectrum in TOF (ns)", 2000, 0., 200) ; 
131   h1->Sumw2() ;
132   Add2SDigitsList(h1, 1) ;
133
134   TH2F * h2  = new TH2F("hTOFSDigitsClusMap","SDigits vs TOF eta-phi",183, -0.5, 182.5,865,-0.5,864.5) ; 
135   h2->Sumw2() ;
136   Add2SDigitsList(h2, 2) ;
137
138 }
139
140 //____________________________________________________________________________
141 void AliTOFQADataMakerSim::MakeHits(TClonesArray * hits)
142 {
143   //
144   //make QA data from Hits
145   //
146
147   Int_t in[5];
148   Int_t out[5];
149
150   Int_t nentries=hits->GetEntriesFast();
151   if(nentries<=0) {
152     GetHitsData(0)->Fill(-1.) ; 
153   } else{
154     GetHitsData(0)->Fill(TMath::Log10(nentries)) ; 
155   }
156   TIter next(hits) ; 
157   AliTOFhitT0 * hit ; 
158   while ( (hit = dynamic_cast<AliTOFhitT0 *>(next())) ) {
159
160     GetHitsData(1)->Fill( hit->GetTof()*1.E9) ;//in ns
161     GetHitsData(2)->Fill( hit->GetLen()) ;//in cm
162   
163     in[0] = hit->GetSector();
164     in[1] = hit->GetPlate();
165     in[2]= hit->GetStrip();
166     in[3]= hit->GetPadx();
167     in[4]= hit->GetPadz();
168     GetMapIndeces(in,out);
169     GetHitsData(3)->Fill( out[0],out[1]) ;//hit map
170   }
171
172 }
173
174
175 //____________________________________________________________________________
176 void AliTOFQADataMakerSim::MakeHits(TTree * hitTree)
177 {
178   //
179   // make QA data from Hit Tree
180   //
181   if(!hitTree){
182     AliError("can't get the tree with TOF hits !");
183     return;
184   }     
185
186   TBranch * branch = hitTree->GetBranch("TOF") ;
187
188   if (!branch ) {
189     AliError("TOF branch in Hit Tree not found") ; 
190     return;
191   }
192
193   TClonesArray * hits = new TClonesArray("AliTOFhitT0", 1000);
194   TClonesArray * dummy = new TClonesArray("AliTOFhitT0", 1000);
195   branch->SetAddress(&dummy);
196   Int_t index = 0 ;  
197   for (Int_t ientry = 0 ; ientry < branch->GetEntries() ; ientry++) {
198     branch->GetEntry(ientry) ; 
199     for (Int_t ihit = 0 ; ihit < dummy->GetEntries() ; ihit++) {
200       AliTOFhitT0 * hit = dynamic_cast<AliTOFhitT0 *> (dummy->At(ihit)) ; 
201       new((*hits)[index]) AliTOFhitT0(*hit) ; 
202       index++ ;
203     } 
204   }     
205
206   dummy->Delete();
207   delete dummy;
208   MakeHits(hits) ; 
209
210 }
211
212 //____________________________________________________________________________
213 void AliTOFQADataMakerSim::MakeDigits(TClonesArray * digits)
214 {
215   //
216   // makes data from Digits
217   //
218   Double_t tdc2ns=AliTOFGeometry::TdcBinWidth()*1E-3;
219   Double_t tot2ns=AliTOFGeometry::ToTBinWidth()*1E-3;
220   Int_t in[5];
221   Int_t out[5];
222
223   Int_t nentries=digits->GetEntriesFast();
224   if(nentries<=0){
225     GetDigitsData(0)->Fill(-1.) ; 
226   }else{
227     GetDigitsData(0)->Fill(TMath::Log10(nentries)) ; 
228   } 
229
230   TIter next(digits) ; 
231   AliTOFdigit * digit ; 
232   while ( (digit = dynamic_cast<AliTOFdigit *>(next())) ) {
233     
234     GetDigitsData(1)->Fill( digit->GetTdc()*tdc2ns) ;//in ns
235     GetDigitsData(2)->Fill( digit->GetToT()*tot2ns) ;//in ns
236
237     in[0] = digit->GetSector();
238     in[1] = digit->GetPlate();
239     in[2] = digit->GetStrip();
240     in[3] = digit->GetPadx();
241     in[4]= digit->GetPadz();
242     GetMapIndeces(in,out);
243     GetDigitsData(3)->Fill( out[0],out[1]) ;//digit map
244   }
245
246 }
247
248
249 //____________________________________________________________________________
250 void AliTOFQADataMakerSim::MakeDigits(TTree * digitTree)
251 {
252   //
253   // makes data from Digit Tree
254   //
255   TClonesArray * digits = new TClonesArray("AliTOFdigit", 1000) ; 
256   
257   TBranch * branch = digitTree->GetBranch("TOF") ;
258   if ( ! branch ) {
259     AliError("TOF branch in Digit Tree not found") ; 
260     return;
261   }
262   branch->SetAddress(&digits) ;
263   branch->GetEntry(0) ; 
264   MakeDigits(digits) ; 
265 }
266
267 //____________________________________________________________________________
268 void AliTOFQADataMakerSim::MakeSDigits(TClonesArray * sdigits)
269 {
270   //
271   // makes data from SDigits
272   //
273
274   Double_t tdc2ns=AliTOFGeometry::TdcBinWidth()*1E-3;
275   Int_t in[5];
276   Int_t out[5];
277
278   Int_t nentries=sdigits->GetEntriesFast();
279   if(nentries<=0){
280     GetSDigitsData(0)->Fill(-1.) ; 
281   }else{
282     GetSDigitsData(0)->Fill(TMath::Log10(nentries)) ; 
283   } 
284
285   TIter next(sdigits) ; 
286   AliTOFSDigit * sdigit ; 
287   while ( (sdigit = dynamic_cast<AliTOFSDigit *>(next())) ) {
288     
289     for(Int_t i=0;i<sdigit->GetNDigits();i++){
290       GetSDigitsData(1)->Fill( sdigit->GetTdc(i)*tdc2ns) ;//in ns
291     }
292
293     in[0] = sdigit->GetSector();
294     in[1] = sdigit->GetPlate();
295     in[2] = sdigit->GetStrip();
296     in[3] = sdigit->GetPadx();
297     in[4]= sdigit->GetPadz();
298     GetMapIndeces(in,out);
299     GetSDigitsData(2)->Fill( out[0],out[1]) ;//sdigit map
300   }
301 }
302
303 //____________________________________________________________________________
304 void AliTOFQADataMakerSim::MakeSDigits(TTree * sdigitTree)
305 {
306   //
307   // makes data from SDigit Tree
308   //
309   TClonesArray * sdigits = new TClonesArray("AliTOFSDigit", 1000) ; 
310   
311   TBranch * branch = sdigitTree->GetBranch("TOF") ;
312   if ( ! branch ) {
313     AliError("TOF branch in SDigit Tree not found") ; 
314     return;
315   }
316   branch->SetAddress(&sdigits) ;
317   branch->GetEntry(0) ; 
318   MakeSDigits(sdigits) ; 
319 }
320
321 //____________________________________________________________________________ 
322 void AliTOFQADataMakerSim::StartOfDetectorCycle()
323 {
324   //
325   //Detector specific actions at start of cycle
326   //to be implemented  
327 }
328
329 //____________________________________________________________________________ 
330 void AliTOFQADataMakerSim::EndOfDetectorCycle(AliQA::TASKINDEX task, TObjArray * list)
331 {
332   //Detector specific actions at end of cycle
333   // do the QA checking
334
335   AliQAChecker::Instance()->Run(AliQA::kTOF, task, list) ;  
336 }
337 //____________________________________________________________________________
338 void AliTOFQADataMakerSim::GetMapIndeces(Int_t* in , Int_t* out)
339 {
340   //
341   //return appropriate indeces for the theta-phi map
342   //
343
344   Int_t npadX = AliTOFGeometry::NpadX();
345   Int_t npadZ = AliTOFGeometry::NpadZ();
346   Int_t nStripA = AliTOFGeometry::NStripA();
347   Int_t nStripB = AliTOFGeometry::NStripB();
348   Int_t nStripC = AliTOFGeometry::NStripC();
349
350   Int_t isector = in[0];
351   Int_t iplate = in[1];
352   Int_t istrip = in[2];
353   Int_t ipadX = in[3]; 
354   Int_t ipadZ = in[4]; 
355   
356   Int_t stripOffset = 0;
357   switch (iplate) {
358   case 0:
359     stripOffset = 0;
360       break;
361   case 1:
362     stripOffset = nStripC;
363     break;
364   case 2:
365     stripOffset = nStripC+nStripB;
366     break;
367   case 3:
368     stripOffset = nStripC+nStripB+nStripA;
369     break;
370   case 4:
371     stripOffset = nStripC+nStripB+nStripA+nStripB;
372     break;
373   default:
374     AliError(Form("Wrong plate number in TOF (%d) !",iplate));
375     break;
376   };
377   Int_t zindex=npadZ*(istrip+stripOffset)+(ipadZ+1);
378   Int_t phiindex=npadX*isector+ipadX+1;
379   out[0]=zindex;  
380   out[1]=phiindex;  
381   
382 }