eddf240c0af4ef1cc6732458d407e22dc620b4f9
[u/mrichter/AliRoot.git] / PWGHF / vertexingHF / AliAnalysisVertexingHF.h
1 #ifndef ALIANALYSISVERTEXINGHF_H
2 #define ALIANALYSISVERTEXINGHF_H
3 /* Copyright(c) 1998-2007, ALICE Experiment at CERN, All rights reserved. *
4  * See cxx source for full Copyright notice                               */
5
6 /* $Id$ */ 
7
8 //-------------------------------------------------------------------------
9 //                      Class AliAnalysisVertexingHF
10 //            Reconstruction of heavy-flavour decay candidates
11 //      
12 //  Origin: E.Bruna, G.E.Bruno, A.Dainese, F.Prino, R.Romita, X.M.Zhang
13 //  Contact: andrea.dainese@pd.infn.it
14 //-------------------------------------------------------------------------
15
16 #include <TNamed.h>
17 #include <TList.h>
18
19 #include "AliAnalysisFilter.h"
20 #include "AliESDtrackCuts.h"
21
22 class AliPIDResponse;
23 class AliESDVertex;
24 class AliAODRecoDecay;
25 class AliAODRecoDecayHF;
26 class AliAODRecoDecayHF2Prong;
27 class AliAODRecoDecayHF3Prong;
28 class AliAODRecoDecayHF4Prong;
29 class AliAODRecoCascadeHF;
30 class AliAnalysisFilter;
31 class AliRDHFCuts;
32 class AliRDHFCutsD0toKpi;
33 class AliRDHFCutsJpsitoee;
34 class AliRDHFCutsDplustoKpipi;
35 class AliRDHFCutsDstoKKpi;
36 class AliRDHFCutsLctopKpi;
37 class AliRDHFCutsLctoV0;
38 class AliRDHFCutsD0toKpipipi;
39 class AliRDHFCutsDStartoKpipi;
40 class AliESDtrack;
41 class AliVEvent;
42 class AliAODVertex;
43 class AliVertexerTracks;
44 class AliESDv0; 
45 class AliAODv0; 
46
47 //-----------------------------------------------------------------------------
48 class AliAnalysisVertexingHF : public TNamed {
49  public:
50   //
51   AliAnalysisVertexingHF();
52   AliAnalysisVertexingHF(const AliAnalysisVertexingHF& source);
53   AliAnalysisVertexingHF& operator=(const AliAnalysisVertexingHF& source); 
54   virtual ~AliAnalysisVertexingHF();
55
56   void FindCandidates(AliVEvent *event,
57                       TClonesArray *aodVerticesHFTClArr,
58                       TClonesArray *aodD0toKpiTClArr,
59                       TClonesArray *aodJPSItoEleTClArr,
60                       TClonesArray *aodCharm3ProngTClArr,
61                       TClonesArray *aodCharm4ProngTClArr,
62                       TClonesArray *aodDstarTClArr,
63                       TClonesArray *aodCascadesTClArr,
64                       TClonesArray *aodLikeSign2ProngTClArr,
65                       TClonesArray *aodLikeSign3ProngTClArr);
66
67   TList* FillListOfCuts();
68   void FixReferences(AliAODEvent *aod);  
69   void PrintStatus() const;
70   void SetSecVtxWithKF() { fSecVtxWithKF=kTRUE; }
71   void SetD0toKpiOn() { fD0toKpi=kTRUE; }
72   void SetD0toKpiOff() { fD0toKpi=kFALSE; }
73   void SetJPSItoEleOn() { fJPSItoEle=kTRUE; }
74   void SetJPSItoEleOff() { fJPSItoEle=kFALSE; }
75   void Set3ProngOn() { f3Prong=kTRUE; }
76   void Set3ProngOff() { f3Prong=kFALSE; }
77   void Set4ProngOn() { f4Prong=kTRUE; }
78   void Set4ProngOff() { f4Prong=kFALSE; }
79   void SetDstarOn() { fDstar=kTRUE; }
80   void SetDstarOff() { fDstar=kFALSE; }
81   void SetCascadesOn() { fCascades=kTRUE; }
82   void SetCascadesOff() { fCascades=kFALSE; }
83   void SetLikeSignOn() { fLikeSign=kTRUE; }
84   void SetLikeSignOff() {fLikeSign=kFALSE; fLikeSign3prong=kFALSE;}
85   void SetLikeSign3prongOn() { fLikeSign=kTRUE; fLikeSign3prong=kTRUE; }
86   void SetLikeSign3prongOff() { fLikeSign3prong=kFALSE; }
87   void SetMixEventOn() { fMixEvent=kTRUE; }
88   void SetMixEventOff() { fMixEvent=kFALSE; }
89   void SetInputAOD() { fInputAOD=kTRUE; }
90   Bool_t GetD0toKpi() const { return fD0toKpi; }
91   Bool_t GetJPSItoEle() const { return fJPSItoEle; }
92   Bool_t Get3Prong() const { return f3Prong; }
93   Bool_t Get4Prong() const { return f4Prong; }
94   Bool_t GetDstar()  const { return fDstar; }
95   Bool_t GetCascades() const { return fCascades; }
96   Bool_t GetLikeSign() const { return fLikeSign; }
97   Bool_t GetLikeSign3prong() const { return fLikeSign3prong; }
98   Bool_t GetMixEvent() const { return fMixEvent; }
99   Bool_t GetInputAOD() const { return fInputAOD; }
100   Bool_t GetRecoPrimVtxSkippingTrks() const {return fRecoPrimVtxSkippingTrks;}
101   Bool_t GetRmTrksFromPrimVtx() const {return fRmTrksFromPrimVtx;}
102   void SetFindVertexForDstar(Bool_t vtx=kTRUE) { fFindVertexForDstar=vtx; }
103   void SetFindVertexForCascades(Bool_t vtx=kTRUE) { fFindVertexForCascades=vtx; }
104
105   void  SetV0TypeForCascadeVertex(Int_t type) {fV0TypeForCascadeVertex = type;}
106   Int_t GetV0TypeForCascadeVertex()           { return fV0TypeForCascadeVertex;}
107   
108   void SetRecoPrimVtxSkippingTrks() 
109     { fRecoPrimVtxSkippingTrks=kTRUE; fRmTrksFromPrimVtx=kFALSE;}
110   void UnsetRecoPrimVtxSkippingTrks()
111     { fRecoPrimVtxSkippingTrks=kFALSE; fRmTrksFromPrimVtx=kFALSE;}
112   void SetRmTrksFromPrimVtx() 
113     {fRmTrksFromPrimVtx=kTRUE; fRecoPrimVtxSkippingTrks=kFALSE; }
114   void SetTrackFilter(AliAnalysisFilter* trackF) {
115     // switch off the TOF selection that cannot be applied with AODTracks 
116     TList *l = (TList*)trackF->GetCuts();
117     AliESDtrackCuts *tcuts = (AliESDtrackCuts*)l->FindObject("AliESDtrackCuts");
118     if(tcuts->GetFlagCutTOFdistance()) tcuts->SetFlagCutTOFdistance(kFALSE);
119     fTrackFilter = trackF; 
120   }
121   void SetTrackFilter2prongPbCentral(Float_t maxPercentile, AliAnalysisFilter* trackF) {
122     // switch off the TOF selection that cannot be applied with AODTracks 
123     TList *l = (TList*)trackF->GetCuts();
124     AliESDtrackCuts *tcuts = (AliESDtrackCuts*)l->FindObject("AliESDtrackCuts");
125     if(tcuts->GetFlagCutTOFdistance()) tcuts->SetFlagCutTOFdistance(kFALSE);
126     fTrackFilter2prongCentral = trackF; 
127     fMaxCentPercentileForTightCuts=maxPercentile;
128   }
129   void SetTrackFilter3prongPbCentral(Float_t maxPercentile, AliAnalysisFilter* trackF) {
130     // switch off the TOF selection that cannot be applied with AODTracks 
131     TList *l = (TList*)trackF->GetCuts();
132     AliESDtrackCuts *tcuts = (AliESDtrackCuts*)l->FindObject("AliESDtrackCuts");
133     if(tcuts->GetFlagCutTOFdistance()) tcuts->SetFlagCutTOFdistance(kFALSE);
134     fTrackFilter3prongCentral = trackF; 
135     fMaxCentPercentileForTightCuts=maxPercentile;
136   }
137   void SetTrackFilterSoftPi(AliAnalysisFilter* trackF) { 
138     // switch off the TOF selection that cannot be applied with AODTracks 
139     TList *l = (TList*)trackF->GetCuts();
140     AliESDtrackCuts *tcuts = (AliESDtrackCuts*)l->FindObject("AliESDtrackCuts");
141     if(tcuts->GetFlagCutTOFdistance()) tcuts->SetFlagCutTOFdistance(kFALSE);
142     fTrackFilterSoftPi = trackF; 
143   }
144   AliAnalysisFilter* GetTrackFilter() const { return fTrackFilter; }
145   AliAnalysisFilter* GetTrackFilterSoftPi() const { return fTrackFilterSoftPi; }
146   void SetCutsD0toKpi(AliRDHFCutsD0toKpi* cuts) { fCutsD0toKpi = cuts; }
147   AliRDHFCutsD0toKpi* GetCutsD0toKpi() const { return fCutsD0toKpi; }
148   void SetCutsJpsitoee(AliRDHFCutsJpsitoee* cuts) { fCutsJpsitoee = cuts; }
149   AliRDHFCutsJpsitoee* GetCutsJpsitoee() const { return fCutsJpsitoee; }
150   void SetCutsDplustoKpipi(AliRDHFCutsDplustoKpipi* cuts) { fCutsDplustoKpipi = cuts; }
151   AliRDHFCutsDplustoKpipi* GetCutsDplustoKpipi() const { return fCutsDplustoKpipi; }
152   void SetCutsDstoKKpi(AliRDHFCutsDstoKKpi* cuts) { fCutsDstoKKpi = cuts; }
153   AliRDHFCutsDstoKKpi* GetCutsDstoKKpi() const { return fCutsDstoKKpi; }
154   void SetCutsLctopKpi(AliRDHFCutsLctopKpi* cuts) { fCutsLctopKpi = cuts; }
155   AliRDHFCutsLctopKpi* GetCutsLctopKpi() const { return fCutsLctopKpi; }
156   void SetCutsLctoV0(AliRDHFCutsLctoV0* cuts) { fCutsLctoV0 = cuts; }
157   AliRDHFCutsLctoV0* GetCutsLctoV0() const { return fCutsLctoV0; }
158   void SetCutsD0toKpipipi(AliRDHFCutsD0toKpipipi* cuts) { fCutsD0toKpipipi = cuts; }
159   AliRDHFCutsD0toKpipipi* GetCutsD0toKpipipi() const { return fCutsD0toKpipipi; }
160   void SetCutsDStartoKpipi(AliRDHFCutsDStartoKpipi* cuts) { fCutsDStartoKpipi = cuts; }
161   AliRDHFCutsDStartoKpipi* GetCutsDStartoKpipi() const { return fCutsDStartoKpipi; }
162   void SetMassCutBeforeVertexing(Bool_t flag) { fMassCutBeforeVertexing=flag; } 
163
164   void SetMasses();
165   Bool_t CheckCutsConsistency();
166
167   void SetUseTPCPID(Bool_t opt=kTRUE){fUseTPCPID=opt;}
168   void SetUseTOFPID(Bool_t opt=kTRUE){fUseTOFPID=opt;}
169   void SetUseTPCPIDOnlyIfNoTOF(Bool_t opt=kTRUE){fUseTPCPIDOnlyIfNoTOF=opt;}
170   void SetMaxMomForTPCPid(Double_t mom){fMaxMomForTPCPid=mom;}
171   void SetnSigmaTPCforPionSel(Double_t nsl, Double_t nsh){
172     fnSigmaTPCPionLow=nsl; fnSigmaTPCPionHi=nsh;}
173   void SetnSigmaTOFforPionSel(Double_t nsl, Double_t nsh){
174     fnSigmaTOFPionLow=nsl; fnSigmaTOFPionHi=nsh;}
175   void SetnSigmaTPCforKaonSel(Double_t nsl, Double_t nsh){
176     fnSigmaTPCKaonLow=nsl; fnSigmaTPCKaonHi=nsh;}
177   void SetnSigmaTOFforKaonSel(Double_t nsl, Double_t nsh){
178     fnSigmaTOFKaonLow=nsl; fnSigmaTOFKaonHi=nsh;}
179   void SetnSigmaTPCforProtonSel(Double_t nsl, Double_t nsh){
180     fnSigmaTPCProtonLow=nsl; fnSigmaTPCProtonHi=nsh;}
181   void SetnSigmaTOFforProtonSel(Double_t nsl, Double_t nsh){
182     fnSigmaTOFProtonLow=nsl; fnSigmaTOFProtonHi=nsh;}
183
184   void SetUseKaonPIDfor3Prong(Bool_t opt=kTRUE){fUseKaonPIDfor3Prong=opt;}
185   void SetNotUseProtonPIDforLambdaC(){fUsePIDforLc=0;}
186   void SetUseProtonPIDforLambdaC(){fUsePIDforLc=1;}
187   void SetUseProtonAndPionPIDforLambdaC(){fUsePIDforLc=2;}
188   void SetUseKaonPIDforDs(Bool_t opt=kTRUE){fUseKaonPIDforDs=opt;}
189
190   void SetNotUseProtonPIDforLambdaC2V0(){fUsePIDforLc2V0=kFALSE;} //clm
191   void SetUseProtonPIDforLambdaC2V0(){fUsePIDforLc2V0=kTRUE;}     //clm
192
193
194
195   void GetnSigmaTOFforPionSel(Double_t& minnsigma, Double_t& maxnsigma) const {
196     minnsigma=fnSigmaTOFPionLow;maxnsigma=fnSigmaTOFPionHi;
197   }
198   void GetnSigmaTPCforPionSel(Double_t& minnsigma, Double_t& maxnsigma) const {
199     minnsigma=fnSigmaTPCPionLow;maxnsigma=fnSigmaTPCPionHi;
200   }
201   void GetnSigmaTOFforKaonSel(Double_t& minnsigma, Double_t& maxnsigma) const {
202     minnsigma=fnSigmaTOFKaonLow;maxnsigma=fnSigmaTOFKaonHi;
203   }
204   void GetnSigmaTPCforKaonSel(Double_t& minnsigma, Double_t& maxnsigma) const {
205     minnsigma=fnSigmaTPCKaonLow;maxnsigma=fnSigmaTPCKaonHi; 
206   }
207   void GetnSigmaTOFforProtonSel(Double_t& minnsigma, Double_t& maxnsigma) const {
208     minnsigma=fnSigmaTOFProtonLow;maxnsigma=fnSigmaTOFProtonHi;
209   }
210   void GetnSigmaTPCforProtonSel(Double_t& minnsigma, Double_t& maxnsigma) const {
211     minnsigma=fnSigmaTPCProtonLow;maxnsigma=fnSigmaTPCProtonHi;
212   }
213
214   Bool_t GetUseTPCPID() const {return fUseTPCPID;}
215   Bool_t GetUseTOFPID() const {return fUseTOFPID;}
216   Bool_t GetUseTPCPIDOnlyIfNoTOF() const {return fUseTPCPIDOnlyIfNoTOF;}
217   Double_t GetMaxMomForTPCPid() const {return fMaxMomForTPCPid;}
218
219   Bool_t GetUseKaonPIDfor3Prong() const {return fUseKaonPIDfor3Prong;}
220   Int_t GetUseProtonPIDforLambdaC() const {return fUsePIDforLc;}
221   Bool_t GetUseKaonPIDforDs() const {return fUseKaonPIDforDs;}
222   Bool_t GetUseProtonPIDforLambdaC2V0() const {return fUsePIDforLc2V0;}
223  
224   void SetPidResponse(AliPIDResponse* p){fPidResponse=p;}
225
226   //
227  private:
228   //
229   enum { kBitDispl = 0, kBitSoftPi = 1, kBit3Prong = 2, kBitPionCompat = 3, kBitKaonCompat = 4, kBitProtonCompat = 5};
230
231   Bool_t fInputAOD; // input from AOD (kTRUE) or ESD (kFALSE) 
232   Int_t fAODMapSize; // size of fAODMap 
233   Int_t *fAODMap; //[fAODMapSize] map between index and ID for AOD tracks
234
235   AliVertexerTracks* fVertexerTracks; // vertexer, to compute secondary vertices
236   Double_t fBzkG; // z componenent of field in kG
237
238   Bool_t fSecVtxWithKF; // if kTRUE use KF vertexer, else AliVertexerTracks
239
240   Bool_t fRecoPrimVtxSkippingTrks; // flag for primary vertex reco on the fly
241                                    // for each candidate, w/o its daughters
242   Bool_t fRmTrksFromPrimVtx; // flag for fast removal of daughters from 
243                              // the primary vertex
244
245   AliESDVertex *fV1; // primary vertex
246
247   // flag to enable candidates production
248   Bool_t fD0toKpi;   // D0->Kpi 
249   Bool_t fJPSItoEle; // Jpsi->ee
250   Bool_t f3Prong;    // D+,Ds,Lc
251   Bool_t f4Prong;    // D0->Kpipipi
252   Bool_t fDstar;     // D*->D0pi
253   Bool_t fCascades;  // cascades, Lc --> v0+track
254   Bool_t fLikeSign;  // Like-sign pairs
255   Bool_t fLikeSign3prong;  // Like-sign triplets
256   Bool_t fMixEvent; // event mixing
257
258   AliPIDResponse* fPidResponse; // PID response
259   Bool_t fUseKaonPIDfor3Prong;  // Kaon PID usage for 3 prongs
260   Int_t  fUsePIDforLc;          // PID for Lambdac: 0=no, 1=proton, 2=p and pi
261   Bool_t fUsePIDforLc2V0;       // PID for Lambdac 2 V0: 0=no, 1=proton,
262   Bool_t fUseKaonPIDforDs;      // Kaon PID usage for Ds
263   Bool_t fUseTPCPID;            // switch use/not use TPC PID
264   Bool_t fUseTOFPID;            // switch use/not use TOF PID
265   Bool_t fUseTPCPIDOnlyIfNoTOF; // use TPC PID only for tracks that without TOF
266   Double_t fMaxMomForTPCPid;    // upper momentum limit to apply TPC PID
267   Double_t fnSigmaTPCPionLow;   //Low cut value on n. of sigmas for pi TPC PID
268   Double_t fnSigmaTPCPionHi;    //High cut value on n. of sigmas for pi TPC PID
269   Double_t fnSigmaTOFPionLow;   //Low cut value on n. of sigmas for pi TOF PID
270   Double_t fnSigmaTOFPionHi;    //High cut value on n. of sigmas for pi TOF PID
271   Double_t fnSigmaTPCKaonLow;   //Low cut value on n. of sigmas for K TPC PID
272   Double_t fnSigmaTPCKaonHi;    //High cut value on n. of sigmas for K TPC PID
273   Double_t fnSigmaTOFKaonLow;   //Low cut value on n. of sigmas for K TOF PID
274   Double_t fnSigmaTOFKaonHi;    //High cut value on n. of sigmas for K TOF PID
275   Double_t fnSigmaTPCProtonLow; //Low cut value on n. of sigmas for p TPC PID
276   Double_t fnSigmaTPCProtonHi;  //High cut value on n. of sigmas for p TPC PID
277   Double_t fnSigmaTOFProtonLow; //Low cut value on n. of sigmas for p TOF PID
278   Double_t fnSigmaTOFProtonHi;  //High cut value on n. of sigmas for p TOF PID
279
280   Float_t fMaxCentPercentileForTightCuts; //max. centrality percentile for using tight cuts
281
282   // single-track cuts
283   AliAnalysisFilter *fTrackFilter; //  Track Filter for displaced vertices
284   AliAnalysisFilter *fTrackFilter2prongCentral; //  Track Filter for displaced vertices in PbPb central events (tighter cuts) for 2 prong (D0->Kpi)
285   AliAnalysisFilter *fTrackFilter3prongCentral; //  Track Filter for displaced vertices in PbPb central events (tighter cuts) for 3 prong (D+, Ds, Lc)
286   AliAnalysisFilter *fTrackFilterSoftPi; //  Track Filter for D* soft pion
287   // candidates cuts
288   AliRDHFCutsD0toKpi *fCutsD0toKpi; // D0->Kpi cuts
289   AliRDHFCutsJpsitoee *fCutsJpsitoee; // J/psi->ee cuts
290   AliRDHFCutsDplustoKpipi *fCutsDplustoKpipi; // D+->Kpipi cuts
291   AliRDHFCutsDstoKKpi *fCutsDstoKKpi; // Ds->KKpi cuts
292   AliRDHFCutsLctopKpi *fCutsLctopKpi; // Lc->pKpi cuts
293   AliRDHFCutsLctoV0 *fCutsLctoV0; // Lc --> v0 + bachelor cuts
294   AliRDHFCutsD0toKpipipi *fCutsD0toKpipipi; // D0->Kpipipi cuts
295   AliRDHFCutsDStartoKpipi *fCutsDStartoKpipi; // Dstar->D0pi cuts
296
297   TList *fListOfCuts;    // pointer to list of cuts for output file
298   Bool_t fFindVertexForDstar; // reconstruct a secondary vertex or assume it's from the primary vertex
299   Bool_t fFindVertexForCascades;  // reconstruct a secondary vertex or assume it's from the primary vertex
300   Int_t  fV0TypeForCascadeVertex;  // Select which V0 type we want to use for the cascas
301   Bool_t fMassCutBeforeVertexing; // to go faster in PbPb
302   // dummies for invariant mass calculation
303   AliAODRecoDecay *fMassCalc2; // for 2 prong
304   AliAODRecoDecay *fMassCalc3; // for 3 prong
305   AliAODRecoDecay *fMassCalc4; // for 4 prong
306   Bool_t fOKInvMassD0; // pair fullfilling D0 inv mass selection
307   Bool_t fOKInvMassJpsi; // pair fullfilling Jpsi inv mass selection
308   Bool_t fOKInvMassDplus; // triplet fullfilling D+ inv mass selection
309   Bool_t fOKInvMassDs; // triplet fullfilling Ds inv mass selection
310   Bool_t fOKInvMassLc; // triplet fullfilling Lc inv mass selection
311   Bool_t fOKInvMassDstar; // combination fullfilling D* inv mass selection
312   Bool_t fOKInvMassD0to4p; // 4tracks fullfilling D0 inv mass selection
313   Bool_t fOKInvMassLctoV0; // triplet fullfilling Lc inv mass selection
314
315   Int_t fnTrksTotal;
316   Int_t fnSeleTrksTotal;
317
318   Double_t fMassDzero;
319   Double_t fMassDplus;
320   Double_t fMassDs;
321   Double_t fMassLambdaC;
322   Double_t fMassDstar;
323   Double_t fMassJpsi;
324
325
326   //
327   void AddRefs(AliAODVertex *v,AliAODRecoDecayHF *rd,const AliVEvent *event,
328                const TObjArray *trkArray) const;
329   void AddDaughterRefs(AliAODVertex *v,const AliVEvent *event,
330                        const TObjArray *trkArray) const;
331   AliAODRecoDecayHF2Prong* Make2Prong(TObjArray *twoTrackArray1,AliVEvent *event,
332                                       AliAODVertex *secVert,Double_t dcap1n1,
333                                       Bool_t &okD0,Bool_t &okJPSI,Bool_t &okD0fromDstar);
334   AliAODRecoDecayHF3Prong* Make3Prong(TObjArray *threeTrackArray,AliVEvent *event,
335                                       AliAODVertex *secVert,
336                                       Double_t dispersion,
337                                       const AliAODVertex *vertexp1n1,
338                                       const AliAODVertex *vertexp2n1,
339                                       Double_t dcap1n1,Double_t dcap2n1,Double_t dcap1p2, 
340                                       Bool_t useForLc, Bool_t useForDs,
341                                       Bool_t &ok3Prong);
342   AliAODRecoDecayHF4Prong* Make4Prong(TObjArray *fourTrackArray,AliVEvent *event,
343                                       AliAODVertex *secVert,
344                                       const AliAODVertex *vertexp1n1,
345                                       const AliAODVertex *vertexp1n1p2,
346                                       Double_t dcap1n1,Double_t dcap1n2,
347                                       Double_t dcap2n1,Double_t dcap2n2,
348                                       Bool_t &ok4Prong);
349   AliAODRecoCascadeHF* MakeCascade(TObjArray *twoTrackArray,AliVEvent *event,
350                                    AliAODVertex *secVert,
351                                    AliAODRecoDecayHF2Prong *rd2Prong,
352                                    Double_t dca,
353                                    Bool_t &okDstar);
354   AliAODRecoCascadeHF* MakeCascade(TObjArray *twoTrackArray,AliVEvent *event,
355                                    AliAODVertex *secVert,
356                                    AliAODv0 *v0,
357                                    Double_t dca,
358                                    Bool_t &okCascades);
359
360   AliAODVertex* PrimaryVertex(const TObjArray *trkArray=0x0,AliVEvent *event=0x0) const;
361   AliAODVertex* ReconstructSecondaryVertex(TObjArray *trkArray,Double_t &dispersion,Bool_t useTRefArray=kTRUE) const;
362
363   Bool_t SelectInvMassAndPt3prong(Double_t *px,Double_t *py,Double_t *pz, Int_t pidLcStatus=3);
364   Bool_t SelectInvMassAndPt4prong(Double_t *px,Double_t *py,Double_t *pz);
365   Bool_t SelectInvMassAndPtD0Kpi(Double_t *px,Double_t *py,Double_t *pz);
366   Bool_t SelectInvMassAndPtJpsiee(Double_t *px,Double_t *py,Double_t *pz);
367   Bool_t SelectInvMassAndPtDstarD0pi(Double_t *px,Double_t *py,Double_t *pz);
368   Bool_t SelectInvMassAndPtCascade(Double_t *px,Double_t *py,Double_t *pz);
369
370   Bool_t SelectInvMassAndPt3prong(TObjArray *trkArray);
371   Bool_t SelectInvMassAndPt4prong(TObjArray *trkArray);
372   Bool_t SelectInvMassAndPtDstarD0pi(TObjArray *trkArray);
373
374   void   SelectTracksAndCopyVertex(const AliVEvent *event,Int_t trkEntries,
375                                    TObjArray &seleTrksArray,
376                                    TObjArray &tracksAtVertex,
377                                    Int_t &nSeleTrks,
378                                    UChar_t *seleFlags,Int_t *evtNumber);
379   void SetParametersAtVertex(AliESDtrack* esdt, const AliExternalTrackParam* extpar) const;
380
381   Bool_t SingleTrkCuts(AliESDtrack *trk,Float_t centralityperc, Bool_t &okDisplaced,Bool_t &okSoftPi, Bool_t &ok3prong) const;
382
383   void   SetSelectionBitForPID(AliRDHFCuts *cuts,AliAODRecoDecayHF *rd,Int_t bit);
384
385   AliAODv0* TransformESDv0toAODv0(AliESDv0 *esdv0, 
386                                   TObjArray *twoTrackArrayV0);
387
388   //
389   ClassDef(AliAnalysisVertexingHF,24);  // Reconstruction of HF decay candidates
390 };
391
392
393 #endif
394
395
396
397
398
399
400
401