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"),
76 // Default constructor
79 //________________________________________________________________________
80 AliCentralitySelectionTask::AliCentralitySelectionTask(const char *name):
81 AliAnalysisTaskSE(name),
83 fAnalysisInput("ESD"),
91 // Default constructor
94 //________________________________________________________________________
95 AliCentralitySelectionTask& AliCentralitySelectionTask::operator=(const AliCentralitySelectionTask& c)
97 // Assignment operator
99 AliAnalysisTaskSE::operator=(c);
104 //________________________________________________________________________
105 AliCentralitySelectionTask::AliCentralitySelectionTask(const AliCentralitySelectionTask& ana):
106 AliAnalysisTaskSE(ana),
108 fAnalysisInput(ana.fDebug),
109 fIsMCInput(ana.fIsMCInput),
111 fCentfilename(ana.fCentfilename),
112 fMethod(ana.fMethod),
119 //________________________________________________________________________
120 AliCentralitySelectionTask::~AliCentralitySelectionTask()
125 //________________________________________________________________________
126 void AliCentralitySelectionTask::UserCreateOutputObjects()
128 // Create the output containers
129 if(fDebug>1) printf("AnalysisCentralitySelectionTask::UserCreateOutputObjects() \n");
132 //________________________________________________________________________
133 void AliCentralitySelectionTask::UserExec(Option_t */*option*/)
135 // Execute analysis for current event:
136 if(fDebug>1) printf(" **** AliCentralitySelectionTask::UserExec() \n");
138 Float_t zncEnergy; // ZNC Energy
139 Float_t zpcEnergy; // ZPC Energy
140 Float_t znaEnergy; // ZNA Energy
141 Float_t zpaEnergy; // ZPA Energy
142 Float_t zem1Energy; // ZEM1 Energy
143 Float_t zem2Energy; // ZEM2 Energy
145 Int_t nTracks = 0; // no. tracks
146 Int_t nTracklets = 0; // no. tracklets
147 Int_t nClusters[6]; // no. clusters on 6 ITS layers
148 Int_t nChips[2]; // no. chips on 2 SPD layers
150 Float_t multV0A = 0; // multiplicity from V0 reco side A
151 Float_t multV0C = 0; // multiplicity from V0 reco side C
152 Float_t multFMDA = 0; // multiplicity from FMD on detector A
153 Float_t multFMDC = 0; // multiplicity from FMD on detector C
155 AliESDCentrality *esdCent = 0;
157 if(fAnalysisInput.CompareTo("ESD")==0){
159 AliVEvent* event = InputEvent();
160 AliESDEvent* esd = dynamic_cast<AliESDEvent*>(event);
162 esdCent = esd->GetCentrality();
165 AliESDVZERO* esdV0 = esd->GetVZEROData();
166 multV0A=esdV0->GetMTotV0A();
167 multV0C=esdV0->GetMTotV0C();
169 // ***** CB info (tracklets, clusters, chips)
170 nTracks = event->GetNumberOfTracks();
172 const AliMultiplicity *mult = esd->GetMultiplicity();
174 nTracklets = mult->GetNumberOfTracklets();
176 for(Int_t ilay=0; ilay<6; ilay++){
177 nClusters[ilay] = mult->GetNumberOfITSClusters(ilay);
180 for(Int_t ilay=0; ilay<2; ilay++){
181 nChips[ilay] = mult->GetNumberOfFiredChips(ilay);
186 AliESDFMD *fmd = esd->GetFMDData();
187 Float_t totalMultA = 0;
188 Float_t totalMultC = 0;
189 const Float_t fFMDLowCut = 0.4;
191 for(UShort_t det=1;det<=3;det++) {
192 Int_t nRings = (det==1 ? 1 : 2);
193 for (UShort_t ir = 0; ir < nRings; ir++) {
194 Char_t ring = (ir == 0 ? 'I' : 'O');
195 UShort_t nsec = (ir == 0 ? 20 : 40);
196 UShort_t nstr = (ir == 0 ? 512 : 256);
197 for(UShort_t sec =0; sec < nsec; sec++) {
198 for(UShort_t strip = 0; strip < nstr; strip++) {
200 Float_t FMDmult = fmd->Multiplicity(det,ring,sec,strip);
201 if(FMDmult == 0 || FMDmult == AliESDFMD::kInvalidMult) continue;
203 Float_t nParticles=0;
205 if(FMDmult > fFMDLowCut) {
209 if (det<3) totalMultA = totalMultA + nParticles;
210 else totalMultC = totalMultC + nParticles;
216 multFMDA = totalMultA;
217 multFMDC = totalMultC;
220 AliESDZDC *esdZDC = esd->GetESDZDC();
221 zncEnergy = (Float_t) (esdZDC->GetZDCN1Energy());
222 zpcEnergy = (Float_t) (esdZDC->GetZDCP1Energy());
223 znaEnergy = (Float_t) (esdZDC->GetZDCN2Energy());
224 zpaEnergy = (Float_t) (esdZDC->GetZDCP2Energy());
225 zem1Energy = (Float_t) (esdZDC->GetZDCEMEnergy(0));
226 zem2Energy = (Float_t) (esdZDC->GetZDCEMEnergy(1));
229 else if(fAnalysisInput.CompareTo("AOD")==0){
230 //AliAODEvent *aod = dynamic_cast<AliAODEvent*> (InputEvent());
232 printf(" AOD analysis not yet implemented!!!\n\n");
236 // ***** Centrality Selection
237 if(fMethod.CompareTo("V0")==0){
238 fCent = fHtemp->GetBinContent(fHtemp->FindBin((multV0A+multV0C)));
240 if(fMethod.CompareTo("FMD")==0){
241 fCent = fHtemp->GetBinContent(fHtemp->FindBin((multFMDA+multFMDC)));
243 if(fMethod.CompareTo("TRACKS")==0) {
244 fCent = fHtemp->GetBinContent(fHtemp->FindBin(nTracks));
246 if(fMethod.CompareTo("TRACKLETS")==0){
247 fCent = fHtemp->GetBinContent(fHtemp->FindBin(nTracklets));
249 if(fMethod.CompareTo("CLUSTERS")==0) {
250 fCent = fHtemp->GetBinContent(fHtemp->FindBin(nClusters[0]));
252 printf(" **** centrality is %3.2f \n", fCent);
254 esdCent->SetCentrality(fCent);
257 //________________________________________________________________________
258 void AliCentralitySelectionTask::SetCentralityMethod(const char* x)
262 fFile = new TFile(fCentfilename);
264 if(fMethod.CompareTo("V0")==0)
265 fHtemp = (TH1D*) (fFile->Get("hmultV0_percentile"));
267 if(fMethod.CompareTo("FMD")==0)
268 fHtemp = (TH1D*) (fFile->Get("hmultFMD_percentile"));
270 if(fMethod.CompareTo("TRACKS")==0)
271 fHtemp = (TH1D*) (fFile->Get("hNtracks_percentile"));
273 if(fMethod.CompareTo("TRACKLETS")==0)
274 fHtemp = (TH1D*) (fFile->Get("hNtracklets_percentile"));
276 if(fMethod.CompareTo("CLUSTERS")==0)
277 fHtemp = (TH1D*) (fFile->Get("hNclusters0_percentile"));
281 //________________________________________________________________________
282 void AliCentralitySelectionTask::Terminate(Option_t */*option*/)
284 // Terminate analysis
287 //________________________________________________________________________