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 "AliAnalysisTaskZDC.h"
55 ClassImp(AliAnalysisTaskZDC)
58 //________________________________________________________________________
59 AliAnalysisTaskZDC::AliAnalysisTaskZDC():
81 // Default constructor
84 //________________________________________________________________________
85 AliAnalysisTaskZDC::AliAnalysisTaskZDC(const char *name):
86 AliAnalysisTaskSE(name),
107 // Output slot #1 writes into a TList container
108 DefineOutput(1, TList::Class());
112 //________________________________________________________________________
113 AliAnalysisTaskZDC& AliAnalysisTaskZDC::operator=(const AliAnalysisTaskZDC& c)
116 // Assignment operator
119 AliAnalysisTaskSE::operator=(c);
124 //________________________________________________________________________
125 AliAnalysisTaskZDC::AliAnalysisTaskZDC(const AliAnalysisTaskZDC& ana):
126 AliAnalysisTaskSE(ana),
128 fIsMCInput(ana.fIsMCInput),
129 fOutput(ana.fOutput),
130 fhZNCSpectrum(ana.fhZNCSpectrum),
131 fhZNASpectrum(ana.fhZNASpectrum),
132 fhZPCSpectrum(ana.fhZPCSpectrum),
133 fhZPASpectrum(ana.fhZPASpectrum),
134 fhZEM1Spectrum(ana.fhZEM1Spectrum),
135 fhZEM2Spectrum(ana.fhZEM2Spectrum),
136 fhZNCpmc(ana.fhZNCpmc),
137 fhZNApmc(ana.fhZNApmc),
138 fhZPCpmc(ana.fhZPCpmc),
139 fhZPApmc(ana.fhZPApmc),
140 fhZNCCentroid(ana.fhZNCCentroid),
141 fhZNACentroid(ana.fhZNACentroid),
142 fhZNCemd(ana.fhZNCemd),
143 fhZNAemd(ana.fhZNAemd),
144 fhPMCZNCemd(ana.fhPMCZNCemd),
145 fhPMCZNAemd(ana.fhPMCZNAemd)
152 //________________________________________________________________________
153 AliAnalysisTaskZDC::~AliAnalysisTaskZDC()
156 if(fOutput && !AliAnalysisManager::GetAnalysisManager()->IsProofMode()){
157 delete fOutput; fOutput=0;
162 //________________________________________________________________________
163 void AliAnalysisTaskZDC::UserCreateOutputObjects()
165 // Create the output containers
169 //fOutput->SetName("output");
171 fhTDCZNSum = new TH1F("fhTDCZNSum","TDC_{ZNC}+TDC_{ZNA}",60,-600.,-540.);
172 fhTDCZNSum->GetXaxis()->SetTitle("TDC_{ZNC}+TDC_{ZNA} (ns)");
173 fOutput->Add(fhTDCZNSum);
175 fhTDCZNDiff = new TH1F("fhTDCZNDiff","TDC_{ZNC}-TDC_{ZNA}",60,-30.,30.);
176 fhTDCZNDiff->GetXaxis()->SetTitle("TDC_{ZNC}-TDC_{ZNA} (ns)");
177 fOutput->Add(fhTDCZNDiff);
179 fhZNCSpectrum = new TH1F("fhZNCSpectrum", "ZNC signal", 100,0., 3000.);
180 fOutput->Add(fhZNCSpectrum);
181 fhZNASpectrum = new TH1F("fhZNASpectrum", "ZNA signal", 100,0., 3000.) ;
182 fOutput->Add(fhZNASpectrum);
183 fhZPCSpectrum = new TH1F("fhZPCSpectrum", "ZPC signal", 100,0., 3000.) ;
184 fOutput->Add(fhZPCSpectrum);
185 fhZPASpectrum = new TH1F("fhZPASpectrum", "ZPA signal", 100,0., 3000.) ;
186 fOutput->Add(fhZPASpectrum);
187 fhZEM1Spectrum = new TH1F("fhZEM1Spectrum", "ZEM1 signal", 100,0., 2500.);
188 fOutput->Add(fhZEM1Spectrum);
189 fhZEM2Spectrum = new TH1F("fhZEM2Spectrum", "ZEM2 signal", 100,0., 2500.);
190 fOutput->Add(fhZEM2Spectrum);
192 fhZNCpmc = new TH1F("fhZNCpmc","ZNC PMC",100, 0., 1200.);
193 fOutput->Add(fhZNCpmc);
194 fhZNApmc = new TH1F("fhZNApmc","ZNA PMC",100, 0., 1200.);
195 fOutput->Add(fhZNApmc);
196 fhZPCpmc = new TH1F("fhZPCpmc","ZPC PMC",100, 0., 1200.);
197 fOutput->Add(fhZPCpmc);
198 fhZPApmc = new TH1F("fhZPApmc","ZPA PMC",100, 0., 1200.);
199 fOutput->Add(fhZPApmc);
201 fhZNCCentroid = new TH2F("fhZNCCentroid","Centroid over ZNC",70,-3.5,3.5,70,-3.5,3.5);
202 fOutput->Add(fhZNCCentroid);
203 fhZNACentroid = new TH2F("fhZNACentroid","Centroid over ZNA",70,-3.5,3.5,70,-3.5,3.5);
204 fOutput->Add(fhZNACentroid);
206 fhZNCemd = new TH1F("fhZNCemd","ZNC signal lg",100,0.,1000.);
207 fOutput->Add(fhZNCemd);
208 fhZNAemd = new TH1F("fhZNAemd","ZNA signal lg",100,0.,1000.);
209 fOutput->Add(fhZNAemd);
210 fhPMCZNCemd = new TH1F("fhPMCZNCemd","ZNC PMC lg",100, 10., 500.);
211 fOutput->Add(fhPMCZNCemd);
212 fhPMCZNAemd = new TH1F("fhPMCZNAemd","ZNA PMC lg",100, 10., 500.);
213 fOutput->Add(fhPMCZNAemd);
215 PostData(1, fOutput);
218 //________________________________________________________________________
219 void AliAnalysisTaskZDC::UserExec(Option_t */*option*/)
221 // Execute analysis for current event:
222 if(fDebug>1) printf(" **** AliAnalysisTaskZDC::UserExec() \n");
225 Printf("ERROR: InputEvent not available");
230 AliESDEvent* esd = dynamic_cast<AliESDEvent*> (InputEvent());
231 // Select PHYSICS events (type=7, for data)
232 if(!fIsMCInput && esd->GetEventType()!=7) return;
234 // ********* MC INFO *********************************
237 AliMCEventHandler* eventHandler = dynamic_cast<AliMCEventHandler*> (AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler());
239 Printf("ERROR: Could not retrieve MC event handler");
243 AliMCEvent* mcEvent = eventHandler->MCEvent();
245 Printf("ERROR: Could not retrieve MC event");
249 AliGenEventHeader* genHeader = mcEvent->GenEventHeader();
251 printf(" Event generator header not available!!!\n");
255 if(genHeader->InheritsFrom(AliGenHijingEventHeader::Class())){
256 Float_t bMC = ((AliGenHijingEventHeader*) genHeader)->ImpactParameter();
257 Int_t specNeutronProj = ((AliGenHijingEventHeader*) genHeader)->ProjSpectatorsn();
258 Int_t specProtonProj = ((AliGenHijingEventHeader*) genHeader)->ProjSpectatorsp();
259 Int_t specNeutronTarg = ((AliGenHijingEventHeader*) genHeader)->TargSpectatorsn();
260 Int_t specProtonTarg = ((AliGenHijingEventHeader*) genHeader)->TargSpectatorsp();
261 Int_t npartTargMC = 208-(specNeutronTarg+specProtonTarg);
262 Int_t npartProjMC = 208-(specNeutronProj+specProtonProj);
266 // ****************************************************
268 AliAnalysisManager *am = AliAnalysisManager::GetAnalysisManager();
270 if((((AliInputEventHandler*)(am->GetInputEventHandler()))->IsEventSelected() & AliVEvent::kMB)){
272 AliESDZDC *esdZDC = esd->GetESDZDC();
274 for(Int_t i=0; i<4; i++){
275 fhTDCZNSum->Fill(esdZDC->GetZNTDCDiff(i));
276 fhTDCZNDiff->Fill(esdZDC->GetZNTDCSum(i));
278 fhZNCSpectrum->Fill(esdZDC->GetZDCN1Energy());
279 fhZNASpectrum->Fill(esdZDC->GetZDCN2Energy());
280 fhZPCSpectrum->Fill(esdZDC->GetZDCP1Energy());
281 fhZPASpectrum->Fill(esdZDC->GetZDCP2Energy());
282 fhZEM1Spectrum->Fill(esdZDC->GetZDCEMEnergy(0));
283 fhZEM2Spectrum->Fill(esdZDC->GetZDCEMEnergy(1));
285 const Double_t * towZNC = esdZDC->GetZN1TowerEnergy();
286 const Double_t * towZPC = esdZDC->GetZP1TowerEnergy();
287 const Double_t * towZNA = esdZDC->GetZN2TowerEnergy();
288 const Double_t * towZPA = esdZDC->GetZP2TowerEnergy();
290 fhZNCpmc->Fill(towZNC[0]);
291 fhZNApmc->Fill(towZPC[0]);
292 fhZPCpmc->Fill(towZNA[0]);
293 fhZPApmc->Fill(towZPA[0]);
295 Double_t xyZNC[2]={-99.,-99.}, xyZNA[2]={-99.,-99.};
296 //esdZDC->GetZNCentroidInPbPb(fBeamEnergy, xyZNC, xyZNA);
297 esdZDC->GetZNCentroidInpp(xyZNC, xyZNA);
299 fhZNCCentroid->Fill(xyZNC[0], xyZNC[1]);
300 fhZNACentroid->Fill(xyZNA[0], xyZNA[1]);
302 const Double_t * towZNCLG = esdZDC->GetZN1TowerEnergyLR();
303 const Double_t * towZNALG = esdZDC->GetZN2TowerEnergyLR();
304 Double_t znclg=0., znalg=0.;
305 for(Int_t iq=0; iq<5; iq++){
306 znclg += towZNCLG[iq];
307 znalg += towZNALG[iq];
309 fhZNCemd->Fill(znclg);
310 fhZNAemd->Fill(znalg);
311 fhPMCZNCemd->Fill(towZNCLG[0]);
312 fhPMCZNAemd->Fill(towZNALG[0]);
314 PostData(1, fOutput);
322 //________________________________________________________________________
323 void AliAnalysisTaskZDC::Terminate(Option_t */*option*/)
325 // Terminate analysis