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 fHOutMultV0MvsCL1qual1(0),
144 fHOutMultV0MvsTRKqual1(0),
145 fHOutMultTRKvsCL1qual1(0),
146 fHOutCentV0Mqual2(0),
147 fHOutCentTRKqual2(0),
148 fHOutCentCL1qual2(0),
149 fHOutMultV0MvsCL1qual2(0),
150 fHOutMultV0MvsTRKqual2(0),
151 fHOutMultTRKvsCL1qual2(0),
155 // Default constructor
156 AliInfo("Centrality Selection enabled.");
160 for (Int_t i=0; i < 2667; i++) {
161 fV0MScaleFactor[i]=0.0;
162 fSPDScaleFactor[i]=0.0;
163 fTPCScaleFactor[i]=0.0;
164 fV0MScaleFactorMC[i]=0.0;
168 fBranchNames="ESD:AliESDRun.,AliESDHeader.,AliESDZDC.,AliESDFMD.,AliESDVZERO."
169 ",SPDVertex.,TPCVertex.,PrimaryVertex.,AliMultiplicity.,Tracks ";
172 //________________________________________________________________________
173 AliCentralitySelectionTask::AliCentralitySelectionTask(const char *name):
174 AliAnalysisTaskSE(name),
175 fAnalysisInput("ESD"),
215 fHOutCentV0MvsFMD(0),
216 fHOutCentTKLvsV0M(0),
217 fHOutCentZEMvsZDC(0),
218 fHOutCentV0MvsCentCL1(0),
219 fHOutCentV0MvsCentTRK(0),
220 fHOutCentTRKvsCentCL1(0),
221 fHOutCentV0MvsCentZDC(0),
229 fHOutMultV0MvsZDN(0),
230 fHOutMultZEMvsZDN(0),
231 fHOutMultV0MvsZDC(0),
232 fHOutMultZEMvsZDC(0),
233 fHOutMultV0MvsCL1(0),
234 fHOutMultV0MvsTRK(0),
235 fHOutMultTRKvsCL1(0),
236 fHOutCentV0Mqual1(0),
237 fHOutCentTRKqual1(0),
238 fHOutCentCL1qual1(0),
239 fHOutMultV0MvsCL1qual1(0),
240 fHOutMultV0MvsTRKqual1(0),
241 fHOutMultTRKvsCL1qual1(0),
242 fHOutCentV0Mqual2(0),
243 fHOutCentTRKqual2(0),
244 fHOutCentCL1qual2(0),
245 fHOutMultV0MvsCL1qual2(0),
246 fHOutMultV0MvsTRKqual2(0),
247 fHOutMultTRKvsCL1qual2(0),
251 // Default constructor
255 AliInfo("Centrality Selection enabled.");
256 DefineOutput(1, TList::Class());
257 for (Int_t i=0; i<2667; i++) {
258 fV0MScaleFactor[i]=0.0;
259 fSPDScaleFactor[i]=0.0;
260 fTPCScaleFactor[i]=0.0;
261 fV0MScaleFactorMC[i]=0.0;
265 fBranchNames="ESD:AliESDRun.,AliESDHeader.,AliESDZDC.,AliESDFMD.,AliESDVZERO."
266 ",SPDVertex.,TPCVertex.,PrimaryVertex.,AliMultiplicity.,Tracks ";
269 //________________________________________________________________________
270 AliCentralitySelectionTask& AliCentralitySelectionTask::operator=(const AliCentralitySelectionTask& c)
272 // Assignment operator
274 AliAnalysisTaskSE::operator=(c);
279 //________________________________________________________________________
280 AliCentralitySelectionTask::AliCentralitySelectionTask(const AliCentralitySelectionTask& ana):
281 AliAnalysisTaskSE(ana),
282 fAnalysisInput(ana.fDebug),
283 fIsMCInput(ana.fIsMCInput),
287 fCurrentRun(ana.fCurrentRun),
289 fLowRunN(ana.fLowRunN),
290 fHighRunN(ana.fHighRunN),
291 fUseScaling(ana.fUseScaling),
292 fUseCleaning(ana.fUseCleaning),
293 fTrackCuts(ana.fTrackCuts),
295 fOutliersCut(ana.fOutliersCut),
296 fQuality(ana.fQuality),
297 fCentV0M(ana.fCentV0M),
298 fCentFMD(ana.fCentFMD),
299 fCentTRK(ana.fCentTRK),
300 fCentTKL(ana.fCentTKL),
301 fCentCL0(ana.fCentCL0),
302 fCentCL1(ana.fCentCL1),
303 fCentV0MvsFMD(ana.fCentV0MvsFMD),
304 fCentTKLvsV0M(ana.fCentTKLvsV0M),
305 fCentZEMvsZDC(ana.fCentZEMvsZDC),
306 fHtempV0M(ana.fHtempV0M),
307 fHtempFMD(ana.fHtempFMD),
308 fHtempTRK(ana.fHtempTRK),
309 fHtempTKL(ana.fHtempTKL),
310 fHtempCL0(ana.fHtempCL0),
311 fHtempCL1(ana.fHtempCL1),
312 fHtempV0MvsFMD(ana.fHtempV0MvsFMD),
313 fHtempTKLvsV0M(ana.fHtempTKLvsV0M),
314 fHtempZEMvsZDC(ana.fHtempZEMvsZDC),
315 fOutputList(ana.fOutputList),
316 fHOutCentV0M (ana.fHOutCentV0M ),
317 fHOutCentFMD (ana.fHOutCentFMD ),
318 fHOutCentTRK (ana.fHOutCentTRK ),
319 fHOutCentTKL (ana.fHOutCentTKL ),
320 fHOutCentCL0 (ana.fHOutCentCL0 ),
321 fHOutCentCL1 (ana.fHOutCentCL1 ),
322 fHOutCentV0MvsFMD(ana.fHOutCentV0MvsFMD),
323 fHOutCentTKLvsV0M(ana.fHOutCentTKLvsV0M),
324 fHOutCentZEMvsZDC(ana.fHOutCentZEMvsZDC),
325 fHOutCentV0MvsCentCL1(ana.fHOutCentV0MvsCentCL1),
326 fHOutCentV0MvsCentTRK(ana.fHOutCentV0MvsCentTRK),
327 fHOutCentTRKvsCentCL1(ana.fHOutCentTRKvsCentCL1),
328 fHOutCentV0MvsCentZDC(ana.fHOutCentV0MvsCentZDC),
329 fHOutMultV0M(ana.fHOutMultV0M),
330 fHOutMultV0R(ana.fHOutMultV0R),
331 fHOutMultFMD(ana.fHOutMultFMD),
332 fHOutMultTRK(ana.fHOutMultTRK),
333 fHOutMultTKL(ana.fHOutMultTKL),
334 fHOutMultCL0(ana.fHOutMultCL0),
335 fHOutMultCL1(ana.fHOutMultCL1),
336 fHOutMultV0MvsZDN(ana.fHOutMultV0MvsZDN),
337 fHOutMultZEMvsZDN(ana.fHOutMultZEMvsZDN),
338 fHOutMultV0MvsZDC(ana.fHOutMultV0MvsZDC),
339 fHOutMultZEMvsZDC(ana.fHOutMultZEMvsZDC),
340 fHOutMultV0MvsCL1(ana.fHOutMultV0MvsCL1),
341 fHOutMultV0MvsTRK(ana.fHOutMultV0MvsTRK),
342 fHOutMultTRKvsCL1(ana.fHOutMultTRKvsCL1),
343 fHOutCentV0Mqual1(ana.fHOutCentV0Mqual1),
344 fHOutCentTRKqual1(ana.fHOutCentTRKqual1),
345 fHOutCentCL1qual1(ana.fHOutCentCL1qual1),
346 fHOutMultV0MvsCL1qual1(ana.fHOutMultV0MvsCL1qual1),
347 fHOutMultV0MvsTRKqual1(ana.fHOutMultV0MvsTRKqual1),
348 fHOutMultTRKvsCL1qual1(ana.fHOutMultTRKvsCL1qual1),
349 fHOutCentV0Mqual2(ana.fHOutCentV0Mqual2),
350 fHOutCentTRKqual2(ana.fHOutCentTRKqual2),
351 fHOutCentCL1qual2(ana.fHOutCentCL1qual2),
352 fHOutMultV0MvsCL1qual2(ana.fHOutMultV0MvsCL1qual2),
353 fHOutMultV0MvsTRKqual2(ana.fHOutMultV0MvsTRKqual2),
354 fHOutMultTRKvsCL1qual2(ana.fHOutMultTRKvsCL1qual2),
355 fHOutQuality(ana.fHOutQuality),
356 fHOutVertex(ana.fHOutVertex)
359 for (Int_t i=0; i<2667; i++) {
360 fV0MScaleFactor[i]=0.0;
361 fSPDScaleFactor[i]=0.0;
362 fTPCScaleFactor[i]=0.0;
363 fV0MScaleFactorMC[i]=0.0;
368 //________________________________________________________________________
369 AliCentralitySelectionTask::~AliCentralitySelectionTask()
372 if (fOutputList && !AliAnalysisManager::GetAnalysisManager()->IsProofMode()) delete fOutputList;
373 if (fTrackCuts) delete fTrackCuts;
376 //________________________________________________________________________
377 void AliCentralitySelectionTask::UserCreateOutputObjects()
379 // Create the output containers
380 if(fDebug>1) printf("AnalysisCentralitySelectionTask::UserCreateOutputObjects() \n");
381 AliLog::SetClassDebugLevel("AliCentralitySelectionTask", AliLog::kInfo);
383 fOutputList = new TList();
384 fOutputList->SetOwner();
385 fHOutCentV0M = new TH1F("fHOutCentV0M","fHOutCentV0M; Centrality V0",505,0,101);
386 fHOutCentFMD = new TH1F("fHOutCentFMD","fHOutCentFMD; Centrality FMD",505,0,101);
387 fHOutCentTRK = new TH1F("fHOutCentTRK","fHOutCentTRK; Centrality TPC",505,0,101);
388 fHOutCentTKL = new TH1F("fHOutCentTKL","fHOutCentTKL; Centrality tracklets",505,0,101);
389 fHOutCentCL0 = new TH1F("fHOutCentCL0","fHOutCentCL0; Centrality SPD inner",505,0,101);
390 fHOutCentCL1 = new TH1F("fHOutCentCL1","fHOutCentCL1; Centrality SPD outer",505,0,101);
391 fHOutCentV0MvsFMD= new TH1F("fHOutCentV0MvsFMD","fHOutCentV0MvsFMD; Centrality V0 vs FMD",505,0,101);
392 fHOutCentTKLvsV0M= new TH1F("fHOutCentTKLvsV0M","fHOutCentTKLvsV0M; Centrality tracklets vs V0",505,0,101);
393 fHOutCentZEMvsZDC= new TH1F("fHOutCentZEMvsZDC","fHOutCentZEMvsZDC; Centrality ZEM vs ZDC",505,0,101);
394 fHOutCentV0MvsCentCL1= new TH2F("fHOutCentV0MvsCentCL1","fHOutCentV0MvsCentCL1; Cent V0; Cent SPD",505,0,101,505,0,101);
395 fHOutCentV0MvsCentTRK= new TH2F("fHOutCentV0MvsCentTRK","fHOutCentV0MvsCentTRK; Cent V0; Cent TPC",505,0,101,505,0,101);
396 fHOutCentTRKvsCentCL1= new TH2F("fHOutCentTRKvsCentCL1","fHOutCentTRKvsCentCL1; Cent TPC; Cent SPD",505,0,101,505,0,101);
397 fHOutCentV0MvsCentZDC= new TH2F("fHOutCentV0MvsCentZDC","fHOutCentV0MvsCentZDC; Cent V0; Cent ZDC",505,0,101,505,0,101);
399 fHOutMultV0M = new TH1F("fHOutMultV0M","fHOutMultV0M; Multiplicity V0",25000,0,25000);
400 fHOutMultV0R = new TH1F("fHOutMultV0R","fHOutMultV0R; Multiplicity V0",30000,0,30000);
401 fHOutMultFMD = new TH1F("fHOutMultFMD","fHOutMultFMD; Multiplicity FMD",24000,0,24000);
402 fHOutMultTRK = new TH1F("fHOutMultTRK","fHOutMultTRK; Multiplicity TPC",4000,0,4000);
403 fHOutMultTKL = new TH1F("fHOutMultTKL","fHOutMultTKL; Multiplicity tracklets",5000,0,5000);
404 fHOutMultCL0 = new TH1F("fHOutMultCL0","fHOutMultCL0; Multiplicity SPD inner",7000,0,7000);
405 fHOutMultCL1 = new TH1F("fHOutMultCL1","fHOutMultCL1; Multiplicity SPD outer",7000,0,7000);
406 fHOutMultV0MvsZDN = new TH2F("fHOutMultV0MvsZDN","fHOutMultV0MvsZDN; Multiplicity V0; Energy ZDC-N",500,0,25000,500,0,180000);
407 fHOutMultZEMvsZDN = new TH2F("fHOutMultZEMvsZDN","fHOutMultZEMvsZDN; Energy ZEM; Energy ZDC-N",500,0,2500,500,0,180000);
408 fHOutMultV0MvsZDC = new TH2F("fHOutMultV0MvsZDC","fHOutMultV0MvsZDC; Multiplicity V0; Energy ZDC",500,0,25000,500,0,200000);
409 fHOutMultZEMvsZDC = new TH2F("fHOutMultZEMvsZDC","fHOutMultZEMvsZDC; Energy ZEM; Energy ZDC",500,0,2500,500,0,200000);
410 fHOutMultV0MvsCL1 = new TH2F("fHOutMultV0MvsCL1","fHOutMultV0MvsCL1; Multiplicity V0; Multiplicity SPD outer",2500,0,25000,700,0,7000);
411 fHOutMultV0MvsTRK = new TH2F("fHOutMultV0MvsTRK","fHOutMultV0MvsTRK; Multiplicity V0; Multiplicity TPC",2500,0,25000,400,0,4000);
412 fHOutMultTRKvsCL1 = new TH2F("fHOutMultTRKvsCL1","fHOutMultTRKvsCL1; Multiplicity TPC; Multiplicity SPD outer",400,0,4000,700,0,7000);
414 fHOutCentV0Mqual1 = new TH1F("fHOutCentV0M_qual1","fHOutCentV0M_qual1; Centrality V0",505,0,101);
415 fHOutCentTRKqual1 = new TH1F("fHOutCentTRK_qual1","fHOutCentTRK_qual1; Centrality TPC",505,0,101);
416 fHOutCentCL1qual1 = new TH1F("fHOutCentCL1_qual1","fHOutCentCL1_qual1; Centrality SPD outer",505,0,101);
417 fHOutMultV0MvsCL1qual1 = new TH2F("fHOutMultV0MvsCL1_qual1","fHOutMultV0MvsCL1_qual1; Multiplicity V0; Multiplicity SPD outer",2500,0,25000,700,0,7000);
418 fHOutMultV0MvsTRKqual1 = new TH2F("fHOutMultV0MvsTRK_qual1","fHOutMultV0MvsTRK_qual1; Multiplicity V0; Multiplicity TPC",2500,0,25000,400,0,4000);
419 fHOutMultTRKvsCL1qual1 = new TH2F("fHOutMultTRKvsCL1_qual1","fHOutMultTRKvsCL1_qual1; Multiplicity TPC; Multiplicity SPD outer",400,0,4000,700,0,7000);
421 fHOutCentV0Mqual2 = new TH1F("fHOutCentV0M_qual2","fHOutCentV0M_qual2; Centrality V0",505,0,101);
422 fHOutCentTRKqual2 = new TH1F("fHOutCentTRK_qual2","fHOutCentTRK_qual2; Centrality TPC",505,0,101);
423 fHOutCentCL1qual2 = new TH1F("fHOutCentCL1_qual2","fHOutCentCL1_qual2; Centrality SPD outer",505,0,101);
424 fHOutMultV0MvsCL1qual2 = new TH2F("fHOutMultV0MvsCL1_qual2","fHOutMultV0MvsCL1_qual2; Multiplicity V0; Multiplicity SPD outer",2500,0,25000,700,0,7000);
425 fHOutMultV0MvsTRKqual2 = new TH2F("fHOutMultV0MvsTRK_qual2","fHOutMultV0MvsTRK_qual2; Multiplicity V0; Multiplicity TPC",2500,0,25000,400,0,4000);
426 fHOutMultTRKvsCL1qual2 = new TH2F("fHOutMultTRKvsCL1_qual2","fHOutMultTRKvsCL1_qual2; Multiplicity TPC; Multiplicity SPD outer",400,0,4000,700,0,7000);
428 fHOutQuality = new TH1F("fHOutQuality", "fHOutQuality", 100,-0.5,99.5);
429 fHOutVertex = new TH1F("fHOutVertex", "fHOutVertex", 100,-20,20);
431 fOutputList->Add( fHOutCentV0M );
432 fOutputList->Add( fHOutCentFMD );
433 fOutputList->Add( fHOutCentTRK );
434 fOutputList->Add( fHOutCentTKL );
435 fOutputList->Add( fHOutCentCL0 );
436 fOutputList->Add( fHOutCentCL1 );
437 fOutputList->Add( fHOutCentV0MvsFMD);
438 fOutputList->Add( fHOutCentTKLvsV0M);
439 fOutputList->Add( fHOutCentZEMvsZDC);
440 fOutputList->Add( fHOutCentV0MvsCentCL1);
441 fOutputList->Add( fHOutCentV0MvsCentTRK);
442 fOutputList->Add( fHOutCentTRKvsCentCL1);
443 fOutputList->Add( fHOutCentV0MvsCentZDC);
444 fOutputList->Add( fHOutMultV0M);
445 fOutputList->Add( fHOutMultV0R);
446 fOutputList->Add( fHOutMultFMD);
447 fOutputList->Add( fHOutMultTRK);
448 fOutputList->Add( fHOutMultTKL);
449 fOutputList->Add( fHOutMultCL0);
450 fOutputList->Add( fHOutMultCL1);
451 fOutputList->Add( fHOutMultV0MvsZDN);
452 fOutputList->Add( fHOutMultZEMvsZDN);
453 fOutputList->Add( fHOutMultV0MvsZDC);
454 fOutputList->Add( fHOutMultZEMvsZDC);
455 fOutputList->Add( fHOutMultV0MvsCL1);
456 fOutputList->Add( fHOutMultV0MvsTRK);
457 fOutputList->Add( fHOutMultTRKvsCL1);
458 fOutputList->Add( fHOutCentV0Mqual1 );
459 fOutputList->Add( fHOutCentTRKqual1 );
460 fOutputList->Add( fHOutCentCL1qual1 );
461 fOutputList->Add( fHOutMultV0MvsCL1qual1);
462 fOutputList->Add( fHOutMultV0MvsTRKqual1);
463 fOutputList->Add( fHOutMultTRKvsCL1qual1);
464 fOutputList->Add( fHOutCentV0Mqual2 );
465 fOutputList->Add( fHOutCentTRKqual2 );
466 fOutputList->Add( fHOutCentCL1qual2 );
467 fOutputList->Add( fHOutMultV0MvsCL1qual2);
468 fOutputList->Add( fHOutMultV0MvsTRKqual2);
469 fOutputList->Add( fHOutMultTRKvsCL1qual2);
470 fOutputList->Add( fHOutQuality );
471 fOutputList->Add( fHOutVertex );
474 fTrackCuts = AliESDtrackCuts::GetStandardTPCOnlyTrackCuts();
476 PostData(1, fOutputList);
479 if (fIsMCInput) MyInitScaleFactorMC();
481 if (fPass==0) AliFatal("Which pass are you analyzing? You should set it via taskCentrality->SetPass(N)");
484 //________________________________________________________________________
485 void AliCentralitySelectionTask::UserExec(Option_t */*option*/)
487 printf(" **** GRAZIE CVETAN!!!! \n");
489 // Execute analysis for current event:
490 if(fDebug>1) printf(" **** AliCentralitySelectionTask::UserExec() \n");
492 Float_t zncEnergy = 0.; // ZNC Energy
493 Float_t zpcEnergy = 0.; // ZPC Energy
494 Float_t znaEnergy = 0.; // ZNA Energy
495 Float_t zpaEnergy = 0.; // ZPA Energy
496 Float_t zem1Energy = 0.; // ZEM1 Energy
497 Float_t zem2Energy = 0.; // ZEM2 Energy
498 Bool_t zdcEnergyCal = kFALSE; // if zdc is calibrated (in pass2)
500 Int_t nTracks = 0; // no. tracks
501 Int_t nTracklets = 0; // no. tracklets
502 Int_t nClusters[6] = {0}; // no. clusters on 6 ITS layers
503 Int_t nChips[2]; // no. chips on 2 SPD layers
504 Float_t spdCorr =0; // corrected spd2 multiplicity
506 Float_t multV0A = 0; // multiplicity from V0 reco side A
507 Float_t multV0C = 0; // multiplicity from V0 reco side C
508 Float_t multFMDA = 0; // multiplicity from FMD on detector A
509 Float_t multFMDC = 0; // multiplicity from FMD on detector C
511 Short_t v0Corr = 0; // corrected V0 multiplicity
512 Short_t v0CorrResc = 0; // corrected and rescaled V0 multiplicity
514 Float_t zvtx =0; // z-vertex SPD
515 Int_t zvtxNcont =0; // contributors to z-vertex SPD
518 AliCentrality *esdCent = 0;
520 if(fAnalysisInput.CompareTo("ESD")==0){
522 AliVEvent* event = InputEvent();
523 AliESDEvent* esd = dynamic_cast<AliESDEvent*>(event);
525 AliError("No ESD Event");
532 if (SetupRun(esd)<0) {
533 AliError("Centrality File not available for this run");
538 esdCent = esd->GetCentrality();
541 AliESDVZERO* esdV0 = esd->GetVZEROData();
542 multV0A=esdV0->GetMTotV0A();
543 multV0C=esdV0->GetMTotV0C();
546 v0Corr = (Short_t)AliESDUtils::GetCorrV0(esd,v0CorrR);
547 v0CorrResc = (Short_t)v0CorrR;
550 const AliESDVertex* vtxESD = esd->GetPrimaryVertexSPD();
551 zvtx = vtxESD->GetZ();
552 zvtxNcont = vtxESD->GetNContributors();
554 // ***** CB info (tracklets, clusters, chips)
555 //nTracks = event->GetNumberOfTracks();
556 nTracks = fTrackCuts ? (Short_t)fTrackCuts->GetReferenceMultiplicity(esd,kTRUE):-1;
558 const AliMultiplicity *mult = esd->GetMultiplicity();
560 nTracklets = mult->GetNumberOfTracklets();
562 for(Int_t ilay=0; ilay<6; ilay++){
563 nClusters[ilay] = mult->GetNumberOfITSClusters(ilay);
566 for(Int_t ilay=0; ilay<2; ilay++){
567 nChips[ilay] = mult->GetNumberOfFiredChips(ilay);
570 spdCorr = AliESDUtils::GetCorrSPD2(nClusters[1],zvtx);
573 AliESDFMD *fmd = esd->GetFMDData();
574 Float_t totalMultA = 0;
575 Float_t totalMultC = 0;
576 const Float_t fFMDLowCut = 0.4;
578 for(UShort_t det=1;det<=3;det++) {
579 Int_t nRings = (det==1 ? 1 : 2);
580 for (UShort_t ir = 0; ir < nRings; ir++) {
581 Char_t ring = (ir == 0 ? 'I' : 'O');
582 UShort_t nsec = (ir == 0 ? 20 : 40);
583 UShort_t nstr = (ir == 0 ? 512 : 256);
584 for(UShort_t sec =0; sec < nsec; sec++) {
585 for(UShort_t strip = 0; strip < nstr; strip++) {
587 Float_t fmdMult = fmd->Multiplicity(det,ring,sec,strip);
588 if(fmdMult == 0 || fmdMult == AliESDFMD::kInvalidMult) continue;
590 Float_t nParticles=0;
592 if(fmdMult > fFMDLowCut) {
596 if (det<3) totalMultA = totalMultA + nParticles;
597 else totalMultC = totalMultC + nParticles;
603 multFMDA = totalMultA;
604 multFMDC = totalMultC;
607 AliESDZDC *esdZDC = esd->GetESDZDC();
608 zdcEnergyCal = esdZDC->AliESDZDC::TestBit(AliESDZDC::kEnergyCalibratedSignal);
610 zncEnergy = (Float_t) (esdZDC->GetZDCN1Energy());
611 zpcEnergy = (Float_t) (esdZDC->GetZDCP1Energy());
612 znaEnergy = (Float_t) (esdZDC->GetZDCN2Energy());
613 zpaEnergy = (Float_t) (esdZDC->GetZDCP2Energy());
615 zncEnergy = (Float_t) (esdZDC->GetZDCN1Energy())/8.;
616 zpcEnergy = (Float_t) (esdZDC->GetZDCP1Energy())/8.;
617 znaEnergy = (Float_t) (esdZDC->GetZDCN2Energy())/8.;
618 zpaEnergy = (Float_t) (esdZDC->GetZDCP2Energy())/8.;
620 zem1Energy = (Float_t) (esdZDC->GetZDCEMEnergy(0))/8.;
621 zem2Energy = (Float_t) (esdZDC->GetZDCEMEnergy(1))/8.;
625 else if(fAnalysisInput.CompareTo("AOD")==0){
626 //AliAODEvent *aod = dynamic_cast<AliAODEvent*> (InputEvent());
628 printf(" AOD analysis not yet implemented!!!\n\n");
633 // ***** Scaling for pass2
637 // ***** Scaling for MC
641 Float_t tempScalefactorV0M = MyGetScaleFactorMC(fCurrentRun);
642 v0Corr = Short_t((multV0A+multV0C) * tempScalefactorV0M);
644 // ***** Scaling for Data
646 Float_t tempScalefactorV0M = MyGetScaleFactor(fCurrentRun,0);
647 Float_t tempScalefactorSPD = MyGetScaleFactor(fCurrentRun,1);
648 Float_t tempScalefactorTPC = MyGetScaleFactor(fCurrentRun,2);
649 v0Corr = Short_t(v0Corr / tempScalefactorV0M);
650 spdCorr = spdCorr / tempScalefactorSPD;
651 nTracks = Int_t(nTracks / tempScalefactorTPC);
654 // ***** Centrality Selection
655 if(fHtempV0M) fCentV0M = fHtempV0M->GetBinContent(fHtempV0M->FindBin((v0Corr)));
656 if(fHtempFMD) fCentFMD = fHtempFMD->GetBinContent(fHtempFMD->FindBin((multFMDA+multFMDC)));
657 if(fHtempTRK) fCentTRK = fHtempTRK->GetBinContent(fHtempTRK->FindBin(nTracks));
658 if(fHtempTKL) fCentTKL = fHtempTKL->GetBinContent(fHtempTKL->FindBin(nTracklets));
659 if(fHtempCL0) fCentCL0 = fHtempCL0->GetBinContent(fHtempCL0->FindBin(nClusters[0]));
660 if(fHtempCL1) fCentCL1 = fHtempCL1->GetBinContent(fHtempCL1->FindBin(spdCorr));
662 if(fHtempV0MvsFMD) fCentV0MvsFMD = fHtempV0MvsFMD->GetBinContent(fHtempV0MvsFMD->FindBin((multV0A+multV0C)));
663 if(fHtempTKLvsV0M) fCentTKLvsV0M = fHtempTKLvsV0M->GetBinContent(fHtempTKLvsV0M->FindBin(nTracklets));
664 if(fHtempZEMvsZDC) fCentZEMvsZDC = fHtempZEMvsZDC->GetBinContent(fHtempZEMvsZDC->FindBin(zem1Energy+zem2Energy,zncEnergy+znaEnergy+zpcEnergy+zpaEnergy));
673 if (TMath::Abs(zvtx)>fZVCut || zvtxNcont<1) fQuality += 1;
677 if (IsOutlierV0MSPD(spdCorr, v0Corr, int(fCentV0M))) fQuality += 2;
679 if (IsOutlierV0MTPC(nTracks, v0Corr, int(fCentV0M))) fQuality += 4;
681 if (IsOutlierV0MZDC((zncEnergy+znaEnergy+zpcEnergy+zpaEnergy), v0Corr) &&
682 (zdcEnergyCal==kFALSE) && !(fIsMCInput)) fQuality += 8;
683 if (IsOutlierV0MZDCECal((zncEnergy+znaEnergy+zpcEnergy+zpaEnergy), v0Corr) &&
684 ((zdcEnergyCal==kTRUE) || (fIsMCInput))) fQuality += 8;
691 esdCent->SetQuality(fQuality);
692 esdCent->SetCentralityV0M(fCentV0M);
693 esdCent->SetCentralityFMD(fCentFMD);
694 esdCent->SetCentralityTRK(fCentTRK);
695 esdCent->SetCentralityTKL(fCentTKL);
696 esdCent->SetCentralityCL0(fCentCL0);
697 esdCent->SetCentralityCL1(fCentCL1);
698 esdCent->SetCentralityV0MvsFMD(fCentV0MvsFMD);
699 esdCent->SetCentralityTKLvsV0M(fCentTKLvsV0M);
700 esdCent->SetCentralityZEMvsZDC(fCentZEMvsZDC);
703 fHOutQuality->Fill(fQuality);
704 fHOutVertex->Fill(zvtx);
707 fHOutCentV0M->Fill(fCentV0M);
708 fHOutCentFMD->Fill(fCentFMD);
709 fHOutCentTRK->Fill(fCentTRK);
710 fHOutCentTKL->Fill(fCentTKL);
711 fHOutCentCL0->Fill(fCentCL0);
712 fHOutCentCL1->Fill(fCentCL1);
713 fHOutCentV0MvsFMD->Fill(fCentV0MvsFMD);
714 fHOutCentTKLvsV0M->Fill(fCentTKLvsV0M);
715 fHOutCentZEMvsZDC->Fill(fCentZEMvsZDC);
716 fHOutCentV0MvsCentCL1->Fill(fCentV0M,fCentCL1);
717 fHOutCentV0MvsCentTRK->Fill(fCentV0M,fCentTRK);
718 fHOutCentTRKvsCentCL1->Fill(fCentTRK,fCentCL1);
719 fHOutCentV0MvsCentCL1->Fill(fCentV0M,fCentZEMvsZDC);
720 fHOutMultV0M->Fill(v0Corr);
721 fHOutMultV0R->Fill(multV0A+multV0C);
722 fHOutMultFMD->Fill((multFMDA+multFMDC));
723 fHOutMultTRK->Fill(nTracks);
724 fHOutMultTKL->Fill(nTracklets);
725 fHOutMultCL0->Fill(nClusters[0]);
726 fHOutMultCL1->Fill(spdCorr);
727 fHOutMultV0MvsZDN->Fill(v0Corr,(zncEnergy+znaEnergy));
728 fHOutMultZEMvsZDN->Fill((zem1Energy+zem2Energy),(zncEnergy+znaEnergy));
729 fHOutMultV0MvsZDC->Fill(v0Corr,(zncEnergy+znaEnergy+zpcEnergy+zpaEnergy));
730 fHOutMultZEMvsZDC->Fill((zem1Energy+zem2Energy),(zncEnergy+znaEnergy+zpcEnergy+zpaEnergy));
731 fHOutMultV0MvsCL1->Fill(v0Corr,spdCorr);
732 fHOutMultV0MvsTRK->Fill(v0Corr,nTracks);
733 fHOutMultTRKvsCL1->Fill(nTracks,spdCorr);
734 } else if (fQuality%2 == 0) {
735 fHOutCentV0Mqual1->Fill(fCentV0M);
736 fHOutCentTRKqual1->Fill(fCentTRK);
737 fHOutCentCL1qual1->Fill(fCentCL1);
738 fHOutMultV0MvsCL1qual1->Fill(v0Corr,spdCorr);
739 fHOutMultV0MvsTRKqual1->Fill(v0Corr,nTracks);
740 fHOutMultTRKvsCL1qual1->Fill(nTracks,spdCorr);
742 fHOutCentV0Mqual2->Fill(fCentV0M);
743 fHOutCentTRKqual2->Fill(fCentTRK);
744 fHOutCentCL1qual2->Fill(fCentCL1);
745 fHOutMultV0MvsCL1qual2->Fill(v0Corr,spdCorr);
746 fHOutMultV0MvsTRKqual2->Fill(v0Corr,nTracks);
747 fHOutMultTRKvsCL1qual2->Fill(nTracks,spdCorr);
750 PostData(1, fOutputList);
753 //________________________________________________________________________
754 void AliCentralitySelectionTask::ReadCentralityHistos(TString fCentfilename)
756 // Read centrality histograms
757 TDirectory *owd = gDirectory;
758 // Check if the file is present
759 TString path = gSystem->ExpandPathName(fCentfilename.Data());
760 if (gSystem->AccessPathName(path)) {
761 AliError(Form("File %s does not exist", path.Data()));
764 fFile = TFile::Open(fCentfilename);
766 fHtempV0M = (TH1F*) (fFile->Get("hmultV0_percentile"));
767 fHtempFMD = (TH1F*) (fFile->Get("hmultFMD_percentile"));
768 fHtempTRK = (TH1F*) (fFile->Get("hNtracks_percentile"));
769 fHtempTKL = (TH1F*) (fFile->Get("hNtracklets_percentile"));
770 fHtempCL0 = (TH1F*) (fFile->Get("hNclusters0_percentile"));
771 fHtempCL1 = (TH1F*) (fFile->Get("hNclusters1_percentile"));
773 if (!fHtempV0M) AliWarning(Form("Calibration for V0M does not exist in %s", path.Data()));
774 if (!fHtempFMD) AliWarning(Form("Calibration for FMD does not exist in %s", path.Data()));
775 if (!fHtempTRK) AliWarning(Form("Calibration for TRK does not exist in %s", path.Data()));
776 if (!fHtempTKL) AliWarning(Form("Calibration for TKL does not exist in %s", path.Data()));
777 if (!fHtempCL0) AliWarning(Form("Calibration for CL0 does not exist in %s", path.Data()));
778 if (!fHtempCL1) AliWarning(Form("Calibration for CL1 does not exist in %s", path.Data()));
783 //________________________________________________________________________
784 void AliCentralitySelectionTask::ReadCentralityHistos2(TString fCentfilename2)
786 // Read centrality histograms
787 TDirectory *owd = gDirectory;
788 TString path = gSystem->ExpandPathName(fCentfilename2.Data());
789 if (gSystem->AccessPathName(path)) {
790 AliError(Form("File %s does not exist", path.Data()));
793 fFile2 = TFile::Open(fCentfilename2);
795 fHtempV0MvsFMD = (TH1F*) (fFile2->Get("hmultV0vsmultFMD_all_percentile"));
796 fHtempTKLvsV0M = (TH1F*) (fFile2->Get("hNtrackletsvsmultV0_all_percentile"));
797 fHtempZEMvsZDC = (TH2F*) (fFile2->Get("hEzemvsEzdc_all_percentile"));
799 if (!fHtempV0MvsFMD) AliWarning(Form("Calibration for V0MvsFMD does not exist in %s", path.Data()));
800 if (!fHtempTKLvsV0M) AliWarning(Form("Calibration for TKLvsV0M does not exist in %s", path.Data()));
801 if (!fHtempZEMvsZDC) AliWarning(Form("Calibration for ZEMvsZDC does not exist in %s", path.Data()));
806 //________________________________________________________________________
807 void AliCentralitySelectionTask::Terminate(Option_t */*option*/)
809 // Terminate analysis
810 if (fFile && fFile->IsOpen())
812 if (fFile2 && fFile2->IsOpen())
815 //________________________________________________________________________
816 Int_t AliCentralitySelectionTask::SetupRun(AliESDEvent* const esd)
818 // Setup files for run
823 // check if something to be done
824 if (fCurrentRun == esd->GetRunNumber())
827 fCurrentRun = esd->GetRunNumber();
829 AliInfo(Form("Setup Centrality Selection for run %d\n",fCurrentRun));
831 // CHANGE HERE FOR RUN RANGES
834 if ( fCurrentRun <= 137165 ) fRunNo = 137161;
835 else fRunNo = 137366;
838 if ( fCurrentRun >= 136851 && fCurrentRun <= 137165 ) fRunNo = 137161;
839 else if ( fCurrentRun >= 137230 && fCurrentRun <= 137848 ) fRunNo = 137722;
840 else if ( fCurrentRun >= 138125 && fCurrentRun <= 138154 ) fRunNo = 138150;
841 else if ( fCurrentRun >= 138190 && fCurrentRun <= 138275 ) fRunNo = 138200;
842 else fRunNo = 139172;
845 AliError(Form("Run %d not known to centrality selection!", fCurrentRun));
848 TString fileName =(Form("%s/COMMON/CENTRALITY/data/pass%d/AliCentralityBy1D_%d.root", AliAnalysisManager::GetOADBPath(), fPass, fRunNo));
849 TString fileName2=(Form("%s/COMMON/CENTRALITY/data/pass%d/AliCentralityByFunction_%d.root", AliAnalysisManager::GetOADBPath(), fPass, fRunNo));
851 AliInfo(Form("Centrality Selection for run %d and pass %d is initialized with %s", fCurrentRun, fPass, fileName.Data()));
852 ReadCentralityHistos(fileName.Data());
853 ReadCentralityHistos2(fileName2.Data());
854 if (!fFile && !fFile2) {
855 AliError(Form("Run %d not known to centrality selection!", fCurrentRun));
861 //________________________________________________________________________
862 Bool_t AliCentralitySelectionTask::IsOutlierV0MSPD(Float_t spd, Float_t v0, Int_t cent) const
865 Float_t val= -0.579579 + 0.273949 * v0;
866 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};
868 if ( TMath::Abs(spd-val) > fOutliersCut*spdSigma[cent] )
874 //________________________________________________________________________
875 Bool_t AliCentralitySelectionTask::IsOutlierV0MTPC(Int_t tracks, Float_t v0, Int_t cent) const
878 Float_t val = -1.03873 + 0.125691 * v0;
879 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};
881 if ( TMath::Abs(tracks-val) > fOutliersCut*tpcSigma[cent] )
887 //________________________________________________________________________
888 Bool_t AliCentralitySelectionTask::IsOutlierV0MZDC(Float_t zdc, Float_t v0) const
891 Float_t val = 235000. - 9.5 * v0;
898 //________________________________________________________________________
899 Bool_t AliCentralitySelectionTask::IsOutlierV0MZDCECal(Float_t /*zdc*/, Float_t /*v0*/) const
905 //________________________________________________________________________
906 Float_t AliCentralitySelectionTask::MyGetScaleFactor(Int_t runnumber, Int_t flag) const
908 // Get scaling factor
909 if (! (runnumber >= fLowRunN && runnumber <=fHighRunN)) {
910 cout << "MyGetScaleFactor error in run number range " << runnumber << endl;
914 Float_t scalefactor=0.0;
916 scalefactor = fV0MScaleFactor[runnumber - fLowRunN]; // subtracting reference offset index
918 scalefactor = fSPDScaleFactor[runnumber - fLowRunN]; // subtracting reference offset index
920 scalefactor = fTPCScaleFactor[runnumber - fLowRunN]; // subtracting reference offset index
926 //________________________________________________________________________
927 Float_t AliCentralitySelectionTask::MyGetScaleFactorMC(Int_t runnumber) const
929 // Get MC scaling factor
930 if (! (runnumber >= fLowRunN && runnumber <=fHighRunN)) {
931 cout << "MyGetScaleFactor error in run number range " << runnumber << endl;
935 Float_t scalefactor= fV0MScaleFactorMC[runnumber - fLowRunN]; // subtracting reference offset index
940 //________________________________________________________________________
941 void AliCentralitySelectionTask::MyInitScaleFactor ()
943 // Initialize the scaling factors
944 for (int i=0; i<=(fHighRunN-fLowRunN); i++) fV0MScaleFactor[i] = 0.0;
945 for (int i=0; i<=(fHighRunN-fLowRunN); i++) fSPDScaleFactor[i] = 0.0;
946 for (int i=0; i<=(fHighRunN-fLowRunN); i++) fTPCScaleFactor[i] = 0.0;
948 // scale factors determined from <V0 charge> on a run-by-run basis
949 fV0MScaleFactor[310] = 1.;
950 fV0MScaleFactor[311] = 1.;
951 fV0MScaleFactor[514] = 1.0046;
952 fV0MScaleFactor[515] = 0.983535;
953 fV0MScaleFactor[579] = 0.988185;
954 fV0MScaleFactor[580] = 0.983351;
955 fV0MScaleFactor[581] = 0.989013;
956 fV0MScaleFactor[583] = 0.990056;
957 fV0MScaleFactor[588] = 0.974438;
958 fV0MScaleFactor[589] = 0.981572;
959 fV0MScaleFactor[590] = 0.989316;
960 fV0MScaleFactor[592] = 0.98345;
961 fV0MScaleFactor[688] = 0.993647;
962 fV0MScaleFactor[690] = 0.994758;
963 fV0MScaleFactor[693] = 0.989569;
964 fV0MScaleFactor[698] = 0.993119;
965 fV0MScaleFactor[744] = 0.989583;
966 fV0MScaleFactor[757] = 0.990377;
967 fV0MScaleFactor[787] = 0.990176;
968 fV0MScaleFactor[788] = 0.98723;
969 fV0MScaleFactor[834] = 1.00403;
970 fV0MScaleFactor[835] = 0.994376;
971 fV0MScaleFactor[840] = 0.99759;
972 fV0MScaleFactor[842] = 1.01031;
973 fV0MScaleFactor[900] = 0.996216;
974 fV0MScaleFactor[901] = 0.994205;
975 fV0MScaleFactor[992] = 0.998479;
976 fV0MScaleFactor[997] = 1.00078;
977 fV0MScaleFactor[1299] = 1.00515;
978 fV0MScaleFactor[1303] = 1.00094;
979 fV0MScaleFactor[1339] = 0.986596;
980 fV0MScaleFactor[1346] = 0.972226;
981 fV0MScaleFactor[1349] = 0.960358;
982 fV0MScaleFactor[1350] = 0.970023;
983 fV0MScaleFactor[1374] = 1.00575;
984 fV0MScaleFactor[1545] = 1.00471;
985 fV0MScaleFactor[1587] = 1.00611;
986 fV0MScaleFactor[1588] = 1.00976;
987 fV0MScaleFactor[1618] = 1.00771;
988 fV0MScaleFactor[1682] = 1.01622;
989 fV0MScaleFactor[1727] = 1.01305;
990 fV0MScaleFactor[1728] = 1.00388;
991 fV0MScaleFactor[1731] = 1.00673;
992 fV0MScaleFactor[1732] = 1.00916;
993 fV0MScaleFactor[1770] = 1.0092;
994 fV0MScaleFactor[1773] = 1.00728;
995 fV0MScaleFactor[1786] = 1.01655;
996 fV0MScaleFactor[1787] = 1.00672;
997 fV0MScaleFactor[1801] = 0.983339;
998 fV0MScaleFactor[1802] = 1.00754;
999 fV0MScaleFactor[1811] = 1.00608;
1000 fV0MScaleFactor[1815] = 1.01227;
1001 fV0MScaleFactor[1879] = 0.99907;
1002 fV0MScaleFactor[1881] = 0.995696;
1003 fV0MScaleFactor[2186] = 1.00559;
1004 fV0MScaleFactor[2187] = 1.00631;
1005 fV0MScaleFactor[2254] = 1.01512;
1006 fV0MScaleFactor[2256] = 0.998727;
1007 fV0MScaleFactor[2321] = 1.00701;
1008 fSPDScaleFactor[310] = 1.00211;
1009 fSPDScaleFactor[311] = 1.00067;
1010 fSPDScaleFactor[514] = 1.02268;
1011 fSPDScaleFactor[515] = 0.994902;
1012 fSPDScaleFactor[579] = 1.00215;
1013 fSPDScaleFactor[580] = 0.993421;
1014 fSPDScaleFactor[581] = 1.00129;
1015 fSPDScaleFactor[583] = 1.00242;
1016 fSPDScaleFactor[588] = 0.984762;
1017 fSPDScaleFactor[589] = 0.994355;
1018 fSPDScaleFactor[590] = 1.00073;
1019 fSPDScaleFactor[592] = 0.995889;
1020 fSPDScaleFactor[688] = 0.994532;
1021 fSPDScaleFactor[690] = 0.998307;
1022 fSPDScaleFactor[693] = 0.994052;
1023 fSPDScaleFactor[698] = 0.993224;
1024 fSPDScaleFactor[744] = 0.993279;
1025 fSPDScaleFactor[757] = 0.992494;
1026 fSPDScaleFactor[787] = 0.992678;
1027 fSPDScaleFactor[788] = 0.996563;
1028 fSPDScaleFactor[834] = 1.01116;
1029 fSPDScaleFactor[835] = 0.993108;
1030 fSPDScaleFactor[840] = 0.997574;
1031 fSPDScaleFactor[842] = 1.01829;
1032 fSPDScaleFactor[900] = 0.999438;
1033 fSPDScaleFactor[901] = 0.995849;
1034 fSPDScaleFactor[992] = 0.999227;
1035 fSPDScaleFactor[997] = 1.00575;
1036 fSPDScaleFactor[1299] = 0.99877;
1037 fSPDScaleFactor[1303] = 0.999682;
1038 fSPDScaleFactor[1339] = 0.978198;
1039 fSPDScaleFactor[1346] = 0.964178;
1040 fSPDScaleFactor[1349] = 0.959439;
1041 fSPDScaleFactor[1350] = 0.956945;
1042 fSPDScaleFactor[1374] = 0.994434;
1043 fSPDScaleFactor[1545] = 1.0016;
1044 fSPDScaleFactor[1587] = 1.00153;
1045 fSPDScaleFactor[1588] = 1.00698;
1046 fSPDScaleFactor[1618] = 1.00554;
1047 fSPDScaleFactor[1682] = 1.0123;
1048 fSPDScaleFactor[1727] = 1.011;
1049 fSPDScaleFactor[1728] = 1.00143;
1050 fSPDScaleFactor[1731] = 1.00486;
1051 fSPDScaleFactor[1732] = 1.00646;
1052 fSPDScaleFactor[1770] = 1.00515;
1053 fSPDScaleFactor[1773] = 1.00485;
1054 fSPDScaleFactor[1786] = 1.01215;
1055 fSPDScaleFactor[1787] = 1.00419;
1056 fSPDScaleFactor[1801] = 0.983327;
1057 fSPDScaleFactor[1802] = 1.00529;
1058 fSPDScaleFactor[1811] = 1.00367;
1059 fSPDScaleFactor[1815] = 1.01045;
1060 fSPDScaleFactor[1879] = 0.996374;
1061 fSPDScaleFactor[1881] = 0.988827;
1062 fSPDScaleFactor[2186] = 1.00354;
1063 fSPDScaleFactor[2187] = 1.00397;
1064 fSPDScaleFactor[2254] = 1.01138;
1065 fSPDScaleFactor[2256] = 0.996641;
1066 fSPDScaleFactor[2321] = 1.00357;
1067 fTPCScaleFactor[310] = 1.00434;
1068 fTPCScaleFactor[311] = 1.0056;
1069 fTPCScaleFactor[514] = 1.02185;
1070 fTPCScaleFactor[515] = 1.0036;
1071 fTPCScaleFactor[579] = 1.00607;
1072 fTPCScaleFactor[580] = 1.00183;
1073 fTPCScaleFactor[581] = 1.00693;
1074 fTPCScaleFactor[583] = 1.00746;
1075 fTPCScaleFactor[588] = 0.990524;
1076 fTPCScaleFactor[589] = 0.998582;
1077 fTPCScaleFactor[590] = 1.00618;
1078 fTPCScaleFactor[592] = 1.00088;
1079 fTPCScaleFactor[688] = 1.00598;
1080 fTPCScaleFactor[690] = 1.00658;
1081 fTPCScaleFactor[693] = 1.00144;
1082 fTPCScaleFactor[698] = 1.00279;
1083 fTPCScaleFactor[744] = 1.00122;
1084 fTPCScaleFactor[757] = 1.002;
1085 fTPCScaleFactor[787] = 0.997818;
1086 fTPCScaleFactor[788] = 0.994583;
1087 fTPCScaleFactor[834] = 1.01508;
1088 fTPCScaleFactor[835] = 1.00218;
1089 fTPCScaleFactor[840] = 1.00569;
1090 fTPCScaleFactor[842] = 1.01789;
1091 fTPCScaleFactor[900] = 1.00739;
1092 fTPCScaleFactor[901] = 1.00462;
1093 fTPCScaleFactor[992] = 1.00502;
1094 fTPCScaleFactor[997] = 1.00943;
1095 fTPCScaleFactor[1299] = 1.00438;
1096 fTPCScaleFactor[1303] = 0.996701;
1097 fTPCScaleFactor[1339] = 0.978641;
1098 fTPCScaleFactor[1346] = 0.968906;
1099 fTPCScaleFactor[1349] = 0.954311;
1100 fTPCScaleFactor[1350] = 0.958764;
1101 fTPCScaleFactor[1374] = 0.997899;
1102 fTPCScaleFactor[1545] = 0.992;
1103 fTPCScaleFactor[1587] = 0.992635;
1104 fTPCScaleFactor[1588] = 1.00207;
1105 fTPCScaleFactor[1618] = 1.00126;
1106 fTPCScaleFactor[1682] = 1.00324;
1107 fTPCScaleFactor[1727] = 1.00042;
1108 fTPCScaleFactor[1728] = 0.978881;
1109 fTPCScaleFactor[1731] = 0.999818;
1110 fTPCScaleFactor[1732] = 1.00109;
1111 fTPCScaleFactor[1770] = 0.99935;
1112 fTPCScaleFactor[1773] = 0.998531;
1113 fTPCScaleFactor[1786] = 0.999125;
1114 fTPCScaleFactor[1787] = 0.998479;
1115 fTPCScaleFactor[1801] = 0.9775;
1116 fTPCScaleFactor[1802] = 0.999095;
1117 fTPCScaleFactor[1811] = 0.998197;
1118 fTPCScaleFactor[1815] = 1.00413;
1119 fTPCScaleFactor[1879] = 0.990916;
1120 fTPCScaleFactor[1881] = 0.987241;
1121 fTPCScaleFactor[2186] = 1.00048;
1122 fTPCScaleFactor[2187] = 1.00057;
1123 fTPCScaleFactor[2254] = 1.00588;
1124 fTPCScaleFactor[2256] = 0.991503;
1125 fTPCScaleFactor[2321] = 1.00057;
1128 // set all missing values to the value of the run before it ....
1129 for (int i=0; i<=(fHighRunN-fLowRunN); i++) {
1130 if (fV0MScaleFactor[i] == 0.0) {
1132 fV0MScaleFactor[i] = 1.00;
1134 // search for last run number with non-zero value
1135 for (int j=i-1;j>=0;j--) {
1136 if (fV0MScaleFactor[j] != 0.0) {
1137 fV0MScaleFactor[i] = fV0MScaleFactor[j];
1143 } // end loop over checking all run-numbers
1145 for (int i=0; i<=(fHighRunN-fLowRunN); i++) {
1146 if (fSPDScaleFactor[i] == 0.0) {
1148 fSPDScaleFactor[i] = 1.00;
1150 for (int j=i-1;j>=0;j--) {
1151 if (fSPDScaleFactor[j] != 0.0) {
1152 fSPDScaleFactor[i] = fSPDScaleFactor[j];
1160 for (int i=0; i<=(fHighRunN-fLowRunN); i++) {
1161 if (fTPCScaleFactor[i] == 0.0) {
1163 fTPCScaleFactor[i] = 1.00;
1165 for (int j=i-1;j>=0;j--) {
1166 if (fTPCScaleFactor[j] != 0.0) {
1167 fTPCScaleFactor[i] = fTPCScaleFactor[j];
1176 // for (int i=0; i<=(fHighRunN-fLowRunN); i++) cout << "Scale Factor = " << fV0MScaleFactor[i] << " for Run " << i+fLowRunN << endl;
1183 //________________________________________________________________________
1184 void AliCentralitySelectionTask::MyInitScaleFactorMC()
1186 // Initialize the MC scaling factors
1187 for (int i=0; i<(fHighRunN-fLowRunN); i++) fV0MScaleFactorMC[i] = 0.0;
1188 // scale factors determined from <V0 charge> on a run-by-run basis
1191 fV0MScaleFactorMC[0] = 0.75108;
1194 fV0MScaleFactorMC[0] = 0.8;
1197 AliError(Form("Unknown reconstruction pass (%d)! Setting MC scale in V0 to 1", fPass));
1198 fV0MScaleFactorMC[0] = 1.0;
1202 // set all missing values to the value of the run before it ....
1203 for (int i=0; i<=(fHighRunN-fLowRunN); i++) {
1204 if (fV0MScaleFactorMC[i] == 0.0) {
1206 fV0MScaleFactorMC[i] = 1.00;
1208 // search for last run number with non-zero value
1209 for (int j=i-1;j>=0;j--) {
1210 if (fV0MScaleFactorMC[j] != 0.0) {
1211 fV0MScaleFactorMC[i] = fV0MScaleFactorMC[j];
1217 } // end loop over checking all run-numbers
1220 // for (int i=0; i<=(fHighRunN-fLowRunN); i++) cout << "Scale Factor = " << fV0MScaleFactorMC[i] << " for Run " << i+fLowRunN << endl;