ROOT logo
#ifndef ALIANALYSISTASKSED0MASS_H
#define ALIANALYSISTASKSED0MASS_H

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

/* $Id$ */ 

//*************************************************************************
// Class AliAnalysisTaskSED0Mass
// AliAnalysisTaskSE for D0 candidates invariant mass histogram
// and comparison to MC truth (kinematics stored in the AOD) and cut variables
// distributions
// Authors: A.Dainese, andrea.dainese@ln.infn.it
// and C.Bianchin, chiara.bianchin@pd.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 "AliNormalizationCounter.h"

class AliAODEvent;

class AliAnalysisTaskSED0Mass : public AliAnalysisTaskSE
{
 public:

  AliAnalysisTaskSED0Mass();
  AliAnalysisTaskSED0Mass(const char *name,AliRDHFCutsD0toKpi* cuts);
  virtual ~AliAnalysisTaskSED0Mass();


  // 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 SetArray(Int_t type=AliAnalysisTaskSED0Mass::kD0){fArray=type;}
  enum{kD0,kLS};

  void SetReadMC(Bool_t readMC=kFALSE){fReadMC=readMC;}
  void SetCutOnDistr(Bool_t cutondistr=kFALSE){fCutOnDistr=cutondistr;}
  void SetUsePid4Distr(Bool_t usepid=kTRUE){fUsePid4Distr=usepid;}
  void SetFillOnlyD0D0bar(Int_t flagfill){fFillOnlyD0D0bar=flagfill;}
  void SetFillVarHists(Bool_t flag) {fFillVarHists=flag;}
  void SetFillPtHistos(Bool_t flag) {fFillPtHist=flag;}
  void SetFillYHistos(Bool_t flag) {fFillYHist=flag;}
  void SetFillImpactParameterHistos(Bool_t flag) {fFillImpParHist=flag;}
  void SetSystem(Int_t sys){fSys=sys; if(fSys==1) SetFillVarHists(kFALSE);}
  void SetRejectSDDClusters(Bool_t flag) { fIsRejectSDDClusters=flag; }
  void SetUseSelectionBit(Bool_t flag) { fUseSelectionBit=flag; }
  void SetWriteVariableTree(Bool_t flag) { fWriteVariableTree=flag; }
  void SetDrawDetSignal(Bool_t flag) { fDrawDetSignal=flag; }
  void SetPIDCheck(Bool_t flag) { fPIDCheck=flag; }


  Bool_t GetCutOnDistr() const {return fCutOnDistr;}
  Bool_t GetUsePid4Distr() const {return fUsePid4Distr;}
  Int_t  GetFillOnlyD0D0bar() const {return fFillOnlyD0D0bar;}
  Bool_t GetFillVarHists() const {return fFillVarHists;}
  Bool_t GetFillPtHistos() const {return fFillPtHist;}
  Bool_t GetFillYHistos() const {return fFillYHist;}
  Bool_t GetFillImpactParameterHistos() const {return fFillImpParHist;}
  Int_t  GetSystem() const {return fSys;}
  Bool_t GetRejectSDDClusters() const { return fIsRejectSDDClusters; }
  Bool_t GetUseSelectionBit() const { return fUseSelectionBit; }
  Bool_t GetWriteVariableTree() const {return fWriteVariableTree;}
  Bool_t GetDrawDetSignal() const {return fDrawDetSignal;}
  Bool_t GetPIDCheck() const {return fPIDCheck;}

 private:

  AliAnalysisTaskSED0Mass(const AliAnalysisTaskSED0Mass &source);
  AliAnalysisTaskSED0Mass& operator=(const AliAnalysisTaskSED0Mass& source); 
  void	   DrawDetSignal(AliAODRecoDecayHF2Prong *part, TList *ListDetSignal);

  void     FillMassHists(AliAODRecoDecayHF2Prong *part, TClonesArray *arrMC, AliAODMCHeader *mcHeader, AliRDHFCutsD0toKpi *cuts, TList *listout);
  void     FillVarHists(AliAODEvent *aodev,AliAODRecoDecayHF2Prong *part, TClonesArray *arrMC, AliRDHFCutsD0toKpi *cuts, TList *listout);
  AliAODVertex* GetPrimaryVtxSkipped(AliAODEvent *aodev);
  void CreateImpactParameterHistos();
  Int_t CheckOrigin(TClonesArray* arrayMC, AliAODMCParticle *mcPartCandidate) const;
  Float_t GetTrueImpactParameter(AliAODMCHeader *mcHeader, TClonesArray* arrayMC, AliAODMCParticle *partD0) const ;

  TList    *fOutputMass;          //! list send on output slot 1
  TList    *fOutputMassPt;        //! list send on output slot 6
  TList    *fOutputMassY;        //! list send on output slot 9
  TList    *fDistr;               //! list send on output slot 2
  TH1F     *fNentries;            //! histogram with number of events on output slot 3
  AliRDHFCutsD0toKpi *fCuts;      //  Cuts - sent to output slot 4
  THnSparseF *fHistMassPtImpParTC[5];   //! histograms for impact paramter studies
  Int_t     fArray;               //  can be D0 or Like Sign candidates
  Bool_t    fReadMC;              //  flag for MC array: kTRUE = read it, kFALSE = do not read it
  Bool_t    fCutOnDistr;          //  flag to decide if apply cut also on distributions: 0 no cuts, 1 looser cuts, 2 tighter cuts 
  Bool_t    fUsePid4Distr;        //  flag to use the particle identification to fill the signal histograms of distributions. It has effect only with fReadMC=kFALSE
  AliNormalizationCounter *fCounter;//!AliNormalizationCounter on output slot 5
  Int_t     fNPtBins;             //  number of pt bins
  Double_t  fLsNormalization;     //  normalization
  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)
  TObjArray fDaughterTracks;      // keeps the daughter tracks
  Int_t     fIsSelectedCandidate; // selection outcome
  Bool_t    fFillVarHists;        // flag to enable filling variable histos
  Int_t     fSys;                 // fSys=0 -> p-p; fSys=1 ->PbPb (in this case fFillVarHists=kFALSE by default: set it to kTRUE *after* if needed)
  Bool_t    fIsRejectSDDClusters; // flag to reject events with SDD clusters
  Bool_t    fFillPtHist;          // flag to fill Pt and Impact Parameter Histograms
  Bool_t    fFillYHist;          // flag to fill Y Histograms
  Bool_t    fFillImpParHist;      // flag to fill Pt and Impact Parameter Histograms
  Bool_t    fUseSelectionBit;     // flag to check or not the selection bit

  Bool_t    fWriteVariableTree;       // flag to decide whether to write the candidate variables on a tree variables
  TTree    *fVariablesTree;           //! tree of the candidate variables after track selection on output slot 7
  Double_t *fCandidateVariables;      //!  variables to be written to the tree
  Bool_t	fPIDCheck;			// flag to decide whether to fill "PID = x" bins in fNentrie
  Bool_t    fDrawDetSignal;		// flag to decide whether to draw the TPC dE/dx and TOF signal before/after PID
  TList	   *fDetSignal;		//!Detector signal histograms (on output slot 8)

  ClassDef(AliAnalysisTaskSED0Mass,19); // AliAnalysisTaskSE for D0->Kpi
};

#endif

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