]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGHF/vertexingHF/AliAnalysisTaskSECharmFraction.h
Merge branch 'master' of https://git.cern.ch/reps/AliRoot
[u/mrichter/AliRoot.git] / PWGHF / 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@pd.infn.it
14 //*************************************************************************
15
16 class TH1F;
17 class TH2F;
18 class TF1;
19 class AliAODDEvent;
20 class AliAODMCHeader;
21 class AliAODRecoDecayHF2Prong;
22 class AliAODRecoDecayHF;
23 class AliAODMCParticle;
24 class AliAnalysisVertexingHF;
25 class AliRDHFCutsD0toKpi;
26 class AliNormalizationCounter;
27 class AliVertexingHFUtils;
28
29 #include "AliAnalysisTaskSE.h"
30
31 class AliAnalysisTaskSECharmFraction : public AliAnalysisTaskSE {
32  public:
33   AliAnalysisTaskSECharmFraction();
34   AliAnalysisTaskSECharmFraction(const char *name);
35   AliAnalysisTaskSECharmFraction(const char *name,AliRDHFCutsD0toKpi *cutsA,AliRDHFCutsD0toKpi *cutsB);
36
37   virtual ~AliAnalysisTaskSECharmFraction(); 
38
39   // Implementation of interface methods
40   virtual void UserCreateOutputObjects();
41   virtual void Init();
42   virtual void LocalInit() {Init();}
43   virtual void UserExec(Option_t *option);
44   virtual void Terminate(Option_t *option);  
45   void SetReadMC(Bool_t readMC=kTRUE){fReadMC=readMC;}
46   void SetSplitMassD0D0bar(Bool_t splitD0D0bar=kTRUE){fsplitMassD0D0bar=splitD0D0bar;}
47   Bool_t GetIsSplitMassD0D0bar(){return fsplitMassD0D0bar;}
48   void SetUsePID(Bool_t pid){fusePID=pid;}
49   void SetAnalyzeLikeSign(Bool_t likesign=kFALSE){fLikeSign=likesign;}
50   void SetNMaxTrForVtx(const Int_t ntrMaxforVtx){fNtrMaxforVtx=ntrMaxforVtx;}
51   Int_t GetNMaxTrForVtx(){return fNtrMaxforVtx;}
52   void SetPtBins(Int_t nbins,const Float_t *ptbins);
53   void SetSignalInvMassCut(const Double_t signalInvMassCut=0.027){fsignalInvMassCut=signalInvMassCut;}
54   void SetLargeInvMassCut(const Double_t largeInvMassCut=2.){flargeInvMassCut=largeInvMassCut;}
55   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 
56     fsidebandInvMassCut=sidebandInvMassCut;  
57   }
58   void SetSideBandInvMassWindow(const Double_t sidebandInvMassWindow=0.108){//~ 6 times inv. mass resol.
59     fsidebandInvMassWindow=sidebandInvMassWindow;
60   }  
61   void SetAcceptanceCut(const Double_t eta=0.8,const Double_t nITSpoints=5.,const Double_t nSPDpoints=2.){fAcceptanceCuts[0]=eta;fAcceptanceCuts[1]=nITSpoints;fAcceptanceCuts[2]=nSPDpoints;}
62   void SetStandardMassSelection();
63   Int_t SetStandardCuts();
64   void CheckInvMassD0(AliAODRecoDecayHF2Prong *d,Double_t &invMassD0,Double_t &invMassD0bar,Bool_t &isPeakD0,Bool_t &isPeakD0bar,Bool_t &isSideBandD0,Bool_t &isSideBandD0bar);
65   void SetAnalysisLevel(Int_t level){fFastAnalysis=level;}
66   void SetCheckBitD0flag(Bool_t checkfl){fcheckD0Bit=checkfl;}
67   Bool_t GetCheckBitD0flag(){return fcheckD0Bit;}
68   Int_t GetAnalysisLevel(){return fFastAnalysis;}
69   Int_t CheckOrigin(const TClonesArray* arrayMC, const AliAODMCParticle *mcPartCandidate)const;
70   AliAODRecoDecayHF *GetD0toKPiSignalType(const AliAODRecoDecayHF2Prong *d,TClonesArray *arrayMC,Int_t &signaltype,Double_t &massMumTrue,Double_t *primaryVtx,Int_t &isD0D0bar);
71   AliAODRecoDecayHF *GetD0toKPiSignalTypeObsolete(const AliAODRecoDecayHF2Prong *d,TClonesArray *arrayMC,Int_t &signaltype,Double_t &massMumTrue,Double_t *primaryVtx);
72   AliAODRecoDecayHF* ConstructFakeTrueSecVtx(const AliAODMCParticle *b1,const AliAODMCParticle *b2,const AliAODMCParticle *mum,Double_t *primaryVtxTrue);
73   void SetUseMC(Bool_t useMC){fUseMC=useMC;}
74   Bool_t SpecialSelD0(AliAODRecoDecayHF2Prong *d,Int_t &nusedforVtx);
75   Bool_t FillAziList(AliAODEvent *aod,Double_t azilist[30000],Int_t trkIDlist[30000],Int_t &nprim)const;
76   void FillAziHistos(AliAODRecoDecayHF2Prong *d,TList *&list,Int_t ptbin,Double_t azilist[30000],Int_t trkIDlist[30000],Int_t nprim,Int_t okD0,Int_t okD0bar,Bool_t isPeakD0,Bool_t isPeakD0bar,Bool_t isSideBandD0,Bool_t isSideBandD0bar)const;
77
78   AliAODVertex* GetPrimaryVtxSkipped(AliAODEvent *aodev,AliAODRecoDecayHF2Prong *d);
79   void SetRejecCandidateMCUpgrade(Bool_t selection){fselectForUpgrade=selection;}
80   void SetSkipEventSelection(Bool_t skip){fskipEventSelection=skip;}
81   void SetMaxZvtxForSkipEventSelection(Double_t zmax){fZvtxUpgr=zmax;}
82   void SetPtWeightsFromDataPbPb276overLHC12a17a();
83   /* ######### THE FOLLOWING IS FOR FURTHER IMPLEMENATION ############
84      Int_t GetPtBin(Double_t pt)const;
85      void SetD0Cuts(Int_t ptbin,Double_t &*d0cutsLoose,Double_t &*d0cutsTight);
86      
87      //  void InvMassSelection();
88      
89      void SetCheckMC(Bool_t checkMC){fcheckMC=checkMC;}
90      void SetCheckMC_D0(Bool_t check_D0){fcheckMCD0=check_D0;}
91      void SetCheckMC_2prongs(Bool_t check2prongs){fcheckMC2prongs=check2prongs;}
92      void SetCheckMC_prompt(Bool_t checkprompt){fcheckMCprompt=checkprompt;}
93      void SetCheckMC_fromB(Bool_t checkfromB){fcheckMCfromB=checkfromB;}
94      void SetCheckMC_fromDstar(Bool_t skipD0star){fSkipD0star=skipD0star;}
95      void SetUseCuts(Bool_t usecuts){fD0usecuts=usecuts;}
96      void SetSideBands(Double_t sideband){fSideBands=sideband;}
97      void SetStudyPureBackground(Bool_t back){fStudyPureBackground=back;}
98   */
99   AliRDHFCutsD0toKpi* GetLooseCut(){
100     return fCutsLoose;
101   }
102   AliRDHFCutsD0toKpi* GetTightCut(){
103     return fCutsTight;
104   }
105   /* void SetCutFunction(Int_t (*setcuts)(AliAnalysisTaskSECharmFraction*,Double_t,Double_t)){
106      fSetCuts=setcuts;
107      fStandCuts=kFALSE;
108      }
109   */
110   //  Int_t SetCuts(AliAnalysisTaskSECharmFraction *alchfr,Double_t pt,Double_t invMassCut);
111   
112  private:
113   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 isSideBandD0,Bool_t isSideBandD0bar,Double_t massmumtrue,AliAODRecoDecayHF *aodDMC,Double_t *vtxTrue,Int_t isD0D0barMC);
114   void FillHistoMCproperties(TClonesArray *arrayMC);
115
116   AliRDHFCutsD0toKpi *fCutsLoose;        // Loose cuts object
117   AliRDHFCutsD0toKpi *fCutsTight;      // Vertexer heavy flavour
118   Int_t fFastAnalysis;                  // Level of analysis speed: default is 1, switch it to 2 to fill the THnSparse
119   Bool_t  fReadMC;                          // Flag To switch on/off access to MC 
120   Bool_t fcheckD0Bit;                       // Flag to check the D0 bit flag
121   Bool_t  fsplitMassD0D0bar;                // Flag to use two shistos for D0 and D0bar invariant masses
122   Bool_t  fLikeSign;                        // Flag to analyse Like Sign array
123   Bool_t  fusePID;                          // Flag to use PID
124   Double_t    fmD0PDG;                      //  MC D0 mass
125   Int_t        fnbins;                      // Number of pt bins
126   Float_t *fptbins;                        //[fnbins] ptbins 
127   Int_t fNtrMaxforVtx;                      // N Max acceptable tracks used for vertex (0,1,2)
128   Double_t fptAll;                          //!Sum of pt of the reco tracks
129   Double_t fptAllSq;                        //!Sum of the square of the pt of the reco tracks
130   Double_t fptMax[3];                       //!Three largest track pt in the event
131   Double_t fAcceptanceCuts[3];                // array with acceptance cuts
132   Double_t fsignalInvMassCut;               // invariant mass cut to define signal region
133   Double_t flargeInvMassCut;                // invariant mass cut to accept all inv mass window
134   Double_t fsidebandInvMassCut;             // invariant mass cut to define side band region lower limit
135   Double_t fsidebandInvMassWindow;          // invariant mass cut to define side band region width
136   Bool_t fUseMC;                            // flag to use or not MC info
137   Bool_t fCleanCandOwnVtx;                  // flag to switch on/off cleaning of the candidate own vtx
138   TH1F *fNentries;                          //!histo for #AOD analysed, container 1
139   TH1F *fSignalType;                        //!histo for the type of MC signal , container 2
140   TH1F *fSignalTypeLsCuts;                 //!histo for the type of MC signal with loose cuts , container 3
141   TH1F *fSignalTypeTghCuts;                //!histo for the type of MC signal with tight cuts, container 4
142   AliNormalizationCounter *fCounter;        //!counter for the normalization 
143   TList *flistMCproperties;               //!TLists for MC properties of D0 w.r.t. B mesons and c quarks cntainer 5
144   TList *flistNoCutsSignal;               //!TList for signal (D prompt) with nocuts, container 6
145   TList *flistNoCutsBack;               //!TList for background with nocuts, container 7
146   TList *flistNoCutsFromB;               //!TList for D from B or D from Dstar from Bwith nocuts, container 8
147   TList *flistNoCutsFromDstar;               //!TList for D from Dstar with nocuts, container 9
148   TList *flistNoCutsOther;               //!TList for others with nocuts, container 10
149   TList *flistLsCutsSignal;               //!TList for signal (D prompt) with loose cuts, container 11
150   TList *flistLsCutsBack;               //!TList for background with loose cuts, container 12
151   TList *flistLsCutsFromB;               //!TList for D from B or D from Dstar from B with loose cuts, container 13
152   TList *flistLsCutsFromDstar;               //!TList for D from Dstar with loose cuts, container 14
153   TList *flistLsCutsOther;               //!TList for others with loose cuts, container 15
154   TList *flistTghCutsSignal;               //!TList for signal (D prompt) with tight cuts, container 16
155   TList *flistTghCutsBack;               //!TList for backgrnd with tight cuts, container 17
156   TList *flistTghCutsFromB;               //!TList for D from B or D from Dstar from Bwith tight cuts, container 18
157   TList *flistTghCutsFromDstar;               //!TList for D from Dstar Dstar with tight cuts, container 19
158   TList *flistTghCutsOther;               //!TList for others with tight cuts, container 20
159   AliVertexingHFUtils *fVertUtil;         // vertexing HF Util
160   Bool_t fselectForUpgrade;               // switch to reject candidates from HIJING and not Pythia for upgrade studies
161   Bool_t fskipEventSelection;               // switch to skip event selection (for upgrade studies)
162   Double_t fZvtxUpgr;                       // cut value on max zvtx used ONLY if fskipEventSelection is kTRUE
163   TF1 *fWeightPt;                           // function with pt weights used only for MC histos for reflections and signal mass shape
164   /*  Bool_t       fD0usecuts;            // Switch on the use of the cuts             TO BE IMPLEMENTED 
165       Bool_t       fcheckMC;              //  Switch on MC check: minimum check is same mother  TO BE IMPLEMENTED
166       Bool_t       fcheckMCD0;           //  check the mother is a D0                  TO BE IMPLEMENTED
167       Bool_t       fcheckMC2prongs;         //  check the decay is in two prongs       TO BE IMPLEMENTED  
168       Bool_t       fcheckMCprompt;       //  check the D0 comes from a c quark         TO BE IMPLEMENTED
169       Bool_t       fcheckMCfromB;        //  check the D0 comes from a b quark         TO BE IMPLEMENTED
170       Bool_t       fSkipD0star;           // skip if D0 comes from a D*                TO BE IMPLEMENTED
171       Bool_t  fStudyd0fromBTrue;         // Flag for analyze true impact par of D0 from B       TO BE IMPLEMENTED 
172       Bool_t  fStudyPureBackground;      // Flag to study the background (reverse the selection on the signal)     TO BE IMPLEMENTED 
173       Double_t  fSideBands;                //Side bands selection (see cxx)            TO BE IMPLEMENTED
174   */ 
175   AliAnalysisTaskSECharmFraction(const AliAnalysisTaskSECharmFraction&); // not implemented
176   AliAnalysisTaskSECharmFraction& operator=(const AliAnalysisTaskSECharmFraction&); // not implemented
177   
178   ClassDef(AliAnalysisTaskSECharmFraction,5); // analysis task for prompt charm fraction
179 };
180
181 #endif