11 const std::string&
name,
const IInterface* ifc)
16 return StatusCode::SUCCESS;
22 for (
const ActsTrk::TrackContainer::ConstTrackProxy
tp : tracksContainer)
24 std::deque<std::unique_ptr<FpgaActsTrack::Measurement>> t_TrackMeasurements;
26 tracksContainer.trackStateContainer().visitBackwards(
tp.tipIndex(), [&t_TrackMeasurements](
const typename ActsTrk::TrackStateBackend::ConstTrackStateProxy& state) ->
void
28 if (state.hasUncalibratedSourceLink()) {
30 std::reference_wrapper<const xAOD::UncalibratedMeasurement> measurementRef =
31 std::cref(ActsTrk::getUncalibratedMeasurement(state.getUncalibratedSourceLink().get<ActsTrk::ATLASUncalibSourceLink>()));
32 const xAOD::UncalibratedMeasurement& measurement = measurementRef.get();
33 assert(static_cast<unsigned int>(measurement.type() < xAOD::UncalibMeasType::nTypes));
35 if (measurement.type() == xAOD::UncalibMeasType::PixelClusterType) {
36 const xAOD::PixelCluster* pixelCluster = static_cast<const xAOD::PixelCluster*>(&measurement);
37 t_TrackMeasurements.emplace_front(std::make_unique<FpgaActsTrack::Measurement>(FpgaActsTrack::Measurement{
38 pixelCluster->identifier(),
40 { pixelCluster->globalPosition().x(),
41 pixelCluster->globalPosition().y(),
42 pixelCluster->globalPosition().z() },
43 state.typeFlags().test(Acts::TrackStateFlag::MeasurementFlag),
44 state.typeFlags().test(Acts::TrackStateFlag::OutlierFlag),
45 state.typeFlags().test(Acts::TrackStateFlag::HoleFlag),
46 state.typeFlags().test(Acts::TrackStateFlag::MaterialFlag),
47 state.typeFlags().test(Acts::TrackStateFlag::SharedHitFlag) }));
49 else if (measurement.type() == xAOD::UncalibMeasType::StripClusterType) {
50 const xAOD::StripCluster* stripCluster = static_cast<const xAOD::StripCluster*>(&measurement);
51 t_TrackMeasurements.emplace_front(std::make_unique<FpgaActsTrack::Measurement>(FpgaActsTrack::Measurement{
52 stripCluster->identifier(),
54 { stripCluster->globalPosition().x(),
55 stripCluster->globalPosition().y(),
56 stripCluster->globalPosition().z()},
57 state.typeFlags().test(Acts::TrackStateFlag::MeasurementFlag),
58 state.typeFlags().test(Acts::TrackStateFlag::OutlierFlag),
59 state.typeFlags().test(Acts::TrackStateFlag::HoleFlag),
60 state.typeFlags().test(Acts::TrackStateFlag::MaterialFlag),
61 state.typeFlags().test(Acts::TrackStateFlag::SharedHitFlag) }));
65 catch (const std::bad_any_cast&) {
69 t_actsTracks.emplace_back(std::make_unique<FpgaActsTrack>(
FpgaActsTrack{
parameters, std::move(t_TrackMeasurements) }));
79 std::ostringstream printoutTable;
80 unsigned int t_trackCoutner = 0, t_measCounter = 0;
81 printoutTable <<
"\n|----------------------------------------------------------------------------------------------------|\n";
82 for (
const auto&
track : tracks)
85 printoutTable <<
"| # | QopT | Theta | Phi | d0 | z0 |\n"
86 <<
"|----------------------------------------------------------------------------------------------------|\n"
87 <<
std::format(
"| {:>5} | {:>16.10f} | {:>15.10f} | {:>15.10f} | {:>16.10f} | {:>16.10f} |\n",
89 track->parameters[Acts::eBoundQOverP] / 1000.,
90 track->parameters[Acts::eBoundTheta],
91 track->parameters[Acts::eBoundPhi],
92 track->parameters[Acts::eBoundLoc0],
93 track->parameters[Acts::eBoundLoc1]);
95 printoutTable <<
"| |____________________________________________________________________________________________|\n"
96 <<
"| | ## | type | x | y | z | outlier | meas | hole | Identifier |\n"
97 <<
"| |--------------------------------------------------------------------------------------------|\n";
98 for (
const auto& measurement :
track->trackMeasurements)
101 printoutTable <<
std::format(
"| | {:>2} | {} | {:>8.3f} | {:>8.3f} | {:>8.3f} | {:>7} | {:>5} | {:6>5} | {:>18} |\n",
103 measurement->type.c_str(),
104 measurement->coordinates.x,
105 measurement->coordinates.y,
106 measurement->coordinates.z,
107 measurement->outlierFlag,
108 measurement->measurementFlag,
109 measurement->holeFlag,
110 measurement->identifier);
112 printoutTable <<
"|----------------------------------------------------------------------------------------------------|\n";
115 return printoutTable.str();
120 const std::map<std::string, std::map<
uint32_t, std::vector<uint32_t>> >& tracksForAllEvents)
const
122 std::ostringstream printoutTable;
123 printoutTable <<
"Printing out ACTS statistics";
124 printoutTable <<
"\n|---------------------------------------------------------------------------------------|"
125 <<
"\n| Collection Name | Outliers (avg) | Measurements (avg) | Holes (avg) |"
126 <<
"\n|---------------------------------------------------------------------------------------|";
127 for (
const auto& collection : tracksForAllEvents)
129 printoutTable <<
std::format(
"\n| {:>33} | {:>14.2f} | {:>18.2f} | {:>11.2f} |",
131 collection.second.at(Acts::TrackStateFlag::OutlierFlag).size() ?
132 std::accumulate(collection.second.at(Acts::TrackStateFlag::OutlierFlag).begin(),
133 collection.second.at(Acts::TrackStateFlag::OutlierFlag).end(), 0.0)
134 / collection.second.at(Acts::TrackStateFlag::OutlierFlag).size() : 0,
136 collection.second.at(Acts::TrackStateFlag::MeasurementFlag).size() ?
std::accumulate(collection.second.at(Acts::TrackStateFlag::MeasurementFlag).begin(), collection.second.at(Acts::TrackStateFlag::MeasurementFlag).end(), 0.0) / collection.second.at(Acts::TrackStateFlag::MeasurementFlag).size() : 0,
138 collection.second.at(Acts::TrackStateFlag::HoleFlag).size() ?
std::accumulate(collection.second.at(Acts::TrackStateFlag::HoleFlag).begin(), collection.second.at(Acts::TrackStateFlag::HoleFlag).end(), 0.0) / collection.second.at(Acts::TrackStateFlag::HoleFlag).size() : 0);
140 printoutTable <<
"\n|---------------------------------------------------------------------------------------|";
141 return printoutTable.str();