ROOT logo
#ifndef ALIANALYSISTASKSESIGNIFICANCE_H
#define ALIANALYSISTASKSESIGNIFICANCE_H

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

/* $Id$ */ 

//*************************************************************************
// AliAnalysisTaskSESignificane to calculate effects on 
// significance of D mesons  cut 
// Authors: G. Ortona, ortona@to.infn.it
// F. Prino, prino@to.infn.it
// Renu Bala, bala@to.infn.it
// Chiara Bianchin, cbianchi@pd.infn.it
//*************************************************************************

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

class TH1F;
class AliMultiDimVector;
class AliRDHFCuts;

class AliAnalysisTaskSESignificance : public AliAnalysisTaskSE
{
 public:

  enum FeedDownEnum {kBoth,kCharmOnly,kBeautyOnly};
  enum ChanDs {kAllReson,kPhi,kK0star};

  AliAnalysisTaskSESignificance();
  AliAnalysisTaskSESignificance(const char *name, TList *listMDV,AliRDHFCuts *RDCuts, Int_t decaychannel,Int_t selectionlevel=AliRDHFCuts::kAll);
 
  virtual ~AliAnalysisTaskSESignificance();

  Bool_t CheckConsistency();
  void SetReadMC(Bool_t readMC=kTRUE){fReadMC=readMC;}
  void SetBFeedDown(FeedDownEnum flagB);//see enum
  void SetDFromCharmOnly(){SetBFeedDown(kCharmOnly);}
  void SetDFromBeautyOnly(){SetBFeedDown(kBeautyOnly);}
  void SetMassLimits(Float_t range,Int_t pdg);
  void SetMassLimits(Float_t lowlimit, Float_t uplimit);
  void SetNBins(Int_t nbins){fNBins=nbins;}
  void SetFillWithPartAntiPartBoth(Int_t value){fPartOrAndAntiPart=value;}
  void SetDsChannel(Int_t chan){fDsChannel=chan;}
  void SetUseSelBit(Bool_t selBit=kTRUE){fUseSelBit=selBit;}

  //void SetMultiVector(const AliMultiDimVector *MultiDimVec){fMultiDimVec->CopyStructure(MultiDimVec);}
  Float_t GetUpperMassLimit()const {return fUpmasslimit;}
  Float_t GetLowerMassLimit()const {return fLowmasslimit;}
  Int_t GetNBins()const {return fNBins;}
  Int_t GetFillWithPartAntiPartBoth()const {return fPartOrAndAntiPart;}
  Int_t GetBFeedDown()const {return fBFeedDown;}
  Int_t GetDsChannel()const {return fDsChannel;}
  Bool_t GetUseSelBit()const {return fUseSelBit;}

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

  void SetPDGdaughterDstoKKpi(){
    fPDGdaughters[0]=321;//K
    fPDGdaughters[1]=321;//K
    fPDGdaughters[2]=211;//pi
    fPDGdaughters[3]=0; //empty
  }
  void SetPDGdaughterDstopiKK(){
    fPDGdaughters[0]=211;//pi
    fPDGdaughters[1]=321;//K
    fPDGdaughters[2]=321;//K
    fPDGdaughters[3]=0; //empty
  }

  AliAnalysisTaskSESignificance(const AliAnalysisTaskSESignificance &source);
  AliAnalysisTaskSESignificance& operator=(const AliAnalysisTaskSESignificance& source);
  void SetPDGCodes();
  Int_t GetHistoIndex(Int_t iPtBin) const { return iPtBin*3;}
  Int_t GetSignalHistoIndex(Int_t iPtBin) const { return iPtBin*3+1;}
  Int_t GetBackgroundHistoIndex(Int_t iPtBin) const { return iPtBin*3+2;}
  Int_t GetLSHistoIndex(Int_t iPtBin)const { return iPtBin*5;}
  Int_t CheckOrigin(const AliAODMCParticle* mcPart, const TClonesArray* mcArray) const;

  void FillDplus(AliAODRecoDecayHF* d,TClonesArray *arrayMC,Int_t index,Int_t isSel);
  void FillD02p(AliAODRecoDecayHF* d,TClonesArray *arrayMC,Int_t index, Int_t isSel);
  void FillDs(AliAODRecoDecayHF* d,TClonesArray *arrayMC,Int_t index,Int_t isSel,Int_t optDecay);
  void FillDstar(AliAODRecoCascadeHF* dstarD0pi,TClonesArray *arrayMC,Int_t index,Int_t isSel);
  void FillD04p(AliAODRecoDecayHF* d,TClonesArray *arrayMC,Int_t index,Int_t isSel);
  void FillLambdac(AliAODRecoDecayHF* d,TClonesArray *arrayMC,Int_t index, Int_t isSel);


  enum {kMaxPtBins=8};
  enum {kMaxCutVar=10};
  enum {kMaxSteps=10};
  enum {kMaxNHist=500000};
  enum {kDplustoKpipi,kD0toKpi,kDstartoKpipi,kDstoKKpi,kD0toKpipipi,kLambdactopKpi};

  TList   *fOutput; //! list send on output slot 0
  TList *fCutList; //Multidimvector container
  TH1F *fMassHist[kMaxNHist]; //!hist. for inv mass
  TH1F *fSigHist[kMaxNHist]; //!hist. for inv mass (sig from MC truth)
  TH1F *fBkgHist[kMaxNHist]; //!hist. for inv mass (bkg from MC truth)
  TH1F *fRflHist[kMaxNHist]; //!hist. for inv mass (bkg from MC truth)
  TH1F* fHistNEvents; //! hist of n of aods
  Float_t fUpmasslimit;  //upper inv mass limit for histos
  Float_t fLowmasslimit; //lower inv mass limit for histos
  AliRDHFCuts *fRDCuts;//prong cut values
  Int_t fNPtBins; //number of pt bins
  Bool_t fReadMC;    //flag for access to MC
  Bool_t fUseSelBit;    //flag to use selection bit (speed up candidates selection)
  FeedDownEnum fBFeedDown; //flag to search for D from B decays
  Int_t fDecChannel; //decay channel identifier
  Int_t fPDGmother;  // PDG code of D meson
  Int_t fNProngs;         // number of prong of the decay channel  
  Int_t fPDGdaughters[4]; // PDG codes of daughters
  TString fBranchName;    // AOD branch name for channel
  Int_t fSelectionlevel;  //selection level: kALL,kTracks,kCandidate
  Int_t   fNVars;         // number of selection variables
  Float_t fVars[kMaxCutVar];       // array with values of cut variables
  Int_t fNBins;  //number of bins in the mass histograms
  Int_t fPartOrAndAntiPart;  //fill histograms with particle only (+1), antiparticle only (-1), both (0)
  Int_t fDsChannel;          // Ds resonant channel selected
  Int_t fPDGDStarToD0pi[2]; //PDG codes for the particles in the D* -> pi + D0 decay
  Int_t fPDGD0ToKpi[2];    //PDG codes for the particles in the D0 -> K + pi decay

  ClassDef(AliAnalysisTaskSESignificance,5); // AliAnalysisTaskSE for the MC association of heavy-flavour decay candidates
};

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