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),
108 fHOutCentZEMvsZDC(0),
116 fHOutMultV0MvsZDC(0),
117 fHOutMultZEMvsZDC(0),
118 fHOutMultV0MvsCL1(0),
119 fHOutMultV0MvsTRK(0),
122 // Default constructor
123 AliInfo("Centrality Selection enabled.");
126 //________________________________________________________________________
127 AliCentralitySelectionTask::AliCentralitySelectionTask(const char *name):
128 AliAnalysisTaskSE(name),
130 fAnalysisInput("ESD"),
162 fHOutCentV0MvsFMD(0),
163 fHOutCentTKLvsV0M(0),
164 fHOutCentZEMvsZDC(0),
172 fHOutMultV0MvsZDC(0),
173 fHOutMultZEMvsZDC(0),
174 fHOutMultV0MvsCL1(0),
175 fHOutMultV0MvsTRK(0),
178 // Default constructor
179 AliInfo("Centrality Selection enabled.");
180 DefineOutput(1, TList::Class());
183 //________________________________________________________________________
184 AliCentralitySelectionTask& AliCentralitySelectionTask::operator=(const AliCentralitySelectionTask& c)
186 // Assignment operator
188 AliAnalysisTaskSE::operator=(c);
193 //________________________________________________________________________
194 AliCentralitySelectionTask::AliCentralitySelectionTask(const AliCentralitySelectionTask& ana):
195 AliAnalysisTaskSE(ana),
197 fAnalysisInput(ana.fDebug),
198 fIsMCInput(ana.fIsMCInput),
201 fCurrentRun(ana.fCurrentRun),
203 fTrackCuts(ana.fTrackCuts),
204 fCentV0M(ana.fCentV0M),
205 fCentFMD(ana.fCentFMD),
206 fCentTRK(ana.fCentTRK),
207 fCentTKL(ana.fCentTKL),
208 fCentCL0(ana.fCentCL0),
209 fCentCL1(ana.fCentCL1),
210 fCentV0MvsFMD(ana.fCentV0MvsFMD),
211 fCentTKLvsV0M(ana.fCentTKLvsV0M),
212 fCentZEMvsZDC(ana.fCentZEMvsZDC),
213 fHtempV0M(ana.fHtempV0M),
214 fHtempFMD(ana.fHtempFMD),
215 fHtempTRK(ana.fHtempTRK),
216 fHtempTKL(ana.fHtempTKL),
217 fHtempCL0(ana.fHtempCL0),
218 fHtempCL1(ana.fHtempCL1),
219 fHtempV0MvsFMD(ana.fHtempV0MvsFMD),
220 fHtempTKLvsV0M(ana.fHtempTKLvsV0M),
221 fHtempZEMvsZDC(ana.fHtempZEMvsZDC),
222 fOutputList(ana.fOutputList),
223 fHOutCentV0M (ana.fHOutCentV0M ),
224 fHOutCentFMD (ana.fHOutCentFMD ),
225 fHOutCentTRK (ana.fHOutCentTRK ),
226 fHOutCentTKL (ana.fHOutCentTKL ),
227 fHOutCentCL0 (ana.fHOutCentCL0 ),
228 fHOutCentCL1 (ana.fHOutCentCL1 ),
229 fHOutCentV0MvsFMD(ana.fHOutCentV0MvsFMD),
230 fHOutCentTKLvsV0M(ana.fHOutCentTKLvsV0M),
231 fHOutCentZEMvsZDC(ana.fHOutCentZEMvsZDC),
232 fHOutMultV0R(ana.fHOutMultV0R),
233 fHOutMultV0M(ana.fHOutMultV0M),
234 fHOutMultFMD(ana.fHOutMultFMD),
235 fHOutMultTRK(ana.fHOutMultTRK),
236 fHOutMultTKL(ana.fHOutMultTKL),
237 fHOutMultCL0(ana.fHOutMultCL0),
238 fHOutMultCL1(ana.fHOutMultCL1),
239 fHOutMultV0MvsZDC(ana.fHOutMultV0MvsZDC),
240 fHOutMultZEMvsZDC(ana.fHOutMultZEMvsZDC),
241 fHOutMultV0MvsCL1(ana.fHOutMultV0MvsCL1),
242 fHOutMultV0MvsTRK(ana.fHOutMultV0MvsTRK),
243 fHOutMultTRKvsCL1(ana.fHOutMultTRKvsCL1)
248 //________________________________________________________________________
249 AliCentralitySelectionTask::~AliCentralitySelectionTask()
252 if (fOutputList && !AliAnalysisManager::GetAnalysisManager()->IsProofMode()) delete fOutputList;
253 if (fTrackCuts) delete fTrackCuts;
256 //________________________________________________________________________
257 void AliCentralitySelectionTask::UserCreateOutputObjects()
259 // Create the output containers
260 if(fDebug>1) printf("AnalysisCentralitySelectionTask::UserCreateOutputObjects() \n");
261 AliLog::SetClassDebugLevel("AliCentralitySelectionTask", AliLog::kInfo);
263 fOutputList = new TList();
264 fOutputList->SetOwner();
265 fHOutCentV0M = new TH1F("fHOutCentV0M","fHOutCentV0M; Centrality V0",101,-0.5,100.5);
266 fHOutCentFMD = new TH1F("fHOutCentFMD","fHOutCentFMD; Centrality FMD",101,-0.5,100.5);
267 fHOutCentTRK = new TH1F("fHOutCentTRK","fHOutCentTRK; Centrality TPC",101,-0.5,100.5);
268 fHOutCentTKL = new TH1F("fHOutCentTKL","fHOutCentTKL; Centrality tracklets",101,-0.5,100.5);
269 fHOutCentCL0 = new TH1F("fHOutCentCL0","fHOutCentCL0; Centrality SPD inner",101,-0.5,100.5);
270 fHOutCentCL1 = new TH1F("fHOutCentCL1","fHOutCentCL1; Centrality SPD outer",101,-0.5,100.5);
271 fHOutCentV0MvsFMD= new TH1F("fHOutCentV0MvsFMD","fHOutCentV0MvsFMD; Centrality V0 vs FMD",101,-0.5,100.5);
272 fHOutCentTKLvsV0M= new TH1F("fHOutCentTKLvsV0M","fHOutCentTKLvsV0M; Centrality tracklets vs V0",101,-0.5,100.5);
273 fHOutCentZEMvsZDC= new TH1F("fHOutCentZEMvsZDC","fHOutCentZEMvsZDC; Centrality ZEM vs ZDC",101,-0.5,100.5);
275 fHOutMultV0M = new TH1F("fHOutMultV0M","fHOutMultV0M; Multiplicity V0",25000,0,25000);
276 fHOutMultV0R = new TH1F("fHOutMultV0R","fHOutMultV0R; Multiplicity V0",25000,0,25000);
277 fHOutMultFMD = new TH1F("fHOutMultFMD","fHOutMultFMD; Multiplicity FMD",24000,0,24000);
278 fHOutMultTRK = new TH1F("fHOutMultTRK","fHOutMultTRK; Multiplicity TPC",4000,0,4000);
279 fHOutMultTKL = new TH1F("fHOutMultTKL","fHOutMultTKL; Multiplicity tracklets",5000,0,5000);
280 fHOutMultCL0 = new TH1F("fHOutMultCL0","fHOutMultCL0; Multiplicity SPD inner",7000,0,7000);
281 fHOutMultCL1 = new TH1F("fHOutMultCL1","fHOutMultCL1; Multiplicity SPD outer",7000,0,7000);
282 fHOutMultV0MvsZDC = new TH2F("fHOutMultV0MvsZDC","fHOutMultV0MvsZDC; Multiplicity V0; Energy ZDC",500,0,25000,500,0,6000);
283 fHOutMultZEMvsZDC = new TH2F("fHOutMultZEMvsZDC","fHOutMultZEMvsZDC; Energy ZEM; Energy ZDC",500,0,2500,500,0,6000);
284 fHOutMultV0MvsCL1 = new TH2F("fHOutMultV0MvsCL1","fHOutMultV0MvsCL1; Multiplicity V0; Multiplicity SPD outer",2500,0,25000,700,0,7000);
285 fHOutMultV0MvsTRK = new TH2F("fHOutMultV0MvsTRK","fHOutMultV0MvsTRK; Multiplicity V0; Multiplicity TPC",2500,0,25000,400,0,4000);
286 fHOutMultTRKvsCL1 = new TH2F("fHOutMultTRKvsCL1","fHOutMultTRKvsCL1; Multiplicity TPC; Multiplicity SPD outer",400,0,4000,700,0,7000);
288 fOutputList->Add( fHOutCentV0M );
289 fOutputList->Add( fHOutCentFMD );
290 fOutputList->Add( fHOutCentTRK );
291 fOutputList->Add( fHOutCentTKL );
292 fOutputList->Add( fHOutCentCL0 );
293 fOutputList->Add( fHOutCentCL1 );
294 fOutputList->Add( fHOutCentV0MvsFMD);
295 fOutputList->Add( fHOutCentTKLvsV0M);
296 fOutputList->Add( fHOutCentZEMvsZDC);
297 fOutputList->Add( fHOutMultV0M);
298 fOutputList->Add( fHOutMultV0R);
299 fOutputList->Add( fHOutMultFMD);
300 fOutputList->Add( fHOutMultTRK);
301 fOutputList->Add( fHOutMultTKL);
302 fOutputList->Add( fHOutMultCL0);
303 fOutputList->Add( fHOutMultCL1);
304 fOutputList->Add( fHOutMultV0MvsZDC);
305 fOutputList->Add( fHOutMultZEMvsZDC);
306 fOutputList->Add( fHOutMultV0MvsCL1);
307 fOutputList->Add( fHOutMultV0MvsTRK);
308 fOutputList->Add( fHOutMultTRKvsCL1);
311 fTrackCuts = AliESDtrackCuts::GetStandardTPCOnlyTrackCuts();
313 PostData(1, fOutputList);
316 //________________________________________________________________________
317 void AliCentralitySelectionTask::UserExec(Option_t */*option*/)
319 // Execute analysis for current event:
320 if(fDebug>1) printf(" **** AliCentralitySelectionTask::UserExec() \n");
322 Float_t zncEnergy = 0.; // ZNC Energy
323 Float_t zpcEnergy = 0.; // ZPC Energy
324 Float_t znaEnergy = 0.; // ZNA Energy
325 Float_t zpaEnergy = 0.; // ZPA Energy
326 Float_t zem1Energy = 0.; // ZEM1 Energy
327 Float_t zem2Energy = 0.; // ZEM2 Energy
329 Int_t nTracks = 0; // no. tracks
330 Int_t nTracklets = 0; // no. tracklets
331 Int_t nClusters[6]; // no. clusters on 6 ITS layers
332 Int_t nChips[2]; // no. chips on 2 SPD layers
333 Float_t spdCorr =0; // corrected spd2 multiplicity
335 Float_t multV0A = 0; // multiplicity from V0 reco side A
336 Float_t multV0C = 0; // multiplicity from V0 reco side C
337 Float_t multFMDA = 0; // multiplicity from FMD on detector A
338 Float_t multFMDC = 0; // multiplicity from FMD on detector C
340 Short_t v0Corr = 0; // corrected V0 multiplicity
341 Short_t v0CorrResc = 0; // corrected and rescaled V0 multiplicity
343 Float_t zvtx =0; // z-vertex SPD
345 AliESDCentrality *esdCent = 0;
347 if(fAnalysisInput.CompareTo("ESD")==0){
349 AliVEvent* event = InputEvent();
350 AliESDEvent* esd = dynamic_cast<AliESDEvent*>(event);
354 AliFatal("Centrality File not available for this run");
357 esdCent = esd->GetCentrality();
360 AliESDVZERO* esdV0 = esd->GetVZEROData();
361 multV0A=esdV0->GetMTotV0A();
362 multV0C=esdV0->GetMTotV0C();
365 v0Corr = (Short_t)GetCorrV0(esd,v0CorrR);
366 v0CorrResc = (Short_t)v0CorrR;
369 const AliESDVertex* vtxESD = esd->GetPrimaryVertexSPD();
370 zvtx = vtxESD->GetZ();
372 // ***** CB info (tracklets, clusters, chips)
373 //nTracks = event->GetNumberOfTracks();
374 nTracks = fTrackCuts ? (Short_t)fTrackCuts->GetReferenceMultiplicity(esd,kTRUE):-1;
376 const AliMultiplicity *mult = esd->GetMultiplicity();
378 nTracklets = mult->GetNumberOfTracklets();
380 for(Int_t ilay=0; ilay<6; ilay++){
381 nClusters[ilay] = mult->GetNumberOfITSClusters(ilay);
384 for(Int_t ilay=0; ilay<2; ilay++){
385 nChips[ilay] = mult->GetNumberOfFiredChips(ilay);
388 spdCorr = GetCorrSPD2(nClusters[1],zvtx);
391 AliESDFMD *fmd = esd->GetFMDData();
392 Float_t totalMultA = 0;
393 Float_t totalMultC = 0;
394 const Float_t fFMDLowCut = 0.4;
396 for(UShort_t det=1;det<=3;det++) {
397 Int_t nRings = (det==1 ? 1 : 2);
398 for (UShort_t ir = 0; ir < nRings; ir++) {
399 Char_t ring = (ir == 0 ? 'I' : 'O');
400 UShort_t nsec = (ir == 0 ? 20 : 40);
401 UShort_t nstr = (ir == 0 ? 512 : 256);
402 for(UShort_t sec =0; sec < nsec; sec++) {
403 for(UShort_t strip = 0; strip < nstr; strip++) {
405 Float_t FMDmult = fmd->Multiplicity(det,ring,sec,strip);
406 if(FMDmult == 0 || FMDmult == AliESDFMD::kInvalidMult) continue;
408 Float_t nParticles=0;
410 if(FMDmult > fFMDLowCut) {
414 if (det<3) totalMultA = totalMultA + nParticles;
415 else totalMultC = totalMultC + nParticles;
421 multFMDA = totalMultA;
422 multFMDC = totalMultC;
425 AliESDZDC *esdZDC = esd->GetESDZDC();
426 zncEnergy = (Float_t) (esdZDC->GetZDCN1Energy())/8.;
427 zpcEnergy = (Float_t) (esdZDC->GetZDCP1Energy())/8.;
428 znaEnergy = (Float_t) (esdZDC->GetZDCN2Energy())/8.;
429 zpaEnergy = (Float_t) (esdZDC->GetZDCP2Energy())/8.;
430 zem1Energy = (Float_t) (esdZDC->GetZDCEMEnergy(0))/8.;
431 zem2Energy = (Float_t) (esdZDC->GetZDCEMEnergy(1))/8.;
434 else if(fAnalysisInput.CompareTo("AOD")==0){
435 //AliAODEvent *aod = dynamic_cast<AliAODEvent*> (InputEvent());
437 printf(" AOD analysis not yet implemented!!!\n\n");
441 // ***** Centrality Selection
442 if(fHtempV0M) fCentV0M = fHtempV0M->GetBinContent(fHtempV0M->FindBin((v0Corr)));
443 /// else printf(" Centrality by V0 not available!!!\n\n");
444 if(fHtempFMD) fCentFMD = fHtempFMD->GetBinContent(fHtempFMD->FindBin((multFMDA+multFMDC)));
445 // else printf(" Centrality by FMD not available!!!\n\n");
446 if(fHtempTRK) fCentTRK = fHtempTRK->GetBinContent(fHtempTRK->FindBin(nTracks));
447 // else printf(" Centrality by TRK not available!!!\n\n");
448 if(fHtempTKL) fCentTKL = fHtempTKL->GetBinContent(fHtempTKL->FindBin(nTracklets));
449 // else printf(" Centrality by TKL not available!!!\n\n");
450 if(fHtempCL0) fCentCL0 = fHtempCL0->GetBinContent(fHtempCL0->FindBin(nClusters[0]));
451 // else printf(" Centrality by CL0 not available!!!\n\n");
452 if(fHtempCL1) fCentCL1 = fHtempCL1->GetBinContent(fHtempCL1->FindBin(spdCorr));
453 /// else printf(" Centrality by CL1 not available!!!\n\n");
455 if(fHtempV0MvsFMD) fCentV0MvsFMD = fHtempV0MvsFMD->GetBinContent(fHtempV0MvsFMD->FindBin((multV0A+multV0C)));
456 // else printf(" Centrality by V0 vs FMD not available!!!\n\n");
457 if(fHtempTKLvsV0M) fCentTKLvsV0M = fHtempTKLvsV0M->GetBinContent(fHtempTKLvsV0M->FindBin(nTracklets));
458 // else printf(" Centrality by V0 vs TKL not available!!!\n\n");
459 if(fHtempZEMvsZDC) fCentZEMvsZDC = fHtempZEMvsZDC->GetBinContent(fHtempZEMvsZDC->FindBin((zem1Energy+zem2Energy)/1000.));
460 // else printf(" Centrality by ZEM vs ZDC not available!!!\n\n");
462 esdCent->SetCentralityV0M(fCentV0M);
463 esdCent->SetCentralityFMD(fCentFMD);
464 esdCent->SetCentralityTRK(fCentTRK);
465 esdCent->SetCentralityTKL(fCentTKL);
466 esdCent->SetCentralityCL0(fCentCL0);
467 esdCent->SetCentralityCL1(fCentCL1);
468 esdCent->SetCentralityV0MvsFMD(fCentV0MvsFMD);
469 esdCent->SetCentralityTKLvsV0M(fCentTKLvsV0M);
470 esdCent->SetCentralityZEMvsZDC(fCentZEMvsZDC);
472 fHOutCentV0M->Fill(fCentV0M);
473 fHOutCentFMD->Fill(fCentFMD);
474 fHOutCentTRK->Fill(fCentTRK);
475 fHOutCentTKL->Fill(fCentTKL);
476 fHOutCentCL0->Fill(fCentCL0);
477 fHOutCentCL1->Fill(fCentCL1);
478 fHOutCentV0MvsFMD->Fill(fCentV0MvsFMD);
479 fHOutCentTKLvsV0M->Fill(fCentTKLvsV0M);
480 fHOutCentZEMvsZDC->Fill(fCentZEMvsZDC);
481 fHOutMultV0M->Fill(v0Corr);
482 fHOutMultV0R->Fill(multV0A+multV0C);
483 fHOutMultFMD->Fill((multFMDA+multFMDC));
484 fHOutMultTRK->Fill(nTracks);
485 fHOutMultTKL->Fill(nTracklets);
486 fHOutMultCL0->Fill(nClusters[0]);
487 fHOutMultCL1->Fill(spdCorr);
488 fHOutMultV0MvsZDC->Fill(v0Corr,(zncEnergy+znaEnergy+zpcEnergy+zpaEnergy));
489 fHOutMultZEMvsZDC->Fill((zem1Energy+zem2Energy),(zncEnergy+znaEnergy+zpcEnergy+zpaEnergy));
490 fHOutMultV0MvsCL1->Fill(v0Corr,spdCorr);
491 fHOutMultV0MvsTRK->Fill(v0Corr,nTracks);
492 fHOutMultTRKvsCL1->Fill(nTracks,spdCorr);
494 PostData(1, fOutputList);
497 //________________________________________________________________________
498 void AliCentralitySelectionTask::ReadCentralityHistos(TString fCentfilename)
500 // Read centrality histograms
501 TDirectory *owd = gDirectory;
502 // Check if the file is present
503 TString path = gSystem->ExpandPathName(fCentfilename.Data());
504 if (gSystem->AccessPathName(path)) {
505 AliError(Form("File %s does not exist", path.Data()));
508 fFile = TFile::Open(fCentfilename);
510 fHtempV0M = (TH1F*) (fFile->Get("hmultV0_percentile"));
511 fHtempFMD = (TH1F*) (fFile->Get("hmultFMD_percentile"));
512 fHtempTRK = (TH1F*) (fFile->Get("hNtracks_percentile"));
513 fHtempTKL = (TH1F*) (fFile->Get("hNtracklets_percentile"));
514 fHtempCL0 = (TH1F*) (fFile->Get("hNclusters0_percentile"));
515 fHtempCL1 = (TH1F*) (fFile->Get("hNclusters1_percentile"));
519 //________________________________________________________________________
520 void AliCentralitySelectionTask::ReadCentralityHistos2(TString fCentfilename2)
522 // Read centrality histograms
523 TDirectory *owd = gDirectory;
524 TString path = gSystem->ExpandPathName(fCentfilename2.Data());
525 if (gSystem->AccessPathName(path)) {
526 AliError(Form("File %s does not exist", path.Data()));
529 fFile2 = TFile::Open(fCentfilename2);
531 fHtempV0MvsFMD = (TH1F*) (fFile2->Get("hmultV0vsmultFMD_all_percentile"));
532 fHtempTKLvsV0M = (TH1F*) (fFile2->Get("hNtrackletsvsmultV0_all_percentile"));
533 fHtempZEMvsZDC = (TH1F*) (fFile2->Get("hEzemvsEzdc_all_percentile"));
537 //________________________________________________________________________
538 void AliCentralitySelectionTask::Terminate(Option_t */*option*/)
540 // Terminate analysis
541 if (fFile && fFile->IsOpen())
543 if (fFile2 && fFile2->IsOpen())
546 //________________________________________________________________________
547 Int_t AliCentralitySelectionTask::SetupRun(AliESDEvent* esd)
549 // Setup files for run
554 // check if something to be done
555 if (fCurrentRun == esd->GetRunNumber())
558 fCurrentRun = esd->GetRunNumber();
560 AliInfo(Form("Setup Centrality Selection for run %d\n",fCurrentRun));
562 fRunNo = fCurrentRun;
564 // CHANGE HERE FOR RUN RANGES
565 if ( fRunNo <= 137162 ) fRunNo = 137161;
566 else if ( fRunNo == 137365 ) fRunNo = 137366;
567 else if ( fRunNo >= 137366 ) fRunNo = 137366;
568 // CHANGE HERE FOR RUN RANGES
570 TString fileName(Form("$ALICE_ROOT/ANALYSIS/macros/AliCentralityBy1D_%d.root", fRunNo));
571 TString fileName2(Form("$ALICE_ROOT/ANALYSIS/macros/AliCentralityByFunction_%d.root", fRunNo));
573 AliInfo(Form("Centrality Selection for run %d is initialized with %s", fCurrentRun, fileName.Data()));
574 ReadCentralityHistos(fileName.Data());
575 ReadCentralityHistos2(fileName2.Data());
576 if (!fFile && !fFile2) {
577 AliFatal(Form("Run %d not known to centrality selection!", fCurrentRun));
582 //________________________________________________________________________
583 Float_t AliCentralitySelectionTask::GetCorrV0(const AliESDEvent* esd, float &v0CorrResc)
585 // correct V0 non-linearity, prepare a version rescaled to SPD2 corr
590 Double_t par0_137161[64] = { 6.71e-02 , 6.86e-02 , 7.06e-02 , 6.32e-02 ,
591 5.91e-02 , 6.07e-02 , 5.78e-02 , 5.73e-02 , 5.91e-02 , 6.22e-02 ,
592 5.90e-02 , 6.11e-02 , 5.55e-02 , 5.29e-02 , 5.19e-02 , 5.56e-02 ,
593 6.25e-02 , 7.03e-02 , 5.64e-02 , 5.81e-02 , 4.57e-02 , 5.30e-02 ,
594 5.13e-02 , 6.43e-02 , 6.27e-02 , 6.48e-02 , 6.07e-02 , 1.01e-01 ,
595 6.68e-02 , 7.16e-02 , 6.36e-02 , 5.95e-02 , 2.52e-02 , 2.82e-02 ,
596 2.56e-02 , 2.86e-02 , 2.82e-02 , 2.10e-02 , 2.13e-02 , 2.32e-02 ,
597 2.75e-02 , 4.34e-02 , 3.78e-02 , 4.52e-02 , 4.11e-02 , 3.89e-02 ,
598 4.10e-02 , 3.73e-02 , 4.51e-02 , 5.07e-02 , 5.42e-02 , 4.74e-02 ,
599 4.33e-02 , 4.44e-02 , 4.64e-02 , 3.01e-02 , 6.38e-02 , 5.26e-02 ,
600 4.99e-02 , 5.26e-02 , 5.47e-02 , 3.84e-02 , 5.00e-02 , 5.20e-02 };
601 Double_t par1_137161[64] = { -6.68e-05 , -7.78e-05 , -6.88e-05 , -5.92e-05 ,
602 -2.43e-05 , -3.54e-05 , -2.91e-05 , -1.99e-05 , -1.40e-05 , -4.01e-05 ,
603 -2.29e-05 , -3.68e-05 , -2.53e-05 , -2.44e-06 , -9.22e-06 , -1.51e-05 ,
604 -2.80e-05 , -2.34e-05 , -1.72e-05 , -1.81e-05 , -1.29e-05 , -2.65e-05 ,
605 -1.61e-05 , -2.86e-05 , -1.74e-05 , -4.23e-05 , -3.41e-05 , -1.05e-04 ,
606 -2.76e-05 , -4.71e-05 , -3.06e-05 , -2.32e-05 , -1.55e-06 , 2.15e-05 ,
607 1.40e-05 , 2.16e-05 , 1.21e-05 , 3.05e-06 , 1.67e-05 , -3.84e-06 ,
608 3.09e-06 , 1.50e-05 , 3.47e-06 , 4.87e-06 , -3.71e-07 , -1.75e-06 ,
609 -1.80e-06 , 9.99e-06 , -6.46e-06 , -4.91e-06 , 1.33e-05 , -2.52e-07 ,
610 -3.85e-06 , 4.94e-06 , -2.48e-07 , -1.20e-05 , 2.07e-06 , 6.12e-06 ,
611 -1.18e-06 , 4.54e-06 , -1.54e-05 , -1.25e-05 , 1.46e-06 , -6.67e-06 };
612 Double_t par2_137161[64] = { 1.29e-08 , 1.51e-08 , 1.43e-08 , 1.11e-08 ,
613 5.04e-09 , 6.99e-09 , 5.58e-09 , 4.15e-09 , 4.00e-09 , 8.22e-09 ,
614 4.97e-09 , 7.66e-09 , 4.91e-09 , 1.10e-09 , 2.64e-09 , 3.64e-09 ,
615 5.76e-09 , 5.46e-09 , 3.38e-09 , 3.47e-09 , 2.43e-09 , 4.13e-09 ,
616 2.80e-09 , 5.80e-09 , 3.86e-09 , 7.46e-09 , 5.98e-09 , 2.58e-08 ,
617 5.50e-09 , 8.72e-09 , 5.23e-09 , 4.37e-09 , 2.33e-09 , -6.01e-10 ,
618 3.99e-11 , -2.02e-10 , 7.67e-10 , 2.03e-09 , 1.17e-10 , 2.56e-09 ,
619 1.16e-09 , -4.75e-10 , 1.28e-09 , 1.23e-09 , 1.62e-09 , 1.61e-09 ,
620 1.93e-09 , 2.97e-10 , 2.21e-09 , 2.16e-09 , 5.22e-10 , 1.03e-09 ,
621 1.56e-09 , 5.00e-10 , 1.01e-09 , 2.93e-09 , 1.05e-09 , 9.96e-11 ,
622 1.21e-09 , 7.45e-10 , 3.07e-09 , 2.31e-09 , 6.70e-10 , 1.89e-09 };
624 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 ,
625 6.00e-02 , 6.10e-02 , 6.49e-02 , 6.17e-02 , 6.33e-02 , 6.00e-02 , 5.48e-02 ,
626 5.44e-02 , 5.81e-02 , 6.49e-02 , 7.07e-02 , 5.91e-02 , 6.18e-02 , 4.82e-02 ,
627 5.67e-02 , 5.36e-02 , 6.60e-02 , 6.37e-02 , 6.78e-02 , 6.31e-02 , 1.04e-01 ,
628 6.91e-02 , 7.32e-02 , 6.61e-02 , 6.16e-02 , 2.64e-02 , 2.81e-02 , 2.64e-02 ,
629 2.85e-02 , 2.87e-02 , 2.18e-02 , 2.19e-02 , 2.43e-02 , 2.81e-02 , 4.37e-02 ,
630 3.90e-02 , 4.66e-02 , 4.24e-02 , 4.09e-02 , 4.21e-02 , 3.88e-02 , 4.83e-02 ,
631 5.23e-02 , 5.44e-02 , 4.85e-02 , 4.42e-02 , 4.58e-02 , 4.74e-02 , 3.14e-02 ,
632 6.31e-02 , 5.30e-02 , 5.01e-02 , 5.33e-02 , 5.70e-02 , 3.95e-02 , 4.98e-02 , 5.31e-02 };
633 Double_t par1_137366[64] = { -6.99e-05 , -6.99e-05 , -6.94e-05 , -6.55e-05 , -3.55e-05 , -4.50e-05 ,
634 -3.10e-05 , -2.81e-05 , -2.29e-05 , -3.89e-05 , -2.53e-05 , -4.25e-05 ,
635 -1.87e-05 , -2.01e-05 , -1.53e-05 , -2.14e-05 , -2.86e-05 , -4.70e-05 ,
636 -2.23e-05 , -3.30e-05 ,-9.74e-06 , -2.62e-05 , -1.76e-05 , -2.38e-05 ,
637 -2.40e-05 , -3.43e-05 , -2.75e-05 , -6.86e-05 ,-2.35e-05 , -4.45e-05 ,
638 -2.51e-05 , -2.20e-05 , -1.25e-16 , -2.04e-17 , -2.06e-17 , -3.74e-19 ,
639 -1.18e-18 , -2.02e-15 , -3.78e-06 , -1.26e-06 , -2.71e-06 , -6.23e-17 ,
640 -7.39e-08 , -1.76e-16 , -8.98e-06 , -4.10e-18 , -1.34e-05 , -1.06e-16 ,
641 -3.34e-06 , -1.04e-05 , -5.28e-06 , -7.34e-06 , -1.05e-05 , -7.68e-06 ,
642 -1.78e-05 , -1.19e-05 , -1.78e-05 , -1.34e-06 , -9.23e-06 , -3.34e-06 ,
643 -8.02e-06 , -1.39e-05 , -1.38e-05 , -1.40e-05 };
644 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 ,
645 5.53e-09 , 5.40e-09 , 7.93e-09 , 5.49e-09 , 8.77e-09 , 4.21e-09 , 3.93e-09 ,
646 3.60e-09 , 4.67e-09 , 5.59e-09 , 8.81e-09 , 3.89e-09 , 6.19e-09 , 1.97e-09 ,
647 4.38e-09 , 3.26e-09 , 5.00e-09 , 4.58e-09 , 6.39e-09 , 5.03e-09 , 1.30e-08 ,
648 4.95e-09 , 8.26e-09 , 4.57e-09 , 4.10e-09 , 2.35e-09 , 2.30e-09 , 2.15e-09 ,
649 2.27e-09 , 2.17e-09 , 2.27e-09 , 2.97e-09 , 2.25e-09 , 1.69e-09 , 1.44e-09 ,
650 1.66e-09 , 1.75e-09 , 2.88e-09 , 1.82e-09 , 3.64e-09 , 1.80e-09 , 1.71e-09 ,
651 2.66e-09 , 3.01e-09 , 1.95e-09 , 2.64e-09 , 2.42e-09 , 3.68e-09 , 2.66e-09 ,
652 3.92e-09 , 1.18e-09 , 2.26e-09 , 1.57e-09 , 2.02e-09 , 2.71e-09 , 2.99e-09 , 3.04e-09 };
655 if (esd->GetRunNumber() <= 137165) {
665 Float_t multCorr = 0;
666 Float_t multCorr2 = 0;
667 Float_t multChCorr[64];
668 AliESDVZERO* esdV0 = esd->GetVZEROData();
669 for(Int_t i = 0; i < 64; ++i) {
670 Double_t b = (esdV0->GetMultiplicity(i)*par1[i]-par0[i]);
671 Double_t s = (b*b-4.*par2[i]*esdV0->GetMultiplicity(i)*esdV0->GetMultiplicity(i));
672 Double_t n = (s<0) ? -b : (-b + TMath::Sqrt(s));
673 multChCorr[i] = 2.*esdV0->GetMultiplicity(i)/n*par0[i];
674 multCorr += multChCorr[i];
675 multCorr2 += (multChCorr[i]/par0[i]/64.);
677 v0CorrResc = multCorr2;
681 //____________________________________________________________________
682 Float_t AliCentralitySelectionTask::GetCorrSPD2(Float_t spd2raw,Float_t zv)
684 // renormalize N spd2 clusters at given Zv to acceptance at Zv=0
685 const double pars[] = {8.10030e-01,-2.80364e-03,-7.19504e-04};
687 float corr = 1 + zv*(pars[1] + zv*pars[2]);
688 return corr>0 ? spd2raw/corr : -1;