]> git.uio.no Git - u/mrichter/AliRoot.git/blame - ANALYSIS/AliCentralitySelectionTask.cxx
Some corrections to the correct and rescaled V0 amplitude.
[u/mrichter/AliRoot.git] / ANALYSIS / AliCentralitySelectionTask.cxx
CommitLineData
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
65ClassImp(AliCentralitySelectionTask)
66
67
68//________________________________________________________________________
69AliCentralitySelectionTask::AliCentralitySelectionTask():
70AliAnalysisTaskSE(),
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//________________________________________________________________________
109AliCentralitySelectionTask::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//________________________________________________________________________
149AliCentralitySelectionTask& AliCentralitySelectionTask::operator=(const AliCentralitySelectionTask& c)
150{
151 // Assignment operator
152 if (this!=&c) {
153 AliAnalysisTaskSE::operator=(c);
154 }
155 return *this;
156}
157
158//________________________________________________________________________
159AliCentralitySelectionTask::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 195AliCentralitySelectionTask::~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//________________________________________________________________________
213void 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//________________________________________________________________________
226void 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 380void 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 395void 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 407void AliCentralitySelectionTask::SetPercentileFile(TString filename)
408{
9f14d90a 409// Set the percentile file name
d15bf53f 410 fCentfilename = filename;
411 ReadCentralityHistos();
412}
413
68e344b7 414//________________________________________________________________________
d15bf53f 415void AliCentralitySelectionTask::SetPercentileFile2(TString filename)
416{
9f14d90a 417// Set the percentile file name
d15bf53f 418 fCentfilename2 = filename;
419 ReadCentralityHistos2();
e8472cd0 420}
421
422//________________________________________________________________________
423void 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 432Int_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 487Float_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//____________________________________________________________________
586Float_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}