ROOT logo
#ifndef ALIANALYSISTASKVNV0_H
#define ALIANALYSISTASKVNV0_H

// ROOT includes
#include <TObject.h>
#include <TClonesArray.h>
#include "TTree.h"
#include <TList.h>
#include <TProfile.h>

// AliRoot includes
#include <AliAnalysisTaskSE.h>
#include <AliAODEvent.h>
#include "AliFlowBayesianPID.h"
#include "AliFlowVZEROResults.h"
#include "AliFlowVZEROQA.h"

class TH2F;
class AliESDtrackCuts;
class TProfile2D;

class AliAnalysisTaskVnV0 : public AliAnalysisTaskSE {
 public:
  AliAnalysisTaskVnV0();
  AliAnalysisTaskVnV0(const char *name);

  virtual ~AliAnalysisTaskVnV0();

  virtual void   UserCreateOutputObjects();
  virtual void   UserExec(Option_t *option);
  virtual void   Terminate(Option_t *); 
  
  Double_t GetVtxCut() { return fVtxCut; }   
  Double_t GetEtaCut() { return fEtaCut; }     
  Double_t GetMinPt() { return fMinPt; }   

  virtual void  SetVtxCut(Double_t vtxCut){fVtxCut = vtxCut;}
  virtual void  SetEtaCut(Double_t etaCut){fEtaCut = etaCut;}
  virtual void  SetMinPt(Double_t value) {fMinPt = value;}   
  virtual void  SetMinDistV0(Double_t value){fMinDistV0=value;}
  virtual void  SetMaxDistV0(Double_t value){fMaxDistV0=value;}
  virtual void SetV2(Bool_t val){fV2 = val;};
  virtual void SetV3(Bool_t val){fV3 = val;};

  virtual void SetMC(Bool_t flag = kTRUE){fIsMC = flag;};
  virtual void SetQA(Bool_t flag = kTRUE){fQAsw = flag;};

  void OpenInfoCalbration(Int_t run);

  void SetFillDCAinfo(Bool_t flag=kTRUE){fFillDCA = flag;};

  void SetModulationDEDx(Bool_t flag=kTRUE){fModulationDEDx=flag;};

  void SetAfter2011(Bool_t stat=kTRUE){fIsAfter2011=stat;};
  Bool_t GetAfter2011() const {return fIsAfter2011;};

  void SetTPCclusterN(Int_t ncl){fNcluster=ncl;};
  static Bool_t IsPsiComputed(){return fgIsPsiComputed;};
  static Float_t GetPsi2V0A(){return fgPsi2v0a;};
  static Float_t GetPsi2V0C(){return fgPsi2v0c;};
  static Float_t GetPsi2TPC(){return fgPsi2tpc;};
  static Float_t GetPsi3V0A(){return fgPsi3v0a;};
  static Float_t GetPsi3V0C(){return fgPsi3v0c;};
  static Float_t GetPsi3TPC(){return fgPsi3tpc;};
  static Float_t GetPsi2V0AMC(){return fgPsi2v0aMC;};
  static Float_t GetPsi2V0CMC(){return fgPsi2v0cMC;};
  static Float_t GetPsi2TPCMC(){return fgPsi2tpcMC;};
  static Float_t GetPsi3V0AMC(){return fgPsi3v0aMC;};
  static Float_t GetPsi3V0CMC(){return fgPsi3v0cMC;};
  static Float_t GetPsi3TPCMC(){return fgPsi3tpcMC;};

 private:
  AliAnalysisTaskVnV0(const AliAnalysisTaskVnV0 &old); 
  AliAnalysisTaskVnV0& operator=(const AliAnalysisTaskVnV0 &source); 

  Int_t PassesAODCuts(AliAODv0 *myV0, AliAODEvent *tAOD,Int_t specie);

  static Bool_t fgIsPsiComputed; // flag which return if event was processed
  static Float_t fgPsi2v0a,fgPsi2v0c,fgPsi2tpc; // current Psi2
  static Float_t fgPsi3v0a,fgPsi3v0c,fgPsi3tpc; // current Psi3
  static Float_t fgPsi2v0aMC,fgPsi2v0cMC,fgPsi2tpcMC; // current Psi2
  static Float_t fgPsi3v0aMC,fgPsi3v0cMC,fgPsi3tpcMC; // current Psi3

  virtual Float_t GetVertex(AliAODEvent* aod) const;
  virtual void Analyze(AliAODEvent* aodEvent, Float_t v0Centr); 
  virtual void SelectK0s();

  Double_t     fVtxCut;             // Vtx cut on z position in cm
  Double_t     fEtaCut;             // Eta cut used to select particles
  Double_t     fMinPt;              // Min pt - for histogram limits
  Double_t     fMinDistV0;          // Minimal distance for V0s
  Double_t     fMaxDistV0;          // Maximal distance for V0s

  Bool_t fV2; // switch to set the armonics
  Bool_t fV3; // switch to set the armonics
  Bool_t fIsMC; // if MC
  Bool_t fQAsw;   // if QA
  Bool_t fIsAfter2011; // switch for 2011 and later runs

  static const Int_t nCentrBin = 9;          //! # cenrality bins

  //
  // Cuts and options
  //

  Int_t fRun;                       //! current run checked to load VZERO calibrations

