1 /**************************************************************************
2 * Copyright(c) 1998-2008, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
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 **************************************************************************/
16 /////////////////////////////////////////////////////////////
18 // Class to analyze ZDC data //
20 /////////////////////////////////////////////////////////////
28 #include "AliAnalysisManager.h"
29 #include "AliInputEventHandler.h"
30 #include "AliVEvent.h"
32 #include "AliESDEvent.h"
33 #include "AliESDHeader.h"
34 #include "AliESDInputHandler.h"
35 #include "AliESDZDC.h"
36 #include "AliMultiplicity.h"
37 #include "AliAODHandler.h"
38 #include "AliAODEvent.h"
39 #include "AliAODVertex.h"
40 #include "AliAODMCHeader.h"
41 #include "AliMCEventHandler.h"
42 #include "AliMCEvent.h"
43 #include "AliHeader.h"
44 #include "AliAODMCParticle.h"
45 #include "AliAnalysisTaskSE.h"
46 #include "AliGenEventHeader.h"
47 #include "AliGenHijingEventHeader.h"
48 #include "AliPhysicsSelectionTask.h"
49 #include "AliPhysicsSelection.h"
50 #include "AliBackgroundSelection.h"
51 #include "AliTriggerAnalysis.h"
52 #include "AliCentrality.h"
53 #include "AliAnalysisTaskZDCpA.h"
55 ClassImp(AliAnalysisTaskZDCpA)
58 //________________________________________________________________________
59 AliAnalysisTaskZDCpA::AliAnalysisTaskZDCpA():
86 // Default constructor
89 //________________________________________________________________________
90 AliAnalysisTaskZDCpA::AliAnalysisTaskZDCpA(const char *name):
91 AliAnalysisTaskSE(name),
118 // Output slot #1 writes into a TList container
119 DefineOutput(1, TList::Class());
123 //________________________________________________________________________
124 AliAnalysisTaskZDCpA& AliAnalysisTaskZDCpA::operator=(const AliAnalysisTaskZDCpA& c)
127 // Assignment operator
130 AliAnalysisTaskSE::operator=(c);
135 //________________________________________________________________________
136 AliAnalysisTaskZDCpA::AliAnalysisTaskZDCpA(const AliAnalysisTaskZDCpA& ana):
137 AliAnalysisTaskSE(ana),
139 fIsMCInput(ana.fIsMCInput),
140 fOutput(ana.fOutput),
141 fhTDCZNC(ana.fhTDCZNC),
142 fhTDCZNA(ana.fhTDCZNA),
143 fhTDCZNSum(ana.fhTDCZNSum),
144 fhTDCZNDiff(ana.fhTDCZNDiff),
145 fhZNCSumQ(ana.fhZNCSumQ),
146 fhZNASumQ(ana.fhZNASumQ),
147 fhZPCSumQ(ana.fhZPCSumQ),
148 fhZPASumQ(ana.fhZPASumQ),
149 fhZEM1Spectrum(ana.fhZEM1Spectrum),
150 fhZEM2Spectrum(ana.fhZEM2Spectrum),
151 fhZNCpmc(ana.fhZNCpmc),
152 fhZNApmc(ana.fhZNApmc),
153 fhZPCpmc(ana.fhZPCpmc),
154 fhZPApmc(ana.fhZPApmc),
155 fhZNCCentroid(ana.fhZNCCentroid),
156 fhZNACentroid(ana.fhZNACentroid),
157 fhPMCZNCemd(ana.fhPMCZNCemd),
158 fhPMCZNAemd(ana.fhPMCZNAemd),
159 fDebunch(ana.fDebunch),
160 fhTDCZNAcorr(ana.fhTDCZNAcorr),
161 fhTDCZNCcorr(ana.fhTDCZNCcorr)
169 //________________________________________________________________________
170 AliAnalysisTaskZDCpA::~AliAnalysisTaskZDCpA()
173 if(fOutput && !AliAnalysisManager::GetAnalysisManager()->IsProofMode()){
174 delete fOutput; fOutput=0;
179 //________________________________________________________________________
180 void AliAnalysisTaskZDCpA::UserCreateOutputObjects()
182 // Create the output containers
186 //fOutput->SetName("output");
188 fhTDCZNC = new TH1F("fhTDCZNC","TDC_{ZNC}",120, -60., -20.);
189 fhTDCZNC->GetXaxis()->SetTitle("TDC_{ZNC} (ns)");
190 fOutput->Add(fhTDCZNC);
192 fhTDCZNA = new TH1F("fhTDCZNA","TDC_{ZNA}",120, -60., -20.);
193 fhTDCZNA->GetXaxis()->SetTitle("TDC_{ZNA} (ns)");
194 fOutput->Add(fhTDCZNA);
196 fhTDCZNSum = new TH1F("fhTDCZNSum","TDC_{ZNC}+TDC_{ZNA}",120,-30.,30.);
197 fhTDCZNSum->GetXaxis()->SetTitle("TDC_{ZNC}+TDC_{ZNA} (ns)");
198 fOutput->Add(fhTDCZNSum);
200 fhTDCZNDiff = new TH1F("fhTDCZNDiff","TDC_{ZNC}-TDC_{ZNA}",120,-30.,30.);
201 fhTDCZNDiff->GetXaxis()->SetTitle("TDC_{ZNC}-TDC_{ZNA} (ns)");
202 fOutput->Add(fhTDCZNDiff);
204 fhZNCSumQ = new TH1F("fhZNCSumQ", "ZNC sumPMQ_i signal", 250,0., 2000.);
205 fOutput->Add(fhZNCSumQ);
206 fhZNASumQ = new TH1F("fhZNASumQ", "ZNA sumPMQ_i signal", 250,0., 2000.) ;
207 fOutput->Add(fhZNASumQ);
208 fhZPCSumQ = new TH1F("fhZPCSumQ", "ZPC sumPMQ_i signal", 200,0., 2000.) ;
209 fOutput->Add(fhZPCSumQ);
210 fhZPASumQ = new TH1F("fhZPASumQ", "ZPA sumPMQ_i signal", 200,0., 2000.) ;
211 fOutput->Add(fhZPASumQ);
212 fhZEM1Spectrum = new TH1F("fhZEM1Spectrum", "ZEM1 signal", 100,0., 2500.);
213 fOutput->Add(fhZEM1Spectrum);
214 fhZEM2Spectrum = new TH1F("fhZEM2Spectrum", "ZEM2 signal", 100,0., 2500.);
215 fOutput->Add(fhZEM2Spectrum);
217 fhZNCpmc = new TH1F("fhZNCpmc","ZNC PMC", 200, 0., 2000.);
218 fOutput->Add(fhZNCpmc);
219 fhZNApmc = new TH1F("fhZNApmc","ZNA PMC", 200, 0., 2000.);
220 fOutput->Add(fhZNApmc);
221 fhZPCpmc = new TH1F("fhZPCpmc","ZPC PMC", 200, 0., 2000.);
222 fOutput->Add(fhZPCpmc);
223 fhZPApmc = new TH1F("fhZPApmc","ZPA PMC", 200, 0., 2000.);
224 fOutput->Add(fhZPApmc);
226 fhZNCCentroid = new TH2F("fhZNCCentroid","Centroid over ZNC",70,-3.5,3.5,70,-3.5,3.5);
227 fOutput->Add(fhZNCCentroid);
228 fhZNACentroid = new TH2F("fhZNACentroid","Centroid over ZNA",70,-3.5,3.5,70,-3.5,3.5);
229 fOutput->Add(fhZNACentroid);
231 fhPMCZNCemd = new TH1F("fhPMCZNCemd","ZNC PMC lg",200, 0., 600.);
232 fOutput->Add(fhPMCZNCemd);
233 fhPMCZNAemd = new TH1F("fhPMCZNAemd","ZNA PMC lg",200, 0., 600.);
234 fOutput->Add(fhPMCZNAemd);
236 fDebunch = new TH2F("fDebunch","ZN TDC sum vs. diff", 120,-30,30,120,-30,-30);
237 fOutput->Add(fDebunch);
239 fhTDCZNAcorr = new TH1F("fhTDCZNAcorr","ZNA TDC corrected",120, -20., 20.);
240 fOutput->Add(fhTDCZNAcorr);
242 fhTDCZNCcorr = new TH1F("fhTDCZNCcorr","ZNC TDC corrected",120, -20., 20.);
243 fOutput->Add(fhTDCZNCcorr);
246 PostData(1, fOutput);
249 //________________________________________________________________________
250 void AliAnalysisTaskZDCpA::UserExec(Option_t */*option*/)
252 // Execute analysis for current event:
253 if(fDebug>1) printf(" **** AliAnalysisTaskZDCpA::UserExec() \n");
256 Printf("ERROR: InputEvent not available");
261 AliESDEvent* esd = dynamic_cast<AliESDEvent*> (InputEvent());
263 // Select PHYSICS events (type=7, for data)
264 //if(!fIsMCInput && esd->GetEventType()!=7) return;
266 // ********* MC INFO *********************************
269 AliMCEventHandler* eventHandler = dynamic_cast<AliMCEventHandler*> (AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler());
271 Printf("ERROR: Could not retrieve MC event handler");
275 AliMCEvent* mcEvent = eventHandler->MCEvent();
277 Printf("ERROR: Could not retrieve MC event");
282 // ****************************************************
284 // AliAnalysisManager *am = AliAnalysisManager::GetAnalysisManager();
286 AliESDZDC *esdZDC = esd->GetESDZDC();
288 // if((((AliInputEventHandler*)(am->GetInputEventHandler()))->IsEventSelected())){
290 fhZEM1Spectrum->Fill(esdZDC->GetZDCEMEnergy(0));
291 fhZEM2Spectrum->Fill(esdZDC->GetZDCEMEnergy(1));
293 const Double_t * towZNC = esdZDC->GetZN1TowerEnergy();
294 const Double_t * towZPC = esdZDC->GetZP1TowerEnergy();
295 const Double_t * towZNA = esdZDC->GetZN2TowerEnergy();
296 const Double_t * towZPA = esdZDC->GetZP2TowerEnergy();
298 fhZNCpmc->Fill(towZNC[0]);
299 fhZNApmc->Fill(towZNA[0]);
300 fhZPCpmc->Fill(towZPC[0]);
301 fhZPApmc->Fill(towZPA[0]);
303 Float_t sumQZNC=0., sumQZNA=0., sumQZPC=0., sumQZPA=0.;
304 for(int iq=1; iq<5; iq++){
305 sumQZNC += towZNC[iq];
306 sumQZNA += towZNA[iq];
307 sumQZPC += towZPC [iq];
308 sumQZPA += towZNC[iq];
311 fhZNCSumQ->Fill(sumQZNC);
312 fhZNASumQ->Fill(sumQZNA);
313 fhZPCSumQ->Fill(sumQZPC);
314 fhZPASumQ->Fill(sumQZPA);
316 Double_t xyZNC[2]={-99.,-99.}, xyZNA[2]={-99.,-99.};
317 esdZDC->GetZNCentroidInpp(xyZNC, xyZNA);
319 fhZNCCentroid->Fill(xyZNC[0], xyZNC[1]);
320 fhZNACentroid->Fill(xyZNA[0], xyZNA[1]);
322 const Double_t * towZNCLG = esdZDC->GetZN1TowerEnergyLR();
323 const Double_t * towZNALG = esdZDC->GetZN2TowerEnergyLR();
324 fhPMCZNCemd->Fill(towZNCLG[0]);
325 fhPMCZNAemd->Fill(towZNALG[0]);
329 for(int i=0; i<4; i++){
330 Float_t tdcC = 0.025*(esdZDC->GetZDCTDCData(10,i));
331 Float_t tdcA = 0.025*(esdZDC->GetZDCTDCData(12,i));
332 Float_t tdcL0 = 0.025*(esdZDC->GetZDCTDCData(15,i));
333 if(tdcC != 0.) fhTDCZNCcorr->Fill(esdZDC->GetZDCTDCCorrected(10,i));
334 if(tdcA != 0.) fhTDCZNAcorr->Fill(esdZDC->GetZDCTDCCorrected(12,i));
337 fhTDCZNC->Fill(tdcC-tdcL0);
339 fhTDCZNA->Fill(tdcA-tdcL0);
340 fhTDCZNDiff->Fill(esdZDC->GetZDCTDCCorrected(10,i)-esdZDC->GetZDCTDCCorrected(12,i));
341 fhTDCZNSum->Fill(esdZDC->GetZDCTDCCorrected(10,i)-esdZDC->GetZDCTDCCorrected(12,i));
342 fDebunch->Fill(esdZDC->GetZDCTDCCorrected(10,i)-esdZDC->GetZDCTDCCorrected(12,i),
343 esdZDC->GetZDCTDCCorrected(10,i)+esdZDC->GetZDCTDCCorrected(12,i));
348 PostData(1, fOutput);
354 //________________________________________________________________________
355 void AliAnalysisTaskZDCpA::Terminate(Option_t */*option*/)
357 // Terminate analysis