]>
Commit | Line | Data |
---|---|---|
36507bb2 | 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 | /* $Id: AliADQADataMakerSim.cxx 23123 2007-12-18 09:08:18Z hristov $ */ | |
18 | ||
19 | //--- | |
20 | // Produces the data needed to calculate the quality assurance. | |
21 | // All data must be mergeable objects. | |
22 | // Author : BC | |
23 | //--- | |
24 | ||
25 | // --- ROOT system --- | |
26 | #include <TClonesArray.h> | |
27 | #include <TFile.h> | |
28 | #include <TH1F.h> | |
29 | #include <TDirectory.h> | |
30 | // --- Standard library --- | |
31 | ||
32 | // --- AliRoot header files --- | |
33 | #include "AliESDEvent.h" | |
34 | #include "AliLog.h" | |
35 | #include "AliADdigit.h" | |
36 | #include "AliADSDigit.h" | |
37 | #include "AliADhit.h" | |
38 | #include "AliADQADataMakerSim.h" | |
39 | #include "AliQAChecker.h" | |
40 | ||
41 | ClassImp(AliADQADataMakerSim) | |
42 | ||
43 | //____________________________________________________________________________ | |
44 | AliADQADataMakerSim::AliADQADataMakerSim() : | |
45 | AliQADataMakerSim(AliQAv1::GetDetName(AliQAv1::kAD), "AD Quality Assurance Data Maker") | |
46 | ||
47 | { | |
48 | // constructor | |
49 | ||
50 | ||
51 | } | |
52 | ||
53 | //____________________________________________________________________________ | |
54 | AliADQADataMakerSim::AliADQADataMakerSim(const AliADQADataMakerSim& qadm) : | |
55 | AliQADataMakerSim() | |
56 | { | |
57 | //copy constructor | |
58 | ||
59 | SetName((const char*)qadm.GetName()) ; | |
60 | SetTitle((const char*)qadm.GetTitle()); | |
61 | } | |
62 | ||
63 | //__________________________________________________________________ | |
64 | AliADQADataMakerSim& AliADQADataMakerSim::operator = (const AliADQADataMakerSim& qadm ) | |
65 | { | |
66 | // Assign operator. | |
67 | this->~AliADQADataMakerSim(); | |
68 | new(this) AliADQADataMakerSim(qadm); | |
69 | return *this; | |
70 | } | |
71 | //____________________________________________________________________________ | |
72 | void AliADQADataMakerSim::EndOfDetectorCycle(AliQAv1::TASKINDEX_t task, TObjArray ** list) | |
73 | { | |
74 | //Detector specific actions at end of cycle | |
75 | // do the QA checking | |
76 | ResetEventTrigClasses(); | |
77 | AliQAChecker::Instance()->Run(AliQAv1::kAD, task, list) ; | |
78 | } | |
79 | ||
80 | ||
81 | //____________________________________________________________________________ | |
82 | void AliADQADataMakerSim::InitHits() | |
83 | { | |
84 | ||
85 | // create Hits histograms in Hits subdir | |
86 | const Bool_t expert = kTRUE ; | |
87 | const Bool_t image = kTRUE ; | |
88 | ||
89 | TH1I * h0 = new TH1I("hHitMultiplicity", "Hit multiplicity distribution in AD;# of Hits;Entries", 300, 0, 299) ; | |
90 | h0->Sumw2() ; | |
91 | Add2HitsList(h0, 0, !expert, image) ; | |
92 | ||
93 | TH1I * h1 = new TH1I("hHitCellNumber", "Hit cell distribution in AD;Cell;# of Hits", 16, 0, 16) ; | |
94 | h1->Sumw2() ; | |
95 | Add2HitsList(h1, 1, !expert, image) ; | |
96 | ||
97 | TH1I * h2 = new TH1I("hHitNPhotons", "Number of photons per hit in AD;# of Photons;Entries", 1000, 0, 50000) ; | |
98 | h2->Sumw2() ; | |
99 | Add2HitsList(h2, 2, expert, image) ; | |
100 | ||
101 | // | |
102 | ClonePerTrigClass(AliQAv1::kHITS); // this should be the last line | |
103 | } | |
104 | ||
105 | ||
106 | //____________________________________________________________________________ | |
107 | void AliADQADataMakerSim::InitSDigits() | |
108 | { | |
109 | // create Digits histograms in Digits subdir | |
110 | const Bool_t expert = kTRUE ; | |
111 | const Bool_t image = kTRUE ; | |
112 | ||
113 | TH1I *fhSDigCharge[16]; | |
114 | ||
115 | // create SDigits histograms in SDigits subdir | |
116 | TH1I * h0 = new TH1I("hSDigitMultiplicity", "SDigits multiplicity distribution in AD;# of Digits;Entries", 100, 0, 99) ; | |
117 | h0->Sumw2() ; | |
118 | Add2DigitsList(h0, 0, !expert, image) ; | |
119 | ||
120 | for (Int_t i=0; i<16; i++) | |
121 | { | |
122 | fhSDigCharge[i] = new TH1I(Form("hSDigitCharge%d", i),Form("SDigit charges in cell %d; Time;Entries",i),1700,0.,1700); | |
123 | ||
124 | Add2SDigitsList(fhSDigCharge[i],i+1, !expert, image); | |
125 | ||
126 | } | |
127 | // | |
128 | ClonePerTrigClass(AliQAv1::kSDIGITS); // this should be the last line | |
129 | } | |
130 | ||
131 | ||
132 | ||
133 | //____________________________________________________________________________ | |
134 | void AliADQADataMakerSim::InitDigits() | |
135 | { | |
136 | // create Digits histograms in Digits subdir | |
137 | const Bool_t expert = kTRUE ; | |
138 | const Bool_t image = kTRUE ; | |
139 | ||
140 | TH1I *fhDigTDC[16]; | |
141 | TH1I *fhDigADC[16]; | |
142 | ||
143 | // create Digits histograms in Digits subdir | |
144 | TH1I * h0 = new TH1I("hDigitMultiplicity", "Digits multiplicity distribution in AD;# of Digits;Entries", 100, 0, 99) ; | |
145 | h0->Sumw2() ; | |
146 | Add2DigitsList(h0, 0, !expert, image) ; | |
147 | ||
148 | for (Int_t i=0; i<16; i++) | |
149 | { | |
150 | fhDigTDC[i] = new TH1I(Form("hDigitTDC%d", i),Form("Digit TDC in cell %d; TDC value;Entries",i),300,0.,149.); | |
151 | fhDigADC[i]= new TH1I(Form("hDigitADC%d", i),Form("Digit ADC in cell %d;ADC value;Entries",i),1024,0.,1023.); | |
152 | ||
153 | Add2DigitsList(fhDigTDC[i],i+1, !expert, image); | |
154 | Add2DigitsList(fhDigADC[i],i+1+16, !expert, image); | |
155 | } | |
156 | // | |
157 | ClonePerTrigClass(AliQAv1::kDIGITS); // this should be the last line | |
158 | } | |
159 | ||
160 | ||
161 | //____________________________________________________________________________ | |
162 | void AliADQADataMakerSim::MakeHits() | |
163 | { | |
164 | //make QA data from Hits | |
165 | ||
166 | Int_t nhits = fHitsArray->GetEntriesFast(); | |
167 | FillHitsData(0,nhits) ; // fills Hit multiplicity | |
168 | for (Int_t ihit=0;ihit<nhits;ihit++) | |
169 | { | |
170 | AliADhit * ADHit = (AliADhit*) fHitsArray->UncheckedAt(ihit); | |
171 | if (!ADHit) { | |
172 | AliError("The unchecked hit doesn't exist"); | |
173 | break; | |
174 | } | |
175 | FillHitsData(1,ADHit->GetCell()); | |
176 | FillHitsData(2,ADHit->GetNphot()); | |
177 | } | |
178 | } | |
179 | ||
180 | ||
181 | //____________________________________________________________________________ | |
182 | ||
183 | void AliADQADataMakerSim::MakeHits(TTree *hitTree) | |
184 | { | |
185 | //fills QA histos for Hits | |
186 | if (fHitsArray) | |
187 | fHitsArray->Clear() ; | |
188 | else | |
189 | fHitsArray = new TClonesArray("AliADhit", 1000); | |
190 | ||
191 | TBranch * branch = hitTree->GetBranch("AD") ; | |
192 | if ( ! branch ) { | |
193 | AliWarning("AD branch in Hit Tree not found") ; | |
194 | } else { | |
195 | ||
196 | if (branch) { | |
197 | branch->SetAddress(&fHitsArray); | |
198 | }else{ | |
199 | AliError("Branch AD hit not found"); | |
200 | exit(111); | |
201 | } | |
202 | // Check id histograms already created for this Event Specie | |
203 | if ( ! GetHitsData(0) ) | |
204 | InitHits() ; | |
205 | ||
206 | Int_t ntracks = (Int_t) hitTree->GetEntries(); | |
207 | ||
208 | if (ntracks<=0) return; | |
209 | // Start loop on tracks in the hits containers | |
210 | for (Int_t track=0; track<ntracks;track++) { | |
211 | branch->GetEntry(track); | |
212 | Int_t nhits = fHitsArray->GetEntriesFast(); | |
213 | FillHitsData(0,nhits) ; // fills Hit multiplicity | |
214 | for (Int_t ihit=0;ihit<nhits;ihit++) | |
215 | { | |
216 | AliADhit * ADHit = (AliADhit*) fHitsArray->UncheckedAt(ihit); | |
217 | if (!ADHit) { | |
218 | AliError("The unchecked hit doesn't exist"); | |
219 | break; | |
220 | } | |
221 | FillHitsData(1,ADHit->GetCell()); | |
222 | FillHitsData(2,ADHit->GetNphot()); | |
223 | } | |
224 | } | |
225 | } | |
226 | // | |
227 | IncEvCountCycleHits(); | |
228 | IncEvCountTotalHits(); | |
229 | // | |
230 | } | |
231 | ||
232 | ||
233 | ||
234 | //____________________________________________________________________________ | |
235 | void AliADQADataMakerSim::MakeSDigits(TTree *sdigitTree) | |
236 | { | |
237 | // makes data from Digit Tree | |
238 | ||
239 | if (fSDigitsArray) | |
240 | fSDigitsArray->Clear() ; | |
241 | else | |
242 | fSDigitsArray = new TClonesArray("AliADSDigit", 1000) ; | |
243 | ||
244 | TBranch * branch = sdigitTree->GetBranch("ADSDigit") ; | |
245 | if ( ! branch ) { | |
246 | AliWarning("AD branch in SDigit Tree not found") ; | |
247 | } else { | |
248 | branch->SetAddress(&fSDigitsArray) ; | |
249 | branch->GetEntry(0) ; | |
250 | MakeSDigits() ; | |
251 | } | |
252 | // | |
253 | IncEvCountCycleDigits(); | |
254 | IncEvCountTotalDigits(); | |
255 | // | |
256 | } | |
257 | ||
258 | //____________________________________________________________________________ | |
259 | void AliADQADataMakerSim::MakeSDigits() | |
260 | { | |
261 | // makes data from SDigits | |
262 | ||
263 | FillSDigitsData(0,fSDigitsArray->GetEntriesFast()) ; | |
264 | TIter next(fSDigitsArray) ; | |
265 | AliADSDigit *ADSDigit ; | |
266 | while ( (ADSDigit = dynamic_cast<AliADSDigit *>(next())) ) { | |
267 | Int_t PMNumber = ADSDigit->PMNumber(); | |
268 | FillSDigitsData(PMNumber +1, ADSDigit->GetNBins()) ; | |
269 | ||
270 | } | |
271 | } | |
272 | ||
273 | //____________________________________________________________________________ | |
274 | void AliADQADataMakerSim::MakeDigits() | |
275 | { | |
276 | // makes data from Digits | |
277 | ||
278 | FillDigitsData(0,fDigitsArray->GetEntriesFast()) ; | |
279 | TIter next(fDigitsArray) ; | |
280 | AliADdigit *ADDigit ; | |
281 | while ( (ADDigit = dynamic_cast<AliADdigit *>(next())) ) { | |
282 | Int_t PMNumber = ADDigit->PMNumber(); | |
283 | FillDigitsData(PMNumber +1, ADDigit->Time()) ; // in 100 of picoseconds | |
284 | FillDigitsData(PMNumber +1+16, ADDigit->ADC()) ; | |
285 | } | |
286 | } | |
287 | ||
288 | //____________________________________________________________________________ | |
289 | void AliADQADataMakerSim::MakeDigits(TTree *digitTree) | |
290 | { | |
291 | // makes data from Digit Tree | |
292 | ||
293 | if (fDigitsArray) | |
294 | fDigitsArray->Clear() ; | |
295 | else | |
296 | fDigitsArray = new TClonesArray("AliADdigit", 1000) ; | |
297 | ||
298 | TBranch * branch = digitTree->GetBranch("ADDigit") ; | |
299 | if ( ! branch ) { | |
300 | AliWarning("AD branch in Digit Tree not found") ; | |
301 | } else { | |
302 | branch->SetAddress(&fDigitsArray) ; | |
303 | branch->GetEntry(0) ; | |
304 | MakeDigits() ; | |
305 | } | |
306 | // | |
307 | IncEvCountCycleDigits(); | |
308 | IncEvCountTotalDigits(); | |
309 | // | |
310 | } | |
311 | ||
312 | ||
313 | //____________________________________________________________________________ | |
314 | void AliADQADataMakerSim::StartOfDetectorCycle() | |
315 | { | |
316 | //Detector specific actions at start of cycle | |
317 | ||
318 | } |