  Int_t fNcluster;           // Numer of TPC cluster required
  TList *fList;              //! List for output objects
  TList *fList2;             //! List for output objects
  TList *fList3;             //! List for output objects
  TList *fList4;             //! List for output objects
  //
  // Output objects
  TProfile *fMultV0;                //! object containing VZERO calibration information
  Float_t fV0Cpol;          //! loaded by OADB
  Float_t fV0Apol;          //! loaded by OADB
  Float_t fMeanQ[nCentrBin][2][2];           //! and recentering
  Float_t fWidthQ[nCentrBin][2][2];          //! ...
  Float_t fMeanQv3[nCentrBin][2][2];         //! also for v3
  Float_t fWidthQv3[nCentrBin][2][2];        //! ...

  TProfile *fHResTPCv0A2;   //! TProfile for subevent resolution (output)
  TProfile *fHResTPCv0C2;   //! TProfile for subevent resolution (output)
  TProfile *fHResv0Cv0A2;   //! TProfile for subevent resolution (output)
  TProfile *fHResTPCv0A3;    //! also for v3
  TProfile *fHResTPCv0C3;   //! also for v3
  TProfile *fHResv0Cv0A3;   //! also for v3

  TH2F *fPhiRPv0A;          //! EP distribution vs. centrality (v2)
  TH2F *fPhiRPv0C;          //! EP distribution vs. centrality (v2)
  TH2F *fPhiRPv0Av3;      //! EP distribution vs. centrality (v3)
  TH2F *fPhiRPv0Cv3;      //! EP distribution vs. centrality (v3)

  AliFlowVZEROQA *fQA;            //! QA histos (v2)
  AliFlowVZEROQA *fQA2;           //! QA histos (v2)
  AliFlowVZEROQA *fQAv3;        //! QA histos (v3)
  AliFlowVZEROQA *fQA2v3;       //! QA histos (v3)

  AliFlowBayesianPID *fPID;            //! PID class for the Bayesian probabilities
 
  TTree *fTree;                        //! tree to debug EP (if needed)

  Float_t fCentrality;  //! current centrality for the tree
  Float_t evPlAngV0ACor2;   //! subevent EPs (v2)
  Float_t evPlAngV0CCor2;   //! subevent EPs (v2)
  Float_t evPlAng2;   //! subevent EPs (v2)
  Float_t evPlAngV0ACor3;   //! subevent EPs (v3)
  Float_t evPlAngV0CCor3;   //! subevent EPs (v3)
  Float_t evPlAng3;   //! subevent EPs (v3)

  AliFlowVZEROResults *fContAllChargesV0A; //! results
  AliFlowVZEROResults *fContAllChargesV0C; //! results
  AliFlowVZEROResults *fContAllChargesV0Av3; //! results
  AliFlowVZEROResults *fContAllChargesV0Cv3; //! results
  AliFlowVZEROResults *fContAllChargesMC; //! results

  // MC
  TProfile *fHResMA2;   //! TProfile for subevent resolution (output)
  TProfile *fHResMC2;   //! TProfile for subevent resolution (output)
  TProfile *fHResAC2;   //! TProfile for subevent resolution (output)
  TProfile *fHResMA3;    //! also for v3
  TProfile *fHResMC3;   //! also for v3
  TProfile *fHResAC3;   //! also for v3

  AliFlowVZEROResults *fContAllChargesMCA; //! results
  AliFlowVZEROResults *fContAllChargesMCC; //! results
  AliFlowVZEROResults *fContAllChargesMCAv3; //! results
  AliFlowVZEROResults *fContAllChargesMCCv3; //! results

  Bool_t fFillDCA; // require to fill also DCA info
  TH2D *fHdcaPt[nCentrBin][7]; //! DCA distribution (for MC primary)
  TH2D *fHdcaPtSec[nCentrBin][7]; //! DCA distribution (for MC secondary, not used for data)
  AliFlowVZEROResults *fContQApid; //! QA pid object

  Bool_t fModulationDEDx; //add a modulation on the dE/dx response w.r.t. EP (kFALSE default)

  Float_t fZvtx; //! primary vertex z coordinate
  Int_t fNK0s; //! number of K0s in my private selection
  Float_t fPhiK0s[1000]; //! phi of K0s in my private selection
  Float_t fPtK0s[1000];//! pt of K0s in my private selection
  Int_t fNpiPos; //! number of positive pions for K0s selection
  Int_t fNpiNeg; //! number of negative pions for K0s selection
  Int_t fIPiPos[1000]; //! position in the AOD stack of positive pions for K0s
  Int_t fIPiNeg[1000]; //! position in the AOD stack of negative pions for K0s

  TH2D *fHKsPhi; //! Ks phi distribution
  TH2D *fHKsPhiEP; //! EP distribution
  TH2D *fHK0sMass; //! K0s mass vs. pt (private selection)
  TH2D *fHK0sMass2; //! K0s mass vs. pt (standard selection)
  TH2D *fHK0vsLambda; //! K0s vs lambda mass (in private K0s selection)
  TProfile2D *fHctauPtEP; //! ctau vs DeltaPhi,pt
  TH2F *fHctauAt1EP;    //! ctau vs. DeltaPhi at 1 GeV/c

  AliESDtrackCuts *fCutsDaughter; // daughter cut for K0s standard selection
  ClassDef(AliAnalysisTaskVnV0, 8);    //Analysis task v2 and v3 analysis on AOD
};

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