3e93ccdc575283f14ea36c43427223d44d8ba07e
[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 <TQObject.h>
15 #include <map>
16
17 class TGraphErrors;
18 class TGraph;
19 class AliRieman;
20
21 class TEveTrackList;
22
23
24 class AliEveTrackFitter : public TEvePointSet
25 {
26 private:
27   AliEveTrackFitter(const AliEveTrackFitter&);            // Not implemented
28   AliEveTrackFitter& operator=(const AliEveTrackFitter&); // Not implemented
29
30   TGraph       *fGraphSelected;  // graph of selected points
31   TGraphErrors *fGraphFitted;    // graph of fitted points
32
33 protected:
34   struct Point_t
35   {
36     // inner structure to check duplicates
37     TEvePointSet   *fPS;   // selected pointset
38     Int_t           fIdx;  // location in the point set array
39
40     Point_t(TEvePointSet* ps, Int_t i) : fPS(ps), fIdx(i) {}
41     Point_t(const Point_t& p) : fPS(p.fPS), fIdx(p.fIdx)  {}
42     Point_t& operator=(const Point_t& p)
43     { fPS = p.fPS; fIdx = p.fIdx; return *this; }
44
45     bool operator<(const Point_t& o) const
46     { if (fPS != o.fPS) return fPS < o.fPS; return fIdx < o.fIdx; }
47   };
48
49   Float_t    fAlpha;                // transformation agle to local system (where x>>y)
50   AliRieman* fRieman;               // rieman fitter
51
52   Bool_t     fConnected;            // object connected to pointset Ctrl-shift signal
53
54   TEveTrackList* fTrackList;        // track list created with rieman fit
55
56   std::map<Point_t, Int_t> fMapPS;  // map of selected points from different TEvePointSet
57
58 public:
59   AliEveTrackFitter(const Text_t* name, Int_t n_points=0);
60   virtual ~AliEveTrackFitter();
61
62   virtual void AddFitPoint(TEvePointSet*,Int_t);  // slot for PointCtrlClicked() signal
63
64   virtual void DestroyElements();   // *MENU*
65
66   virtual void Start();
67   virtual void Stop();
68   virtual void FitTrack();
69   virtual void Reset(Int_t n_points=0, Int_t n_int_ids=0);
70
71   Bool_t        GetConnected(){ return fConnected; }
72   AliRieman*    GetRieman(){ return fRieman; }
73
74   void          DrawRiemanGraph();
75
76   TGraph*       GetGraphSelected() { return fGraphSelected; }
77   TGraphErrors* GetGraphFitted()   { return fGraphFitted; }
78
79   ClassDef(AliEveTrackFitter, 0); // Interface to AliRieman fit.
80 }; // endclass AliEveTrackFitter
81
82 #endif