12 #include <type_traits>
20 template <
typename T_EnumClass >
26 #ifndef __cpp_lib_erase_if
28 template <
class T_container,
class T_Func>
29 inline std::size_t
erase_if(T_container &container, T_Func pred) {
30 std::size_t orig_size = container->size();
32 iter != container.end();
41 return orig_size - container->size();
55 ISvcLocator *pSvcLocator)
70 return StatusCode::SUCCESS;
73 template <
bool IsDebug>
74 template <
class T_OutStream>
77 out <<
"Measurements per truth particle :" << m_measPerTruthParticle << std::endl
78 << m_measPerTruthParticle.histogramToString();
81 template <
bool IsDebug>
84 std::lock_guard<std::mutex>
lock(m_mutex);
85 m_measPerTruthParticle.add(n_measurements);
91 ATH_MSG_INFO(
"Number of truth particles with hits : " << m_nTruthParticlesWithHits);
100 return StatusCode::SUCCESS;
105 std::unique_ptr<TruthParticleHitCounts>
106 truth_particle_hit_counts( std::make_unique<TruthParticleHitCounts>() );
123 measurement_to_truth_association_maps{};
130 return assoc ? assoc->size() : 0
ul;
138 unsigned int measurement_type_i=0;
139 --measurement_type_i;
141 ++measurement_type_i;
142 if (!associated_truth_particles)
continue;
145 assert (truth_particle);
147 if (mother_particle) {
148 assert(measurement_type_i < (*truth_particle_hit_counts)[mother_particle].
size());
149 ++(*truth_particle_hit_counts)[mother_particle][measurement_type_i];
155 unsigned int truth_particles_without_enough_measurements
156 = std::erase_if( *truth_particle_hit_counts,
157 [
this, n_hits_min](
const std::pair<const xAOD::TruthParticle * const,HitCounterArray> &elm) {
158 unsigned int n_measurements=
std::accumulate(elm.second.begin(), elm.second.end(),0
u);
160 return n_measurements<n_hits_min;
163 m_nTruthParticlesWithHits += truth_particle_hit_counts->size();
165 ATH_MSG_DEBUG(
"Truth particles with hits:" << truth_particle_hit_counts->size()
166 <<
", without enough hits: " << truth_particles_without_enough_measurements);
169 if (truth_particle_hit_counts_out_handle.
record( std::move(truth_particle_hit_counts)).isFailure()) {
171 return StatusCode::FAILURE;
174 return StatusCode::SUCCESS;