diff --git a/DDG4/lcio/LCIOEventReader.h b/DDG4/lcio/LCIOEventReader.h index 31dbccb8eebcba28d65abf25e83e1f5b4063bffc..25e54cf4ee611b80bd19cf5a8714eb63c748fdca 100644 --- a/DDG4/lcio/LCIOEventReader.h +++ b/DDG4/lcio/LCIOEventReader.h @@ -34,9 +34,6 @@ namespace DD4hep { * \ingroup DD4HEP_SIMULATION */ class LCIOEventReader : public Geant4EventReader { - protected: - /// Event counter - int m_numEvent; public: /// Initializing constructor LCIOEventReader(const std::string& nam); diff --git a/DDG4/lcio/LCIOFileReader.cpp b/DDG4/lcio/LCIOFileReader.cpp index bde3a339ca381e5e280b76d661be9034817fa840..0e8196b3e4ba2ee6bf7775ccc8dcd560440cf334 100644 --- a/DDG4/lcio/LCIOFileReader.cpp +++ b/DDG4/lcio/LCIOFileReader.cpp @@ -40,7 +40,6 @@ namespace DD4hep { protected: /// Reference to reader object IO::LCReader* m_reader; - unsigned m_nEvt ; public: /// Initializing constructor LCIOFileReader(const std::string& nam); @@ -49,6 +48,8 @@ namespace DD4hep { /// Read an event and fill a vector of MCParticles. virtual EventReaderStatus readParticleCollection(int event_number, EVENT::LCCollection** particles); + virtual EventReaderStatus moveToEvent(int event_number); + virtual EventReaderStatus skipEvent() { return EVENT_READER_OK; } }; } } @@ -65,7 +66,7 @@ DECLARE_GEANT4_EVENT_READER_NS(DD4hep::Simulation,LCIOFileReader) /// Initializing constructor DD4hep::Simulation::LCIOFileReader::LCIOFileReader(const std::string& nam) -: LCIOEventReader(nam), m_nEvt(0) +: LCIOEventReader(nam) { m_reader = ::lcio::LCFactory::getInstance()->createLCReader(LCReader::directAccess); printout(INFO,"LCIOFileReader","Created file reader. Try to open input %s",nam.c_str()); @@ -78,19 +79,26 @@ DD4hep::Simulation::LCIOFileReader::~LCIOFileReader() { DD4hep::deletePtr(m_reader); } -/// Read an event and fill a vector of MCParticles. -Geant4EventReader::EventReaderStatus -DD4hep::Simulation::LCIOFileReader::readParticleCollection(int event_number, EVENT::LCCollection** particles) { +/// moveToSpecifiedEvent, a.k.a. skipNEvents +Geant4EventReader::EventReaderStatus +DD4hep::Simulation::LCIOFileReader::moveToEvent(int event_number) { // ::lcio::LCEvent* evt = m_reader->readEvent(/*runNumber*/ 0, event_number); - // fg: direct access does not work if run number is different from 0 and/or event numbers are not stored consequutively - if( m_nEvt == 0 && event_number != 0 ) { + // fg: direct access does not work if run number is different from 0 and/or event numbers are not stored consecutively + if( m_currEvent == 0 && event_number != 0 ) { m_reader->skipNEvents( event_number ) ; printout(INFO,"LCIOFileReader","Skipping the first %d events ", event_number ); + m_currEvent = event_number; } - + return EVENT_READER_OK; +} + +/// Read an event and fill a vector of MCParticles. +Geant4EventReader::EventReaderStatus +DD4hep::Simulation::LCIOFileReader::readParticleCollection(int event_number, EVENT::LCCollection** particles) { + ::lcio::LCEvent* evt = m_reader->readNextEvent(); // simply read the events sequentially - ++m_nEvt ; + ++m_currEvent ; if ( evt ) { *particles = evt->getCollection(LCIO::MCPARTICLE);