Remove obsolete comments about TTree::Refresh() not working.
[u/mrichter/AliRoot.git] / EVE / EveBase / AliEveCascade.h
1 // $Id$
2 // Main authors: Matevz Tadel & Alja Mrak-Tadel: 2006, 2007
3
4 /**************************************************************************
5  * Copyright(c) 1998-2008, ALICE Experiment at CERN, all rights reserved. *
6  * See http://aliceinfo.cern.ch/Offline/AliRoot/License.html for          *
7  * full copyright notice.                                                 *
8  **************************************************************************/
9 #ifndef ALIEVECASCADE_H
10 #define ALIEVECASCADE_H
11
12 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
13  * See cxx source for full Copyright notice                               */
14
15
16 //----------------------------------------------------------------------------
17 // This code defines the reconstructed cascade (ESD level) visualized with EVE
18 //
19 // Origin : Boris Hippolyte, IPHC (hippolyt@in2p3.fr)
20 // Modified : Antonin Maire, April 2009, IPHC (antonin.maire@cern.ch)
21 //----------------------------------------------------------------------------
22
23 class TH1F;
24 class TH2F;
25 class TVector3;
26
27 class TEveVSDStructs;
28 class TEveTrackPropagator;
29 class TEveLine;
30 class TEveVector;
31
32 #include <TEveVSDStructs.h>
33 #include <TEvePointSet.h>
34 #include <TPDGCode.h>
35
36  
37 class AliEveCascadeList;
38
39 #include "AliEveTrack.h"
40
41
42                          
43 class AliEveCascade : public TEvePointSet
44 {
45   friend class AliEveCascadeList;
46   friend class AliEveCascadeEditor;
47
48 public:
49   AliEveCascade();
50   AliEveCascade(TEveRecTrack*        tBac, 
51                 TEveRecTrack*        tNeg, 
52                 TEveRecTrack*        tPos, 
53                 TEveRecV0*           v0, 
54                 TEveRecCascade*      cascade, 
55                 TEveTrackPropagator* rs);
56   virtual ~AliEveCascade();
57
58   void MakeCascade();
59
60   virtual void  SetMainColor(Color_t col)
61   {
62     TEvePointSet::SetMainColor(col);
63     fPointingCurve->SetLineColor(fMarkerColor);
64     fV0Path->SetLineColor(fMarkerColor);
65   }
66
67   void          SetRnrStyle( TEveTrackPropagator* const rs) { fRnrStyle = rs; }
68
69   Float_t       GetDaughterDCA() const { return fDaughterDCA; }
70   void          SetDaughterDCA(Float_t dca) { fDaughterDCA = dca; }
71
72   Float_t       GetRadius() const { return fRecDecayV.Perp(); }
73   Float_t       GetPt()     const { return fRecDecayP.Perp(); }
74   Float_t       GetPtot()   const { return fRecDecayP.Mag(); }
75   
76   Float_t       GetPhi()    const { return fRecDecayP.Phi(); }
77   Float_t       GetTheta()  const { return fRecDecayP.Theta(); }
78   Float_t       GetEta()    const { return fRecDecayP.Eta(); }
79   Int_t         GetCharge() const { return fBacTrack->GetCharge(); }
80    
81   Double_t      GetInvMass(Int_t cascadePdgCodeHyp) const;
82   Float_t       GetXiMinusInvMass()    const { return GetInvMass( kXiMinus); }
83   Float_t       GetOmegaMinusInvMass() const { return GetInvMass( kOmegaMinus); }
84   Float_t       GetXiPlusInvMass()     const { return GetInvMass(-kXiMinus); }
85   Float_t       GetOmegaPlusInvMass()  const { return GetInvMass(-kOmegaMinus); }
86    
87
88   Int_t         GetESDIndex() const { return fESDIndex; }
89   void          SetESDIndex(Int_t ind) { fESDIndex = ind;}
90   
91   TVector3      GetLambdaP()  const { return fLambdaP; }
92   void          SetLambdaP(Double_t px, Double_t py, Double_t pz) { fLambdaP.SetXYZ(px, py, pz); }
93   
94   TVector3      GetBachP()  const { return fBachP; }
95   void          SetBachP(Double_t px, Double_t py, Double_t pz) { fBachP.SetXYZ(px, py, pz); }
96   
97   virtual const Text_t* GetName()  const   { return Form("ESDcascade_%i",fESDIndex); }
98   virtual const Text_t* GetTitle() const   { return Form("ESDcascade_%i",fESDIndex); }
99
100   TEveTrackPropagator* GetPropagator() const  { return fRnrStyle; }
101
102   AliEveTrack*  GetBacTrack()      const { return fBacTrack; }
103   AliEveTrack*  GetNegTrack()      const { return fNegTrack; }
104   AliEveTrack*  GetPosTrack()      const { return fPosTrack; }
105
106   TEveLine*     GetPointingCurve() const { return fPointingCurve; }
107   TEveLine*     GetV0Path()        const { return fV0Path; }
108
109    
110 protected:
111   TEveVector            fRecBirthV;     // Assumed birth point of cascade
112   TEveVector            fRecDecayV;     // Xi decay point : point of closest approach between the Xi daughters
113   TEveVector            fRecDecayP;     // Reconstructed momentum of the cascade, at the Xi decay
114   TEveVector            fRecDecayV0;    // Reconstructed birth point of neutral daughter
115   
116   
117   AliEveTrack           *fBacTrack;      //! Eve track for the bachelor of the cascade
118   AliEveTrack           *fNegTrack;      //! Eve track for the neg V0 dghter, within the cascade
119   AliEveTrack           *fPosTrack;      //! Eve track for the pos V0 dghter, within the cascade
120
121   TEveTrackPropagator   *fRnrStyle;      //! track propagator
122
123   TEveLine              *fPointingCurve; //! Curve meant model the Xi trajectory
124   TEveLine              *fV0Path;        //! Line meant to model the V0 path of the cascade
125
126   Int_t                 fESDIndex;       // Index in ESD Cascade array.
127   Float_t               fDaughterDCA;    // Distance at the point of closest approach, between both Xi daughters
128   Float_t               fChi2Cascade;    // Some Chi-square.
129   TVector3              fLambdaP;        // Momentum of Lambda (V0 in cascade), at its decay point
130   TVector3              fBachP;          // Momentum of Bachelor, at the Xi decay point
131
132 private:
133   AliEveCascade(const AliEveCascade&);            // Not implemented
134   AliEveCascade& operator=(const AliEveCascade&); // Not implemented
135
136   ClassDef(AliEveCascade, 1); // Visual representation of a AliEveCascade.
137 };
138
139
140 /******************************************************************************/
141 // AliEveCascadeList
142 /******************************************************************************/
143
144 class AliEveCascadeList : public TEveElementList
145 {
146   friend class AliEveCascadeListEditor;
147
148 public:
149   AliEveCascadeList();
150   AliEveCascadeList(TEveTrackPropagator* rs);
151   AliEveCascadeList(const Text_t* name, TEveTrackPropagator* rs=0);
152   virtual ~AliEveCascadeList() {}
153
154   virtual const Text_t* GetTitle() const { return fTitle; }
155   virtual void SetTitle(const Text_t* t) { fTitle = t; }
156   virtual void SetTracksColor(Color_t cBac) { fBacColor = cBac;}
157
158   virtual Bool_t CanEditMainColor() const { return kTRUE; }
159
160   void  SetRnrStyle(TEveTrackPropagator* const rst ) { fRnrStyle = rst; }
161   TEveTrackPropagator* GetPropagator()   const       { return fRnrStyle; }
162
163   Bool_t GetRnrCascadevtx()     const { return fRnrCascadevtx; }
164   Bool_t GetRnrCascadepath()    const { return fRnrCascadepath; }
165   Bool_t GetRnrDaughters()      const { return fRnrDaughters; }
166
167   void   MakeCascades();
168
169   void   FilterByRadius        (Float_t minR, Float_t maxR);
170   void   FilterByDaughterDCA   (Float_t minDaughterDCA, Float_t maxDaughterDCA);
171   void   FilterByPt            (Float_t minPt, Float_t maxPt);
172   void   FilterByInvariantMass (Float_t minInvariantMass, Float_t maxInvariantMass, Int_t cascadePdgCodeHyp);
173   
174   
175   void   SetInvMassHyp          (Int_t rInvMassHyp) {fInvMassHyp = rInvMassHyp;}
176   Int_t  GetInvMassHyp()        const { return fInvMassHyp; }
177
178 protected:
179   TString              fTitle;                  // title
180
181   TEveTrackPropagator *fRnrStyle;               //! Rnr Style
182
183   Bool_t               fRnrDaughters;           // Render state for the cascade daughters
184   Bool_t               fRnrCascadevtx;          // Render state for the cascade decay point
185   Bool_t               fRnrCascadepath;         // Render state for the path between the prim. vertex and the "Xi" decay point
186
187   Color_t              fBacColor;               // Color of the bachelor track
188
189   Float_t              fMinRCut;                // Min transv. radius allowed for cascade selection
190   Float_t              fMaxRCut;                // Max transv. radius allowed for cascade selection
191
192   Float_t              fMinDaughterDCA;         // Min DCA between Xi daughters, allowed for cascade selection
193   Float_t              fMaxDaughterDCA;         // Max DCA between Xi daughters, allowed for cascade selection
194
195   Float_t              fMinPt;                  // Min pt allowed for cascade selection
196   Float_t              fMaxPt;                  // Max pt allowed for cascade selection
197   
198   Int_t                fInvMassHyp;             // PdgCode of the inv. mass hypothesis for the cascade
199   
200   Float_t              fMinInvariantMass;       // Minimum invariant mass cut.for cascade
201   Float_t              fMaxInvariantMass;       // Maximum invariant mass cut.for cascade
202
203 private:
204   void Init();
205
206   AliEveCascadeList(const AliEveCascadeList&);            // Not implemented
207   AliEveCascadeList& operator=(const AliEveCascadeList&); // Not implemented
208
209   ClassDef(AliEveCascadeList, 0); // A list of AliEveCascade objecs.
210 };
211
212
213 #endif