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