From a3225a7a462380f586acb975bb96c02c75203b28 Mon Sep 17 00:00:00 2001 From: Frank Gaede <frank.gaede@desy.de> Date: Fri, 24 Feb 2017 10:33:37 +0100 Subject: [PATCH] add parameter ParticlesPerEvent to GuineaPig reader set in steering file with: SIM.readerParameters = {"ParticlesPerEvent":"3"} --- plugins/Geant4EventReaderGuineaPig.cpp | 44 ++++++++++++++++++-------- 1 file changed, 31 insertions(+), 13 deletions(-) diff --git a/plugins/Geant4EventReaderGuineaPig.cpp b/plugins/Geant4EventReaderGuineaPig.cpp index e93c425db..e2d92848a 100644 --- a/plugins/Geant4EventReaderGuineaPig.cpp +++ b/plugins/Geant4EventReaderGuineaPig.cpp @@ -48,9 +48,10 @@ namespace DD4hep { /// Read an event and fill a vector of MCParticles. virtual EventReaderStatus readParticles(int event_number, Vertices& vertices, - std::vector<Particle*>& particles); - virtual EventReaderStatus moveToEvent(int event_number); - virtual EventReaderStatus skipEvent() { return EVENT_READER_OK; } + std::vector<Particle*>& particles) override ; + virtual EventReaderStatus moveToEvent(int event_number) override ; + virtual EventReaderStatus skipEvent() override { return EVENT_READER_OK; } + virtual EventReaderStatus setParameters( std::map< std::string, std::string > & parameters ) override ; }; } /* End namespace Simulation */ } /* End namespace DD4hep */ @@ -91,19 +92,32 @@ Geant4EventReaderGuineaPig::~Geant4EventReaderGuineaPig() { m_input.close(); } + Geant4EventReader::EventReaderStatus -Geant4EventReaderGuineaPig::moveToEvent(int event_number) { +Geant4EventReaderGuineaPig::setParameters( std::map< std::string, std::string > & parameters ) { + + _getParameterValue( parameters, "ParticlesPerEvent", m_part_num, -1); - // if( m_currEvent == 0 && event_number > 0 ){ - if( m_part_num < 0 ){ + if( m_part_num < 0 ) + printout(INFO,"EventReaderGuineaPig::setParameters"," --- Will read all particles in pairs file into one event " ); + else + printout(INFO,"EventReaderGuineaPig::setParameters"," --- Will read %d particles per event from pairs file ", m_part_num ); + + return EVENT_READER_OK; +} - m_part_num = event_number ; +Geant4EventReader::EventReaderStatus +Geant4EventReaderGuineaPig::moveToEvent(int event_number) { + + printout(DEBUG,"EventReaderGuineaPig::moveToEvent"," event_number: %d , m_currEvent %d", + event_number,m_currEvent ) ; - printout(INFO,"EventReaderGuineaPig::moveToEvent"," --- Will read %d particles per event from pairs file ", m_part_num ); - printout(INFO,"EventReaderGuineaPig::moveToEvent"," *** Due to a workaround event numbers will start from %d for now !!", m_part_num ); + if( m_currEvent == 0 && event_number > 0 ){ + printout(INFO,"EventReaderGuineaPig::moveToEvent"," --- Cannot skip to event %d in GuineaPig files - ignored ! ", event_number ); } - + // else: nothing to do ... + return EVENT_READER_OK; } @@ -115,7 +129,7 @@ Geant4EventReaderGuineaPig::readParticles(int /* event_number */, // if no number of particles per event set, we will read the whole file - if ( m_part_num == 0 ) + if ( m_part_num < 0 ) m_part_num = std::numeric_limits<int>::max() ; @@ -143,10 +157,14 @@ Geant4EventReaderGuineaPig::readParticles(int /* event_number */, if( m_input.eof() ) { - if( counter==0 ) + if( counter==0 ) { return EVENT_READER_IO_ERROR ; // reading first particle of event failed - else + + } else{ + + ++m_currEvent; return EVENT_READER_OK ; // simply EOF + } } // -- GitLab