1 #ifndef _DTrackFitterKalmanSIMD_H_
2 #define _DTrackFitterKalmanSIMD_H_
19 #include <TMatrixFSym.h>
23 #define M_TWO_PI 6.28318530717958647692
26 #define qBr2p 0.003 // conversion for converting q*B*r to GeV/c
35 #define R_MAX_FORWARD 65.0
36 #ifndef SPEED_OF_LIGHT
37 #define SPEED_OF_LIGHT 29.9792458
41 #define TIME_UNIT_CONVERSION 3.33564095198152014e-02
42 #define ONE_OVER_C TIME_UNIT_CONVERSION
43 #define Q_OVER_PT_MAX 100. // 10 MeV/c
49 #define DELTA_R 1.0 // distance in r to extend the trajectory beyond the last point
51 #define FDC_CATHODE_VARIANCE 0.000225
52 #define FDC_ANODE_VARIANCE 0.000225
54 #define ONE_THIRD 0.33333333333333333
55 #define ONE_SIXTH 0.16666666666666667
56 #define TWO_THIRDS 0.66666666666666667
60 #define DE_PER_STEP 0.001 // in GeV
61 #define BFIELD_FRAC 0.0001
62 #define MIN_STEP_SIZE 0.1 // in cm
64 #define ELECTRON_MASS 0.000511 // GeV
95 double uwire,vstrip,vvar,
z,dE;
106 double rho_Z_over_A,K_rho_Z_over_A,LnI,
Z;
115 double rho_Z_over_A,K_rho_Z_over_A,LnI,
Z;
141 if (WRITE_ML_TRAINING_OUTPUT){
144 for (
unsigned int i=0;i<my_cdchits.size();i++){
145 delete my_cdchits[i];
147 for (
unsigned int i=0;i<my_fdchits.size();i++){
148 delete my_fdchits[i];
152 central_traj.clear();
153 forward_traj.clear();
154 used_cdc_indices.clear();
155 used_fdc_indices.clear();
159 len=0.,ftime=0.0,var_ftime=0.0;
160 x_=0.,y_=0.,tx_=0.,ty_=0.,q_over_p_ = 0.0;
161 z_=0.,phi_=0.,tanl_=0.,q_over_pt_ =0, D_= 0.0;
165 for (
unsigned int i=0;i<cdcwires.size();i++){
166 for (
unsigned int j=0;j<cdcwires[i].size();j++){
167 delete cdcwires[i][j];
176 fit_status_t FitTrack(
void);
177 double ChiSq(fit_type_t fit_type,
DReferenceTrajectory *rt,
double *chisq_ptr=NULL,
int *dof_ptr=NULL, vector<pull_t> *pulls_ptr=NULL);
185 jerror_t KalmanLoop(
void);
186 virtual kalman_error_t KalmanForward(
double fdc_anneal,
double cdc_anneal,
188 double &chisq,
unsigned int &numdof);
189 virtual jerror_t SmoothForward(vector<pull_t>&mypulls);
190 virtual jerror_t ExtrapolateForwardToOtherDetectors(
void);
191 jerror_t ExtrapolateCentralToOtherDetectors(
void);
194 double &chisq,
unsigned int &numdof);
197 unsigned int &myndf);
203 jerror_t SetCDCForwardReferenceTrajectory(
DMatrix5x1 &
S);
208 mycov.assign(cov.begin(),cov.end());
211 mycov.assign(fcov.begin(),fcov.end());
218 double GetdEdx(
double q_over_p,
double K_rho_Z_over_A,
double rho_Z_over_A,
219 double rho_Z_over_A_LnI,
double Z);
220 double GetEnergyVariance(
double ds,
double beta2,
double K_rho_Z_over_A);
223 return fdc_drift_distance(time, Bz);
262 void locate(
const double *xx,
int n,
double x,
int *j);
263 unsigned int locate(vector<double>&xx,
double x);
265 double fdc_drift_variance(
double t)
const;
266 double fdc_drift_distance(
double t,
double Bz)
const;
268 void ResetKalmanSIMD(
void);
269 jerror_t GetProcessNoise(
double z,
double ds,
double chi2c_factor,
274 double Step(
double oldz,
double newz,
double dEdx,
DMatrix5x1 &
S);
275 double FasterStep(
double oldz,
double newz,
double dEdx,
DMatrix5x1 &
S);
276 void FastStep(
double &z,
double ds,
double dEdx,
DMatrix5x1 &
S);
278 jerror_t StepJacobian(
double oldz,
double newz,
const DMatrix5x1 &
S,
280 jerror_t CalcDerivAndJacobian(
double z,
double dz,
const DMatrix5x1 &
S,
283 jerror_t CalcJacobian(
double z,
double dz,
const DMatrix5x1 &
S,
285 jerror_t CalcDeriv(
double z,
const DMatrix5x1 &
S,
double dEdx,
295 jerror_t StepStateAndCovariance(
DVector2 &xy,
double ds,
306 jerror_t GetProcessNoiseCentral(
double ds,
double chi2c_factor,
307 double chi2a_factor,
double chi2a_corr,
309 jerror_t SmoothForwardCDC(vector<pull_t>&mypulls);
310 jerror_t SmoothCentral(vector<pull_t>&cdc_pulls);
315 vector<pull_t>&mypulls);
317 jerror_t FindCentralResiduals(vector<DKalmanUpdate_t>updates);
319 jerror_t BrentsAlgorithm(
double ds1,
double ds2,
325 jerror_t BrentsAlgorithm(
double z,
double dz,
326 double dedx,
const double z0wire,
330 jerror_t BrentForward(
double z,
double dedx,
335 jerror_t BrentCentral(
double dedx,
342 jerror_t PropagateForwardCDC(
int length,
int &
index,
double &z,
double &r2,
344 jerror_t PropagateForward(
int length,
int &
index,
double &z,
double zhit,
346 bool &stepped_to_boundary,
347 bool &stepped_to_endplate);
348 jerror_t PropagateCentral(
int length,
int &
index,
DVector2 &my_xy,
349 double &var_t_factor,
352 shared_ptr<TMatrixFSym> Get7x7ErrorMatrix(
DMatrixDSym C);
353 shared_ptr<TMatrixFSym> Get7x7ErrorMatrixForward(
DMatrixDSym C);
364 unsigned int &numdof);
371 unsigned int &numdof);
372 kalman_error_t RecoverBrokenForwardTracks(
double fdc_anneal_factor,
373 double cdc_anneal_factor,
378 unsigned int &numdof);
380 void ComputeCDCDrift(
double dphi,
double delta,
double t,
double B,
double &d,
381 double &V,
double &tcorr);
404 double x_,
y_,tx_,ty_,q_over_p_;
406 double z_,phi_,tanl_,q_over_pt_,D_;
412 vector< vector <double> >
cov;
413 vector< vector <double> >
fcov;
432 double dBxdx,dBxdy,dBxdz,dBydx,dBydy,dBydz,dBzdx,dBzdy,
dBzdz;
437 double endplate_z, endplate_dz, endplate_r2min, endplate_r2max;
530 double DRIFT_RES_PARMS[3];
532 double DRIFT_FUNC_PARMS[6];
557 TH1I *alignDerivHists[46];
558 TH2I *brentCheckHists[2];
569 #endif // _DTrackFitterKalmanSIMD_H_
unsigned int break_point_fdc_index
vector< vector< double > > fcov
vector< double > fdc_z_wires
unsigned int GetRatioMeasuredPotentialCDCHits(void) const
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.
vector< vector< double > > max_sag
vector< unsigned int > used_cdc_indices
double short_drift_func[3][3]
vector< double > fdc_drift_table
deque< DKalmanForwardTrajectory_t > forward_traj
double GetFDCDriftDistance(double time, double Bz) const
bool RECOVER_BROKEN_TRACKS
double FORWARD_ANNEAL_SCALE
vector< vector< DVector3 > > sc_norm
vector< double > cdc_drift_table
vector< double > cdc_origin
unsigned int break_point_step_index
shared_ptr< DResourcePool< TMatrixFSym > > dResourcePool_TMatrixFSym
vector< DKalmanUpdate_t > fdc_updates
class DFDCPseudo: definition for a reconstructed point in the FDC
vector< DKalmanSIMDFDCHit_t * > my_fdchits
static char index(char c)
double PHOTON_ENERGY_CUTOFF
vector< vector< DCDCWire * > > cdcwires
vector< vector< double > > sag_phi_offset
unsigned int GetRatioMeasuredPotentialFDCHits(void) const
static void locate(const double *xx, int n, double x, int *j)
vector< double > cdc_rmid
double COVARIANCE_SCALE_FACTOR_FORWARD
void GetForwardCovarianceMatrix(vector< vector< double > > &mycov)
double long_drift_func[3][3]
vector< double > fdc_rmin_packages
double FDC_DRIFT_BSCALE_PAR2
unsigned int MIN_HITS_FOR_REFIT
double endplate_z_downstream
vector< vector< double > > cov
void GetCovarianceMatrix(vector< vector< double > > &mycov)
double mCDCInternalStepSize
unsigned int GetNDF(void)
double FactorForSenseOfRotation
double mT0MinimumDriftTime
double CDC_VAR_SCALE_FACTOR
vector< DKalmanSIMDCDCHit_t * > my_cdchits
DetectorSystem_t mT0Detector
unsigned int last_material_map
vector< unsigned int > used_fdc_indices
~DTrackFitterKalmanSIMD()
double long_drift_Bscale_par2
double CDC_DRIFT_BSCALE_PAR2
vector< vector< DVector3 > > sc_pos
bool WRITE_ML_TRAINING_OUTPUT
vector< bool > cdc_used_in_fit
bool ENABLE_BOUNDARY_CHECK
vector< DKalmanUpdate_t > cdc_updates
vector< vector< DVector3 > > sc_dir
double short_drift_Bscale_par2
vector< bool > fdc_used_in_fit
deque< DKalmanCentralTrajectory_t > central_traj