]>
Commit | Line | Data |
---|---|---|
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 | // --- Standard library --- | |
17 | #include <Riostream.h> | |
18 | // --- ROOT system --- | |
19 | #include <TClonesArray.h> | |
20 | #include <TFile.h> | |
21 | #include <TH1F.h> | |
22 | #include <TH2F.h> | |
23 | #include <TBranch.h> | |
24 | #include <TTree.h> | |
25 | // --- AliRoot header files --- | |
26 | #include "AliLog.h" | |
27 | #include "AliQAChecker.h" | |
28 | #include "AliZDCQADataMakerSim.h" | |
29 | #include "AliZDCHit.h" | |
30 | #include "AliZDCDigit.h" | |
31 | ||
32 | ClassImp(AliZDCQADataMakerSim) | |
33 | ||
34 | //____________________________________________________________________________ | |
35 | AliZDCQADataMakerSim::AliZDCQADataMakerSim() : | |
36 | AliQADataMakerSim(AliQAv1::GetDetName(AliQAv1::kZDC), "ZDC Quality Assurance Data Maker") | |
37 | { | |
38 | // ctor | |
39 | } | |
40 | ||
41 | //____________________________________________________________________________ | |
42 | AliZDCQADataMakerSim::AliZDCQADataMakerSim(const AliZDCQADataMakerSim& qadm) : | |
43 | AliQADataMakerSim() | |
44 | { | |
45 | //copy ctor | |
46 | SetName((const char*)qadm.GetName()); | |
47 | SetTitle((const char*)qadm.GetTitle()); | |
48 | } | |
49 | ||
50 | //__________________________________________________________________ | |
51 | AliZDCQADataMakerSim& AliZDCQADataMakerSim::operator = (const AliZDCQADataMakerSim& qadm ) | |
52 | { | |
53 | // Equal operator. | |
54 | this->~AliZDCQADataMakerSim(); | |
55 | new(this) AliZDCQADataMakerSim(qadm); | |
56 | return *this; | |
57 | } | |
58 | ||
59 | //____________________________________________________________________________ | |
60 | void AliZDCQADataMakerSim::InitHits() | |
61 | { | |
62 | // create Hits histograms in Hits subdir | |
63 | // | |
64 | const Bool_t expert = kTRUE ; | |
65 | const Bool_t image = kTRUE ; | |
66 | ||
67 | TH1F * hHitsZNCTot = new TH1F("hHitsZNCTot", "Signal in ZNC; N_{phe}", 100, 0., 6000.); | |
68 | TH1F * hHitsZNATot = new TH1F("hHitsZNATot", "Signal in ZNA; N_{phe}", 100, 0., 6000.); | |
69 | TH1F * hHitsZPCTot = new TH1F("hHitsZPCTot", "Signal in ZPC; N_{phe}", 100, 0., 6000.); | |
70 | TH1F * hHitsZPATot = new TH1F("hHitsZPATot", "Signal in ZPA; N_{phe}", 100, 0., 6000.); | |
71 | Add2HitsList(hHitsZNCTot, 0, !expert, image); | |
72 | Add2HitsList(hHitsZNATot, 1, !expert, image); | |
73 | Add2HitsList(hHitsZPCTot, 2, !expert, image); | |
74 | Add2HitsList(hHitsZPATot, 3, !expert, image); | |
75 | // | |
76 | TH1F * hHitsSumQZNC = new TH1F("hHitsSumQZNC", "Signal in 4 ZNC PMQ; N_{phe}",100, 0., 4000.); | |
77 | TH1F * hHitsSumQZNA = new TH1F("hHitsSumQZNA", "Signal in 4 ZNA PMQ; N_{phe}",100, 0., 4000.); | |
78 | TH1F * hHitsSumQZPC = new TH1F("hHitsSumQZPC", "Signal in 4 ZPC PMQ; N_{phe}",100, 0., 4000.); | |
79 | TH1F * hHitsSumQZPA = new TH1F("hHitsSumQZPA", "Signal in 4 ZPA PMQ; N_{phe}",100, 0., 4000.); | |
80 | Add2HitsList(hHitsSumQZNC, 4, expert, !image); | |
81 | Add2HitsList(hHitsSumQZNA, 5, expert, !image); | |
82 | Add2HitsList(hHitsSumQZPC, 6, expert, !image); | |
83 | Add2HitsList(hHitsSumQZPA, 7, expert, !image); | |
84 | // | |
85 | TH1F * hHitsPMCZNC = new TH1F("hHitsPMCZNC", "Signal in ZNC PMC; N_{phe}",100, 0., 4000.); | |
86 | TH1F * hHitsPMCZNA = new TH1F("hHitsPMCZNA", "Signal in ZNA PMC; N_{phe}",100, 0., 4000.); | |
87 | TH1F * hHitsPMCZPC = new TH1F("hHitsPMCZPC", "Signal in ZPC PMC; N_{phe}",100, 0., 4000.); | |
88 | TH1F * hHitsPMCZPA = new TH1F("hHitsPMCZPA", "Signal in ZPA PMC; N_{phe}",100, 0., 4000.); | |
89 | Add2HitsList(hHitsPMCZNC, 8, expert, !image); | |
90 | Add2HitsList(hHitsPMCZNA, 9, expert, !image); | |
91 | Add2HitsList(hHitsPMCZPC, 10, expert, !image); | |
92 | Add2HitsList(hHitsPMCZPA, 11, expert, !image); | |
93 | ||
94 | ClonePerTrigClass(AliQAv1::kHITS); // this should be the last line | |
95 | } | |
96 | ||
97 | ||
98 | //____________________________________________________________________________ | |
99 | void AliZDCQADataMakerSim::InitDigits() | |
100 | { | |
101 | // create Digits histograms in Digits subdir | |
102 | // | |
103 | const Bool_t expert = kTRUE ; | |
104 | const Bool_t image = kTRUE ; | |
105 | ||
106 | // ------------------- HIGH GAIN CHAIN --------------------------- | |
107 | TH1F * hDigZNCTot = new TH1F("hDigZNCTot", "Signal in ZNC;Amplitude [ADC counts];Counts", 100, 0., 6000.); | |
108 | TH1F * hDigZNATot = new TH1F("hDigZNATot", "Signal in ZNA;Amplitude [ADC counts];Counts", 100, 0., 6000.); | |
109 | TH1F * hDigZPCTot = new TH1F("hDigZPCTot", "Signal in ZPC;Amplitude [ADC counts];Counts", 100, 0., 6000.); | |
110 | TH1F * hDigZPATot = new TH1F("hDigZPATot", "Signal in ZPA;Amplitude [ADC counts];Counts", 100, 0., 6000.); | |
111 | Add2DigitsList(hDigZNCTot, 0, !expert, image); | |
112 | Add2DigitsList(hDigZNATot, 1, !expert, image); | |
113 | Add2DigitsList(hDigZPCTot, 2, !expert, image); | |
114 | Add2DigitsList(hDigZPATot, 3, !expert, image); | |
115 | // | |
116 | TH1F * hDigSumQZNC = new TH1F("hDigSumQZNC", "Signal in 4 ZNC PMQ;Amplitude [ADC counts];Counts",100, 0., 4000.); | |
117 | TH1F * hDigSumQZNA = new TH1F("hDigSumQZNA", "Signal in 4 ZNA PMQ;Amplitude [ADC counts];Counts",100, 0., 4000.); | |
118 | TH1F * hDigSumQZPC = new TH1F("hDigSumQZPC", "Signal in 4 ZPC PMQ;Amplitude [ADC counts];Counts",100, 0., 4000.); | |
119 | TH1F * hDigSumQZPA = new TH1F("hDigSumQZPA", "Signal in 4 ZPA PMQ;Amplitude [ADC counts];Counts",100, 0., 4000.); | |
120 | Add2DigitsList(hDigSumQZNC, 4, expert, !image); | |
121 | Add2DigitsList(hDigSumQZNA, 5, expert, !image); | |
122 | Add2DigitsList(hDigSumQZPC, 6, expert, !image); | |
123 | Add2DigitsList(hDigSumQZPA, 7, expert, !image); | |
124 | // | |
125 | TH1F * hDigPMCZNC = new TH1F("hDigPMCZNC", "Signal in ZNC PMC;Amplitude [ADC counts];Counts",100, 0., 4000.); | |
126 | TH1F * hDigPMCZNA = new TH1F("hDigPMCZNA", "Signal in ZNA PMC;Amplitude [ADC counts];Counts",100, 0., 4000.); | |
127 | TH1F * hDigPMCZPC = new TH1F("hDigPMCZPC", "Signal in ZPC PMC;Amplitude [ADC counts];Counts",100, 0., 4000.); | |
128 | TH1F * hDigPMCZPA = new TH1F("hDigPMCZPA", "Signal in ZPA PMC;Amplitude [ADC counts];Counts",100, 0., 4000.); | |
129 | Add2DigitsList(hDigPMCZNC, 8, expert, !image); | |
130 | Add2DigitsList(hDigPMCZNA, 9, expert, !image); | |
131 | Add2DigitsList(hDigPMCZPC, 10, expert, !image); | |
132 | Add2DigitsList(hDigPMCZPA, 11, expert, !image); | |
133 | // | |
134 | // | |
135 | ClonePerTrigClass(AliQAv1::kDIGITS); // this should be the last line | |
136 | } | |
137 | ||
138 | //____________________________________________________________________________ | |
139 | void AliZDCQADataMakerSim::MakeHits() | |
140 | { | |
141 | //filling QA histos for Hits | |
142 | ||
143 | // Check id histograms already created for this Event Specie | |
144 | if( !GetHitsData(0) ) InitHits(); | |
145 | ||
146 | TIter next(fHitsArray); | |
147 | AliZDCHit * hit; | |
148 | Float_t adcSum_ZNC=0., adcSum_ZNA=0., adcSum_ZPC=0., adcSum_ZPA=0.; | |
149 | Float_t adcSumQ_ZNC=0., adcSumQ_ZNA=0., adcSumQ_ZPC=0., adcSumQ_ZPA=0.; | |
150 | while((hit = dynamic_cast<AliZDCHit *>(next()))){ | |
151 | if(hit->GetVolume(0)==1){ | |
152 | adcSumQ_ZNC += hit->GetLightPMQ(); | |
153 | adcSum_ZNC += hit->GetLightPMC() + hit->GetLightPMQ(); | |
154 | // | |
155 | FillHitsData(8,hit->GetLightPMC()); | |
156 | } | |
157 | else if(hit->GetVolume(0)==4){ | |
158 | adcSumQ_ZNA += hit->GetLightPMQ(); | |
159 | adcSum_ZNA += hit->GetLightPMC() + hit->GetLightPMQ(); | |
160 | // | |
161 | FillHitsData(9,hit->GetLightPMC()); | |
162 | } | |
163 | else if(hit->GetVolume(0)==2){ | |
164 | adcSumQ_ZNC += hit->GetLightPMQ(); | |
165 | adcSum_ZNC += hit->GetLightPMC() + hit->GetLightPMQ(); | |
166 | // | |
167 | FillHitsData(10,hit->GetLightPMC()); | |
168 | } | |
169 | else if(hit->GetVolume(0)==5){ | |
170 | adcSumQ_ZNC += hit->GetLightPMQ(); | |
171 | adcSum_ZNC += hit->GetLightPMC() + hit->GetLightPMQ(); | |
172 | // | |
173 | FillHitsData(11,hit->GetLightPMC()); | |
174 | } | |
175 | // | |
176 | FillHitsData(0,adcSum_ZNC); | |
177 | FillHitsData(1,adcSum_ZNA); | |
178 | FillHitsData(2,adcSum_ZPC); | |
179 | FillHitsData(3,adcSum_ZPA); | |
180 | // | |
181 | FillHitsData(4,adcSumQ_ZNC); | |
182 | FillHitsData(5,adcSumQ_ZNA); | |
183 | FillHitsData(6,adcSumQ_ZPC); | |
184 | FillHitsData(7,adcSumQ_ZPA); | |
185 | } | |
186 | } | |
187 | ||
188 | //___________________________________________________________________________ | |
189 | void AliZDCQADataMakerSim::MakeHits(TTree * hitTree) | |
190 | { | |
191 | // make QA data from Hit Tree | |
192 | if(!hitTree){ | |
193 | AliError("Can't get ZDC hit tree!!"); | |
194 | return; | |
195 | } | |
196 | ||
197 | TBranch * branch = hitTree->GetBranch("ZDC") ; | |
198 | ||
199 | if(!branch){ | |
200 | AliError("ZDC branch in Hit Tree not found!"); | |
201 | return; | |
202 | } | |
203 | ||
204 | if(fHitsArray) fHitsArray->Clear() ; | |
205 | else fHitsArray = new TClonesArray("AliZDCHit", 1000); | |
206 | ||
207 | branch->SetAddress(&fHitsArray) ; | |
208 | for (Int_t ientry = 0 ; ientry < branch->GetEntries() ; ientry++) { | |
209 | branch->GetEntry(ientry) ; | |
210 | MakeHits() ; | |
211 | fHitsArray->Clear() ; | |
212 | } | |
213 | // | |
214 | IncEvCountCycleHits(); | |
215 | IncEvCountTotalHits(); | |
216 | // | |
217 | } | |
218 | ||
219 | //___________________________________________________________________________ | |
220 | void AliZDCQADataMakerSim::MakeDigits(TTree *digitTree) | |
221 | { | |
222 | // makes data from Digit Tree | |
223 | if( !GetDigitsData(0) ) InitDigits(); | |
224 | ||
225 | if(!digitTree){ | |
226 | AliError("Can't get ZDC digit tree!!"); | |
227 | return; | |
228 | } | |
229 | ||
230 | TBranch * branch = digitTree->GetBranch("ZDC"); | |
231 | if(!branch){ | |
232 | AliError("ZDC branch in digit tree not found"); | |
233 | return; | |
234 | } | |
235 | ||
236 | AliZDCDigit *digit = 0x0; | |
237 | branch->SetAddress(&digit); | |
238 | ||
239 | Float_t adcSum_ZNC=0., adcSum_ZNA=0., adcSum_ZPC=0., adcSum_ZPA=0.; | |
240 | Float_t adcSumQ_ZNC=0., adcSumQ_ZNA=0., adcSumQ_ZPC=0., adcSumQ_ZPA=0.; | |
241 | // Float_t adcSum_ZNC_lg=0., adcSum_ZNA_lg=0., adcSum_ZPC_lg=0., adcSum_ZPA_lg=0.; | |
242 | // Float_t adcSumQ_ZNC_lg=0., adcSumQ_ZNA_lg=0., adcSumQ_ZPC_lg=0., adcSumQ_ZPA_lg=0.; | |
243 | ||
244 | Int_t ndig = digitTree->GetEntries(); | |
245 | for(Int_t i=0; i<ndig; i++){ | |
246 | branch->GetEntry(i); | |
247 | ||
248 | if(digit->GetSector(0)==1 && digit->GetSector(1)!=5){ | |
249 | adcSum_ZNC += digit->GetADCValue(0); | |
250 | //adcSum_ZNC_lg += digit->GetADCValue(1); | |
251 | // | |
252 | if(digit->GetSector(1)!=0){ | |
253 | adcSumQ_ZNC += digit->GetADCValue(0); | |
254 | //adcSumQ_ZNC_lg+= digit->GetADCValue(1); | |
255 | } | |
256 | else{ | |
257 | FillDigitsData(8,digit->GetADCValue(0)); | |
258 | //FillDigitsData(20,digit->GetADCValue(1)); | |
259 | } | |
260 | } | |
261 | else if(digit->GetSector(0)==2){ | |
262 | adcSum_ZPC += digit->GetADCValue(0); | |
263 | //adcSum_ZPC_lg += digit->GetADCValue(1); | |
264 | // | |
265 | if(digit->GetSector(1)!=0){ | |
266 | adcSumQ_ZPC += digit->GetADCValue(0); | |
267 | //adcSumQ_ZPC_lg+= digit->GetADCValue(1); | |
268 | } | |
269 | else{ | |
270 | FillDigitsData(10,digit->GetADCValue(0)); | |
271 | //FillDigitsData(22,digit->GetADCValue(1)); | |
272 | } | |
273 | } | |
274 | else if(digit->GetSector(0)==4 && digit->GetSector(1)!=5){ | |
275 | adcSum_ZNA += digit->GetADCValue(0); | |
276 | //adcSum_ZNA_lg += digit->GetADCValue(1); | |
277 | // | |
278 | if(digit->GetSector(1)!=0){ | |
279 | adcSumQ_ZNA += digit->GetADCValue(0); | |
280 | //adcSumQ_ZNA_lg+= digit->GetADCValue(1); | |
281 | } | |
282 | else{ | |
283 | FillDigitsData(9,digit->GetADCValue(0)); | |
284 | //FillDigitsData(21,digit->GetADCValue(1)); | |
285 | } | |
286 | } | |
287 | else if(digit->GetSector(0)==5){ | |
288 | adcSum_ZPA += digit->GetADCValue(0); | |
289 | //adcSum_ZPA_lg += digit->GetADCValue(1); | |
290 | // | |
291 | if(digit->GetSector(1)!=0){ | |
292 | adcSumQ_ZPA += digit->GetADCValue(0); | |
293 | //adcSumQ_ZPA_lg+= digit->GetADCValue(1); | |
294 | } | |
295 | else{ | |
296 | FillDigitsData(11,digit->GetADCValue(0)); | |
297 | //FillDigitsData(23,digit->GetADCValue(1)); | |
298 | } | |
299 | } | |
300 | } | |
301 | // | |
302 | FillDigitsData(0,adcSum_ZNC); | |
303 | FillDigitsData(1,adcSum_ZNA); | |
304 | FillDigitsData(2,adcSum_ZPC); | |
305 | FillDigitsData(3,adcSum_ZPA); | |
306 | // | |
307 | FillDigitsData(4,adcSumQ_ZNC); | |
308 | FillDigitsData(5,adcSumQ_ZNA); | |
309 | FillDigitsData(6,adcSumQ_ZPC); | |
310 | FillDigitsData(7,adcSumQ_ZPA); | |
311 | // | |
312 | IncEvCountCycleDigits(); | |
313 | IncEvCountTotalDigits(); | |
314 | // | |
315 | } | |
316 | ||
317 | //____________________________________________________________________________ | |
318 | void AliZDCQADataMakerSim::StartOfDetectorCycle() | |
319 | { | |
320 | //Detector specific actions at start of cycle | |
321 | ||
322 | } | |
323 | ||
324 | //____________________________________________________________________________ | |
325 | void AliZDCQADataMakerSim::EndOfDetectorCycle(AliQAv1::TASKINDEX_t task, TObjArray ** list) | |
326 | { | |
327 | // Detector specific actions at end of cycle | |
328 | // do the QA checking | |
329 | ResetEventTrigClasses(); | |
330 | AliQAChecker::Instance()->Run(AliQAv1::kZDC, task, list); | |
331 | } |