5std::vector<float>
trackProp(
const ldmx::Tracks &tracks,
6 ldmx::TrackStateType ts_type,
7 const std::string &ts_title) {
9 std::vector<float> new_track_states;
12 if (tracks.empty())
return new_track_states;
15 for (
auto &track : tracks) {
17 auto trk_ts = track.getTrackState(ts_type);
19 if (!trk_ts.has_value())
continue;
23 if (ecal_track_state.pos_.size() < 3 || ecal_track_state.mom_.size() < 3)
27 new_track_states.push_back(
static_cast<float>(ecal_track_state.pos_[0]));
28 new_track_states.push_back(
static_cast<float>(ecal_track_state.pos_[1]));
29 new_track_states.push_back(
static_cast<float>(ecal_track_state.pos_[2]));
30 new_track_states.push_back(
static_cast<float>(ecal_track_state.mom_[0]));
31 new_track_states.push_back(
static_cast<float>(ecal_track_state.mom_[1]));
32 new_track_states.push_back(
static_cast<float>(ecal_track_state.mom_[2]));
40 return new_track_states;
45float distTwoLines(ROOT::Math::XYZVector v1, ROOT::Math::XYZVector v2,
46 ROOT::Math::XYZVector w1, ROOT::Math::XYZVector w2) {
47 ROOT::Math::XYZVector e1 = v1 - v2;
48 ROOT::Math::XYZVector e2 = w1 - w2;
49 ROOT::Math::XYZVector crs = e1.Cross(e2);
54 return std::abs(crs.Dot(v1 - w1) / crs.R());
std::vector< float > trackProp(const ldmx::Tracks &tracks, ldmx::TrackStateType ts_type, const std::string &ts_title)
Return a vector of parameters for a propagated recoil track.
float distPtToLine(ROOT::Math::XYZVector h1, ROOT::Math::XYZVector p1, ROOT::Math::XYZVector p2)
Return the minimum distance between the point h1 and the line passing through points p1 and p2.
float distTwoLines(ROOT::Math::XYZVector v1, ROOT::Math::XYZVector v2, ROOT::Math::XYZVector w1, ROOT::Math::XYZVector w2)
Returns the distance between the lines v and w, with v defined to pass through the points (v1,...