44 std::vector<FPGATrackSimCluster>
const & clusters_1st,
45 const std::vector<std::shared_ptr<const FPGATrackSimRoad>> & roads_1st, std::vector<FPGATrackSimTrack>
const & tracks_1st,
46 const std::vector<std::shared_ptr<const FPGATrackSimRoad>> & roads_2nd, std::vector<FPGATrackSimTrack>
const & tracks_2nd)
49 for (
int i=0; i<header_1st->
towers().at(0).
nHits(); i++) {
50 info->nMappedHits_1st_total++;
54 info->nClusters_1st_total = clusters_1st.size();
56 info->nRoads_1st_total = roads_1st.size();
57 for (
const auto &
r : roads_1st) {
58 if (std::popcount(
r->getHitLayers()) ==
static_cast<int>(
m_nLayers_1st) - 1)
59 info->nRoads_1st_7hits++;
60 if (std::popcount(
r->getHitLayers()) ==
static_cast<int>(
m_nLayers_1st))
61 info->nRoads_1st_8hits++;
64 std::unordered_map<int, size_t> pattID_nTracks_1st;
65 std::unordered_map<int, size_t> pattID_nTracks_1st_passChi2;
66 std::unordered_map<int, size_t> pattID_nTracks_1st_afterOR;
68 std::unordered_map<int, size_t> sectID_nTracks_1st;
69 std::unordered_map<int, size_t> sectID_nTracks_1st_passChi2;
70 std::unordered_map<int, size_t> sectID_nTracks_1st_afterOR;
72 info->nTracks_1st_total = tracks_1st.size();
75 info->nTracks_1st_passChi2++;
76 pattID_nTracks_1st_passChi2[t.getPatternID()]++;
77 sectID_nTracks_1st_passChi2[t.getFirstSectorID()]++;
79 if (t.passedOR() == 1) {
80 info->nTracks_1st_afterOR++;
81 pattID_nTracks_1st_afterOR[t.getPatternID()]++;
82 sectID_nTracks_1st_afterOR[t.getFirstSectorID()]++;
84 pattID_nTracks_1st[t.getPatternID()]++;
85 sectID_nTracks_1st[t.getFirstSectorID()]++;
87 for (
const auto& [
ID, ntrack]: pattID_nTracks_1st) {
88 info->nTracks_1st_per_patt_total.push_back(ntrack);
90 for (
const auto& [
ID, ntrack]: pattID_nTracks_1st_passChi2) {
91 info->nTracks_1st_per_patt_passChi2.push_back(ntrack);
93 for (
const auto& [
ID, ntrack]: pattID_nTracks_1st_afterOR) {
94 info->nTracks_1st_per_patt_afterOR.push_back(ntrack);
97 info->nConstants_1st_fitter = sectID_nTracks_1st.size();
98 info->nConstants_1st_passChi2 = sectID_nTracks_1st_passChi2.size();
99 info->nConstants_1st_afterOR = sectID_nTracks_1st_afterOR.size();
102 info->nRoads_2nd_total = roads_2nd.size();
104 std::unordered_map<int, size_t> sectID_nTracks_2nd;
105 std::unordered_map<int, size_t> sectID_nTracks_2nd_passChi2;
106 std::unordered_map<int, size_t> sectID_nTracks_2nd_afterOR;
108 info->nTracks_2nd_total = tracks_2nd.size();
111 info->nTracks_2nd_passChi2++;
112 sectID_nTracks_2nd_passChi2[t.getSecondSectorID()]++;
114 if (t.passedOR() == 1) {
115 info->nTracks_2nd_afterOR++;
116 sectID_nTracks_2nd_afterOR[t.getSecondSectorID()]++;
118 sectID_nTracks_2nd[t.getSecondSectorID()]++;
121 info->nConstants_2nd_fitter = sectID_nTracks_2nd.size();
122 info->nConstants_2nd_passChi2 = sectID_nTracks_2nd_passChi2.size();
123 info->nConstants_2nd_afterOR = sectID_nTracks_2nd_afterOR.size();
127 if (
m_evtSel->passCuts(truth_t)) info->nTruthTracks++;
131 if (
m_evtSel->passCuts(offline_t)) info->nOfflineTracks++;
134 if (info->nOfflineTracks > 0) {
135 info->nTracks_1st_over_nOfflineTracks = (float)tracks_1st.size() / (float)info->nOfflineTracks;
136 if (
m_runSecondStage) info->nTracks_2nd_over_nOfflineTracks = (float)tracks_2nd.size() / (float)info->nOfflineTracks;
141 return StatusCode::SUCCESS;
151 ATH_CHECK(
addDataFlow(info.nMappedHits_1st_layer[i],
"nMappedHitsL" + std::to_string(i) +
"_1st"));
168 for (
size_t n : info.nTracks_1st_per_patt_total) {
171 for (
size_t n : info.nTracks_1st_per_patt_passChi2) {
174 for (
size_t n : info.nTracks_1st_per_patt_afterOR) {
198 if (info.nOfflineTracks > 0) {
199 ATH_CHECK(
addDataFlow(info.nTracks_1st_over_nOfflineTracks,
"nTracks_1st(Total)/nOfflineTracks",
false));
201 ATH_CHECK(
addDataFlow(info.nTracks_2nd_over_nOfflineTracks,
"nTracks_2nd(Total)/nOfflineTracks",
false));
205 return StatusCode::SUCCESS;