1 // AliAnalysisMultPbCentralitySelector
2 // Interface class to centrality estimators for the PbPb
3 // track-multiplicity analysis
4 // Michele Floris, CERN
6 #include "AliAnalysisCentralitySelector.h"
7 #include "AliESDtrackCuts.h"
8 #include "AliCentrality.h"
9 #include "AliESDEvent.h"
11 #include "AliESDVZERO.h"
13 #include "AliMultiplicity.h"
19 ClassImp(AliAnalysisCentralitySelector)
21 Bool_t AliAnalysisCentralitySelector::IsCentralityBinSelected(AliESDEvent* aEsd, AliESDtrackCuts * trackCuts) {
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
27 // cout << "Tracks " << trackCuts->CountAcceptedTracks(aEsd) << endl;
28 /// cout << "CENTRALITY " << fUseV0CutRange << " " << fUseMultRange << " " << fMultMin << " " << fMultMax << endl;
30 if (fUseMultRange && fUseV0CutRange && fUseSPDOuterRange) {
31 AliFatal(Form("Cannot use multiple estimators at once: fUseMultRange [%d], fUseV0CutRange[%d], fUseSPDOuterRange[%d]!!",
32 fUseMultRange , fUseV0CutRange , fUseSPDOuterRange));
38 AliESDVZERO* esdV0 = aEsd->GetVZEROData();
39 Float_t multV0A=esdV0->GetMTotV0A();
40 Float_t multV0C=esdV0->GetMTotV0C();
41 multV0 = multV0A+multV0C;
43 if (multV0 < fMultMin) return kFALSE;
44 if (multV0 > fMultMax) return kFALSE;
45 // cout << "ok" << endl;
48 else if (fUseSPDOuterRange) {
50 const AliMultiplicity * mult = aEsd->GetMultiplicity();
51 Float_t outerLayerSPD = mult->GetNumberOfITSClusters(1);
53 if (outerLayerSPD < fMultMin) return kFALSE;
54 if (outerLayerSPD > fMultMax) return kFALSE;
55 // cout << "ok" << endl;
58 else if(fUseMultRange) {
60 AliFatal("Track cuts object is invalid");
62 Float_t ntracks = trackCuts->CountAcceptedTracks(aEsd);
63 // cout << "Hey! " << fCentrBin << " " << ntracks << " " << fMultMin <<" - " << fMultMax << endl;
65 if (fCentrBin == -1 && !fUseMultRange) return kTRUE;
66 if (ntracks < fMultMin) return kFALSE;
67 if (ntracks > fMultMax) return kFALSE;
69 else if(fUsePercentile) {
70 AliCentrality *centrality = (AliCentrality*) aEsd->GetCentrality();
71 return centrality->IsEventInCentralityClass(fMultMin, fMultMax, fCentrEstimator.Data()) ;
76 AliCentrality *centrality = (AliCentrality*) aEsd->GetCentrality();
77 if(!centrality && !fUseMultRange) {
78 AliFatal("Centrality object not available");
81 Int_t centrBin = centrality->GetCentralityClass5(fCentrEstimator.Data()) ;
82 if (centrBin != fCentrBin && fCentrBin != -1 && !fUseMultRange) return kFALSE;
86 // cout << "Selected" << endl;
93 void AliAnalysisCentralitySelector::Print(Option_t* option ) const {
94 // Print some information
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);
102 if ( fUseV0CutRange ) {
103 Printf ("Using V0 range [%1.1f - %1.1f]",fMultMin,fMultMax);
106 Printf("Running on Monte Carlo, actual cut was on tracks multiplicity [%1.1f - %1.1f]",fMultMin,fMultMax);