Possibility to keep only D mesons that have a c or b quark as a grandmother (Francesc...
[u/mrichter/AliRoot.git] / PWG3 / hfe / AliHFEelecbackground.h
CommitLineData
27de2dfb 1#ifndef ALIHFEELECBACKGROUND_H
2#define ALIHFEELECBACKGROUND_H
3
02524e30 4/**************************************************************************
5 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
6 * *
7 * Author: The ALICE Off-line Project. *
8 * Contributors are mentioned in the code where appropriate. *
9 * *
10 * Permission to use, copy, modify and distribute this software and its *
11 * documentation strictly for non-commercial purposes is hereby granted *
12 * without fee, provided that the above copyright notice appears in all *
13 * copies and that both the copyright notice and this permission notice *
14 * appear in the supporting documentation. The authors make no claims *
15 * about the suitability of this software for any purpose. It is *
16 * provided "as is" without express or implied warranty. *
17 **************************************************************************/
27de2dfb 18
19/* $Id$ */
20
02524e30 21//
22// Secondary vertexing construction Class
23// Construct secondary vertex from Beauty hadron with electron and
24// hadrons, then apply selection criteria
25//
26
02524e30 27#ifndef ROOT_TObject
28//#include <TObject.h>
29#endif
30
31class AliESDEvent;
70da6c5a 32class AliESDpid;
02524e30 33class AliESDVertex;
34class AliAODEvent;
35class AliESDtrack;
36class AliAODTrack;
37class AliMCEvent;
38
70da6c5a 39class AliHFEpid;
40
41
02524e30 42//________________________________________________________________
43class AliHFEelecbackground : public TObject {
70da6c5a 44 public:
45 AliHFEelecbackground();
46 AliHFEelecbackground(const AliHFEelecbackground &p);
47 AliHFEelecbackground &operator=(const AliHFEelecbackground &);
48 virtual ~AliHFEelecbackground();
02524e30 49 virtual Bool_t Load(const Char_t *filename);
70da6c5a 50 virtual Bool_t Load(TList * const outputlist);
02524e30 51
70da6c5a 52 void CreateHistograms(TList * const qaList);
d2af20c5 53 void Reset();
02524e30 54
70da6c5a 55 Bool_t HasMCData() const { return TestBit(kHasMCData); };
56 Bool_t IsAODanalysis() const { return TestBit(kAODanalysis); };
57 Bool_t IsESDanalysis() const { return !TestBit(kAODanalysis); };
58
59 void SetHasMCData(Bool_t hasMCdata = kTRUE) { SetBit(kHasMCData,hasMCdata); };
60 void SetAODAnalysis() { SetBit(kAODanalysis, kTRUE); };
61 void SetESDAnalysis() { SetBit(kAODanalysis, kFALSE); };
62 void SetEvent(AliESDEvent* const ESD);
63 void SetEventAOD(AliAODEvent* const AOD){fAOD1=AOD;};
64 void SetMCEvent(AliMCEvent* const mcEvent){fMCEvent=mcEvent;};
69ac0e6f 65
70da6c5a 66 void SetOpeningAngleCut(Double_t openingAngleCut){fOpeningAngleCut = openingAngleCut;};
69ac0e6f 67 void SetInvMassCut(Double_t invMassCut){fInvMassCut = invMassCut;};
68 void SetChi2NdfCut(Double_t chi2NdfCut){fChi2NdfCut = chi2NdfCut;};
69 void SetUseAliKFCode(Bool_t useAliKFCode){fUseAliKFCode = useAliKFCode;};
70 void SetSharedClusterCut(Bool_t sharedClusterCut){fSharedClusterCut = sharedClusterCut;};
71 void SetRequireITSStandalone(Short_t requireITSStandalone){fRequireITSStandalone = requireITSStandalone;};
72 void SetMinITSChi2(Double_t minITSChi2) {fMinITSChi2 = minITSChi2;};
73 void SetMinNbCls(Int_t minNbCls){fMinNbCls = minNbCls;};
74 void SetMinNbClsSDDSPD(Int_t minNbClsSDDSPD){fMinNbClsSDDSPD = minNbClsSDDSPD;};
75 void SetPIDPartner();
76 void SetPIDMethodPartner(AliHFEpid * const pid) {fPIDMethodPartner = pid;};
77 void SetPIDMethodPartnerITS(AliESDpid * const pid) {fPIDMethodPartnerITS = pid;};
78 void SetDebugLevel(Short_t debugLevel) { fDebugLevel = debugLevel;};
79
80 Double_t GetOpeningAngleCut() const { return fOpeningAngleCut; };
81 Double_t GetInvMassCut() const { return fInvMassCut; };
82 Double_t GetChi2NdfCut() const { return fChi2NdfCut; };
83 Bool_t GetUseAliKFCode() const { return fUseAliKFCode; };
84 Bool_t GetSharedClusterCut() const { return fSharedClusterCut; };
85 Short_t GetRequireITSStandalone() const { return fRequireITSStandalone; };
86 Int_t GetMinNbCls() const { return fMinNbCls;};
87 Double_t GetMinITSChi2() const { return fMinITSChi2; };
88 Int_t GetMinNbClsSDDSPD() const { return fMinNbClsSDDSPD;};
89 Bool_t GetPIDPartner() const { return fPIDPartner;};
90
91 TList *GetList() const { return fList; };
92 TList *GetListPostProcess() const { return fListPostProcess; };
93
94 Bool_t SingleTrackCut(AliESDtrack* const trackPart) const;
95 Bool_t ShareCluster(AliESDtrack * const track1,AliESDtrack * const track2);
96 Bool_t PIDTrackCut(AliESDtrack* const trackPart);
97 void PairAnalysis(AliESDtrack* const track, AliESDtrack* const trackpart);
98 void FillOutput(Double_t *results, Double_t *resultsr, Int_t sign);
70da6c5a 99 void PostProcess();
69ac0e6f 100 void Plot() const;
101
02524e30 102 private:
70da6c5a 103 enum{
104 kHasMCData = BIT(15), // bitset for mc data usage
69ac0e6f 105 kAODanalysis = BIT(16) // bitset for aod analysis
106 };
107 enum {kDatai=0, kDatar=1, kDatadca=2, kDatachi2Ndf=3, kMCo=4, kMCr=5, kMCdca=6, kMCchi2Ndf=7, kMCe=8, kMCcutPart0=9, kMCcutPart1=10, kMCcutPart2=11, kMCcutPart3=12}; // In the fList Data/MC
108 enum {kOs=0, kPp=1, kNn=2, kR=3}; // In the last dimension Charge
109 enum {kOos=0, kOss=1, kOr=2, kOdiff=3}; // outputs
110 enum {kNOutput=4,kNMCInfo=5}; // Nb of outputs
111 enum{
112 kElectronFromBackground = 0,
113 kElectronFromGamma = 1,
114 kElectronFromPi0 = 2,
115 kElectronFromEta = 3,
116 kElectronFromC = 4,
117 kElectronFromB = 5
118 }; // MC: Origin
119 enum {kNotSplitted=0, kSplittedOs=1, kSplittedSs=2}; // MC: splitted
120
121 Bool_t CalculateMotherVariable(AliESDtrack* const track, AliESDtrack* const trackpart, Double_t *results);
122 void CalculateMotherVariableR(AliESDtrack* const track, AliESDtrack* const trackpart, Double_t *results);
123 Int_t IsMotherGamma(Int_t tr);
124 Int_t IsMotherPi0(Int_t tr);
125 Int_t IsMotherEta(Int_t tr);
126 Int_t IsMotherC(Int_t tr);
127 Int_t IsMotherB(Int_t tr);
128 Int_t GetPdg(Int_t tr);
129 Int_t GetLabMother(Int_t tr);
130
131 static Double_t BetheBlochElectronITS(const Double_t *x, const Double_t * /*par*/);
132 static Double_t BetheBlochMuonITS(const Double_t *x, const Double_t * /*par*/);
133 static Double_t BetheBlochPionITS(const Double_t *x, const Double_t * /*par*/);
134 static Double_t BetheBlochKaonITS(const Double_t *x, const Double_t * /*par*/);
135 static Double_t BetheBlochProtonITS(const Double_t *x, const Double_t * /*par*/);
136
137 static Double_t BetheBlochElectronTPC(const Double_t *x, const Double_t * /*par*/);
138 static Double_t BetheBlochMuonTPC(const Double_t *x, const Double_t * /*par*/);
139 static Double_t BetheBlochPionTPC(const Double_t *x, const Double_t * /*par*/);
140 static Double_t BetheBlochKaonTPC(const Double_t *x, const Double_t * /*par*/);
141 static Double_t BetheBlochProtonTPC(const Double_t *x, const Double_t * /*par*/);
142
143 THnSparseF *fhtmp; // Only to avoid coverity problem
144 TH2F *fhtmpf; // Only to avoid coverity problem
145 TH1F *fhtmpp; // Only to avoid coverity problem
146
70da6c5a 147 AliESDEvent* fESD1; //! ESD pointer
148 AliAODEvent* fAOD1; //! AOD pointer
149 AliMCEvent* fMCEvent; //! MC event
69ac0e6f 150 Double_t fBz; // Magnetic field
151 const AliESDVertex *fkVertex; //! Primary vertex
152 static const Double_t fgkMe; //! Mass of the electron
153
154 Double_t fPtESD; //! pt of tagged electron
155 Int_t fIndexTrack; //! index track
156 Int_t fPdg; //! pdg code track
157 Int_t fLabMother; //! label first mother track
158 Int_t fIsFrom; //! is track from
159 Int_t fMotherGamma; //! Gamma, mother of track
160 Int_t fMotherPi0; //! Pi0, mother of track
161 Int_t fMotherC; //! C, mother of track
162 Int_t fMotherB; //! B, mother of track
163 Int_t fMotherEta; //! eta, mother of track
164 Bool_t fIsPartner; //! Are partners
165 Bool_t fIsSplittedTrack; //! Are splitted track
166
167 Double_t fOpeningAngleCut; //! Opening angle cut
168 Double_t fInvMassCut; //! Inv mass cut
169 Double_t fChi2NdfCut; //! chi2ndf cut for KF code
170
171 Bool_t fUseAliKFCode; //! Use AliKF code to calculate the pair properties
172
173 Bool_t fSharedClusterCut; //! Shared Cluster Cut
174 Short_t fRequireITSStandalone; //! ITS standalone: 1 and 2 (pureITSStandalone)
175 Int_t fMinNbCls; //! Min Nb of clusters ITS or TPC
176 Double_t fMinITSChi2; //! ITS chi2 min
177 Int_t fMinNbClsSDDSPD; //! Min Nb of clusters ITS SDD&SPD
178 Bool_t fPIDPartner; //! PID partner
179 AliHFEpid *fPIDMethodPartner; //! PID cuts
180 AliESDpid *fPIDMethodPartnerITS; //! PID cuts ITS
181
182 Short_t fDebugLevel; //! Debug Level
183
184 Bool_t fCuts[10]; //! Cut passed already
185
70da6c5a 186 TList *fList; //! list for outputs
69ac0e6f 187 TList *fListPostProcess; //! list for postprocess
188
189 static Bool_t fgUseMCPID; // flag to use MC PID for tagged electron
d2af20c5 190
191 ClassDef(AliHFEelecbackground,0);
02524e30 192};
193
194#endif