Back to home page

sPhenix code displayed by LXR

 
 

    


File indexing completed on 2025-12-17 09:20:49

0001 #ifndef WEIGHTED_TRACK_ZERO_FIELD_H
0002 #define WEIGHTED_TRACK_ZERO_FIELD_H
0003 
0004 #include "WeightedTrack.h"
0005 
0006 class WeightedTrackZeroField : public WeightedTrack {
0007 public:
0008     WeightedTrackZeroField () = default;
0009     virtual ~WeightedTrackZeroField () = default;
0010 
0011     PHObject* CloneMe() const override { return new WeightedTrackZeroField(*this); }
0012 
0013     /// Sets member parameters (of derived classes which actually implement the track) using an array of double
0014     /// Unfortunately, helper members of derived classes must be declared mutable so this can be declared const
0015     /// All the following methods assume the parameters have been set using this method
0016     void set_parameters (double const* /*params*/) override;
0017     /// Mutates the members of the given array such that calling set_parameters would result in the same track parameterization (inverse of set_parameters)
0018     void get_parameters (double* /*params*/) const override;
0019     /// Returns the number of parameters needed for the fit, e.g. the minimum length of the array passed to set_parameters, get_parameters
0020     std::size_t get_n_parameters () const override { return 4; }
0021     /// Modifies the minimizer so it is ready to begin the fit optimization, including setting initial parameters and ranges
0022     void configure_minimizer (ROOT::Math::Minimizer& /*minimizer*/) override;
0023 
0024     /// Returns the partial derivative of the track position w.r.t. the parameter given by index evaluated at the given path length
0025     /// Used as a helper to get_residual_derivatives, which accounts for the implicit dependence of the intersection on the path length
0026     Eigen::Vector3d get_partial_derivative (int /*index*/, double /*path_length*/) const override;
0027 
0028     /// Evaluates the track position at the given path length
0029     Eigen::Vector3d get_position_at_path_length (double /*path_length*/) const override;
0030     /// Evaluates the track slope at the given path length
0031     Eigen::Vector3d get_slope_at_path_length (double /*path_length*/) const override;
0032 
0033     /// Finds the path length that gives the intersection with the plane described by the given transform
0034     /// For use with the sensor_transform member of ClusterFitPoint to find track states
0035     double get_path_length_of_intersection (Eigen::Affine3d const& /*plane*/) const override;
0036     /// Finds the path length that gives the point of closest approach to the given point
0037     double get_path_length_of_pca (Eigen::Vector3d const& /*point*/) const override;
0038 
0039 private:
0040     Eigen::Vector3d m_slope = Eigen::Vector3d::Zero();
0041     Eigen::Vector3d m_intercept = Eigen::Vector3d::Zero();
0042 
0043     double m_cos_theta{1.0};
0044     double m_sin_theta{0.0};
0045     double m_cos_phi{1.0};
0046     double m_sin_phi{0.0};
0047 
0048     ClassDefOverride(WeightedTrackZeroField, 1);
0049 };
0050 
0051 #endif//WEIGHTED_TRACK_ZERO_FIELD_H