1 /**************************************************************************
2 * Copyright(c) 1998-2008, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
16 //*****************************************************
17 // Class AliCentralitySelectionTask
18 // Class to analyze determine centrality
19 // author: Alberica Toia
20 //*****************************************************
28 #include <TObjString.h>
32 #include <TDirectory.h>
35 #include "AliAnalysisManager.h"
36 #include "AliVEvent.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"
48 #include "AliESDVertex.h"
49 #include "AliAODVertex.h"
50 #include "AliAODMCHeader.h"
51 #include "AliMCEvent.h"
52 #include "AliMCEventHandler.h"
53 #include "AliMCParticle.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"
65 ClassImp(AliCentralitySelectionTask)
68 //________________________________________________________________________
69 AliCentralitySelectionTask::AliCentralitySelectionTask():
72 fAnalysisInput("ESD"),
79 fFileList2(new TList),
101 // Default constructor
102 fFileList->SetOwner();
103 fFileList2->SetOwner();
105 AliInfo("Centrality Selection enabled.");
108 //________________________________________________________________________
109 AliCentralitySelectionTask::AliCentralitySelectionTask(const char *name):
110 AliAnalysisTaskSE(name),
112 fAnalysisInput("ESD"),
118 fFileList(new TList),
119 fFileList2(new TList),
141 // Default constructor
142 fFileList->SetOwner();
143 fFileList2->SetOwner();
145 AliInfo("Centrality Selection enabled.");
148 //________________________________________________________________________
149 AliCentralitySelectionTask& AliCentralitySelectionTask::operator=(const AliCentralitySelectionTask& c)
151 // Assignment operator
153 AliAnalysisTaskSE::operator=(c);
158 //________________________________________________________________________
159 AliCentralitySelectionTask::AliCentralitySelectionTask(const AliCentralitySelectionTask& ana):
160 AliAnalysisTaskSE(ana),
162 fAnalysisInput(ana.fDebug),
163 fIsMCInput(ana.fIsMCInput),
166 fCentfilename(ana.fCentfilename),
167 fCentfilename2(ana.fCentfilename2),
168 fFileList(ana.fFileList),
169 fFileList2(ana.fFileList2),
170 fCurrentRun(ana.fCurrentRun),
172 fCentV0M(ana.fCentV0M),
173 fCentFMD(ana.fCentFMD),
174 fCentTRK(ana.fCentTRK),
175 fCentTKL(ana.fCentTKL),
176 fCentCL0(ana.fCentCL0),
177 fCentCL1(ana.fCentCL1),
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),
186 fHtempCL1(ana.fHtempCL1),
187 fHtempV0MvsFMD(ana.fHtempV0MvsFMD),
188 fHtempTKLvsV0M(ana.fHtempTKLvsV0M),
189 fHtempZEMvsZDC(ana.fHtempZEMvsZDC)
194 //________________________________________________________________________
195 AliCentralitySelectionTask::~AliCentralitySelectionTask()
212 //________________________________________________________________________
213 void AliCentralitySelectionTask::UserCreateOutputObjects()
215 // Create the output containers
216 if(fDebug>1) printf("AnalysisCentralitySelectionTask::UserCreateOutputObjects() \n");
218 if (fFileList->GetEntries() < 1) {
219 AliError("No Inputfiles Added");
222 AliLog::SetClassDebugLevel("AliCentralitySelectionTask", AliLog::kInfo);
225 //________________________________________________________________________
226 void AliCentralitySelectionTask::UserExec(Option_t */*option*/)
228 // Execute analysis for current event:
229 if(fDebug>1) printf(" **** AliCentralitySelectionTask::UserExec() \n");
231 Float_t zncEnergy; // ZNC Energy
232 Float_t zpcEnergy; // ZPC Energy
233 Float_t znaEnergy; // ZNA Energy
234 Float_t zpaEnergy; // ZPA Energy
235 Float_t zem1Energy = 0.; // ZEM1 Energy
236 Float_t zem2Energy = 0.; // ZEM2 Energy
238 Int_t nTracks = 0; // no. tracks
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
242 Float_t spdCorr =0; // corrected spd2 multiplicity
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
249 Short_t v0Corr = 0; // corrected V0 multiplicity
250 Short_t v0CorrResc = 0; // corrected and rescaled V0 multiplicity
252 Float_t zvtx =0; // z-vertex SPD
254 AliESDCentrality *esdCent = 0;
256 if(fAnalysisInput.CompareTo("ESD")==0){
258 AliVEvent* event = InputEvent();
259 AliESDEvent* esd = dynamic_cast<AliESDEvent*>(event);
264 esdCent = esd->GetCentrality();
267 AliESDVZERO* esdV0 = esd->GetVZEROData();
268 multV0A=esdV0->GetMTotV0A();
269 multV0C=esdV0->GetMTotV0C();
272 v0Corr = (Short_t) (GetCorrV0(esd,v0CorrR));
273 v0CorrResc = (Short_t)v0CorrR;
276 const AliESDVertex* vtxESD = esd->GetPrimaryVertexSPD();
277 zvtx = vtxESD->GetZ();
279 // ***** CB info (tracklets, clusters, chips)
280 nTracks = event->GetNumberOfTracks();
282 const AliMultiplicity *mult = esd->GetMultiplicity();
284 nTracklets = mult->GetNumberOfTracklets();
286 for(Int_t ilay=0; ilay<6; ilay++){
287 nClusters[ilay] = mult->GetNumberOfITSClusters(ilay);
290 for(Int_t ilay=0; ilay<2; ilay++){
291 nChips[ilay] = mult->GetNumberOfFiredChips(ilay);
294 spdCorr = GetCorrSPD2(nClusters[1],zvtx);
297 AliESDFMD *fmd = esd->GetFMDData();
298 Float_t totalMultA = 0;
299 Float_t totalMultC = 0;
300 const Float_t fFMDLowCut = 0.4;
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++) {
311 Float_t FMDmult = fmd->Multiplicity(det,ring,sec,strip);
312 if(FMDmult == 0 || FMDmult == AliESDFMD::kInvalidMult) continue;
314 Float_t nParticles=0;
316 if(FMDmult > fFMDLowCut) {
320 if (det<3) totalMultA = totalMultA + nParticles;
321 else totalMultC = totalMultC + nParticles;
327 multFMDA = totalMultA;
328 multFMDC = totalMultC;
331 AliESDZDC *esdZDC = esd->GetESDZDC();
332 zncEnergy = (Float_t) (esdZDC->GetZDCN1Energy());
333 zpcEnergy = (Float_t) (esdZDC->GetZDCP1Energy());
334 znaEnergy = (Float_t) (esdZDC->GetZDCN2Energy());
335 zpaEnergy = (Float_t) (esdZDC->GetZDCP2Energy());
336 zem1Energy = (Float_t) (esdZDC->GetZDCEMEnergy(0));
337 zem2Energy = (Float_t) (esdZDC->GetZDCEMEnergy(1));
340 else if(fAnalysisInput.CompareTo("AOD")==0){
341 //AliAODEvent *aod = dynamic_cast<AliAODEvent*> (InputEvent());
343 printf(" AOD analysis not yet implemented!!!\n\n");
347 // ***** Centrality Selection
348 if(fHtempV0M) fCentV0M = fHtempV0M->GetBinContent(fHtempV0M->FindBin((v0Corr)));
349 /// else printf(" Centrality by V0 not available!!!\n\n");
350 if(fHtempFMD) fCentFMD = fHtempFMD->GetBinContent(fHtempFMD->FindBin((multFMDA+multFMDC)));
351 // else printf(" Centrality by FMD not available!!!\n\n");
352 if(fHtempTRK) fCentTRK = fHtempTRK->GetBinContent(fHtempTRK->FindBin(nTracks));
353 // else printf(" Centrality by TRK not available!!!\n\n");
354 if(fHtempTKL) fCentTKL = fHtempTKL->GetBinContent(fHtempTKL->FindBin(nTracklets));
355 // else printf(" Centrality by TKL not available!!!\n\n");
356 if(fHtempCL0) fCentCL0 = fHtempCL0->GetBinContent(fHtempCL0->FindBin(nClusters[0]));
357 // else printf(" Centrality by CL0 not available!!!\n\n");
358 if(fHtempCL1) fCentCL1 = fHtempCL1->GetBinContent(fHtempCL1->FindBin(spdCorr));
359 /// else printf(" Centrality by CL1 not available!!!\n\n");
361 if(fHtempV0MvsFMD) fCentV0MvsFMD = fHtempV0MvsFMD->GetBinContent(fHtempV0MvsFMD->FindBin((multV0A+multV0C)));
362 // else printf(" Centrality by V0 vs FMD not available!!!\n\n");
363 if(fHtempTKLvsV0M) fCentTKLvsV0M = fHtempTKLvsV0M->GetBinContent(fHtempTKLvsV0M->FindBin(nTracklets));
364 // else printf(" Centrality by V0 vs TKL not available!!!\n\n");
365 if(fHtempZEMvsZDC) fCentZEMvsZDC = fHtempZEMvsZDC->GetBinContent(fHtempZEMvsZDC->FindBin((zem1Energy+zem2Energy)/1000.));
366 // else printf(" Centrality by ZEM vs ZDC not available!!!\n\n");
368 esdCent->SetCentralityV0M(fCentV0M);
369 esdCent->SetCentralityFMD(fCentFMD);
370 esdCent->SetCentralityTRK(fCentTRK);
371 esdCent->SetCentralityTKL(fCentTKL);
372 esdCent->SetCentralityCL0(fCentCL0);
373 esdCent->SetCentralityCL1(fCentCL1);
374 esdCent->SetCentralityV0MvsFMD(fCentV0MvsFMD);
375 esdCent->SetCentralityTKLvsV0M(fCentTKLvsV0M);
376 esdCent->SetCentralityZEMvsZDC(fCentZEMvsZDC);
379 //________________________________________________________________________
380 void AliCentralitySelectionTask::ReadCentralityHistos()
382 // Read centrality histograms
383 TDirectory *owd = gDirectory;
384 fFile = TFile::Open(fCentfilename);
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"));
394 //________________________________________________________________________
395 void AliCentralitySelectionTask::ReadCentralityHistos2()
397 // Read centrality histograms
398 TDirectory *owd = gDirectory;
399 fFile2 = TFile::Open(fCentfilename2);
401 fHtempV0MvsFMD = (TH1F*) (fFile2->Get("hmultV0vsmultFMD_all_percentile"));
402 fHtempTKLvsV0M = (TH1F*) (fFile2->Get("hNtrackletsvsmultV0_all_percentile"));
403 fHtempZEMvsZDC = (TH1F*) (fFile2->Get("hEzemvsEzdc_all_percentile"));
406 //________________________________________________________________________
407 void AliCentralitySelectionTask::SetPercentileFile(TString filename)
409 // Set the percentile file name
410 fCentfilename = filename;
411 ReadCentralityHistos();
414 //________________________________________________________________________
415 void AliCentralitySelectionTask::SetPercentileFile2(TString filename)
417 // Set the percentile file name
418 fCentfilename2 = filename;
419 ReadCentralityHistos2();
422 //________________________________________________________________________
423 void AliCentralitySelectionTask::Terminate(Option_t */*option*/)
425 // Terminate analysis
426 if (fFile && fFile->IsOpen())
428 if (fFile2 && fFile2->IsOpen())
431 //________________________________________________________________________
432 Int_t AliCentralitySelectionTask::SetupRun(AliESDEvent* esd)
434 // Setup files for run
439 // check if something to be done
440 if (fCurrentRun == esd->GetRunNumber())
443 fCurrentRun = esd->GetRunNumber();
445 AliInfo(Form("Setup Centrality Selection for run %d\n",fCurrentRun));
447 fRunNo = fCurrentRun;
449 // CHANGE HERE FOR RUN RANGES
450 if ( fRunNo == 137162 ) fRunNo = 137161;
451 else if ( fRunNo == 137365 ) fRunNo = 137366;
452 else if ( fRunNo > 137366 ) fRunNo = 137366;
453 // CHANGE HERE FOR RUN RANGES
455 TString runName(Form("%d", fRunNo));
456 TString fileName("");
457 Bool_t isRunKnown = kFALSE;
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 ) {
463 TString str((dynamic_cast<TObjString*>(fFileList->At(idx)))->GetString());
464 if (str.Contains(runName)) {
472 if (fFileList->Last()) {
473 fileName += (dynamic_cast<TObjString*>(fFileList->Last()))->GetString();
474 AliError(Form("Run %d not known to centrality selection!", fCurrentRun));
478 if (fileName.Contains(".root")) {
479 AliInfo(Form("Centrality Selection for run %d is initialized with %s", fCurrentRun, fileName.Data()));
480 SetPercentileFile(fileName.Data());
486 //________________________________________________________________________
487 Float_t AliCentralitySelectionTask::GetCorrV0(const AliESDEvent* esd, float &v0CorrResc)
489 // correct V0 non-linearity, prepare a version rescaled to SPD2 corr
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 };
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 };
559 if (esd->GetRunNumber() <= 137165) {
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));
576 Double_t n = (s<0) ? -b : (-b + TMath::Sqrt(s));
577 multChCorr[i] = 2.*esdV0->GetMultiplicity(i)/n*par0[i];
578 multCorr += multChCorr[i];
579 multCorr2 += (multChCorr[i]/par0[i]/64.);
581 v0CorrResc = multCorr2;
585 //____________________________________________________________________
586 Float_t AliCentralitySelectionTask::GetCorrSPD2(Float_t spd2raw,Float_t zv)
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};
591 float corr = 1 + zv*(pars[1] + zv*pars[2]);
592 return corr>0 ? spd2raw/corr : -1;