ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
HelixKalmanFilter.h
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file HelixKalmanFilter.h
1 #ifndef G4HOUGH_HELIXKALMANFILTER_H
2 #define G4HOUGH_HELIXKALMANFILTER_H
3 
4 #include <Eigen/Core>
5 
6 #include <vector>
7 
8 class SimpleHit3D;
9 class HelixKalmanState;
10 
12 {
13 public:
14  HelixKalmanFilter(std::vector<float>& detector_radii,
15  std::vector<float>& detector_material, float B);
16  virtual ~HelixKalmanFilter() {};
17 
18  void addHit(SimpleHit3D& hit, HelixKalmanState& state);
19 
20 protected:
22  Eigen::Matrix<float,2,5>& H, Eigen::Matrix<float,2,1>& ha);
23  void calculateMeasurements(SimpleHit3D& hit, Eigen::Matrix<float,2,1>& m,
24  Eigen::Matrix<float,2,2>& G);
25  void calculateMSCovariance(HelixKalmanState& state, Eigen::Matrix<float,5,5>& Q);
26  void subtractProjections(Eigen::Matrix<float,2,1>& m, Eigen::Matrix<float,2,1>& ha,
27  Eigen::Matrix<float,2,1>& diff);
28  void updateIntersection(HelixKalmanState& state, int layer);
29 
30 private:
31  // Functions called by calculateMSCovariance
32  bool calculateScatteringVariance(HelixKalmanState& state, float& var);
33  void calculate_dbdt(Eigen::Matrix<float,3,2>& dbdt_out);
34  void calculate_dpdb(Eigen::Vector3f& p, Eigen::Matrix<float,3,3>& dpdb);
35  void calculate_dApdp(HelixKalmanState& state, Eigen::Matrix<float,3,3>& dApdp,
36  Eigen::Vector3f& p, float phi, float cosphi, float sinphi);
37  void calculate_dAdAp(HelixKalmanState& state, Eigen::Matrix<float,5,3>& dAdAp,
38  float& phi_p, float& cosphi_p, float& sinphi_p);
39  // Functions called by calculateProjections
40  void calculate_dxda(SimpleHit3D& hit, HelixKalmanState& state,
41  Eigen::Matrix<float,3,5>& dxda, float& x, float& y, float& z);
42  std::vector<float> det_radii;
43  std::vector<float> det_scatter_variance;
44  unsigned int nlayers;
45  float signk_store;
47 
48 
49 };
50 
51 
52 #endif