ROOT logo
// AliAnalysisMultPbCentralitySelector 
// Interface class to centrality estimators for the PbPb
// track-multiplicity analysis
// Michele Floris, CERN

#include "AliAnalysisCentralitySelector.h"
#include "AliESDtrackCuts.h"
#include "AliCentrality.h"
#include "AliESDEvent.h"
#include "AliLog.h"
#include "AliESDVZERO.h"
#include <iostream>
#include "AliMultiplicity.h"

using namespace std;



ClassImp(AliAnalysisCentralitySelector)

Bool_t AliAnalysisCentralitySelector::IsCentralityBinSelected(AliESDEvent* aEsd, AliESDtrackCuts * trackCuts) {

  // Centrality selection
  // On MC cuts on the number of good tracks,
  // On data cuts using AliESDCentrality and the cut requested in ntracks

  //  cout << "Tracks " << trackCuts->CountAcceptedTracks(aEsd) << endl;
  ///  cout << "CENTRALITY " << fUseV0CutRange << " " << fUseMultRange << " " << fMultMin << " " << fMultMax << endl;
  
  if (fUseMultRange && fUseV0CutRange && fUseSPDOuterRange) {
    AliFatal(Form("Cannot use multiple estimators at once: fUseMultRange [%d], fUseV0CutRange[%d], fUseSPDOuterRange[%d]!!",
		  fUseMultRange , fUseV0CutRange , fUseSPDOuterRange)); 
  }

  if (fUseV0CutRange) {

    Float_t multV0=0;
        AliESDVZERO* esdV0 = aEsd->GetVZEROData();
    Float_t multV0A=esdV0->GetMTotV0A();
    Float_t multV0C=esdV0->GetMTotV0C();
    multV0 = multV0A+multV0C;
    
    if (multV0 < fMultMin) return kFALSE;
    if (multV0 > fMultMax) return kFALSE;
    //    cout << "ok" << endl;

  } 
  else if (fUseSPDOuterRange) {

    const AliMultiplicity * mult = aEsd->GetMultiplicity();
    Float_t outerLayerSPD = mult->GetNumberOfITSClusters(1);  
    
    if (outerLayerSPD < fMultMin) return kFALSE;
    if (outerLayerSPD > fMultMax) return kFALSE;
    //    cout << "ok" << endl;

  }
  else if(fUseMultRange) {
    if(!trackCuts){
      AliFatal("Track cuts object is invalid");
    }
    Float_t ntracks = trackCuts->CountAcceptedTracks(aEsd);
    //    cout << "Hey! " << fCentrBin << " " << ntracks << " " << fMultMin <<" - " << fMultMax << endl;
    
    if (fCentrBin == -1 && !fUseMultRange) return kTRUE;
    if (ntracks < fMultMin) return kFALSE;
    if (ntracks > fMultMax) return kFALSE;						       
  } 
  else if(fUsePercentile) {
    AliCentrality *centrality = (AliCentrality*) aEsd->GetCentrality(); 
   return centrality->IsEventInCentralityClass(fMultMin, fMultMax, fCentrEstimator.Data()) ;
  }
  
  else {

   AliCentrality *centrality = (AliCentrality*) aEsd->GetCentrality();
    if(!centrality && !fUseMultRange) {
      AliFatal("Centrality object not available"); 
    }
    else {
      Int_t centrBin = centrality->GetCentralityClass5(fCentrEstimator.Data()) ;    
      if (centrBin != fCentrBin && fCentrBin != -1 && !fUseMultRange) return kFALSE;
    }
  }

  //  cout << "Selected" << endl;
  

  return kTRUE;

}

