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"),
93 // Default constructor
96 //________________________________________________________________________
97 AliCentralitySelectionTask::AliCentralitySelectionTask(const char *name):
98 AliAnalysisTaskSE(name),
100 fAnalysisInput("ESD"),
125 // Default constructor
128 //________________________________________________________________________
129 AliCentralitySelectionTask& AliCentralitySelectionTask::operator=(const AliCentralitySelectionTask& c)
131 // Assignment operator
133 AliAnalysisTaskSE::operator=(c);
138 //________________________________________________________________________
139 AliCentralitySelectionTask::AliCentralitySelectionTask(const AliCentralitySelectionTask& ana):
140 AliAnalysisTaskSE(ana),
142 fAnalysisInput(ana.fDebug),
143 fIsMCInput(ana.fIsMCInput),
146 fCentfilename(ana.fCentfilename),
147 fCentfilename2(ana.fCentfilename2),
148 fCentV0M(ana.fCentV0M),
149 fCentFMD(ana.fCentFMD),
150 fCentTRK(ana.fCentTRK),
151 fCentTKL(ana.fCentTKL),
152 fCentCL0(ana.fCentCL0),
153 fCentCL1(ana.fCentCL1),
154 fCentV0MvsFMD(ana.fCentV0MvsFMD),
155 fCentTKLvsV0M(ana.fCentTKLvsV0M),
156 fCentZEMvsZDC(ana.fCentZEMvsZDC),
157 fHtempV0M(ana.fHtempV0M),
158 fHtempFMD(ana.fHtempFMD),
159 fHtempTRK(ana.fHtempTRK),
160 fHtempTKL(ana.fHtempTKL),
161 fHtempCL0(ana.fHtempCL0),
162 fHtempCL1(ana.fHtempCL1),
163 fHtempV0MvsFMD(ana.fHtempV0MvsFMD),
164 fHtempTKLvsV0M(ana.fHtempTKLvsV0M),
165 fHtempZEMvsZDC(ana.fHtempZEMvsZDC)
170 //________________________________________________________________________
171 AliCentralitySelectionTask::~AliCentralitySelectionTask()
176 //________________________________________________________________________
177 void AliCentralitySelectionTask::UserCreateOutputObjects()
179 // Create the output containers
180 if(fDebug>1) printf("AnalysisCentralitySelectionTask::UserCreateOutputObjects() \n");
183 //________________________________________________________________________
184 void AliCentralitySelectionTask::UserExec(Option_t */*option*/)
186 // Execute analysis for current event:
187 if(fDebug>1) printf(" **** AliCentralitySelectionTask::UserExec() \n");
189 Float_t zncEnergy; // ZNC Energy
190 Float_t zpcEnergy; // ZPC Energy
191 Float_t znaEnergy; // ZNA Energy
192 Float_t zpaEnergy; // ZPA Energy
193 Float_t zem1Energy = 0.; // ZEM1 Energy
194 Float_t zem2Energy = 0.; // ZEM2 Energy
196 Int_t nTracks = 0; // no. tracks
197 Int_t nTracklets = 0; // no. tracklets
198 Int_t nClusters[6]; // no. clusters on 6 ITS layers
199 Int_t nChips[2]; // no. chips on 2 SPD layers
201 Float_t multV0A = 0; // multiplicity from V0 reco side A
202 Float_t multV0C = 0; // multiplicity from V0 reco side C
203 Float_t multFMDA = 0; // multiplicity from FMD on detector A
204 Float_t multFMDC = 0; // multiplicity from FMD on detector C
206 AliESDCentrality *esdCent = 0;
208 if(fAnalysisInput.CompareTo("ESD")==0){
210 AliVEvent* event = InputEvent();
211 AliESDEvent* esd = dynamic_cast<AliESDEvent*>(event);
213 esdCent = esd->GetCentrality();
216 AliESDVZERO* esdV0 = esd->GetVZEROData();
217 multV0A=esdV0->GetMTotV0A();
218 multV0C=esdV0->GetMTotV0C();
220 // ***** CB info (tracklets, clusters, chips)
221 nTracks = event->GetNumberOfTracks();
223 const AliMultiplicity *mult = esd->GetMultiplicity();
225 nTracklets = mult->GetNumberOfTracklets();
227 for(Int_t ilay=0; ilay<6; ilay++){
228 nClusters[ilay] = mult->GetNumberOfITSClusters(ilay);
231 for(Int_t ilay=0; ilay<2; ilay++){
232 nChips[ilay] = mult->GetNumberOfFiredChips(ilay);
237 AliESDFMD *fmd = esd->GetFMDData();
238 Float_t totalMultA = 0;
239 Float_t totalMultC = 0;
240 const Float_t fFMDLowCut = 0.4;
242 for(UShort_t det=1;det<=3;det++) {
243 Int_t nRings = (det==1 ? 1 : 2);
244 for (UShort_t ir = 0; ir < nRings; ir++) {
245 Char_t ring = (ir == 0 ? 'I' : 'O');
246 UShort_t nsec = (ir == 0 ? 20 : 40);
247 UShort_t nstr = (ir == 0 ? 512 : 256);
248 for(UShort_t sec =0; sec < nsec; sec++) {
249 for(UShort_t strip = 0; strip < nstr; strip++) {
251 Float_t FMDmult = fmd->Multiplicity(det,ring,sec,strip);
252 if(FMDmult == 0 || FMDmult == AliESDFMD::kInvalidMult) continue;
254 Float_t nParticles=0;
256 if(FMDmult > fFMDLowCut) {
260 if (det<3) totalMultA = totalMultA + nParticles;
261 else totalMultC = totalMultC + nParticles;
267 multFMDA = totalMultA;
268 multFMDC = totalMultC;
271 AliESDZDC *esdZDC = esd->GetESDZDC();
272 zncEnergy = (Float_t) (esdZDC->GetZDCN1Energy());
273 zpcEnergy = (Float_t) (esdZDC->GetZDCP1Energy());
274 znaEnergy = (Float_t) (esdZDC->GetZDCN2Energy());
275 zpaEnergy = (Float_t) (esdZDC->GetZDCP2Energy());
276 zem1Energy = (Float_t) (esdZDC->GetZDCEMEnergy(0));
277 zem2Energy = (Float_t) (esdZDC->GetZDCEMEnergy(1));
280 else if(fAnalysisInput.CompareTo("AOD")==0){
281 //AliAODEvent *aod = dynamic_cast<AliAODEvent*> (InputEvent());
283 printf(" AOD analysis not yet implemented!!!\n\n");
287 // ***** Centrality Selection
288 fCentV0M = fHtempV0M->GetBinContent(fHtempV0M->FindBin((multV0A+multV0C)));
289 fCentFMD = fHtempFMD->GetBinContent(fHtempFMD->FindBin((multFMDA+multFMDC)));
290 fCentTRK = fHtempTRK->GetBinContent(fHtempTRK->FindBin(nTracks));
291 fCentTKL = fHtempTKL->GetBinContent(fHtempTKL->FindBin(nTracklets));
292 fCentCL0 = fHtempCL0->GetBinContent(fHtempCL0->FindBin(nClusters[0]));
293 fCentCL1 = fHtempCL1->GetBinContent(fHtempCL1->FindBin(nClusters[1]));
295 fCentV0MvsFMD = fHtempV0MvsFMD->GetBinContent(fHtempV0MvsFMD->FindBin((multV0A+multV0C)));
296 fCentTKLvsV0M = fHtempTKLvsV0M->GetBinContent(fHtempTKLvsV0M->FindBin(nTracklets));
297 fCentZEMvsZDC = fHtempZEMvsZDC->GetBinContent(fHtempZEMvsZDC->FindBin((zem1Energy+zem2Energy)/1000.));
299 esdCent->SetCentralityV0M(fCentV0M);
300 esdCent->SetCentralityFMD(fCentFMD);
301 esdCent->SetCentralityTRK(fCentTRK);
302 esdCent->SetCentralityTKL(fCentTKL);
303 esdCent->SetCentralityCL0(fCentCL0);
304 esdCent->SetCentralityCL1(fCentCL1);
305 esdCent->SetCentralityV0MvsFMD(fCentV0MvsFMD);
306 esdCent->SetCentralityTKLvsV0M(fCentTKLvsV0M);
307 esdCent->SetCentralityZEMvsZDC(fCentZEMvsZDC);
310 //________________________________________________________________________
311 void AliCentralitySelectionTask::ReadCentralityHistos()
313 fFile = new TFile(fCentfilename);
314 fHtempV0M = (TH1D*) (fFile->Get("hmultV0_percentile"));
315 fHtempFMD = (TH1D*) (fFile->Get("hmultFMD_percentile"));
316 fHtempTRK = (TH1D*) (fFile->Get("hNtracks_percentile"));
317 fHtempTKL = (TH1D*) (fFile->Get("hNtracklets_percentile"));
318 fHtempCL0 = (TH1D*) (fFile->Get("hNclusters0_percentile"));
319 fHtempCL1 = (TH1D*) (fFile->Get("hNclusters1_percentile"));
322 void AliCentralitySelectionTask::ReadCentralityHistos2()
324 fFile2 = new TFile(fCentfilename2);
325 fHtempV0MvsFMD = (TH1D*) (fFile2->Get("hmultV0vsmultFMD_all_percentile"));
326 fHtempTKLvsV0M = (TH1D*) (fFile2->Get("hNtrackletsvsmultV0_all_percentile"));
327 fHtempZEMvsZDC = (TH1D*) (fFile2->Get("hEzemvsEzdc_all_percentile"));
330 void AliCentralitySelectionTask::SetPercentileFile(TString filename)
332 fCentfilename = filename;
333 ReadCentralityHistos();
336 void AliCentralitySelectionTask::SetPercentileFile2(TString filename)
338 fCentfilename2 = filename;
339 ReadCentralityHistos2();
342 //________________________________________________________________________
343 void AliCentralitySelectionTask::Terminate(Option_t */*option*/)
345 // Terminate analysis
349 //________________________________________________________________________