]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG3/vertexingHF/AliAnalysisTaskSECharmFraction.h
27d05077e7937fe85515f13a517f0a44a2935122
[u/mrichter/AliRoot.git] / PWG3 / vertexingHF / AliAnalysisTaskSECharmFraction.h
1 #ifndef ALIANALYSISTASKSECHARMFRACTION_H
2 #define ALIANALYSISTASKSECHARMFRACTION_H
3
4 /* Copyright(c) 1998-2009, ALICE Experiment at CERN, All rights reserved. *
5  * See cxx source for full Copyright notice                               */
6
7 //*************************************************************************
8 // Class AliAnalysisTaskSECharmFraction
9 // AliAnalysisTask for the extraction of the fraction of prompt charm
10 // using the charm hadron impact parameter to the primary vertex
11 //
12 //
13 // Author: Andrea Rossi andrea.rossi@ts.infn.it
14 //*************************************************************************
15
16 class TH1F;
17 class TH2F;
18 class AliAODDEvent;
19 class AliAODMCHeader;
20 class AliAODRecoDecayHF2Prong;
21 class AliAODRecoDecayHF;
22 class AliAODMCParticle;
23 class AliAnalysisVertexingHF;
24 #include "AliAnalysisTaskSE.h"
25
26 class AliAnalysisTaskSECharmFraction : public AliAnalysisTaskSE {
27  public:
28   AliAnalysisTaskSECharmFraction();
29   AliAnalysisTaskSECharmFraction(const char *name);
30   AliAnalysisTaskSECharmFraction(const char *name,Int_t nptbins,Double_t *ptbins);
31   
32   virtual ~AliAnalysisTaskSECharmFraction(); 
33   // Implementation of interface methods
34   virtual void UserCreateOutputObjects();
35   virtual void Init();
36   virtual void LocalInit() {Init();}
37   virtual void UserExec(Option_t *option);
38   virtual void Terminate(Option_t *option);  
39
40   void SetNPtBins(Int_t nbins,const Double_t *ptbins);
41   void SetSignalInvMassCut(const Double_t signalInvMassCut=0.027){fsignalInvMassCut=signalInvMassCut;}
42   void SetLargeInvMassCut(const Double_t largeInvMassCut=2.){flargeInvMassCut=largeInvMassCut;}
43   void SetSideBandInvMassCut(const Double_t sidebandInvMassCut=0.054){// default value ~ 2x3 times inv mass resol.: a factor 2 is applied w.r.t. 3sigma, should be safe enough to exclude most of the reflections 
44     fsidebandInvMassCut=sidebandInvMassCut;  
45   }
46   void SetSideBandInvMassWindow(const Double_t sidebandInvMassWindow=0.108){//~ 6 times inv. mass resol.
47     fsidebandInvMassWindow=sidebandInvMassWindow;
48   }  
49   void SetAcceptanceCut(const Double_t eta=0.9,const Double_t nITSpoints=5.,const Double_t nSPDpoints=2.){fAcceptanceCuts[0]=eta;fAcceptanceCuts[1]=nITSpoints;fAcceptanceCuts[2]=nSPDpoints;}
50   void SetStandardMassSelection();
51   Int_t SetStandardCuts(Double_t pt,Double_t invMassCut);
52   void CheckInvMassD0(AliAODRecoDecayHF2Prong *d,Double_t &invMassD0,Double_t &invMassD0bar,Bool_t &isPeakD0,Bool_t &isPeakD0bar,Bool_t &isSideBandD0,Bool_t &isSideBandD0bar);
53   AliAODRecoDecayHF *GetD0toKPiSignalType(const AliAODRecoDecayHF2Prong *d,TClonesArray *arrayMC,Int_t &signaltype,Double_t &massMumTrue,Double_t *primaryVtx);
54   AliAODRecoDecayHF* ConstructFakeTrueSecVtx(const AliAODMCParticle *b1,const AliAODMCParticle *b2,const AliAODMCParticle *mum,Double_t *primaryVtxTrue);
55   void SetUseMC(Bool_t useMC){fUseMC=useMC;}
56   //#################
57    /* ######### THE FOLLOWING IS FOR FURTHER IMPLEMENATION ############
58     Int_t GetPtBin(Double_t pt)const;
59     void SetD0Cuts(Int_t ptbin,Double_t &*d0cutsLoose,Double_t &*d0cutsTight);
60
61   //  void InvMassSelection();
62   
63   void SetCheckMC(Bool_t checkMC){fcheckMC=checkMC;}
64   void SetCheckMC_D0(Bool_t check_D0){fcheckMCD0=check_D0;}
65   void SetCheckMC_2prongs(Bool_t check2prongs){fcheckMC2prongs=check2prongs;}
66   void SetCheckMC_prompt(Bool_t checkprompt){fcheckMCprompt=checkprompt;}
67   void SetCheckMC_fromB(Bool_t checkfromB){fcheckMCfromB=checkfromB;}
68   void SetCheckMC_fromDstar(Bool_t skipD0star){fSkipD0star=skipD0star;}
69   void SetUseCuts(Bool_t usecuts){fD0usecuts=usecuts;}
70   void SetSideBands(Double_t sideband){fSideBands=sideband;}
71   void SetStudyPureBackground(Bool_t back){fStudyPureBackground=back;}
72   */
73
74  private:
75   Bool_t FillHistos(AliAODRecoDecayHF2Prong *d,TList *&list,Int_t ptbin,Int_t okD0,Int_t okD0bar,Double_t invMassD0,Double_t invMassD0bar,Bool_t isPeakD0,Bool_t isPeakD0bar,Bool_t isSideBand,Double_t massmumtrue,AliAODRecoDecayHF *aodDMC,Double_t *vtxTrue);
76  
77   AliAnalysisVertexingHF *fVHFloose;        // Vertexer heavy flavour
78   AliAnalysisVertexingHF *fVHFtight;        // Vertexer heavy flavour
79   Double_t    fmD0PDG;                      //  MC D0 mass
80   Int_t        fnbins;                      // Number of pt bins
81   Double_t *fptbins;                        //[fnbins] ptbins 
82   Double_t fAcceptanceCuts[3];                // array with acceptance cuts
83   Double_t fsignalInvMassCut;               // invariant mass cut to define signal region
84   Double_t flargeInvMassCut;                // invariant mass cut to accept all inv mass window
85   Double_t fsidebandInvMassCut;             // invariant mass cut to define side band region lower limit
86   Double_t fsidebandInvMassWindow;          // invariant mass cut to define side band region width
87   Bool_t fUseMC;                            // flag to use or not MC info
88   TH1F *fNentries;                          //!histo for #AOD analysed, container 1
89   TH1F *fSignalType;                        //!histo for the type of MC signal , container 2
90   TH1F *fSignalTypeLsCuts;                 //!histo for the type of MC signal with loose cuts , container 3
91   TH1F *fSignalTypeTghCuts;                //!histo for the type of MC signal with tight cuts, container 4
92   TList *flistNoCutsSignal;               //!TList for signal (D prompt) with nocuts, container 5
93   TList *flistNoCutsBack;               //!TList for background with nocuts, container 6
94   TList *flistNoCutsFromB;               //!TList for D from B or D from Dstar from Bwith nocuts, container 7
95   TList *flistNoCutsFromDstar;               //!TList for D from Dstar with nocuts, container 8
96   TList *flistNoCutsOther;               //!TList for others with nocuts, container 9
97   TList *flistLsCutsSignal;               //!TList for signal (D prompt) with loose cuts, container 10
98   TList *flistLsCutsBack;               //!TList for background with loose cuts, container 11
99   TList *flistLsCutsFromB;               //!TList for D from B or D from Dstar from B with loose cuts, container 12
100   TList *flistLsCutsFromDstar;               //!TList for D from Dstar with loose cuts, container 13
101   TList *flistLsCutsOther;               //!TList for others with loose cuts, container 14
102   TList *flistTghCutsSignal;               //!TList for signal (D prompt) with tight cuts, container 15
103   TList *flistTghCutsBack;               //!TList for backgrnd with tight cuts, container 16
104   TList *flistTghCutsFromB;               //!TList for D from B or D from Dstar from Bwith tight cuts, container 17
105   TList *flistTghCutsFromDstar;               //!TList for D from Dstar Dstar with tight cuts, container 18
106   TList *flistTghCutsOther;               //!TList for others with tight cuts, container 19
107   /*  Bool_t       fD0usecuts;            // Switch on the use of the cuts             TO BE IMPLEMENTED 
108       Bool_t       fcheckMC;              //  Switch on MC check: minimum check is same mother  TO BE IMPLEMENTED
109       Bool_t       fcheckMCD0;           //  check the mother is a D0                  TO BE IMPLEMENTED
110       Bool_t       fcheckMC2prongs;         //  check the decay is in two prongs       TO BE IMPLEMENTED  
111       Bool_t       fcheckMCprompt;       //  check the D0 comes from a c quark         TO BE IMPLEMENTED
112       Bool_t       fcheckMCfromB;        //  check the D0 comes from a b quark         TO BE IMPLEMENTED
113       Bool_t       fSkipD0star;           // skip if D0 comes from a D*                TO BE IMPLEMENTED
114       Bool_t  fStudyd0fromBTrue;         // Flag for analyze true impact par of D0 from B       TO BE IMPLEMENTED 
115       Bool_t  fStudyPureBackground;      // Flag to study the background (reverse the selection on the signal)     TO BE IMPLEMENTED 
116       Double_t  fSideBands;                //Side bands selection (see cxx)            TO BE IMPLEMENTED
117   */
118   AliAnalysisTaskSECharmFraction(const AliAnalysisTaskSECharmFraction&); // not implemented
119   AliAnalysisTaskSECharmFraction& operator=(const AliAnalysisTaskSECharmFraction&); // not implemented
120   
121   ClassDef(AliAnalysisTaskSECharmFraction,1); // analysis task for prompt charm fraction
122 };
123
124 #endif