void AliAnalysisCentralitySelector::Print(Option_t* option ) const {
  // Print some information

  Printf("AliAnalysisCentralitySelector [%s]", option);
  Printf(" - Centrality estimator [%s]",fCentrEstimator.Data());
  Printf(" - Centrality bin       [%d]",fCentrBin);
  if ( fUseMultRange ) {
    Printf ("Using multiplicity range [%1.1f - %1.1f]",fMultMin,fMultMax);
  }
  if ( fUseV0CutRange ) {
    Printf ("Using V0 range [%1.1f - %1.1f]",fMultMin,fMultMax);
  }
  if ( fIsMC ) {    
    Printf("Running on Monte Carlo, actual cut was on tracks multiplicity [%1.1f - %1.1f]",fMultMin,fMultMax);    
  } 
  
}
 AliAnalysisCentralitySelector.cxx:1
 AliAnalysisCentralitySelector.cxx:2
 AliAnalysisCentralitySelector.cxx:3
 AliAnalysisCentralitySelector.cxx:4
 AliAnalysisCentralitySelector.cxx:5
 AliAnalysisCentralitySelector.cxx:6
 AliAnalysisCentralitySelector.cxx:7
 AliAnalysisCentralitySelector.cxx:8
 AliAnalysisCentralitySelector.cxx:9
 AliAnalysisCentralitySelector.cxx:10
 AliAnalysisCentralitySelector.cxx:11
 AliAnalysisCentralitySelector.cxx:12
 AliAnalysisCentralitySelector.cxx:13
 AliAnalysisCentralitySelector.cxx:14
 AliAnalysisCentralitySelector.cxx:15
 AliAnalysisCentralitySelector.cxx:16
 AliAnalysisCentralitySelector.cxx:17
 AliAnalysisCentralitySelector.cxx:18
 AliAnalysisCentralitySelector.cxx:19
 AliAnalysisCentralitySelector.cxx:20
 AliAnalysisCentralitySelector.cxx:21
 AliAnalysisCentralitySelector.cxx:22
 AliAnalysisCentralitySelector.cxx:23
 AliAnalysisCentralitySelector.cxx:24
 AliAnalysisCentralitySelector.cxx:25
 AliAnalysisCentralitySelector.cxx:26
 AliAnalysisCentralitySelector.cxx:27
 AliAnalysisCentralitySelector.cxx:28
 AliAnalysisCentralitySelector.cxx:29
 AliAnalysisCentralitySelector.cxx:30
 AliAnalysisCentralitySelector.cxx:31
 AliAnalysisCentralitySelector.cxx:32
 AliAnalysisCentralitySelector.cxx:33
 AliAnalysisCentralitySelector.cxx:34
 AliAnalysisCentralitySelector.cxx:35
 AliAnalysisCentralitySelector.cxx:36
 AliAnalysisCentralitySelector.cxx:37
 AliAnalysisCentralitySelector.cxx:38
 AliAnalysisCentralitySelector.cxx:39
 AliAnalysisCentralitySelector.cxx:40
 AliAnalysisCentralitySelector.cxx:41
 AliAnalysisCentralitySelector.cxx:42
 AliAnalysisCentralitySelector.cxx:43
 AliAnalysisCentralitySelector.cxx:44
 AliAnalysisCentralitySelector.cxx:45
 AliAnalysisCentralitySelector.cxx:46
 AliAnalysisCentralitySelector.cxx:47
 AliAnalysisCentralitySelector.cxx:48
 AliAnalysisCentralitySelector.cxx:49
 AliAnalysisCentralitySelector.cxx:50
 AliAnalysisCentralitySelector.cxx:51
 AliAnalysisCentralitySelector.cxx:52
 AliAnalysisCentralitySelector.cxx:53
 AliAnalysisCentralitySelector.cxx:54
 AliAnalysisCentralitySelector.cxx:55
 AliAnalysisCentralitySelector.cxx:56
 AliAnalysisCentralitySelector.cxx:57
 AliAnalysisCentralitySelector.cxx:58
 AliAnalysisCentralitySelector.cxx:59
 AliAnalysisCentralitySelector.cxx:60
 AliAnalysisCentralitySelector.cxx:61
 AliAnalysisCentralitySelector.cxx:62
 AliAnalysisCentralitySelector.cxx:63
 AliAnalysisCentralitySelector.cxx:64
 AliAnalysisCentralitySelector.cxx:65
 AliAnalysisCentralitySelector.cxx:66
 AliAnalysisCentralitySelector.cxx:67
 AliAnalysisCentralitySelector.cxx:68
 AliAnalysisCentralitySelector.cxx:69
 AliAnalysisCentralitySelector.cxx:70
 AliAnalysisCentralitySelector.cxx:71
 AliAnalysisCentralitySelector.cxx:72
 AliAnalysisCentralitySelector.cxx:73
 AliAnalysisCentralitySelector.cxx:74
 AliAnalysisCentralitySelector.cxx:75
 AliAnalysisCentralitySelector.cxx:76
 AliAnalysisCentralitySelector.cxx:77
 AliAnalysisCentralitySelector.cxx:78
 AliAnalysisCentralitySelector.cxx:79
 AliAnalysisCentralitySelector.cxx:80
 AliAnalysisCentralitySelector.cxx:81
 AliAnalysisCentralitySelector.cxx:82
 AliAnalysisCentralitySelector.cxx:83
 AliAnalysisCentralitySelector.cxx:84
 AliAnalysisCentralitySelector.cxx:85
 AliAnalysisCentralitySelector.cxx:86
 AliAnalysisCentralitySelector.cxx:87
 AliAnalysisCentralitySelector.cxx:88
 AliAnalysisCentralitySelector.cxx:89
 AliAnalysisCentralitySelector.cxx:90
 AliAnalysisCentralitySelector.cxx:91
 AliAnalysisCentralitySelector.cxx:92
 AliAnalysisCentralitySelector.cxx:93
 AliAnalysisCentralitySelector.cxx:94
 AliAnalysisCentralitySelector.cxx:95
 AliAnalysisCentralitySelector.cxx:96
 AliAnalysisCentralitySelector.cxx:97
 AliAnalysisCentralitySelector.cxx:98
 AliAnalysisCentralitySelector.cxx:99
 AliAnalysisCentralitySelector.cxx:100
 AliAnalysisCentralitySelector.cxx:101
 AliAnalysisCentralitySelector.cxx:102
 AliAnalysisCentralitySelector.cxx:103
 AliAnalysisCentralitySelector.cxx:104
 AliAnalysisCentralitySelector.cxx:105
 AliAnalysisCentralitySelector.cxx:106
 AliAnalysisCentralitySelector.cxx:107
 AliAnalysisCentralitySelector.cxx:108
 AliAnalysisCentralitySelector.cxx:109