1 #ifndef TRAJECTORYMCSFITTER_H
2 #define TRAJECTORYMCSFITTER_H
4 #include "fhiclcpp/ParameterSet.h"
5 #include "fhiclcpp/types/Atom.h"
6 #include "fhiclcpp/types/Table.h"
7 #include "canvas/Persistency/Common/Ptr.h"
33 class TrajectoryMCSFitter {
41 Name(
"pIdHypothesis"),
42 Comment(
"Default particle Id Hypothesis to be used in the fit when not specified."),
46 Name(
"minNumSegments"),
47 Comment(
"Minimum number of segments the track is split into."),
51 Name(
"segmentLength"),
52 Comment(
"Nominal length of track segments used in the fit."),
56 Name(
"minHitsPerSegment"),
57 Comment(
"Exclude segments with less hits than this value."),
62 Comment(
"Number of steps for computing energy loss uptream to current segment."),
67 Comment(
"Default is MPV Landau. Choose 1 for MIP (constant); 2 for Bethe-Bloch."),
70 fhicl::Atom<double>
pMin {
72 Comment(
"Minimum momentum value in likelihood scan."),
75 fhicl::Atom<double>
pMax {
77 Comment(
"Maximum momentum value in likelihood scan."),
80 fhicl::Atom<double>
pStep {
82 Comment(
"Step in momentum value in likelihood scan."),
87 Comment(
"Angular resolution parameter used in modified Highland formula. Unit is mrad."),
93 TrajectoryMCSFitter(
int pIdHyp,
int minNSegs,
double segLen,
int minHitsPerSegment,
int nElossSteps,
int eLossMode,
double pMin,
double pMax,
double pStep,
double angResol){
106 :
TrajectoryMCSFitter(p().pIdHypothesis(),p().minNumSegments(),p().segmentLength(),p().minHitsPerSegment(),p().nElossSteps(),p().eLossMode(),p().pMin(),p().pMax(),p().pStep(),p().angResol()) {}
117 return fitMcs(tt,pid,momDepConst);
120 void breakTrajInSegments(
const recob::TrackTrajectory& traj, std::vector<size_t>& breakpoints, std::vector<float>& segradlengths, std::vector<float>& cumseglens)
const;
122 double mcsLikelihood(
double p,
double theta0x, std::vector<float>& dthetaij, std::vector<float>& seg_nradl, std::vector<float>& cumLen,
bool fwd,
bool momDepConst,
int pid)
const;
130 const ScanResult doLikelihoodScan(std::vector<float>& dtheta, std::vector<float>& seg_nradlengths, std::vector<float>& cumLen,
bool fwdFit,
bool momDepConst,
int pid)
const;
134 constexpr
double a = 0.1049;
135 constexpr
double c = 11.0038;
136 return (a/(p*p)) + c;
139 if (
abs(pid)==13) {
return mumass; }
140 if (
abs(pid)==211) {
return pimass; }
141 if (
abs(pid)==321) {
return kmass; }
142 if (
abs(pid)==2212) {
return pmass; }
145 double energyLossBetheBloch(
const double mass,
const double e2)
const;
146 double energyLossLandau(
const double mass2,
const double E2,
const double x)
const;
148 double GetE(
const double initial_E,
const double length_travelled,
const double mass)
const;
154 int minHitsPerSegment_;
ScanResult(double ap, double apUnc, double alogL)
fhicl::Table< Config > Parameters
fhicl::Atom< double > pMin
process_name opflash particleana ie x
fhicl::Atom< int > minNumSegments
const recob::TrackTrajectory & Trajectory() const
Access to the stored recob::TrackTrajectory.
recob::MCSFitResult fitMcs(const recob::Trajectory &traj, int pid, bool momDepConst=true) const
fhicl::Atom< int > pIdHypothesis
process_name use argoneut_mc_hitfinder track
fhicl::Atom< int > eLossMode
recob::MCSFitResult fitMcs(const recob::TrackTrajectory &traj) const
fhicl::Atom< int > minHitsPerSegment
TrajectoryMCSFitter(const Parameters &p)
fhicl::Atom< int > nElossSteps
ROOT::Math::DisplacementVector3D< ROOT::Math::Cartesian3D< Coord_t >, ROOT::Math::GlobalCoordinateSystemTag > Vector_t
Type for representation of momenta in 3D space. See recob::tracking::Coord_t for more details on the ...
std::array< double, 5 > angResol_
double mass(int pid) const
recob::MCSFitResult fitMcs(const recob::Trajectory &traj, bool momDepConst=true) const
size_t NPoints() const
Returns the number of stored trajectory points.
A trajectory in space reconstructed from hits.
BEGIN_PROLOG vertical distance to the surface Name
std::vector< PointFlags_t > Flags_t
Type of point flag list.
double MomentumDependentConstant(const double p) const
Provides recob::Track data product.
recob::MCSFitResult fitMcs(const recob::TrackTrajectory &traj, bool momDepConst=true) const
Class storing the result of the Maximum Likelihood fit of Multiple Coulomb Scattering angles between ...
A trajectory in space reconstructed from hits.
TrajectoryMCSFitter(int pIdHyp, int minNSegs, double segLen, int minHitsPerSegment, int nElossSteps, int eLossMode, double pMin, double pMax, double pStep, double angResol)
recob::MCSFitResult fitMcs(const recob::Track &track, bool momDepConst=true) const
Class for Maximum Likelihood fit of Multiple Coulomb Scattering angles between segments within a Trac...
fhicl::Atom< double > segmentLength
recob::MCSFitResult fitMcs(const recob::Track &track, int pid, bool momDepConst=true) const
constexpr double kBogusD
obviously bogus double value
fhicl::Atom< double > pMax
fhicl::Sequence< double, 5 > angResol
Track from a non-cascading particle.A recob::Track consists of a recob::TrackTrajectory, plus additional members relevant for a "fitted" track:
fhicl::Atom< double > pStep