]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGHF/vertexingHF/AliAnalysisTaskSECharmFraction.h
Merge branch 'feature-movesplit'
[u/mrichter/AliRoot.git] / PWGHF / vertexingHF / AliAnalysisTaskSECharmFraction.h
CommitLineData
c683985a 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
16class TH1F;
17class TH2F;
d7d08dd3 18class TF1;
c683985a 19class AliAODDEvent;
20class AliAODMCHeader;
21class AliAODRecoDecayHF2Prong;
22class AliAODRecoDecayHF;
23class AliAODMCParticle;
24class AliAnalysisVertexingHF;
25class AliRDHFCutsD0toKpi;
26class AliNormalizationCounter;
27class AliVertexingHFUtils;
28
29#include "AliAnalysisTaskSE.h"
30
31class 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();
d7d08dd3 63 Int_t SetStandardCuts();
c683985a 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;
d7d08dd3 70 AliAODRecoDecayHF *GetD0toKPiSignalType(const AliAODRecoDecayHF2Prong *d,TClonesArray *arrayMC,Int_t &signaltype,Double_t &massMumTrue,Double_t *primaryVtx,Int_t &isD0D0bar);
c683985a 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;}
d7d08dd3 82 void SetPtWeightsFromDataPbPb276overLHC12a17a();
c683985a 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:
d7d08dd3 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);
c683985a 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
d7d08dd3 163 TF1 *fWeightPt; // function with pt weights used only for MC histos for reflections and signal mass shape
c683985a 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
d7d08dd3 174 */
c683985a 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