Hall-D Software  alpha
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
DTrackFitterStraightTrack.h
Go to the documentation of this file.
1 // $Id$
2 //
3 // File: DTrackFitterStraightTrack.h
4 // Created: Tue Mar 12 10:22:32 EDT 2019
5 // Creator: staylor (on Linux ifarm1402.jlab.org 3.10.0-327.el7.x86_64 x86_64)
6 //
7 
8 #ifndef _DTrackFitterStraightTrack_
9 #define _DTrackFitterStraightTrack_
10 
11 #include <JANA/jerror.h>
12 
13 #include <TRACKING/DTrackFitter.h>
14 
15 #include <CDC/DCDCTrackHit.h>
16 #include <FDC/DFDCPseudo.h>
17 #include <DMatrixSIMD.h>
18 #include <deque>
19 #include <TMatrixFSym.h>
20 #include "DResourcePool.h"
21 #include <TRACKING/DTrackFinder.h>
22 
24 public:
25  DTrackFitterStraightTrack(JEventLoop *loop);
27 
33  };
34 
43  };
44 
45  class trajectory_t{
46  public:
48  DMatrix4x4 Ckk,unsigned int id=0,unsigned int numhits=0)
49  :z(z),t(t),S(S),J(J),Skk(Skk),Ckk(Ckk),id(id),numhits(numhits){}
50  double z,t;
55  unsigned int id,numhits;
56  };
57 
58  typedef struct{
59  double resi,err,d,delta,tdrift,ddrift,s,V;
62  }cdc_update_t;
63 
64  typedef struct{
65  double d,tdrift,s;
69  }fdc_update_t;
70 
71  // Virtual methods from TrackFitter base class
72  string Name(void) const {return string("StraightTrack");}
73  fit_status_t FitTrack(void);
74  double ChiSq(fit_type_t fit_type, DReferenceTrajectory *rt, double *chisq_ptr=NULL, int *dof_ptr=NULL, vector<pull_t> *pulls_ptr=NULL){return 0.;};
75 
76 
77  unsigned int Locate(const vector<double>&xx,double x) const;
78  double CDCDriftVariance(double t) const;
79  double CDCDriftDistance(double dphi,double delta,double t) const;
80  jerror_t SetReferenceTrajectory(double t0,double z,DMatrix4x1 &S,
81  const DCDCTrackHit *last_cdc,double &dzsign);
82  jerror_t KalmanFilter(DMatrix4x1 &S,DMatrix4x4 &C,vector<int>&used_hits,
83  vector<cdc_update_t>&updates,double &chi2,
84  int &ndof,unsigned int iter);
85  jerror_t Smooth(vector<cdc_update_t>&cdc_updates);
86  DTrackFitter::fit_status_t FitCentralTrack(double &z0,double t0,double dzsign,
87  DMatrix4x1 &Sbest,
88  DMatrix4x4 &Cbest,
89  double &chi2_best,int &ndof_best);
90  double fdc_drift_distance(double time) const;
91  double fdc_drift_variance(double t) const;
92  DTrackFitter::fit_status_t FitForwardTrack(double t0,double &start_z,
93  DMatrix4x1 &Sbest,
94  DMatrix4x4 &Cbest,
95  double &chi2_best,int &ndof_best);
96  jerror_t SetReferenceTrajectory(double t0,double z,DMatrix4x1 &S);
97  jerror_t KalmanFilter(DMatrix4x1 &S,DMatrix4x4 &C,vector<int>&used_fdc_hits,
98  vector<int>&used_cdc_hits,vector<fdc_update_t>&updates,
99  vector<cdc_update_t>&cdc_updates,double &chi2,
100  int &ndof);
101  jerror_t Smooth(vector<fdc_update_t>&fdc_updates,
102  vector<cdc_update_t>&cdc_updates);
103  shared_ptr<TMatrixFSym> Get7x7ErrorMatrix(TMatrixFSym C,
104  DMatrix4x1 &S,double sign);
105  void GetExtrapolations(const DVector3 &pos0,const DVector3 &dir);
106 
107  private:
108  deque<trajectory_t>trajectory;
109  deque<trajectory_t>best_trajectory;
110 
112  int VERBOSE;
113  double CHI2CUT;
115 
116  // Geometry parameters
118 
119  // start counter geom info
120  vector<vector<DVector3> >sc_dir; // direction vector in plane of plastic
121  vector<vector<DVector3> >sc_pos;
122  vector<vector<DVector3> >sc_norm;
124 
125  // drift time tables
126  vector<double>cdc_drift_table;
127  vector<double>fdc_drift_table;
128 
129  // Resolution parameters
131  // Parameters for fdc drift resolution
132  double DRIFT_RES_PARMS[3];
133  double DRIFT_FUNC_PARMS[6];
134 
135  // variables to deal with CDC straw sag
136  vector<vector<double> >max_sag;
137  vector<vector<double> >sag_phi_offset;
138  double long_drift_func[3][3];
139  double short_drift_func[3][3];
140 
143  shared_ptr<DResourcePool<TMatrixFSym>> dResourcePool_TMatrixFSym;
144 
145 };
146 
147 #endif // _DTrackFitterStraightTrack_
148 
deque< trajectory_t > best_trajectory
shared_ptr< TMatrixFSym > Get7x7ErrorMatrix(TMatrixFSym C, DMatrix4x1 &S, double sign)
DTrackFitter::fit_status_t FitCentralTrack(double &z0, double t0, double dzsign, DMatrix4x1 &Sbest, DMatrix4x4 &Cbest, double &chi2_best, int &ndof_best)
The DTrackFitter class is a base class for different charged track fitting algorithms. It does not actually fit the track itself, but provides the interface and some common support features most algorthims will need to implement.
Definition: DTrackFitter.h:61
vector< vector< DVector3 > > sc_dir
TVector3 DVector3
Definition: DVector3.h:14
Double_t x[NCHANNELS]
Definition: st_tw_resols.C:39
char string[256]
fit_type_t fit_type
Definition: DTrackFitter.h:227
double fdc_drift_variance(double t) const
unsigned int Locate(const vector< double > &xx, double x) const
shared_ptr< DResourcePool< TMatrixFSym > > dResourcePool_TMatrixFSym
jerror_t Smooth(vector< cdc_update_t > &cdc_updates)
double CDCDriftDistance(double dphi, double delta, double t) const
vector< vector< double > > max_sag
vector< vector< double > > sag_phi_offset
DTrackFitter::fit_status_t FitForwardTrack(double t0, double &start_z, DMatrix4x1 &Sbest, DMatrix4x4 &Cbest, double &chi2_best, int &ndof_best)
const map< DetectorSystem_t, vector< Extrapolation_t > > & GetExtrapolations(void) const
Definition: DTrackFitter.h:163
jerror_t SetReferenceTrajectory(double t0, double z, DMatrix4x1 &S, const DCDCTrackHit *last_cdc, double &dzsign)
vector< vector< DVector3 > > sc_pos
trajectory_t(double z, double t, DMatrix4x1 S, DMatrix4x4 J, DMatrix4x1 Skk, DMatrix4x4 Ckk, unsigned int id=0, unsigned int numhits=0)
vector< vector< DVector3 > > sc_norm
#define S(str)
Definition: hddm-c.cpp:84
double fdc_drift_distance(double time) const
JEventLoop * loop
Definition: DTrackFitter.h:231
jerror_t KalmanFilter(DMatrix4x1 &S, DMatrix4x4 &C, vector< int > &used_hits, vector< cdc_update_t > &updates, double &chi2, int &ndof, unsigned int iter)
TDirectory * dir
Definition: bcal_hist_eff.C:31
double CDCDriftVariance(double t) const
double ChiSq(fit_type_t fit_type, DReferenceTrajectory *rt, double *chisq_ptr=NULL, int *dof_ptr=NULL, vector< pull_t > *pulls_ptr=NULL)