69 std::vector<FPGATrackSimCluster>
const & clusters_1st,
70 const std::vector<FPGATrackSimRoad> & roads_1st, std::vector<FPGATrackSimTrack>
const & tracks_1st,
71 const std::vector<FPGATrackSimRoad> & roads_2nd, std::vector<FPGATrackSimTrack>
const & tracks_2nd)
74 for (
int i=0; i<header_1st->
towers().at(0).
nHits(); i++) {
75 info->nMappedHits_1st_total++;
79 info->nClusters_1st_total = clusters_1st.size();
81 info->nRoads_1st_total = roads_1st.size();
82 for (
const auto &
r : roads_1st) {
83 if (std::popcount(
r.getHitLayers()) ==
static_cast<int>(
m_nLayers_1st) - 1)
84 info->nRoads_1st_7hits++;
85 if (std::popcount(
r.getHitLayers()) ==
static_cast<int>(
m_nLayers_1st))
86 info->nRoads_1st_8hits++;
89 std::unordered_map<int, size_t> pattID_nTracks_1st;
90 std::unordered_map<int, size_t> pattID_nTracks_1st_passChi2;
91 std::unordered_map<int, size_t> pattID_nTracks_1st_afterOR;
93 std::unordered_map<int, size_t> sectID_nTracks_1st;
94 std::unordered_map<int, size_t> sectID_nTracks_1st_passChi2;
95 std::unordered_map<int, size_t> sectID_nTracks_1st_afterOR;
97 info->nTracks_1st_total = tracks_1st.size();
100 info->nTracks_1st_passChi2++;
101 pattID_nTracks_1st_passChi2[t.getPatternID()]++;
102 sectID_nTracks_1st_passChi2[t.getFirstSectorID()]++;
104 if (t.passedOR() == 1) {
105 info->nTracks_1st_afterOR++;
106 pattID_nTracks_1st_afterOR[t.getPatternID()]++;
107 sectID_nTracks_1st_afterOR[t.getFirstSectorID()]++;
109 pattID_nTracks_1st[t.getPatternID()]++;
110 sectID_nTracks_1st[t.getFirstSectorID()]++;
112 for (
const auto& [ID, ntrack]: pattID_nTracks_1st) {
113 info->nTracks_1st_per_patt_total.push_back(ntrack);
115 for (
const auto& [ID, ntrack]: pattID_nTracks_1st_passChi2) {
116 info->nTracks_1st_per_patt_passChi2.push_back(ntrack);
118 for (
const auto& [ID, ntrack]: pattID_nTracks_1st_afterOR) {
119 info->nTracks_1st_per_patt_afterOR.push_back(ntrack);
122 info->nConstants_1st_fitter = sectID_nTracks_1st.size();
123 info->nConstants_1st_passChi2 = sectID_nTracks_1st_passChi2.size();
124 info->nConstants_1st_afterOR = sectID_nTracks_1st_afterOR.size();
127 info->nRoads_2nd_total = roads_2nd.size();
129 std::unordered_map<int, size_t> sectID_nTracks_2nd;
130 std::unordered_map<int, size_t> sectID_nTracks_2nd_passChi2;
131 std::unordered_map<int, size_t> sectID_nTracks_2nd_afterOR;
133 info->nTracks_2nd_total = tracks_2nd.size();
136 info->nTracks_2nd_passChi2++;
137 sectID_nTracks_2nd_passChi2[t.getSecondSectorID()]++;
139 if (t.passedOR() == 1) {
140 info->nTracks_2nd_afterOR++;
141 sectID_nTracks_2nd_afterOR[t.getSecondSectorID()]++;
143 sectID_nTracks_2nd[t.getSecondSectorID()]++;
146 info->nConstants_2nd_fitter = sectID_nTracks_2nd.size();
147 info->nConstants_2nd_passChi2 = sectID_nTracks_2nd_passChi2.size();
148 info->nConstants_2nd_afterOR = sectID_nTracks_2nd_afterOR.size();
152 if (
m_evtSel->passCuts(truth_t)) info->nTruthTracks++;
156 if (
m_evtSel->passCuts(offline_t)) info->nOfflineTracks++;
159 if (info->nOfflineTracks > 0) {
160 info->nTracks_1st_over_nOfflineTracks = (float)tracks_1st.size() / (float)info->nOfflineTracks;
161 if (
m_runSecondStage) info->nTracks_2nd_over_nOfflineTracks = (float)tracks_2nd.size() / (float)info->nOfflineTracks;
166 return StatusCode::SUCCESS;
176 ATH_CHECK(
addDataFlow(info.nMappedHits_1st_layer[i],
"nMappedHitsL" + std::to_string(i) +
"_1st"));
193 for (
size_t n : info.nTracks_1st_per_patt_total) {
196 for (
size_t n : info.nTracks_1st_per_patt_passChi2) {
199 for (
size_t n : info.nTracks_1st_per_patt_afterOR) {
223 if (info.nOfflineTracks > 0) {
224 ATH_CHECK(
addDataFlow(info.nTracks_1st_over_nOfflineTracks,
"nTracks_1st(Total)/nOfflineTracks",
false));
226 ATH_CHECK(
addDataFlow(info.nTracks_2nd_over_nOfflineTracks,
"nTracks_2nd(Total)/nOfflineTracks",
false));
230 return StatusCode::SUCCESS;