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", 10,-0.5,9.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
485 AliCentrality *esdCent = 0;
487 if(fAnalysisInput.CompareTo("ESD")==0){
489 AliVEvent* event = InputEvent();
490 AliESDEvent* esd = dynamic_cast<AliESDEvent*>(event);
492 AliError("No ESD Event");
499 if (SetupRun(esd)<0) {
500 AliError("Centrality File not available for this run");
505 esdCent = esd->GetCentrality();
508 AliESDVZERO* esdV0 = esd->GetVZEROData();
509 multV0A=esdV0->GetMTotV0A();
510 multV0C=esdV0->GetMTotV0C();
513 v0Corr = (Short_t)AliESDUtils::GetCorrV0(esd,v0CorrR);
514 v0CorrResc = (Short_t)v0CorrR;
517 const AliESDVertex* vtxESD = esd->GetPrimaryVertexSPD();
518 zvtx = vtxESD->GetZ();
520 // ***** CB info (tracklets, clusters, chips)
521 //nTracks = event->GetNumberOfTracks();
522 nTracks = fTrackCuts ? (Short_t)fTrackCuts->GetReferenceMultiplicity(esd,kTRUE):-1;
524 const AliMultiplicity *mult = esd->GetMultiplicity();
526 nTracklets = mult->GetNumberOfTracklets();
528 for(Int_t ilay=0; ilay<6; ilay++){
529 nClusters[ilay] = mult->GetNumberOfITSClusters(ilay);
532 for(Int_t ilay=0; ilay<2; ilay++){
533 nChips[ilay] = mult->GetNumberOfFiredChips(ilay);
536 spdCorr = AliESDUtils::GetCorrSPD2(nClusters[1],zvtx);
539 AliESDFMD *fmd = esd->GetFMDData();
540 Float_t totalMultA = 0;
541 Float_t totalMultC = 0;
542 const Float_t fFMDLowCut = 0.4;
544 for(UShort_t det=1;det<=3;det++) {
545 Int_t nRings = (det==1 ? 1 : 2);
546 for (UShort_t ir = 0; ir < nRings; ir++) {
547 Char_t ring = (ir == 0 ? 'I' : 'O');
548 UShort_t nsec = (ir == 0 ? 20 : 40);
549 UShort_t nstr = (ir == 0 ? 512 : 256);
550 for(UShort_t sec =0; sec < nsec; sec++) {
551 for(UShort_t strip = 0; strip < nstr; strip++) {
553 Float_t fmdMult = fmd->Multiplicity(det,ring,sec,strip);
554 if(fmdMult == 0 || fmdMult == AliESDFMD::kInvalidMult) continue;
556 Float_t nParticles=0;
558 if(fmdMult > fFMDLowCut) {
562 if (det<3) totalMultA = totalMultA + nParticles;
563 else totalMultC = totalMultC + nParticles;
569 multFMDA = totalMultA;
570 multFMDC = totalMultC;
573 AliESDZDC *esdZDC = esd->GetESDZDC();
574 zdcEnergyCal = esdZDC->AliESDZDC::TestBit(AliESDZDC::kEnergyCalibratedSignal);
576 zncEnergy = (Float_t) (esdZDC->GetZDCN1Energy());
577 zpcEnergy = (Float_t) (esdZDC->GetZDCP1Energy());
578 znaEnergy = (Float_t) (esdZDC->GetZDCN2Energy());
579 zpaEnergy = (Float_t) (esdZDC->GetZDCP2Energy());
581 zncEnergy = (Float_t) (esdZDC->GetZDCN1Energy())/8.;
582 zpcEnergy = (Float_t) (esdZDC->GetZDCP1Energy())/8.;
583 znaEnergy = (Float_t) (esdZDC->GetZDCN2Energy())/8.;
584 zpaEnergy = (Float_t) (esdZDC->GetZDCP2Energy())/8.;
586 zem1Energy = (Float_t) (esdZDC->GetZDCEMEnergy(0))/8.;
587 zem2Energy = (Float_t) (esdZDC->GetZDCEMEnergy(1))/8.;
591 else if(fAnalysisInput.CompareTo("AOD")==0){
592 //AliAODEvent *aod = dynamic_cast<AliAODEvent*> (InputEvent());
594 printf(" AOD analysis not yet implemented!!!\n\n");
599 // ***** Scaling for pass2
603 // ***** Scaling for MC
607 Float_t tempScalefactorV0M = MyGetScaleFactorMC(fCurrentRun);
608 v0Corr = Short_t((multV0A+multV0C) * tempScalefactorV0M);
610 // ***** Scaling for Data
612 Float_t tempScalefactorV0M = MyGetScaleFactor(fCurrentRun,0);
613 Float_t tempScalefactorSPD = MyGetScaleFactor(fCurrentRun,1);
614 Float_t tempScalefactorTPC = MyGetScaleFactor(fCurrentRun,2);
615 v0Corr = Short_t(v0Corr / tempScalefactorV0M);
616 spdCorr = spdCorr / tempScalefactorSPD;
617 nTracks = Int_t(nTracks / tempScalefactorTPC);
620 // ***** Centrality Selection
621 if(fHtempV0M) fCentV0M = fHtempV0M->GetBinContent(fHtempV0M->FindBin((v0Corr)));
622 if(fHtempFMD) fCentFMD = fHtempFMD->GetBinContent(fHtempFMD->FindBin((multFMDA+multFMDC)));
623 if(fHtempTRK) fCentTRK = fHtempTRK->GetBinContent(fHtempTRK->FindBin(nTracks));
624 if(fHtempTKL) fCentTKL = fHtempTKL->GetBinContent(fHtempTKL->FindBin(nTracklets));
625 if(fHtempCL0) fCentCL0 = fHtempCL0->GetBinContent(fHtempCL0->FindBin(nClusters[0]));
626 if(fHtempCL1) fCentCL1 = fHtempCL1->GetBinContent(fHtempCL1->FindBin(spdCorr));
628 if(fHtempV0MvsFMD) fCentV0MvsFMD = fHtempV0MvsFMD->GetBinContent(fHtempV0MvsFMD->FindBin((multV0A+multV0C)));
629 if(fHtempTKLvsV0M) fCentTKLvsV0M = fHtempTKLvsV0M->GetBinContent(fHtempTKLvsV0M->FindBin(nTracklets));
630 if(fHtempZEMvsZDC) fCentZEMvsZDC = fHtempZEMvsZDC->GetBinContent(fHtempZEMvsZDC->FindBin(zem1Energy+zem2Energy,zncEnergy+znaEnergy+zpcEnergy+zpaEnergy));
639 if (TMath::Abs(zvtx)>fZVCut) fQuality += 1;
643 if (IsOutlierV0MSPD(spdCorr, v0Corr, int(fCentV0M))) fQuality += 2;
645 if (IsOutlierV0MTPC(nTracks, v0Corr, int(fCentV0M))) fQuality += 4;
647 if (IsOutlierV0MZDC((zncEnergy+znaEnergy+zpcEnergy+zpaEnergy), v0Corr) &&
648 (zdcEnergyCal==kFALSE) && !(fIsMCInput)) fQuality += 8;
649 if (IsOutlierV0MZDCECal((zncEnergy+znaEnergy+zpcEnergy+zpaEnergy), v0Corr) &&
650 ((zdcEnergyCal==kTRUE) || (fIsMCInput))) fQuality += 8;
657 esdCent->SetQuality(fQuality);
658 esdCent->SetCentralityV0M(fCentV0M);
659 esdCent->SetCentralityFMD(fCentFMD);
660 esdCent->SetCentralityTRK(fCentTRK);
661 esdCent->SetCentralityTKL(fCentTKL);
662 esdCent->SetCentralityCL0(fCentCL0);
663 esdCent->SetCentralityCL1(fCentCL1);
664 esdCent->SetCentralityV0MvsFMD(fCentV0MvsFMD);
665 esdCent->SetCentralityTKLvsV0M(fCentTKLvsV0M);
666 esdCent->SetCentralityZEMvsZDC(fCentZEMvsZDC);
669 fHOutQuality->Fill(fQuality);
670 fHOutVertex->Fill(zvtx);
672 fHOutMultV0MvsZDN->Fill(v0Corr,(zncEnergy+znaEnergy));
673 fHOutMultZEMvsZDN->Fill((zem1Energy+zem2Energy),(zncEnergy+znaEnergy));
674 fHOutMultV0MvsZDC->Fill(v0Corr,(zncEnergy+znaEnergy+zpcEnergy+zpaEnergy));
675 fHOutMultZEMvsZDC->Fill((zem1Energy+zem2Energy),(zncEnergy+znaEnergy+zpcEnergy+zpaEnergy));
676 fHOutMultV0MvsCL1->Fill(v0Corr,spdCorr);
677 fHOutMultV0MvsTRK->Fill(v0Corr,nTracks);
680 fHOutCentV0M->Fill(fCentV0M);
681 fHOutCentFMD->Fill(fCentFMD);
682 fHOutCentTRK->Fill(fCentTRK);
683 fHOutCentTKL->Fill(fCentTKL);
684 fHOutCentCL0->Fill(fCentCL0);
685 fHOutCentCL1->Fill(fCentCL1);
686 fHOutCentV0MvsFMD->Fill(fCentV0MvsFMD);
687 fHOutCentTKLvsV0M->Fill(fCentTKLvsV0M);
688 fHOutCentZEMvsZDC->Fill(fCentZEMvsZDC);
689 fHOutCentV0MvsCentCL1->Fill(fCentV0M,fCentCL1);
690 fHOutCentV0MvsCentTRK->Fill(fCentV0M,fCentTRK);
691 fHOutCentTRKvsCentCL1->Fill(fCentTRK,fCentCL1);
692 fHOutCentV0MvsCentCL1->Fill(fCentV0M,fCentZEMvsZDC);
693 fHOutMultV0M->Fill(v0Corr);
694 fHOutMultV0R->Fill(multV0A+multV0C);
695 fHOutMultFMD->Fill((multFMDA+multFMDC));
696 fHOutMultTRK->Fill(nTracks);
697 fHOutMultTKL->Fill(nTracklets);
698 fHOutMultCL0->Fill(nClusters[0]);
699 fHOutMultCL1->Fill(spdCorr);
700 fHOutMultTRKvsCL1->Fill(nTracks,spdCorr);
701 } else if (fQuality ==1) {
702 fHOutCentV0Mqual1->Fill(fCentV0M);
703 fHOutCentTRKqual1->Fill(fCentTRK);
704 fHOutCentCL1qual1->Fill(fCentCL1);
706 fHOutCentV0Mqual2->Fill(fCentV0M);
707 fHOutCentTRKqual2->Fill(fCentTRK);
708 fHOutCentCL1qual2->Fill(fCentCL1);
711 PostData(1, fOutputList);
714 //________________________________________________________________________
715 void AliCentralitySelectionTask::ReadCentralityHistos(TString fCentfilename)
717 // Read centrality histograms
718 TDirectory *owd = gDirectory;
719 // Check if the file is present
720 TString path = gSystem->ExpandPathName(fCentfilename.Data());
721 if (gSystem->AccessPathName(path)) {
722 AliError(Form("File %s does not exist", path.Data()));
725 fFile = TFile::Open(fCentfilename);
727 fHtempV0M = (TH1F*) (fFile->Get("hmultV0_percentile"));
728 fHtempFMD = (TH1F*) (fFile->Get("hmultFMD_percentile"));
729 fHtempTRK = (TH1F*) (fFile->Get("hNtracks_percentile"));
730 fHtempTKL = (TH1F*) (fFile->Get("hNtracklets_percentile"));
731 fHtempCL0 = (TH1F*) (fFile->Get("hNclusters0_percentile"));
732 fHtempCL1 = (TH1F*) (fFile->Get("hNclusters1_percentile"));
734 if (!fHtempV0M) AliWarning(Form("Calibration for V0M does not exist in %s", path.Data()));
735 if (!fHtempFMD) AliWarning(Form("Calibration for FMD does not exist in %s", path.Data()));
736 if (!fHtempTRK) AliWarning(Form("Calibration for TRK does not exist in %s", path.Data()));
737 if (!fHtempTKL) AliWarning(Form("Calibration for TKL does not exist in %s", path.Data()));
738 if (!fHtempCL0) AliWarning(Form("Calibration for CL0 does not exist in %s", path.Data()));
739 if (!fHtempCL1) AliWarning(Form("Calibration for CL1 does not exist in %s", path.Data()));
744 //________________________________________________________________________
745 void AliCentralitySelectionTask::ReadCentralityHistos2(TString fCentfilename2)
747 // Read centrality histograms
748 TDirectory *owd = gDirectory;
749 TString path = gSystem->ExpandPathName(fCentfilename2.Data());
750 if (gSystem->AccessPathName(path)) {
751 AliError(Form("File %s does not exist", path.Data()));
754 fFile2 = TFile::Open(fCentfilename2);
756 fHtempV0MvsFMD = (TH1F*) (fFile2->Get("hmultV0vsmultFMD_all_percentile"));
757 fHtempTKLvsV0M = (TH1F*) (fFile2->Get("hNtrackletsvsmultV0_all_percentile"));
758 fHtempZEMvsZDC = (TH2F*) (fFile2->Get("hEzemvsEzdc_all_percentile"));
760 if (!fHtempV0MvsFMD) AliWarning(Form("Calibration for V0MvsFMD does not exist in %s", path.Data()));
761 if (!fHtempTKLvsV0M) AliWarning(Form("Calibration for TKLvsV0M does not exist in %s", path.Data()));
762 if (!fHtempZEMvsZDC) AliWarning(Form("Calibration for ZEMvsZDC does not exist in %s", path.Data()));
767 //________________________________________________________________________
768 void AliCentralitySelectionTask::Terminate(Option_t */*option*/)
770 // Terminate analysis
771 if (fFile && fFile->IsOpen())
773 if (fFile2 && fFile2->IsOpen())
776 //________________________________________________________________________
777 Int_t AliCentralitySelectionTask::SetupRun(AliESDEvent* const esd)
779 // Setup files for run
784 // check if something to be done
785 if (fCurrentRun == esd->GetRunNumber())
788 fCurrentRun = esd->GetRunNumber();
790 AliInfo(Form("Setup Centrality Selection for run %d\n",fCurrentRun));
792 // CHANGE HERE FOR RUN RANGES
795 if ( fCurrentRun <= 137165 ) fRunNo = 137161;
796 else fRunNo = 137366;
799 if ( fCurrentRun >= 136851 && fCurrentRun <= 137165 ) fRunNo = 137161;
800 else if ( ( fCurrentRun >= 137230 && fCurrentRun <= 137848 ) ||
801 ( fCurrentRun >= 138190 && fCurrentRun <= 138275 )) fRunNo = 137722;
802 else if ( fCurrentRun >= 138125 && fCurrentRun <= 138154 ) fRunNo = 138150;
803 else fRunNo = 139172;
806 AliError(Form("Run %d not known to centrality selection!", fCurrentRun));
809 TString fileName =(Form("%s/COMMON/CENTRALITY/data/pass%d/AliCentralityBy1D_%d.root", AliAnalysisManager::GetOADBPath(), fPass, fRunNo));
810 TString fileName2=(Form("%s/COMMON/CENTRALITY/data/pass%d/AliCentralityByFunction_%d.root", AliAnalysisManager::GetOADBPath(), fPass, fRunNo));
812 AliInfo(Form("Centrality Selection for run %d and pass %d is initialized with %s", fCurrentRun, fPass, fileName.Data()));
813 ReadCentralityHistos(fileName.Data());
814 ReadCentralityHistos2(fileName2.Data());
815 if (!fFile && !fFile2) {
816 AliError(Form("Run %d not known to centrality selection!", fCurrentRun));
822 //________________________________________________________________________
823 Bool_t AliCentralitySelectionTask::IsOutlierV0MSPD(Float_t spd, Float_t v0, Int_t cent) const
826 Float_t val= -0.579579 + 0.273949 * v0;
827 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};
829 if ( TMath::Abs(spd-val) > fOutliersCut*spdSigma[cent] )
835 //________________________________________________________________________
836 Bool_t AliCentralitySelectionTask::IsOutlierV0MTPC(Int_t tracks, Float_t v0, Int_t cent) const
839 Float_t val = -1.03873 + 0.125691 * v0;
840 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};
842 if ( TMath::Abs(tracks-val) > fOutliersCut*tpcSigma[cent] )
848 //________________________________________________________________________
849 Bool_t AliCentralitySelectionTask::IsOutlierV0MZDC(Float_t zdc, Float_t v0) const
852 Float_t val = 235000. - 9.5 * v0;
859 //________________________________________________________________________
860 Bool_t AliCentralitySelectionTask::IsOutlierV0MZDCECal(Float_t /*zdc*/, Float_t /*v0*/) const
866 //________________________________________________________________________
867 Float_t AliCentralitySelectionTask::MyGetScaleFactor(Int_t runnumber, Int_t flag) const
869 // Get scaling factor
870 if (! (runnumber >= fLowRunN && runnumber <=fHighRunN)) {
871 cout << "MyGetScaleFactor error in run number range " << runnumber << endl;
875 Float_t scalefactor=0.0;
877 scalefactor = fV0MScaleFactor[runnumber - fLowRunN]; // subtracting reference offset index
879 scalefactor = fSPDScaleFactor[runnumber - fLowRunN]; // subtracting reference offset index
881 scalefactor = fTPCScaleFactor[runnumber - fLowRunN]; // subtracting reference offset index
887 //________________________________________________________________________
888 Float_t AliCentralitySelectionTask::MyGetScaleFactorMC(Int_t runnumber) const
890 // Get MC scaling factor
891 if (! (runnumber >= fLowRunN && runnumber <=fHighRunN)) {
892 cout << "MyGetScaleFactor error in run number range " << runnumber << endl;
896 Float_t scalefactor= fV0MScaleFactorMC[runnumber - fLowRunN]; // subtracting reference offset index
901 //________________________________________________________________________
902 void AliCentralitySelectionTask::MyInitScaleFactor ()
904 // Initialize the scaling factors
905 for (int i=0; i<=(fHighRunN-fLowRunN); i++) fV0MScaleFactor[i] = 0.0;
906 for (int i=0; i<=(fHighRunN-fLowRunN); i++) fSPDScaleFactor[i] = 0.0;
907 for (int i=0; i<=(fHighRunN-fLowRunN); i++) fTPCScaleFactor[i] = 0.0;
909 // scale factors determined from <V0 charge> on a run-by-run basis
910 fV0MScaleFactor[310] = 1.;
911 fV0MScaleFactor[311] = 1.;
912 fV0MScaleFactor[514] = 1.0046;
913 fV0MScaleFactor[515] = 0.983535;
914 fV0MScaleFactor[579] = 0.988185;
915 fV0MScaleFactor[580] = 0.983351;
916 fV0MScaleFactor[581] = 0.989013;
917 fV0MScaleFactor[583] = 0.990056;
918 fV0MScaleFactor[588] = 0.974438;
919 fV0MScaleFactor[589] = 0.981572;
920 fV0MScaleFactor[590] = 0.989316;
921 fV0MScaleFactor[592] = 0.98345;
922 fV0MScaleFactor[688] = 0.993647;
923 fV0MScaleFactor[690] = 0.994758;
924 fV0MScaleFactor[693] = 0.989569;
925 fV0MScaleFactor[698] = 0.993119;
926 fV0MScaleFactor[744] = 0.989583;
927 fV0MScaleFactor[757] = 0.990377;
928 fV0MScaleFactor[787] = 0.990176;
929 fV0MScaleFactor[788] = 0.98723;
930 fV0MScaleFactor[834] = 1.00403;
931 fV0MScaleFactor[835] = 0.994376;
932 fV0MScaleFactor[840] = 0.99759;
933 fV0MScaleFactor[842] = 1.01031;
934 fV0MScaleFactor[900] = 0.996216;
935 fV0MScaleFactor[901] = 0.994205;
936 fV0MScaleFactor[992] = 0.998479;
937 fV0MScaleFactor[997] = 1.00078;
938 fV0MScaleFactor[1299] = 1.00515;
939 fV0MScaleFactor[1303] = 1.00094;
940 fV0MScaleFactor[1339] = 0.986596;
941 fV0MScaleFactor[1346] = 0.972226;
942 fV0MScaleFactor[1349] = 0.960358;
943 fV0MScaleFactor[1350] = 0.970023;
944 fV0MScaleFactor[1374] = 1.00575;
945 fV0MScaleFactor[1545] = 1.00471;
946 fV0MScaleFactor[1587] = 1.00611;
947 fV0MScaleFactor[1588] = 1.00976;
948 fV0MScaleFactor[1618] = 1.00771;
949 fV0MScaleFactor[1682] = 1.01622;
950 fV0MScaleFactor[1727] = 1.01305;
951 fV0MScaleFactor[1728] = 1.00388;
952 fV0MScaleFactor[1731] = 1.00673;
953 fV0MScaleFactor[1732] = 1.00916;
954 fV0MScaleFactor[1770] = 1.0092;
955 fV0MScaleFactor[1773] = 1.00728;
956 fV0MScaleFactor[1786] = 1.01655;
957 fV0MScaleFactor[1787] = 1.00672;
958 fV0MScaleFactor[1801] = 0.983339;
959 fV0MScaleFactor[1802] = 1.00754;
960 fV0MScaleFactor[1811] = 1.00608;
961 fV0MScaleFactor[1815] = 1.01227;
962 fV0MScaleFactor[1879] = 0.99907;
963 fV0MScaleFactor[1881] = 0.995696;
964 fV0MScaleFactor[2186] = 1.00559;
965 fV0MScaleFactor[2187] = 1.00631;
966 fV0MScaleFactor[2254] = 1.01512;
967 fV0MScaleFactor[2256] = 0.998727;
968 fV0MScaleFactor[2321] = 1.00701;
969 fSPDScaleFactor[310] = 1.00211;
970 fSPDScaleFactor[311] = 1.00067;
971 fSPDScaleFactor[514] = 1.02268;
972 fSPDScaleFactor[515] = 0.994902;
973 fSPDScaleFactor[579] = 1.00215;
974 fSPDScaleFactor[580] = 0.993421;
975 fSPDScaleFactor[581] = 1.00129;
976 fSPDScaleFactor[583] = 1.00242;
977 fSPDScaleFactor[588] = 0.984762;
978 fSPDScaleFactor[589] = 0.994355;
979 fSPDScaleFactor[590] = 1.00073;
980 fSPDScaleFactor[592] = 0.995889;
981 fSPDScaleFactor[688] = 0.994532;
982 fSPDScaleFactor[690] = 0.998307;
983 fSPDScaleFactor[693] = 0.994052;
984 fSPDScaleFactor[698] = 0.993224;
985 fSPDScaleFactor[744] = 0.993279;
986 fSPDScaleFactor[757] = 0.992494;
987 fSPDScaleFactor[787] = 0.992678;
988 fSPDScaleFactor[788] = 0.996563;
989 fSPDScaleFactor[834] = 1.01116;
990 fSPDScaleFactor[835] = 0.993108;
991 fSPDScaleFactor[840] = 0.997574;
992 fSPDScaleFactor[842] = 1.01829;
993 fSPDScaleFactor[900] = 0.999438;
994 fSPDScaleFactor[901] = 0.995849;
995 fSPDScaleFactor[992] = 0.999227;
996 fSPDScaleFactor[997] = 1.00575;
997 fSPDScaleFactor[1299] = 0.99877;
998 fSPDScaleFactor[1303] = 0.999682;
999 fSPDScaleFactor[1339] = 0.978198;
1000 fSPDScaleFactor[1346] = 0.964178;
1001 fSPDScaleFactor[1349] = 0.959439;
1002 fSPDScaleFactor[1350] = 0.956945;
1003 fSPDScaleFactor[1374] = 0.994434;
1004 fSPDScaleFactor[1545] = 1.0016;
1005 fSPDScaleFactor[1587] = 1.00153;
1006 fSPDScaleFactor[1588] = 1.00698;
1007 fSPDScaleFactor[1618] = 1.00554;
1008 fSPDScaleFactor[1682] = 1.0123;
1009 fSPDScaleFactor[1727] = 1.011;
1010 fSPDScaleFactor[1728] = 1.00143;
1011 fSPDScaleFactor[1731] = 1.00486;
1012 fSPDScaleFactor[1732] = 1.00646;
1013 fSPDScaleFactor[1770] = 1.00515;
1014 fSPDScaleFactor[1773] = 1.00485;
1015 fSPDScaleFactor[1786] = 1.01215;
1016 fSPDScaleFactor[1787] = 1.00419;
1017 fSPDScaleFactor[1801] = 0.983327;
1018 fSPDScaleFactor[1802] = 1.00529;
1019 fSPDScaleFactor[1811] = 1.00367;
1020 fSPDScaleFactor[1815] = 1.01045;
1021 fSPDScaleFactor[1879] = 0.996374;
1022 fSPDScaleFactor[1881] = 0.988827;
1023 fSPDScaleFactor[2186] = 1.00354;
1024 fSPDScaleFactor[2187] = 1.00397;
1025 fSPDScaleFactor[2254] = 1.01138;
1026 fSPDScaleFactor[2256] = 0.996641;
1027 fSPDScaleFactor[2321] = 1.00357;
1028 fTPCScaleFactor[310] = 1.00434;
1029 fTPCScaleFactor[311] = 1.0056;
1030 fTPCScaleFactor[514] = 1.02185;
1031 fTPCScaleFactor[515] = 1.0036;
1032 fTPCScaleFactor[579] = 1.00607;
1033 fTPCScaleFactor[580] = 1.00183;
1034 fTPCScaleFactor[581] = 1.00693;
1035 fTPCScaleFactor[583] = 1.00746;
1036 fTPCScaleFactor[588] = 0.990524;
1037 fTPCScaleFactor[589] = 0.998582;
1038 fTPCScaleFactor[590] = 1.00618;
1039 fTPCScaleFactor[592] = 1.00088;
1040 fTPCScaleFactor[688] = 1.00598;
1041 fTPCScaleFactor[690] = 1.00658;
1042 fTPCScaleFactor[693] = 1.00144;
1043 fTPCScaleFactor[698] = 1.00279;
1044 fTPCScaleFactor[744] = 1.00122;
1045 fTPCScaleFactor[757] = 1.002;
1046 fTPCScaleFactor[787] = 0.997818;
1047 fTPCScaleFactor[788] = 0.994583;
1048 fTPCScaleFactor[834] = 1.01508;
1049 fTPCScaleFactor[835] = 1.00218;
1050 fTPCScaleFactor[840] = 1.00569;
1051 fTPCScaleFactor[842] = 1.01789;
1052 fTPCScaleFactor[900] = 1.00739;
1053 fTPCScaleFactor[901] = 1.00462;
1054 fTPCScaleFactor[992] = 1.00502;
1055 fTPCScaleFactor[997] = 1.00943;
1056 fTPCScaleFactor[1299] = 1.00438;
1057 fTPCScaleFactor[1303] = 0.996701;
1058 fTPCScaleFactor[1339] = 0.978641;
1059 fTPCScaleFactor[1346] = 0.968906;
1060 fTPCScaleFactor[1349] = 0.954311;
1061 fTPCScaleFactor[1350] = 0.958764;
1062 fTPCScaleFactor[1374] = 0.997899;
1063 fTPCScaleFactor[1545] = 0.992;
1064 fTPCScaleFactor[1587] = 0.992635;
1065 fTPCScaleFactor[1588] = 1.00207;
1066 fTPCScaleFactor[1618] = 1.00126;
1067 fTPCScaleFactor[1682] = 1.00324;
1068 fTPCScaleFactor[1727] = 1.00042;
1069 fTPCScaleFactor[1728] = 0.978881;
1070 fTPCScaleFactor[1731] = 0.999818;
1071 fTPCScaleFactor[1732] = 1.00109;
1072 fTPCScaleFactor[1770] = 0.99935;
1073 fTPCScaleFactor[1773] = 0.998531;
1074 fTPCScaleFactor[1786] = 0.999125;
1075 fTPCScaleFactor[1787] = 0.998479;
1076 fTPCScaleFactor[1801] = 0.9775;
1077 fTPCScaleFactor[1802] = 0.999095;
1078 fTPCScaleFactor[1811] = 0.998197;
1079 fTPCScaleFactor[1815] = 1.00413;
1080 fTPCScaleFactor[1879] = 0.990916;
1081 fTPCScaleFactor[1881] = 0.987241;
1082 fTPCScaleFactor[2186] = 1.00048;
1083 fTPCScaleFactor[2187] = 1.00057;
1084 fTPCScaleFactor[2254] = 1.00588;
1085 fTPCScaleFactor[2256] = 0.991503;
1086 fTPCScaleFactor[2321] = 1.00057;
1089 // set all missing values to the value of the run before it ....
1090 for (int i=0; i<=(fHighRunN-fLowRunN); i++) {
1091 if (fV0MScaleFactor[i] == 0.0) {
1093 fV0MScaleFactor[i] = 1.00;
1095 // search for last run number with non-zero value
1096 for (int j=i-1;j>=0;j--) {
1097 if (fV0MScaleFactor[j] != 0.0) {
1098 fV0MScaleFactor[i] = fV0MScaleFactor[j];
1104 } // end loop over checking all run-numbers
1106 for (int i=0; i<=(fHighRunN-fLowRunN); i++) {
1107 if (fSPDScaleFactor[i] == 0.0) {
1109 fSPDScaleFactor[i] = 1.00;
1111 for (int j=i-1;j>=0;j--) {
1112 if (fSPDScaleFactor[j] != 0.0) {
1113 fSPDScaleFactor[i] = fSPDScaleFactor[j];
1121 for (int i=0; i<=(fHighRunN-fLowRunN); i++) {
1122 if (fTPCScaleFactor[i] == 0.0) {
1124 fTPCScaleFactor[i] = 1.00;
1126 for (int j=i-1;j>=0;j--) {
1127 if (fTPCScaleFactor[j] != 0.0) {
1128 fTPCScaleFactor[i] = fTPCScaleFactor[j];
1137 // for (int i=0; i<=(fHighRunN-fLowRunN); i++) cout << "Scale Factor = " << fV0MScaleFactor[i] << " for Run " << i+fLowRunN << endl;
1144 //________________________________________________________________________
1145 void AliCentralitySelectionTask::MyInitScaleFactorMC()
1147 // Initialize the MC scaling factors
1148 for (int i=0; i<(fHighRunN-fLowRunN); i++) fV0MScaleFactorMC[i] = 0.0;
1149 // scale factors determined from <V0 charge> on a run-by-run basis
1152 fV0MScaleFactorMC[0] = 0.75108;
1155 fV0MScaleFactorMC[0] = 0.8;
1158 AliError(Form("Unknown reconstruction pass (%d)! Setting MC scale in V0 to 1", fPass));
1159 fV0MScaleFactorMC[0] = 1.0;
1163 // set all missing values to the value of the run before it ....
1164 for (int i=0; i<=(fHighRunN-fLowRunN); i++) {
1165 if (fV0MScaleFactorMC[i] == 0.0) {
1167 fV0MScaleFactorMC[i] = 1.00;
1169 // search for last run number with non-zero value
1170 for (int j=i-1;j>=0;j--) {
1171 if (fV0MScaleFactorMC[j] != 0.0) {
1172 fV0MScaleFactorMC[i] = fV0MScaleFactorMC[j];
1178 } // end loop over checking all run-numbers
1181 // for (int i=0; i<=(fHighRunN-fLowRunN); i++) cout << "Scale Factor = " << fV0MScaleFactorMC[i] << " for Run " << i+fLowRunN << endl;