Skip to content
This repository was archived by the owner on May 6, 2024. It is now read-only.

Commit 5398819

Browse files
put check on if an event should be skipped into its own function
this is helpful isolation and makes it easier to document how an event ends up being re-simulated
1 parent 447d577 commit 5398819

2 files changed

Lines changed: 43 additions & 23 deletions

File tree

include/SimCore/ReSimulator.h

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,13 @@ class ReSimulator : public SimulatorBase {
2626
void produce(framework::Event& event) override;
2727

2828
private:
29+
/**
30+
* Check if an event should be skipped during resimulation
31+
*
32+
* @param[in] event handle to the current event being processed
33+
*/
34+
bool skip(framework::Event& event) const;
35+
2936
/**
3037
* List of events in the input files that should be resimulated if
3138
* `resimulate_all_events` is false.
@@ -35,7 +42,7 @@ class ReSimulator : public SimulatorBase {
3542
* @note: If an event in `events_to_resimulate_` is not part of the
3643
* input file, it will be ignored.
3744
*/
38-
std::vector<std::pair<int,int>> events_to_resimulate_;
45+
std::vector<std::pair<int, int>> events_to_resimulate_;
3946

4047
/**
4148
* Whether to resimulate all events in the input files

src/SimCore/ReSimulator.cxx

Lines changed: 35 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,9 @@ void ReSimulator::configure(framework::config::Parameters& parameters) {
88
parameters.getParameter<bool>("resimulate_all_events");
99
if (!resimulate_all_events_) {
1010
care_about_run_ = parameters.getParameter<bool>("care_about_run");
11-
auto configured_events{parameters.getParameter<std::vector<framework::config::Parameters>>("events_to_resimulate", {})};
11+
auto configured_events{
12+
parameters.getParameter<std::vector<framework::config::Parameters>>(
13+
"events_to_resimulate", {})};
1214
if (configured_events.size() == 0) {
1315
EXCEPTION_RAISE(
1416
"ReSimNoEvents",
@@ -17,10 +19,8 @@ void ReSimulator::configure(framework::config::Parameters& parameters) {
1719
"the events_to_resimulate parameter?\n");
1820
}
1921
for (const auto& run_event : configured_events) {
20-
events_to_resimulate_.emplace_back(
21-
run_event.getParameter<int>("run"),
22-
run_event.getParameter<int>("event")
23-
);
22+
events_to_resimulate_.emplace_back(run_event.getParameter<int>("run"),
23+
run_event.getParameter<int>("event"));
2424
}
2525
}
2626
}
@@ -29,24 +29,14 @@ void ReSimulator::produce(framework::Event& event) {
2929
/* numEventsBegan_++; */
3030
auto& eventHeader{event.getEventHeader()};
3131
const auto eventNumber{eventHeader.getEventNumber()};
32-
if (!resimulate_all_events_) {
33-
auto found_event_to_resim = std::find_if(
34-
std::begin(events_to_resimulate_), std::end(events_to_resimulate_),
35-
[&](const std::pair<int,int>& run_event) -> bool {
36-
bool runs_match = true;
37-
if (care_about_run_) runs_match = (event.getEventHeader().getRun() == run_event.first);
38-
return eventNumber == run_event.second and runs_match;
39-
}
40-
);
41-
if (found_event_to_resim == std::end(events_to_resimulate_)) {
42-
if (verbosity_ > 1) {
43-
std::cout << "Skipping event: " << eventNumber
44-
<< " since it wasn't part of the requested events..."
45-
<< std::endl;
46-
}
47-
this->abortEvent(); // get out of processors loop
48-
return;
32+
if (skip(event)) {
33+
if (verbosity_ > 1) {
34+
std::cout << "Skipping event: " << eventNumber
35+
<< " since it wasn't part of the requested events..."
36+
<< std::endl;
4937
}
38+
this->abortEvent(); // get out of processors loop
39+
return;
5040
}
5141
if (verbosity_ > 0) {
5242
std::cout << "Resimulating " << eventNumber << std::endl;
@@ -78,5 +68,28 @@ void ReSimulator::produce(framework::Event& event) {
7868
runManager_->TerminateOneEvent();
7969
}
8070

71+
bool ReSimulator::skip(framework::Event& event) const {
72+
/**
73+
* If we are configured to simply resimulate all events, this
74+
* function always returns false.
75+
*/
76+
if (resimulate_all_events_) return false;
77+
/**
78+
* Otherwise, we check the event number
79+
* (and also its run number if we care_about_run_)
80+
* against the list of run/event pairs that we are
81+
* interested in re-simulating.
82+
*/
83+
auto found_event_to_resim = std::find_if(
84+
std::begin(events_to_resimulate_), std::end(events_to_resimulate_),
85+
[&](const std::pair<int, int>& run_event) -> bool {
86+
bool runs_match = true;
87+
if (care_about_run_)
88+
runs_match = (event.getEventHeader().getRun() == run_event.first);
89+
return event.getEventNumber() == run_event.second and runs_match;
90+
});
91+
return (found_event_to_resim == std::end(events_to_resimulate_));
92+
}
93+
8194
} // namespace simcore
8295
DECLARE_PRODUCER_NS(simcore, ReSimulator)

0 commit comments

Comments
 (0)