ROOT logo
#ifndef ALIANALYSISTASKSED0CORRELATIONS_H
#define ALIANALYSISTASKSED0CORRELATIONS_H

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

/* $Id$ */

//*************************************************************************
// Class AliAnalysisTaskSED0Correlations
// AliAnalysisTaskSE for D0 candidates (2Prongs) and hadrons correlations
// Authors:
// C.Bianchin, chiara.bianchin@pd.infn.it
// F.Colamaria, fabio.colamaria@ba.infn.it
//*************************************************************************

#include <TROOT.h>
#include <TSystem.h>
#include <TNtuple.h>
#include <TTree.h>
#include <TH1F.h>
#include <THnSparse.h>

#include "AliAnalysisTaskSE.h"
#include "AliRDHFCutsD0toKpi.h"
#include "AliHFAssociatedTrackCuts.h"
#include "AliHFCorrelator.h"
#include "AliNormalizationCounter.h"

using std::vector;

class AliAODEvent;

class AliAnalysisTaskSED0Correlations : public AliAnalysisTaskSE
{
 public:

  AliAnalysisTaskSED0Correlations();
  AliAnalysisTaskSED0Correlations(const char *name,AliRDHFCutsD0toKpi* cutsD0, AliHFAssociatedTrackCuts* cutsTrk);
  virtual ~AliAnalysisTaskSED0Correlations();

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

  void SetReadMC(Bool_t readMC=kFALSE){fReadMC=readMC;}
  void SetMCReconstructedTracks(Bool_t recoTrMC=kTRUE){fRecoTr=recoTrMC;}
  void SetMCReconstructedD0(Bool_t recoD0MC=kTRUE){fRecoD0=recoD0MC;}
  void SetMCSelEventType(Bool_t sel=kFALSE){fSelEvType=sel;}
  void SetFillOnlyD0D0bar(Int_t flagfill){fFillOnlyD0D0bar=flagfill;}
  void SetSystem(Int_t sys){fSys=sys;}
  void SetRejectSDDClusters(Bool_t flag) {fIsRejectSDDClusters=flag; }
  void SetFillGlobalPlots(Bool_t fill=kTRUE){fFillGlobal=fill;}
  void SetSoftPiFlag(Bool_t piflag) {fSoftPiCut=piflag;}
  void SetMEAxisThresh(Bool_t methresh) {fMEAxisThresh=methresh;}
  void SetKaonCorrelations(Bool_t kaonCorr) {fKaonCorr=kaonCorr;}

  Int_t  GetReadMC() const {return fReadMC;}
  Int_t  GetMCReconstructedTracks() const {return fRecoTr;}
  Int_t  GetMCReconstructedD0() const {return fRecoD0;}
  Int_t  GetMCSelEventType() const {return fSelEvType;}
  Int_t  GetFillOnlyD0D0bar() const {return fFillOnlyD0D0bar;}
  Int_t  GetSystem() const {return fSys;}
  Bool_t GetRejectSDDClusters() const {return fIsRejectSDDClusters;}
  Bool_t GetFillGlobalPlots() const {return fFillGlobal;}
  Double_t GetEtaForCorrel() {return fEtaForCorrel;}
  Double_t GetMultEv() {return fMultEv;}
  Bool_t GetSoftPiFlag() const {return fSoftPiCut;}
  Bool_t GetMEAxisThresh() const {return fMEAxisThresh;}
  Bool_t GetKaonCorrelations() const {return fKaonCorr;}

  //correlations setters/printers
  void SetNPtBinsCorr(Int_t nbins) {fNPtBinsCorr = nbins;}
  void SetPtBinsLimsCorr(Double_t* ptlims) {for(int i=0;i<=fNPtBinsCorr;i++) {fBinLimsCorr.push_back(ptlims[i]);}}
  void SetPtBinsLimsCorr(Float_t* ptlims) {for(int i=0;i<=fNPtBinsCorr;i++) {fBinLimsCorr.push_back((Double_t)ptlims[i]);}}
  void SetPtTreshLow(Double_t* pttreshlow) {for(int i=0;i<fNPtBinsCorr;i++) {fPtThreshLow.push_back(pttreshlow[i]);}}
  void SetPtTreshUp(Double_t* pttreshup) {for(int i=0;i<fNPtBinsCorr;i++) {fPtThreshUp.push_back(pttreshup[i]);}}

  void PrintBinsAndLimits();
  Int_t PtBinCorr(Double_t pt) const;
  void SetEvMixing(Bool_t mix) {fMixing=mix;}
  void SetEtaForCorrel(Double_t etacorr) {fEtaForCorrel=etacorr;}

  enum PartType {kTrack,kKCharg,kK0};
  enum FillType {kSE, kME}; //for single event or event mixing histos fill

