@@ -4,55 +4,41 @@ namespace simcore {
44
55void ReSimulator::configure (framework::config::Parameters& parameters) {
66 SimulatorBase::configure (parameters);
7- resimulate_all_events =
7+ resimulate_all_events_ =
88 parameters.getParameter <bool >(" resimulate_all_events" );
9- if (!resimulate_all_events) {
10- events_to_resimulate_ =
11- parameters.getParameter <std::vector<int >>(" events_to_resimulate" , {});
12- runs_to_resimulate_ =
13- parameters.getParameter <std::vector<int >>(" runs_to_resimulate" , {});
14- if (events_to_resimulate_.size () == 0 ) {
9+ if (!resimulate_all_events_) {
10+ care_about_run_ = parameters.getParameter <bool >(" care_about_run" );
11+ auto configured_events{parameters.getParameter <std::vector<framework::config::Parameters>>(" events_to_resimulate" , {})};
12+ if (configured_events.size () == 0 ) {
1513 EXCEPTION_RAISE (
1614 " ReSimNoEvents" ,
1715 " ReSim was configured with resimulate_all_events marked false but "
1816 " no event numbers were requested.\n\n Did you forget to configure "
1917 " the events_to_resimulate parameter?\n " );
2018 }
21- if (runs_to_resimulate_. size () > 1 and runs_to_resimulate_. size () != events_to_resimulate_. size () ) {
22- EXCEPTION_RAISE (
23- " ReSimBadConf " ,
24- " ReSim needs the runs list to match the length of the events list if there is more than "
25- " one run that needs to be resimulated. " );
19+ 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+ );
2624 }
2725 }
2826}
27+
2928void ReSimulator::produce (framework::Event& event) {
3029 /* numEventsBegan_++; */
3130 auto & eventHeader{event.getEventHeader ()};
3231 const auto eventNumber{eventHeader.getEventNumber ()};
33- if (!resimulate_all_events) {
34- auto found_event = std::find (std::begin (events_to_resimulate_),
35- std::end (events_to_resimulate_), eventNumber);
36- bool should_resim{found_event != std::end (events_to_resimulate_)};
37- if (should_resim and runs_to_resimulate_.size () > 0 ) {
38- // non-empty list of runs and event number in event list,
39- // we need to check run number is also requested
40- int run{event.getEventHeader ().getRun ()};
41- if (runs_to_resimulate_.size () == 1 ) {
42- // single run applied to all events requested
43- should_resim = runs_to_resimulate_.at (0 ) == run;
44- } else {
45- // more than one run, look for run corresponding to index
46- // of event number found
47- // developer note: this code has a high-liklihood of throwing
48- // the std::out_of_range error if the runs_to_resimulate_ vector
49- // isn't pre-checked to be the same size as events_to_resimulate_
50- should_resim = runs_to_resimulate_.at (
51- std::distance (events_to_resimulate_.begin (), found_event)
52- ) == run;
53- }
54- }
55- if (not should_resim) {
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_)) {
5642 if (verbosity_ > 1 ) {
5743 std::cout << " Skipping event: " << eventNumber
5844 << " since it wasn't part of the requested events..."
@@ -83,7 +69,7 @@ void ReSimulator::produce(framework::Event& event) {
8369 std::to_string (eventNumber));
8470 }
8571
86- eventHeader.setEventNumber (++events_resimulated );
72+ eventHeader.setEventNumber (++events_resimulated_ );
8773 updateEventHeader (eventHeader);
8874 saveTracks (event);
8975
0 commit comments