1a52b927c7cbf484bf043027f257fa28336908b2
[u/mrichter/AliRoot.git] / EVE / EveBase / AliEveTrackFitter.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
10 #ifndef ALIEVE_TrackFitter_H
11 #define ALIEVE_TrackFitter_H
12
13 #include <TEvePointSet.h>
14 #include <map>
15
16 class TGraphErrors;
17 class TGraph;
18 class AliRieman;
19
20 class TEveTrackList;
21
22 class AliEveTrackFitter : public TEvePointSet
23 {
24 private:
25   AliEveTrackFitter(const AliEveTrackFitter&);            // Not implemented
26   AliEveTrackFitter& operator=(const AliEveTrackFitter&); // Not implemented
27
28 protected:
29
30   struct Point_t
31   {
32     TEvePointSet   *fPS;   // point set
33     Int_t           fIdx;  // id in point set
34
35     Point_t(TEvePointSet* ps=0, Int_t i=0) : fPS(ps), fIdx(i) {}
36     Point_t(const Point_t& p) : fPS(p.fPS), fIdx(p.fIdx)  {}
37
38     Point_t& operator=(const Point_t& p) {
39       fPS = p.fPS; fIdx = p.fIdx; return *this;
40     }
41
42     bool operator<(const Point_t& o) const {
43       if (fPS != o.fPS) return fPS < o.fPS;
44       return fIdx < o.fIdx;
45     }
46   };
47
48   typedef std::map<Point_t, Int_t>          PointMap_t;
49
50   Float_t            fAlpha;                // transformation angle to AliRieman local system (where x>>y)
51   AliRieman*         fRieman;               // rieman fitter
52
53   Bool_t             fConnected;            // connection to the TEvePointSet signal
54
55   PointMap_t         fSPMap;                // map of selected points
56   TEveTrackList*     fTrackList;            // list of tracks removed in the destructor
57
58   TGraph            *fGraphPicked;          // graph of selected points debug info
59   TGraphErrors      *fGraphHelix;           // graph of fitted points for debug info
60
61 public:
62   AliEveTrackFitter(const Text_t* name = "TrackFitter", Int_t n_points=0);
63   virtual ~AliEveTrackFitter();
64
65   virtual void  AddFitPoint(TEvePointSet*,Int_t);  // slot for PointCtrlClicked() signal
66
67   virtual void  Start();
68   virtual void  Stop();
69   virtual void  FitTrack();
70   virtual void  Reset(Int_t n_points=0, Int_t n_int_ids=0);
71
72   Bool_t        GetConnected(){ return fConnected; }
73   AliRieman*    GetRieman(){ return fRieman; }
74
75   TGraph*       GetGraphPicked()   { return fGraphPicked; }
76   TGraphErrors* GetGraphHelix()    { return fGraphHelix; }
77   void          DrawDebugGraph();
78
79   virtual void  DestroyElements();   // *MENU*
80
81   ClassDef(AliEveTrackFitter, 0); // Interface of TEvePointSet allowing helix fit.
82 };
83
84 #endif