]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWG1/AliAnaVZEROQA.cxx
Small update for the status code (Raphaelle)
[u/mrichter/AliRoot.git] / PWG1 / AliAnaVZEROQA.cxx
CommitLineData
ecb38463 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// Analysis task for quality-assurance
18// of VZERO ESD
19//
20// 05/12/2009 cvetan.cheshkov@cern.ch
21//------------------------------
22
23#include "TChain.h"
24#include "TROOT.h"
25#include "TFile.h"
26#include "TH1F.h"
27#include "TH2F.h"
ecb38463 28#include "TCanvas.h"
29#include "AliLog.h"
30#include "AliESDEvent.h"
31#include "AliESDVZERO.h"
32
33#include "AliAnaVZEROQA.h"
34
35ClassImp(AliAnaVZEROQA)
36
37AliAnaVZEROQA::AliAnaVZEROQA():
38AliAnalysisTaskSE("AliAnaVZEROQA"),
39 fListOfHistos(0),
40
41 fhAdcNoTimeA(0),
42 fhAdcWithTimeA(0),
43 fhAdcNoTimeC(0),
44 fhAdcWithTimeC(0),
45
46 fhAdcPMTNoTime(0),
47 fhAdcPMTWithTime(0),
48
49 fhTimeA(0),
50 fhTimeC(0),
51
52 fhWidthA(0),
53 fhWidthC(0),
54
55 fhTimePMT(0),
56 fhWidthPMT(0),
57
58 fhAdcWidthA(0),
59 fhAdcWidthC(0),
60
61 fhTimeCorr(0),
62
63 fhAdcTimeA(0),
64 fhAdcTimeC(0),
65
66 fV0a(0),
67 fV0c(0),
68 fV0multA(0),
69 fV0multC(0),
892effee 70 fV0ampl(0),
71
892effee 72 fhEvents(0),
73
74 fhVtxXYBB(0),
75 fhVtxZBB(0),
76 fhVtxXYBGA(0),
77 fhVtxZBGA(0),
78 fhVtxXYBGC(0),
79 fhVtxZBGC(0)
ecb38463 80{
81 // Default constructor
82 // Define input and output slots here
83 // Input slot #0 works with a TChain
84 DefineInput(0, TChain::Class());
85 // Output slot #1 TList
86 DefineOutput(1, TList::Class());
87}
88
89AliAnaVZEROQA::AliAnaVZEROQA(const char* name):
90AliAnalysisTaskSE(name),
91 fListOfHistos(0),
92 fhAdcNoTimeA(0),
93 fhAdcWithTimeA(0),
94 fhAdcNoTimeC(0),
95 fhAdcWithTimeC(0),
96
97 fhAdcPMTNoTime(0),
98 fhAdcPMTWithTime(0),
99
100 fhTimeA(0),
101 fhTimeC(0),
102
103 fhWidthA(0),
104 fhWidthC(0),
105
106 fhTimePMT(0),
107 fhWidthPMT(0),
108
109 fhAdcWidthA(0),
110 fhAdcWidthC(0),
111
112 fhTimeCorr(0),
113
114 fhAdcTimeA(0),
115 fhAdcTimeC(0),
116
117 fV0a(0),
118 fV0c(0),
119 fV0multA(0),
120 fV0multC(0),
892effee 121 fV0ampl(0),
122
892effee 123 fhEvents(0),
124
125 fhVtxXYBB(0),
126 fhVtxZBB(0),
127 fhVtxXYBGA(0),
128 fhVtxZBGA(0),
129 fhVtxXYBGC(0),
130 fhVtxZBGC(0)
ecb38463 131{
132 // Constructor
133 AliInfo("Constructor AliAnaVZEROQA");
134 // Define input and output slots here
135 // Input slot #0 works with a TChain
136 DefineInput(0, TChain::Class());
137 // Output slot #1 TList
138 DefineOutput(1, TList::Class());
139}
140
141TH1F * AliAnaVZEROQA::CreateHisto1D(const char* name, const char* title,Int_t nBins,
142 Double_t xMin, Double_t xMax,
143 const char* xLabel, const char* yLabel)
144{
145 // create a histogram
146 TH1F* result = new TH1F(name, title, nBins, xMin, xMax);
147 result->SetOption("E");
148 if (xLabel) result->GetXaxis()->SetTitle(xLabel);
149 if (yLabel) result->GetYaxis()->SetTitle(yLabel);
150 result->SetMarkerStyle(kFullCircle);
151 return result;
152}
153
154TH2F * AliAnaVZEROQA::CreateHisto2D(const char* name, const char* title,Int_t nBinsX,
155 Double_t xMin, Double_t xMax,
156 Int_t nBinsY,
157 Double_t yMin, Double_t yMax,
158 const char* xLabel, const char* yLabel)
159{
160 // create a histogram
161 TH2F* result = new TH2F(name, title, nBinsX, xMin, xMax, nBinsY, yMin, yMax);
162 if (xLabel) result->GetXaxis()->SetTitle(xLabel);
163 if (yLabel) result->GetYaxis()->SetTitle(yLabel);
164 return result;
165}
166
167void AliAnaVZEROQA::UserCreateOutputObjects()
168{
169 // Create histograms
170 AliInfo("AliAnaVZEROQA::UserCreateOutputObjects");
171 // Create output container
172 fListOfHistos = new TList();
13317536 173 fListOfHistos->SetOwner();
ecb38463 174
175 fhAdcNoTimeA = CreateHisto1D("hAdcNoTimeA","ADC (no Leading Time) V0A",200,0,200,"ADC charge","Entries");
176 fhAdcWithTimeA = CreateHisto1D("hAdcWithTimeA","ADC ( with Leading Time) V0A",200,0,200,"ADC charge","Entries");
177 fhAdcNoTimeC = CreateHisto1D("hAdcNoTimeC","ADC (no Leading Time) V0C",200,0,200,"ADC charge","Entries");
178 fhAdcWithTimeC = CreateHisto1D("hAdcWithTimeC","ADC ( with Leading Time) V0C",200,0,200,"ADC charge","Entries");
179
180 fhAdcPMTNoTime = CreateHisto2D("hadcpmtnotime","ADC vs PMT index (no leading time)",64,-0.5,63.5,200,0,200,"PMT index","ADC charge");
181 fhAdcPMTWithTime = CreateHisto2D("hadcpmtwithtime","ADC vs PMT index (with leading time)",64,-0.5,63.5,200,0,200,"PMT index","ADC charge");
182
183 fhTimeA = CreateHisto1D("htimepmtA","Time measured by TDC V0A",400,-100,100,"Leading time (ns)","Entries");
184 fhTimeC = CreateHisto1D("htimepmtC","Time measured by TDC V0C",400,-100,100,"Leading time (ns)","Entries");
185
186 fhWidthA = CreateHisto1D("hwidthA","Signal width measured by TDC V0A",200,0,100,"Signal width (ns)","Entries");
187 fhWidthC = CreateHisto1D("hwidthC","Signal width measured by TDC V0C",200,0,100,"Signal width (ns)","Entries");
188
189 fhTimePMT = CreateHisto2D("htimepmt","Time measured by TDC vs PMT index",64,-0.5,63.5,200,0,100,"PMT Index","Leading time (ns)");
190 fhWidthPMT = CreateHisto2D("hwidthpmt","Time width vs PMT index",64,-0.5,63.5,200,0,100,"PMT Index","Signal width (ns)");
191
192 fhAdcWidthA = CreateHisto2D("hadcwidthA","Time width vs ADC V0A",200,0,200,200,0,100,"ADC charge","Width (ns)");
193 fhAdcWidthC = CreateHisto2D("hadcwidthC","Time width vs ADC V0C",200,0,200,200,0,100,"ADC charge","Width (ns)");
194
195 fhTimeCorr = CreateHisto2D("htimecorr","Average time C side vs. A side",200,0,100,200,0,100,"Time V0A (ns)","Time V0C (ns");
196
197 fhAdcTimeA = CreateHisto2D("hAdcTimeA","ADC vs Time V0A",1000,-100,100,200,0,200,"Time (ns)","ADC charge");
198 fhAdcTimeC = CreateHisto2D("hAdcTimeC","ADC vs Time V0C",1000,-100,100,200,0,200,"Time (ns)","ADC charge");
199
200 fV0a = CreateHisto1D("hV0a","Number of fired PMTs (V0A)",65,-0.5,64.5);
201 fV0c = CreateHisto1D("hV0c","Number of fired PMTs (V0C)",65,-0.5,64.5);
202 fV0multA = CreateHisto1D("hV0multA","Total reconstructed multiplicity (V0A)",100,0.,1000.);
203 fV0multC = CreateHisto1D("hV0multC","Total reconstructed multiplicity (V0C)",100,0.,1000.);
204 fV0ampl = CreateHisto1D("hV0ampl","V0 multiplicity in single channel (all V0 channels)",400,-0.5,99.5);
205
892effee 206 fhEvents = CreateHisto2D("hEvents","V0C vs V0A (empty,bb,bg)",3,-0.5,2.5,3,-0.5,2.5);
207
208 fhVtxXYBB = CreateHisto2D("fhVtxXYBB","XY SPD vertex (bb)",200,-2,2,200,-2,2);
209 fhVtxZBB = CreateHisto1D("fhVtxZBB","Z SPD vertex (bb)",400,-50,50);
210 fhVtxXYBGA = CreateHisto2D("fhVtxXYBGA","XY SPD vertex (bga)",200,-2,2,200,-2,2);
211 fhVtxZBGA = CreateHisto1D("fhVtxZBGA","Z SPD vertex (bga)",400,-50,50);
212 fhVtxXYBGC = CreateHisto2D("fhVtxXYBGC","XY SPD vertex (bgc)",200,-2,2,200,-2,2);
213 fhVtxZBGC = CreateHisto1D("fhVtxZBGC","Z SPD vertex (bgc)",400,-50,50);
214
ecb38463 215 fListOfHistos->Add(fhAdcNoTimeA);
216 fListOfHistos->Add(fhAdcWithTimeA);
217 fListOfHistos->Add(fhAdcNoTimeC);
218 fListOfHistos->Add(fhAdcWithTimeC);
219
220 fListOfHistos->Add(fhAdcPMTNoTime);
221 fListOfHistos->Add(fhAdcPMTWithTime);
222
223 fListOfHistos->Add(fhTimeA);
224 fListOfHistos->Add(fhTimeC);
225
226 fListOfHistos->Add(fhWidthA);
227 fListOfHistos->Add(fhWidthC);
228
229 fListOfHistos->Add(fhTimePMT);
230 fListOfHistos->Add(fhWidthPMT);
231
232 fListOfHistos->Add(fhAdcWidthA);
233 fListOfHistos->Add(fhAdcWidthC);
234
235 fListOfHistos->Add(fhTimeCorr);
236
237 fListOfHistos->Add(fhAdcTimeA);
238 fListOfHistos->Add(fhAdcTimeC);
239
240 fListOfHistos->Add(fV0a);
241 fListOfHistos->Add(fV0c);
242 fListOfHistos->Add(fV0multA);
243 fListOfHistos->Add(fV0multC);
244 fListOfHistos->Add(fV0ampl);
892effee 245
892effee 246 fListOfHistos->Add(fhEvents);
247
248 fListOfHistos->Add(fhVtxXYBB);
249 fListOfHistos->Add(fhVtxZBB);
250 fListOfHistos->Add(fhVtxXYBGA);
251 fListOfHistos->Add(fhVtxZBGA);
252 fListOfHistos->Add(fhVtxXYBGC);
253 fListOfHistos->Add(fhVtxZBGC);
3b5284bd 254
255 PostData(1, fListOfHistos);
ecb38463 256}
257
258void AliAnaVZEROQA::UserExec(Option_t */*option*/)
259{
f0a651f0 260 // Fill the QA histograms
261 // using ESD data
ecb38463 262 AliVEvent* event = InputEvent();
263 if (!event) {
264 Printf("ERROR: Could not retrieve event");
265 return;
266 }
267
268 AliESDEvent* esd = dynamic_cast<AliESDEvent*>(event);
713a03ae 269 if (!esd) {
270 Printf("ERROR: No ESD event");
271 return;
272 }
ecb38463 273 AliESDVZERO* esdV0 = esd->GetVZEROData();
713a03ae 274 if (!esdV0) {
275 Printf("ERROR: No ESD VZERO");
276 return;
277 }
ecb38463 278
ecb38463 279 for (Int_t i=0; i<64; ++i) {
280 if (esdV0->GetTime(i) < 1e-6) {
281 if (i >= 32) {
282 fhAdcNoTimeA->Fill(esdV0->GetAdc(i));
283 }
284 else {
285 fhAdcNoTimeC->Fill(esdV0->GetAdc(i));
286 }
287 fhAdcPMTNoTime->Fill(i,esdV0->GetAdc(i));
288 }
289 else {
290 if (i >= 32) {
291 fhAdcWithTimeA->Fill(esdV0->GetAdc(i));
292 }
293 else {
294 fhAdcWithTimeC->Fill(esdV0->GetAdc(i));
295 }
296 fhAdcPMTWithTime->Fill(i,esdV0->GetAdc(i));
297 }
298
299 if (i >= 32) {
300 fhTimeA->Fill(esdV0->GetTime(i));
301 fhWidthA->Fill(esdV0->GetWidth(i));
551e7927 302 fhAdcWidthA->Fill(esdV0->GetAdc(i),esdV0->GetWidth(i));
ecb38463 303 fhAdcTimeA->Fill(esdV0->GetTime(i),esdV0->GetAdc(i));
304 }
305 else {
306 fhTimeC->Fill(esdV0->GetTime(i));
307 fhWidthC->Fill(esdV0->GetWidth(i));
551e7927 308 fhAdcWidthC->Fill(esdV0->GetAdc(i),esdV0->GetWidth(i));
ecb38463 309 fhAdcTimeC->Fill(esdV0->GetTime(i),esdV0->GetAdc(i));
310 }
311 fhTimePMT->Fill(i,esdV0->GetTime(i));
312 fhWidthPMT->Fill(i,esdV0->GetWidth(i));
313
ecb38463 314 }
315
52a8ed27 316 fhTimeCorr->Fill(esdV0->GetV0ATime(),esdV0->GetV0CTime());
ecb38463 317
52a8ed27 318 AliESDVZERO::Decision flaga = esdV0->GetV0ADecision();
319 AliESDVZERO::Decision flagc = esdV0->GetV0CDecision();
892effee 320
321 fhEvents->Fill(flaga,flagc);
322
323 const AliESDVertex *vtx = esd->GetPrimaryVertexSPD();
324
325 if (flaga <= 1 && flagc <=1) {
326 fhVtxXYBB->Fill(vtx->GetXv(),vtx->GetYv());
327 fhVtxZBB->Fill(vtx->GetZv());
328 }
329 else {
330 if (flaga == 2) {
331 fhVtxXYBGA->Fill(vtx->GetXv(),vtx->GetYv());
332 fhVtxZBGA->Fill(vtx->GetZv());
333 }
334 if (flagc == 2) {
335 fhVtxXYBGC->Fill(vtx->GetXv(),vtx->GetYv());
336 fhVtxZBGC->Fill(vtx->GetZv());
337 }
338 }
339
ecb38463 340 fV0a->Fill(esdV0->GetNbPMV0A());
341 fV0c->Fill(esdV0->GetNbPMV0C());
342 fV0multA->Fill(esdV0->GetMTotV0A());
343 fV0multC->Fill(esdV0->GetMTotV0C());
344 for(Int_t i = 0; i < 64; i++) {
345 fV0ampl->Fill(esdV0->GetMultiplicity(i));
346 }
347
348 // Post output data.
349 PostData(1, fListOfHistos);
350}
351
352void AliAnaVZEROQA::Terminate(Option_t *)
353{
f0a651f0 354 // Store the output histograms
355 // from the list
ecb38463 356 fListOfHistos = dynamic_cast<TList*>(GetOutputData(1));
357 if (!fListOfHistos) {
358 Printf("ERROR: fListOfHistos not available");
359 return;
360 }
361
ecb38463 362 Info("AliAnaVZEROQA", "Successfully finished");
363}