4 #ifndef TrackMomentumCalculator_H 5 #define TrackMomentumCalculator_H 51 const bool checkValidPoints =
false,
52 const int maxMomentum_MeV = 7500,
53 const double min_resolution = 0,
54 const double max_resolution = 45);
75 const bool checkValidPoints =
false,
76 const int maxMomentum_MeV = 7500,
77 const double min_resolution = 0.001,
78 const double max_resolution = 800,
79 const bool check_valid_scattered =
false,
80 const double angle_correction = 0.757);
86 std::vector<double>
const& yyy,
87 std::vector<double>
const& zzz);
97 const std::vector<double> segy,
98 const std::vector<double> segz,
99 std::vector<double>& segnx,
100 std::vector<double>& segny,
101 std::vector<double>& segnz,
102 std::vector<bool>& segn_isvalid,
103 std::vector<double>& vx,
104 std::vector<double>& vy,
105 std::vector<double>& vz,
106 bool check_valid_scattered);
116 std::vector<double>
x,
nx;
117 std::vector<double>
y,
ny;
118 std::vector<double>
z,
nz;
119 std::vector<double>
L;
137 std::optional<Segments>
getSegTracks_(std::vector<double>
const& xxx,
138 std::vector<double>
const& yyy,
139 std::vector<double>
const& zzz,
141 bool check_valid_scattered =
false);
168 std::vector<double>& ej,
169 std::vector<double>& th,
170 std::vector<double>& ind,
173 double const angle_correction)
const;
184 double my_g(
double xx,
double Q,
double s)
const;
201 std::vector<double>
const& dEj,
202 std::vector<double>
const& dthij,
203 std::vector<double>
const& ind,
222 double find_angle(
double vz,
double vy)
const;
263 #endif // TrackMomentumCalculator_H double GetMomentumMultiScatterLLHD(art::Ptr< recob::Track > const &trk, const bool checkValidPoints=false, const int maxMomentum_MeV=7500, const double min_resolution=0.001, const double max_resolution=800, const bool check_valid_scattered=false, const double angle_correction=0.757)
Calculate muon momentum (GeV) using multiple coulomb scattering by log likelihood.
double GetMomentumMultiScatterChi2(art::Ptr< recob::Track > const &trk, const bool checkValidPoints=false, const int maxMomentum_MeV=7500, const double min_resolution=0, const double max_resolution=45)
Calculate muon momentum (GeV) using multiple coulomb scattering. Chi2 minimization of the Highland fo...
double my_g(double xx, double Q, double s) const
chi square minizer using Minuit2, it will minize (xx-Q)/s
Float_t x1[n_points_granero]
std::optional< Segments > getSegTracks_(std::vector< double > const &xxx, std::vector< double > const &yyy, std::vector< double > const &zzz, double seg_size, bool check_valid_scattered=false)
Split tracks into segments to calculate the scattered angle later. Check DOI 10.1088/1748-0221/12/10/...
int getDeltaThetaij_(std::vector< double > &ei, std::vector< double > &ej, std::vector< double > &th, std::vector< double > &ind, Segments const &segments, double thick, double const angle_correction) const
Gets the scatterd angle for all the segments.
TrackMomentumCalculator(double minLength=100.0, double maxLength=1350.0, double steps_size=10., int angleMethod=1, int nsteps=6)
Constructor.
ScatterAngleMethods fMCSAngleMethod
Use scattered angle z-x (z is along the particle's direction)
double find_angle(double vz, double vy) const
Gets angle between two vy and vz.
double my_mcs_llhd(std::vector< double > const &dEi, std::vector< double > const &dEj, std::vector< double > const &dthij, std::vector< double > const &ind, double x0, double x1) const
Minimizer of log likelihood for scattered angle.
bool plotRecoTracks_(std::vector< double > const &xxx, std::vector< double > const &yyy, std::vector< double > const &zzz)
Struct to store segments. x, y and z are the 3D points of the segment nx, ny, nz forms the vector tha...
std::tuple< double, double, double > getDeltaThetaRMS_(Segments const &segments, double thick) const
Gets the scattered angle RMS for a all segments.
Use space angle: sqrt( zx^2 + zy^2 )/sqrt(2)
void compute_max_fluctuation_vector(const std::vector< double > segx, const std::vector< double > segy, const std::vector< double > segz, std::vector< double > &segnx, std::vector< double > &segny, std::vector< double > &segnz, std::vector< bool > &segn_isvalid, std::vector< double > &vx, std::vector< double > &vy, std::vector< double > &vz, bool check_valid_scattered)
Computes the vector with most scattering inside a segment with size steps_size.
double GetMuMultiScatterLLHD3(art::Ptr< recob::Track > const &trk, bool dir)
Provides recob::Track data product.
TVector3 GetMultiScatterStartingPoint(art::Ptr< recob::Track > const &trk)
std::vector< bool > nvalid
TPolyLine3D * gr_reco_xyz
std::vector< double > steps
double GetTrackMomentum(double trkrange, int pdg) const