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 //*****************************************************
22 #include "AliCentralitySelectionTask.h"
31 #include <TObjString.h>
35 #include <TDirectory.h>
39 #include "AliAnalysisManager.h"
40 #include "AliHeader.h"
41 #include "AliVEvent.h"
43 #include "AliESDEvent.h"
44 #include "AliESDHeader.h"
45 #include "AliESDInputHandler.h"
46 #include "AliESDZDC.h"
47 #include "AliESDFMD.h"
48 #include "AliESDVZERO.h"
49 #include "AliESDtrackCuts.h"
50 #include "AliESDVertex.h"
51 #include "AliCentrality.h"
52 #include "AliMultiplicity.h"
53 #include "AliAODHandler.h"
54 #include "AliAODHeader.h"
55 #include "AliAODEvent.h"
56 #include "AliAODVertex.h"
57 #include "AliAODVZERO.h"
58 #include "AliAODTracklets.h"
59 #include "AliAODMCHeader.h"
60 #include "AliMCEventHandler.h"
61 #include "AliMCEvent.h"
62 #include "AliAODMCParticle.h"
63 #include "AliMCParticle.h"
65 #include "AliAnalysisTaskSE.h"
66 #include "AliGenEventHeader.h"
67 #include "AliGenHijingEventHeader.h"
68 #include "AliPhysicsSelectionTask.h"
69 #include "AliPhysicsSelection.h"
70 #include "AliBackgroundSelection.h"
71 #include "AliESDUtils.h"
73 ClassImp(AliCentralitySelectionTask)
76 //________________________________________________________________________
77 AliCentralitySelectionTask::AliCentralitySelectionTask():
79 fAnalysisInput("ESD"),
119 fHOutCentV0MvsFMD(0),
120 fHOutCentTKLvsV0M(0),
121 fHOutCentZEMvsZDC(0),
122 fHOutCentV0MvsCentCL1(0),
123 fHOutCentV0MvsCentTRK(0),
124 fHOutCentTRKvsCentCL1(0),
125 fHOutCentV0MvsCentZDC(0),
133 fHOutMultV0MvsZDN(0),
134 fHOutMultZEMvsZDN(0),
135 fHOutMultV0MvsZDC(0),
136 fHOutMultZEMvsZDC(0),
137 fHOutMultV0MvsCL1(0),
138 fHOutMultV0MvsTRK(0),
139 fHOutMultTRKvsCL1(0),
140 fHOutCentV0Mqual1(0),
141 fHOutCentTRKqual1(0),
142 fHOutCentCL1qual1(0),
143 fHOutCentV0Mqual2(0),
144 fHOutCentTRKqual2(0),
145 fHOutCentCL1qual2(0),
149 // Default constructor
150 AliInfo("Centrality Selection enabled.");
154 for (Int_t i=0; i < 2667; i++) {
155 fV0MScaleFactor[i]=0.0;
156 fSPDScaleFactor[i]=0.0;
157 fTPCScaleFactor[i]=0.0;
158 fV0MScaleFactorMC[i]=0.0;
162 fBranchNames="ESD:AliESDRun.,AliESDHeader.,AliESDZDC.,AliESDFMD.,AliESDVZERO."
163 ",SPDVertex.,TPCVertex.,PrimaryVertex.,AliMultiplicity.,Tracks ";
166 //________________________________________________________________________
167 AliCentralitySelectionTask::AliCentralitySelectionTask(const char *name):
168 AliAnalysisTaskSE(name),
169 fAnalysisInput("ESD"),
209 fHOutCentV0MvsFMD(0),
210 fHOutCentTKLvsV0M(0),
211 fHOutCentZEMvsZDC(0),
212 fHOutCentV0MvsCentCL1(0),
213 fHOutCentV0MvsCentTRK(0),
214 fHOutCentTRKvsCentCL1(0),
215 fHOutCentV0MvsCentZDC(0),
223 fHOutMultV0MvsZDN(0),
224 fHOutMultZEMvsZDN(0),
225 fHOutMultV0MvsZDC(0),
226 fHOutMultZEMvsZDC(0),
227 fHOutMultV0MvsCL1(0),
228 fHOutMultV0MvsTRK(0),
229 fHOutMultTRKvsCL1(0),
230 fHOutCentV0Mqual1(0),
231 fHOutCentTRKqual1(0),
232 fHOutCentCL1qual1(0),
233 fHOutCentV0Mqual2(0),
234 fHOutCentTRKqual2(0),
235 fHOutCentCL1qual2(0),
239 // Default constructor
243 AliInfo("Centrality Selection enabled.");
244 DefineOutput(1, TList::Class());
245 for (Int_t i=0; i<2667; i++) {
246 fV0MScaleFactor[i]=0.0;
247 fSPDScaleFactor[i]=0.0;
248 fTPCScaleFactor[i]=0.0;
249 fV0MScaleFactorMC[i]=0.0;
253 fBranchNames="ESD:AliESDRun.,AliESDHeader.,AliESDZDC.,AliESDFMD.,AliESDVZERO."
254 ",SPDVertex.,TPCVertex.,PrimaryVertex.,AliMultiplicity.,Tracks ";
257 //________________________________________________________________________
258 AliCentralitySelectionTask& AliCentralitySelectionTask::operator=(const AliCentralitySelectionTask& c)
260 // Assignment operator
262 AliAnalysisTaskSE::operator=(c);
267 //________________________________________________________________________
268 AliCentralitySelectionTask::AliCentralitySelectionTask(const AliCentralitySelectionTask& ana):
269 AliAnalysisTaskSE(ana),
270 fAnalysisInput(ana.fDebug),
271 fIsMCInput(ana.fIsMCInput),
275 fCurrentRun(ana.fCurrentRun),
277 fLowRunN(ana.fLowRunN),
278 fHighRunN(ana.fHighRunN),
279 fUseScaling(ana.fUseScaling),
280 fUseCleaning(ana.fUseCleaning),
281 fTrackCuts(ana.fTrackCuts),
283 fOutliersCut(ana.fOutliersCut),
284 fQuality(ana.fQuality),
285 fCentV0M(ana.fCentV0M),
286 fCentFMD(ana.fCentFMD),
287 fCentTRK(ana.fCentTRK),
288 fCentTKL(ana.fCentTKL),
289 fCentCL0(ana.fCentCL0),
290 fCentCL1(ana.fCentCL1),
291 fCentV0MvsFMD(ana.fCentV0MvsFMD),
292 fCentTKLvsV0M(ana.fCentTKLvsV0M),
293 fCentZEMvsZDC(ana.fCentZEMvsZDC),
294 fHtempV0M(ana.fHtempV0M),
295 fHtempFMD(ana.fHtempFMD),
296 fHtempTRK(ana.fHtempTRK),
297 fHtempTKL(ana.fHtempTKL),
298 fHtempCL0(ana.fHtempCL0),
299 fHtempCL1(ana.fHtempCL1),
300 fHtempV0MvsFMD(ana.fHtempV0MvsFMD),
301 fHtempTKLvsV0M(ana.fHtempTKLvsV0M),
302 fHtempZEMvsZDC(ana.fHtempZEMvsZDC),
303 fOutputList(ana.fOutputList),
304 fHOutCentV0M (ana.fHOutCentV0M ),
305 fHOutCentFMD (ana.fHOutCentFMD ),
306 fHOutCentTRK (ana.fHOutCentTRK ),
307 fHOutCentTKL (ana.fHOutCentTKL ),
308 fHOutCentCL0 (ana.fHOutCentCL0 ),
309 fHOutCentCL1 (ana.fHOutCentCL1 ),
310 fHOutCentV0MvsFMD(ana.fHOutCentV0MvsFMD),
311 fHOutCentTKLvsV0M(ana.fHOutCentTKLvsV0M),
312 fHOutCentZEMvsZDC(ana.fHOutCentZEMvsZDC),
313 fHOutCentV0MvsCentCL1(ana.fHOutCentV0MvsCentCL1),
314 fHOutCentV0MvsCentTRK(ana.fHOutCentV0MvsCentTRK),
315 fHOutCentTRKvsCentCL1(ana.fHOutCentTRKvsCentCL1),
316 fHOutCentV0MvsCentZDC(ana.fHOutCentV0MvsCentZDC),
317 fHOutMultV0M(ana.fHOutMultV0M),
318 fHOutMultV0R(ana.fHOutMultV0R),
319 fHOutMultFMD(ana.fHOutMultFMD),
320 fHOutMultTRK(ana.fHOutMultTRK),
321 fHOutMultTKL(ana.fHOutMultTKL),
322 fHOutMultCL0(ana.fHOutMultCL0),
323 fHOutMultCL1(ana.fHOutMultCL1),
324 fHOutMultV0MvsZDN(ana.fHOutMultV0MvsZDN),
325 fHOutMultZEMvsZDN(ana.fHOutMultZEMvsZDN),
326 fHOutMultV0MvsZDC(ana.fHOutMultV0MvsZDC),
327 fHOutMultZEMvsZDC(ana.fHOutMultZEMvsZDC),
328 fHOutMultV0MvsCL1(ana.fHOutMultV0MvsCL1),
329 fHOutMultV0MvsTRK(ana.fHOutMultV0MvsTRK),
330 fHOutMultTRKvsCL1(ana.fHOutMultTRKvsCL1),
331 fHOutCentV0Mqual1(ana.fHOutCentV0Mqual1),
332 fHOutCentTRKqual1(ana.fHOutCentTRKqual1),
333 fHOutCentCL1qual1(ana.fHOutCentCL1qual1),
334 fHOutCentV0Mqual2(ana.fHOutCentV0Mqual2),
335 fHOutCentTRKqual2(ana.fHOutCentTRKqual2),
336 fHOutCentCL1qual2(ana.fHOutCentCL1qual2),
337 fHOutQuality(ana.fHOutQuality),
338 fHOutVertex(ana.fHOutVertex)
341 for (Int_t i=0; i<2667; i++) {
342 fV0MScaleFactor[i]=0.0;
343 fSPDScaleFactor[i]=0.0;
344 fTPCScaleFactor[i]=0.0;
345 fV0MScaleFactorMC[i]=0.0;
350 //________________________________________________________________________
351 AliCentralitySelectionTask::~AliCentralitySelectionTask()
354 if (fOutputList && !AliAnalysisManager::GetAnalysisManager()->IsProofMode()) delete fOutputList;
355 if (fTrackCuts) delete fTrackCuts;
358 //________________________________________________________________________
359 void AliCentralitySelectionTask::UserCreateOutputObjects()
361 // Create the output containers
362 if(fDebug>1) printf("AnalysisCentralitySelectionTask::UserCreateOutputObjects() \n");
363 AliLog::SetClassDebugLevel("AliCentralitySelectionTask", AliLog::kInfo);
365 fOutputList = new TList();
366 fOutputList->SetOwner();
367 fHOutCentV0M = new TH1F("fHOutCentV0M","fHOutCentV0M; Centrality V0",505,0,101);
368 fHOutCentFMD = new TH1F("fHOutCentFMD","fHOutCentFMD; Centrality FMD",505,0,101);
369 fHOutCentTRK = new TH1F("fHOutCentTRK","fHOutCentTRK; Centrality TPC",505,0,101);
370 fHOutCentTKL = new TH1F("fHOutCentTKL","fHOutCentTKL; Centrality tracklets",505,0,101);
371 fHOutCentCL0 = new TH1F("fHOutCentCL0","fHOutCentCL0; Centrality SPD inner",505,0,101);
372 fHOutCentCL1 = new TH1F("fHOutCentCL1","fHOutCentCL1; Centrality SPD outer",505,0,101);
373 fHOutCentV0MvsFMD= new TH1F("fHOutCentV0MvsFMD","fHOutCentV0MvsFMD; Centrality V0 vs FMD",505,0,101);
374 fHOutCentTKLvsV0M= new TH1F("fHOutCentTKLvsV0M","fHOutCentTKLvsV0M; Centrality tracklets vs V0",505,0,101);
375 fHOutCentZEMvsZDC= new TH1F("fHOutCentZEMvsZDC","fHOutCentZEMvsZDC; Centrality ZEM vs ZDC",505,0,101);
376 fHOutCentV0MvsCentCL1= new TH2F("fHOutCentV0MvsCentCL1","fHOutCentV0MvsCentCL1; Cent V0; Cent SPD",505,0,101,505,0,101);
377 fHOutCentV0MvsCentTRK= new TH2F("fHOutCentV0MvsCentTRK","fHOutCentV0MvsCentTRK; Cent V0; Cent TPC",505,0,101,505,0,101);
378 fHOutCentTRKvsCentCL1= new TH2F("fHOutCentTRKvsCentCL1","fHOutCentTRKvsCentCL1; Cent TPC; Cent SPD",505,0,101,505,0,101);
379 fHOutCentV0MvsCentZDC= new TH2F("fHOutCentV0MvsCentZDC","fHOutCentV0MvsCentZDC; Cent V0; Cent ZDC",505,0,101,505,0,101);
381 fHOutMultV0M = new TH1F("fHOutMultV0M","fHOutMultV0M; Multiplicity V0",25000,0,25000);
382 fHOutMultV0R = new TH1F("fHOutMultV0R","fHOutMultV0R; Multiplicity V0",30000,0,30000);
383 fHOutMultFMD = new TH1F("fHOutMultFMD","fHOutMultFMD; Multiplicity FMD",24000,0,24000);
384 fHOutMultTRK = new TH1F("fHOutMultTRK","fHOutMultTRK; Multiplicity TPC",4000,0,4000);
385 fHOutMultTKL = new TH1F("fHOutMultTKL","fHOutMultTKL; Multiplicity tracklets",5000,0,5000);
386 fHOutMultCL0 = new TH1F("fHOutMultCL0","fHOutMultCL0; Multiplicity SPD inner",7000,0,7000);
387 fHOutMultCL1 = new TH1F("fHOutMultCL1","fHOutMultCL1; Multiplicity SPD outer",7000,0,7000);
388 fHOutMultV0MvsZDN = new TH2F("fHOutMultV0MvsZDN","fHOutMultV0MvsZDN; Multiplicity V0; Energy ZDC-N",500,0,25000,500,0,180000);
389 fHOutMultZEMvsZDN = new TH2F("fHOutMultZEMvsZDN","fHOutMultZEMvsZDN; Energy ZEM; Energy ZDC-N",500,0,2500,500,0,180000);
390 fHOutMultV0MvsZDC = new TH2F("fHOutMultV0MvsZDC","fHOutMultV0MvsZDC; Multiplicity V0; Energy ZDC",500,0,25000,500,0,200000);
391 fHOutMultZEMvsZDC = new TH2F("fHOutMultZEMvsZDC","fHOutMultZEMvsZDC; Energy ZEM; Energy ZDC",500,0,2500,500,0,200000);
392 fHOutMultV0MvsCL1 = new TH2F("fHOutMultV0MvsCL1","fHOutMultV0MvsCL1; Multiplicity V0; Multiplicity SPD outer",2500,0,25000,700,0,7000);
393 fHOutMultV0MvsTRK = new TH2F("fHOutMultV0MvsTRK","fHOutMultV0MvsTRK; Multiplicity V0; Multiplicity TPC",2500,0,25000,400,0,4000);
394 fHOutMultTRKvsCL1 = new TH2F("fHOutMultTRKvsCL1","fHOutMultTRKvsCL1; Multiplicity TPC; Multiplicity SPD outer",400,0,4000,700,0,7000);
396 fHOutCentV0Mqual1 = new TH1F("fHOutCentV0M_qual1","fHOutCentV0M_qual1; Centrality V0",505,0,101);
397 fHOutCentTRKqual1 = new TH1F("fHOutCentTRK_qual1","fHOutCentTRK_qual1; Centrality TPC",505,0,101);
398 fHOutCentCL1qual1 = new TH1F("fHOutCentCL1_qual1","fHOutCentCL1_qual1; Centrality SPD outer",505,0,101);
400 fHOutCentV0Mqual2 = new TH1F("fHOutCentV0M_qual2","fHOutCentV0M_qual2; Centrality V0",505,0,101);
401 fHOutCentTRKqual2 = new TH1F("fHOutCentTRK_qual2","fHOutCentTRK_qual2; Centrality TPC",505,0,101);
402 fHOutCentCL1qual2 = new TH1F("fHOutCentCL1_qual2","fHOutCentCL1_qual2; Centrality SPD outer",505,0,101);
404 fHOutQuality = new TH1F("fHOutQuality", "fHOutQuality", 100,-0.5,99.5);
405 fHOutVertex = new TH1F("fHOutVertex", "fHOutVertex", 100,-20,20);
407 fOutputList->Add( fHOutCentV0M );
408 fOutputList->Add( fHOutCentFMD );
409 fOutputList->Add( fHOutCentTRK );
410 fOutputList->Add( fHOutCentTKL );
411 fOutputList->Add( fHOutCentCL0 );
412 fOutputList->Add( fHOutCentCL1 );
413 fOutputList->Add( fHOutCentV0MvsFMD);
414 fOutputList->Add( fHOutCentTKLvsV0M);
415 fOutputList->Add( fHOutCentZEMvsZDC);
416 fOutputList->Add( fHOutCentV0MvsCentCL1);
417 fOutputList->Add( fHOutCentV0MvsCentTRK);
418 fOutputList->Add( fHOutCentTRKvsCentCL1);
419 fOutputList->Add( fHOutCentV0MvsCentZDC);
420 fOutputList->Add( fHOutMultV0M);
421 fOutputList->Add( fHOutMultV0R);
422 fOutputList->Add( fHOutMultFMD);
423 fOutputList->Add( fHOutMultTRK);
424 fOutputList->Add( fHOutMultTKL);
425 fOutputList->Add( fHOutMultCL0);
426 fOutputList->Add( fHOutMultCL1);
427 fOutputList->Add( fHOutMultV0MvsZDN);
428 fOutputList->Add( fHOutMultZEMvsZDN);
429 fOutputList->Add( fHOutMultV0MvsZDC);
430 fOutputList->Add( fHOutMultZEMvsZDC);
431 fOutputList->Add( fHOutMultV0MvsCL1);
432 fOutputList->Add( fHOutMultV0MvsTRK);
433 fOutputList->Add( fHOutMultTRKvsCL1);
434 fOutputList->Add( fHOutCentV0Mqual1 );
435 fOutputList->Add( fHOutCentTRKqual1 );
436 fOutputList->Add( fHOutCentCL1qual1 );
437 fOutputList->Add( fHOutCentV0Mqual2 );
438 fOutputList->Add( fHOutCentTRKqual2 );
439 fOutputList->Add( fHOutCentCL1qual2 );
440 fOutputList->Add( fHOutQuality );
441 fOutputList->Add( fHOutVertex );
444 fTrackCuts = AliESDtrackCuts::GetStandardTPCOnlyTrackCuts();
446 PostData(1, fOutputList);
449 if (fIsMCInput) MyInitScaleFactorMC();
451 if (fPass==0) AliFatal("Which pass are you analyzing? You should set it via taskCentrality->SetPass(N)");
454 //________________________________________________________________________
455 void AliCentralitySelectionTask::UserExec(Option_t */*option*/)
457 // Execute analysis for current event:
458 if(fDebug>1) printf(" **** AliCentralitySelectionTask::UserExec() \n");
460 Float_t zncEnergy = 0.; // ZNC Energy
461 Float_t zpcEnergy = 0.; // ZPC Energy
462 Float_t znaEnergy = 0.; // ZNA Energy
463 Float_t zpaEnergy = 0.; // ZPA Energy
464 Float_t zem1Energy = 0.; // ZEM1 Energy
465 Float_t zem2Energy = 0.; // ZEM2 Energy
466 Bool_t zdcEnergyCal = kFALSE; // if zdc is calibrated (in pass2)
468 Int_t nTracks = 0; // no. tracks
469 Int_t nTracklets = 0; // no. tracklets
470 Int_t nClusters[6] = {0}; // no. clusters on 6 ITS layers
471 Int_t nChips[2]; // no. chips on 2 SPD layers
472 Float_t spdCorr =0; // corrected spd2 multiplicity
474 Float_t multV0A = 0; // multiplicity from V0 reco side A
475 Float_t multV0C = 0; // multiplicity from V0 reco side C
476 Float_t multFMDA = 0; // multiplicity from FMD on detector A
477 Float_t multFMDC = 0; // multiplicity from FMD on detector C
479 Short_t v0Corr = 0; // corrected V0 multiplicity
480 Short_t v0CorrResc = 0; // corrected and rescaled V0 multiplicity
482 Float_t zvtx =0; // z-vertex SPD
483 Int_t zvtxNcont =0; // contributors to z-vertex SPD
486 AliCentrality *esdCent = 0;
488 if(fAnalysisInput.CompareTo("ESD")==0){
490 AliVEvent* event = InputEvent();
491 AliESDEvent* esd = dynamic_cast<AliESDEvent*>(event);
493 AliError("No ESD Event");
500 if (SetupRun(esd)<0) {
501 AliError("Centrality File not available for this run");
506 esdCent = esd->GetCentrality();
509 AliESDVZERO* esdV0 = esd->GetVZEROData();
510 multV0A=esdV0->GetMTotV0A();
511 multV0C=esdV0->GetMTotV0C();
514 v0Corr = (Short_t)AliESDUtils::GetCorrV0(esd,v0CorrR);
515 v0CorrResc = (Short_t)v0CorrR;
518 const AliESDVertex* vtxESD = esd->GetPrimaryVertexSPD();
519 zvtx = vtxESD->GetZ();
520 zvtxNcont = vtxESD->GetNContributors();
522 // ***** CB info (tracklets, clusters, chips)
523 //nTracks = event->GetNumberOfTracks();
524 nTracks = fTrackCuts ? (Short_t)fTrackCuts->GetReferenceMultiplicity(esd,kTRUE):-1;
526 const AliMultiplicity *mult = esd->GetMultiplicity();
528 nTracklets = mult->GetNumberOfTracklets();
530 for(Int_t ilay=0; ilay<6; ilay++){
531 nClusters[ilay] = mult->GetNumberOfITSClusters(ilay);
534 for(Int_t ilay=0; ilay<2; ilay++){
535 nChips[ilay] = mult->GetNumberOfFiredChips(ilay);
538 spdCorr = AliESDUtils::GetCorrSPD2(nClusters[1],zvtx);
541 AliESDFMD *fmd = esd->GetFMDData();
542 Float_t totalMultA = 0;
543 Float_t totalMultC = 0;
544 const Float_t fFMDLowCut = 0.4;
546 for(UShort_t det=1;det<=3;det++) {
547 Int_t nRings = (det==1 ? 1 : 2);
548 for (UShort_t ir = 0; ir < nRings; ir++) {
549 Char_t ring = (ir == 0 ? 'I' : 'O');
550 UShort_t nsec = (ir == 0 ? 20 : 40);
551 UShort_t nstr = (ir == 0 ? 512 : 256);
552 for(UShort_t sec =0; sec < nsec; sec++) {
553 for(UShort_t strip = 0; strip < nstr; strip++) {
555 Float_t fmdMult = fmd->Multiplicity(det,ring,sec,strip);
556 if(fmdMult == 0 || fmdMult == AliESDFMD::kInvalidMult) continue;
558 Float_t nParticles=0;
560 if(fmdMult > fFMDLowCut) {
564 if (det<3) totalMultA = totalMultA + nParticles;
565 else totalMultC = totalMultC + nParticles;
571 multFMDA = totalMultA;
572 multFMDC = totalMultC;
575 AliESDZDC *esdZDC = esd->GetESDZDC();
576 zdcEnergyCal = esdZDC->AliESDZDC::TestBit(AliESDZDC::kEnergyCalibratedSignal);
578 zncEnergy = (Float_t) (esdZDC->GetZDCN1Energy());
579 zpcEnergy = (Float_t) (esdZDC->GetZDCP1Energy());
580 znaEnergy = (Float_t) (esdZDC->GetZDCN2Energy());
581 zpaEnergy = (Float_t) (esdZDC->GetZDCP2Energy());
583 zncEnergy = (Float_t) (esdZDC->GetZDCN1Energy())/8.;
584 zpcEnergy = (Float_t) (esdZDC->GetZDCP1Energy())/8.;
585 znaEnergy = (Float_t) (esdZDC->GetZDCN2Energy())/8.;
586 zpaEnergy = (Float_t) (esdZDC->GetZDCP2Energy())/8.;
588 zem1Energy = (Float_t) (esdZDC->GetZDCEMEnergy(0))/8.;
589 zem2Energy = (Float_t) (esdZDC->GetZDCEMEnergy(1))/8.;
593 else if(fAnalysisInput.CompareTo("AOD")==0){
594 //AliAODEvent *aod = dynamic_cast<AliAODEvent*> (InputEvent());
596 printf(" AOD analysis not yet implemented!!!\n\n");
601 // ***** Scaling for pass2
605 // ***** Scaling for MC
609 Float_t tempScalefactorV0M = MyGetScaleFactorMC(fCurrentRun);
610 v0Corr = Short_t((multV0A+multV0C) * tempScalefactorV0M);
612 // ***** Scaling for Data
614 Float_t tempScalefactorV0M = MyGetScaleFactor(fCurrentRun,0);
615 Float_t tempScalefactorSPD = MyGetScaleFactor(fCurrentRun,1);
616 Float_t tempScalefactorTPC = MyGetScaleFactor(fCurrentRun,2);
617 v0Corr = Short_t(v0Corr / tempScalefactorV0M);
618 spdCorr = spdCorr / tempScalefactorSPD;
619 nTracks = Int_t(nTracks / tempScalefactorTPC);
622 // ***** Centrality Selection
623 if(fHtempV0M) fCentV0M = fHtempV0M->GetBinContent(fHtempV0M->FindBin((v0Corr)));
624 if(fHtempFMD) fCentFMD = fHtempFMD->GetBinContent(fHtempFMD->FindBin((multFMDA+multFMDC)));
625 if(fHtempTRK) fCentTRK = fHtempTRK->GetBinContent(fHtempTRK->FindBin(nTracks));
626 if(fHtempTKL) fCentTKL = fHtempTKL->GetBinContent(fHtempTKL->FindBin(nTracklets));
627 if(fHtempCL0) fCentCL0 = fHtempCL0->GetBinContent(fHtempCL0->FindBin(nClusters[0]));
628 if(fHtempCL1) fCentCL1 = fHtempCL1->GetBinContent(fHtempCL1->FindBin(spdCorr));
630 if(fHtempV0MvsFMD) fCentV0MvsFMD = fHtempV0MvsFMD->GetBinContent(fHtempV0MvsFMD->FindBin((multV0A+multV0C)));
631 if(fHtempTKLvsV0M) fCentTKLvsV0M = fHtempTKLvsV0M->GetBinContent(fHtempTKLvsV0M->FindBin(nTracklets));
632 if(fHtempZEMvsZDC) fCentZEMvsZDC = fHtempZEMvsZDC->GetBinContent(fHtempZEMvsZDC->FindBin(zem1Energy+zem2Energy,zncEnergy+znaEnergy+zpcEnergy+zpaEnergy));
641 if (TMath::Abs(zvtx)>fZVCut || zvtxNcont<1) fQuality += 1;
645 if (IsOutlierV0MSPD(spdCorr, v0Corr, int(fCentV0M))) fQuality += 2;
647 if (IsOutlierV0MTPC(nTracks, v0Corr, int(fCentV0M))) fQuality += 4;
649 if (IsOutlierV0MZDC((zncEnergy+znaEnergy+zpcEnergy+zpaEnergy), v0Corr) &&
650 (zdcEnergyCal==kFALSE) && !(fIsMCInput)) fQuality += 8;
651 if (IsOutlierV0MZDCECal((zncEnergy+znaEnergy+zpcEnergy+zpaEnergy), v0Corr) &&
652 ((zdcEnergyCal==kTRUE) || (fIsMCInput))) fQuality += 8;
659 esdCent->SetQuality(fQuality);
660 esdCent->SetCentralityV0M(fCentV0M);
661 esdCent->SetCentralityFMD(fCentFMD);
662 esdCent->SetCentralityTRK(fCentTRK);
663 esdCent->SetCentralityTKL(fCentTKL);
664 esdCent->SetCentralityCL0(fCentCL0);
665 esdCent->SetCentralityCL1(fCentCL1);
666 esdCent->SetCentralityV0MvsFMD(fCentV0MvsFMD);
667 esdCent->SetCentralityTKLvsV0M(fCentTKLvsV0M);
668 esdCent->SetCentralityZEMvsZDC(fCentZEMvsZDC);
671 fHOutQuality->Fill(fQuality);
672 fHOutVertex->Fill(zvtx);
674 fHOutMultV0MvsZDN->Fill(v0Corr,(zncEnergy+znaEnergy));
675 fHOutMultZEMvsZDN->Fill((zem1Energy+zem2Energy),(zncEnergy+znaEnergy));
676 fHOutMultV0MvsZDC->Fill(v0Corr,(zncEnergy+znaEnergy+zpcEnergy+zpaEnergy));
677 fHOutMultZEMvsZDC->Fill((zem1Energy+zem2Energy),(zncEnergy+znaEnergy+zpcEnergy+zpaEnergy));
678 fHOutMultV0MvsCL1->Fill(v0Corr,spdCorr);
679 fHOutMultV0MvsTRK->Fill(v0Corr,nTracks);
682 fHOutCentV0M->Fill(fCentV0M);
683 fHOutCentFMD->Fill(fCentFMD);
684 fHOutCentTRK->Fill(fCentTRK);
685 fHOutCentTKL->Fill(fCentTKL);
686 fHOutCentCL0->Fill(fCentCL0);
687 fHOutCentCL1->Fill(fCentCL1);
688 fHOutCentV0MvsFMD->Fill(fCentV0MvsFMD);
689 fHOutCentTKLvsV0M->Fill(fCentTKLvsV0M);
690 fHOutCentZEMvsZDC->Fill(fCentZEMvsZDC);
691 fHOutCentV0MvsCentCL1->Fill(fCentV0M,fCentCL1);
692 fHOutCentV0MvsCentTRK->Fill(fCentV0M,fCentTRK);
693 fHOutCentTRKvsCentCL1->Fill(fCentTRK,fCentCL1);
694 fHOutCentV0MvsCentCL1->Fill(fCentV0M,fCentZEMvsZDC);
695 fHOutMultV0M->Fill(v0Corr);
696 fHOutMultV0R->Fill(multV0A+multV0C);
697 fHOutMultFMD->Fill((multFMDA+multFMDC));
698 fHOutMultTRK->Fill(nTracks);
699 fHOutMultTKL->Fill(nTracklets);
700 fHOutMultCL0->Fill(nClusters[0]);
701 fHOutMultCL1->Fill(spdCorr);
702 fHOutMultTRKvsCL1->Fill(nTracks,spdCorr);
703 } else if (fQuality ==1) {
704 fHOutCentV0Mqual1->Fill(fCentV0M);
705 fHOutCentTRKqual1->Fill(fCentTRK);
706 fHOutCentCL1qual1->Fill(fCentCL1);
708 fHOutCentV0Mqual2->Fill(fCentV0M);
709 fHOutCentTRKqual2->Fill(fCentTRK);
710 fHOutCentCL1qual2->Fill(fCentCL1);
713 PostData(1, fOutputList);
716 //________________________________________________________________________
717 void AliCentralitySelectionTask::ReadCentralityHistos(TString fCentfilename)
719 // Read centrality histograms
720 TDirectory *owd = gDirectory;
721 // Check if the file is present
722 TString path = gSystem->ExpandPathName(fCentfilename.Data());
723 if (gSystem->AccessPathName(path)) {
724 AliError(Form("File %s does not exist", path.Data()));
727 fFile = TFile::Open(fCentfilename);
729 fHtempV0M = (TH1F*) (fFile->Get("hmultV0_percentile"));
730 fHtempFMD = (TH1F*) (fFile->Get("hmultFMD_percentile"));
731 fHtempTRK = (TH1F*) (fFile->Get("hNtracks_percentile"));
732 fHtempTKL = (TH1F*) (fFile->Get("hNtracklets_percentile"));
733 fHtempCL0 = (TH1F*) (fFile->Get("hNclusters0_percentile"));
734 fHtempCL1 = (TH1F*) (fFile->Get("hNclusters1_percentile"));
736 if (!fHtempV0M) AliWarning(Form("Calibration for V0M does not exist in %s", path.Data()));
737 if (!fHtempFMD) AliWarning(Form("Calibration for FMD does not exist in %s", path.Data()));
738 if (!fHtempTRK) AliWarning(Form("Calibration for TRK does not exist in %s", path.Data()));
739 if (!fHtempTKL) AliWarning(Form("Calibration for TKL does not exist in %s", path.Data()));
740 if (!fHtempCL0) AliWarning(Form("Calibration for CL0 does not exist in %s", path.Data()));
741 if (!fHtempCL1) AliWarning(Form("Calibration for CL1 does not exist in %s", path.Data()));
746 //________________________________________________________________________
747 void AliCentralitySelectionTask::ReadCentralityHistos2(TString fCentfilename2)
749 // Read centrality histograms
750 TDirectory *owd = gDirectory;
751 TString path = gSystem->ExpandPathName(fCentfilename2.Data());
752 if (gSystem->AccessPathName(path)) {
753 AliError(Form("File %s does not exist", path.Data()));
756 fFile2 = TFile::Open(fCentfilename2);
758 fHtempV0MvsFMD = (TH1F*) (fFile2->Get("hmultV0vsmultFMD_all_percentile"));
759 fHtempTKLvsV0M = (TH1F*) (fFile2->Get("hNtrackletsvsmultV0_all_percentile"));
760 fHtempZEMvsZDC = (TH2F*) (fFile2->Get("hEzemvsEzdc_all_percentile"));
762 if (!fHtempV0MvsFMD) AliWarning(Form("Calibration for V0MvsFMD does not exist in %s", path.Data()));
763 if (!fHtempTKLvsV0M) AliWarning(Form("Calibration for TKLvsV0M does not exist in %s", path.Data()));
764 if (!fHtempZEMvsZDC) AliWarning(Form("Calibration for ZEMvsZDC does not exist in %s", path.Data()));
769 //________________________________________________________________________
770 void AliCentralitySelectionTask::Terminate(Option_t */*option*/)
772 // Terminate analysis
773 if (fFile && fFile->IsOpen())
775 if (fFile2 && fFile2->IsOpen())
778 //________________________________________________________________________
779 Int_t AliCentralitySelectionTask::SetupRun(AliESDEvent* const esd)
781 // Setup files for run
786 // check if something to be done
787 if (fCurrentRun == esd->GetRunNumber())
790 fCurrentRun = esd->GetRunNumber();
792 AliInfo(Form("Setup Centrality Selection for run %d\n",fCurrentRun));
794 // CHANGE HERE FOR RUN RANGES
797 if ( fCurrentRun <= 137165 ) fRunNo = 137161;
798 else fRunNo = 137366;
801 if ( fCurrentRun >= 136851 && fCurrentRun <= 137165 ) fRunNo = 137161;
802 else if ( fCurrentRun >= 138190 && fCurrentRun <= 138275 ) fRunNo = 137722;
803 else if ( fCurrentRun >= 137230 && fCurrentRun <= 137848 ) fRunNo = 138200;
804 else if ( fCurrentRun >= 138125 && fCurrentRun <= 138154 ) fRunNo = 138150;
805 else fRunNo = 139172;
808 AliError(Form("Run %d not known to centrality selection!", fCurrentRun));
811 TString fileName =(Form("%s/COMMON/CENTRALITY/data/pass%d/AliCentralityBy1D_%d.root", AliAnalysisManager::GetOADBPath(), fPass, fRunNo));
812 TString fileName2=(Form("%s/COMMON/CENTRALITY/data/pass%d/AliCentralityByFunction_%d.root", AliAnalysisManager::GetOADBPath(), fPass, fRunNo));
814 AliInfo(Form("Centrality Selection for run %d and pass %d is initialized with %s", fCurrentRun, fPass, fileName.Data()));
815 ReadCentralityHistos(fileName.Data());
816 ReadCentralityHistos2(fileName2.Data());
817 if (!fFile && !fFile2) {
818 AliError(Form("Run %d not known to centrality selection!", fCurrentRun));
824 //________________________________________________________________________
825 Bool_t AliCentralitySelectionTask::IsOutlierV0MSPD(Float_t spd, Float_t v0, Int_t cent) const
828 Float_t val= -0.579579 + 0.273949 * v0;
829 Float_t spdSigma[101]={216.473, 194.377, 190.432, 185.019, 179.787, 175.99, 170.695, 167.276, 162.229, 159.016, 155.592, 151.909, 148.967, 146.367, 142.752, 139.718, 136.838, 134.133, 131.374, 128.616, 126.195, 123.49, 120.76, 118.368, 115.671, 113.354, 110.986, 108.761, 105.816, 103.373, 101.525, 99.3941, 96.8891, 95.1021, 92.728, 90.6434, 88.6393, 86.4624, 84.19, 82.3937, 80.4803, 78.5633, 76.5256, 74.7059, 73.0146, 70.9321, 69.1671, 67.2923, 65.5859, 63.9027, 61.7826, 60.1855, 58.6887, 56.8523, 55.1695, 53.422, 51.9776, 50.3506, 48.5304, 47.1517, 45.4786, 43.9914, 42.4579, 41.0889, 39.6201, 38.3046, 36.8624, 35.3697, 33.9223, 32.4637, 30.859, 29.9707, 28.764, 27.5677, 26.3437, 24.8656, 23.5253, 22.9878, 21.5172, 20.4645, 19.7614, 19.0363, 18.0875, 17.3675, 16.7313, 16.4101, 15.8235, 15.4795, 14.897, 14.578, 14.3506, 14.3506, 14.3506, 14.3506, 14.3506, 14.3506, 14.3506, 14.3506, 14.3506, 22.5965, 22.5965};
831 if ( TMath::Abs(spd-val) > fOutliersCut*spdSigma[cent] )
837 //________________________________________________________________________
838 Bool_t AliCentralitySelectionTask::IsOutlierV0MTPC(Int_t tracks, Float_t v0, Int_t cent) const
841 Float_t val = -1.03873 + 0.125691 * v0;
842 Float_t tpcSigma[101]={105.1, 95.7594, 94.5777, 91.7369, 89.655, 87.9469, 85.2747, 83.8137, 81.5663, 79.9871, 78.3491, 76.664, 75.1352, 73.9838, 72.0122, 70.7627, 69.1832, 67.8707, 66.3974, 65.0222, 64.1065, 62.7248, 61.498, 60.11, 58.7405, 57.681, 56.2979, 55.3153, 53.983, 52.6813, 51.5321, 50.5531, 49.3309, 48.2269, 47.1665, 46.1924, 45.1143, 44.0394, 42.8571, 41.8471, 40.9594, 39.8298, 38.8128, 37.8845, 36.8788, 35.9896, 34.9477, 34.1293, 33.1267, 32.161, 31.1132, 30.3521, 29.5237, 28.5992, 27.6283, 26.8885, 26.0719, 25.1334, 24.2125, 23.5376, 22.5383, 21.8396, 21.0384, 20.2942, 19.4746, 18.5545, 18.26, 17.2997, 16.7109, 15.9324, 15.2755, 14.764, 14.2358, 13.6728, 13.2606, 12.846, 12.2636, 11.722, 11.1491, 10.5952, 10.235, 9.87852, 9.48122, 9.17571, 8.90995, 8.81675, 8.62595, 8.59371, 8.52936, 8.58058, 8.5543, 8.5543, 8.5543, 8.5543, 8.5543, 8.5543, 8.5543, 8.5543, 8.5543, 14.2584, 14.2584};
844 if ( TMath::Abs(tracks-val) > fOutliersCut*tpcSigma[cent] )
850 //________________________________________________________________________
851 Bool_t AliCentralitySelectionTask::IsOutlierV0MZDC(Float_t zdc, Float_t v0) const
854 Float_t val = 235000. - 9.5 * v0;
861 //________________________________________________________________________
862 Bool_t AliCentralitySelectionTask::IsOutlierV0MZDCECal(Float_t /*zdc*/, Float_t /*v0*/) const
868 //________________________________________________________________________
869 Float_t AliCentralitySelectionTask::MyGetScaleFactor(Int_t runnumber, Int_t flag) const
871 // Get scaling factor
872 if (! (runnumber >= fLowRunN && runnumber <=fHighRunN)) {
873 cout << "MyGetScaleFactor error in run number range " << runnumber << endl;
877 Float_t scalefactor=0.0;
879 scalefactor = fV0MScaleFactor[runnumber - fLowRunN]; // subtracting reference offset index
881 scalefactor = fSPDScaleFactor[runnumber - fLowRunN]; // subtracting reference offset index
883 scalefactor = fTPCScaleFactor[runnumber - fLowRunN]; // subtracting reference offset index
889 //________________________________________________________________________
890 Float_t AliCentralitySelectionTask::MyGetScaleFactorMC(Int_t runnumber) const
892 // Get MC scaling factor
893 if (! (runnumber >= fLowRunN && runnumber <=fHighRunN)) {
894 cout << "MyGetScaleFactor error in run number range " << runnumber << endl;
898 Float_t scalefactor= fV0MScaleFactorMC[runnumber - fLowRunN]; // subtracting reference offset index
903 //________________________________________________________________________
904 void AliCentralitySelectionTask::MyInitScaleFactor ()
906 // Initialize the scaling factors
907 for (int i=0; i<=(fHighRunN-fLowRunN); i++) fV0MScaleFactor[i] = 0.0;
908 for (int i=0; i<=(fHighRunN-fLowRunN); i++) fSPDScaleFactor[i] = 0.0;
909 for (int i=0; i<=(fHighRunN-fLowRunN); i++) fTPCScaleFactor[i] = 0.0;
911 // scale factors determined from <V0 charge> on a run-by-run basis
912 fV0MScaleFactor[310] = 1.;
913 fV0MScaleFactor[311] = 1.;
914 fV0MScaleFactor[514] = 1.0046;
915 fV0MScaleFactor[515] = 0.983535;
916 fV0MScaleFactor[579] = 0.988185;
917 fV0MScaleFactor[580] = 0.983351;
918 fV0MScaleFactor[581] = 0.989013;
919 fV0MScaleFactor[583] = 0.990056;
920 fV0MScaleFactor[588] = 0.974438;
921 fV0MScaleFactor[589] = 0.981572;
922 fV0MScaleFactor[590] = 0.989316;
923 fV0MScaleFactor[592] = 0.98345;
924 fV0MScaleFactor[688] = 0.993647;
925 fV0MScaleFactor[690] = 0.994758;
926 fV0MScaleFactor[693] = 0.989569;
927 fV0MScaleFactor[698] = 0.993119;
928 fV0MScaleFactor[744] = 0.989583;
929 fV0MScaleFactor[757] = 0.990377;
930 fV0MScaleFactor[787] = 0.990176;
931 fV0MScaleFactor[788] = 0.98723;
932 fV0MScaleFactor[834] = 1.00403;
933 fV0MScaleFactor[835] = 0.994376;
934 fV0MScaleFactor[840] = 0.99759;
935 fV0MScaleFactor[842] = 1.01031;
936 fV0MScaleFactor[900] = 0.996216;
937 fV0MScaleFactor[901] = 0.994205;
938 fV0MScaleFactor[992] = 0.998479;
939 fV0MScaleFactor[997] = 1.00078;
940 fV0MScaleFactor[1299] = 1.00515;
941 fV0MScaleFactor[1303] = 1.00094;
942 fV0MScaleFactor[1339] = 0.986596;
943 fV0MScaleFactor[1346] = 0.972226;
944 fV0MScaleFactor[1349] = 0.960358;
945 fV0MScaleFactor[1350] = 0.970023;
946 fV0MScaleFactor[1374] = 1.00575;
947 fV0MScaleFactor[1545] = 1.00471;
948 fV0MScaleFactor[1587] = 1.00611;
949 fV0MScaleFactor[1588] = 1.00976;
950 fV0MScaleFactor[1618] = 1.00771;
951 fV0MScaleFactor[1682] = 1.01622;
952 fV0MScaleFactor[1727] = 1.01305;
953 fV0MScaleFactor[1728] = 1.00388;
954 fV0MScaleFactor[1731] = 1.00673;
955 fV0MScaleFactor[1732] = 1.00916;
956 fV0MScaleFactor[1770] = 1.0092;
957 fV0MScaleFactor[1773] = 1.00728;
958 fV0MScaleFactor[1786] = 1.01655;
959 fV0MScaleFactor[1787] = 1.00672;
960 fV0MScaleFactor[1801] = 0.983339;
961 fV0MScaleFactor[1802] = 1.00754;
962 fV0MScaleFactor[1811] = 1.00608;
963 fV0MScaleFactor[1815] = 1.01227;
964 fV0MScaleFactor[1879] = 0.99907;
965 fV0MScaleFactor[1881] = 0.995696;
966 fV0MScaleFactor[2186] = 1.00559;
967 fV0MScaleFactor[2187] = 1.00631;
968 fV0MScaleFactor[2254] = 1.01512;
969 fV0MScaleFactor[2256] = 0.998727;
970 fV0MScaleFactor[2321] = 1.00701;
971 fSPDScaleFactor[310] = 1.00211;
972 fSPDScaleFactor[311] = 1.00067;
973 fSPDScaleFactor[514] = 1.02268;
974 fSPDScaleFactor[515] = 0.994902;
975 fSPDScaleFactor[579] = 1.00215;
976 fSPDScaleFactor[580] = 0.993421;
977 fSPDScaleFactor[581] = 1.00129;
978 fSPDScaleFactor[583] = 1.00242;
979 fSPDScaleFactor[588] = 0.984762;
980 fSPDScaleFactor[589] = 0.994355;
981 fSPDScaleFactor[590] = 1.00073;
982 fSPDScaleFactor[592] = 0.995889;
983 fSPDScaleFactor[688] = 0.994532;
984 fSPDScaleFactor[690] = 0.998307;
985 fSPDScaleFactor[693] = 0.994052;
986 fSPDScaleFactor[698] = 0.993224;
987 fSPDScaleFactor[744] = 0.993279;
988 fSPDScaleFactor[757] = 0.992494;
989 fSPDScaleFactor[787] = 0.992678;
990 fSPDScaleFactor[788] = 0.996563;
991 fSPDScaleFactor[834] = 1.01116;
992 fSPDScaleFactor[835] = 0.993108;
993 fSPDScaleFactor[840] = 0.997574;
994 fSPDScaleFactor[842] = 1.01829;
995 fSPDScaleFactor[900] = 0.999438;
996 fSPDScaleFactor[901] = 0.995849;
997 fSPDScaleFactor[992] = 0.999227;
998 fSPDScaleFactor[997] = 1.00575;
999 fSPDScaleFactor[1299] = 0.99877;
1000 fSPDScaleFactor[1303] = 0.999682;
1001 fSPDScaleFactor[1339] = 0.978198;
1002 fSPDScaleFactor[1346] = 0.964178;
1003 fSPDScaleFactor[1349] = 0.959439;
1004 fSPDScaleFactor[1350] = 0.956945;
1005 fSPDScaleFactor[1374] = 0.994434;
1006 fSPDScaleFactor[1545] = 1.0016;
1007 fSPDScaleFactor[1587] = 1.00153;
1008 fSPDScaleFactor[1588] = 1.00698;
1009 fSPDScaleFactor[1618] = 1.00554;
1010 fSPDScaleFactor[1682] = 1.0123;
1011 fSPDScaleFactor[1727] = 1.011;
1012 fSPDScaleFactor[1728] = 1.00143;
1013 fSPDScaleFactor[1731] = 1.00486;
1014 fSPDScaleFactor[1732] = 1.00646;
1015 fSPDScaleFactor[1770] = 1.00515;
1016 fSPDScaleFactor[1773] = 1.00485;
1017 fSPDScaleFactor[1786] = 1.01215;
1018 fSPDScaleFactor[1787] = 1.00419;
1019 fSPDScaleFactor[1801] = 0.983327;
1020 fSPDScaleFactor[1802] = 1.00529;
1021 fSPDScaleFactor[1811] = 1.00367;
1022 fSPDScaleFactor[1815] = 1.01045;
1023 fSPDScaleFactor[1879] = 0.996374;
1024 fSPDScaleFactor[1881] = 0.988827;
1025 fSPDScaleFactor[2186] = 1.00354;
1026 fSPDScaleFactor[2187] = 1.00397;
1027 fSPDScaleFactor[2254] = 1.01138;
1028 fSPDScaleFactor[2256] = 0.996641;
1029 fSPDScaleFactor[2321] = 1.00357;
1030 fTPCScaleFactor[310] = 1.00434;
1031 fTPCScaleFactor[311] = 1.0056;
1032 fTPCScaleFactor[514] = 1.02185;
1033 fTPCScaleFactor[515] = 1.0036;
1034 fTPCScaleFactor[579] = 1.00607;
1035 fTPCScaleFactor[580] = 1.00183;
1036 fTPCScaleFactor[581] = 1.00693;
1037 fTPCScaleFactor[583] = 1.00746;
1038 fTPCScaleFactor[588] = 0.990524;
1039 fTPCScaleFactor[589] = 0.998582;
1040 fTPCScaleFactor[590] = 1.00618;
1041 fTPCScaleFactor[592] = 1.00088;
1042 fTPCScaleFactor[688] = 1.00598;
1043 fTPCScaleFactor[690] = 1.00658;
1044 fTPCScaleFactor[693] = 1.00144;
1045 fTPCScaleFactor[698] = 1.00279;
1046 fTPCScaleFactor[744] = 1.00122;
1047 fTPCScaleFactor[757] = 1.002;
1048 fTPCScaleFactor[787] = 0.997818;
1049 fTPCScaleFactor[788] = 0.994583;
1050 fTPCScaleFactor[834] = 1.01508;
1051 fTPCScaleFactor[835] = 1.00218;
1052 fTPCScaleFactor[840] = 1.00569;
1053 fTPCScaleFactor[842] = 1.01789;
1054 fTPCScaleFactor[900] = 1.00739;
1055 fTPCScaleFactor[901] = 1.00462;
1056 fTPCScaleFactor[992] = 1.00502;
1057 fTPCScaleFactor[997] = 1.00943;
1058 fTPCScaleFactor[1299] = 1.00438;
1059 fTPCScaleFactor[1303] = 0.996701;
1060 fTPCScaleFactor[1339] = 0.978641;
1061 fTPCScaleFactor[1346] = 0.968906;
1062 fTPCScaleFactor[1349] = 0.954311;
1063 fTPCScaleFactor[1350] = 0.958764;
1064 fTPCScaleFactor[1374] = 0.997899;
1065 fTPCScaleFactor[1545] = 0.992;
1066 fTPCScaleFactor[1587] = 0.992635;
1067 fTPCScaleFactor[1588] = 1.00207;
1068 fTPCScaleFactor[1618] = 1.00126;
1069 fTPCScaleFactor[1682] = 1.00324;
1070 fTPCScaleFactor[1727] = 1.00042;
1071 fTPCScaleFactor[1728] = 0.978881;
1072 fTPCScaleFactor[1731] = 0.999818;
1073 fTPCScaleFactor[1732] = 1.00109;
1074 fTPCScaleFactor[1770] = 0.99935;
1075 fTPCScaleFactor[1773] = 0.998531;
1076 fTPCScaleFactor[1786] = 0.999125;
1077 fTPCScaleFactor[1787] = 0.998479;
1078 fTPCScaleFactor[1801] = 0.9775;
1079 fTPCScaleFactor[1802] = 0.999095;
1080 fTPCScaleFactor[1811] = 0.998197;
1081 fTPCScaleFactor[1815] = 1.00413;
1082 fTPCScaleFactor[1879] = 0.990916;
1083 fTPCScaleFactor[1881] = 0.987241;
1084 fTPCScaleFactor[2186] = 1.00048;
1085 fTPCScaleFactor[2187] = 1.00057;
1086 fTPCScaleFactor[2254] = 1.00588;
1087 fTPCScaleFactor[2256] = 0.991503;
1088 fTPCScaleFactor[2321] = 1.00057;
1091 // set all missing values to the value of the run before it ....
1092 for (int i=0; i<=(fHighRunN-fLowRunN); i++) {
1093 if (fV0MScaleFactor[i] == 0.0) {
1095 fV0MScaleFactor[i] = 1.00;
1097 // search for last run number with non-zero value
1098 for (int j=i-1;j>=0;j--) {
1099 if (fV0MScaleFactor[j] != 0.0) {
1100 fV0MScaleFactor[i] = fV0MScaleFactor[j];
1106 } // end loop over checking all run-numbers
1108 for (int i=0; i<=(fHighRunN-fLowRunN); i++) {
1109 if (fSPDScaleFactor[i] == 0.0) {
1111 fSPDScaleFactor[i] = 1.00;
1113 for (int j=i-1;j>=0;j--) {
1114 if (fSPDScaleFactor[j] != 0.0) {
1115 fSPDScaleFactor[i] = fSPDScaleFactor[j];
1123 for (int i=0; i<=(fHighRunN-fLowRunN); i++) {
1124 if (fTPCScaleFactor[i] == 0.0) {
1126 fTPCScaleFactor[i] = 1.00;
1128 for (int j=i-1;j>=0;j--) {
1129 if (fTPCScaleFactor[j] != 0.0) {
1130 fTPCScaleFactor[i] = fTPCScaleFactor[j];
1139 // for (int i=0; i<=(fHighRunN-fLowRunN); i++) cout << "Scale Factor = " << fV0MScaleFactor[i] << " for Run " << i+fLowRunN << endl;
1146 //________________________________________________________________________
1147 void AliCentralitySelectionTask::MyInitScaleFactorMC()
1149 // Initialize the MC scaling factors
1150 for (int i=0; i<(fHighRunN-fLowRunN); i++) fV0MScaleFactorMC[i] = 0.0;
1151 // scale factors determined from <V0 charge> on a run-by-run basis
1154 fV0MScaleFactorMC[0] = 0.75108;
1157 fV0MScaleFactorMC[0] = 0.8;
1160 AliError(Form("Unknown reconstruction pass (%d)! Setting MC scale in V0 to 1", fPass));
1161 fV0MScaleFactorMC[0] = 1.0;
1165 // set all missing values to the value of the run before it ....
1166 for (int i=0; i<=(fHighRunN-fLowRunN); i++) {
1167 if (fV0MScaleFactorMC[i] == 0.0) {
1169 fV0MScaleFactorMC[i] = 1.00;
1171 // search for last run number with non-zero value
1172 for (int j=i-1;j>=0;j--) {
1173 if (fV0MScaleFactorMC[j] != 0.0) {
1174 fV0MScaleFactorMC[i] = fV0MScaleFactorMC[j];
1180 } // end loop over checking all run-numbers
1183 // for (int i=0; i<=(fHighRunN-fLowRunN); i++) cout << "Scale Factor = " << fV0MScaleFactorMC[i] << " for Run " << i+fLowRunN << endl;