1 /**************************************************************************
\r
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
\r
4 * Author: The ALICE Off-line Project. *
\r
5 * Contributors are mentioned in the code where appropriate. *
\r
7 * Permission to use, copy, modify and distribute this software and its *
\r
8 * documentation strictly for non-commercial purposes is hereby granted *
\r
9 * without fee, provided that the above copyright notice appears in all *
\r
10 * copies and that both the copyright notice and this permission notice *
\r
11 * appear in the supporting documentation. The authors make no claims *
\r
12 * about the suitability of this software for any purpose. It is *
\r
13 * provided "as is" without express or implied warranty. *
\r
14 **************************************************************************/
\r
15 // --- Standard library ---
\r
16 #include <Riostream.h>
\r
17 // --- ROOT system ---
\r
18 #include <TClonesArray.h>
\r
22 #include <TBranch.h>
\r
24 // --- AliRoot header files ---
\r
26 #include "AliQAChecker.h"
\r
27 #include "AliZDCQADataMakerSim.h"
\r
28 #include "AliZDCHit.h"
\r
29 #include "AliZDCDigit.h"
\r
30 #include "AliZDCRawStream.h"
\r
32 ClassImp(AliZDCQADataMakerSim)
\r
34 //____________________________________________________________________________
\r
35 AliZDCQADataMakerSim::AliZDCQADataMakerSim() :
\r
36 AliQADataMakerSim(AliQA::GetDetName(AliQA::kZDC), "ZDC Quality Assurance Data Maker"),
\r
37 fHits("AliZDCHit", 1000),
\r
38 fDigits("AliZDCDigit", 1000)
\r
43 //____________________________________________________________________________
\r
44 AliZDCQADataMakerSim::AliZDCQADataMakerSim(const AliZDCQADataMakerSim& qadm) :
\r
45 AliQADataMakerSim(),
\r
46 fHits("AliZDCHit", 1000),
\r
47 fDigits("AliZDCDigit", 1000)
\r
50 SetName((const char*)qadm.GetName());
\r
51 SetTitle((const char*)qadm.GetTitle());
\r
54 //__________________________________________________________________
\r
55 AliZDCQADataMakerSim& AliZDCQADataMakerSim::operator = (const AliZDCQADataMakerSim& qadm )
\r
58 this->~AliZDCQADataMakerSim();
\r
59 new(this) AliZDCQADataMakerSim(qadm);
\r
63 //____________________________________________________________________________
\r
64 void AliZDCQADataMakerSim::InitHits()
\r
66 // create Hits histograms in Hits subdir
\r
68 TH2F * hZNCh = new TH2F("hZNCh", "Hits centroid in ZNC", 100, -5.,5.,100,-5.,5.);
\r
69 TH2F * hZNAh = new TH2F("hZNAh", "Hits centroid in ZNA", 100, -5.,5.,100,-5.,5.);
\r
70 TH2F * hZPCh = new TH2F("hZPCh", "Hits centroid in ZPC", 100,-12.,12.,100,-12.,12.);
\r
71 TH2F * hZPAh = new TH2F("hZPAh", "Hits centroid in ZPA", 100,-12.,12.,100,-12.,12.);
\r
72 Add2HitsList(hZNCh, 0);
\r
73 Add2HitsList(hZPCh, 1);
\r
74 Add2HitsList(hZNAh, 2);
\r
75 Add2HitsList(hZPAh, 3);
\r
79 //____________________________________________________________________________
\r
80 void AliZDCQADataMakerSim::InitDigits()
\r
82 // create Digits histograms in Digits subdir
\r
84 TH1F * hDigZNCTot = new TH1F("hDigZNCTot", "Digit signal in ZNC", 100, 0., 6000.);
\r
85 TH1F * hDigZNATot = new TH1F("hDigZNATot", "Digit signal in ZNA", 100, 0., 6000.);
\r
86 TH1F * hDigZPCTot = new TH1F("hDigZPCTot", "Digit signal in ZPC", 100, 0., 10000.);
\r
87 TH1F * hDigZPATot = new TH1F("hDigZPATot", "Digit signal in ZPA", 100, 0., 10000.);
\r
88 Add2DigitsList(hDigZNCTot, 0);
\r
89 Add2DigitsList(hDigZPCTot, 1);
\r
90 Add2DigitsList(hDigZNATot, 2);
\r
91 Add2DigitsList(hDigZPATot, 3);
\r
93 TH1F * hDigSumQZNC = new TH1F("hDigSumQZNC", "Signal in 4 ZNC PMQ[i]",100, 0., 4000.);
\r
94 TH1F * hDigSumQZPC = new TH1F("hDigSumQZPC", "Signal in 4 ZPC PMQ[i]",100, 0., 4000.);
\r
95 TH1F * hDigSumQZNA = new TH1F("hDigSumQZNA", "Signal in 4 ZNA PMQ[i]",100, 0., 4000.);
\r
96 TH1F * hDigSumQZPA = new TH1F("hDigSumQZPA", "Signal in 4 ZPA PMQ[i]",100, 0., 4000.);
\r
97 Add2DigitsList(hDigSumQZNC, 4);
\r
98 Add2DigitsList(hDigSumQZPC, 5);
\r
99 Add2DigitsList(hDigSumQZNA, 6);
\r
100 Add2DigitsList(hDigSumQZPA, 7);
\r
102 TH1F * hDigPMCZNC = new TH1F("hDigPMCZNC", "Signal in 4 ZNC PMQ[i]",100, 0., 4000.);
\r
103 TH1F * hDigPMCZPC = new TH1F("hDigPMCZPC", "Signal in 4 ZPC PMQ[i]",100, 0., 4000.);
\r
104 TH1F * hDigPMCZNA = new TH1F("hDigPMCZNA", "Signal in 4 ZNA PMQ[i]",100, 0., 4000.);
\r
105 TH1F * hDigPMCZPA = new TH1F("hDigPMCZPA", "Signal in 4 ZPA PMQ[i]",100, 0., 4000.);
\r
106 Add2DigitsList(hDigPMCZNC, 8);
\r
107 Add2DigitsList(hDigPMCZPC, 9);
\r
108 Add2DigitsList(hDigPMCZNA, 10);
\r
109 Add2DigitsList(hDigPMCZPA, 11);
\r
111 // ------------------- LOW GAIN CHAIN ---------------------------
\r
112 TH1F * hDigZNCTotlg = new TH1F("hDigZNCTotlg", "Digit lg signal in ZNC", 100, 0., 6000.);
\r
113 TH1F * hDigZNATotlg = new TH1F("hDigZNATotlg", "Digit lg signal in ZNA", 100, 0., 6000.);
\r
114 TH1F * hDigZPCTotlg = new TH1F("hDigZPCTotlg", "Digit lg signal in ZPC", 100, 0., 10000.);
\r
115 TH1F * hDigZPATotlg = new TH1F("hDigZPATotlg", "Digit lg signal in ZPA", 100, 0., 10000.);
\r
116 Add2DigitsList(hDigZNCTotlg, 12);
\r
117 Add2DigitsList(hDigZPCTotlg, 13);
\r
118 Add2DigitsList(hDigZNATotlg, 14);
\r
119 Add2DigitsList(hDigZPATotlg, 15);
\r
121 TH1F * hDigSumQZNClg = new TH1F("hDigSumQZNClg", "Signal in 4 ZNC PMQlg[i]",100, 0., 4000.);
\r
122 TH1F * hDigSumQZPClg = new TH1F("hDigSumQZPClg", "Signal in 4 ZPC PMQlg[i]",100, 0., 4000.);
\r
123 TH1F * hDigSumQZNAlg = new TH1F("hDigSumQZNAlg", "Signal in 4 ZNA PMQlg[i]",100, 0., 4000.);
\r
124 TH1F * hDigSumQZPAlg = new TH1F("hDigSumQZPAlg", "Signal in 4 ZPA PMQlg[i]",100, 0., 4000.);
\r
125 Add2DigitsList(hDigSumQZNClg, 16);
\r
126 Add2DigitsList(hDigSumQZPClg, 17);
\r
127 Add2DigitsList(hDigSumQZNAlg, 18);
\r
128 Add2DigitsList(hDigSumQZPAlg, 19);
\r
130 TH1F * hDigPMCZNClg = new TH1F("hDigPMCZNClg", "Signal in 4 ZNC PMQlg[i]",100, 0., 4000.);
\r
131 TH1F * hDigPMCZPClg = new TH1F("hDigPMCZPClg", "Signal in 4 ZPC PMQlg[i]",100, 0., 4000.);
\r
132 TH1F * hDigPMCZNAlg = new TH1F("hDigPMCZNAlg", "Signal in 4 ZNA PMQlg[i]",100, 0., 4000.);
\r
133 TH1F * hDigPMCZPAlg = new TH1F("hDigPMCZPAlg", "Signal in 4 ZPA PMQlg[i]",100, 0., 4000.);
\r
134 Add2DigitsList(hDigPMCZNClg, 20);
\r
135 Add2DigitsList(hDigPMCZPClg, 21);
\r
136 Add2DigitsList(hDigPMCZNAlg, 22);
\r
137 Add2DigitsList(hDigPMCZPAlg, 23);
\r
140 //____________________________________________________________________________
\r
141 void AliZDCQADataMakerSim::MakeHits(TClonesArray * /*data*/)
\r
143 //filling QA histos for Hits
\r
145 TIter next(&fHits);
\r
147 while((hit = dynamic_cast<AliZDCHit *>(next()))){
\r
148 if(hit->GetVolume(0)==1) GetHitsData(0)->Fill(hit->GetXImpact(),hit->GetYImpact());
\r
149 else if(hit->GetVolume(0)==2) GetHitsData(1)->Fill(hit->GetXImpact(), hit->GetYImpact());
\r
150 else if(hit->GetVolume(0)==4) GetHitsData(2)->Fill(hit->GetXImpact(), hit->GetYImpact());
\r
151 else if(hit->GetVolume(0)==5) GetHitsData(3)->Fill(hit->GetXImpact(), hit->GetYImpact());
\r
155 //___________________________________________________________________________
\r
156 void AliZDCQADataMakerSim::MakeHits(TTree * hitTree)
\r
158 // make QA data from Hit Tree
\r
161 AliError("Hit Tree not found!");
\r
166 TBranch * branch = hitTree->GetBranch("ZDC") ;
\r
167 TClonesArray* pHits = &fHits;
\r
168 branch->SetAddress(&pHits) ;
\r
171 AliError("ZDC branch in Hit Tree not found!");
\r
175 Int_t ntracks = (Int_t) hitTree->GetEntries();
\r
176 //printf("\n\t *** no.track %d\n",ntracks);
\r
177 if (ntracks<=0) return;
\r
179 for(Int_t itrack=0; itrack<ntracks; itrack++){
\r
181 branch->GetEntry(itrack);
\r
183 //printf("\t *** track %d",itrack);
\r
193 //____________________________________________________________________________
\r
194 void AliZDCQADataMakerSim::MakeDigits(TClonesArray * /*digits*/)
\r
196 // makes data from Digits
\r
198 TIter next(&fDigits) ;
\r
199 AliZDCDigit * digit ;
\r
201 Float_t ADCSum_ZNC=0., ADCSum_ZNA=0., ADCSum_ZPC=0., ADCSum_ZPA=0.;
\r
202 Float_t ADCSumQ_ZNC=0., ADCSumQ_ZNA=0., ADCSumQ_ZPC=0., ADCSumQ_ZPA=0.;
\r
203 Float_t ADCSum_ZNC_lg=0., ADCSum_ZNA_lg=0., ADCSum_ZPC_lg=0., ADCSum_ZPA_lg=0.;
\r
204 Float_t ADCSumQ_ZNC_lg=0., ADCSumQ_ZNA_lg=0., ADCSumQ_ZPC_lg=0., ADCSumQ_ZPA_lg=0.;
\r
206 while((digit = dynamic_cast<AliZDCDigit *>(next()))){
\r
207 if(digit->GetSector(0)==1){
\r
208 ADCSum_ZNC += digit->GetADCValue(0);
\r
209 ADCSum_ZNC_lg += digit->GetADCValue(1);
\r
211 if(digit->GetSector(1)!=0){
\r
212 ADCSumQ_ZNC += digit->GetADCValue(0);
\r
213 ADCSumQ_ZNC_lg+= digit->GetADCValue(1);
\r
216 GetDigitsData(8)->Fill(digit->GetADCValue(0));
\r
217 GetDigitsData(20)->Fill(digit->GetADCValue(1));
\r
220 else if(digit->GetSector(0)==2){
\r
221 ADCSum_ZPC += digit->GetADCValue(0);
\r
222 ADCSum_ZPC_lg += digit->GetADCValue(1);
\r
224 if(digit->GetSector(1)!=0){
\r
225 ADCSumQ_ZPC += digit->GetADCValue(0);
\r
226 ADCSumQ_ZPC_lg+= digit->GetADCValue(1);
\r
229 GetDigitsData(9)->Fill(digit->GetADCValue(0));
\r
230 GetDigitsData(21)->Fill(digit->GetADCValue(1));
\r
233 else if(digit->GetSector(0)==4){
\r
234 ADCSum_ZNA += digit->GetADCValue(0);
\r
235 ADCSum_ZNA_lg += digit->GetADCValue(1);
\r
237 if(digit->GetSector(1)!=0){
\r
238 ADCSumQ_ZNA += digit->GetADCValue(0);
\r
239 ADCSumQ_ZNA_lg+= digit->GetADCValue(1);
\r
242 GetDigitsData(10)->Fill(digit->GetADCValue(0));
\r
243 GetDigitsData(22)->Fill(digit->GetADCValue(1));
\r
246 else if(digit->GetSector(0)==5){
\r
247 ADCSum_ZPA += digit->GetADCValue(0);
\r
248 ADCSum_ZPA_lg += digit->GetADCValue(1);
\r
250 if(digit->GetSector(1)!=0){
\r
251 ADCSumQ_ZPA += digit->GetADCValue(0);
\r
252 ADCSumQ_ZPA_lg+= digit->GetADCValue(1);
\r
255 GetDigitsData(11)->Fill(digit->GetADCValue(0));
\r
256 GetDigitsData(23)->Fill(digit->GetADCValue(1));
\r
261 GetDigitsData(0)->Fill(ADCSum_ZNC);
\r
262 GetDigitsData(1)->Fill(ADCSum_ZPC);
\r
263 GetDigitsData(2)->Fill(ADCSum_ZNA);
\r
264 GetDigitsData(3)->Fill(ADCSum_ZPA);
\r
266 GetDigitsData(4)->Fill(ADCSumQ_ZNC);
\r
267 GetDigitsData(5)->Fill(ADCSumQ_ZPC);
\r
268 GetDigitsData(6)->Fill(ADCSumQ_ZNA);
\r
269 GetDigitsData(7)->Fill(ADCSumQ_ZPA);
\r
271 GetDigitsData(12)->Fill(ADCSum_ZNC_lg);
\r
272 GetDigitsData(13)->Fill(ADCSum_ZPC_lg);
\r
273 GetDigitsData(14)->Fill(ADCSum_ZNA_lg);
\r
274 GetDigitsData(15)->Fill(ADCSum_ZPA_lg);
\r
276 GetDigitsData(16)->Fill(ADCSumQ_ZNC_lg);
\r
277 GetDigitsData(17)->Fill(ADCSumQ_ZPC_lg);
\r
278 GetDigitsData(18)->Fill(ADCSumQ_ZNA_lg);
\r
279 GetDigitsData(19)->Fill(ADCSumQ_ZPA_lg);
\r
282 //___________________________________________________________________________
\r
283 void AliZDCQADataMakerSim::MakeDigits(TTree *digitTree )
\r
285 // makes data from Digit Tree
\r
286 TBranch * branch = digitTree->GetBranch("ZDC");
\r
288 AliError("ZDC branch in Digit Tree not found");
\r
291 TClonesArray* pDigits = &fDigits;
\r
292 branch->SetAddress(&pDigits);
\r
293 branch->GetEntry(0);
\r
298 //____________________________________________________________________________
\r
299 void AliZDCQADataMakerSim::StartOfDetectorCycle()
\r
301 //Detector specific actions at start of cycle
\r
305 //____________________________________________________________________________
\r
306 void AliZDCQADataMakerSim::EndOfDetectorCycle(AliQA::TASKINDEX_t task, TObjArray * list)
\r
308 //Detector specific actions at end of cycle
\r
309 // do the QA checking
\r
310 AliQAChecker::Instance()->Run(AliQA::kZDC, task, list);
\r