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>
36 #include "AliAnalysisManager.h"
37 #include "AliVEvent.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"
46 #include "AliESDtrackCuts.h"
47 #include "AliMultiplicity.h"
48 #include "AliAODHandler.h"
49 #include "AliAODEvent.h"
50 #include "AliESDVertex.h"
51 #include "AliAODVertex.h"
52 #include "AliAODMCHeader.h"
53 #include "AliMCEvent.h"
54 #include "AliMCEventHandler.h"
55 #include "AliMCParticle.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"
67 ClassImp(AliCentralitySelectionTask)
70 //________________________________________________________________________
71 AliCentralitySelectionTask::AliCentralitySelectionTask():
74 fAnalysisInput("ESD"),
106 fHOutCentV0MvsFMD(0),
107 fHOutCentTKLvsV0M(0),
110 // Default constructor
111 AliInfo("Centrality Selection enabled.");
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;
217 if (fTrackCuts) delete fTrackCuts;
220 //________________________________________________________________________
221 void AliCentralitySelectionTask::UserCreateOutputObjects()
223 // Create the output containers
224 if(fDebug>1) printf("AnalysisCentralitySelectionTask::UserCreateOutputObjects() \n");
225 AliLog::SetClassDebugLevel("AliCentralitySelectionTask", AliLog::kInfo);
227 fOutputList = new TList();
228 fOutputList->SetOwner();
229 fHOutCentV0M = new TH1F("fHOutCentV0M","fHOutCentV0M; Centrality V0",101,-0.5,100.5);
230 fHOutCentFMD = new TH1F("fHOutCentFMD","fHOutCentFMD; Centrality FMD",101,-0.5,100.5);
231 fHOutCentTRK = new TH1F("fHOutCentTRK","fHOutCentTRK; Centrality TPC",101,-0.5,100.5);
232 fHOutCentTKL = new TH1F("fHOutCentTKL","fHOutCentTKL; Centrality tracklets",101,-0.5,100.5);
233 fHOutCentCL0 = new TH1F("fHOutCentCL0","fHOutCentCL0; Centrality SPD inner",101,-0.5,100.5);
234 fHOutCentCL1 = new TH1F("fHOutCentCL1","fHOutCentCL1; Centrality SPD outer",101,-0.5,100.5);
235 fHOutCentV0MvsFMD= new TH1F("fHOutCentV0MvsFMD","fHOutCentV0MvsFMD; Centrality V0 vs FMD",101,-0.5,100.5);
236 fHOutCentTKLvsV0M= new TH1F("fHOutCentTKLvsV0M","fHOutCentTKLvsV0M; Centrality tracklets vs V0",101,-0.5,100.5);
237 fHOutCentZEMvsZDC= new TH1F("fHOutCentZEMvsZDC","fHOutCentZEMvsZDC; Centrality ZEM vs ZDC",101,-0.5,100.5);
239 fOutputList->Add( fHOutCentV0M );
240 fOutputList->Add( fHOutCentFMD );
241 fOutputList->Add( fHOutCentTRK );
242 fOutputList->Add( fHOutCentTKL );
243 fOutputList->Add( fHOutCentCL0 );
244 fOutputList->Add( fHOutCentCL1 );
245 fOutputList->Add( fHOutCentV0MvsFMD);
246 fOutputList->Add( fHOutCentTKLvsV0M);
247 fOutputList->Add( fHOutCentZEMvsZDC);
248 fTrackCuts = AliESDtrackCuts::GetStandardTPCOnlyTrackCuts();
250 PostData(1, fOutputList);
253 //________________________________________________________________________
254 void AliCentralitySelectionTask::UserExec(Option_t */*option*/)
256 // Execute analysis for current event:
257 if(fDebug>1) printf(" **** AliCentralitySelectionTask::UserExec() \n");
259 Float_t zncEnergy; // ZNC Energy
260 Float_t zpcEnergy; // ZPC Energy
261 Float_t znaEnergy; // ZNA Energy
262 Float_t zpaEnergy; // ZPA Energy
263 Float_t zem1Energy = 0.; // ZEM1 Energy
264 Float_t zem2Energy = 0.; // ZEM2 Energy
266 Int_t nTracks = 0; // no. tracks
267 Int_t nTracklets = 0; // no. tracklets
268 Int_t nClusters[6]; // no. clusters on 6 ITS layers
269 Int_t nChips[2]; // no. chips on 2 SPD layers
270 Float_t spdCorr =0; // corrected spd2 multiplicity
272 Float_t multV0A = 0; // multiplicity from V0 reco side A
273 Float_t multV0C = 0; // multiplicity from V0 reco side C
274 Float_t multFMDA = 0; // multiplicity from FMD on detector A
275 Float_t multFMDC = 0; // multiplicity from FMD on detector C
277 Short_t v0Corr = 0; // corrected V0 multiplicity
278 Short_t v0CorrResc = 0; // corrected and rescaled V0 multiplicity
280 Float_t zvtx =0; // z-vertex SPD
282 AliESDCentrality *esdCent = 0;
284 if(fAnalysisInput.CompareTo("ESD")==0){
286 AliVEvent* event = InputEvent();
287 AliESDEvent* esd = dynamic_cast<AliESDEvent*>(event);
291 AliFatal("Centrality File not available for this run");
294 esdCent = esd->GetCentrality();
297 AliESDVZERO* esdV0 = esd->GetVZEROData();
298 multV0A=esdV0->GetMTotV0A();
299 multV0C=esdV0->GetMTotV0C();
302 v0Corr = GetCorrV0(esd,v0CorrR,fRunNo);
303 v0Corr = (Short_t)v0Corr;
304 v0CorrResc = (Short_t)v0CorrR;
307 const AliESDVertex* vtxESD = esd->GetPrimaryVertexSPD();
308 zvtx = vtxESD->GetZ();
310 // ***** CB info (tracklets, clusters, chips)
311 //nTracks = event->GetNumberOfTracks();
312 nTracks = fTrackCuts ? (Short_t)fTrackCuts->GetReferenceMultiplicity(esd,kTRUE):-1;
314 const AliMultiplicity *mult = esd->GetMultiplicity();
316 nTracklets = mult->GetNumberOfTracklets();
318 for(Int_t ilay=0; ilay<6; ilay++){
319 nClusters[ilay] = mult->GetNumberOfITSClusters(ilay);
322 for(Int_t ilay=0; ilay<2; ilay++){
323 nChips[ilay] = mult->GetNumberOfFiredChips(ilay);
326 spdCorr = GetCorrSPD2(nClusters[1],zvtx);
329 AliESDFMD *fmd = esd->GetFMDData();
330 Float_t totalMultA = 0;
331 Float_t totalMultC = 0;
332 const Float_t fFMDLowCut = 0.4;
334 for(UShort_t det=1;det<=3;det++) {
335 Int_t nRings = (det==1 ? 1 : 2);
336 for (UShort_t ir = 0; ir < nRings; ir++) {
337 Char_t ring = (ir == 0 ? 'I' : 'O');
338 UShort_t nsec = (ir == 0 ? 20 : 40);
339 UShort_t nstr = (ir == 0 ? 512 : 256);
340 for(UShort_t sec =0; sec < nsec; sec++) {
341 for(UShort_t strip = 0; strip < nstr; strip++) {
343 Float_t FMDmult = fmd->Multiplicity(det,ring,sec,strip);
344 if(FMDmult == 0 || FMDmult == AliESDFMD::kInvalidMult) continue;
346 Float_t nParticles=0;
348 if(FMDmult > fFMDLowCut) {
352 if (det<3) totalMultA = totalMultA + nParticles;
353 else totalMultC = totalMultC + nParticles;
359 multFMDA = totalMultA;
360 multFMDC = totalMultC;
363 AliESDZDC *esdZDC = esd->GetESDZDC();
364 zncEnergy = (Float_t) (esdZDC->GetZDCN1Energy());
365 zpcEnergy = (Float_t) (esdZDC->GetZDCP1Energy());
366 znaEnergy = (Float_t) (esdZDC->GetZDCN2Energy());
367 zpaEnergy = (Float_t) (esdZDC->GetZDCP2Energy());
368 zem1Energy = (Float_t) (esdZDC->GetZDCEMEnergy(0));
369 zem2Energy = (Float_t) (esdZDC->GetZDCEMEnergy(1));
372 else if(fAnalysisInput.CompareTo("AOD")==0){
373 //AliAODEvent *aod = dynamic_cast<AliAODEvent*> (InputEvent());
375 printf(" AOD analysis not yet implemented!!!\n\n");
379 // ***** Centrality Selection
380 if(fHtempV0M) fCentV0M = fHtempV0M->GetBinContent(fHtempV0M->FindBin((v0Corr)));
381 /// else printf(" Centrality by V0 not available!!!\n\n");
382 if(fHtempFMD) fCentFMD = fHtempFMD->GetBinContent(fHtempFMD->FindBin((multFMDA+multFMDC)));
383 // else printf(" Centrality by FMD not available!!!\n\n");
384 if(fHtempTRK) fCentTRK = fHtempTRK->GetBinContent(fHtempTRK->FindBin(nTracks));
385 // else printf(" Centrality by TRK not available!!!\n\n");
386 if(fHtempTKL) fCentTKL = fHtempTKL->GetBinContent(fHtempTKL->FindBin(nTracklets));
387 // else printf(" Centrality by TKL not available!!!\n\n");
388 if(fHtempCL0) fCentCL0 = fHtempCL0->GetBinContent(fHtempCL0->FindBin(nClusters[0]));
389 // else printf(" Centrality by CL0 not available!!!\n\n");
390 if(fHtempCL1) fCentCL1 = fHtempCL1->GetBinContent(fHtempCL1->FindBin(spdCorr));
391 /// else printf(" Centrality by CL1 not available!!!\n\n");
393 if(fHtempV0MvsFMD) fCentV0MvsFMD = fHtempV0MvsFMD->GetBinContent(fHtempV0MvsFMD->FindBin((multV0A+multV0C)));
394 // else printf(" Centrality by V0 vs FMD not available!!!\n\n");
395 if(fHtempTKLvsV0M) fCentTKLvsV0M = fHtempTKLvsV0M->GetBinContent(fHtempTKLvsV0M->FindBin(nTracklets));
396 // else printf(" Centrality by V0 vs TKL not available!!!\n\n");
397 if(fHtempZEMvsZDC) fCentZEMvsZDC = fHtempZEMvsZDC->GetBinContent(fHtempZEMvsZDC->FindBin((zem1Energy+zem2Energy)/1000.));
398 // else printf(" Centrality by ZEM vs ZDC not available!!!\n\n");
400 esdCent->SetCentralityV0M(fCentV0M);
401 esdCent->SetCentralityFMD(fCentFMD);
402 esdCent->SetCentralityTRK(fCentTRK);
403 esdCent->SetCentralityTKL(fCentTKL);
404 esdCent->SetCentralityCL0(fCentCL0);
405 esdCent->SetCentralityCL1(fCentCL1);
406 esdCent->SetCentralityV0MvsFMD(fCentV0MvsFMD);
407 esdCent->SetCentralityTKLvsV0M(fCentTKLvsV0M);
408 esdCent->SetCentralityZEMvsZDC(fCentZEMvsZDC);
410 fHOutCentV0M->Fill(fCentV0M);
411 fHOutCentFMD->Fill(fCentFMD);
412 fHOutCentTRK->Fill(fCentTRK);
413 fHOutCentTKL->Fill(fCentTKL);
414 fHOutCentCL0->Fill(fCentCL0);
415 fHOutCentCL1->Fill(fCentCL1);
416 fHOutCentV0MvsFMD->Fill(fCentV0MvsFMD);
417 fHOutCentTKLvsV0M->Fill(fCentTKLvsV0M);
418 fHOutCentZEMvsZDC->Fill(fCentZEMvsZDC);
420 PostData(1, fOutputList);
423 //________________________________________________________________________
424 void AliCentralitySelectionTask::ReadCentralityHistos(TString fCentfilename)
426 // Read centrality histograms
427 TDirectory *owd = gDirectory;
428 // Check if the file is present
429 TString path = gSystem->ExpandPathName(fCentfilename.Data());
430 if (gSystem->AccessPathName(path)) {
431 AliError(Form("File %s does not exist", path.Data()));
434 fFile = TFile::Open(fCentfilename);
436 fHtempV0M = (TH1F*) (fFile->Get("hmultV0_percentile"));
437 fHtempFMD = (TH1F*) (fFile->Get("hmultFMD_percentile"));
438 fHtempTRK = (TH1F*) (fFile->Get("hNtracks_percentile"));
439 fHtempTKL = (TH1F*) (fFile->Get("hNtracklets_percentile"));
440 fHtempCL0 = (TH1F*) (fFile->Get("hNclusters0_percentile"));
441 fHtempCL1 = (TH1F*) (fFile->Get("hNclusters1_percentile"));
445 //________________________________________________________________________
446 void AliCentralitySelectionTask::ReadCentralityHistos2(TString fCentfilename2)
448 // Read centrality histograms
449 TDirectory *owd = gDirectory;
450 TString path = gSystem->ExpandPathName(fCentfilename2.Data());
451 if (gSystem->AccessPathName(path)) {
452 AliError(Form("File %s does not exist", path.Data()));
455 fFile2 = TFile::Open(fCentfilename2);
457 fHtempV0MvsFMD = (TH1F*) (fFile2->Get("hmultV0vsmultFMD_all_percentile"));
458 fHtempTKLvsV0M = (TH1F*) (fFile2->Get("hNtrackletsvsmultV0_all_percentile"));
459 fHtempZEMvsZDC = (TH1F*) (fFile2->Get("hEzemvsEzdc_all_percentile"));
463 //________________________________________________________________________
464 void AliCentralitySelectionTask::Terminate(Option_t */*option*/)
466 // Terminate analysis
467 if (fFile && fFile->IsOpen())
469 if (fFile2 && fFile2->IsOpen())
472 //________________________________________________________________________
473 Int_t AliCentralitySelectionTask::SetupRun(AliESDEvent* esd)
475 // Setup files for run
480 // check if something to be done
481 if (fCurrentRun == esd->GetRunNumber())
484 fCurrentRun = esd->GetRunNumber();
486 AliInfo(Form("Setup Centrality Selection for run %d\n",fCurrentRun));
488 fRunNo = fCurrentRun;
490 // CHANGE HERE FOR RUN RANGES
491 if ( fRunNo <= 137162 ) fRunNo = 137161;
492 else if ( fRunNo == 137365 ) fRunNo = 137366;
493 else if ( fRunNo >= 137366 ) fRunNo = 137366;
494 // CHANGE HERE FOR RUN RANGES
496 TString fileName(Form("$ALICE_ROOT/ANALYSIS/macros/AliCentralityBy1D_%d.root", fRunNo));
497 TString fileName2(Form("$ALICE_ROOT/ANALYSIS/macros/AliCentralityByFunction_%d.root", fRunNo));
499 AliInfo(Form("Centrality Selection for run %d is initialized with %s", fCurrentRun, fileName.Data()));
500 ReadCentralityHistos(fileName.Data());
501 ReadCentralityHistos2(fileName2.Data());
502 if (!fFile && !fFile2) {
503 AliFatal(Form("Run %d not known to centrality selection!", fCurrentRun));
508 //________________________________________________________________________
509 Float_t AliCentralitySelectionTask::GetCorrV0(const AliESDEvent* esd, float &v0CorrResc, int run)
511 // correct V0 non-linearity, prepare a version rescaled to SPD2 corr
516 Double_t par0_137161[64] = { 6.71e-02 , 6.86e-02 , 7.06e-02 , 6.32e-02 ,
517 5.91e-02 , 6.07e-02 , 5.78e-02 , 5.73e-02 , 5.91e-02 , 6.22e-02 ,
518 5.90e-02 , 6.11e-02 , 5.55e-02 , 5.29e-02 , 5.19e-02 , 5.56e-02 ,
519 6.25e-02 , 7.03e-02 , 5.64e-02 , 5.81e-02 , 4.57e-02 , 5.30e-02 ,
520 5.13e-02 , 6.43e-02 , 6.27e-02 , 6.48e-02 , 6.07e-02 , 1.01e-01 ,
521 6.68e-02 , 7.16e-02 , 6.36e-02 , 5.95e-02 , 2.52e-02 , 2.82e-02 ,
522 2.56e-02 , 2.86e-02 , 2.82e-02 , 2.10e-02 , 2.13e-02 , 2.32e-02 ,
523 2.75e-02 , 4.34e-02 , 3.78e-02 , 4.52e-02 , 4.11e-02 , 3.89e-02 ,
524 4.10e-02 , 3.73e-02 , 4.51e-02 , 5.07e-02 , 5.42e-02 , 4.74e-02 ,
525 4.33e-02 , 4.44e-02 , 4.64e-02 , 3.01e-02 , 6.38e-02 , 5.26e-02 ,
526 4.99e-02 , 5.26e-02 , 5.47e-02 , 3.84e-02 , 5.00e-02 , 5.20e-02 };
527 Double_t par1_137161[64] = { -6.68e-05 , -7.78e-05 , -6.88e-05 , -5.92e-05 ,
528 -2.43e-05 , -3.54e-05 , -2.91e-05 , -1.99e-05 , -1.40e-05 , -4.01e-05 ,
529 -2.29e-05 , -3.68e-05 , -2.53e-05 , -2.44e-06 , -9.22e-06 , -1.51e-05 ,
530 -2.80e-05 , -2.34e-05 , -1.72e-05 , -1.81e-05 , -1.29e-05 , -2.65e-05 ,
531 -1.61e-05 , -2.86e-05 , -1.74e-05 , -4.23e-05 , -3.41e-05 , -1.05e-04 ,
532 -2.76e-05 , -4.71e-05 , -3.06e-05 , -2.32e-05 , -1.55e-06 , 2.15e-05 ,
533 1.40e-05 , 2.16e-05 , 1.21e-05 , 3.05e-06 , 1.67e-05 , -3.84e-06 ,
534 3.09e-06 , 1.50e-05 , 3.47e-06 , 4.87e-06 , -3.71e-07 , -1.75e-06 ,
535 -1.80e-06 , 9.99e-06 , -6.46e-06 , -4.91e-06 , 1.33e-05 , -2.52e-07 ,
536 -3.85e-06 , 4.94e-06 , -2.48e-07 , -1.20e-05 , 2.07e-06 , 6.12e-06 ,
537 -1.18e-06 , 4.54e-06 , -1.54e-05 , -1.25e-05 , 1.46e-06 , -6.67e-06 };
538 Double_t par2_137161[64] = { 1.29e-08 , 1.51e-08 , 1.43e-08 , 1.11e-08 ,
539 5.04e-09 , 6.99e-09 , 5.58e-09 , 4.15e-09 , 4.00e-09 , 8.22e-09 ,
540 4.97e-09 , 7.66e-09 , 4.91e-09 , 1.10e-09 , 2.64e-09 , 3.64e-09 ,
541 5.76e-09 , 5.46e-09 , 3.38e-09 , 3.47e-09 , 2.43e-09 , 4.13e-09 ,
542 2.80e-09 , 5.80e-09 , 3.86e-09 , 7.46e-09 , 5.98e-09 , 2.58e-08 ,
543 5.50e-09 , 8.72e-09 , 5.23e-09 , 4.37e-09 , 2.33e-09 , -6.01e-10 ,
544 3.99e-11 , -2.02e-10 , 7.67e-10 , 2.03e-09 , 1.17e-10 , 2.56e-09 ,
545 1.16e-09 , -4.75e-10 , 1.28e-09 , 1.23e-09 , 1.62e-09 , 1.61e-09 ,
546 1.93e-09 , 2.97e-10 , 2.21e-09 , 2.16e-09 , 5.22e-10 , 1.03e-09 ,
547 1.56e-09 , 5.00e-10 , 1.01e-09 , 2.93e-09 , 1.05e-09 , 9.96e-11 ,
548 1.21e-09 , 7.45e-10 , 3.07e-09 , 2.31e-09 , 6.70e-10 , 1.89e-09 };
550 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 ,
551 6.00e-02 , 6.10e-02 , 6.49e-02 , 6.17e-02 , 6.33e-02 , 6.00e-02 , 5.48e-02 ,
552 5.44e-02 , 5.81e-02 , 6.49e-02 , 7.07e-02 , 5.91e-02 , 6.18e-02 , 4.82e-02 ,
553 5.67e-02 , 5.36e-02 , 6.60e-02 , 6.37e-02 , 6.78e-02 , 6.31e-02 , 1.04e-01 ,
554 6.91e-02 , 7.32e-02 , 6.61e-02 , 6.16e-02 , 2.64e-02 , 2.81e-02 , 2.64e-02 ,
555 2.85e-02 , 2.87e-02 , 2.18e-02 , 2.19e-02 , 2.43e-02 , 2.81e-02 , 4.37e-02 ,
556 3.90e-02 , 4.66e-02 , 4.24e-02 , 4.09e-02 , 4.21e-02 , 3.88e-02 , 4.83e-02 ,
557 5.23e-02 , 5.44e-02 , 4.85e-02 , 4.42e-02 , 4.58e-02 , 4.74e-02 , 3.14e-02 ,
558 6.31e-02 , 5.30e-02 , 5.01e-02 , 5.33e-02 , 5.70e-02 , 3.95e-02 , 4.98e-02 , 5.31e-02 };
559 Double_t par1_137366[64] = { -6.99e-05 , -6.99e-05 , -6.94e-05 , -6.55e-05 , -3.55e-05 , -4.50e-05 ,
560 -3.10e-05 , -2.81e-05 , -2.29e-05 , -3.89e-05 , -2.53e-05 , -4.25e-05 ,
561 -1.87e-05 , -2.01e-05 , -1.53e-05 , -2.14e-05 , -2.86e-05 , -4.70e-05 ,
562 -2.23e-05 , -3.30e-05 ,-9.74e-06 , -2.62e-05 , -1.76e-05 , -2.38e-05 ,
563 -2.40e-05 , -3.43e-05 , -2.75e-05 , -6.86e-05 ,-2.35e-05 , -4.45e-05 ,
564 -2.51e-05 , -2.20e-05 , -1.25e-16 , -2.04e-17 , -2.06e-17 , -3.74e-19 ,
565 -1.18e-18 , -2.02e-15 , -3.78e-06 , -1.26e-06 , -2.71e-06 , -6.23e-17 ,
566 -7.39e-08 , -1.76e-16 , -8.98e-06 , -4.10e-18 , -1.34e-05 , -1.06e-16 ,
567 -3.34e-06 , -1.04e-05 , -5.28e-06 , -7.34e-06 , -1.05e-05 , -7.68e-06 ,
568 -1.78e-05 , -1.19e-05 , -1.78e-05 , -1.34e-06 , -9.23e-06 , -3.34e-06 ,
569 -8.02e-06 , -1.39e-05 , -1.38e-05 , -1.40e-05 };
570 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 ,
571 5.53e-09 , 5.40e-09 , 7.93e-09 , 5.49e-09 , 8.77e-09 , 4.21e-09 , 3.93e-09 ,
572 3.60e-09 , 4.67e-09 , 5.59e-09 , 8.81e-09 , 3.89e-09 , 6.19e-09 , 1.97e-09 ,
573 4.38e-09 , 3.26e-09 , 5.00e-09 , 4.58e-09 , 6.39e-09 , 5.03e-09 , 1.30e-08 ,
574 4.95e-09 , 8.26e-09 , 4.57e-09 , 4.10e-09 , 2.35e-09 , 2.30e-09 , 2.15e-09 ,
575 2.27e-09 , 2.17e-09 , 2.27e-09 , 2.97e-09 , 2.25e-09 , 1.69e-09 , 1.44e-09 ,
576 1.66e-09 , 1.75e-09 , 2.88e-09 , 1.82e-09 , 3.64e-09 , 1.80e-09 , 1.71e-09 ,
577 2.66e-09 , 3.01e-09 , 1.95e-09 , 2.64e-09 , 2.42e-09 , 3.68e-09 , 2.66e-09 ,
578 3.92e-09 , 1.18e-09 , 2.26e-09 , 1.57e-09 , 2.02e-09 , 2.71e-09 , 2.99e-09 , 3.04e-09 };
591 Float_t multCorr = 0;
592 Float_t multCorr2 = 0;
593 Float_t multChCorr[64];
594 AliESDVZERO* esdV0 = esd->GetVZEROData();
595 for(Int_t i = 0; i < 64; ++i) {
596 Double_t b = (esdV0->GetMultiplicity(i)*par1[i]-par0[i]);
597 Double_t s = (b*b-4.*par2[i]*esdV0->GetMultiplicity(i)*esdV0->GetMultiplicity(i));
600 printf("FPE %d %.2f %.2f %.2e\n",i,esdV0->GetMultiplicity(i),b,(b*b-4.*par2[i]*esdV0->GetMultiplicity(i)*esdV0->GetMultiplicity(i)));
604 n = (-b + TMath::Sqrt(s));
606 multChCorr[i] = 2.*esdV0->GetMultiplicity(i)/n*par0[i];
607 multCorr += multChCorr[i];
608 multCorr2 += (multChCorr[i]/par0[i]/64.);
610 v0CorrResc = multCorr2;
614 //____________________________________________________________________
615 Float_t AliCentralitySelectionTask::GetCorrSPD2(Float_t spd2raw,Float_t zv)
617 // renormalize N spd2 clusters at given Zv to acceptance at Zv=0
618 const double pars[] = {8.10030e-01,-2.80364e-03,-7.19504e-04};
620 float corr = 1 + zv*(pars[1] + zv*pars[2]);
621 return corr>0 ? spd2raw/corr : -1;