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