Place the config and root file at the right place
[u/mrichter/AliRoot.git] / PWGHF / hfe / AliHFEsecVtx.h
1 /**************************************************************************
2  * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3  *                                                                        *
4  * Author: The ALICE Off-line Project.                                    *
5  * Contributors are mentioned in the code where appropriate.              *
6  *                                                                        *
7  * Permission to use, copy, modify and distribute this software and its   *
8  * documentation strictly for non-commercial purposes is hereby granted   *
9  * without fee, provided that the above copyright notice appears in all   *
10  * copies and that both the copyright notice and this permission notice   *
11  * appear in the supporting documentation. The authors make no claims     *
12  * about the suitability of this software for any purpose. It is          *
13  * provided "as is" without express or implied warranty.                  *
14  **************************************************************************/
15 //
16 //  Secondary vertexing construction Class
17 //  Construct secondary vertex from Beauty hadron with electron and
18 //  hadrons, then apply selection criteria
19 //
20
21 #ifndef ALIHFESECVTX_H
22 #define ALIHFESECVTX_H
23
24 #ifndef ROOT_TObject
25 //#include <TObject.h>
26 #endif
27
28 #ifndef ROOT_THnSparse
29 #include <THnSparse.h>
30 #endif
31
32 class TH1F;
33 class TH2F;
34 class TString;
35 class AliESDEvent;
36 class AliAODEvent;
37 class AliVTrack;
38 class AliESDtrack;
39 class AliAODTrack;
40 class AliMCEvent;
41 class AliHFEtrackFilter;
42 class AliHFEpairs;
43 class AliHFEsecVtxs;
44 class AliKFParticle;
45 class AliHFEmcQA;
46
47 //________________________________________________________________
48 class AliHFEsecVtx : public TObject {
49
50   public: 
51     AliHFEsecVtx();
52     AliHFEsecVtx(const AliHFEsecVtx &p); // copy constructor
53     AliHFEsecVtx &operator=(const AliHFEsecVtx &); // assignment operator
54     virtual ~AliHFEsecVtx();
55
56     void CreateHistograms(TList * const qaList);
57
58     Bool_t Process(AliVTrack *track);
59
60     Bool_t HasMCData() const { return TestBit(kHasMCData); };
61     Bool_t IsAODanalysis() const { return TestBit(kAODanalysis); };
62     Bool_t IsESDanalysis() const { return !TestBit(kAODanalysis); };
63
64                 void SetHasMCData(Bool_t hasMCdata = kTRUE) { SetBit(kHasMCData,hasMCdata); };
65     void SetAODAnalysis() { SetBit(kAODanalysis, kTRUE); };
66     void SetESDAnalysis() { SetBit(kAODanalysis, kFALSE); };
67     void SetEvent(AliESDEvent* const ESD){fESD1=ESD;};    // set ESD pointer
68     void SetEventAOD(AliAODEvent* const AOD){fAOD1=AOD;}; // set ESD pointer
69     void SetMCEvent(AliMCEvent* const mcEvent){fMCEvent=mcEvent;};  // set stack pointer
70     void SetMCArray(TClonesArray* const mcarry){fMCArray=mcarry;} // set mcarray pointer
71     void SetUseMCPID(Bool_t usemcpid){fUseMCPID=usemcpid;};
72     void SetMCQA(AliHFEmcQA * const mcqa){fMCQA=mcqa;};    // set mcqa pointer
73
74
75     Int_t GetMCPID(const AliESDtrack *track); // return MC pid
76                 Int_t GetMCPDG(const AliVTrack *track);   // return MC pid
77     Int_t GetPairOriginESD(AliESDtrack* track1, AliESDtrack* track2); // return pair origin as a pdg code
78     Int_t GetPairOriginAOD(AliAODTrack* track1, AliAODTrack* track2); // return pair origin as a pdg code
79     Int_t GetPairCode(const AliVTrack* const track1, const AliVTrack* const track2); // return corresponding pair code to pdg code
80     Int_t GetElectronSource(Int_t mclabel); // return origin of the electron
81     Int_t GetPDG(const AliVTrack *track);     // return pdg 
82     void GetESDPID(const AliESDtrack *track, Int_t &recpid, Double_t &recprob); //return esd pid likelihood
83     void GetPrimaryCondition();
84     void RecalcPrimvtx(Int_t nkftrk, const Int_t * const, const AliKFParticle * const); //recalculate primary vertex
85
86     TClonesArray *HFEpairs();
87     TClonesArray *HFEsecvtxs();
88
89     void AddHFEpairToArray(const AliHFEpairs* const pair);
90     void AddHFEsecvtxToArray(const AliHFEsecVtxs* const secvtx);
91
92     void InitHFEpairs();
93     void InitHFEsecvtxs();
94
95     void DeleteHFEpairs();
96     void DeleteHFEsecvtxs();
97
98     void PairAnalysis(AliVTrack* ESDtrack1, AliVTrack* ESDtrack2, Int_t index2); // do e-h analysis
99     void RunSECVTX(AliVTrack *track); // run secondary vertexing algorithm
100
101     void MakeContainer(); // make containers
102     void MakeHistos(Int_t step); // make histograms for different steps
103     void FillHistos(Int_t step, const AliESDtrack *track); // fill histograms for different steps
104
105   protected:
106     void Init();
107     void FindSECVTXCandid(AliVTrack *track);
108     void CalcSECVTXProperty(AliVTrack* track1, AliVTrack* track2, AliVTrack* track3); // calculated distinctive variables
109     void CalcSECVTXProperty(AliVTrack* track1, AliVTrack* track2, AliVTrack* track3, AliVTrack* track4); // calculated distinctive variables
110
111     void Fill4TrkSECVTX(AliVTrack* track, Int_t ipair, Int_t jpair, Int_t kpair);
112     void Fill3TrkSECVTX(AliVTrack* track, Int_t ipair, Int_t jpair);
113     void Fill2TrkSECVTX(AliVTrack* track, const AliHFEpairs *pair);
114
115   private:
116     enum{
117       kHasMCData = BIT(15),     // bitset for mc data usage
118       kAODanalysis = BIT(16)    // bitset for aod analysis
119     };
120     enum {kAll, kDirectCharm, kDirectBeauty, kBeautyCharm, kGamma, kPi0, kElse, kBeautyGamma, kBeautyPi0, kBeautyElse, kMisID}; // electron origin 
121     enum {kCharm=4, kBeauty=5}; // quark flavor
122
123     AliHFEtrackFilter *fFilter; // filter Tracks to combine the signal track with
124     AliESDEvent* fESD1; // ESD pointer             
125     AliAODEvent* fAOD1; // AOD pointer             
126     AliMCEvent* fMCEvent;   // MCEvent pointer              
127
128     AliHFEmcQA* fMCQA;  // mcqa pointer
129
130     Bool_t fUseMCPID;   // if use MC pid 
131
132     TString fkSourceLabel[10]; // electron source label
133
134     Int_t fNparents;           // number of heavy hadrons to be considered
135     Int_t fParentSelect[2][7]; // heavy hadron species
136                 Double_t fPtRng[7];        // pt ranges to consider pt dependant dca cut
137                 Double_t fDcaCut[6];       // pt dependant dca cut
138
139     Int_t fNoOfHFEpairs;       // number of e-h pairs  
140     Int_t fNoOfHFEsecvtxs;     // number of secondary vertexes
141     Int_t fArethereSecVtx;     // checker
142
143     TClonesArray *fHFEpairs;   //! Array of pair 
144     TClonesArray *fHFEsecvtxs; //! Array of secondary vertexes 
145     TClonesArray *fMCArray;    //! mc array pointer
146
147                 Double_t fPVx;          // primary vertex copy x 
148                 Double_t fPVy;          // primary vertex copy y
149                 Double_t fPVx2;         // recalculated primary vertex x 
150                 Double_t fPVy2;         // recalculated primary vertex y
151     Double_t fCosPhi;       // cos of opening angle of two pair vertex
152     Double_t fSignedLxy;    // signed Lxy of secondary vertex
153     Double_t fSignedLxy2;   // signed Lxy of secondary vertex based on recalculated primary vertex
154     Double_t fKFchi2;       // chi2 of secondary vertex
155     Double_t fInvmass;      // invariant mass of secondary vertex
156     Double_t fInvmassSigma; // invariant mass sigma of secondary vertex
157     Double_t fKFip;         // impact parameter of secondary vertex track
158     Double_t fKFip2;        // impact parameter of secondary vertex track based on recalculated primary vertex
159
160     Int_t fNsectrk2prim;    // # of secvtx tracks contributing to primvtx calculation
161
162     Double_t fVtxchi2Tightcut; // pair vertex chi2 cut
163     Double_t fVtxchi2Loosecut; // secvtx vertex chi2 cut
164
165     THnSparseF *fPairQA;    // qa histos for pair analysis 
166     THnSparseF *fSecvtxQA;  // qa histos for secvtx
167     TList *fSecVtxList;     // list for secondary vertexing outputs
168
169   ClassDef(AliHFEsecVtx,0);
170 };
171
172 #endif