ROOT logo
#ifndef ALIANALYSISTASKBF_H
#define ALIANALYSISTASKBF_H

// Analysis task for the BF code
// Authors: Panos Cristakoglou@cern.ch

class TList;
class TH1F;
class TH2F;
class TH2D;
class TF1;

class AliBalance;
class AliESDtrackCuts;

#include "AliAnalysisTaskSE.h"
#include "AliBalance.h"

#include "AliPID.h"  
#include "AliPIDResponse.h"
#include "AliPIDCombined.h"
 

class AliAnalysisTaskBF : public AliAnalysisTaskSE {
 public:
  AliAnalysisTaskBF(const char *name = "AliAnalysisTaskBF");
  virtual ~AliAnalysisTaskBF(); 
  
  
  virtual void   UserCreateOutputObjects();
  virtual void   UserExec(Option_t *option);
  virtual void   FinishTaskOutput();
  virtual void   Terminate(Option_t *);

  void SetAnalysisObject(AliBalance *const analysis) {
    fBalance         = analysis;
    }
  void SetShufflingObject(AliBalance *const analysisShuffled) {
    fRunShuffling = kTRUE;
    fShuffledBalance = analysisShuffled;
  }
  void SetAnalysisCutObject(AliESDtrackCuts *const trackCuts) {
    fESDtrackCuts = trackCuts;}
  void SetVertexDiamond(Double_t vx, Double_t vy, Double_t vz) {
    fVxMax = vx;
    fVyMax = vy;
    fVzMax = vz;
  }

  //==============AOD analysis==============//
  void SetAODtrackCutBit(Int_t bit){
    fAODtrackCutBit = bit;
  }

  void SetKinematicsCutsAOD(Double_t ptmin, Double_t ptmax, Double_t etamin, Double_t etamax){
    fPtMin  = ptmin;    fPtMax  = ptmax;
    fEtaMin = etamin;   fEtaMax = etamax;
  }

  void SetExtraDCACutsAOD(Double_t DCAxy, Double_t DCAz){
    fDCAxyCut  = DCAxy;
    fDCAzCut = DCAz;
  }

   void SetExtraTPCCutsAOD(Double_t maxTPCchi2, Int_t minNClustersTPC){
    fTPCchi2Cut      = maxTPCchi2;
    fNClustersTPCCut = minNClustersTPC;
  }

  //==============MC analysis==============//
   void SetKinematicsCutsMC(Double_t ptmin, Double_t ptmax,Double_t etamin, Double_t etamax){
    fPtMin  = ptmin;   fPtMax  = ptmax;
    fEtaMin = etamin;  fEtaMax = etamax;
  }
  void UseFlowAfterBurner(TF1 *gDifferentialV2) {
    fDifferentialV2 = gDifferentialV2;
    fUseFlowAfterBurner = kTRUE;
  }
  void ExcludeResonancesInMC() {fExcludeResonancesInMC = kTRUE;}

  void SetPDGCode(Int_t gPdgCode) {
    fUseMCPdgCode = kTRUE;
    fPDGCodeToBeAnalyzed = gPdgCode;
  }

  //Centrality
  void SetCentralityEstimator(const char* centralityEstimator) {fCentralityEstimator = centralityEstimator;}
  const char* GetCentralityEstimator (void) const {return fCentralityEstimator;}
  void SetCentralityPercentileRange(Double_t min, Double_t max) { 
    fUseCentrality = kTRUE;
    fCentralityPercentileMin=min;
    fCentralityPercentileMax=max;
  }
  void SetImpactParameterRange(Double_t min, Double_t max) { 
    fUseCentrality = kTRUE;
    fImpactParameterMin=min;
    fImpactParameterMax=max;
  }

  //multiplicity
  void SetMultiplicityRange(Int_t min, Int_t max) {
    fUseMultiplicity = kTRUE;
    fNumberOfAcceptedTracksMin = min;
    fNumberOfAcceptedTracksMax = max;}
  
  void UseOfflineTrigger() {fUseOfflineTrigger = kTRUE;}
  
  //Acceptance filter
  void SetAcceptanceParameterization(TF1 *parameterization) {
    fAcceptanceParameterization = parameterization;}

  //pid
  enum kDetectorUsedForPID { kTPCpid, kTOFpid, kTPCTOF }; // default TPC & TOF pid (via GetTPCpid & GetTOFpid)  
  enum kParticleOfInterest { kElectron, kMuon, kPion, kKaon, kProton, kPhoton, kPi0, kNeutron, kKaon0, kEleCon, kDeuteron, kTriton, kHe3, kAlpha, kUnknown};  

