a96430a7011b27a7c65a65ad73a5f5d378cecd0c
[u/mrichter/AliRoot.git] / EVE / EveBase / AliEveKink.h
1 // $Id$
2 // Main authors: Paraskevi Ganoti: 2009
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 AliEveKink_H
10 #define AliEveKink_H
11
12 #include <TEvePointSet.h>
13
14 class TEveTrack;
15 class TEveTrackPropagator;
16
17 class TH1F;
18 class TH2F;
19
20 class AliEveKinkList;
21
22 //------------------------------------------------------------------------------
23 // AliEveKink
24 //
25 // Graphical representation of a kink.
26 //------------------------------------------------------------------------------
27
28 class AliEveKink : public TEvePointSet
29 {
30   friend class AliEveKinkList;
31   friend class AliEveKinkEditor;
32
33 public:
34   AliEveKink();
35   AliEveKink(TEveRecTrack* tMoth, TEveRecTrack* tDaug, TEveRecKink* kink, TEveTrackPropagator* rsMoth, TEveTrackPropagator* rsDaugh);
36   virtual ~AliEveKink();
37
38   void MakeKink();
39
40   virtual void SetMainColor(Color_t col)
41   {
42     TEvePointSet::SetMainColor(col);
43   }
44
45   void SetRnrStyleMother(TEveTrackPropagator* rsMoth)    { fRnrStyleMoth  = rsMoth;  }
46   void SetRnrStyleDaughter(TEveTrackPropagator* rsDaugh) { fRnrStyleDaugh = rsDaugh; }
47   Double_t GetKinkAngle(Int_t i) const { return fKinkAngle[i]; }
48   void SetKinkAngle(Int_t i, Double_t anglekink) { fKinkAngle[i] = anglekink; }
49
50   Float_t GetKinkRadius() const { return fRecKinkPosition.Perp(); }
51
52   Float_t GetKinkPMother()     const { return fMotherMomentum.Mag(); }
53   Float_t GetKinkPMotherPerp() const { return fMotherMomentum.Perp(); }
54   Float_t GetKinkPDaughter()   const { return fDaughterMomentum.Mag(); }
55
56   Float_t GetInvMass(Int_t dPdgCode) const;
57   Float_t GetQt() const;
58
59   void SetMaxProbPdgPid(Int_t rPdg, Float_t rPid);
60   Int_t   GetDaugMaxProbPdg() const { return fDaugMaxProbPdg; }
61   Float_t GetDaugMaxProbPid() const { return fDaugMaxProbPid; }
62
63   Int_t GetESDKinkIndex() const { return fESDKinkIndex; }
64   void  SetESDKinkIndex(Int_t ind) { fESDKinkIndex = ind;}
65
66   virtual const Text_t* GetName()  const { return Form("ESDkink_%i",fESDKinkIndex); }
67   virtual const Text_t* GetTitle() const { return Form("ESDkink_%i",fESDKinkIndex); }
68
69   TEveTrack* GetMotherTrack()   const { return fMotherTrack; }
70   TEveTrack* GetDaughterTrack() const { return fDaughterTrack; }
71
72 protected:
73   TEveVector       fRecKinkPosition;  // Reconstructed position of kink.
74   TEveVector       fMotherMomentum;   // Momentum of mother track.
75   TEveVector       fDaughterMomentum; // Momentum of daugter track.
76
77   TEveTrack        *fMotherTrack;     // Graphical representation of mother track.
78   TEveTrack        *fDaughterTrack;   // Graphical representation of daughter track.
79
80   TEveTrackPropagator  *fRnrStyleMoth;  // Track-propagator for mother track.
81   TEveTrackPropagator  *fRnrStyleDaugh; // Track-propagator for daughter track.
82
83   Int_t             fESDKinkIndex;    // Index in ESD Kink array.
84   Double_t          fKinkAngle[3];    // TODO
85
86   Int_t             fDaugMaxProbPdg;  // Maximum PDG probability for the daughter
87   Float_t           fDaugMaxProbPid;  // Maximum PID probability for the daughter
88
89 private:
90   AliEveKink(const AliEveKink&);            // Not implemented
91   AliEveKink& operator=(const AliEveKink&); // Not implemented
92
93   ClassDef(AliEveKink, 0); // Visual representation of a AliEveKink.
94 };
95
96
97 //------------------------------------------------------------------------------
98 // AliEveKinkList
99 //
100 // Container for AliEveKink objects
101 // Provides managmenet methods for setting cuts and common visualization
102 // parameters.
103 //------------------------------------------------------------------------------
104
105 class AliEveKinkList : public TEveElementList
106 {
107   friend class AliEveKinkListEditor;
108
109 public:
110   AliEveKinkList();
111   AliEveKinkList(TEveTrackPropagator* rsMoth, TEveTrackPropagator* rsDaugh);
112   AliEveKinkList(const Text_t* name, TEveTrackPropagator* rsMoth=0, TEveTrackPropagator* rsDaugh=0);
113   virtual ~AliEveKinkList() {}
114
115   virtual void SetTracksColor(Color_t cMoth, Color_t cDaug)
116   { fMothColor = cMoth; fDaugColor = cDaug; }
117
118   virtual Bool_t CanEditMainColor() const { return kTRUE; }
119
120   void  SetRnrStyleMoth(TEveTrackPropagator* rstMoth) { fRnrStyleMoth = rstMoth; }
121   TEveTrackPropagator* GetPropagatorMoth() const      { return fRnrStyleMoth; }
122
123   void  SetRnrStyleDaugh(TEveTrackPropagator* rstDaugh) { fRnrStyleDaugh = rstDaugh; }
124   TEveTrackPropagator* GetPropagatorDaugh() const       { return fRnrStyleDaugh; }
125
126   Bool_t GetRnrKinkvtx()      const { return fRnrKinkvtx; }
127   Bool_t GetRnrKinkDaughter() const { return fRnrKinkDaughter; }   //not yet be sure about this!!!
128
129   void   MakeKinks();
130
131   void   FilterByRadius(Float_t minR, Float_t maxR);
132   void   FilterByKinkAngle(Float_t minKinkAngle, Float_t maxKinkAngle);
133   void   FilterByPt(Float_t minPt, Float_t maxPt);
134   void   FilterByInvariantMass(Float_t minPt, Float_t maxPt, Int_t dPdgCode);
135
136   void   FilterByCheckedPidMinProb(Int_t rFlag, Int_t rPid, Float_t rProb);
137   void   SetDaugCheckedPid(Int_t dcpid) { fDaugCheckedPid = dcpid; }
138   Int_t  GetDaugCheckedPid()      const { return fDaugCheckedPid; }
139
140   void    SetDaugCheckedProb(Float_t dcprob) { fDaugCheckedProb = dcprob; }
141   Float_t GetDaugCheckedProb()         const { return fDaugCheckedProb; }
142
143
144 protected:
145   TEveTrackPropagator *fRnrStyleMoth;     // Default track-propagator for mother tracks.
146   TEveTrackPropagator *fRnrStyleDaugh;    // Default track-propagator for daughter tracks.
147
148   Bool_t               fRnrKinkDaughter;  // Flag - show daughter tracks.
149   Bool_t               fRnrKinkvtx;       // Flag - show kink vertex.
150
151   Color_t              fMothColor;        // Color of mother tracks.
152   Color_t              fDaugColor;        // Color of daughter tracks.
153
154   Float_t              fMinRCut;          // Cut - minimum kink radius.
155   Float_t              fMaxRCut;          // Cut - maximum kink radius.
156
157   Float_t              fMinKinkAngle;     // Cut - minimum kink angle.
158   Float_t              fMaxKinkAngle;     // Cut - maximum kink angle.
159
160   Float_t              fMinPt;            // Cut - minimum pT of mother track.
161   Float_t              fMaxPt;            // Cut - maximum pT of mother track.
162
163   Float_t              fMinInvariantMass; // Cut - minimum invariant mass.
164   Float_t              fMaxInvariantMass; // Cut - maximum invariant mass.
165
166   Int_t                fDaugCheckedPid;   // Cut - PID of daughter track.
167   Float_t              fDaugCheckedProb;  // Cut - min PID probability of the daughter track.
168
169 private:
170   void Init();
171
172   AliEveKinkList(const AliEveKinkList&);            // Not implemented
173   AliEveKinkList& operator=(const AliEveKinkList&); // Not implemented
174
175   ClassDef(AliEveKinkList, 0); // A list of AliEveKink objecs.
176 };
177
178
179 #endif