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 "AliESDtrackCuts.h"
46 #include "AliMultiplicity.h"
47 #include "AliAODHandler.h"
48 #include "AliAODEvent.h"
49 #include "AliESDVertex.h"
50 #include "AliAODVertex.h"
51 #include "AliAODMCHeader.h"
52 #include "AliMCEvent.h"
53 #include "AliMCEventHandler.h"
54 #include "AliMCParticle.h"
56 #include "AliHeader.h"
57 #include "AliAODMCParticle.h"
58 #include "AliAnalysisTaskSE.h"
59 #include "AliGenEventHeader.h"
60 #include "AliGenHijingEventHeader.h"
61 #include "AliPhysicsSelectionTask.h"
62 #include "AliPhysicsSelection.h"
63 #include "AliBackgroundSelection.h"
64 #include "AliCentralitySelectionTask.h"
66 ClassImp(AliCentralitySelectionTask)
69 //________________________________________________________________________
70 AliCentralitySelectionTask::AliCentralitySelectionTask():
73 fAnalysisInput("ESD"),
105 fHOutCentV0MvsFMD(0),
106 fHOutCentTKLvsV0M(0),
109 // Default constructor
110 AliInfo("Centrality Selection enabled.");
111 DefineOutput(1, TList::Class());
114 //________________________________________________________________________
115 AliCentralitySelectionTask::AliCentralitySelectionTask(const char *name):
116 AliAnalysisTaskSE(name),
118 fAnalysisInput("ESD"),
150 fHOutCentV0MvsFMD(0),
151 fHOutCentTKLvsV0M(0),
154 // Default constructor
155 AliInfo("Centrality Selection enabled.");
156 DefineOutput(1, TList::Class());
159 //________________________________________________________________________
160 AliCentralitySelectionTask& AliCentralitySelectionTask::operator=(const AliCentralitySelectionTask& c)
162 // Assignment operator
164 AliAnalysisTaskSE::operator=(c);
169 //________________________________________________________________________
170 AliCentralitySelectionTask::AliCentralitySelectionTask(const AliCentralitySelectionTask& ana):
171 AliAnalysisTaskSE(ana),
173 fAnalysisInput(ana.fDebug),
174 fIsMCInput(ana.fIsMCInput),
177 fCurrentRun(ana.fCurrentRun),
179 fTrackCuts(ana.fTrackCuts),
180 fCentV0M(ana.fCentV0M),
181 fCentFMD(ana.fCentFMD),
182 fCentTRK(ana.fCentTRK),
183 fCentTKL(ana.fCentTKL),
184 fCentCL0(ana.fCentCL0),
185 fCentCL1(ana.fCentCL1),
186 fCentV0MvsFMD(ana.fCentV0MvsFMD),
187 fCentTKLvsV0M(ana.fCentTKLvsV0M),
188 fCentZEMvsZDC(ana.fCentZEMvsZDC),
189 fHtempV0M(ana.fHtempV0M),
190 fHtempFMD(ana.fHtempFMD),
191 fHtempTRK(ana.fHtempTRK),
192 fHtempTKL(ana.fHtempTKL),
193 fHtempCL0(ana.fHtempCL0),
194 fHtempCL1(ana.fHtempCL1),
195 fHtempV0MvsFMD(ana.fHtempV0MvsFMD),
196 fHtempTKLvsV0M(ana.fHtempTKLvsV0M),
197 fHtempZEMvsZDC(ana.fHtempZEMvsZDC),
198 fOutputList(ana.fOutputList),
199 fHOutCentV0M (ana.fHOutCentV0M ),
200 fHOutCentFMD (ana.fHOutCentFMD ),
201 fHOutCentTRK (ana.fHOutCentTRK ),
202 fHOutCentTKL (ana.fHOutCentTKL ),
203 fHOutCentCL0 (ana.fHOutCentCL0 ),
204 fHOutCentCL1 (ana.fHOutCentCL1 ),
205 fHOutCentV0MvsFMD(ana.fHOutCentV0MvsFMD),
206 fHOutCentTKLvsV0M(ana.fHOutCentTKLvsV0M),
207 fHOutCentZEMvsZDC(ana.fHOutCentZEMvsZDC)
212 //________________________________________________________________________
213 AliCentralitySelectionTask::~AliCentralitySelectionTask()
216 if (fOutputList && !AliAnalysisManager::GetAnalysisManager()->IsProofMode()) delete fOutputList;
219 //________________________________________________________________________
220 void AliCentralitySelectionTask::UserCreateOutputObjects()
222 // Create the output containers
223 if(fDebug>1) printf("AnalysisCentralitySelectionTask::UserCreateOutputObjects() \n");
224 AliLog::SetClassDebugLevel("AliCentralitySelectionTask", AliLog::kInfo);
226 fOutputList = new TList();
227 fOutputList->SetOwner();
228 fHOutCentV0M = new TH1F("fHOutCentV0M","fHOutCentV0M; Centrality V0",101,-0.5,100.5);
229 fHOutCentFMD = new TH1F("fHOutCentFMD","fHOutCentFMD; Centrality FMD",101,-0.5,100.5);
230 fHOutCentTRK = new TH1F("fHOutCentTRK","fHOutCentTRK; Centrality TPC",101,-0.5,100.5);
231 fHOutCentTKL = new TH1F("fHOutCentTKL","fHOutCentTKL; Centrality tracklets",101,-0.5,100.5);
232 fHOutCentCL0 = new TH1F("fHOutCentCL0","fHOutCentCL0; Centrality SPD inner",101,-0.5,100.5);
233 fHOutCentCL1 = new TH1F("fHOutCentCL1","fHOutCentCL1; Centrality SPD outer",101,-0.5,100.5);
234 fHOutCentV0MvsFMD= new TH1F("fHOutCentV0MvsFMD","fHOutCentV0MvsFMD; Centrality V0 vs FMD",101,-0.5,100.5);
235 fHOutCentTKLvsV0M= new TH1F("fHOutCentTKLvsV0M","fHOutCentTKLvsV0M; Centrality tracklets vs V0",101,-0.5,100.5);
236 fHOutCentZEMvsZDC= new TH1F("fHOutCentZEMvsZDC","fHOutCentZEMvsZDC; Centrality ZEM vs ZDC",101,-0.5,100.5);
238 fOutputList->Add( fHOutCentV0M );
239 fOutputList->Add( fHOutCentFMD );
240 fOutputList->Add( fHOutCentTRK );
241 fOutputList->Add( fHOutCentTKL );
242 fOutputList->Add( fHOutCentCL0 );
243 fOutputList->Add( fHOutCentCL1 );
244 fOutputList->Add( fHOutCentV0MvsFMD);
245 fOutputList->Add( fHOutCentTKLvsV0M);
246 fOutputList->Add( fHOutCentZEMvsZDC);
248 PostData(1, fOutputList);
251 //________________________________________________________________________
252 void AliCentralitySelectionTask::UserExec(Option_t */*option*/)
254 // Execute analysis for current event:
255 if(fDebug>1) printf(" **** AliCentralitySelectionTask::UserExec() \n");
257 Float_t zncEnergy; // ZNC Energy
258 Float_t zpcEnergy; // ZPC Energy
259 Float_t znaEnergy; // ZNA Energy
260 Float_t zpaEnergy; // ZPA Energy
261 Float_t zem1Energy = 0.; // ZEM1 Energy
262 Float_t zem2Energy = 0.; // ZEM2 Energy
264 Int_t nTracks = 0; // no. tracks
265 Int_t nTracklets = 0; // no. tracklets
266 Int_t nClusters[6]; // no. clusters on 6 ITS layers
267 Int_t nChips[2]; // no. chips on 2 SPD layers
268 Float_t spdCorr =0; // corrected spd2 multiplicity
270 Float_t multV0A = 0; // multiplicity from V0 reco side A
271 Float_t multV0C = 0; // multiplicity from V0 reco side C
272 Float_t multFMDA = 0; // multiplicity from FMD on detector A
273 Float_t multFMDC = 0; // multiplicity from FMD on detector C
275 Short_t v0Corr = 0; // corrected V0 multiplicity
276 Short_t v0CorrResc = 0; // corrected and rescaled V0 multiplicity
278 Float_t zvtx =0; // z-vertex SPD
280 AliESDCentrality *esdCent = 0;
282 if(fAnalysisInput.CompareTo("ESD")==0){
284 AliVEvent* event = InputEvent();
285 AliESDEvent* esd = dynamic_cast<AliESDEvent*>(event);
289 AliFatal("Centrality File not available for this run");
292 esdCent = esd->GetCentrality();
295 AliESDVZERO* esdV0 = esd->GetVZEROData();
296 multV0A=esdV0->GetMTotV0A();
297 multV0C=esdV0->GetMTotV0C();
300 v0Corr = GetCorrV0(esd,v0CorrR,fRunNo);
301 v0Corr = (Short_t)v0Corr;
302 v0CorrResc = (Short_t)v0CorrR;
305 const AliESDVertex* vtxESD = esd->GetPrimaryVertexSPD();
306 zvtx = vtxESD->GetZ();
308 // ***** CB info (tracklets, clusters, chips)
309 //nTracks = event->GetNumberOfTracks();
310 fTrackCuts = AliESDtrackCuts::GetStandardTPCOnlyTrackCuts();
311 nTracks = fTrackCuts ? (Short_t)fTrackCuts->GetReferenceMultiplicity(esd,kTRUE):-1;
313 const AliMultiplicity *mult = esd->GetMultiplicity();
315 nTracklets = mult->GetNumberOfTracklets();
317 for(Int_t ilay=0; ilay<6; ilay++){
318 nClusters[ilay] = mult->GetNumberOfITSClusters(ilay);
321 for(Int_t ilay=0; ilay<2; ilay++){
322 nChips[ilay] = mult->GetNumberOfFiredChips(ilay);
325 spdCorr = GetCorrSPD2(nClusters[1],zvtx);
328 AliESDFMD *fmd = esd->GetFMDData();
329 Float_t totalMultA = 0;
330 Float_t totalMultC = 0;
331 const Float_t fFMDLowCut = 0.4;
333 for(UShort_t det=1;det<=3;det++) {
334 Int_t nRings = (det==1 ? 1 : 2);
335 for (UShort_t ir = 0; ir < nRings; ir++) {
336 Char_t ring = (ir == 0 ? 'I' : 'O');
337 UShort_t nsec = (ir == 0 ? 20 : 40);
338 UShort_t nstr = (ir == 0 ? 512 : 256);
339 for(UShort_t sec =0; sec < nsec; sec++) {
340 for(UShort_t strip = 0; strip < nstr; strip++) {
342 Float_t FMDmult = fmd->Multiplicity(det,ring,sec,strip);
343 if(FMDmult == 0 || FMDmult == AliESDFMD::kInvalidMult) continue;
345 Float_t nParticles=0;
347 if(FMDmult > fFMDLowCut) {
351 if (det<3) totalMultA = totalMultA + nParticles;
352 else totalMultC = totalMultC + nParticles;
358 multFMDA = totalMultA;
359 multFMDC = totalMultC;
362 AliESDZDC *esdZDC = esd->GetESDZDC();
363 zncEnergy = (Float_t) (esdZDC->GetZDCN1Energy());
364 zpcEnergy = (Float_t) (esdZDC->GetZDCP1Energy());
365 znaEnergy = (Float_t) (esdZDC->GetZDCN2Energy());
366 zpaEnergy = (Float_t) (esdZDC->GetZDCP2Energy());
367 zem1Energy = (Float_t) (esdZDC->GetZDCEMEnergy(0));
368 zem2Energy = (Float_t) (esdZDC->GetZDCEMEnergy(1));
371 else if(fAnalysisInput.CompareTo("AOD")==0){
372 //AliAODEvent *aod = dynamic_cast<AliAODEvent*> (InputEvent());
374 printf(" AOD analysis not yet implemented!!!\n\n");
378 // ***** Centrality Selection
379 if(fHtempV0M) fCentV0M = fHtempV0M->GetBinContent(fHtempV0M->FindBin((v0Corr)));
380 /// else printf(" Centrality by V0 not available!!!\n\n");
381 if(fHtempFMD) fCentFMD = fHtempFMD->GetBinContent(fHtempFMD->FindBin((multFMDA+multFMDC)));
382 // else printf(" Centrality by FMD not available!!!\n\n");
383 if(fHtempTRK) fCentTRK = fHtempTRK->GetBinContent(fHtempTRK->FindBin(nTracks));
384 // else printf(" Centrality by TRK not available!!!\n\n");
385 if(fHtempTKL) fCentTKL = fHtempTKL->GetBinContent(fHtempTKL->FindBin(nTracklets));
386 // else printf(" Centrality by TKL not available!!!\n\n");
387 if(fHtempCL0) fCentCL0 = fHtempCL0->GetBinContent(fHtempCL0->FindBin(nClusters[0]));
388 // else printf(" Centrality by CL0 not available!!!\n\n");
389 if(fHtempCL1) fCentCL1 = fHtempCL1->GetBinContent(fHtempCL1->FindBin(spdCorr));
390 /// else printf(" Centrality by CL1 not available!!!\n\n");
392 if(fHtempV0MvsFMD) fCentV0MvsFMD = fHtempV0MvsFMD->GetBinContent(fHtempV0MvsFMD->FindBin((multV0A+multV0C)));
393 // else printf(" Centrality by V0 vs FMD not available!!!\n\n");
394 if(fHtempTKLvsV0M) fCentTKLvsV0M = fHtempTKLvsV0M->GetBinContent(fHtempTKLvsV0M->FindBin(nTracklets));
395 // else printf(" Centrality by V0 vs TKL not available!!!\n\n");
396 if(fHtempZEMvsZDC) fCentZEMvsZDC = fHtempZEMvsZDC->GetBinContent(fHtempZEMvsZDC->FindBin((zem1Energy+zem2Energy)/1000.));
397 // else printf(" Centrality by ZEM vs ZDC not available!!!\n\n");
399 esdCent->SetCentralityV0M(fCentV0M);
400 esdCent->SetCentralityFMD(fCentFMD);
401 esdCent->SetCentralityTRK(fCentTRK);
402 esdCent->SetCentralityTKL(fCentTKL);
403 esdCent->SetCentralityCL0(fCentCL0);
404 esdCent->SetCentralityCL1(fCentCL1);
405 esdCent->SetCentralityV0MvsFMD(fCentV0MvsFMD);
406 esdCent->SetCentralityTKLvsV0M(fCentTKLvsV0M);
407 esdCent->SetCentralityZEMvsZDC(fCentZEMvsZDC);
409 fHOutCentV0M->Fill(fCentV0M);
410 fHOutCentFMD->Fill(fCentFMD);
411 fHOutCentTRK->Fill(fCentTRK);
412 fHOutCentTKL->Fill(fCentTKL);
413 fHOutCentCL0->Fill(fCentCL0);
414 fHOutCentCL1->Fill(fCentCL1);
415 fHOutCentV0MvsFMD->Fill(fCentV0MvsFMD);
416 fHOutCentTKLvsV0M->Fill(fCentTKLvsV0M);
417 fHOutCentZEMvsZDC->Fill(fCentZEMvsZDC);
419 PostData(1, fOutputList);
422 //________________________________________________________________________
423 void AliCentralitySelectionTask::ReadCentralityHistos(TString fCentfilename)
425 // Read centrality histograms
426 TDirectory *owd = gDirectory;
427 fFile = TFile::Open(fCentfilename);
429 fHtempV0M = (TH1F*) (fFile->Get("hmultV0_percentile"));
430 fHtempFMD = (TH1F*) (fFile->Get("hmultFMD_percentile"));
431 fHtempTRK = (TH1F*) (fFile->Get("hNtracks_percentile"));
432 fHtempTKL = (TH1F*) (fFile->Get("hNtracklets_percentile"));
433 fHtempCL0 = (TH1F*) (fFile->Get("hNclusters0_percentile"));
434 fHtempCL1 = (TH1F*) (fFile->Get("hNclusters1_percentile"));
437 //________________________________________________________________________
438 void AliCentralitySelectionTask::ReadCentralityHistos2(TString fCentfilename2)
440 // Read centrality histograms
441 TDirectory *owd = gDirectory;
442 fFile2 = TFile::Open(fCentfilename2);
444 fHtempV0MvsFMD = (TH1F*) (fFile2->Get("hmultV0vsmultFMD_all_percentile"));
445 fHtempTKLvsV0M = (TH1F*) (fFile2->Get("hNtrackletsvsmultV0_all_percentile"));
446 fHtempZEMvsZDC = (TH1F*) (fFile2->Get("hEzemvsEzdc_all_percentile"));
449 //________________________________________________________________________
450 void AliCentralitySelectionTask::Terminate(Option_t */*option*/)
452 // Terminate analysis
453 if (fFile && fFile->IsOpen())
455 if (fFile2 && fFile2->IsOpen())
458 //________________________________________________________________________
459 Int_t AliCentralitySelectionTask::SetupRun(AliESDEvent* esd)
461 // Setup files for run
466 // check if something to be done
467 if (fCurrentRun == esd->GetRunNumber())
470 fCurrentRun = esd->GetRunNumber();
472 AliInfo(Form("Setup Centrality Selection for run %d\n",fCurrentRun));
474 fRunNo = fCurrentRun;
476 // CHANGE HERE FOR RUN RANGES
477 if ( fRunNo <= 137162 ) fRunNo = 137161;
478 else if ( fRunNo == 137365 ) fRunNo = 137366;
479 else if ( fRunNo >= 137366 ) fRunNo = 137366;
480 // CHANGE HERE FOR RUN RANGES
482 TString fileName(Form("$ALICE_ROOT/ANALYSIS/macros/AliCentralityBy1D_%d.root", fRunNo));
483 TString fileName2(Form("$ALICE_ROOT/ANALYSIS/macros/AliCentralityByFunction_%d.root", fRunNo));
484 Bool_t isRunKnown = kFALSE;
486 // Check if run exists
487 fFile = TFile::Open(fileName);
491 // if not, take the last one
493 // fileName += (dynamic_cast<TObjString*>(fFileList->Last()))->GetString();
494 AliError(Form("Run %d not known to centrality selection!", fCurrentRun));
497 if (fileName.Contains(".root")) {
498 AliInfo(Form("Centrality Selection for run %d is initialized with %s", fCurrentRun, fileName.Data()));
499 ReadCentralityHistos(fileName.Data());
500 ReadCentralityHistos2(fileName2.Data());
505 //________________________________________________________________________
506 Float_t AliCentralitySelectionTask::GetCorrV0(const AliESDEvent* esd, float &v0CorrResc, int run)
508 // correct V0 non-linearity, prepare a version rescaled to SPD2 corr
513 Double_t par0_137161[64] = { 6.71e-02 , 6.86e-02 , 7.06e-02 , 6.32e-02 ,
514 5.91e-02 , 6.07e-02 , 5.78e-02 , 5.73e-02 , 5.91e-02 , 6.22e-02 ,
515 5.90e-02 , 6.11e-02 , 5.55e-02 , 5.29e-02 , 5.19e-02 , 5.56e-02 ,
516 6.25e-02 , 7.03e-02 , 5.64e-02 , 5.81e-02 , 4.57e-02 , 5.30e-02 ,
517 5.13e-02 , 6.43e-02 , 6.27e-02 , 6.48e-02 , 6.07e-02 , 1.01e-01 ,
518 6.68e-02 , 7.16e-02 , 6.36e-02 , 5.95e-02 , 2.52e-02 , 2.82e-02 ,
519 2.56e-02 , 2.86e-02 , 2.82e-02 , 2.10e-02 , 2.13e-02 , 2.32e-02 ,
520 2.75e-02 , 4.34e-02 , 3.78e-02 , 4.52e-02 , 4.11e-02 , 3.89e-02 ,
521 4.10e-02 , 3.73e-02 , 4.51e-02 , 5.07e-02 , 5.42e-02 , 4.74e-02 ,
522 4.33e-02 , 4.44e-02 , 4.64e-02 , 3.01e-02 , 6.38e-02 , 5.26e-02 ,
523 4.99e-02 , 5.26e-02 , 5.47e-02 , 3.84e-02 , 5.00e-02 , 5.20e-02 };
524 Double_t par1_137161[64] = { -6.68e-05 , -7.78e-05 , -6.88e-05 , -5.92e-05 ,
525 -2.43e-05 , -3.54e-05 , -2.91e-05 , -1.99e-05 , -1.40e-05 , -4.01e-05 ,
526 -2.29e-05 , -3.68e-05 , -2.53e-05 , -2.44e-06 , -9.22e-06 , -1.51e-05 ,
527 -2.80e-05 , -2.34e-05 , -1.72e-05 , -1.81e-05 , -1.29e-05 , -2.65e-05 ,
528 -1.61e-05 , -2.86e-05 , -1.74e-05 , -4.23e-05 , -3.41e-05 , -1.05e-04 ,
529 -2.76e-05 , -4.71e-05 , -3.06e-05 , -2.32e-05 , -1.55e-06 , 2.15e-05 ,
530 1.40e-05 , 2.16e-05 , 1.21e-05 , 3.05e-06 , 1.67e-05 , -3.84e-06 ,
531 3.09e-06 , 1.50e-05 , 3.47e-06 , 4.87e-06 , -3.71e-07 , -1.75e-06 ,
532 -1.80e-06 , 9.99e-06 , -6.46e-06 , -4.91e-06 , 1.33e-05 , -2.52e-07 ,
533 -3.85e-06 , 4.94e-06 , -2.48e-07 , -1.20e-05 , 2.07e-06 , 6.12e-06 ,
534 -1.18e-06 , 4.54e-06 , -1.54e-05 , -1.25e-05 , 1.46e-06 , -6.67e-06 };
535 Double_t par2_137161[64] = { 1.29e-08 , 1.51e-08 , 1.43e-08 , 1.11e-08 ,
536 5.04e-09 , 6.99e-09 , 5.58e-09 , 4.15e-09 , 4.00e-09 , 8.22e-09 ,
537 4.97e-09 , 7.66e-09 , 4.91e-09 , 1.10e-09 , 2.64e-09 , 3.64e-09 ,
538 5.76e-09 , 5.46e-09 , 3.38e-09 , 3.47e-09 , 2.43e-09 , 4.13e-09 ,
539 2.80e-09 , 5.80e-09 , 3.86e-09 , 7.46e-09 , 5.98e-09 , 2.58e-08 ,
540 5.50e-09 , 8.72e-09 , 5.23e-09 , 4.37e-09 , 2.33e-09 , -6.01e-10 ,
541 3.99e-11 , -2.02e-10 , 7.67e-10 , 2.03e-09 , 1.17e-10 , 2.56e-09 ,
542 1.16e-09 , -4.75e-10 , 1.28e-09 , 1.23e-09 , 1.62e-09 , 1.61e-09 ,
543 1.93e-09 , 2.97e-10 , 2.21e-09 , 2.16e-09 , 5.22e-10 , 1.03e-09 ,
544 1.56e-09 , 5.00e-10 , 1.01e-09 , 2.93e-09 , 1.05e-09 , 9.96e-11 ,
545 1.21e-09 , 7.45e-10 , 3.07e-09 , 2.31e-09 , 6.70e-10 , 1.89e-09 };
547 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 ,
548 6.00e-02 , 6.10e-02 , 6.49e-02 , 6.17e-02 , 6.33e-02 , 6.00e-02 , 5.48e-02 ,
549 5.44e-02 , 5.81e-02 , 6.49e-02 , 7.07e-02 , 5.91e-02 , 6.18e-02 , 4.82e-02 ,
550 5.67e-02 , 5.36e-02 , 6.60e-02 , 6.37e-02 , 6.78e-02 , 6.31e-02 , 1.04e-01 ,
551 6.91e-02 , 7.32e-02 , 6.61e-02 , 6.16e-02 , 2.64e-02 , 2.81e-02 , 2.64e-02 ,
552 2.85e-02 , 2.87e-02 , 2.18e-02 , 2.19e-02 , 2.43e-02 , 2.81e-02 , 4.37e-02 ,
553 3.90e-02 , 4.66e-02 , 4.24e-02 , 4.09e-02 , 4.21e-02 , 3.88e-02 , 4.83e-02 ,
554 5.23e-02 , 5.44e-02 , 4.85e-02 , 4.42e-02 , 4.58e-02 , 4.74e-02 , 3.14e-02 ,
555 6.31e-02 , 5.30e-02 , 5.01e-02 , 5.33e-02 , 5.70e-02 , 3.95e-02 , 4.98e-02 , 5.31e-02 };
556 Double_t par1_137366[64] = { -6.99e-05 , -6.99e-05 , -6.94e-05 , -6.55e-05 , -3.55e-05 , -4.50e-05 ,
557 -3.10e-05 , -2.81e-05 , -2.29e-05 , -3.89e-05 , -2.53e-05 , -4.25e-05 ,
558 -1.87e-05 , -2.01e-05 , -1.53e-05 , -2.14e-05 , -2.86e-05 , -4.70e-05 ,
559 -2.23e-05 , -3.30e-05 ,-9.74e-06 , -2.62e-05 , -1.76e-05 , -2.38e-05 ,
560 -2.40e-05 , -3.43e-05 , -2.75e-05 , -6.86e-05 ,-2.35e-05 , -4.45e-05 ,
561 -2.51e-05 , -2.20e-05 , -1.25e-16 , -2.04e-17 , -2.06e-17 , -3.74e-19 ,
562 -1.18e-18 , -2.02e-15 , -3.78e-06 , -1.26e-06 , -2.71e-06 , -6.23e-17 ,
563 -7.39e-08 , -1.76e-16 , -8.98e-06 , -4.10e-18 , -1.34e-05 , -1.06e-16 ,
564 -3.34e-06 , -1.04e-05 , -5.28e-06 , -7.34e-06 , -1.05e-05 , -7.68e-06 ,
565 -1.78e-05 , -1.19e-05 , -1.78e-05 , -1.34e-06 , -9.23e-06 , -3.34e-06 ,
566 -8.02e-06 , -1.39e-05 , -1.38e-05 , -1.40e-05 };
567 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 ,
568 5.53e-09 , 5.40e-09 , 7.93e-09 , 5.49e-09 , 8.77e-09 , 4.21e-09 , 3.93e-09 ,
569 3.60e-09 , 4.67e-09 , 5.59e-09 , 8.81e-09 , 3.89e-09 , 6.19e-09 , 1.97e-09 ,
570 4.38e-09 , 3.26e-09 , 5.00e-09 , 4.58e-09 , 6.39e-09 , 5.03e-09 , 1.30e-08 ,
571 4.95e-09 , 8.26e-09 , 4.57e-09 , 4.10e-09 , 2.35e-09 , 2.30e-09 , 2.15e-09 ,
572 2.27e-09 , 2.17e-09 , 2.27e-09 , 2.97e-09 , 2.25e-09 , 1.69e-09 , 1.44e-09 ,
573 1.66e-09 , 1.75e-09 , 2.88e-09 , 1.82e-09 , 3.64e-09 , 1.80e-09 , 1.71e-09 ,
574 2.66e-09 , 3.01e-09 , 1.95e-09 , 2.64e-09 , 2.42e-09 , 3.68e-09 , 2.66e-09 ,
575 3.92e-09 , 1.18e-09 , 2.26e-09 , 1.57e-09 , 2.02e-09 , 2.71e-09 , 2.99e-09 , 3.04e-09 };
588 Float_t multCorr = 0;
589 Float_t multCorr2 = 0;
590 Float_t multChCorr[64];
591 AliESDVZERO* esdV0 = esd->GetVZEROData();
592 for(Int_t i = 0; i < 64; ++i) {
593 Double_t b = (esdV0->GetMultiplicity(i)*par1[i]-par0[i]);
594 Double_t s = (b*b-4.*par2[i]*esdV0->GetMultiplicity(i)*esdV0->GetMultiplicity(i));
597 printf("FPE %d %.2f %.2f %.2e\n",i,esdV0->GetMultiplicity(i),b,(b*b-4.*par2[i]*esdV0->GetMultiplicity(i)*esdV0->GetMultiplicity(i)));
601 n = (-b + TMath::Sqrt(s));
603 multChCorr[i] = 2.*esdV0->GetMultiplicity(i)/n*par0[i];
604 multCorr += multChCorr[i];
605 multCorr2 += (multChCorr[i]/par0[i]/64.);
607 v0CorrResc = multCorr2;
611 //____________________________________________________________________
612 Float_t AliCentralitySelectionTask::GetCorrSPD2(Float_t spd2raw,Float_t zv)
614 // renormalize N spd2 clusters at given Zv to acceptance at Zv=0
615 const double pars[] = {8.10030e-01,-2.80364e-03,-7.19504e-04};
617 float corr = 1 + zv*(pars[1] + zv*pars[2]);
618 return corr>0 ? spd2raw/corr : -1;