]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGHF/vertexingHF/AliAnalysisVertexingHF.h
Modifications in Lc->V0+P analysis (Levente):
[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 SetUseKaonPIDfor3Prong(Bool_t opt=kTRUE){fUseKaonPIDfor3Prong=opt;}
168   void SetnSigmaTOFforKaonSel(Double_t nsl, Double_t nsh){
169     fnSigmaTOFKaonLow=nsl; fnSigmaTOFKaonHi=nsh;}
170   void SetPidResponse(AliPIDResponse* p){fPidResponse=p;}
171
172   //
173  private:
174   //
175   enum { kBitDispl = 0, kBitSoftPi = 1, kBit3Prong = 2 };
176
177   Bool_t fInputAOD; // input from AOD (kTRUE) or ESD (kFALSE) 
178   Int_t fAODMapSize; // size of fAODMap 
179   Int_t *fAODMap; //[fAODMapSize] map between index and ID for AOD tracks
180
181   AliVertexerTracks* fVertexerTracks; // vertexer, to compute secondary vertices
182   Double_t fBzkG; // z componenent of field in kG
183
184   Bool_t fSecVtxWithKF; // if kTRUE use KF vertexer, else AliVertexerTracks
185
186   Bool_t fRecoPrimVtxSkippingTrks; // flag for primary vertex reco on the fly
187                                    // for each candidate, w/o its daughters
188   Bool_t fRmTrksFromPrimVtx; // flag for fast removal of daughters from 
189                              // the primary vertex
190
191   AliESDVertex *fV1; // primary vertex
192
193   // flag to enable candidates production
194   Bool_t fD0toKpi;   // D0->Kpi 
195   Bool_t fJPSItoEle; // Jpsi->ee
196   Bool_t f3Prong;    // D+,Ds,Lc
197   Bool_t f4Prong;    // D0->Kpipipi
198   Bool_t fDstar;     // D*->D0pi
199   Bool_t fCascades;  // cascades, Lc --> v0+track
200   Bool_t fLikeSign;  // Like-sign pairs
201   Bool_t fLikeSign3prong;  // Like-sign triplets
202   Bool_t fMixEvent; // event mixing
203
204   AliPIDResponse* fPidResponse; // PID response
205   Bool_t fUseKaonPIDfor3Prong;  // Kaon PID usage flag
206   Double_t fnSigmaTOFKaonLow;   //Low cut value on number of sigmas for TOF PID
207   Double_t fnSigmaTOFKaonHi;    //High cut value on number of sigmas for TOF PID
208
209   Float_t fMaxCentPercentileForTightCuts; //max. centrality percentile for using tight cuts
210
211   // single-track cuts
212   AliAnalysisFilter *fTrackFilter; //  Track Filter for displaced vertices
213   AliAnalysisFilter *fTrackFilter2prongCentral; //  Track Filter for displaced vertices in PbPb central events (tighter cuts) for 2 prong (D0->Kpi)
214   AliAnalysisFilter *fTrackFilter3prongCentral; //  Track Filter for displaced vertices in PbPb central events (tighter cuts) for 3 prong (D+, Ds, Lc)
215   AliAnalysisFilter *fTrackFilterSoftPi; //  Track Filter for D* soft pion
216   // candidates cuts
217   AliRDHFCutsD0toKpi *fCutsD0toKpi; // D0->Kpi cuts
218   AliRDHFCutsJpsitoee *fCutsJpsitoee; // J/psi->ee cuts
219   AliRDHFCutsDplustoKpipi *fCutsDplustoKpipi; // D+->Kpipi cuts
220   AliRDHFCutsDstoKKpi *fCutsDstoKKpi; // Ds->KKpi cuts
221   AliRDHFCutsLctopKpi *fCutsLctopKpi; // Lc->pKpi cuts
222   AliRDHFCutsLctoV0 *fCutsLctoV0; // Lc --> v0 + bachelor cuts
223   AliRDHFCutsD0toKpipipi *fCutsD0toKpipipi; // D0->Kpipipi cuts
224   AliRDHFCutsDStartoKpipi *fCutsDStartoKpipi; // Dstar->D0pi cuts
225
226   TList *fListOfCuts;    // pointer to list of cuts for output file
227   Bool_t fFindVertexForDstar; // reconstruct a secondary vertex or assume it's from the primary vertex
228   Bool_t fFindVertexForCascades;  // reconstruct a secondary vertex or assume it's from the primary vertex
229   Int_t  fV0TypeForCascadeVertex;  // Select which V0 type we want to use for the cascas
230   Bool_t fMassCutBeforeVertexing; // to go faster in PbPb
231   // dummies for invariant mass calculation
232   AliAODRecoDecay *fMassCalc2; // for 2 prong
233   AliAODRecoDecay *fMassCalc3; // for 3 prong
234   AliAODRecoDecay *fMassCalc4; // for 4 prong
235   Bool_t fOKInvMassD0; // pair fullfilling D0 inv mass selection
236   Bool_t fOKInvMassJpsi; // pair fullfilling Jpsi inv mass selection
237   Bool_t fOKInvMassDplus; // triplet fullfilling D+ inv mass selection
238   Bool_t fOKInvMassDs; // triplet fullfilling Ds inv mass selection
239   Bool_t fOKInvMassLc; // triplet fullfilling Lc inv mass selection
240   Bool_t fOKInvMassDstar; // combination fullfilling D* inv mass selection
241   Bool_t fOKInvMassD0to4p; // 4tracks fullfilling D0 inv mass selection
242   Bool_t fOKInvMassLctoV0; // triplet fullfilling Lc inv mass selection
243
244   Int_t fnTrksTotal;
245   Int_t fnSeleTrksTotal;
246
247   Double_t fMassDzero;
248   Double_t fMassDplus;
249   Double_t fMassDs;
250   Double_t fMassLambdaC;
251   Double_t fMassDstar;
252   Double_t fMassJpsi;
253
254
255   //
256   void AddRefs(AliAODVertex *v,AliAODRecoDecayHF *rd,const AliVEvent *event,
257                const TObjArray *trkArray) const;
258   void AddDaughterRefs(AliAODVertex *v,const AliVEvent *event,
259                        const TObjArray *trkArray) const;
260   AliAODRecoDecayHF2Prong* Make2Prong(TObjArray *twoTrackArray1,AliVEvent *event,
261                                       AliAODVertex *secVert,Double_t dcap1n1,
262                                       Bool_t &okD0,Bool_t &okJPSI,Bool_t &okD0fromDstar);
263   AliAODRecoDecayHF3Prong* Make3Prong(TObjArray *threeTrackArray,AliVEvent *event,
264                                       AliAODVertex *secVert,
265                                       Double_t dispersion,
266                                       const AliAODVertex *vertexp1n1,
267                                       const AliAODVertex *vertexp2n1,
268                                       Double_t dcap1n1,Double_t dcap2n1,Double_t dcap1p2,
269                                       Bool_t &ok3Prong);
270   AliAODRecoDecayHF4Prong* Make4Prong(TObjArray *fourTrackArray,AliVEvent *event,
271                                       AliAODVertex *secVert,
272                                       const AliAODVertex *vertexp1n1,
273                                       const AliAODVertex *vertexp1n1p2,
274                                       Double_t dcap1n1,Double_t dcap1n2,
275                                       Double_t dcap2n1,Double_t dcap2n2,
276                                       Bool_t &ok4Prong);
277   AliAODRecoCascadeHF* MakeCascade(TObjArray *twoTrackArray,AliVEvent *event,
278                                    AliAODVertex *secVert,
279                                    AliAODRecoDecayHF2Prong *rd2Prong,
280                                    Double_t dca,
281                                    Bool_t &okDstar);
282   AliAODRecoCascadeHF* MakeCascade(TObjArray *twoTrackArray,AliVEvent *event,
283                                    AliAODVertex *secVert,
284                                    AliAODv0 *v0,
285                                    Double_t dca,
286                                    Bool_t &okCascades);
287
288   AliAODVertex* PrimaryVertex(const TObjArray *trkArray=0x0,AliVEvent *event=0x0) const;
289   AliAODVertex* ReconstructSecondaryVertex(TObjArray *trkArray,Double_t &dispersion,Bool_t useTRefArray=kTRUE) const;
290
291   Bool_t SelectInvMassAndPt3prong(Double_t *px,Double_t *py,Double_t *pz);
292   Bool_t SelectInvMassAndPt4prong(Double_t *px,Double_t *py,Double_t *pz);
293   Bool_t SelectInvMassAndPtD0Kpi(Double_t *px,Double_t *py,Double_t *pz);
294   Bool_t SelectInvMassAndPtJpsiee(Double_t *px,Double_t *py,Double_t *pz);
295   Bool_t SelectInvMassAndPtDstarD0pi(Double_t *px,Double_t *py,Double_t *pz);
296   Bool_t SelectInvMassAndPtCascade(Double_t *px,Double_t *py,Double_t *pz);
297
298   Bool_t SelectInvMassAndPt3prong(TObjArray *trkArray);
299   Bool_t SelectInvMassAndPt4prong(TObjArray *trkArray);
300   Bool_t SelectInvMassAndPtDstarD0pi(TObjArray *trkArray);
301
302   void   SelectTracksAndCopyVertex(const AliVEvent *event,Int_t trkEntries,
303                                    TObjArray &seleTrksArray,
304                                    TObjArray &tracksAtVertex,
305                                    Int_t &nSeleTrks,
306                                    UChar_t *seleFlags,Int_t *evtNumber);
307   void SetParametersAtVertex(AliESDtrack* esdt, const AliExternalTrackParam* extpar) const;
308
309   Bool_t SingleTrkCuts(AliESDtrack *trk,Float_t centralityperc, Bool_t &okDisplaced,Bool_t &okSoftPi, Bool_t &ok3prong) const;
310
311   void   SetSelectionBitForPID(AliRDHFCuts *cuts,AliAODRecoDecayHF *rd,Int_t bit);
312
313   AliAODv0* TransformESDv0toAODv0(AliESDv0 *esdv0, 
314                                   TObjArray *twoTrackArrayV0);
315
316   //
317   ClassDef(AliAnalysisVertexingHF,22);  // Reconstruction of HF decay candidates
318 };
319
320
321 #endif
322
323
324
325
326
327
328
329