]> git.uio.no Git - u/mrichter/AliRoot.git/blame - AD/AliADQADataMakerSim.cxx
Using detector quality flag (taken from ALICE logbook) to decide whether to rpodcue...
[u/mrichter/AliRoot.git] / AD / AliADQADataMakerSim.cxx
CommitLineData
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
41ClassImp(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//____________________________________________________________________________
54AliADQADataMakerSim::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//__________________________________________________________________
64AliADQADataMakerSim& AliADQADataMakerSim::operator = (const AliADQADataMakerSim& qadm )
65{
66 // Assign operator.
67 this->~AliADQADataMakerSim();
68 new(this) AliADQADataMakerSim(qadm);
69 return *this;
70}
71//____________________________________________________________________________
72void 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//____________________________________________________________________________
82void 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//____________________________________________________________________________
107void 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//____________________________________________________________________________
134void 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//____________________________________________________________________________
162void 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
183void 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//____________________________________________________________________________
235void 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//____________________________________________________________________________
259void 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//____________________________________________________________________________
274void 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//____________________________________________________________________________
289void 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//____________________________________________________________________________
314void AliADQADataMakerSim::StartOfDetectorCycle()
315{
316 //Detector specific actions at start of cycle
317
318}