]> git.uio.no Git - u/mrichter/AliRoot.git/blob - EMCAL/AliEMCALQADataMakerSim.cxx
added verbosity to QA histograms (Yves)
[u/mrichter/AliRoot.git] / EMCAL / AliEMCALQADataMakerSim.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   Produces the data needed to calculate the quality assurance. 
18   All data must be mergeable objects.
19
20   Based on PHOS code written by
21   Y. Schutz CERN July 2007
22 */
23
24 // --- ROOT system ---
25 #include <TClonesArray.h>
26 #include <TFile.h> 
27 #include <TH1F.h> 
28 #include <TH1I.h> 
29 #include <TH2F.h> 
30 #include <TTree.h>
31
32 // --- Standard library ---
33
34 // --- AliRoot header files ---
35 #include "AliESDCaloCluster.h"
36 #include "AliLog.h"
37 #include "AliEMCALDigit.h"
38 #include "AliEMCALHit.h"
39 #include "AliEMCALQADataMakerSim.h"
40 #include "AliQAChecker.h"
41 #include "AliEMCALSDigitizer.h"
42
43 ClassImp(AliEMCALQADataMakerSim)
44            
45 //____________________________________________________________________________ 
46   AliEMCALQADataMakerSim::AliEMCALQADataMakerSim() : 
47   AliQADataMakerSim(AliQAv1::GetDetName(AliQAv1::kEMCAL), "EMCAL Quality Assurance Data Maker")
48 {
49   // ctor
50 }
51
52 //____________________________________________________________________________ 
53 AliEMCALQADataMakerSim::AliEMCALQADataMakerSim(const AliEMCALQADataMakerSim& qadm) :
54   AliQADataMakerSim()
55 {
56   //copy ctor 
57   SetName((const char*)qadm.GetName()) ; 
58   SetTitle((const char*)qadm.GetTitle()); 
59 }
60
61 //__________________________________________________________________
62 AliEMCALQADataMakerSim& AliEMCALQADataMakerSim::operator = (const AliEMCALQADataMakerSim& qadm )
63 {
64   // Assign operator.
65   this->~AliEMCALQADataMakerSim();
66   new(this) AliEMCALQADataMakerSim(qadm);
67   return *this;
68 }
69  
70 //____________________________________________________________________________ 
71 void AliEMCALQADataMakerSim::EndOfDetectorCycle(AliQAv1::TASKINDEX_t task, TObjArray ** list)
72 {
73   //Detector specific actions at end of cycle
74   // do the QA checking
75   AliQAChecker::Instance()->Run(AliQAv1::kEMCAL, task, list) ;  
76 }
77
78 //____________________________________________________________________________ 
79 void AliEMCALQADataMakerSim::InitHits()
80 {
81   // create Hits histograms in Hits subdir
82   const Bool_t expert   = kTRUE ; 
83   const Bool_t image    = kTRUE ; 
84   
85   TH1F * h0 = new TH1F("hEmcalHits",    "Hits energy distribution in EMCAL;Energy [MeV];Counts",       200, 0., 2.) ; //GeV
86   h0->Sumw2() ;
87   Add2HitsList(h0, 0, !expert, image) ;
88   TH1I * h1  = new TH1I("hEmcalHitsMul", "Hits multiplicity distribution in EMCAL;# of Hits;Entries", 1000, 0, 10000) ; 
89   h1->Sumw2() ;
90   Add2HitsList(h1, 1, !expert, image) ;
91 }
92
93 //____________________________________________________________________________ 
94 void AliEMCALQADataMakerSim::InitDigits()
95 {
96   // create Digits histograms in Digits subdir
97   const Bool_t expert   = kTRUE ; 
98   const Bool_t image    = kTRUE ; 
99   
100   TH1I * h0 = new TH1I("hEmcalDigits",    "Digits amplitude distribution in EMCAL;Amplitude [ADC counts];Counts",    500, 0, 500) ; 
101   h0->Sumw2() ;
102   Add2DigitsList(h0, 0, !expert, image) ;
103   TH1I * h1 = new TH1I("hEmcalDigitsMul", "Digits multiplicity distribution in EMCAL;# of Digits;Entries", 200, 0, 2000) ; 
104   h1->Sumw2() ;
105   Add2DigitsList(h1, 1, !expert, image) ;
106 }
107
108 //____________________________________________________________________________ 
109 void AliEMCALQADataMakerSim::InitSDigits()
110 {
111   // create SDigits histograms in SDigits subdir
112   const Bool_t expert   = kTRUE ; 
113   const Bool_t image    = kTRUE ; 
114   
115   TH1F * h0 = new TH1F("hEmcalSDigits",    "SDigits energy distribution in EMCAL;Energy [MeV];Counts",       200, 0., 20.) ; 
116   h0->Sumw2() ;
117   Add2SDigitsList(h0, 0, !expert, image) ;
118   TH1I * h1 = new TH1I("hEmcalSDigitsMul", "SDigits multiplicity distribution in EMCAL;# of SDigits;Entries", 500, 0,  5000) ; 
119   h1->Sumw2() ;
120   Add2SDigitsList(h1, 1, !expert, image) ;
121 }
122
123 //____________________________________________________________________________
124 void AliEMCALQADataMakerSim::MakeHits(TClonesArray * hits)
125 {
126   //make QA data from Hits
127
128   GetHitsData(1)->Fill(hits->GetEntriesFast()) ; 
129   TIter next(hits) ; 
130   AliEMCALHit * hit ; 
131   while ( (hit = dynamic_cast<AliEMCALHit *>(next())) ) {
132     GetHitsData(0)->Fill( hit->GetEnergy()) ;
133   }
134
135 }
136
137 //____________________________________________________________________________
138 void AliEMCALQADataMakerSim::MakeHits(TTree * hitTree)
139 {
140   // make QA data from Hit Tree
141   
142   TClonesArray * hits = new TClonesArray("AliEMCALHit", 1000);
143   
144   TBranch * branch = hitTree->GetBranch("EMCAL") ;
145   if ( ! branch ) {
146     AliWarning("EMCAL branch in Hit Tree not found") ; 
147   } else {
148     TClonesArray * tmp =  new TClonesArray("AliEMCALHit", 1000) ;
149     branch->SetAddress(&tmp) ;
150     Int_t index = 0 ;  
151     for (Int_t ientry = 0 ; ientry < branch->GetEntries() ; ientry++) {
152       branch->GetEntry(ientry) ; 
153       for (Int_t ihit = 0 ; ihit < tmp->GetEntries() ; ihit++) {
154         AliEMCALHit * hit = dynamic_cast<AliEMCALHit *> (tmp->At(ihit)) ; 
155         new((*hits)[index]) AliEMCALHit(*hit) ; 
156         index++ ;
157       } 
158     }   
159     tmp->Delete() ; 
160     delete tmp ; 
161     MakeHits(hits) ; 
162   }
163 }
164
165 //____________________________________________________________________________
166 void AliEMCALQADataMakerSim::MakeDigits(TClonesArray * digits)
167 {
168   // makes data from Digits
169
170   GetDigitsData(1)->Fill(digits->GetEntriesFast()) ; 
171   TIter next(digits) ; 
172   AliEMCALDigit * digit ; 
173   while ( (digit = dynamic_cast<AliEMCALDigit *>(next())) ) {
174     GetDigitsData(0)->Fill( digit->GetAmp()) ;
175   }  
176
177 }
178
179 //____________________________________________________________________________
180 void AliEMCALQADataMakerSim::MakeDigits(TTree * digitTree)
181 {
182   // makes data from Digit Tree
183   TClonesArray * digits = new TClonesArray("AliEMCALDigit", 1000) ; 
184   
185   TBranch * branch = digitTree->GetBranch("EMCAL") ;
186   if ( ! branch ) {
187     AliWarning("EMCAL branch in Digit Tree not found") ; 
188   } else {
189     branch->SetAddress(&digits) ;
190     branch->GetEntry(0) ; 
191     MakeDigits(digits) ; 
192   }
193
194 }
195
196 //____________________________________________________________________________
197 void AliEMCALQADataMakerSim::MakeSDigits(TClonesArray * sdigits)
198 {
199   // makes data from SDigits
200   //Need a copy of the SDigitizer to calibrate the sdigit amplitude to
201   //energy in GeV
202   AliEMCALSDigitizer* sDigitizer = new AliEMCALSDigitizer();
203
204   GetSDigitsData(1)->Fill(sdigits->GetEntriesFast()) ; 
205   TIter next(sdigits) ; 
206   AliEMCALDigit * sdigit ; 
207   while ( (sdigit = dynamic_cast<AliEMCALDigit *>(next())) ) {
208     GetSDigitsData(0)->Fill( sDigitizer->Calibrate(sdigit->GetAmp())) ;
209   } 
210
211   delete sDigitizer;
212 }
213
214 //____________________________________________________________________________
215 void AliEMCALQADataMakerSim::MakeSDigits(TTree * sdigitTree)
216 {
217   // makes data from SDigit Tree
218   TClonesArray * sdigits = new TClonesArray("AliEMCALDigit", 1000) ; 
219   
220   TBranch * branch = sdigitTree->GetBranch("EMCAL") ;
221   if ( ! branch ) {
222     AliWarning("EMCAL branch in SDigit Tree not found") ; 
223   } else {
224     branch->SetAddress(&sdigits) ;
225     branch->GetEntry(0) ;
226     MakeSDigits(sdigits) ; 
227   }
228
229 }
230
231 //____________________________________________________________________________ 
232 void AliEMCALQADataMakerSim::StartOfDetectorCycle()
233 {
234   //Detector specific actions at start of cycle
235   
236 }