From 7d5e74577ca8cafedfffc89cf017b070c9df0f57 Mon Sep 17 00:00:00 2001 From: Andre Sailer <andre.philippe.sailer@cern.ch> Date: Thu, 7 Jan 2016 16:02:21 +0000 Subject: [PATCH] Add Skipping of events for HepEvtReader --- DDG4/plugins/Geant4EventReaderHepEvt.cpp | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/DDG4/plugins/Geant4EventReaderHepEvt.cpp b/DDG4/plugins/Geant4EventReaderHepEvt.cpp index f8fc99737..5da37563b 100644 --- a/DDG4/plugins/Geant4EventReaderHepEvt.cpp +++ b/DDG4/plugins/Geant4EventReaderHepEvt.cpp @@ -47,6 +47,8 @@ namespace DD4hep { virtual ~Geant4EventReaderHepEvt(); /// Read an event and fill a vector of MCParticles. virtual EventReaderStatus readParticles(int event_number, std::vector<Particle*>& particles); + virtual EventReaderStatus moveToEvent(int event_number); + virtual EventReaderStatus skipEvent() { return EVENT_READER_OK; } }; } /* End namespace Simulation */ } /* End namespace DD4hep */ @@ -118,6 +120,25 @@ Geant4EventReaderHepEvt::~Geant4EventReaderHepEvt() { m_input.close(); } +/// skipEvents if required +Geant4EventReader::EventReaderStatus +Geant4EventReaderHepEvt::moveToEvent(int event_number) { + if( m_currEvent == 0 && event_number != 0 ) { + printout(INFO,"EventReaderHepEvt::moveToEvent","Skipping the first %d events ", event_number ); + printout(INFO,"EventReaderHepEvt::moveToEvent","Event number before skipping: %d", m_currEvent ); + while ( m_currEvent < event_number ) { + std::vector<Particle*> particles; + EventReaderStatus sc = readParticles(m_currEvent,particles); + for_each(particles.begin(),particles.end(),deleteObject<Particle>); + if ( sc != EVENT_READER_OK ) return sc; + //Current event is increased in readParticles already! + // ++m_currEvent; + } + } + printout(INFO,"EventReaderHepEvt::moveToEvent","Event number after skipping: %d", m_currEvent ); + return EVENT_READER_OK; +} + /// Read an event and fill a vector of MCParticles. Geant4EventReader::EventReaderStatus Geant4EventReaderHepEvt::readParticles(int /* event_number */, vector<Particle*>& particles) { @@ -283,6 +304,7 @@ Geant4EventReaderHepEvt::readParticles(int /* event_number */, vector<Particle*> if ( !part.findParent(mcp) ) part.addParent(mcp); } } // End second loop over particles + ++m_currEvent; return EVENT_READER_OK; } -- GitLab