]>
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 | ||
22 | #include <TTree.h> | |
23 | #include <TList.h> | |
24 | #include <TH1F.h> | |
25 | #include <TH2F.h> | |
26 | #include <TProfile.h> | |
27 | #include <TFile.h> | |
68e344b7 | 28 | #include <TObjString.h> |
e8472cd0 | 29 | #include <TString.h> |
30 | #include <TCanvas.h> | |
9f14d90a | 31 | #include <TROOT.h> |
32 | #include <TDirectory.h> | |
4fd15e3c | 33 | #include <TSystem.h> |
e8472cd0 | 34 | #include <iostream> |
35 | ||
36 | #include "AliAnalysisManager.h" | |
37 | #include "AliVEvent.h" | |
38 | #include "AliESD.h" | |
39 | #include "AliESDEvent.h" | |
40 | #include "AliESDHeader.h" | |
41 | #include "AliESDInputHandler.h" | |
42 | #include "AliESDZDC.h" | |
43 | #include "AliESDFMD.h" | |
44 | #include "AliESDVZERO.h" | |
45 | #include "AliESDCentrality.h" | |
05915818 | 46 | #include "AliESDtrackCuts.h" |
e8472cd0 | 47 | #include "AliMultiplicity.h" |
48 | #include "AliAODHandler.h" | |
49 | #include "AliAODEvent.h" | |
62164ba5 | 50 | #include "AliESDVertex.h" |
e8472cd0 | 51 | #include "AliAODVertex.h" |
52 | #include "AliAODMCHeader.h" | |
53 | #include "AliMCEvent.h" | |
54 | #include "AliMCEventHandler.h" | |
55 | #include "AliMCParticle.h" | |
56 | #include "AliStack.h" | |
57 | #include "AliHeader.h" | |
58 | #include "AliAODMCParticle.h" | |
59 | #include "AliAnalysisTaskSE.h" | |
60 | #include "AliGenEventHeader.h" | |
61 | #include "AliGenHijingEventHeader.h" | |
62 | #include "AliPhysicsSelectionTask.h" | |
63 | #include "AliPhysicsSelection.h" | |
64 | #include "AliBackgroundSelection.h" | |
65 | #include "AliCentralitySelectionTask.h" | |
66 | ||
67 | ClassImp(AliCentralitySelectionTask) | |
68 | ||
69 | ||
70 | //________________________________________________________________________ | |
71 | AliCentralitySelectionTask::AliCentralitySelectionTask(): | |
72 | AliAnalysisTaskSE(), | |
73 | fDebug(0), | |
74 | fAnalysisInput("ESD"), | |
75 | fIsMCInput(kFALSE), | |
76 | fFile(0), | |
d15bf53f | 77 | fFile2(0), |
68e344b7 | 78 | fCurrentRun(-1), |
62164ba5 | 79 | fRunNo(-1), |
05915818 | 80 | fTrackCuts(0), |
d15bf53f | 81 | fCentV0M(0), |
82 | fCentFMD(0), | |
83 | fCentTRK(0), | |
84 | fCentTKL(0), | |
85 | fCentCL0(0), | |
be0d4e9b | 86 | fCentCL1(0), |
d15bf53f | 87 | fCentV0MvsFMD(0), |
88 | fCentTKLvsV0M(0), | |
89 | fCentZEMvsZDC(0), | |
90 | fHtempV0M(0), | |
91 | fHtempFMD(0), | |
92 | fHtempTRK(0), | |
93 | fHtempTKL(0), | |
94 | fHtempCL0(0), | |
be0d4e9b | 95 | fHtempCL1(0), |
d15bf53f | 96 | fHtempV0MvsFMD(0), |
97 | fHtempTKLvsV0M(0), | |
05915818 | 98 | fHtempZEMvsZDC(0), |
99 | fOutputList(0), | |
100 | fHOutCentV0M (0), | |
101 | fHOutCentFMD (0), | |
102 | fHOutCentTRK (0), | |
103 | fHOutCentTKL (0), | |
104 | fHOutCentCL0 (0), | |
105 | fHOutCentCL1 (0), | |
106 | fHOutCentV0MvsFMD(0), | |
107 | fHOutCentTKLvsV0M(0), | |
36ee40df | 108 | fHOutCentZEMvsZDC(0), |
109 | fHOutMultV0M(0), | |
110 | fHOutMultFMD(0), | |
111 | fHOutMultTRK(0), | |
112 | fHOutMultTKL(0), | |
113 | fHOutMultCL0(0), | |
114 | fHOutMultCL1(0), | |
115 | fHOutMultV0MvsZDC(0), | |
ab57f513 | 116 | fHOutMultZEMvsZDC(0), |
117 | fHOutMultV0MvsCL1(0), | |
118 | fHOutMultV0MvsTRK(0), | |
119 | fHOutMultTRKvsCL1(0) | |
e8472cd0 | 120 | { |
121 | // Default constructor | |
68e344b7 | 122 | AliInfo("Centrality Selection enabled."); |
e8472cd0 | 123 | } |
124 | ||
125 | //________________________________________________________________________ | |
126 | AliCentralitySelectionTask::AliCentralitySelectionTask(const char *name): | |
127 | AliAnalysisTaskSE(name), | |
128 | fDebug(0), | |
129 | fAnalysisInput("ESD"), | |
130 | fIsMCInput(kFALSE), | |
131 | fFile(0), | |
d15bf53f | 132 | fFile2(0), |
68e344b7 | 133 | fCurrentRun(-1), |
62164ba5 | 134 | fRunNo(-1), |
05915818 | 135 | fTrackCuts(0), |
d15bf53f | 136 | fCentV0M(0), |
137 | fCentFMD(0), | |
138 | fCentTRK(0), | |
139 | fCentTKL(0), | |
140 | fCentCL0(0), | |
be0d4e9b | 141 | fCentCL1(0), |
d15bf53f | 142 | fCentV0MvsFMD(0), |
143 | fCentTKLvsV0M(0), | |
144 | fCentZEMvsZDC(0), | |
145 | fHtempV0M(0), | |
146 | fHtempFMD(0), | |
147 | fHtempTRK(0), | |
148 | fHtempTKL(0), | |
149 | fHtempCL0(0), | |
be0d4e9b | 150 | fHtempCL1(0), |
d15bf53f | 151 | fHtempV0MvsFMD(0), |
152 | fHtempTKLvsV0M(0), | |
05915818 | 153 | fHtempZEMvsZDC(0), |
154 | fOutputList(0), | |
155 | fHOutCentV0M (0), | |
156 | fHOutCentFMD (0), | |
157 | fHOutCentTRK (0), | |
158 | fHOutCentTKL (0), | |
159 | fHOutCentCL0 (0), | |
160 | fHOutCentCL1 (0), | |
161 | fHOutCentV0MvsFMD(0), | |
162 | fHOutCentTKLvsV0M(0), | |
36ee40df | 163 | fHOutCentZEMvsZDC(0), |
164 | fHOutMultV0M(0), | |
165 | fHOutMultFMD(0), | |
166 | fHOutMultTRK(0), | |
167 | fHOutMultTKL(0), | |
168 | fHOutMultCL0(0), | |
169 | fHOutMultCL1(0), | |
170 | fHOutMultV0MvsZDC(0), | |
ab57f513 | 171 | fHOutMultZEMvsZDC(0), |
172 | fHOutMultV0MvsCL1(0), | |
173 | fHOutMultV0MvsTRK(0), | |
174 | fHOutMultTRKvsCL1(0) | |
e8472cd0 | 175 | { |
176 | // Default constructor | |
68e344b7 | 177 | AliInfo("Centrality Selection enabled."); |
05915818 | 178 | DefineOutput(1, TList::Class()); |
e8472cd0 | 179 | } |
180 | ||
181 | //________________________________________________________________________ | |
182 | AliCentralitySelectionTask& AliCentralitySelectionTask::operator=(const AliCentralitySelectionTask& c) | |
183 | { | |
184 | // Assignment operator | |
185 | if (this!=&c) { | |
186 | AliAnalysisTaskSE::operator=(c); | |
187 | } | |
188 | return *this; | |
189 | } | |
190 | ||
191 | //________________________________________________________________________ | |
192 | AliCentralitySelectionTask::AliCentralitySelectionTask(const AliCentralitySelectionTask& ana): | |
193 | AliAnalysisTaskSE(ana), | |
194 | fDebug(ana.fDebug), | |
195 | fAnalysisInput(ana.fDebug), | |
196 | fIsMCInput(ana.fIsMCInput), | |
197 | fFile(ana.fFile), | |
d15bf53f | 198 | fFile2(ana.fFile2), |
68e344b7 | 199 | fCurrentRun(ana.fCurrentRun), |
62164ba5 | 200 | fRunNo(ana.fRunNo), |
05915818 | 201 | fTrackCuts(ana.fTrackCuts), |
d15bf53f | 202 | fCentV0M(ana.fCentV0M), |
203 | fCentFMD(ana.fCentFMD), | |
204 | fCentTRK(ana.fCentTRK), | |
205 | fCentTKL(ana.fCentTKL), | |
206 | fCentCL0(ana.fCentCL0), | |
be0d4e9b | 207 | fCentCL1(ana.fCentCL1), |
d15bf53f | 208 | fCentV0MvsFMD(ana.fCentV0MvsFMD), |
209 | fCentTKLvsV0M(ana.fCentTKLvsV0M), | |
210 | fCentZEMvsZDC(ana.fCentZEMvsZDC), | |
211 | fHtempV0M(ana.fHtempV0M), | |
212 | fHtempFMD(ana.fHtempFMD), | |
213 | fHtempTRK(ana.fHtempTRK), | |
214 | fHtempTKL(ana.fHtempTKL), | |
215 | fHtempCL0(ana.fHtempCL0), | |
be0d4e9b | 216 | fHtempCL1(ana.fHtempCL1), |
d15bf53f | 217 | fHtempV0MvsFMD(ana.fHtempV0MvsFMD), |
218 | fHtempTKLvsV0M(ana.fHtempTKLvsV0M), | |
05915818 | 219 | fHtempZEMvsZDC(ana.fHtempZEMvsZDC), |
220 | fOutputList(ana.fOutputList), | |
221 | fHOutCentV0M (ana.fHOutCentV0M ), | |
222 | fHOutCentFMD (ana.fHOutCentFMD ), | |
223 | fHOutCentTRK (ana.fHOutCentTRK ), | |
224 | fHOutCentTKL (ana.fHOutCentTKL ), | |
225 | fHOutCentCL0 (ana.fHOutCentCL0 ), | |
226 | fHOutCentCL1 (ana.fHOutCentCL1 ), | |
227 | fHOutCentV0MvsFMD(ana.fHOutCentV0MvsFMD), | |
228 | fHOutCentTKLvsV0M(ana.fHOutCentTKLvsV0M), | |
36ee40df | 229 | fHOutCentZEMvsZDC(ana.fHOutCentZEMvsZDC), |
230 | fHOutMultV0M(ana.fHOutMultV0M), | |
231 | fHOutMultFMD(ana.fHOutMultFMD), | |
232 | fHOutMultTRK(ana.fHOutMultTRK), | |
233 | fHOutMultTKL(ana.fHOutMultTKL), | |
234 | fHOutMultCL0(ana.fHOutMultCL0), | |
235 | fHOutMultCL1(ana.fHOutMultCL1), | |
236 | fHOutMultV0MvsZDC(ana.fHOutMultV0MvsZDC), | |
ab57f513 | 237 | fHOutMultZEMvsZDC(ana.fHOutMultZEMvsZDC), |
238 | fHOutMultV0MvsCL1(ana.fHOutMultV0MvsCL1), | |
239 | fHOutMultV0MvsTRK(ana.fHOutMultV0MvsTRK), | |
240 | fHOutMultTRKvsCL1(ana.fHOutMultTRKvsCL1) | |
e8472cd0 | 241 | { |
242 | // Copy Constructor | |
243 | } | |
244 | ||
245 | //________________________________________________________________________ | |
68e344b7 | 246 | AliCentralitySelectionTask::~AliCentralitySelectionTask() |
247 | { | |
05915818 | 248 | // Destructor |
249 | if (fOutputList && !AliAnalysisManager::GetAnalysisManager()->IsProofMode()) delete fOutputList; | |
4fd15e3c | 250 | if (fTrackCuts) delete fTrackCuts; |
68e344b7 | 251 | } |
e8472cd0 | 252 | |
253 | //________________________________________________________________________ | |
254 | void AliCentralitySelectionTask::UserCreateOutputObjects() | |
255 | { | |
256 | // Create the output containers | |
257 | if(fDebug>1) printf("AnalysisCentralitySelectionTask::UserCreateOutputObjects() \n"); | |
68e344b7 | 258 | AliLog::SetClassDebugLevel("AliCentralitySelectionTask", AliLog::kInfo); |
05915818 | 259 | |
260 | fOutputList = new TList(); | |
261 | fOutputList->SetOwner(); | |
262 | fHOutCentV0M = new TH1F("fHOutCentV0M","fHOutCentV0M; Centrality V0",101,-0.5,100.5); | |
263 | fHOutCentFMD = new TH1F("fHOutCentFMD","fHOutCentFMD; Centrality FMD",101,-0.5,100.5); | |
264 | fHOutCentTRK = new TH1F("fHOutCentTRK","fHOutCentTRK; Centrality TPC",101,-0.5,100.5); | |
265 | fHOutCentTKL = new TH1F("fHOutCentTKL","fHOutCentTKL; Centrality tracklets",101,-0.5,100.5); | |
266 | fHOutCentCL0 = new TH1F("fHOutCentCL0","fHOutCentCL0; Centrality SPD inner",101,-0.5,100.5); | |
267 | fHOutCentCL1 = new TH1F("fHOutCentCL1","fHOutCentCL1; Centrality SPD outer",101,-0.5,100.5); | |
268 | fHOutCentV0MvsFMD= new TH1F("fHOutCentV0MvsFMD","fHOutCentV0MvsFMD; Centrality V0 vs FMD",101,-0.5,100.5); | |
269 | fHOutCentTKLvsV0M= new TH1F("fHOutCentTKLvsV0M","fHOutCentTKLvsV0M; Centrality tracklets vs V0",101,-0.5,100.5); | |
270 | fHOutCentZEMvsZDC= new TH1F("fHOutCentZEMvsZDC","fHOutCentZEMvsZDC; Centrality ZEM vs ZDC",101,-0.5,100.5); | |
271 | ||
36ee40df | 272 | fHOutMultV0M = new TH1F("fHOutMultV0M","fHOutMultV0M; Multiplicity V0",25000,0,25000); |
273 | fHOutMultFMD = new TH1F("fHOutMultFMD","fHOutMultFMD; Multiplicity FMD",24000,0,24000); | |
274 | fHOutMultTRK = new TH1F("fHOutMultTRK","fHOutMultTRK; Multiplicity TPC",4000,0,4000); | |
275 | fHOutMultTKL = new TH1F("fHOutMultTKL","fHOutMultTKL; Multiplicity tracklets",5000,0,5000); | |
276 | fHOutMultCL0 = new TH1F("fHOutMultCL0","fHOutMultCL0; Multiplicity SPD inner",7000,0,7000); | |
277 | fHOutMultCL1 = new TH1F("fHOutMultCL1","fHOutMultCL1; Multiplicity SPD outer",7000,0,7000); | |
ab57f513 | 278 | fHOutMultV0MvsZDC = new TH2F("fHOutMultV0MvsZDC","fHOutMultV0MvsZDC; Multiplicity V0; Energy ZDC",500,0,25000,500,0,6000); |
a7d618ed | 279 | fHOutMultZEMvsZDC = new TH2F("fHOutMultZEMvsZDC","fHOutMultZEMvsZDC; Energy ZEM; Energy ZDC",500,0,2500,500,0,6000); |
ab57f513 | 280 | fHOutMultV0MvsCL1 = new TH2F("fHOutMultV0MvsCL1","fHOutMultV0MvsCL1; Multiplicity V0; Multiplicity SPD outer",2500,0,25000,700,0,7000); |
281 | fHOutMultV0MvsTRK = new TH2F("fHOutMultV0MvsTRK","fHOutMultV0MvsTRK; Multiplicity V0; Multiplicity TPC",2500,0,25000,400,0,4000); | |
282 | fHOutMultTRKvsCL1 = new TH2F("fHOutMultTRKvsCL1","fHOutMultTRKvsCL1; Multiplicity TPC; Multiplicity SPD outer",400,0,4000,700,0,7000); | |
36ee40df | 283 | |
05915818 | 284 | fOutputList->Add( fHOutCentV0M ); |
285 | fOutputList->Add( fHOutCentFMD ); | |
286 | fOutputList->Add( fHOutCentTRK ); | |
287 | fOutputList->Add( fHOutCentTKL ); | |
288 | fOutputList->Add( fHOutCentCL0 ); | |
289 | fOutputList->Add( fHOutCentCL1 ); | |
290 | fOutputList->Add( fHOutCentV0MvsFMD); | |
291 | fOutputList->Add( fHOutCentTKLvsV0M); | |
292 | fOutputList->Add( fHOutCentZEMvsZDC); | |
36ee40df | 293 | fOutputList->Add( fHOutMultV0M); |
294 | fOutputList->Add( fHOutMultFMD); | |
295 | fOutputList->Add( fHOutMultTRK); | |
296 | fOutputList->Add( fHOutMultTKL); | |
297 | fOutputList->Add( fHOutMultCL0); | |
298 | fOutputList->Add( fHOutMultCL1); | |
299 | fOutputList->Add( fHOutMultV0MvsZDC); | |
300 | fOutputList->Add( fHOutMultZEMvsZDC); | |
ab57f513 | 301 | fOutputList->Add( fHOutMultV0MvsCL1); |
302 | fOutputList->Add( fHOutMultV0MvsTRK); | |
303 | fOutputList->Add( fHOutMultTRKvsCL1); | |
36ee40df | 304 | |
305 | ||
4fd15e3c | 306 | fTrackCuts = AliESDtrackCuts::GetStandardTPCOnlyTrackCuts(); |
05915818 | 307 | |
308 | PostData(1, fOutputList); | |
e8472cd0 | 309 | } |
310 | ||
311 | //________________________________________________________________________ | |
312 | void AliCentralitySelectionTask::UserExec(Option_t */*option*/) | |
313 | { | |
314 | // Execute analysis for current event: | |
315 | if(fDebug>1) printf(" **** AliCentralitySelectionTask::UserExec() \n"); | |
316 | ||
36ee40df | 317 | Float_t zncEnergy = 0.; // ZNC Energy |
318 | Float_t zpcEnergy = 0.; // ZPC Energy | |
319 | Float_t znaEnergy = 0.; // ZNA Energy | |
320 | Float_t zpaEnergy = 0.; // ZPA Energy | |
d15bf53f | 321 | Float_t zem1Energy = 0.; // ZEM1 Energy |
322 | Float_t zem2Energy = 0.; // ZEM2 Energy | |
e8472cd0 | 323 | |
be0d4e9b | 324 | Int_t nTracks = 0; // no. tracks |
d15bf53f | 325 | Int_t nTracklets = 0; // no. tracklets |
326 | Int_t nClusters[6]; // no. clusters on 6 ITS layers | |
327 | Int_t nChips[2]; // no. chips on 2 SPD layers | |
62164ba5 | 328 | Float_t spdCorr =0; // corrected spd2 multiplicity |
e8472cd0 | 329 | |
d15bf53f | 330 | Float_t multV0A = 0; // multiplicity from V0 reco side A |
331 | Float_t multV0C = 0; // multiplicity from V0 reco side C | |
332 | Float_t multFMDA = 0; // multiplicity from FMD on detector A | |
333 | Float_t multFMDC = 0; // multiplicity from FMD on detector C | |
e8472cd0 | 334 | |
62164ba5 | 335 | Short_t v0Corr = 0; // corrected V0 multiplicity |
336 | Short_t v0CorrResc = 0; // corrected and rescaled V0 multiplicity | |
337 | ||
338 | Float_t zvtx =0; // z-vertex SPD | |
339 | ||
e8472cd0 | 340 | AliESDCentrality *esdCent = 0; |
341 | ||
342 | if(fAnalysisInput.CompareTo("ESD")==0){ | |
343 | ||
344 | AliVEvent* event = InputEvent(); | |
345 | AliESDEvent* esd = dynamic_cast<AliESDEvent*>(event); | |
05915818 | 346 | |
347 | if (fRunNo<=0) { | |
348 | if (SetupRun(esd)<0) | |
349 | AliFatal("Centrality File not available for this run"); | |
350 | } | |
68e344b7 | 351 | |
e8472cd0 | 352 | esdCent = esd->GetCentrality(); |
353 | ||
354 | // ***** V0 info | |
355 | AliESDVZERO* esdV0 = esd->GetVZEROData(); | |
356 | multV0A=esdV0->GetMTotV0A(); | |
357 | multV0C=esdV0->GetMTotV0C(); | |
62164ba5 | 358 | |
359 | float v0CorrR; | |
0caa916b | 360 | v0Corr = (Short_t)GetCorrV0(esd,v0CorrR); |
62164ba5 | 361 | v0CorrResc = (Short_t)v0CorrR; |
362 | ||
363 | // ***** Vertex Info | |
364 | const AliESDVertex* vtxESD = esd->GetPrimaryVertexSPD(); | |
365 | zvtx = vtxESD->GetZ(); | |
366 | ||
e8472cd0 | 367 | // ***** CB info (tracklets, clusters, chips) |
05915818 | 368 | //nTracks = event->GetNumberOfTracks(); |
05915818 | 369 | nTracks = fTrackCuts ? (Short_t)fTrackCuts->GetReferenceMultiplicity(esd,kTRUE):-1; |
e8472cd0 | 370 | |
371 | const AliMultiplicity *mult = esd->GetMultiplicity(); | |
372 | ||
373 | nTracklets = mult->GetNumberOfTracklets(); | |
374 | ||
375 | for(Int_t ilay=0; ilay<6; ilay++){ | |
376 | nClusters[ilay] = mult->GetNumberOfITSClusters(ilay); | |
377 | } | |
378 | ||
379 | for(Int_t ilay=0; ilay<2; ilay++){ | |
380 | nChips[ilay] = mult->GetNumberOfFiredChips(ilay); | |
381 | } | |
62164ba5 | 382 | |
383 | spdCorr = GetCorrSPD2(nClusters[1],zvtx); | |
e8472cd0 | 384 | |
385 | // ***** FMD info | |
386 | AliESDFMD *fmd = esd->GetFMDData(); | |
387 | Float_t totalMultA = 0; | |
388 | Float_t totalMultC = 0; | |
389 | const Float_t fFMDLowCut = 0.4; | |
390 | ||
391 | for(UShort_t det=1;det<=3;det++) { | |
392 | Int_t nRings = (det==1 ? 1 : 2); | |
393 | for (UShort_t ir = 0; ir < nRings; ir++) { | |
394 | Char_t ring = (ir == 0 ? 'I' : 'O'); | |
395 | UShort_t nsec = (ir == 0 ? 20 : 40); | |
396 | UShort_t nstr = (ir == 0 ? 512 : 256); | |
397 | for(UShort_t sec =0; sec < nsec; sec++) { | |
398 | for(UShort_t strip = 0; strip < nstr; strip++) { | |
399 | ||
400 | Float_t FMDmult = fmd->Multiplicity(det,ring,sec,strip); | |
401 | if(FMDmult == 0 || FMDmult == AliESDFMD::kInvalidMult) continue; | |
402 | ||
403 | Float_t nParticles=0; | |
404 | ||
405 | if(FMDmult > fFMDLowCut) { | |
406 | nParticles = 1.; | |
407 | } | |
408 | ||
409 | if (det<3) totalMultA = totalMultA + nParticles; | |
410 | else totalMultC = totalMultC + nParticles; | |
411 | ||
412 | } | |
413 | } | |
414 | } | |
415 | } | |
416 | multFMDA = totalMultA; | |
417 | multFMDC = totalMultC; | |
418 | ||
419 | // ***** ZDC info | |
420 | AliESDZDC *esdZDC = esd->GetESDZDC(); | |
36ee40df | 421 | zncEnergy = (Float_t) (esdZDC->GetZDCN1Energy())/8.; |
422 | zpcEnergy = (Float_t) (esdZDC->GetZDCP1Energy())/8.; | |
423 | znaEnergy = (Float_t) (esdZDC->GetZDCN2Energy())/8.; | |
424 | zpaEnergy = (Float_t) (esdZDC->GetZDCP2Energy())/8.; | |
425 | zem1Energy = (Float_t) (esdZDC->GetZDCEMEnergy(0))/8.; | |
426 | zem2Energy = (Float_t) (esdZDC->GetZDCEMEnergy(1))/8.; | |
e8472cd0 | 427 | |
428 | } | |
429 | else if(fAnalysisInput.CompareTo("AOD")==0){ | |
430 | //AliAODEvent *aod = dynamic_cast<AliAODEvent*> (InputEvent()); | |
431 | // to be implemented | |
432 | printf(" AOD analysis not yet implemented!!!\n\n"); | |
433 | return; | |
434 | } | |
435 | ||
d15bf53f | 436 | // ***** Centrality Selection |
62164ba5 | 437 | if(fHtempV0M) fCentV0M = fHtempV0M->GetBinContent(fHtempV0M->FindBin((v0Corr))); |
68e344b7 | 438 | /// else printf(" Centrality by V0 not available!!!\n\n"); |
99df2fab | 439 | if(fHtempFMD) fCentFMD = fHtempFMD->GetBinContent(fHtempFMD->FindBin((multFMDA+multFMDC))); |
68e344b7 | 440 | // else printf(" Centrality by FMD not available!!!\n\n"); |
99df2fab | 441 | if(fHtempTRK) fCentTRK = fHtempTRK->GetBinContent(fHtempTRK->FindBin(nTracks)); |
68e344b7 | 442 | // else printf(" Centrality by TRK not available!!!\n\n"); |
99df2fab | 443 | if(fHtempTKL) fCentTKL = fHtempTKL->GetBinContent(fHtempTKL->FindBin(nTracklets)); |
68e344b7 | 444 | // else printf(" Centrality by TKL not available!!!\n\n"); |
99df2fab | 445 | if(fHtempCL0) fCentCL0 = fHtempCL0->GetBinContent(fHtempCL0->FindBin(nClusters[0])); |
68e344b7 | 446 | // else printf(" Centrality by CL0 not available!!!\n\n"); |
62164ba5 | 447 | if(fHtempCL1) fCentCL1 = fHtempCL1->GetBinContent(fHtempCL1->FindBin(spdCorr)); |
68e344b7 | 448 | /// else printf(" Centrality by CL1 not available!!!\n\n"); |
d15bf53f | 449 | |
99df2fab | 450 | if(fHtempV0MvsFMD) fCentV0MvsFMD = fHtempV0MvsFMD->GetBinContent(fHtempV0MvsFMD->FindBin((multV0A+multV0C))); |
68e344b7 | 451 | // else printf(" Centrality by V0 vs FMD not available!!!\n\n"); |
99df2fab | 452 | if(fHtempTKLvsV0M) fCentTKLvsV0M = fHtempTKLvsV0M->GetBinContent(fHtempTKLvsV0M->FindBin(nTracklets)); |
68e344b7 | 453 | // else printf(" Centrality by V0 vs TKL not available!!!\n\n"); |
99df2fab | 454 | if(fHtempZEMvsZDC) fCentZEMvsZDC = fHtempZEMvsZDC->GetBinContent(fHtempZEMvsZDC->FindBin((zem1Energy+zem2Energy)/1000.)); |
68e344b7 | 455 | // else printf(" Centrality by ZEM vs ZDC not available!!!\n\n"); |
456 | ||
d15bf53f | 457 | esdCent->SetCentralityV0M(fCentV0M); |
458 | esdCent->SetCentralityFMD(fCentFMD); | |
459 | esdCent->SetCentralityTRK(fCentTRK); | |
460 | esdCent->SetCentralityTKL(fCentTKL); | |
461 | esdCent->SetCentralityCL0(fCentCL0); | |
be0d4e9b | 462 | esdCent->SetCentralityCL1(fCentCL1); |
d15bf53f | 463 | esdCent->SetCentralityV0MvsFMD(fCentV0MvsFMD); |
464 | esdCent->SetCentralityTKLvsV0M(fCentTKLvsV0M); | |
465 | esdCent->SetCentralityZEMvsZDC(fCentZEMvsZDC); | |
68e344b7 | 466 | |
05915818 | 467 | fHOutCentV0M->Fill(fCentV0M); |
468 | fHOutCentFMD->Fill(fCentFMD); | |
469 | fHOutCentTRK->Fill(fCentTRK); | |
470 | fHOutCentTKL->Fill(fCentTKL); | |
471 | fHOutCentCL0->Fill(fCentCL0); | |
472 | fHOutCentCL1->Fill(fCentCL1); | |
473 | fHOutCentV0MvsFMD->Fill(fCentV0MvsFMD); | |
474 | fHOutCentTKLvsV0M->Fill(fCentTKLvsV0M); | |
475 | fHOutCentZEMvsZDC->Fill(fCentZEMvsZDC); | |
36ee40df | 476 | fHOutMultV0M->Fill(v0Corr); |
477 | fHOutMultFMD->Fill((multFMDA+multFMDC)); | |
478 | fHOutMultTRK->Fill(nTracks); | |
479 | fHOutMultTKL->Fill(nTracklets); | |
480 | fHOutMultCL0->Fill(nClusters[0]); | |
481 | fHOutMultCL1->Fill(spdCorr); | |
482 | fHOutMultV0MvsZDC->Fill(v0Corr,(zncEnergy+znaEnergy+zpcEnergy+zpaEnergy)); | |
483 | fHOutMultZEMvsZDC->Fill((zem1Energy+zem2Energy),(zncEnergy+znaEnergy+zpcEnergy+zpaEnergy)); | |
ab57f513 | 484 | fHOutMultV0MvsCL1->Fill(v0Corr,spdCorr); |
485 | fHOutMultV0MvsTRK->Fill(v0Corr,nTracks); | |
486 | fHOutMultTRKvsCL1->Fill(nTracks,spdCorr); | |
05915818 | 487 | |
488 | PostData(1, fOutputList); | |
d15bf53f | 489 | } |
490 | ||
68e344b7 | 491 | //________________________________________________________________________ |
05915818 | 492 | void AliCentralitySelectionTask::ReadCentralityHistos(TString fCentfilename) |
d15bf53f | 493 | { |
05915818 | 494 | // Read centrality histograms |
495 | TDirectory *owd = gDirectory; | |
4fd15e3c | 496 | // Check if the file is present |
497 | TString path = gSystem->ExpandPathName(fCentfilename.Data()); | |
498 | if (gSystem->AccessPathName(path)) { | |
499 | AliError(Form("File %s does not exist", path.Data())); | |
500 | return; | |
501 | } | |
05915818 | 502 | fFile = TFile::Open(fCentfilename); |
503 | owd->cd(); | |
504 | fHtempV0M = (TH1F*) (fFile->Get("hmultV0_percentile")); | |
505 | fHtempFMD = (TH1F*) (fFile->Get("hmultFMD_percentile")); | |
506 | fHtempTRK = (TH1F*) (fFile->Get("hNtracks_percentile")); | |
507 | fHtempTKL = (TH1F*) (fFile->Get("hNtracklets_percentile")); | |
508 | fHtempCL0 = (TH1F*) (fFile->Get("hNclusters0_percentile")); | |
509 | fHtempCL1 = (TH1F*) (fFile->Get("hNclusters1_percentile")); | |
4fd15e3c | 510 | owd->cd(); |
05915818 | 511 | } |
d15bf53f | 512 | |
68e344b7 | 513 | //________________________________________________________________________ |
05915818 | 514 | void AliCentralitySelectionTask::ReadCentralityHistos2(TString fCentfilename2) |
d15bf53f | 515 | { |
05915818 | 516 | // Read centrality histograms |
517 | TDirectory *owd = gDirectory; | |
4fd15e3c | 518 | TString path = gSystem->ExpandPathName(fCentfilename2.Data()); |
519 | if (gSystem->AccessPathName(path)) { | |
520 | AliError(Form("File %s does not exist", path.Data())); | |
521 | return; | |
522 | } | |
05915818 | 523 | fFile2 = TFile::Open(fCentfilename2); |
524 | owd->cd(); | |
525 | fHtempV0MvsFMD = (TH1F*) (fFile2->Get("hmultV0vsmultFMD_all_percentile")); | |
526 | fHtempTKLvsV0M = (TH1F*) (fFile2->Get("hNtrackletsvsmultV0_all_percentile")); | |
527 | fHtempZEMvsZDC = (TH1F*) (fFile2->Get("hEzemvsEzdc_all_percentile")); | |
4fd15e3c | 528 | owd->cd(); |
e8472cd0 | 529 | } |
530 | ||
531 | //________________________________________________________________________ | |
532 | void AliCentralitySelectionTask::Terminate(Option_t */*option*/) | |
533 | { | |
534 | // Terminate analysis | |
68e344b7 | 535 | if (fFile && fFile->IsOpen()) |
536 | fFile->Close(); | |
537 | if (fFile2 && fFile2->IsOpen()) | |
538 | fFile2->Close(); | |
e8472cd0 | 539 | } |
540 | //________________________________________________________________________ | |
68e344b7 | 541 | Int_t AliCentralitySelectionTask::SetupRun(AliESDEvent* esd) |
542 | { | |
543 | // Setup files for run | |
544 | ||
545 | if (!esd) | |
546 | return -1; | |
547 | ||
548 | // check if something to be done | |
549 | if (fCurrentRun == esd->GetRunNumber()) | |
550 | return 0; | |
551 | else | |
552 | fCurrentRun = esd->GetRunNumber(); | |
553 | ||
554 | AliInfo(Form("Setup Centrality Selection for run %d\n",fCurrentRun)); | |
555 | ||
62164ba5 | 556 | fRunNo = fCurrentRun; |
68e344b7 | 557 | |
558 | // CHANGE HERE FOR RUN RANGES | |
05915818 | 559 | if ( fRunNo <= 137162 ) fRunNo = 137161; |
62164ba5 | 560 | else if ( fRunNo == 137365 ) fRunNo = 137366; |
05915818 | 561 | else if ( fRunNo >= 137366 ) fRunNo = 137366; |
68e344b7 | 562 | // CHANGE HERE FOR RUN RANGES |
05915818 | 563 | |
564 | TString fileName(Form("$ALICE_ROOT/ANALYSIS/macros/AliCentralityBy1D_%d.root", fRunNo)); | |
565 | TString fileName2(Form("$ALICE_ROOT/ANALYSIS/macros/AliCentralityByFunction_%d.root", fRunNo)); | |
05915818 | 566 | |
4fd15e3c | 567 | AliInfo(Form("Centrality Selection for run %d is initialized with %s", fCurrentRun, fileName.Data())); |
568 | ReadCentralityHistos(fileName.Data()); | |
569 | ReadCentralityHistos2(fileName2.Data()); | |
570 | if (!fFile && !fFile2) { | |
571 | AliFatal(Form("Run %d not known to centrality selection!", fCurrentRun)); | |
572 | return -1; | |
573 | } | |
574 | return 0; | |
68e344b7 | 575 | } |
62164ba5 | 576 | //________________________________________________________________________ |
0caa916b | 577 | Float_t AliCentralitySelectionTask::GetCorrV0(const AliESDEvent* esd, float &v0CorrResc) |
62164ba5 | 578 | { |
579 | // correct V0 non-linearity, prepare a version rescaled to SPD2 corr | |
580 | Double_t *par0; | |
581 | Double_t *par1; | |
582 | Double_t *par2; | |
583 | ||
584 | Double_t par0_137161[64] = { 6.71e-02 , 6.86e-02 , 7.06e-02 , 6.32e-02 , | |
585 | 5.91e-02 , 6.07e-02 , 5.78e-02 , 5.73e-02 , 5.91e-02 , 6.22e-02 , | |
586 | 5.90e-02 , 6.11e-02 , 5.55e-02 , 5.29e-02 , 5.19e-02 , 5.56e-02 , | |
587 | 6.25e-02 , 7.03e-02 , 5.64e-02 , 5.81e-02 , 4.57e-02 , 5.30e-02 , | |
588 | 5.13e-02 , 6.43e-02 , 6.27e-02 , 6.48e-02 , 6.07e-02 , 1.01e-01 , | |
589 | 6.68e-02 , 7.16e-02 , 6.36e-02 , 5.95e-02 , 2.52e-02 , 2.82e-02 , | |
590 | 2.56e-02 , 2.86e-02 , 2.82e-02 , 2.10e-02 , 2.13e-02 , 2.32e-02 , | |
591 | 2.75e-02 , 4.34e-02 , 3.78e-02 , 4.52e-02 , 4.11e-02 , 3.89e-02 , | |
592 | 4.10e-02 , 3.73e-02 , 4.51e-02 , 5.07e-02 , 5.42e-02 , 4.74e-02 , | |
593 | 4.33e-02 , 4.44e-02 , 4.64e-02 , 3.01e-02 , 6.38e-02 , 5.26e-02 , | |
594 | 4.99e-02 , 5.26e-02 , 5.47e-02 , 3.84e-02 , 5.00e-02 , 5.20e-02 }; | |
595 | Double_t par1_137161[64] = { -6.68e-05 , -7.78e-05 , -6.88e-05 , -5.92e-05 , | |
596 | -2.43e-05 , -3.54e-05 , -2.91e-05 , -1.99e-05 , -1.40e-05 , -4.01e-05 , | |
597 | -2.29e-05 , -3.68e-05 , -2.53e-05 , -2.44e-06 , -9.22e-06 , -1.51e-05 , | |
598 | -2.80e-05 , -2.34e-05 , -1.72e-05 , -1.81e-05 , -1.29e-05 , -2.65e-05 , | |
599 | -1.61e-05 , -2.86e-05 , -1.74e-05 , -4.23e-05 , -3.41e-05 , -1.05e-04 , | |
600 | -2.76e-05 , -4.71e-05 , -3.06e-05 , -2.32e-05 , -1.55e-06 , 2.15e-05 , | |
601 | 1.40e-05 , 2.16e-05 , 1.21e-05 , 3.05e-06 , 1.67e-05 , -3.84e-06 , | |
602 | 3.09e-06 , 1.50e-05 , 3.47e-06 , 4.87e-06 , -3.71e-07 , -1.75e-06 , | |
603 | -1.80e-06 , 9.99e-06 , -6.46e-06 , -4.91e-06 , 1.33e-05 , -2.52e-07 , | |
604 | -3.85e-06 , 4.94e-06 , -2.48e-07 , -1.20e-05 , 2.07e-06 , 6.12e-06 , | |
605 | -1.18e-06 , 4.54e-06 , -1.54e-05 , -1.25e-05 , 1.46e-06 , -6.67e-06 }; | |
606 | Double_t par2_137161[64] = { 1.29e-08 , 1.51e-08 , 1.43e-08 , 1.11e-08 , | |
607 | 5.04e-09 , 6.99e-09 , 5.58e-09 , 4.15e-09 , 4.00e-09 , 8.22e-09 , | |
608 | 4.97e-09 , 7.66e-09 , 4.91e-09 , 1.10e-09 , 2.64e-09 , 3.64e-09 , | |
609 | 5.76e-09 , 5.46e-09 , 3.38e-09 , 3.47e-09 , 2.43e-09 , 4.13e-09 , | |
610 | 2.80e-09 , 5.80e-09 , 3.86e-09 , 7.46e-09 , 5.98e-09 , 2.58e-08 , | |
611 | 5.50e-09 , 8.72e-09 , 5.23e-09 , 4.37e-09 , 2.33e-09 , -6.01e-10 , | |
612 | 3.99e-11 , -2.02e-10 , 7.67e-10 , 2.03e-09 , 1.17e-10 , 2.56e-09 , | |
613 | 1.16e-09 , -4.75e-10 , 1.28e-09 , 1.23e-09 , 1.62e-09 , 1.61e-09 , | |
614 | 1.93e-09 , 2.97e-10 , 2.21e-09 , 2.16e-09 , 5.22e-10 , 1.03e-09 , | |
615 | 1.56e-09 , 5.00e-10 , 1.01e-09 , 2.93e-09 , 1.05e-09 , 9.96e-11 , | |
616 | 1.21e-09 , 7.45e-10 , 3.07e-09 , 2.31e-09 , 6.70e-10 , 1.89e-09 }; | |
617 | ||
618 | Double_t par0_137366[64] = { 7.12e-02 , 7.34e-02 , 7.39e-02 , 6.54e-02 , 6.11e-02 , 6.31e-02 , 6.15e-02 , | |
619 | 6.00e-02 , 6.10e-02 , 6.49e-02 , 6.17e-02 , 6.33e-02 , 6.00e-02 , 5.48e-02 , | |
620 | 5.44e-02 , 5.81e-02 , 6.49e-02 , 7.07e-02 , 5.91e-02 , 6.18e-02 , 4.82e-02 , | |
621 | 5.67e-02 , 5.36e-02 , 6.60e-02 , 6.37e-02 , 6.78e-02 , 6.31e-02 , 1.04e-01 , | |
622 | 6.91e-02 , 7.32e-02 , 6.61e-02 , 6.16e-02 , 2.64e-02 , 2.81e-02 , 2.64e-02 , | |
623 | 2.85e-02 , 2.87e-02 , 2.18e-02 , 2.19e-02 , 2.43e-02 , 2.81e-02 , 4.37e-02 , | |
624 | 3.90e-02 , 4.66e-02 , 4.24e-02 , 4.09e-02 , 4.21e-02 , 3.88e-02 , 4.83e-02 , | |
625 | 5.23e-02 , 5.44e-02 , 4.85e-02 , 4.42e-02 , 4.58e-02 , 4.74e-02 , 3.14e-02 , | |
626 | 6.31e-02 , 5.30e-02 , 5.01e-02 , 5.33e-02 , 5.70e-02 , 3.95e-02 , 4.98e-02 , 5.31e-02 }; | |
627 | Double_t par1_137366[64] = { -6.99e-05 , -6.99e-05 , -6.94e-05 , -6.55e-05 , -3.55e-05 , -4.50e-05 , | |
628 | -3.10e-05 , -2.81e-05 , -2.29e-05 , -3.89e-05 , -2.53e-05 , -4.25e-05 , | |
629 | -1.87e-05 , -2.01e-05 , -1.53e-05 , -2.14e-05 , -2.86e-05 , -4.70e-05 , | |
630 | -2.23e-05 , -3.30e-05 ,-9.74e-06 , -2.62e-05 , -1.76e-05 , -2.38e-05 , | |
631 | -2.40e-05 , -3.43e-05 , -2.75e-05 , -6.86e-05 ,-2.35e-05 , -4.45e-05 , | |
632 | -2.51e-05 , -2.20e-05 , -1.25e-16 , -2.04e-17 , -2.06e-17 , -3.74e-19 , | |
633 | -1.18e-18 , -2.02e-15 , -3.78e-06 , -1.26e-06 , -2.71e-06 , -6.23e-17 , | |
634 | -7.39e-08 , -1.76e-16 , -8.98e-06 , -4.10e-18 , -1.34e-05 , -1.06e-16 , | |
635 | -3.34e-06 , -1.04e-05 , -5.28e-06 , -7.34e-06 , -1.05e-05 , -7.68e-06 , | |
636 | -1.78e-05 , -1.19e-05 , -1.78e-05 , -1.34e-06 , -9.23e-06 , -3.34e-06 , | |
637 | -8.02e-06 , -1.39e-05 , -1.38e-05 , -1.40e-05 }; | |
638 | Double_t par2_137366[64] = { 1.41e-08 , 1.47e-08 , 1.48e-08 , 1.24e-08 , 6.82e-09 , 8.73e-09 , 6.26e-09 , | |
639 | 5.53e-09 , 5.40e-09 , 7.93e-09 , 5.49e-09 , 8.77e-09 , 4.21e-09 , 3.93e-09 , | |
640 | 3.60e-09 , 4.67e-09 , 5.59e-09 , 8.81e-09 , 3.89e-09 , 6.19e-09 , 1.97e-09 , | |
641 | 4.38e-09 , 3.26e-09 , 5.00e-09 , 4.58e-09 , 6.39e-09 , 5.03e-09 , 1.30e-08 , | |
642 | 4.95e-09 , 8.26e-09 , 4.57e-09 , 4.10e-09 , 2.35e-09 , 2.30e-09 , 2.15e-09 , | |
643 | 2.27e-09 , 2.17e-09 , 2.27e-09 , 2.97e-09 , 2.25e-09 , 1.69e-09 , 1.44e-09 , | |
644 | 1.66e-09 , 1.75e-09 , 2.88e-09 , 1.82e-09 , 3.64e-09 , 1.80e-09 , 1.71e-09 , | |
645 | 2.66e-09 , 3.01e-09 , 1.95e-09 , 2.64e-09 , 2.42e-09 , 3.68e-09 , 2.66e-09 , | |
646 | 3.92e-09 , 1.18e-09 , 2.26e-09 , 1.57e-09 , 2.02e-09 , 2.71e-09 , 2.99e-09 , 3.04e-09 }; | |
647 | ||
648 | ||
0caa916b | 649 | if (esd->GetRunNumber() <= 137165) { |
62164ba5 | 650 | par0=par0_137161; |
651 | par1=par1_137161; | |
652 | par2=par2_137161; | |
653 | } else { | |
654 | par0=par0_137366; | |
655 | par1=par1_137366; | |
656 | par2=par2_137366; | |
657 | } | |
658 | // | |
659 | Float_t multCorr = 0; | |
660 | Float_t multCorr2 = 0; | |
661 | Float_t multChCorr[64]; | |
662 | AliESDVZERO* esdV0 = esd->GetVZEROData(); | |
663 | for(Int_t i = 0; i < 64; ++i) { | |
664 | Double_t b = (esdV0->GetMultiplicity(i)*par1[i]-par0[i]); | |
665 | Double_t s = (b*b-4.*par2[i]*esdV0->GetMultiplicity(i)*esdV0->GetMultiplicity(i)); | |
0caa916b | 666 | Double_t n = (s<0) ? -b : (-b + TMath::Sqrt(s)); |
62164ba5 | 667 | multChCorr[i] = 2.*esdV0->GetMultiplicity(i)/n*par0[i]; |
668 | multCorr += multChCorr[i]; | |
669 | multCorr2 += (multChCorr[i]/par0[i]/64.); | |
670 | } | |
671 | v0CorrResc = multCorr2; | |
672 | return multCorr; | |
673 | } | |
674 | ||
675 | //____________________________________________________________________ | |
676 | Float_t AliCentralitySelectionTask::GetCorrSPD2(Float_t spd2raw,Float_t zv) | |
677 | { | |
678 | // renormalize N spd2 clusters at given Zv to acceptance at Zv=0 | |
679 | const double pars[] = {8.10030e-01,-2.80364e-03,-7.19504e-04}; | |
680 | zv -= pars[0]; | |
681 | float corr = 1 + zv*(pars[1] + zv*pars[2]); | |
682 | return corr>0 ? spd2raw/corr : -1; | |
683 | } |