12 #ifndef PMAlgVertexing_h
13 #define PMAlgVertexing_h
15 #include "fhiclcpp/types/Atom.h"
16 #include "fhiclcpp/types/Comment.h"
17 #include "fhiclcpp/types/Name.h"
18 #include "fhiclcpp/types/Table.h"
29 class DetectorPropertiesData;
43 Name(
"MinTrackLength"),
44 Comment(
"min. length of tracks used to find vtx candidates (short tracks attached later)")};
47 Comment(
"detect significant kinks on long tracks")};
53 Comment(
"threshold in no. of stdev of all segment angles needed to tag a kink")};
82 std::vector<std::pair<TVector3, std::vector<std::pair<size_t, bool>>>>
getVertices(
84 bool onlyBranching =
false)
const;
90 has(
const std::vector<size_t>& v,
size_t idx)
const
93 if (c == idx)
return true;
100 std::vector<pma::VtxCandidate>& candidates);
106 double convolute(
size_t idx,
size_t len,
double* adc,
double const* shape)
const;
Vertex finding helper for the Projection Matching Algorithm.
pma::TrkCandidateColl fEmTracks
pma::TrkCandidateColl fShortTracks
size_t run(const detinfo::DetectorPropertiesData &detProp, pma::TrkCandidateColl &trk_input)
ClusterModuleLabel join with tracks
std::vector< pma::VtxCandidate > firstPassCandidates() const
std::vector< std::pair< TVector3, size_t > > getKinks(const pma::TrkCandidateColl &tracks) const
std::vector< pma::VtxCandidate > secondPassCandidates() const
void collectTracks(pma::TrkCandidateColl &result)
fhicl::Atom< double > MinTrackLength
std::vector< std::pair< TVector3, std::vector< std::pair< size_t, bool > > > > getVertices(const pma::TrkCandidateColl &tracks, bool onlyBranching=false) const
PMAlgVertexing(const Config &config)
fhicl::Atom< bool > FindKinks
std::vector< std::pair< double, double > > getdQdx(const pma::Track3D &trk) const
Get dQ/dx sequence to detect various features.
pma::TrkCandidateColl fOutTracks
BEGIN_PROLOG vertical distance to the surface Name
fhicl::Atom< double > KinkMinStd
pma::TrkCandidateColl fExcludedTracks
Track finding helper for the Projection Matching Algorithm.
size_t makeVertices(detinfo::DetectorPropertiesData const &detProp, std::vector< pma::VtxCandidate > &candidates)
double convolute(size_t idx, size_t len, double *adc, double const *shape) const
Get convolution value.
void sortTracks(const pma::TrkCandidateColl &trk_input)
PMAlgVertexing(const fhicl::ParameterSet &pset)
bool isSingleParticle(pma::Track3D *trk1, pma::Track3D *trk2) const
Check if colinear in 3D and dQ/dx with no significant step.
void splitMergedTracks(pma::TrkCandidateColl &trk_input) const
Split track and add vertex and reoptimize when dQ/dx step detected.
fhicl::Atom< double > KinkMinDeg
void findKinksOnTracks(const detinfo::DetectorPropertiesData &detProp, pma::TrkCandidateColl &trk_input) const
Remove penalty on the angle if kink detected and reopt track.
bool has(const std::vector< size_t > &v, size_t idx) const
void mergeBrokenTracks(pma::TrkCandidateColl &trk_input) const