ROOT logo
#ifndef ALIANALYSISTASKPIDFLUCTUATION_H
#define ALIANALYSISTASKPIDFLUCTUATION_H

/* 
 * updated by Zubayer Ahammed to instruct CINT about streaming
 * of data members.
 * Event by event PID fluctuation analysis
 * author: Roberto Preghenella (R+)
 * email:  preghenella@bo.infn.it
 *
 */
 
class TList;
class TH1F;
class TH2F;
class TH3F;
class AliVEvent;
class AliVTrack;
class AliESDtrackCuts;
class AliPIDResponse;

#include "AliAnalysisTaskSE.h"
#include "AliPID.h"
#include "THnSparse.h"

class AliAnalysisTaskPIDFluctuation : 
public AliAnalysisTaskSE 
{
  
 public:
  
  AliAnalysisTaskPIDFluctuation(const Char_t *name = "PIDFluctuation"); // default constructor
  virtual ~AliAnalysisTaskPIDFluctuation(); // default destructor
  
  void UserCreateOutputObjects();
  void UserExec(Option_t *option);

  /* setters */
  void SetPIDMethod(Int_t value) {fPIDMethod = value;}; // set PID method
  void SetESDtrackCuts(AliESDtrackCuts *value) {fESDtrackCuts = value;}; // set ESD track cuts
  void SetAODfilterBit(Int_t value) {fAODfilterBit = value;}; // set AOD filter bit
  void SetEtaRange(Float_t etaMin, Float_t etaMax) {fEtaMin = etaMin; fEtaMax = etaMax;}; // set eta range
  void SetPtRange(Float_t ptMin, Float_t ptMax) {fPtMin = ptMin; fPtMax = ptMax;}; // set pt range

  static const Int_t kNCentralityBins = 10; // N centrality bins

  enum EEventCounter_t {
    kAllEvents,
    kPhysicsSelection,
    kPrimaryVertex,
    kPrimaryVertexSPD,
    kVertexAccepted,
    kGoodCentrality,
    kAcceptedEvents,
    kNEventCounters
  };

  enum ESparseData_t {
    kCent_V0M,
    kCent_TRK,
    kNch,
    kNch_plus,
    kNch_minus,
    kNpi,
    kNpi_plus,
    kNpi_minus,
    kNka,
    kNka_plus,
    kNka_minus,
    kNpr,
    kNpr_plus,
    kNpr_minus,
    kNSparseData
  };

  enum EPIDMethod_t {
    kTPCTOF,
    kTPConly,
    kTOFonly,
    kNPIDMethods
  };

  static void MeasureNuDyn(const Char_t *filename, Int_t i1, Int_t i2, Int_t centralityEstimator = kCent_V0M);

 private:

  AliAnalysisTaskPIDFluctuation(const AliAnalysisTaskPIDFluctuation &); // not implemented
  AliAnalysisTaskPIDFluctuation &operator=(const AliAnalysisTaskPIDFluctuation &); // not implemented
  
  /*** event and track selection ***/
  Bool_t AcceptEvent(AliVEvent *event) const; // accept event
  Bool_t AcceptTrack(AliVTrack *track) const; // accept track

  /*** PID functions ***/
  Bool_t HasTPCPID(AliVTrack *track) const; // has TPC PID
  Bool_t HasTOFPID(AliVTrack *track) const; // has TOF PID
  Double_t MakeTPCPID(AliVTrack *track, Double_t *nSigma) const; // make TPC PID
  Double_t MakeTOFPID(AliVTrack *track, Double_t *nSigma) const; // make TOF PID
  void MakePID(AliVTrack *track, Bool_t *pidFlag, Float_t centrality) const; // make PID
  Bool_t InitPID(AliVEvent *event); // init PID

  /*** PID objects and flags ***/
  Int_t fPIDMethod; // PID method
  AliESDtrackCuts *fESDtrackCuts; // ESD track cuts
  Int_t fAODfilterBit; // AOD filter bit
  Float_t fEtaMin; // eta min
  Float_t fEtaMax; // eta max
  Float_t fPtMin; // pt min
  Float_t fPtMax; // pt max
  AliPIDResponse *fPID; //! PID

  /*** PID histos ***/
  TList *fHistoList; //! histo list
  TH1F *fHistoEventCounter; //! event counter
  TH2F *fHistoAcceptedTracks; //! accepted tracks
  TH2F *fHistoTOFMatchedTracks; //! TOF-matched tracks
  TH3F *fHistoTPCdEdx; //! TPC dEdx
  TH3F *fHistoTPCdEdx_inclusive; //! TPC dEdx
  TH3F *fHistoTOFbeta; //! TOF beta
  TH3F *fHistoTPCdEdx_selected[AliPID::kSPECIES]; //! TPC dEdx
  TH3F *fHistoTOFbeta_selected[AliPID::kSPECIES]; //! TOF beta
  TH3F *fHistoNSigmaTPC[AliPID::kSPECIES]; //! nsigma TPC
  TH3F *fHistoNSigmaTOF[AliPID::kSPECIES]; //! nsigma TOF

  /*** correlation histos */
  THnSparseI *fHistoCorrelation; // correlation THnSparse

  /*** labels, names and titles ***/
  static const Char_t *fgkEventCounterName[kNEventCounters]; // event couter name
  static const Char_t *fgkEventCounterTitle[kNEventCounters]; // event couter title
  static const Char_t *fgkSparseDataName[kNSparseData]; // sparse data name
  static const Char_t *fgkSparseDataTitle[kNSparseData]; // sparse data title

    
  ClassDef(AliAnalysisTaskPIDFluctuation, 1);
};