  void SetUseBayesianPID(Double_t gMinProbabilityValue) {
    fUsePID = kTRUE; fUsePIDnSigma = kFALSE; fUsePIDPropabilities = kTRUE;
    fMinAcceptedPIDProbability = gMinProbabilityValue; }

  void SetUseNSigmaPID(Double_t gMaxNSigma) {
    fUsePID = kTRUE; fUsePIDPropabilities = kFALSE; fUsePIDnSigma = kTRUE;
    fPIDNSigma = gMaxNSigma; }

  void SetParticleOfInterest(kParticleOfInterest poi) {
    fParticleOfInterest = poi;}
  void SetDetectorUsedForPID(kDetectorUsedForPID detConfig) {
    fPidDetectorConfig = detConfig;}

 private:
  AliBalance *fBalance; //BF object
  Bool_t fRunShuffling;//run shuffling or not
  AliBalance *fShuffledBalance; //BF object (shuffled)
  TList *fList; //fList object
  TList *fListBF; //fList object
  TList *fListBFS; //fList object
  TList *fHistListPIDQA;  //! list of histograms

  TH2D *fHistEventStats; //event stats
  TH2F *fHistCentStats; //centrality stats
  TH1F *fHistTriggerStats; //trigger stats
  TH1F *fHistTrackStats; //Track filter bit stats
  TH1F *fHistVx; //x coordinate of the primary vertex
  TH1F *fHistVy; //y coordinate of the primary vertex
  TH1F *fHistVz; //z coordinate of the primary vertex

  TH2F *fHistClus;//number of clusters (QA histogram)
  TH2F *fHistDCA;//DCA  (QA histogram)
  TH1F *fHistChi2;//track chi2 (QA histogram)
  TH1F *fHistPt;//transverse momentum (QA histogram)
  TH1F *fHistEta;//pseudorapidity (QA histogram)
  TH1F *fHistRapidity;//rapidity (QA histogram)
  TH1F *fHistPhi;//phi (QA histogram)
  TH1F *fHistPhiBefore;//phi before v2 afterburner (QA histogram)
  TH1F *fHistPhiAfter;//phi after v2 afterburner (QA histogram)
  TH1F *fHistPhiPos;//phi for positive particles (QA histogram)
  TH1F *fHistPhiNeg;//phi for negative particles (QA histogram)
  TH2F *fHistV0M;//V0 multiplicities (QA histogram)
  TH2F *fHistRefTracks;//reference track multiplicities (QA histogram)

  //============PID============//
  TH2D *fHistdEdxVsPTPCbeforePID;//TPC dEdx vs momentum before PID cuts (QA histogram)
  TH2D *fHistBetavsPTOFbeforePID;//beta vs momentum before PID cuts (QA histogram)
  TH2D *fHistProbTPCvsPtbeforePID; //TPC probability vs pT before PID cuts (QA histogram)
  TH2D *fHistProbTOFvsPtbeforePID;//TOF probability vs pT before PID cuts (QA histogram)
  TH2D *fHistProbTPCTOFvsPtbeforePID;//TOF/TPC probability vs pT before PID cuts (QA histogram)
  TH2D *fHistNSigmaTPCvsPtbeforePID;//TPC nsigma vs pT before PID cuts (QA histogram)
  TH2D *fHistNSigmaTOFvsPtbeforePID;//TOF nsigma vs pT before PID cuts (QA histogram)
  TH2D *fHistdEdxVsPTPCafterPID;//TPC dEdx vs momentum after PID cuts (QA histogram)
  TH2D *fHistBetavsPTOFafterPID;//beta vs momentum after PID cuts (QA histogram)
  TH2D *fHistProbTPCvsPtafterPID; //TPC probability vs pT after PID cuts (QA histogram)
  TH2D *fHistProbTOFvsPtafterPID;//TOF probability vs pT after PID cuts (QA histogram)
  TH2D *fHistProbTPCTOFvsPtafterPID;//TOF/TPC probability vs pT after PID cuts (QA histogram)
  TH2D *fHistNSigmaTPCvsPtafterPID;//TPC nsigma vs pT after PID cuts (QA histogram)
  TH2D *fHistNSigmaTOFvsPtafterPID;//TOF nsigma vs pT after PID cuts (QA histogram)


  AliPIDResponse *fPIDResponse;     //! PID response object
  AliPIDCombined       *fPIDCombined;     //! combined PID object
  
  kParticleOfInterest  fParticleOfInterest;//analyzed particle
  kDetectorUsedForPID   fPidDetectorConfig;//used detector for PID

