]>
Commit | Line | Data |
---|---|---|
e8472cd0 | 1 | /************************************************************************** |
2 | * Copyright(c) 1998-2008, ALICE Experiment at CERN, All rights reserved. * | |
3 | * * | |
4 | * Author: The ALICE Off-line Project. * | |
5 | * Contributors are mentioned in the code where appropriate. * | |
6 | * * | |
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 | **************************************************************************/ | |
15 | ||
16 | //***************************************************** | |
17 | // Class AliCentralitySelectionTask | |
18 | // Class to analyze determine centrality | |
19 | // author: Alberica Toia | |
20 | //***************************************************** | |
21 | ||
e508972c | 22 | #include "AliCentralitySelectionTask.h" |
23 | ||
e8472cd0 | 24 | #include <TTree.h> |
25 | #include <TList.h> | |
26 | #include <TH1F.h> | |
27 | #include <TH2F.h> | |
28 | #include <TProfile.h> | |
29 | #include <TFile.h> | |
68e344b7 | 30 | #include <TObjString.h> |
e8472cd0 | 31 | #include <TString.h> |
32 | #include <TCanvas.h> | |
9f14d90a | 33 | #include <TROOT.h> |
34 | #include <TDirectory.h> | |
4fd15e3c | 35 | #include <TSystem.h> |
e8472cd0 | 36 | #include <iostream> |
37 | ||
38 | #include "AliAnalysisManager.h" | |
39 | #include "AliVEvent.h" | |
40 | #include "AliESD.h" | |
41 | #include "AliESDEvent.h" | |
42 | #include "AliESDHeader.h" | |
43 | #include "AliESDInputHandler.h" | |
44 | #include "AliESDZDC.h" | |
45 | #include "AliESDFMD.h" | |
46 | #include "AliESDVZERO.h" | |
fba4b2e2 | 47 | #include "AliCentrality.h" |
05915818 | 48 | #include "AliESDtrackCuts.h" |
e8472cd0 | 49 | #include "AliMultiplicity.h" |
50 | #include "AliAODHandler.h" | |
51 | #include "AliAODEvent.h" | |
62164ba5 | 52 | #include "AliESDVertex.h" |
e8472cd0 | 53 | #include "AliAODVertex.h" |
54 | #include "AliAODMCHeader.h" | |
55 | #include "AliMCEvent.h" | |
56 | #include "AliMCEventHandler.h" | |
57 | #include "AliMCParticle.h" | |
58 | #include "AliStack.h" | |
59 | #include "AliHeader.h" | |
60 | #include "AliAODMCParticle.h" | |
61 | #include "AliAnalysisTaskSE.h" | |
62 | #include "AliGenEventHeader.h" | |
63 | #include "AliGenHijingEventHeader.h" | |
64 | #include "AliPhysicsSelectionTask.h" | |
65 | #include "AliPhysicsSelection.h" | |
66 | #include "AliBackgroundSelection.h" | |
e508972c | 67 | #include "AliESDUtils.h" |
e8472cd0 | 68 | |
69 | ClassImp(AliCentralitySelectionTask) | |
70 | ||
71 | ||
72 | //________________________________________________________________________ | |
73 | AliCentralitySelectionTask::AliCentralitySelectionTask(): | |
74 | AliAnalysisTaskSE(), | |
75 | fDebug(0), | |
76 | fAnalysisInput("ESD"), | |
77 | fIsMCInput(kFALSE), | |
7e8df7b3 | 78 | fDirName("$ALICE_ROOT/OADB/COMMON/CENTRALITY/data"), |
e8472cd0 | 79 | fFile(0), |
d15bf53f | 80 | fFile2(0), |
68e344b7 | 81 | fCurrentRun(-1), |
62164ba5 | 82 | fRunNo(-1), |
05915818 | 83 | fTrackCuts(0), |
d15bf53f | 84 | fCentV0M(0), |
85 | fCentFMD(0), | |
86 | fCentTRK(0), | |
87 | fCentTKL(0), | |
88 | fCentCL0(0), | |
be0d4e9b | 89 | fCentCL1(0), |
d15bf53f | 90 | fCentV0MvsFMD(0), |
91 | fCentTKLvsV0M(0), | |
92 | fCentZEMvsZDC(0), | |
93 | fHtempV0M(0), | |
94 | fHtempFMD(0), | |
95 | fHtempTRK(0), | |
96 | fHtempTKL(0), | |
97 | fHtempCL0(0), | |
be0d4e9b | 98 | fHtempCL1(0), |
d15bf53f | 99 | fHtempV0MvsFMD(0), |
100 | fHtempTKLvsV0M(0), | |
05915818 | 101 | fHtempZEMvsZDC(0), |
102 | fOutputList(0), | |
103 | fHOutCentV0M (0), | |
104 | fHOutCentFMD (0), | |
105 | fHOutCentTRK (0), | |
106 | fHOutCentTKL (0), | |
107 | fHOutCentCL0 (0), | |
108 | fHOutCentCL1 (0), | |
109 | fHOutCentV0MvsFMD(0), | |
110 | fHOutCentTKLvsV0M(0), | |
36ee40df | 111 | fHOutCentZEMvsZDC(0), |
112 | fHOutMultV0M(0), | |
a3127f95 | 113 | fHOutMultV0R(0), |
36ee40df | 114 | fHOutMultFMD(0), |
115 | fHOutMultTRK(0), | |
116 | fHOutMultTKL(0), | |
117 | fHOutMultCL0(0), | |
118 | fHOutMultCL1(0), | |
119 | fHOutMultV0MvsZDC(0), | |
ab57f513 | 120 | fHOutMultZEMvsZDC(0), |
121 | fHOutMultV0MvsCL1(0), | |
122 | fHOutMultV0MvsTRK(0), | |
123 | fHOutMultTRKvsCL1(0) | |
e8472cd0 | 124 | { |
125 | // Default constructor | |
68e344b7 | 126 | AliInfo("Centrality Selection enabled."); |
e8472cd0 | 127 | } |
128 | ||
129 | //________________________________________________________________________ | |
130 | AliCentralitySelectionTask::AliCentralitySelectionTask(const char *name): | |
131 | AliAnalysisTaskSE(name), | |
132 | fDebug(0), | |
133 | fAnalysisInput("ESD"), | |
134 | fIsMCInput(kFALSE), | |
7e8df7b3 | 135 | fDirName("$ALICE_ROOT/OADB/COMMON/CENTRALITY/data"), |
e8472cd0 | 136 | fFile(0), |
d15bf53f | 137 | fFile2(0), |
68e344b7 | 138 | fCurrentRun(-1), |
62164ba5 | 139 | fRunNo(-1), |
05915818 | 140 | fTrackCuts(0), |
d15bf53f | 141 | fCentV0M(0), |
142 | fCentFMD(0), | |
143 | fCentTRK(0), | |
144 | fCentTKL(0), | |
145 | fCentCL0(0), | |
be0d4e9b | 146 | fCentCL1(0), |
d15bf53f | 147 | fCentV0MvsFMD(0), |
148 | fCentTKLvsV0M(0), | |
149 | fCentZEMvsZDC(0), | |
150 | fHtempV0M(0), | |
151 | fHtempFMD(0), | |
152 | fHtempTRK(0), | |
153 | fHtempTKL(0), | |
154 | fHtempCL0(0), | |
be0d4e9b | 155 | fHtempCL1(0), |
d15bf53f | 156 | fHtempV0MvsFMD(0), |
157 | fHtempTKLvsV0M(0), | |
05915818 | 158 | fHtempZEMvsZDC(0), |
159 | fOutputList(0), | |
160 | fHOutCentV0M (0), | |
161 | fHOutCentFMD (0), | |
162 | fHOutCentTRK (0), | |
163 | fHOutCentTKL (0), | |
164 | fHOutCentCL0 (0), | |
165 | fHOutCentCL1 (0), | |
166 | fHOutCentV0MvsFMD(0), | |
167 | fHOutCentTKLvsV0M(0), | |
36ee40df | 168 | fHOutCentZEMvsZDC(0), |
169 | fHOutMultV0M(0), | |
a3127f95 | 170 | fHOutMultV0R(0), |
36ee40df | 171 | fHOutMultFMD(0), |
172 | fHOutMultTRK(0), | |
173 | fHOutMultTKL(0), | |
174 | fHOutMultCL0(0), | |
175 | fHOutMultCL1(0), | |
176 | fHOutMultV0MvsZDC(0), | |
ab57f513 | 177 | fHOutMultZEMvsZDC(0), |
178 | fHOutMultV0MvsCL1(0), | |
179 | fHOutMultV0MvsTRK(0), | |
180 | fHOutMultTRKvsCL1(0) | |
e8472cd0 | 181 | { |
182 | // Default constructor | |
68e344b7 | 183 | AliInfo("Centrality Selection enabled."); |
05915818 | 184 | DefineOutput(1, TList::Class()); |
e8472cd0 | 185 | } |
186 | ||
187 | //________________________________________________________________________ | |
188 | AliCentralitySelectionTask& AliCentralitySelectionTask::operator=(const AliCentralitySelectionTask& c) | |
189 | { | |
190 | // Assignment operator | |
191 | if (this!=&c) { | |
192 | AliAnalysisTaskSE::operator=(c); | |
193 | } | |
194 | return *this; | |
195 | } | |
196 | ||
197 | //________________________________________________________________________ | |
198 | AliCentralitySelectionTask::AliCentralitySelectionTask(const AliCentralitySelectionTask& ana): | |
199 | AliAnalysisTaskSE(ana), | |
200 | fDebug(ana.fDebug), | |
201 | fAnalysisInput(ana.fDebug), | |
202 | fIsMCInput(ana.fIsMCInput), | |
ba319e9e | 203 | fDirName(ana.fDirName), |
e8472cd0 | 204 | fFile(ana.fFile), |
d15bf53f | 205 | fFile2(ana.fFile2), |
68e344b7 | 206 | fCurrentRun(ana.fCurrentRun), |
62164ba5 | 207 | fRunNo(ana.fRunNo), |
05915818 | 208 | fTrackCuts(ana.fTrackCuts), |
d15bf53f | 209 | fCentV0M(ana.fCentV0M), |
210 | fCentFMD(ana.fCentFMD), | |
211 | fCentTRK(ana.fCentTRK), | |
212 | fCentTKL(ana.fCentTKL), | |
213 | fCentCL0(ana.fCentCL0), | |
be0d4e9b | 214 | fCentCL1(ana.fCentCL1), |
d15bf53f | 215 | fCentV0MvsFMD(ana.fCentV0MvsFMD), |
216 | fCentTKLvsV0M(ana.fCentTKLvsV0M), | |
217 | fCentZEMvsZDC(ana.fCentZEMvsZDC), | |
218 | fHtempV0M(ana.fHtempV0M), | |
219 | fHtempFMD(ana.fHtempFMD), | |
220 | fHtempTRK(ana.fHtempTRK), | |
221 | fHtempTKL(ana.fHtempTKL), | |
222 | fHtempCL0(ana.fHtempCL0), | |
be0d4e9b | 223 | fHtempCL1(ana.fHtempCL1), |
d15bf53f | 224 | fHtempV0MvsFMD(ana.fHtempV0MvsFMD), |
225 | fHtempTKLvsV0M(ana.fHtempTKLvsV0M), | |
05915818 | 226 | fHtempZEMvsZDC(ana.fHtempZEMvsZDC), |
227 | fOutputList(ana.fOutputList), | |
228 | fHOutCentV0M (ana.fHOutCentV0M ), | |
229 | fHOutCentFMD (ana.fHOutCentFMD ), | |
230 | fHOutCentTRK (ana.fHOutCentTRK ), | |
231 | fHOutCentTKL (ana.fHOutCentTKL ), | |
232 | fHOutCentCL0 (ana.fHOutCentCL0 ), | |
233 | fHOutCentCL1 (ana.fHOutCentCL1 ), | |
234 | fHOutCentV0MvsFMD(ana.fHOutCentV0MvsFMD), | |
235 | fHOutCentTKLvsV0M(ana.fHOutCentTKLvsV0M), | |
36ee40df | 236 | fHOutCentZEMvsZDC(ana.fHOutCentZEMvsZDC), |
237 | fHOutMultV0M(ana.fHOutMultV0M), | |
e508972c | 238 | fHOutMultV0R(ana.fHOutMultV0R), |
36ee40df | 239 | fHOutMultFMD(ana.fHOutMultFMD), |
240 | fHOutMultTRK(ana.fHOutMultTRK), | |
241 | fHOutMultTKL(ana.fHOutMultTKL), | |
242 | fHOutMultCL0(ana.fHOutMultCL0), | |
243 | fHOutMultCL1(ana.fHOutMultCL1), | |
244 | fHOutMultV0MvsZDC(ana.fHOutMultV0MvsZDC), | |
ab57f513 | 245 | fHOutMultZEMvsZDC(ana.fHOutMultZEMvsZDC), |
246 | fHOutMultV0MvsCL1(ana.fHOutMultV0MvsCL1), | |
247 | fHOutMultV0MvsTRK(ana.fHOutMultV0MvsTRK), | |
248 | fHOutMultTRKvsCL1(ana.fHOutMultTRKvsCL1) | |
e8472cd0 | 249 | { |
250 | // Copy Constructor | |
251 | } | |
252 | ||
253 | //________________________________________________________________________ | |
68e344b7 | 254 | AliCentralitySelectionTask::~AliCentralitySelectionTask() |
255 | { | |
05915818 | 256 | // Destructor |
257 | if (fOutputList && !AliAnalysisManager::GetAnalysisManager()->IsProofMode()) delete fOutputList; | |
4fd15e3c | 258 | if (fTrackCuts) delete fTrackCuts; |
68e344b7 | 259 | } |
e8472cd0 | 260 | |
261 | //________________________________________________________________________ | |
262 | void AliCentralitySelectionTask::UserCreateOutputObjects() | |
263 | { | |
264 | // Create the output containers | |
265 | if(fDebug>1) printf("AnalysisCentralitySelectionTask::UserCreateOutputObjects() \n"); | |
68e344b7 | 266 | AliLog::SetClassDebugLevel("AliCentralitySelectionTask", AliLog::kInfo); |
05915818 | 267 | |
268 | fOutputList = new TList(); | |
269 | fOutputList->SetOwner(); | |
270 | fHOutCentV0M = new TH1F("fHOutCentV0M","fHOutCentV0M; Centrality V0",101,-0.5,100.5); | |
271 | fHOutCentFMD = new TH1F("fHOutCentFMD","fHOutCentFMD; Centrality FMD",101,-0.5,100.5); | |
272 | fHOutCentTRK = new TH1F("fHOutCentTRK","fHOutCentTRK; Centrality TPC",101,-0.5,100.5); | |
273 | fHOutCentTKL = new TH1F("fHOutCentTKL","fHOutCentTKL; Centrality tracklets",101,-0.5,100.5); | |
274 | fHOutCentCL0 = new TH1F("fHOutCentCL0","fHOutCentCL0; Centrality SPD inner",101,-0.5,100.5); | |
275 | fHOutCentCL1 = new TH1F("fHOutCentCL1","fHOutCentCL1; Centrality SPD outer",101,-0.5,100.5); | |
276 | fHOutCentV0MvsFMD= new TH1F("fHOutCentV0MvsFMD","fHOutCentV0MvsFMD; Centrality V0 vs FMD",101,-0.5,100.5); | |
277 | fHOutCentTKLvsV0M= new TH1F("fHOutCentTKLvsV0M","fHOutCentTKLvsV0M; Centrality tracklets vs V0",101,-0.5,100.5); | |
278 | fHOutCentZEMvsZDC= new TH1F("fHOutCentZEMvsZDC","fHOutCentZEMvsZDC; Centrality ZEM vs ZDC",101,-0.5,100.5); | |
279 | ||
36ee40df | 280 | fHOutMultV0M = new TH1F("fHOutMultV0M","fHOutMultV0M; Multiplicity V0",25000,0,25000); |
a3127f95 | 281 | fHOutMultV0R = new TH1F("fHOutMultV0R","fHOutMultV0R; Multiplicity V0",25000,0,25000); |
36ee40df | 282 | fHOutMultFMD = new TH1F("fHOutMultFMD","fHOutMultFMD; Multiplicity FMD",24000,0,24000); |
283 | fHOutMultTRK = new TH1F("fHOutMultTRK","fHOutMultTRK; Multiplicity TPC",4000,0,4000); | |
284 | fHOutMultTKL = new TH1F("fHOutMultTKL","fHOutMultTKL; Multiplicity tracklets",5000,0,5000); | |
285 | fHOutMultCL0 = new TH1F("fHOutMultCL0","fHOutMultCL0; Multiplicity SPD inner",7000,0,7000); | |
286 | fHOutMultCL1 = new TH1F("fHOutMultCL1","fHOutMultCL1; Multiplicity SPD outer",7000,0,7000); | |
ab57f513 | 287 | fHOutMultV0MvsZDC = new TH2F("fHOutMultV0MvsZDC","fHOutMultV0MvsZDC; Multiplicity V0; Energy ZDC",500,0,25000,500,0,6000); |
a7d618ed | 288 | fHOutMultZEMvsZDC = new TH2F("fHOutMultZEMvsZDC","fHOutMultZEMvsZDC; Energy ZEM; Energy ZDC",500,0,2500,500,0,6000); |
ab57f513 | 289 | fHOutMultV0MvsCL1 = new TH2F("fHOutMultV0MvsCL1","fHOutMultV0MvsCL1; Multiplicity V0; Multiplicity SPD outer",2500,0,25000,700,0,7000); |
290 | fHOutMultV0MvsTRK = new TH2F("fHOutMultV0MvsTRK","fHOutMultV0MvsTRK; Multiplicity V0; Multiplicity TPC",2500,0,25000,400,0,4000); | |
291 | fHOutMultTRKvsCL1 = new TH2F("fHOutMultTRKvsCL1","fHOutMultTRKvsCL1; Multiplicity TPC; Multiplicity SPD outer",400,0,4000,700,0,7000); | |
36ee40df | 292 | |
05915818 | 293 | fOutputList->Add( fHOutCentV0M ); |
294 | fOutputList->Add( fHOutCentFMD ); | |
295 | fOutputList->Add( fHOutCentTRK ); | |
296 | fOutputList->Add( fHOutCentTKL ); | |
297 | fOutputList->Add( fHOutCentCL0 ); | |
298 | fOutputList->Add( fHOutCentCL1 ); | |
299 | fOutputList->Add( fHOutCentV0MvsFMD); | |
300 | fOutputList->Add( fHOutCentTKLvsV0M); | |
301 | fOutputList->Add( fHOutCentZEMvsZDC); | |
36ee40df | 302 | fOutputList->Add( fHOutMultV0M); |
a3127f95 | 303 | fOutputList->Add( fHOutMultV0R); |
36ee40df | 304 | fOutputList->Add( fHOutMultFMD); |
305 | fOutputList->Add( fHOutMultTRK); | |
306 | fOutputList->Add( fHOutMultTKL); | |
307 | fOutputList->Add( fHOutMultCL0); | |
308 | fOutputList->Add( fHOutMultCL1); | |
309 | fOutputList->Add( fHOutMultV0MvsZDC); | |
310 | fOutputList->Add( fHOutMultZEMvsZDC); | |
ab57f513 | 311 | fOutputList->Add( fHOutMultV0MvsCL1); |
312 | fOutputList->Add( fHOutMultV0MvsTRK); | |
313 | fOutputList->Add( fHOutMultTRKvsCL1); | |
36ee40df | 314 | |
315 | ||
4fd15e3c | 316 | fTrackCuts = AliESDtrackCuts::GetStandardTPCOnlyTrackCuts(); |
05915818 | 317 | |
318 | PostData(1, fOutputList); | |
e8472cd0 | 319 | } |
320 | ||
321 | //________________________________________________________________________ | |
322 | void AliCentralitySelectionTask::UserExec(Option_t */*option*/) | |
323 | { | |
324 | // Execute analysis for current event: | |
325 | if(fDebug>1) printf(" **** AliCentralitySelectionTask::UserExec() \n"); | |
326 | ||
36ee40df | 327 | Float_t zncEnergy = 0.; // ZNC Energy |
328 | Float_t zpcEnergy = 0.; // ZPC Energy | |
329 | Float_t znaEnergy = 0.; // ZNA Energy | |
330 | Float_t zpaEnergy = 0.; // ZPA Energy | |
d15bf53f | 331 | Float_t zem1Energy = 0.; // ZEM1 Energy |
332 | Float_t zem2Energy = 0.; // ZEM2 Energy | |
e8472cd0 | 333 | |
be0d4e9b | 334 | Int_t nTracks = 0; // no. tracks |
d15bf53f | 335 | Int_t nTracklets = 0; // no. tracklets |
336 | Int_t nClusters[6]; // no. clusters on 6 ITS layers | |
337 | Int_t nChips[2]; // no. chips on 2 SPD layers | |
62164ba5 | 338 | Float_t spdCorr =0; // corrected spd2 multiplicity |
e8472cd0 | 339 | |
d15bf53f | 340 | Float_t multV0A = 0; // multiplicity from V0 reco side A |
341 | Float_t multV0C = 0; // multiplicity from V0 reco side C | |
342 | Float_t multFMDA = 0; // multiplicity from FMD on detector A | |
343 | Float_t multFMDC = 0; // multiplicity from FMD on detector C | |
e8472cd0 | 344 | |
62164ba5 | 345 | Short_t v0Corr = 0; // corrected V0 multiplicity |
346 | Short_t v0CorrResc = 0; // corrected and rescaled V0 multiplicity | |
347 | ||
348 | Float_t zvtx =0; // z-vertex SPD | |
349 | ||
fba4b2e2 | 350 | AliCentrality *esdCent = 0; |
e8472cd0 | 351 | |
352 | if(fAnalysisInput.CompareTo("ESD")==0){ | |
353 | ||
354 | AliVEvent* event = InputEvent(); | |
355 | AliESDEvent* esd = dynamic_cast<AliESDEvent*>(event); | |
05915818 | 356 | |
357 | if (fRunNo<=0) { | |
358 | if (SetupRun(esd)<0) | |
359 | AliFatal("Centrality File not available for this run"); | |
360 | } | |
68e344b7 | 361 | |
e8472cd0 | 362 | esdCent = esd->GetCentrality(); |
363 | ||
364 | // ***** V0 info | |
365 | AliESDVZERO* esdV0 = esd->GetVZEROData(); | |
366 | multV0A=esdV0->GetMTotV0A(); | |
367 | multV0C=esdV0->GetMTotV0C(); | |
62164ba5 | 368 | |
369 | float v0CorrR; | |
e508972c | 370 | v0Corr = (Short_t)AliESDUtils::GetCorrV0(esd,v0CorrR); |
62164ba5 | 371 | v0CorrResc = (Short_t)v0CorrR; |
372 | ||
373 | // ***** Vertex Info | |
374 | const AliESDVertex* vtxESD = esd->GetPrimaryVertexSPD(); | |
375 | zvtx = vtxESD->GetZ(); | |
376 | ||
e8472cd0 | 377 | // ***** CB info (tracklets, clusters, chips) |
05915818 | 378 | //nTracks = event->GetNumberOfTracks(); |
05915818 | 379 | nTracks = fTrackCuts ? (Short_t)fTrackCuts->GetReferenceMultiplicity(esd,kTRUE):-1; |
e8472cd0 | 380 | |
381 | const AliMultiplicity *mult = esd->GetMultiplicity(); | |
382 | ||
383 | nTracklets = mult->GetNumberOfTracklets(); | |
384 | ||
385 | for(Int_t ilay=0; ilay<6; ilay++){ | |
386 | nClusters[ilay] = mult->GetNumberOfITSClusters(ilay); | |
387 | } | |
388 | ||
389 | for(Int_t ilay=0; ilay<2; ilay++){ | |
390 | nChips[ilay] = mult->GetNumberOfFiredChips(ilay); | |
391 | } | |
62164ba5 | 392 | |
e508972c | 393 | spdCorr = AliESDUtils::GetCorrSPD2(nClusters[1],zvtx); |
e8472cd0 | 394 | |
395 | // ***** FMD info | |
396 | AliESDFMD *fmd = esd->GetFMDData(); | |
397 | Float_t totalMultA = 0; | |
398 | Float_t totalMultC = 0; | |
399 | const Float_t fFMDLowCut = 0.4; | |
400 | ||
401 | for(UShort_t det=1;det<=3;det++) { | |
402 | Int_t nRings = (det==1 ? 1 : 2); | |
403 | for (UShort_t ir = 0; ir < nRings; ir++) { | |
404 | Char_t ring = (ir == 0 ? 'I' : 'O'); | |
405 | UShort_t nsec = (ir == 0 ? 20 : 40); | |
406 | UShort_t nstr = (ir == 0 ? 512 : 256); | |
407 | for(UShort_t sec =0; sec < nsec; sec++) { | |
408 | for(UShort_t strip = 0; strip < nstr; strip++) { | |
409 | ||
410 | Float_t FMDmult = fmd->Multiplicity(det,ring,sec,strip); | |
411 | if(FMDmult == 0 || FMDmult == AliESDFMD::kInvalidMult) continue; | |
412 | ||
413 | Float_t nParticles=0; | |
414 | ||
415 | if(FMDmult > fFMDLowCut) { | |
416 | nParticles = 1.; | |
417 | } | |
418 | ||
419 | if (det<3) totalMultA = totalMultA + nParticles; | |
420 | else totalMultC = totalMultC + nParticles; | |
421 | ||
422 | } | |
423 | } | |
424 | } | |
425 | } | |
426 | multFMDA = totalMultA; | |
427 | multFMDC = totalMultC; | |
428 | ||
429 | // ***** ZDC info | |
430 | AliESDZDC *esdZDC = esd->GetESDZDC(); | |
36ee40df | 431 | zncEnergy = (Float_t) (esdZDC->GetZDCN1Energy())/8.; |
432 | zpcEnergy = (Float_t) (esdZDC->GetZDCP1Energy())/8.; | |
433 | znaEnergy = (Float_t) (esdZDC->GetZDCN2Energy())/8.; | |
434 | zpaEnergy = (Float_t) (esdZDC->GetZDCP2Energy())/8.; | |
435 | zem1Energy = (Float_t) (esdZDC->GetZDCEMEnergy(0))/8.; | |
436 | zem2Energy = (Float_t) (esdZDC->GetZDCEMEnergy(1))/8.; | |
e8472cd0 | 437 | |
438 | } | |
439 | else if(fAnalysisInput.CompareTo("AOD")==0){ | |
440 | //AliAODEvent *aod = dynamic_cast<AliAODEvent*> (InputEvent()); | |
441 | // to be implemented | |
442 | printf(" AOD analysis not yet implemented!!!\n\n"); | |
443 | return; | |
444 | } | |
445 | ||
d15bf53f | 446 | // ***** Centrality Selection |
62164ba5 | 447 | if(fHtempV0M) fCentV0M = fHtempV0M->GetBinContent(fHtempV0M->FindBin((v0Corr))); |
68e344b7 | 448 | /// else printf(" Centrality by V0 not available!!!\n\n"); |
99df2fab | 449 | if(fHtempFMD) fCentFMD = fHtempFMD->GetBinContent(fHtempFMD->FindBin((multFMDA+multFMDC))); |
68e344b7 | 450 | // else printf(" Centrality by FMD not available!!!\n\n"); |
99df2fab | 451 | if(fHtempTRK) fCentTRK = fHtempTRK->GetBinContent(fHtempTRK->FindBin(nTracks)); |
68e344b7 | 452 | // else printf(" Centrality by TRK not available!!!\n\n"); |
99df2fab | 453 | if(fHtempTKL) fCentTKL = fHtempTKL->GetBinContent(fHtempTKL->FindBin(nTracklets)); |
68e344b7 | 454 | // else printf(" Centrality by TKL not available!!!\n\n"); |
99df2fab | 455 | if(fHtempCL0) fCentCL0 = fHtempCL0->GetBinContent(fHtempCL0->FindBin(nClusters[0])); |
68e344b7 | 456 | // else printf(" Centrality by CL0 not available!!!\n\n"); |
62164ba5 | 457 | if(fHtempCL1) fCentCL1 = fHtempCL1->GetBinContent(fHtempCL1->FindBin(spdCorr)); |
68e344b7 | 458 | /// else printf(" Centrality by CL1 not available!!!\n\n"); |
d15bf53f | 459 | |
99df2fab | 460 | if(fHtempV0MvsFMD) fCentV0MvsFMD = fHtempV0MvsFMD->GetBinContent(fHtempV0MvsFMD->FindBin((multV0A+multV0C))); |
68e344b7 | 461 | // else printf(" Centrality by V0 vs FMD not available!!!\n\n"); |
99df2fab | 462 | if(fHtempTKLvsV0M) fCentTKLvsV0M = fHtempTKLvsV0M->GetBinContent(fHtempTKLvsV0M->FindBin(nTracklets)); |
68e344b7 | 463 | // else printf(" Centrality by V0 vs TKL not available!!!\n\n"); |
99df2fab | 464 | if(fHtempZEMvsZDC) fCentZEMvsZDC = fHtempZEMvsZDC->GetBinContent(fHtempZEMvsZDC->FindBin((zem1Energy+zem2Energy)/1000.)); |
68e344b7 | 465 | // else printf(" Centrality by ZEM vs ZDC not available!!!\n\n"); |
466 | ||
d15bf53f | 467 | esdCent->SetCentralityV0M(fCentV0M); |
468 | esdCent->SetCentralityFMD(fCentFMD); | |
469 | esdCent->SetCentralityTRK(fCentTRK); | |
470 | esdCent->SetCentralityTKL(fCentTKL); | |
471 | esdCent->SetCentralityCL0(fCentCL0); | |
be0d4e9b | 472 | esdCent->SetCentralityCL1(fCentCL1); |
d15bf53f | 473 | esdCent->SetCentralityV0MvsFMD(fCentV0MvsFMD); |
474 | esdCent->SetCentralityTKLvsV0M(fCentTKLvsV0M); | |
475 | esdCent->SetCentralityZEMvsZDC(fCentZEMvsZDC); | |
68e344b7 | 476 | |
05915818 | 477 | fHOutCentV0M->Fill(fCentV0M); |
478 | fHOutCentFMD->Fill(fCentFMD); | |
479 | fHOutCentTRK->Fill(fCentTRK); | |
480 | fHOutCentTKL->Fill(fCentTKL); | |
481 | fHOutCentCL0->Fill(fCentCL0); | |
482 | fHOutCentCL1->Fill(fCentCL1); | |
483 | fHOutCentV0MvsFMD->Fill(fCentV0MvsFMD); | |
484 | fHOutCentTKLvsV0M->Fill(fCentTKLvsV0M); | |
485 | fHOutCentZEMvsZDC->Fill(fCentZEMvsZDC); | |
36ee40df | 486 | fHOutMultV0M->Fill(v0Corr); |
a3127f95 | 487 | fHOutMultV0R->Fill(multV0A+multV0C); |
36ee40df | 488 | fHOutMultFMD->Fill((multFMDA+multFMDC)); |
489 | fHOutMultTRK->Fill(nTracks); | |
490 | fHOutMultTKL->Fill(nTracklets); | |
491 | fHOutMultCL0->Fill(nClusters[0]); | |
492 | fHOutMultCL1->Fill(spdCorr); | |
493 | fHOutMultV0MvsZDC->Fill(v0Corr,(zncEnergy+znaEnergy+zpcEnergy+zpaEnergy)); | |
494 | fHOutMultZEMvsZDC->Fill((zem1Energy+zem2Energy),(zncEnergy+znaEnergy+zpcEnergy+zpaEnergy)); | |
ab57f513 | 495 | fHOutMultV0MvsCL1->Fill(v0Corr,spdCorr); |
496 | fHOutMultV0MvsTRK->Fill(v0Corr,nTracks); | |
497 | fHOutMultTRKvsCL1->Fill(nTracks,spdCorr); | |
05915818 | 498 | |
499 | PostData(1, fOutputList); | |
d15bf53f | 500 | } |
501 | ||
68e344b7 | 502 | //________________________________________________________________________ |
05915818 | 503 | void AliCentralitySelectionTask::ReadCentralityHistos(TString fCentfilename) |
d15bf53f | 504 | { |
05915818 | 505 | // Read centrality histograms |
506 | TDirectory *owd = gDirectory; | |
4fd15e3c | 507 | // Check if the file is present |
508 | TString path = gSystem->ExpandPathName(fCentfilename.Data()); | |
509 | if (gSystem->AccessPathName(path)) { | |
510 | AliError(Form("File %s does not exist", path.Data())); | |
511 | return; | |
512 | } | |
05915818 | 513 | fFile = TFile::Open(fCentfilename); |
514 | owd->cd(); | |
515 | fHtempV0M = (TH1F*) (fFile->Get("hmultV0_percentile")); | |
516 | fHtempFMD = (TH1F*) (fFile->Get("hmultFMD_percentile")); | |
517 | fHtempTRK = (TH1F*) (fFile->Get("hNtracks_percentile")); | |
518 | fHtempTKL = (TH1F*) (fFile->Get("hNtracklets_percentile")); | |
519 | fHtempCL0 = (TH1F*) (fFile->Get("hNclusters0_percentile")); | |
520 | fHtempCL1 = (TH1F*) (fFile->Get("hNclusters1_percentile")); | |
4fd15e3c | 521 | owd->cd(); |
05915818 | 522 | } |
d15bf53f | 523 | |
68e344b7 | 524 | //________________________________________________________________________ |
05915818 | 525 | void AliCentralitySelectionTask::ReadCentralityHistos2(TString fCentfilename2) |
d15bf53f | 526 | { |
05915818 | 527 | // Read centrality histograms |
528 | TDirectory *owd = gDirectory; | |
4fd15e3c | 529 | TString path = gSystem->ExpandPathName(fCentfilename2.Data()); |
530 | if (gSystem->AccessPathName(path)) { | |
531 | AliError(Form("File %s does not exist", path.Data())); | |
532 | return; | |
533 | } | |
05915818 | 534 | fFile2 = TFile::Open(fCentfilename2); |
535 | owd->cd(); | |
536 | fHtempV0MvsFMD = (TH1F*) (fFile2->Get("hmultV0vsmultFMD_all_percentile")); | |
537 | fHtempTKLvsV0M = (TH1F*) (fFile2->Get("hNtrackletsvsmultV0_all_percentile")); | |
538 | fHtempZEMvsZDC = (TH1F*) (fFile2->Get("hEzemvsEzdc_all_percentile")); | |
4fd15e3c | 539 | owd->cd(); |
e8472cd0 | 540 | } |
541 | ||
542 | //________________________________________________________________________ | |
543 | void AliCentralitySelectionTask::Terminate(Option_t */*option*/) | |
544 | { | |
545 | // Terminate analysis | |
68e344b7 | 546 | if (fFile && fFile->IsOpen()) |
547 | fFile->Close(); | |
548 | if (fFile2 && fFile2->IsOpen()) | |
549 | fFile2->Close(); | |
e8472cd0 | 550 | } |
551 | //________________________________________________________________________ | |
68e344b7 | 552 | Int_t AliCentralitySelectionTask::SetupRun(AliESDEvent* esd) |
553 | { | |
554 | // Setup files for run | |
555 | ||
556 | if (!esd) | |
557 | return -1; | |
558 | ||
559 | // check if something to be done | |
560 | if (fCurrentRun == esd->GetRunNumber()) | |
561 | return 0; | |
562 | else | |
563 | fCurrentRun = esd->GetRunNumber(); | |
564 | ||
565 | AliInfo(Form("Setup Centrality Selection for run %d\n",fCurrentRun)); | |
566 | ||
62164ba5 | 567 | fRunNo = fCurrentRun; |
68e344b7 | 568 | |
569 | // CHANGE HERE FOR RUN RANGES | |
05915818 | 570 | if ( fRunNo <= 137162 ) fRunNo = 137161; |
62164ba5 | 571 | else if ( fRunNo == 137365 ) fRunNo = 137366; |
05915818 | 572 | else if ( fRunNo >= 137366 ) fRunNo = 137366; |
68e344b7 | 573 | // CHANGE HERE FOR RUN RANGES |
05915818 | 574 | |
ba319e9e | 575 | TString fileName(Form("%s/AliCentralityBy1D_%d.root", fDirName.Data(), fRunNo)); |
576 | TString fileName2(Form("%s/AliCentralityByFunction_%d.root", fDirName.Data(), fRunNo)); | |
05915818 | 577 | |
4fd15e3c | 578 | AliInfo(Form("Centrality Selection for run %d is initialized with %s", fCurrentRun, fileName.Data())); |
579 | ReadCentralityHistos(fileName.Data()); | |
580 | ReadCentralityHistos2(fileName2.Data()); | |
581 | if (!fFile && !fFile2) { | |
582 | AliFatal(Form("Run %d not known to centrality selection!", fCurrentRun)); | |
583 | return -1; | |
584 | } | |
585 | return 0; | |
68e344b7 | 586 | } |