ROOT logo
#ifndef ROOT_TreeSearch_TimeToDistConv
#define ROOT_TreeSearch_TimeToDistConv

///////////////////////////////////////////////////////////////////////////////
//                                                                           //
// TreeSearch::TimeToDistConv                                                //
//                                                                           //
// Base class for algorithms for converting drift time to drift distance     //
//                                                                           //
///////////////////////////////////////////////////////////////////////////////

#include "Rtypes.h"
#include <vector>

using std::vector;

namespace TreeSearch {

  extern const Double_t kBig;

  class TimeToDistConv {

  public:
    virtual ~TimeToDistConv() {}

    virtual Double_t ConvertTimeToDist( Double_t time, 
					Double_t slope ) const = 0;
            UInt_t   GetNparam() const { return fNparam; }
    virtual Double_t GetParameter( UInt_t ) const { return kBig; }
    virtual Int_t    SetParameters( const vector<double>& ) { return 0; }

  protected:

    TimeToDistConv( UInt_t npar = 0 ) : fNparam(npar) {}
    TimeToDistConv( const TimeToDistConv& rhs ) : fNparam(rhs.fNparam) {}
    TimeToDistConv& operator=( const TimeToDistConv& rhs )
    {
      if( this != &rhs ) {
	fNparam = rhs.fNparam;
      }
      return *this;
    }

    UInt_t  fNparam;    // Number of parameters

    ClassDef(TimeToDistConv,0)     // Drift time to diatance converter ABC
  };


  //___________________________________________________________________________
  // LinearTTD
  //
  // Simple linear conversion of drift time (s) and drift distance (m).
  
  class LinearTTD : public TimeToDistConv {

  public:
    LinearTTD();
    virtual ~LinearTTD() {}

    virtual Double_t ConvertTimeToDist( Double_t time, Double_t slope ) const;
    virtual Int_t    SetParameters( const vector<double>& param );

            Double_t GetDriftVel() const { return fDriftVel; }
    virtual Double_t GetParameter( UInt_t i ) const;

protected:

    Double_t fDriftVel;   // Drift velocity (m/s)

    ClassDef(LinearTTD,0)  // Linear drift time-to-distance converter
  };

  //___________________________________________________________________________
  // TanhFitTTD
  //
  // Conversion of drift time (s) to distance using fit to tanh function
  
  class TanhFitTTD : public TimeToDistConv {

  public:
    TanhFitTTD();
    virtual ~TanhFitTTD() {}

    virtual Double_t ConvertTimeToDist( Double_t time, Double_t slope ) const;
    virtual Double_t GetParameter( UInt_t i ) const;
    virtual Int_t    SetParameters( const vector<double>& param );

protected:

    Double_t fDriftVel;   // Drift velocity (m/s)
    Double_t fC0;         // c0 (m)
    Double_t fC2;         // c2 (m/s^2)
    Double_t fT0;         // t0 (s)
    Double_t fInvC0;      // 1/c0 (1/m) for efficiency

    ClassDef(TanhFitTTD,0)  // TanhFit drift time-to-distance converter
  };

///////////////////////////////////////////////////////////////////////////////

}  // end namespace TreeSearch

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