  Bool_t fUsePID; //flag to use PID 
  Bool_t fUsePIDnSigma;//flag to use nsigma method for PID
  Bool_t fUsePIDPropabilities;//flag to use probability method for PID
  Double_t fPIDNSigma;//nsigma cut for PID
  Double_t fMinAcceptedPIDProbability;//probability cut for PID
  //============PID============//

  AliESDtrackCuts *fESDtrackCuts; //ESD track cuts

  TString fCentralityEstimator;      //"V0M","TRK","TKL","ZDC","FMD"
  Bool_t fUseCentrality;//use the centrality (PbPb) or not (pp)
  Double_t fCentralityPercentileMin;//centrality percentile min
  Double_t fCentralityPercentileMax;//centrality percentile max
  Double_t fImpactParameterMin;//impact parameter min (used for MC)
  Double_t fImpactParameterMax;//impact parameter max (used for MC)

  Bool_t fUseMultiplicity;//use the multiplicity cuts
  Int_t fNumberOfAcceptedTracksMin;//min. number of number of accepted tracks (used for the multiplicity dependence study - pp)
  Int_t fNumberOfAcceptedTracksMax;//max. number of number of accepted tracks (used for the multiplicity dependence study - pp)
 
  TH2D *fHistNumberOfAcceptedTracks;//hisot to store the number of accepted tracks

  Bool_t fUseOfflineTrigger;//Usage of the offline trigger selection

  Double_t fVxMax;//vxmax
  Double_t fVyMax;//vymax
  Double_t fVzMax;//vzmax

  Int_t fAODtrackCutBit;//track cut bit from track selection (only used for AODs)

  Double_t fPtMin;//only used for AODs
  Double_t fPtMax;//only used for AODs
  Double_t fEtaMin;//only used for AODs
  Double_t fEtaMax;//only used for AODs

  Double_t fDCAxyCut;//only used for AODs
  Double_t fDCAzCut;//only used for AODs

  Double_t fTPCchi2Cut;//only used for AODs
  Int_t fNClustersTPCCut;//only used for AODs

  TF1 *fAcceptanceParameterization;//acceptance filter used for MC

  TF1 *fDifferentialV2;//pt-differential v2 (from real data)
  Bool_t fUseFlowAfterBurner;//Usage of a flow after burner

  Bool_t fExcludeResonancesInMC;//flag to exclude the resonances' decay products from the MC analysis
  Bool_t fUseMCPdgCode; //Boolean to analyze a set of particles in MC
  Int_t fPDGCodeToBeAnalyzed; //Analyze a set of particles in MC

  

  AliAnalysisTaskBF(const AliAnalysisTaskBF&); // not implemented
  AliAnalysisTaskBF& operator=(const AliAnalysisTaskBF&); // not implemented
  
  ClassDef(AliAnalysisTaskBF, 5); // example of analysis
};

