1#include "DQM/ReSimVerifier.h"
5 sim_pass_name_ = parameters.
get<std::string>(
"sim_pass_name");
6 re_sim_pass_name_ = parameters.
get<std::string>(
"resim_pass_name");
7 stop_on_error_ = parameters.
get<
bool>(
"stop_on_error");
8 collections_ = parameters.
get<std::vector<std::string>>(
"collections");
10bool ReSimVerifier::verifySimCalorimeterHits(
11 const std::vector<ldmx::SimCalorimeterHit>& simHits,
12 const std::vector<ldmx::SimCalorimeterHit>& reSimHits) {
13 for (
auto i{0}; i < simHits.size(); ++i) {
15 auto rehit{reSimHits[i]};
17 if (hit.getEdep() != rehit.getEdep()) {
20 if (hit.getID() != rehit.getID()) {
23 if (hit.getTime() != rehit.getTime()) {
26 if (hit.getNumberOfContribs() != rehit.getNumberOfContribs()) {
29 auto pos{hit.getPosition()};
30 auto repos{rehit.getPosition()};
31 if (pos[0] != repos[0] || pos[1] != repos[1] || pos[2] != repos[2]) {
39 const auto& sim_particles{
41 const auto& re_sim_particles{
43 for (
auto [
id, simParticle] : sim_particles) {
44 if (!re_sim_particles.count(
id)) {
47 auto re_sim_particle{re_sim_particles.at(
id)};
48 if (simParticle.getEnergy() != re_sim_particle.getEnergy()) {
51 if (simParticle.getPdgID() != re_sim_particle.getPdgID()) {
54 if (simParticle.getTime() != re_sim_particle.getTime()) {
64 auto event_number{
event.getEventNumber()};
65 for (
auto collection : collections_) {
67 collection, sim_pass_name_);
69 collection, re_sim_pass_name_);
70 if (re_sim_hits.size() == 0) {
77 if (!verifySimCalorimeterHits(sim_hits, re_sim_hits)) {
79 ss <<
"Event " << event_number <<
" has different simhits for "
80 << collection << std::endl;
84 ldmx_log(info) <<
"Skipping event " << event_number
85 <<
"since it was not resimulated";
87 if (!verifySimParticles(event)) {
89 ss <<
"Event " << event_number
90 <<
" has different SimParticles between the two passes" << std::endl;
94 EXCEPTION_RAISE(
"ReSimVerify", ss.str());
96 ldmx_log(info) << ss.str();
#define DECLARE_ANALYZER(CLASS)
Macro which allows the framework to construct an analyzer given its name during configuration.
void analyze(const framework::Event &event) override
Process the event and make histograms or summaries.
void configure(framework::config::Parameters ¶meters) override
Callback for the EventProcessor to configure itself from the given set of parameters.
Implements an event buffer system for storing event data.
Class encapsulating parameters for configuring a processor.
const T & get(const std::string &name) const
Retrieve the parameter of the given name.
Stores simulated calorimeter hit information.
Class representing a simulated particle.