#endif /* ALIANALYSISTASKPIDFLUCTUATION_H */
 AliAnalysisTaskPIDFluctuation.h:1
 AliAnalysisTaskPIDFluctuation.h:2
 AliAnalysisTaskPIDFluctuation.h:3
 AliAnalysisTaskPIDFluctuation.h:4
 AliAnalysisTaskPIDFluctuation.h:5
 AliAnalysisTaskPIDFluctuation.h:6
 AliAnalysisTaskPIDFluctuation.h:7
 AliAnalysisTaskPIDFluctuation.h:8
 AliAnalysisTaskPIDFluctuation.h:9
 AliAnalysisTaskPIDFluctuation.h:10
 AliAnalysisTaskPIDFluctuation.h:11
 AliAnalysisTaskPIDFluctuation.h:12
 AliAnalysisTaskPIDFluctuation.h:13
 AliAnalysisTaskPIDFluctuation.h:14
 AliAnalysisTaskPIDFluctuation.h:15
 AliAnalysisTaskPIDFluctuation.h:16
 AliAnalysisTaskPIDFluctuation.h:17
 AliAnalysisTaskPIDFluctuation.h:18
 AliAnalysisTaskPIDFluctuation.h:19
 AliAnalysisTaskPIDFluctuation.h:20
 AliAnalysisTaskPIDFluctuation.h:21
 AliAnalysisTaskPIDFluctuation.h:22
 AliAnalysisTaskPIDFluctuation.h:23
 AliAnalysisTaskPIDFluctuation.h:24
 AliAnalysisTaskPIDFluctuation.h:25
 AliAnalysisTaskPIDFluctuation.h:26
 AliAnalysisTaskPIDFluctuation.h:27
 AliAnalysisTaskPIDFluctuation.h:28
 AliAnalysisTaskPIDFluctuation.h:29
 AliAnalysisTaskPIDFluctuation.h:30
 AliAnalysisTaskPIDFluctuation.h:31
 AliAnalysisTaskPIDFluctuation.h:32
 AliAnalysisTaskPIDFluctuation.h:33
 AliAnalysisTaskPIDFluctuation.h:34
 AliAnalysisTaskPIDFluctuation.h:35
 AliAnalysisTaskPIDFluctuation.h:36
 AliAnalysisTaskPIDFluctuation.h:37
 AliAnalysisTaskPIDFluctuation.h:38
 AliAnalysisTaskPIDFluctuation.h:39
 AliAnalysisTaskPIDFluctuation.h:40
 AliAnalysisTaskPIDFluctuation.h:41
 AliAnalysisTaskPIDFluctuation.h:42
 AliAnalysisTaskPIDFluctuation.h:43
 AliAnalysisTaskPIDFluctuation.h:44
 AliAnalysisTaskPIDFluctuation.h:45
 AliAnalysisTaskPIDFluctuation.h:46
 AliAnalysisTaskPIDFluctuation.h:47
 AliAnalysisTaskPIDFluctuation.h:48
 AliAnalysisTaskPIDFluctuation.h:49
 AliAnalysisTaskPIDFluctuation.h:50
 AliAnalysisTaskPIDFluctuation.h:51
 AliAnalysisTaskPIDFluctuation.h:52
 AliAnalysisTaskPIDFluctuation.h:53
 AliAnalysisTaskPIDFluctuation.h:54
 AliAnalysisTaskPIDFluctuation.h:55
 AliAnalysisTaskPIDFluctuation.h:56
 AliAnalysisTaskPIDFluctuation.h:57
 AliAnalysisTaskPIDFluctuation.h:58
 AliAnalysisTaskPIDFluctuation.h:59
 AliAnalysisTaskPIDFluctuation.h:60
 AliAnalysisTaskPIDFluctuation.h:61
 AliAnalysisTaskPIDFluctuation.h:62
 AliAnalysisTaskPIDFluctuation.h:63
 AliAnalysisTaskPIDFluctuation.h:64
 AliAnalysisTaskPIDFluctuation.h:65
 AliAnalysisTaskPIDFluctuation.h:66
 AliAnalysisTaskPIDFluctuation.h:67
 AliAnalysisTaskPIDFluctuation.h:68
 AliAnalysisTaskPIDFluctuation.h:69
 AliAnalysisTaskPIDFluctuation.h:70
 AliAnalysisTaskPIDFluctuation.h:71
 AliAnalysisTaskPIDFluctuation.h:72
 AliAnalysisTaskPIDFluctuation.h:73
 AliAnalysisTaskPIDFluctuation.h:74
 AliAnalysisTaskPIDFluctuation.h:75
 AliAnalysisTaskPIDFluctuation.h:76
 AliAnalysisTaskPIDFluctuation.h:77
 AliAnalysisTaskPIDFluctuation.h:78
 AliAnalysisTaskPIDFluctuation.h:79
 AliAnalysisTaskPIDFluctuation.h:80
 AliAnalysisTaskPIDFluctuation.h:81
 AliAnalysisTaskPIDFluctuation.h:82
 AliAnalysisTaskPIDFluctuation.h:83
 AliAnalysisTaskPIDFluctuation.h:84
 AliAnalysisTaskPIDFluctuation.h:85
 AliAnalysisTaskPIDFluctuation.h:86
 AliAnalysisTaskPIDFluctuation.h:87
 AliAnalysisTaskPIDFluctuation.h:88
 AliAnalysisTaskPIDFluctuation.h:89
 AliAnalysisTaskPIDFluctuation.h:90
 AliAnalysisTaskPIDFluctuation.h:91
 AliAnalysisTaskPIDFluctuation.h:92
 AliAnalysisTaskPIDFluctuation.h:93
 AliAnalysisTaskPIDFluctuation.h:94
 AliAnalysisTaskPIDFluctuation.h:95
 AliAnalysisTaskPIDFluctuation.h:96
 AliAnalysisTaskPIDFluctuation.h:97
 AliAnalysisTaskPIDFluctuation.h:98
 AliAnalysisTaskPIDFluctuation.h:99
 AliAnalysisTaskPIDFluctuation.h:100
 AliAnalysisTaskPIDFluctuation.h:101
 AliAnalysisTaskPIDFluctuation.h:102
 AliAnalysisTaskPIDFluctuation.h:103
 AliAnalysisTaskPIDFluctuation.h:104
 AliAnalysisTaskPIDFluctuation.h:105
 AliAnalysisTaskPIDFluctuation.h:106
 AliAnalysisTaskPIDFluctuation.h:107
 AliAnalysisTaskPIDFluctuation.h:108
 AliAnalysisTaskPIDFluctuation.h:109
 AliAnalysisTaskPIDFluctuation.h:110
 AliAnalysisTaskPIDFluctuation.h:111
 AliAnalysisTaskPIDFluctuation.h:112
 AliAnalysisTaskPIDFluctuation.h:113
 AliAnalysisTaskPIDFluctuation.h:114
 AliAnalysisTaskPIDFluctuation.h:115
 AliAnalysisTaskPIDFluctuation.h:116
 AliAnalysisTaskPIDFluctuation.h:117
 AliAnalysisTaskPIDFluctuation.h:118
 AliAnalysisTaskPIDFluctuation.h:119
 AliAnalysisTaskPIDFluctuation.h:120
 AliAnalysisTaskPIDFluctuation.h:121
 AliAnalysisTaskPIDFluctuation.h:122
 AliAnalysisTaskPIDFluctuation.h:123
 AliAnalysisTaskPIDFluctuation.h:124
 AliAnalysisTaskPIDFluctuation.h:125
 AliAnalysisTaskPIDFluctuation.h:126
 AliAnalysisTaskPIDFluctuation.h:127
 AliAnalysisTaskPIDFluctuation.h:128
 AliAnalysisTaskPIDFluctuation.h:129
 AliAnalysisTaskPIDFluctuation.h:130
 AliAnalysisTaskPIDFluctuation.h:131
 AliAnalysisTaskPIDFluctuation.h:132
 AliAnalysisTaskPIDFluctuation.h:133
 AliAnalysisTaskPIDFluctuation.h:134
 AliAnalysisTaskPIDFluctuation.h:135
 AliAnalysisTaskPIDFluctuation.h:136
 AliAnalysisTaskPIDFluctuation.h:137
 AliAnalysisTaskPIDFluctuation.h:138