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 //*****************************************************
17 // Class AliCentralitySelectionTask
18 // Class to analyze determine centrality
19 // author: Alberica Toia
20 //*****************************************************
32 #include "AliAnalysisManager.h"
33 #include "AliVEvent.h"
35 #include "AliESDEvent.h"
36 #include "AliESDHeader.h"
37 #include "AliESDInputHandler.h"
38 #include "AliESDZDC.h"
39 #include "AliESDFMD.h"
40 #include "AliESDVZERO.h"
41 #include "AliESDCentrality.h"
42 #include "AliMultiplicity.h"
43 #include "AliAODHandler.h"
44 #include "AliAODEvent.h"
45 #include "AliAODVertex.h"
46 #include "AliAODMCHeader.h"
47 #include "AliMCEvent.h"
48 #include "AliMCEventHandler.h"
49 #include "AliMCParticle.h"
51 #include "AliHeader.h"
52 #include "AliAODMCParticle.h"
53 #include "AliAnalysisTaskSE.h"
54 #include "AliGenEventHeader.h"
55 #include "AliGenHijingEventHeader.h"
56 #include "AliPhysicsSelectionTask.h"
57 #include "AliPhysicsSelection.h"
58 #include "AliBackgroundSelection.h"
59 #include "AliCentralitySelectionTask.h"
61 ClassImp(AliCentralitySelectionTask)
64 //________________________________________________________________________
65 AliCentralitySelectionTask::AliCentralitySelectionTask():
68 fAnalysisInput("ESD"),
91 // Default constructor
94 //________________________________________________________________________
95 AliCentralitySelectionTask::AliCentralitySelectionTask(const char *name):
96 AliAnalysisTaskSE(name),
98 fAnalysisInput("ESD"),
121 // Default constructor
124 //________________________________________________________________________
125 AliCentralitySelectionTask& AliCentralitySelectionTask::operator=(const AliCentralitySelectionTask& c)
127 // Assignment operator
129 AliAnalysisTaskSE::operator=(c);
134 //________________________________________________________________________
135 AliCentralitySelectionTask::AliCentralitySelectionTask(const AliCentralitySelectionTask& ana):
136 AliAnalysisTaskSE(ana),
138 fAnalysisInput(ana.fDebug),
139 fIsMCInput(ana.fIsMCInput),
142 fCentfilename(ana.fCentfilename),
143 fCentfilename2(ana.fCentfilename2),
144 fCentV0M(ana.fCentV0M),
145 fCentFMD(ana.fCentFMD),
146 fCentTRK(ana.fCentTRK),
147 fCentTKL(ana.fCentTKL),
148 fCentCL0(ana.fCentCL0),
149 fCentV0MvsFMD(ana.fCentV0MvsFMD),
150 fCentTKLvsV0M(ana.fCentTKLvsV0M),
151 fCentZEMvsZDC(ana.fCentZEMvsZDC),
152 fHtempV0M(ana.fHtempV0M),
153 fHtempFMD(ana.fHtempFMD),
154 fHtempTRK(ana.fHtempTRK),
155 fHtempTKL(ana.fHtempTKL),
156 fHtempCL0(ana.fHtempCL0),
157 fHtempV0MvsFMD(ana.fHtempV0MvsFMD),
158 fHtempTKLvsV0M(ana.fHtempTKLvsV0M),
159 fHtempZEMvsZDC(ana.fHtempZEMvsZDC)
164 //________________________________________________________________________
165 AliCentralitySelectionTask::~AliCentralitySelectionTask()
170 //________________________________________________________________________
171 void AliCentralitySelectionTask::UserCreateOutputObjects()
173 // Create the output containers
174 if(fDebug>1) printf("AnalysisCentralitySelectionTask::UserCreateOutputObjects() \n");
177 //________________________________________________________________________
178 void AliCentralitySelectionTask::UserExec(Option_t */*option*/)
180 // Execute analysis for current event:
181 if(fDebug>1) printf(" **** AliCentralitySelectionTask::UserExec() \n");
183 Float_t zncEnergy; // ZNC Energy
184 Float_t zpcEnergy; // ZPC Energy
185 Float_t znaEnergy; // ZNA Energy
186 Float_t zpaEnergy; // ZPA Energy
187 Float_t zem1Energy = 0.; // ZEM1 Energy
188 Float_t zem2Energy = 0.; // ZEM2 Energy
190 Int_t nTracks = 0; // no. tracks
191 Int_t nTracklets = 0; // no. tracklets
192 Int_t nClusters[6]; // no. clusters on 6 ITS layers
193 Int_t nChips[2]; // no. chips on 2 SPD layers
195 Float_t multV0A = 0; // multiplicity from V0 reco side A
196 Float_t multV0C = 0; // multiplicity from V0 reco side C
197 Float_t multFMDA = 0; // multiplicity from FMD on detector A
198 Float_t multFMDC = 0; // multiplicity from FMD on detector C
200 AliESDCentrality *esdCent = 0;
202 if(fAnalysisInput.CompareTo("ESD")==0){
204 AliVEvent* event = InputEvent();
205 AliESDEvent* esd = dynamic_cast<AliESDEvent*>(event);
207 esdCent = esd->GetCentrality();
210 AliESDVZERO* esdV0 = esd->GetVZEROData();
211 multV0A=esdV0->GetMTotV0A();
212 multV0C=esdV0->GetMTotV0C();
214 // ***** CB info (tracklets, clusters, chips)
215 nTracks = event->GetNumberOfTracks();
217 const AliMultiplicity *mult = esd->GetMultiplicity();
219 nTracklets = mult->GetNumberOfTracklets();
221 for(Int_t ilay=0; ilay<6; ilay++){
222 nClusters[ilay] = mult->GetNumberOfITSClusters(ilay);
225 for(Int_t ilay=0; ilay<2; ilay++){
226 nChips[ilay] = mult->GetNumberOfFiredChips(ilay);
231 AliESDFMD *fmd = esd->GetFMDData();
232 Float_t totalMultA = 0;
233 Float_t totalMultC = 0;
234 const Float_t fFMDLowCut = 0.4;
236 for(UShort_t det=1;det<=3;det++) {
237 Int_t nRings = (det==1 ? 1 : 2);
238 for (UShort_t ir = 0; ir < nRings; ir++) {
239 Char_t ring = (ir == 0 ? 'I' : 'O');
240 UShort_t nsec = (ir == 0 ? 20 : 40);
241 UShort_t nstr = (ir == 0 ? 512 : 256);
242 for(UShort_t sec =0; sec < nsec; sec++) {
243 for(UShort_t strip = 0; strip < nstr; strip++) {
245 Float_t FMDmult = fmd->Multiplicity(det,ring,sec,strip);
246 if(FMDmult == 0 || FMDmult == AliESDFMD::kInvalidMult) continue;
248 Float_t nParticles=0;
250 if(FMDmult > fFMDLowCut) {
254 if (det<3) totalMultA = totalMultA + nParticles;
255 else totalMultC = totalMultC + nParticles;
261 multFMDA = totalMultA;
262 multFMDC = totalMultC;
265 AliESDZDC *esdZDC = esd->GetESDZDC();
266 zncEnergy = (Float_t) (esdZDC->GetZDCN1Energy());
267 zpcEnergy = (Float_t) (esdZDC->GetZDCP1Energy());
268 znaEnergy = (Float_t) (esdZDC->GetZDCN2Energy());
269 zpaEnergy = (Float_t) (esdZDC->GetZDCP2Energy());
270 zem1Energy = (Float_t) (esdZDC->GetZDCEMEnergy(0));
271 zem2Energy = (Float_t) (esdZDC->GetZDCEMEnergy(1));
274 else if(fAnalysisInput.CompareTo("AOD")==0){
275 //AliAODEvent *aod = dynamic_cast<AliAODEvent*> (InputEvent());
277 printf(" AOD analysis not yet implemented!!!\n\n");
281 // ***** Centrality Selection
282 fCentV0M = fHtempV0M->GetBinContent(fHtempV0M->FindBin((multV0A+multV0C)));
283 fCentFMD = fHtempFMD->GetBinContent(fHtempFMD->FindBin((multFMDA+multFMDC)));
284 fCentTRK = fHtempTRK->GetBinContent(fHtempTRK->FindBin(nTracks));
285 fCentTKL = fHtempTKL->GetBinContent(fHtempTKL->FindBin(nTracklets));
286 fCentCL0 = fHtempCL0->GetBinContent(fHtempCL0->FindBin(nClusters[0]));
288 fCentV0MvsFMD = fHtempV0MvsFMD->GetBinContent(fHtempV0MvsFMD->FindBin((multV0A+multV0C)));
289 fCentTKLvsV0M = fHtempTKLvsV0M->GetBinContent(fHtempTKLvsV0M->FindBin(nTracklets));
290 fCentZEMvsZDC = fHtempZEMvsZDC->GetBinContent(fHtempZEMvsZDC->FindBin((zem1Energy+zem2Energy)/1000.));
292 esdCent->SetCentralityV0M(fCentV0M);
293 esdCent->SetCentralityFMD(fCentFMD);
294 esdCent->SetCentralityTRK(fCentTRK);
295 esdCent->SetCentralityTKL(fCentTKL);
296 esdCent->SetCentralityCL0(fCentCL0);
297 esdCent->SetCentralityV0MvsFMD(fCentV0MvsFMD);
298 esdCent->SetCentralityTKLvsV0M(fCentTKLvsV0M);
299 esdCent->SetCentralityZEMvsZDC(fCentZEMvsZDC);
302 //________________________________________________________________________
303 void AliCentralitySelectionTask::ReadCentralityHistos()
305 fFile = new TFile(fCentfilename);
306 fHtempV0M = (TH1D*) (fFile->Get("hmultV0_percentile"));
307 fHtempFMD = (TH1D*) (fFile->Get("hmultFMD_percentile"));
308 fHtempTRK = (TH1D*) (fFile->Get("hNtracks_percentile"));
309 fHtempTKL = (TH1D*) (fFile->Get("hNtracklets_percentile"));
310 fHtempCL0 = (TH1D*) (fFile->Get("hNclusters0_percentile"));
313 void AliCentralitySelectionTask::ReadCentralityHistos2()
315 fFile2 = new TFile(fCentfilename2);
316 fHtempV0MvsFMD = (TH1D*) (fFile2->Get("hmultV0vsmultFMD_all_percentile"));
317 fHtempTKLvsV0M = (TH1D*) (fFile2->Get("hNtrackletsvsmultV0_all_percentile"));
318 fHtempZEMvsZDC = (TH1D*) (fFile2->Get("hEzemvsEzdc_all_percentile"));
321 void AliCentralitySelectionTask::SetPercentileFile(TString filename)
323 fCentfilename = filename;
324 ReadCentralityHistos();
327 void AliCentralitySelectionTask::SetPercentileFile2(TString filename)
329 fCentfilename2 = filename;
330 ReadCentralityHistos2();
333 //________________________________________________________________________
334 void AliCentralitySelectionTask::Terminate(Option_t */*option*/)
336 // Terminate analysis
340 //________________________________________________________________________