#endif
 AliAnalysisTaskBF.h:1
 AliAnalysisTaskBF.h:2
 AliAnalysisTaskBF.h:3
 AliAnalysisTaskBF.h:4
 AliAnalysisTaskBF.h:5
 AliAnalysisTaskBF.h:6
 AliAnalysisTaskBF.h:7
 AliAnalysisTaskBF.h:8
 AliAnalysisTaskBF.h:9
 AliAnalysisTaskBF.h:10
 AliAnalysisTaskBF.h:11
 AliAnalysisTaskBF.h:12
 AliAnalysisTaskBF.h:13
 AliAnalysisTaskBF.h:14
 AliAnalysisTaskBF.h:15
 AliAnalysisTaskBF.h:16
 AliAnalysisTaskBF.h:17
 AliAnalysisTaskBF.h:18
 AliAnalysisTaskBF.h:19
 AliAnalysisTaskBF.h:20
 AliAnalysisTaskBF.h:21
 AliAnalysisTaskBF.h:22
 AliAnalysisTaskBF.h:23
 AliAnalysisTaskBF.h:24
 AliAnalysisTaskBF.h:25
 AliAnalysisTaskBF.h:26
 AliAnalysisTaskBF.h:27
 AliAnalysisTaskBF.h:28
 AliAnalysisTaskBF.h:29
 AliAnalysisTaskBF.h:30
 AliAnalysisTaskBF.h:31
 AliAnalysisTaskBF.h:32
 AliAnalysisTaskBF.h:33
 AliAnalysisTaskBF.h:34
 AliAnalysisTaskBF.h:35
 AliAnalysisTaskBF.h:36
 AliAnalysisTaskBF.h:37
 AliAnalysisTaskBF.h:38
 AliAnalysisTaskBF.h:39
 AliAnalysisTaskBF.h:40
 AliAnalysisTaskBF.h:41
 AliAnalysisTaskBF.h:42
 AliAnalysisTaskBF.h:43
 AliAnalysisTaskBF.h:44
 AliAnalysisTaskBF.h:45
 AliAnalysisTaskBF.h:46
 AliAnalysisTaskBF.h:47
 AliAnalysisTaskBF.h:48
 AliAnalysisTaskBF.h:49
 AliAnalysisTaskBF.h:50
 AliAnalysisTaskBF.h:51
 AliAnalysisTaskBF.h:52
 AliAnalysisTaskBF.h:53
 AliAnalysisTaskBF.h:54
 AliAnalysisTaskBF.h:55
 AliAnalysisTaskBF.h:56
 AliAnalysisTaskBF.h:57
 AliAnalysisTaskBF.h:58
 AliAnalysisTaskBF.h:59
 AliAnalysisTaskBF.h:60
 AliAnalysisTaskBF.h:61
 AliAnalysisTaskBF.h:62
 AliAnalysisTaskBF.h:63
 AliAnalysisTaskBF.h:64
 AliAnalysisTaskBF.h:65
 AliAnalysisTaskBF.h:66
 AliAnalysisTaskBF.h:67
 AliAnalysisTaskBF.h:68
 AliAnalysisTaskBF.h:69
 AliAnalysisTaskBF.h:70
 AliAnalysisTaskBF.h:71
 AliAnalysisTaskBF.h:72
 AliAnalysisTaskBF.h:73
 AliAnalysisTaskBF.h:74
 AliAnalysisTaskBF.h:75
 AliAnalysisTaskBF.h:76
 AliAnalysisTaskBF.h:77
 AliAnalysisTaskBF.h:78
 AliAnalysisTaskBF.h:79
 AliAnalysisTaskBF.h:80
 AliAnalysisTaskBF.h:81
 AliAnalysisTaskBF.h:82
 AliAnalysisTaskBF.h:83
 AliAnalysisTaskBF.h:84
 AliAnalysisTaskBF.h:85
 AliAnalysisTaskBF.h:86
 AliAnalysisTaskBF.h:87
 AliAnalysisTaskBF.h:88
 AliAnalysisTaskBF.h:89
 AliAnalysisTaskBF.h:90
 AliAnalysisTaskBF.h:91
 AliAnalysisTaskBF.h:92
 AliAnalysisTaskBF.h:93
 AliAnalysisTaskBF.h:94
 AliAnalysisTaskBF.h:95
 AliAnalysisTaskBF.h:96
 AliAnalysisTaskBF.h:97
 AliAnalysisTaskBF.h:98
 AliAnalysisTaskBF.h:99
 AliAnalysisTaskBF.h:100
 AliAnalysisTaskBF.h:101
 AliAnalysisTaskBF.h:102
 AliAnalysisTaskBF.h:103
 AliAnalysisTaskBF.h:104
 AliAnalysisTaskBF.h:105
 AliAnalysisTaskBF.h:106
 AliAnalysisTaskBF.h:107
 AliAnalysisTaskBF.h:108
 AliAnalysisTaskBF.h:109
 AliAnalysisTaskBF.h:110
 AliAnalysisTaskBF.h:111
 AliAnalysisTaskBF.h:112
 AliAnalysisTaskBF.h:113
 AliAnalysisTaskBF.h:114
 AliAnalysisTaskBF.h:115
 AliAnalysisTaskBF.h:116
 AliAnalysisTaskBF.h:117
 AliAnalysisTaskBF.h:118
 AliAnalysisTaskBF.h:119
 AliAnalysisTaskBF.h:120
 AliAnalysisTaskBF.h:121
 AliAnalysisTaskBF.h:122
 AliAnalysisTaskBF.h:123
 AliAnalysisTaskBF.h:124
 AliAnalysisTaskBF.h:125
 AliAnalysisTaskBF.h:126
 AliAnalysisTaskBF.h:127
 AliAnalysisTaskBF.h:128
 AliAnalysisTaskBF.h:129
 AliAnalysisTaskBF.h:130
 AliAnalysisTaskBF.h:131
 AliAnalysisTaskBF.h:132
 AliAnalysisTaskBF.h:133
 AliAnalysisTaskBF.h:134
 AliAnalysisTaskBF.h:135
 AliAnalysisTaskBF.h:136
 AliAnalysisTaskBF.h:137
 AliAnalysisTaskBF.h:138
 AliAnalysisTaskBF.h:139
 AliAnalysisTaskBF.h:140
 AliAnalysisTaskBF.h:141
 AliAnalysisTaskBF.h:142
 AliAnalysisTaskBF.h:143
 AliAnalysisTaskBF.h:144
 AliAnalysisTaskBF.h:145
 AliAnalysisTaskBF.h:146
 AliAnalysisTaskBF.h:147
 AliAnalysisTaskBF.h:148
 AliAnalysisTaskBF.h:149
 AliAnalysisTaskBF.h:150
 AliAnalysisTaskBF.h:151
 AliAnalysisTaskBF.h:152
 AliAnalysisTaskBF.h:153
 AliAnalysisTaskBF.h:154
 AliAnalysisTaskBF.h:155
 AliAnalysisTaskBF.h:156
 AliAnalysisTaskBF.h:157
 AliAnalysisTaskBF.h:158
 AliAnalysisTaskBF.h:159
 AliAnalysisTaskBF.h:160
 AliAnalysisTaskBF.h:161
 AliAnalysisTaskBF.h:162
 AliAnalysisTaskBF.h:163
 AliAnalysisTaskBF.h:164
 AliAnalysisTaskBF.h:165
 AliAnalysisTaskBF.h:166
 AliAnalysisTaskBF.h:167
 AliAnalysisTaskBF.h:168
 AliAnalysisTaskBF.h:169
 AliAnalysisTaskBF.h:170
 AliAnalysisTaskBF.h:171
 AliAnalysisTaskBF.h:172
 AliAnalysisTaskBF.h:173
 AliAnalysisTaskBF.h:174
 AliAnalysisTaskBF.h:175
 AliAnalysisTaskBF.h:176
 AliAnalysisTaskBF.h:177
 AliAnalysisTaskBF.h:178
 AliAnalysisTaskBF.h:179
 AliAnalysisTaskBF.h:180
 AliAnalysisTaskBF.h:181
 AliAnalysisTaskBF.h:182
 AliAnalysisTaskBF.h:183
 AliAnalysisTaskBF.h:184
 AliAnalysisTaskBF.h:185
 AliAnalysisTaskBF.h:186
 AliAnalysisTaskBF.h:187
 AliAnalysisTaskBF.h:188
 AliAnalysisTaskBF.h:189
 AliAnalysisTaskBF.h:190
 AliAnalysisTaskBF.h:191
 AliAnalysisTaskBF.h:192
 AliAnalysisTaskBF.h:193
 AliAnalysisTaskBF.h:194
 AliAnalysisTaskBF.h:195
 AliAnalysisTaskBF.h:196
 AliAnalysisTaskBF.h:197
 AliAnalysisTaskBF.h:198
 AliAnalysisTaskBF.h:199
 AliAnalysisTaskBF.h:200
 AliAnalysisTaskBF.h:201
 AliAnalysisTaskBF.h:202
 AliAnalysisTaskBF.h:203
 AliAnalysisTaskBF.h:204
 AliAnalysisTaskBF.h:205
 AliAnalysisTaskBF.h:206
 AliAnalysisTaskBF.h:207
 AliAnalysisTaskBF.h:208
 AliAnalysisTaskBF.h:209
 AliAnalysisTaskBF.h:210
 AliAnalysisTaskBF.h:211
 AliAnalysisTaskBF.h:212
 AliAnalysisTaskBF.h:213
 AliAnalysisTaskBF.h:214
 AliAnalysisTaskBF.h:215
 AliAnalysisTaskBF.h:216
 AliAnalysisTaskBF.h:217
 AliAnalysisTaskBF.h:218
 AliAnalysisTaskBF.h:219
 AliAnalysisTaskBF.h:220
 AliAnalysisTaskBF.h:221
 AliAnalysisTaskBF.h:222
 AliAnalysisTaskBF.h:223
 AliAnalysisTaskBF.h:224
 AliAnalysisTaskBF.h:225
 AliAnalysisTaskBF.h:226
 AliAnalysisTaskBF.h:227
 AliAnalysisTaskBF.h:228
 AliAnalysisTaskBF.h:229
 AliAnalysisTaskBF.h:230
 AliAnalysisTaskBF.h:231
 AliAnalysisTaskBF.h:232
 AliAnalysisTaskBF.h:233
 AliAnalysisTaskBF.h:234
 AliAnalysisTaskBF.h:235
 AliAnalysisTaskBF.h:236
 AliAnalysisTaskBF.h:237
 AliAnalysisTaskBF.h:238
 AliAnalysisTaskBF.h:239
 AliAnalysisTaskBF.h:240
 AliAnalysisTaskBF.h:241