 private:

  AliAnalysisTaskSED0Correlations(const AliAnalysisTaskSED0Correlations &source);
  AliAnalysisTaskSED0Correlations& operator=(const AliAnalysisTaskSED0Correlations& source); 
  void FillMassHists(AliAODRecoDecayHF2Prong *part, TClonesArray *arrMC, AliRDHFCutsD0toKpi *cuts, TList *listout);
  Int_t CheckD0Origin(TClonesArray* arrayMC, AliAODMCParticle *mcPartCandidate) const;
  //correlation methods
  void CreateCorrelationsObjs();
  void CalculateCorrelations(AliAODRecoDecayHF2Prong* d, Int_t labD0=-1, TClonesArray* mcArray=0x0);
  void CalculateCorrelationsMCKine(AliAODMCParticle* d, TClonesArray* mcArray=0x0);
  void FillSparsePlots(TClonesArray* arrayMC, Double_t mInv[], Int_t origD0, Int_t PdgD0, AliReducedParticle* track, Int_t ptbin, Int_t type, Double_t wg=1.);
  Int_t CheckTrackOrigin(TClonesArray* arrayMC, AliAODMCParticle *mcPartCandidate) const;
  Bool_t IsDDaughter(AliAODMCParticle* d, AliAODMCParticle* track, TClonesArray* mcArray) const;
  Bool_t SelectV0(AliAODv0* v0, AliAODVertex *vtx, Int_t option, Int_t idArrayV0[][2]) const;
  Bool_t IsSoftPion_MCKine(AliAODMCParticle* d, AliAODMCParticle* track, TClonesArray* arrayMC) const;

  Int_t             fNPtBinsCorr;        // number of pt bins per correlations
  std::vector<Double_t>  fBinLimsCorr;        // limits of pt bins per correlations
  std::vector<Double_t>  fPtThreshLow;        // pT treshold of hadrons - low
  std::vector<Double_t>  fPtThreshUp;         // pT treshold of hadrons - up

  Int_t     fEvents;		  	// EventCounter
  Bool_t    fAlreadyFilled;	  	// D0 in an event already analyzed (for track distribution plots)
  TList    *fOutputMass;          	//!list send on output slot 1
  TList    *fOutputCorr;	  	//!list of correlation histos, output slot 5
  TList    *fOutputStudy;	  	//!list of histos with MC distributions, output slot 6
  TH1F     *fNentries;            	//!histogram with number of events on output slot 2
  AliRDHFCutsD0toKpi *fCutsD0;    	// Cuts for D0, output 3
  AliHFAssociatedTrackCuts *fCutsTracks;// Cuts for tracks and K0, output 7
  AliHFCorrelator* fCorrelatorTr;	// Correlator for tracks
  AliHFCorrelator* fCorrelatorKc;	// Correlator for charged K
  AliHFCorrelator* fCorrelatorK0;	// Correlator for K0
  Bool_t    fReadMC;              	// flag for MC array: kTRUE = read it, kFALSE = do not read it
  Bool_t    fRecoTr;   		       	// flag for using MC reconstructed (kTRUE) or pure kinematic MC (kFALSE) - Associated tracks
  Bool_t    fRecoD0;   		       	// flag for using MC reconstructed (kTRUE) or pure kinematic MC (kFALSE) - D0
  Bool_t    fSelEvType;		       	// flag for enabling selection of event tpye (PP, GS, FE, ...) on MC analysis
  Bool_t    fMixing;			// flag to enable also event mixing
  AliNormalizationCounter *fCounter;	//!AliNormalizationCounter on output slot 4
  Int_t     fNPtBins;             	// Number of pt bins
  Int_t     fFillOnlyD0D0bar;     	// flag to fill mass histogram with D0/D0bar only (0 = fill with both, 1 = fill with D0 only, 2 = fill with D0bar only)
  Int_t     fIsSelectedCandidate; 	// selection outcome
  Int_t     fSys;                 	// fSys=0 -> p-p; fSys=1 ->PbPb
  Double_t  fEtaForCorrel;		// cut for D0 eta to enable correlation with associated particles
  Bool_t    fIsRejectSDDClusters; 	// flag to reject events with SDD clusters
  Bool_t    fFillGlobal;          	// flag to fill global plots (in loops on tracks and V0 for each event)
  Double_t  fMultEv;			// event multiplicity (for trigger eff)
  Bool_t    fSoftPiCut;			// flag to activate soft pion cut on Data
  Bool_t    fMEAxisThresh;		// flag to fill threshold axis in ME plots
  Bool_t    fKaonCorr;			// enables correlations of D0-Kcharg and D0-K0

  ClassDef(AliAnalysisTaskSED0Correlations,5); // AliAnalysisTaskSE for D0->Kpi
};

#endif

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