b5f65f3851448813df30f10e2c8a16b458b77267
[u/mrichter/AliRoot.git] / PWG2 / SPECTRA / LambdaK0PbPb / AliAnalysisCentralitySelector.cxx
1 // AliAnalysisMultPbCentralitySelector 
2 // Interface class to centrality estimators for the PbPb
3 // track-multiplicity analysis
4 // Michele Floris, CERN
5
6 #include "AliAnalysisCentralitySelector.h"
7 #include "AliESDtrackCuts.h"
8 #include "AliCentrality.h"
9 #include "AliESDEvent.h"
10 #include "AliLog.h"
11 #include "AliESDVZERO.h"
12 #include <iostream>
13 #include "AliMultiplicity.h"
14
15 using namespace std;
16
17
18
19 ClassImp(AliAnalysisCentralitySelector)
20
21 Bool_t AliAnalysisCentralitySelector::IsCentralityBinSelected(AliESDEvent* aEsd, AliESDtrackCuts * trackCuts) {
22
23   // Centrality selection
24   // On MC cuts on the number of good tracks,
25   // On data cuts using AliESDCentrality and the cut requested in ntracks
26
27   //  cout << "Tracks " << trackCuts->CountAcceptedTracks(aEsd) << endl;
28   ///  cout << "CENTRALITY " << fUseV0CutRange << " " << fUseMultRange << " " << fMultMin << " " << fMultMax << endl;
29   
30   if (fUseMultRange && fUseV0CutRange && fUseSPDOuterRange) {
31     AliFatal(Form("Cannot use multiple estimators at once: fUseMultRange [%d], fUseV0CutRange[%d], fUseSPDOuterRange[%d]!!",
32                   fUseMultRange , fUseV0CutRange , fUseSPDOuterRange)); 
33   }
34
35   if (fUseV0CutRange) {
36
37     Float_t multV0=0;
38     AliESDVZERO* esdV0 = aEsd->GetVZEROData();
39     Float_t multV0A=esdV0->GetMTotV0A();
40     Float_t multV0C=esdV0->GetMTotV0C();
41     multV0 = multV0A+multV0C;
42     
43     if (fIsMC) multV0 = 0.85871 * multV0; // FIXME: still valid? DEPRECATED
44     if (multV0 < fMultMin) return kFALSE;
45     if (multV0 > fMultMax) return kFALSE;
46     //    cout << "ok" << endl;
47
48   } 
49   else if (fUseSPDOuterRange) {
50
51     const AliMultiplicity * mult = aEsd->GetMultiplicity();
52     Float_t outerLayerSPD = mult->GetNumberOfITSClusters(1);  
53     
54     if (outerLayerSPD < fMultMin) return kFALSE;
55     if (outerLayerSPD > fMultMax) return kFALSE;
56     //    cout << "ok" << endl;
57
58   }
59  else if(fUseMultRange) {
60     if(!trackCuts){
61       AliFatal("Track cuts object is invalid");
62     }
63     Float_t ntracks = trackCuts->CountAcceptedTracks(aEsd);
64     //    cout << "Hey! " << fCentrBin << " " << ntracks << " " << fMultMin <<" - " << fMultMax << endl;
65     
66     if (fCentrBin == -1 && !fUseMultRange) return kTRUE;
67     if (ntracks < fMultMin) return kFALSE;
68     if (ntracks > fMultMax) return kFALSE;                                                     
69   } else {
70
71    AliCentrality *centrality = (AliCentrality*) aEsd->GetCentrality(); // FIXME: change to alicentrality?
72     if(!centrality && !fUseMultRange) {
73       AliFatal("Centrality object not available"); 
74     }
75     else {
76       Int_t centrBin = centrality->GetCentralityClass5(fCentrEstimator.Data()) ;    
77       if (centrBin != fCentrBin && fCentrBin != -1 && !fUseMultRange) return kFALSE;
78     }
79   }
80
81   //  cout << "Selected" << endl;
82   
83
84   return kTRUE;
85
86 }
87
88 void AliAnalysisCentralitySelector::Print(Option_t* option ) const {
89   // Print some information
90
91   Printf("AliAnalysisCentralitySelector [%s]", option);
92   Printf(" - Centrality estimator [%s]",fCentrEstimator.Data());
93   Printf(" - Centrality bin       [%d]",fCentrBin);
94   if ( fUseMultRange ) {
95     Printf ("Using multiplicity range [%1.1f - %1.1f]",fMultMin,fMultMax);
96   }
97   if ( fUseV0CutRange ) {
98     Printf ("Using V0 range [%1.1f - %1.1f]",fMultMin,fMultMax);
99   }
100   if ( fIsMC ) {    
101     Printf("Running on Monte Carlo, actual cut was on tracks multiplicity [%1.1f - %1.1f]",fMultMin,fMultMax);    
102   } 
103   
104 }