ROOT logo
#ifndef ALIANALYSISTASKSEHFV2_H
#define ALIANALYSISTASKSEHFV2_H

/* Copyright(c) 1998-2010, ALICE Experiment at CERN, All rights reserved. *
 * See cxx source for full Copyright notice                               */

//*************************************************************************
// AliAnalysisTaskSEHFv2 gives the needed tools for the D 
// mesons v2 analysis 
// Authors: Chiara Bianchin, cbianchi@pd.infn.it, 
//          Robert Grajcarek, grajcarek@physi.uni-heidelberg.de
//          Giacomo Ortona, ortona@to.infn.it,
//          Carlos Perez Lara, carlos.eugenio.perez.lara@cern.ch
//          Francesco Prino, prino@to.infn.it
//
//*************************************************************************

/* $Id$ */

#include "AliAnalysisTaskSE.h"
#include "AliAnalysisVertexingHF.h"
#include "AliHFAfterBurner.h"


class TH1F;
class TH2D;
class AliMultiDimVector;
class AliRDHFCuts;
class TVector2;

class AliAnalysisTaskSEHFv2 : public AliAnalysisTaskSE
{

 public:

  enum DecChannel{kDplustoKpipi,kD0toKpi,kDstartoKpipi}; //more particles can be added
  enum EventPlaneMeth{kTPC,kTPCVZERO,kVZERO,kVZEROA,kVZEROC}; //Event plane to be calculated in the task
  //  enum SubEvents{kFullTPC,kPosTPC,kNegTPC,kSingleV0Side}; //Sub-events for V0 EP
  
  AliAnalysisTaskSEHFv2();
  AliAnalysisTaskSEHFv2(const char *name, AliRDHFCuts *rdCuts, Int_t decaychannel);
 
  virtual ~AliAnalysisTaskSEHFv2();

  void SetReadMC(Bool_t readMC=kTRUE){fReadMC=readMC;}
  void SetMassLimits(Float_t range,Int_t pdg);
  void SetMassLimits(Float_t lowlimit, Float_t uplimit);
  void SetNMassBins(Int_t nbins){fNMassBins=nbins;}
  void SetV0EventPlaneOrder(Int_t n){fV0EPorder=n;}
  void SetMinCentrality(Int_t mincentr){fMinCentr=mincentr;}
  void SetMaxCentrality(Int_t maxcentr){fMaxCentr=maxcentr;}
  void SetUseAfterBurner(Bool_t ab){fUseAfterBurner=ab;}
  void SetAfterBurner(AliHFAfterBurner *ab){fAfterBurner=ab;}
  void SetEtaGapFeatureForEventplaneFromTracks (Bool_t etaGap) {fEtaGap = etaGap;}
  void SetCentralityBinWidthPerMil(Int_t w){fCentBinSizePerMil=w;}


  void SetNTPCSubEvents(Int_t nsub);
  void Set2TPCEPSubEvents(){SetNTPCSubEvents(2);}
  void Set3TPCEPSubEvents(){SetNTPCSubEvents(3);}
  void SetEventPlaneMethod(Int_t epmethod);
  void SetTPCEPOnly(){SetEventPlaneMethod(kTPC);}
  void SetVZEROEP(){SetEventPlaneMethod(kVZERO);}
  void SetVZEROAEP(){SetEventPlaneMethod(kVZEROA);}
  void SetVZEROCEP(){SetEventPlaneMethod(kVZEROC);}
  void SetTPCEP(){SetEventPlaneMethod(kTPCVZERO);}
  void SetEventPlanesCompatibility(Float_t comp) {fEventPlanesComp=comp;}
  //void SetSubEvents(Int_t subev){if(subev>=kFullTPC&&subev<=kSingleV0Side)fSubEvents=subev;}

  Int_t GetEventPlaneMethod()const {return fEventPlaneMeth;}
  Int_t GetNTPCSubEvents()const {return fSubEvents;}
  Float_t GetEventPlanesCompatibility()const {return fEventPlanesComp;}
  Float_t GetUpperMassLimit()const {return fUpmasslimit;}
  Float_t GetLowerMassLimit()const {return fLowmasslimit;}
  Int_t GetNMassBins()const {return fNMassBins;}
  //Float_t GetPhi02Pi(Float_t phi);
  Float_t GetPhi0Pi(Float_t phi);
  AliHFAfterBurner *GetAfterBurner()const {return fAfterBurner;}

  // Implementation of interface methods
  virtual void UserCreateOutputObjects();
  virtual void LocalInit();// {Init();}
  virtual void UserExec(Option_t *option);
  virtual void Terminate(Option_t *option);
    
 private:

  AliAnalysisTaskSEHFv2(const AliAnalysisTaskSEHFv2 &source);
  AliAnalysisTaskSEHFv2& operator=(const AliAnalysisTaskSEHFv2& source); 

  void CalculateInvMasses(AliAODRecoDecayHF* d,Float_t* &masses,Int_t& nmasses);

  void FillDplus(AliAODRecoDecayHF* d,TClonesArray *arrayMC,Int_t ptbin, Float_t dphi, const Float_t* masses,Int_t isSel,Int_t icentr, Double_t phiD);
  void FillD02p(AliAODRecoDecayHF* d,TClonesArray *arrayMC,Int_t ptbin, Float_t dphi, const Float_t* masses, Int_t isSel,Int_t icentr, Double_t phiD);
  void FillDstar(AliAODRecoDecayHF* d,TClonesArray *arrayMC,Int_t ptbin, Float_t dphi, const Float_t* masses,Int_t isSel,Int_t icentr, Double_t phiD);
  Float_t GetEventPlaneForCandidate(AliAODRecoDecayHF* d, const TVector2* q,AliEventplane *pl,const TVector2* qsub1,const TVector2* qsub2);
  //  Float_t GetEventPlaneFromV0(AliAODEvent *aodEvent);


  TH1F* fhEventsInfo;           //! histogram send on output slot 1
  TList   *fOutput;             //! list send on output slot 2
  AliRDHFCuts *fRDCuts;         //cut values (saved in slot 3)
  Float_t fLowmasslimit;        //lower inv mass limit for histos
  Float_t fUpmasslimit;         //upper inv mass limit for histos
  Int_t fNPtBins;               //number of pt bins
  Int_t fNMassBins;             //number of bins in the mass histograms
  Bool_t fReadMC;               //flag for access to MC
  Bool_t fUseAfterBurner;      //enable afterburning
  Int_t fDecChannel;            //decay channel identifier
  AliHFAfterBurner *fAfterBurner;//Afterburner options
  Int_t fEventPlaneMeth;         //flag to select EP method
  Float_t fEventPlanesComp;     // Maximum distance between TPC/VZERO event planes
  Int_t  fV0EPorder;            //harmonic for VZERO event plane
  Int_t fMinCentr;              //minimum centrality
  Int_t fMaxCentr;              //maximum centrality
  Bool_t fEtaGap;               // Eta gap feature for Eventplane from tracks; be careful that you do the correct settings in AddTaskEventPlane.C !!!!
  Int_t fSubEvents;             //Sub-events definition for TPC EP
  Int_t fCentBinSizePerMil;     // width of centrality bins

  ClassDef(AliAnalysisTaskSEHFv2,3); // AliAnalysisTaskSE for the HF v2 analysis
};

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