From 971dca83a095ff812daaffe11359e29f0d0b8aab Mon Sep 17 00:00:00 2001
From: Andre Sailer <andre.philippe.sailer@cern.ch>
Date: Thu, 7 Jan 2016 16:01:50 +0000
Subject: [PATCH] Rearrange SkipEvent in LCIOFileReader

use m_currEvent everywhere
move skipEvent logic to moveToEvent
---
 DDG4/lcio/LCIOEventReader.h  |  3 ---
 DDG4/lcio/LCIOFileReader.cpp | 26 +++++++++++++++++---------
 2 files changed, 17 insertions(+), 12 deletions(-)

diff --git a/DDG4/lcio/LCIOEventReader.h b/DDG4/lcio/LCIOEventReader.h
index 31dbccb8e..25e54cf4e 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 bde3a339c..0e8196b3e 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);
-- 
GitLab