LDMX Software
TruthMatchingTool.cxx
1#include "Tracking/Reco/TruthMatchingTool.h"
2
3namespace tracking {
4namespace sim {
5
6TruthMatchingTool::TruthInfo TruthMatchingTool::Evaluate(
7 const std::unordered_map<unsigned int, unsigned int>& trk_trackIDs,
8 int n_meas) {
9 TruthInfo ti;
10 ti.truthProb = 0.;
11 ti.trackID = -1;
12 ti.pdgID = 0;
13
14 for (std::unordered_map<unsigned int, unsigned int>::const_iterator it =
15 trk_trackIDs.begin();
16 it != trk_trackIDs.end(); it++) {
17 double currentTruthProb = (double)it->second / (double)n_meas;
18 if (currentTruthProb > ti.truthProb) {
19 ti.truthProb = currentTruthProb;
20 ti.trackID = it->first;
21 }
22 }
23
24 if (ti.trackID > 0) ti.pdgID = map_[ti.trackID].getPdgID();
25
26 return ti;
27}
28
29TruthMatchingTool::TruthInfo TruthMatchingTool::TruthMatch(
30 const std::vector<ldmx::Measurement>& vmeas) {
31 std::unordered_map<unsigned int, unsigned int> trk_trackIDs;
32
33 for (auto meas : vmeas) {
34 for (auto trkId : meas.getTrackIds()) {
35 if (trk_trackIDs.find(trkId) != trk_trackIDs.end())
36 trk_trackIDs[trkId]++;
37 else
38 trk_trackIDs[trkId] = 1;
39 }
40 } // loop on measurements
41
42 return Evaluate(trk_trackIDs, vmeas.size());
43}
44
55 const ldmx::Track& trk) {
56 // Map holding all tracksIds and their frequency
57 std::unordered_map<unsigned int, unsigned int> trk_trackIDs;
58
59 for (auto measID : trk.getMeasurementsIdxs()) {
60 auto meas = measurements_.at(measID);
61 if (debug_) {
62 std::cout << "Getting measurement at ID:" << measID << std::endl;
63 std::cout << meas << std::endl;
64 std::cout << meas.getTrackIds().size() << std::endl;
65 }
66
67 for (auto trkId : meas.getTrackIds()) {
68 if (trk_trackIDs.find(trkId) != trk_trackIDs.end()) {
69 trk_trackIDs[trkId]++;
70 } else {
71 trk_trackIDs[trkId] = 1;
72 }
73
74 } // loop on measurements trackIDs
75
76 if (debug_) {
77 std::cout << "The trackIDs maps look like:" << std::endl;
78 for (std::unordered_map<unsigned int, unsigned int>::iterator it =
79 trk_trackIDs.begin();
80 it != trk_trackIDs.end(); it++) {
81 std::cout << it->first << " " << it->second << std::endl;
82 }
83 }
84 } // loop on measurements
85
86 return Evaluate(trk_trackIDs, trk.getMeasurementsIdxs().size());
87
88} // Match Track
89
90} // namespace sim
91} // namespace tracking
Implementation of a track object.
Definition Track.h:52
TruthInfo TruthMatch(const ldmx::Track &trk)
Performs the truth matching by checking all the trackIDs associated to the measurements on track.
The measurement calibrator can be a function or a class/struct able to retrieve the sim hits containe...