Added D* (Raoul)
[u/mrichter/AliRoot.git] / PWG3 / vertexingHF / AliAnalysisTaskSESignificance.h
1 #ifndef ALIANALYSISTASKSESIGNIFICANCE_H
2 #define ALIANALYSISTASKSESIGNIFICANCE_H
3
4 /* Copyright(c) 1998-2008, ALICE Experiment at CERN, All rights reserved. *
5  * See cxx source for full Copyright notice                               */
6
7 /* $Id$ */ 
8
9 //*************************************************************************
10 // AliAnalysisTaskSESignificane to calculate effects on 
11 // significance of D mesons  cut 
12 // Authors: G. Ortona, ortona@to.infn.it
13 // F. Prino, prino@to.infn.it
14 // Renu Bala, bala@to.infn.it
15 // Chiara Bianchin, cbianchi@pd.infn.it
16 //*************************************************************************
17
18 #include "AliAnalysisTaskSE.h"
19 #include "AliAnalysisVertexingHF.h"
20
21 class TH1F;
22 class AliMultiDimVector;
23 class AliRDHFCuts;
24
25 class AliAnalysisTaskSESignificance : public AliAnalysisTaskSE
26 {
27  public:
28
29   enum FeedDownEnum {kBoth,kCharmOnly,kBeautyOnly};
30   enum ChanDs {kAllReson,kPhi,kK0star};
31
32   AliAnalysisTaskSESignificance();
33   AliAnalysisTaskSESignificance(const char *name, TList *listMDV,AliRDHFCuts *RDCuts, Int_t decaychannel,Int_t selectionlevel=AliRDHFCuts::kAll);
34  
35   virtual ~AliAnalysisTaskSESignificance();
36
37   Bool_t CheckConsistency();
38   void SetReadMC(Bool_t readMC=kTRUE){fReadMC=readMC;}
39   void SetBFeedDown(FeedDownEnum flagB);//see enum
40   void SetDFromCharmOnly(){SetBFeedDown(kCharmOnly);}
41   void SetDFromBeautyOnly(){SetBFeedDown(kBeautyOnly);}
42   void SetMassLimits(Float_t range,Int_t pdg);
43   void SetMassLimits(Float_t lowlimit, Float_t uplimit);
44   void SetNBins(Int_t nbins){fNBins=nbins;}
45   void SetFillWithPartAntiPartBoth(Int_t value){fPartOrAndAntiPart=value;}
46   void SetDsChannel(Int_t chan){fDsChannel=chan;}
47
48   //void SetMultiVector(const AliMultiDimVector *MultiDimVec){fMultiDimVec->CopyStructure(MultiDimVec);}
49   Float_t GetUpperMassLimit()const {return fUpmasslimit;}
50   Float_t GetLowerMassLimit()const {return fLowmasslimit;}
51   Int_t GetNBins()const {return fNBins;}
52   Int_t GetFillWithPartAntiPartBoth()const {return fPartOrAndAntiPart;}
53   Int_t GetBFeedDown()const {return fBFeedDown;}
54   Int_t GetDsChannel()const {return fDsChannel;}
55
56   // Implementation of interface methods
57   virtual void UserCreateOutputObjects();
58   virtual void LocalInit();// {Init();}
59   virtual void UserExec(Option_t *option);
60   virtual void Terminate(Option_t *option);
61     
62  private:
63
64   void SetPDGdaughterDstoKKpi(){
65     fPDGdaughters[0]=321;//K
66     fPDGdaughters[1]=321;//K
67     fPDGdaughters[2]=211;//pi
68     fPDGdaughters[3]=0; //empty
69   }
70   void SetPDGdaughterDstopiKK(){
71     fPDGdaughters[0]=211;//pi
72     fPDGdaughters[1]=321;//K
73     fPDGdaughters[2]=321;//K
74     fPDGdaughters[3]=0; //empty
75   }
76
77   AliAnalysisTaskSESignificance(const AliAnalysisTaskSESignificance &source);
78   AliAnalysisTaskSESignificance& operator=(const AliAnalysisTaskSESignificance& source);
79   void SetPDGCodes();
80   Int_t GetHistoIndex(Int_t iPtBin) const { return iPtBin*3;}
81   Int_t GetSignalHistoIndex(Int_t iPtBin) const { return iPtBin*3+1;}
82   Int_t GetBackgroundHistoIndex(Int_t iPtBin) const { return iPtBin*3+2;}
83   Int_t GetLSHistoIndex(Int_t iPtBin)const { return iPtBin*5;}
84
85
86   void FillDplus(AliAODRecoDecayHF* d,TClonesArray *arrayMC,Int_t index,Int_t isSel);
87   void FillD02p(AliAODRecoDecayHF* d,TClonesArray *arrayMC,Int_t index, Int_t isSel);
88   void FillDs(AliAODRecoDecayHF* d,TClonesArray *arrayMC,Int_t index,Int_t isSel,Int_t optDecay);
89   void FillDstar(AliAODRecoCascadeHF* dstarD0pi,TClonesArray *arrayMC,Int_t index,Int_t isSel);
90   void FillD04p(AliAODRecoDecayHF* d,TClonesArray *arrayMC,Int_t index,Int_t isSel);
91   void FillLambdac(AliAODRecoDecayHF* d,TClonesArray *arrayMC,Int_t index, Int_t isSel);
92
93
94   enum {kMaxPtBins=5};
95   enum {kMaxCutVar=5};
96   enum {kMaxSteps=10};
97   enum {kMaxNHist=500000};
98   enum {kDplustoKpipi,kD0toKpi,kDstartoKpipi,kDstoKKpi,kD0toKpipipi,kLambdactopKpi};
99
100   TList   *fOutput; //! list send on output slot 0
101   TList *fCutList; //Multidimvector container
102   TH1F *fMassHist[kMaxNHist]; //!hist. for inv mass
103   TH1F *fSigHist[kMaxNHist]; //!hist. for inv mass (sig from MC truth)
104   TH1F *fBkgHist[kMaxNHist]; //!hist. for inv mass (bkg from MC truth)
105   TH1F *fRflHist[kMaxNHist]; //!hist. for inv mass (bkg from MC truth)
106   TH1F* fHistNEvents; //! hist of n of aods
107   Float_t fUpmasslimit;  //upper inv mass limit for histos
108   Float_t fLowmasslimit; //lower inv mass limit for histos
109   AliRDHFCuts *fRDCuts;//prong cut values
110   Int_t fNPtBins; //number of pt bins
111   Bool_t fReadMC;    //flag for access to MC
112   FeedDownEnum fBFeedDown; //flag to search for D from B decays
113   Int_t fDecChannel; //decay channel identifier
114   Int_t fPDGmother;  // PDG code of D meson
115   Int_t fNProngs;         // number of prong of the decay channel  
116   Int_t fPDGdaughters[4]; // PDG codes of daughters
117   TString fBranchName;    // AOD branch name for channel
118   Int_t fSelectionlevel;  //selection level: kALL,kTracks,kCandidate
119   Int_t   fNVars;         // number of selection variables
120   Float_t fVars[kMaxCutVar];       // array with values of cut variables
121   Int_t fNBins;  //number of bins in the mass histograms
122   Int_t fPartOrAndAntiPart;  //fill histograms with particle only (+1), antiparticle only (-1), both (0)
123   Int_t fDsChannel;          // Ds resonant channel selected
124   Int_t fPDGDStarToD0pi[2]; //PDG codes for the particles in the D* -> pi + D0 decay
125   Int_t fPDGD0ToKpi[2];    //PDG codes for the particles in the D0 -> K + pi decay
126
127   ClassDef(AliAnalysisTaskSESignificance,4); // AliAnalysisTaskSE for the MC association of heavy-flavour decay candidates
128 };
129
130 #endif