ROOT logo
// $Id$
// Main authors: Matevz Tadel & Alja Mrak-Tadel: 2006, 2007

/**************************************************************************
 * Copyright(c) 1998-2008, ALICE Experiment at CERN, all rights reserved. *
 * See http://aliceinfo.cern.ch/Offline/AliRoot/License.html for          *
 * full copyright notice.                                                 *
 **************************************************************************/

#ifndef AliEveTrackFitter_H
#define AliEveTrackFitter_H

#include <TEvePointSet.h>
#include <map>

class TGraphErrors;
class TGraph;
class AliRieman;

class TEveTrackList;

class AliEveTrackFitter : public TEvePointSet
{
public:
  AliEveTrackFitter(const Text_t* name = "TrackFitter", Int_t nPoints=0);
  virtual ~AliEveTrackFitter();

  virtual void DestroyElements();

  virtual void  AddFitPoint(Int_t pointId);  // slot for TEvePointSet::PointSelected() signal

  virtual void  Start();
  virtual void  Stop();
  virtual void  FitTrack();
  virtual void  Reset(Int_t nPoints=0, Int_t nIntIds=0);

  Bool_t        GetConnected() const { return fConnected; }
  AliRieman*    GetRieman()    const { return fRieman; }

  TGraph*       GetGraphPicked() const { return fGraphPicked; }
  TGraphErrors* GetGraphHelix()  const { return fGraphHelix; }
  void          DrawDebugGraph();


protected:

  struct Point_t
  {
    TEvePointSet   *fPS;   // point set
    Int_t           fIdx;  // id in point set

    Point_t(TEvePointSet* ps=0, Int_t i=0) : fPS(ps), fIdx(i) {}
    Point_t(const Point_t& p) : fPS(p.fPS), fIdx(p.fIdx)  {}

    Point_t& operator=(const Point_t& p)
    {
      fPS = p.fPS; fIdx = p.fIdx; return *this;
    }

    bool operator<(const Point_t& o) const
    {
      if (fPS != o.fPS) return fPS < o.fPS;
      return fIdx < o.fIdx;
    }
  };

  typedef std::map<Point_t, Int_t> PointMap_t;

  Float_t            fAlpha;           // transformation angle to AliRieman local system (where x>>y)
  AliRieman*         fRieman;          // rieman fitter

  Bool_t             fConnected;       // connection to the TEvePointSet signal

  PointMap_t         fSPMap;           // map of selected points
  TEveTrackList*     fTrackList;       // list of tracks removed in the destructor

  TGraph            *fGraphPicked;     // graph of selected points debug info
  TGraphErrors      *fGraphHelix;      // graph of fitted points for debug info

private:
  AliEveTrackFitter(const AliEveTrackFitter&);            // Not implemented
  AliEveTrackFitter& operator=(const AliEveTrackFitter&); // Not implemented

  ClassDef(AliEveTrackFitter, 0); // Interface of TEvePointSet allowing helix fit.
};

#endif
 AliEveTrackFitter.h:1
 AliEveTrackFitter.h:2
 AliEveTrackFitter.h:3
 AliEveTrackFitter.h:4
 AliEveTrackFitter.h:5
 AliEveTrackFitter.h:6
 AliEveTrackFitter.h:7
 AliEveTrackFitter.h:8
 AliEveTrackFitter.h:9
 AliEveTrackFitter.h:10
 AliEveTrackFitter.h:11
 AliEveTrackFitter.h:12
 AliEveTrackFitter.h:13
 AliEveTrackFitter.h:14
 AliEveTrackFitter.h:15
 AliEveTrackFitter.h:16
 AliEveTrackFitter.h:17
 AliEveTrackFitter.h:18
 AliEveTrackFitter.h:19
 AliEveTrackFitter.h:20
 AliEveTrackFitter.h:21
 AliEveTrackFitter.h:22
 AliEveTrackFitter.h:23
 AliEveTrackFitter.h:24
 AliEveTrackFitter.h:25
 AliEveTrackFitter.h:26
 AliEveTrackFitter.h:27
 AliEveTrackFitter.h:28
 AliEveTrackFitter.h:29
 AliEveTrackFitter.h:30
 AliEveTrackFitter.h:31
 AliEveTrackFitter.h:32
 AliEveTrackFitter.h:33
 AliEveTrackFitter.h:34
 AliEveTrackFitter.h:35
 AliEveTrackFitter.h:36
 AliEveTrackFitter.h:37
 AliEveTrackFitter.h:38
 AliEveTrackFitter.h:39
 AliEveTrackFitter.h:40
 AliEveTrackFitter.h:41
 AliEveTrackFitter.h:42
 AliEveTrackFitter.h:43
 AliEveTrackFitter.h:44
 AliEveTrackFitter.h:45
 AliEveTrackFitter.h:46
 AliEveTrackFitter.h:47
 AliEveTrackFitter.h:48
 AliEveTrackFitter.h:49
 AliEveTrackFitter.h:50
 AliEveTrackFitter.h:51
 AliEveTrackFitter.h:52
 AliEveTrackFitter.h:53
 AliEveTrackFitter.h:54
 AliEveTrackFitter.h:55
 AliEveTrackFitter.h:56
 AliEveTrackFitter.h:57
 AliEveTrackFitter.h:58
 AliEveTrackFitter.h:59
 AliEveTrackFitter.h:60
 AliEveTrackFitter.h:61
 AliEveTrackFitter.h:62
 AliEveTrackFitter.h:63
 AliEveTrackFitter.h:64
 AliEveTrackFitter.h:65
 AliEveTrackFitter.h:66
 AliEveTrackFitter.h:67
 AliEveTrackFitter.h:68
 AliEveTrackFitter.h:69
 AliEveTrackFitter.h:70
 AliEveTrackFitter.h:71
 AliEveTrackFitter.h:72
 AliEveTrackFitter.h:73
 AliEveTrackFitter.h:74
 AliEveTrackFitter.h:75
 AliEveTrackFitter.h:76
 AliEveTrackFitter.h:77
 AliEveTrackFitter.h:78
 AliEveTrackFitter.h:79
 AliEveTrackFitter.h:80
 AliEveTrackFitter.h:81
 AliEveTrackFitter.h:82
 AliEveTrackFitter.h:83
 AliEveTrackFitter.h:84
 AliEveTrackFitter.h:85
 AliEveTrackFitter.h:86
 AliEveTrackFitter.h:87