ROOT logo
#ifndef ALIANALYSISNUCLEIMASS_H
#define ALIANALYSISNUCLEIMASS_H

// ROOT includes
#include <TList.h>

// AliRoot includes
#include <AliAnalysisTaskSE.h>
#include <AliPIDResponse.h>

class AliAODEvent;
class AliESDEvent;
class AliVEvent;
class TH2F;
class TH2D;
class TH1F;
class TF1;
class TF2;
class TH2D;
class TGraph;
class AliESDtrackCuts;
class TProfile;
class TFile;
class TObject;

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


  //Cuts on the events
  void SetCentrality(Double_t CentMin=0., Double_t CentMax=100.) {Centrality[0]=CentMin; Centrality[1]=CentMax;};
  //Cuts on the tracks
  void SetFilterBit(Int_t TestFilterBit=16) {FilterBit=TestFilterBit;}
   //geometrical cuts
  void SetEtaLimit(Double_t etaMin=-0.8, Double_t etaMax=0.8) {EtaLimit[0]=etaMin;EtaLimit[1]=etaMax;}
  void SetDCACut(Double_t DCAxyCUT=0.1, Double_t DCAzCUT=1000.0) {DCAxyCut=DCAxyCUT; DCAzCut=DCAzCUT;}
   //other cuts 
  void SetNsigmaTPCCut(Double_t nSigmaTpcCut=2) {NsigmaTpcCut=nSigmaTpcCut;}
  void SetNminTPCcluster(Int_t nMinTPCcluster=0) {NminTpcCluster=nMinTPCcluster;}
  void SetTrdCut(Int_t kTRDcut=0) {iTrdCut=kTRDcut;}
  
  //Settings
  void SetisSignalCheck(Int_t IsSignalCheck=2) {kSignalCheck=IsSignalCheck;}
  void SetMtofMethod(Int_t iMtofMethod=1) {iMtof=iMtofMethod;}
  void SetPvtxNucleiCorrection(Int_t kMomVtxCorr=1) {kPvtxCorr=kMomVtxCorr;}
  //void SetiTriggerSel(Int_t ItriggerSel=-99) {iTriggerSel=ItriggerSel;}

 private:
  AliAnalysisNucleiMass(const AliAnalysisNucleiMass &old); 
  AliAnalysisNucleiMass& operator=(const AliAnalysisNucleiMass &source);
    
  static const Int_t nbin=46;                      // Number of pt bins in Tof Mass distributions
  static const Int_t nBconf=2;                     // Number of Magnetic field configuration (B++ and B--)
  static const Int_t nPart=9;                      // Number of particle type: e,mu,pi,K...
  static const Int_t nSpec=18;                     // Number of particle species: particles: e+,e-,mu+,mu-,...
    
  //Variables settings with public methods:
  Double_t Centrality[2];                          // Centrality bin (min and max)
  Int_t FilterBit;                                 // Filter Bit to be used
  Double_t EtaLimit[2];                            // Eta windows in analysis
  Double_t DCAxyCut;                               // Cut on DCA-xy
  Double_t DCAzCut;                                // Cut on DCA-z
  Double_t NsigmaTpcCut;                           // number of sigma Tpc Cut
  Int_t NminTpcCluster;                            // Number of minimum TPC clusters
  Int_t iTrdCut;                                   // iTrdCut==0-> No TRD cut; iTrdCut==1-> Yes TRD cut: yes TRD; iTrdCut==2->Yes TRD cut: no TRD; 
  Int_t kSignalCheck;                              // kSignalCheck==1->Fill all plots ; kSignalCheck==0->Fill only TH1 ; kSignalCheck==2-> Fill TH1 and some TH2 usefull in analysis
  Int_t iMtof;                                     // iMtof==1->m~pVtx ; iMtof==2->m~pExp ; iMtof==4->m~<p> (same correction for particle and antiparticle) ;
  Int_t kPvtxCorr;                                 // kPvtxCorr==1->Momentum at the primary vertex for (anti)nuclei is rescaled ; kPvtxCorr==0->no correction
  
  //other:
  Int_t iBconf;                                   //! If Magnetic Field configuration is down or up
  Bool_t kTOF;                                    //! kTOFout and kTIME required
  
  static const Int_t iTriggerSel=-99;                   // -99->no trigger required ; 0-> if kMB ; 16-> if kCentral ; 17-> if kSemiCentral ; -2 -> No MB, No Central and No SemiCentral  

  AliAODEvent* fAOD;                              //! AOD object
  AliESDEvent* fESD;                              //! ESD object
  AliVEvent* fEvent;                              //! general object
  AliPIDResponse *fPIDResponse;                   //! pointer to PID response
  TList *fList[nBconf];                           //! lists for slot
  
  TH1I *htriggerbits[nBconf][2];                  //! Trigger bits distribution
  TH1F *htemp[nBconf];                            //! Temp. plot: avoid a problem with the merge of the output when a TList is empty (of the opposite magnetic field configuration)
  TH1F *hCentrality[nBconf][2];                   //! Centrality of the selected and analyzed events
  TH1F *hZvertex[nBconf][2];                      //! z-vertex distribution before and after the cuts on the event
  
  TH1F *hEta[nBconf];                             //! Eta distribution of the tracks
  TH1F *hPhi[nBconf];                             //! Phi particle distribution
  TH2F *fEtaPhi[nBconf];                          //! Phi vs Eta particle distribution
  TH1F *hNTpcCluster[nBconf];                     //! # of the TPC clusters after the track cuts
  TH1F *hNTrdSlices[nBconf];                      //! Number of the TRD slices after the track cuts

  //TPC info:
  TH2F *fdEdxVSp[nBconf][2];                      //! dedx vs pTpc
  TProfile *hDeDxExp[nBconf][9];                  //! TPC spline used
  TH2F *fNsigmaTpc[nBconf][18];                    //! NsigmaTPC vs. pTpc
  TH2F *fNsigmaTpc_kTOF[nBconf][18];              //! NsigmaTPC vs. pt when kTOF is required 
  
  //TOF info:
  TH2F *fBetaTofVSp[nBconf][2];                   //! beta vs pVtx
  TProfile *hBetaExp[nBconf][9];                  //! TOF expected beta
  TH2F *fNsigmaTof[nBconf][9];                    //! NsigmaTOF vs. pT
  
  //TPC and TOF conbined
  TH2F *fM2vsP_NoTpcCut[nBconf][1][2];            //! M2 vs. P
  TH2F *fM2vsP[nBconf][1][18];                    //! M2 vs. P with NsigmaTpcCut for each particle species
  TH2F *fM2vsZ[nBconf][10];                       //! M2 vs. Z in various pT bins

  //DCA distributions
  TH1D *hDCAxy[nBconf][18][nbin];                 //! DCAxy distribution with NsigmaTpcCut for each particle species, in p bins
  TH1D *hDCAz[nBconf][18][nbin];                  //! DCAz distribution with NsigmaTpcCut for each particle species, in p bins
  //TH2F *h2DCA[nBconf][18][nbin];                //! DCAxy vs DCAz with NsigmaTpcCut for each particle species, in p bins
  TH2F *h2DCAap[nBconf][18];                      //! DCAxy vs DCAz with NsigmaTpcCut for each particle species
    
  //TOF mass distributions
  TH1D *hM2CutDCAxy[nBconf][18][nbin];            //! Tof m2 distribution with NsigmaTpcCut
  
  //...
  TH2F *fPmeanVsBetaGamma[nBconf][18];            //! <p>/p vs beta*gamma for pi,K,p
  TProfile *prPmeanVsBetaGamma[nBconf][18];       //! <p>/p vs beta*gamma for pi,K,p (profile)
  
  //Parameterizations:
  TF2 *fPvtxTrueVsReco[4];                        //! TF1 pVtx_True vs pVtx_Reco calculated with MC for d,t,He3,He4
  TProfile *prPvtxTrueVsReco[nBconf][4];          //! TProfile pVtx_True vs pVtx_Reco calculated with MC for d,t,He3,He4

  TF1 *fPmeanVsBGcorr[14];                        //! <p>/p as a function of beta*gamma for pi,K,p,d,t,He3,He4
  TProfile *prPmeanVsBGcorr[nBconf][14];          //! <p>/p vs beta*gamma for pi,K,p,d,t,He3,He4 as calculated from the parameterizations
 
  //------------------------------Methods----------------------------------------
  void MomVertexCorrection(Double_t p, Double_t *pC, Double_t eta, Int_t FlagPid);
  
  void FillDCAdist(Double_t DCAxy, Double_t DCAz, Double_t charge, Int_t FlagPid, Int_t stdFlagPid[9], Double_t *pC);
  
  void GetMassFromPvertex(Double_t beta, Double_t p, Double_t &M2);
  void GetZTpc(Double_t dedx, Double_t pTPC, Double_t M2, Double_t &Z2);

  void GetMassFromPvertexCorrected(Double_t beta, Double_t *pC, Double_t *Mass2);
  
  void GetMassFromExpTimes(Double_t beta, Double_t *IntTimes, Double_t *Mass2);
  void GetPmeanVsBetaGamma(Double_t *IntTimes, Double_t *pVtx, Int_t FlagPid, Int_t FlagPidTof, Double_t charge);

  void GetMassFromMeanMom(Double_t beta, Double_t *IntTimes, Double_t *pVtx, Double_t eta, Double_t charge, Double_t *Mass2, Int_t FlagPid, Int_t FlagPidTof);
  
  void SetPvtxCorrections();
  void SetPmeanCorrections();

  ClassDef(AliAnalysisNucleiMass, 3);
};

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