]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGLF/STRANGENESS/LambdaK0PbPb/MainStreamAnalysis/AliAnalysisCentralitySelector.cxx
Renaming subdirectory
[u/mrichter/AliRoot.git] / PWGLF / STRANGENESS / LambdaK0PbPb / MainStreamAnalysis / 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 (multV0 < fMultMin) return kFALSE;
44     if (multV0 > fMultMax) return kFALSE;
45     //    cout << "ok" << endl;
46
47   } 
48   else if (fUseSPDOuterRange) {
49
50     const AliMultiplicity * mult = aEsd->GetMultiplicity();
51     Float_t outerLayerSPD = mult->GetNumberOfITSClusters(1);  
52     
53     if (outerLayerSPD < fMultMin) return kFALSE;
54     if (outerLayerSPD > fMultMax) return kFALSE;
55     //    cout << "ok" << endl;
56
57   }
58   else if(fUseMultRange) {
59     if(!trackCuts){
60       AliFatal("Track cuts object is invalid");
61     }
62     Float_t ntracks = trackCuts->CountAcceptedTracks(aEsd);
63     //    cout << "Hey! " << fCentrBin << " " << ntracks << " " << fMultMin <<" - " << fMultMax << endl;
64     
65     if (fCentrBin == -1 && !fUseMultRange) return kTRUE;
66     if (ntracks < fMultMin) return kFALSE;
67     if (ntracks > fMultMax) return kFALSE;                                                     
68   } 
69   else if(fUsePercentile) {
70     AliCentrality *centrality = (AliCentrality*) aEsd->GetCentrality(); 
71    return centrality->IsEventInCentralityClass(fMultMin, fMultMax, fCentrEstimator.Data()) ;
72   }
73   
74   else {
75
76    AliCentrality *centrality = (AliCentrality*) aEsd->GetCentrality();
77     if(!centrality && !fUseMultRange) {
78       AliFatal("Centrality object not available"); 
79     }
80     else {
81       Int_t centrBin = centrality->GetCentralityClass5(fCentrEstimator.Data()) ;    
82       if (centrBin != fCentrBin && fCentrBin != -1 && !fUseMultRange) return kFALSE;
83     }
84   }
85
86   //  cout << "Selected" << endl;
87   
88
89   return kTRUE;
90
91 }
92
93 void AliAnalysisCentralitySelector::Print(Option_t* option ) const {
94   // Print some information
95
96   Printf("AliAnalysisCentralitySelector [%s]", option);
97   Printf(" - Centrality estimator [%s]",fCentrEstimator.Data());
98   Printf(" - Centrality bin       [%d]",fCentrBin);
99   if ( fUseMultRange ) {
100     Printf ("Using multiplicity range [%1.1f - %1.1f]",fMultMin,fMultMax);
101   }
102   if ( fUseV0CutRange ) {
103     Printf ("Using V0 range [%1.1f - %1.1f]",fMultMin,fMultMax);
104   }
105   if ( fIsMC ) {    
106     Printf("Running on Monte Carlo, actual cut was on tracks multiplicity [%1.1f - %1.1f]",fMultMin,fMultMax);    
107   } 
108   
109 }