diff --git a/DDG4/lcio/LCIOEventReader.cpp b/DDG4/lcio/LCIOEventReader.cpp index 5d3c0e55ccb9b550bc5934fda00fab6459e9340f..3e1c5a9fd1a20b0a1521e4c68607832baee9d181 100644 --- a/DDG4/lcio/LCIOEventReader.cpp +++ b/DDG4/lcio/LCIOEventReader.cpp @@ -49,7 +49,7 @@ namespace { /// Initializing constructor LCIOEventReader::LCIOEventReader(const string& nam) - : Geant4EventReader(nam), m_numEvent(0) + : Geant4EventReader(nam) { } @@ -66,7 +66,6 @@ LCIOEventReader::readParticles(int event_number, vector<Particle*>& particles) vector<EVENT::MCParticle*> mcpcoll; EventReaderStatus ret = readParticleCollection(event_number,&primaries); - ++m_numEvent; if ( ret != EVENT_READER_OK ) return ret; int NHEP = primaries->getNumberOfElements(); diff --git a/DDG4/lcio/LCIOStdHepReader.cpp b/DDG4/lcio/LCIOStdHepReader.cpp index d23ed28538efb78211f25c7e8fa33e1d67119309..82e357a9dd81db0fa98f20ad4d6d56b43309744e 100644 --- a/DDG4/lcio/LCIOStdHepReader.cpp +++ b/DDG4/lcio/LCIOStdHepReader.cpp @@ -44,6 +44,9 @@ namespace DD4hep { virtual ~LCIOStdHepReader(); /// 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; } + }; } /* End namespace lcio */ } /* End namespace DD4hep */ @@ -73,9 +76,8 @@ using namespace DD4hep::Simulation; /// Initializing constructor LCIOStdHepReader::LCIOStdHepReader(const std::string& nam) - : LCIOEventReader(nam) + : LCIOEventReader(nam), m_reader(new UTIL::LCStdHepRdr(m_name.c_str())) { - m_reader = new UTIL::LCStdHepRdr(m_name.c_str()); } /// Default destructor @@ -83,10 +85,29 @@ LCIOStdHepReader::~LCIOStdHepReader() { DD4hep::deletePtr(m_reader); } + +/// skipEvents if required +Geant4EventReader::EventReaderStatus +LCIOStdHepReader::moveToEvent(int event_number) { + if( m_currEvent == 0 && event_number != 0 ) { + printout(INFO,"LCIOStdHepReader::moveToEvent","Skipping the first %d events ", event_number ); + printout(INFO,"LCIOStdHepReader::moveToEvent","Current Event Number: %d", m_currEvent ); + while ( m_currEvent < event_number ) { + EVENT::LCCollection* particles = m_reader->readEvent(); + if ( 0 == particles ) return EVENT_READER_ERROR; + ++m_currEvent; + } + } + return EVENT_READER_OK; +} + /// Read an event and fill a vector of MCParticles. Geant4EventReader::EventReaderStatus -LCIOStdHepReader::readParticleCollection(int /*event_number */, EVENT::LCCollection** particles) { +LCIOStdHepReader::readParticleCollection(int event_number, EVENT::LCCollection** particles) { + *particles = m_reader->readEvent(); + ++m_currEvent; + if ( 0 == *particles ) return EVENT_READER_ERROR; return EVENT_READER_OK; }