From e9be2cf511d83755c05ba0e8e3ae08d532ee748e Mon Sep 17 00:00:00 2001
From: lintao <lintao@ihep.ac.cn>
Date: Mon, 4 Nov 2024 11:19:10 +0800
Subject: [PATCH] HepMCRdr: add StartIndex.

---
 Generator/src/HepMCRdr.cpp | 23 +++++++++++++++++++----
 Generator/src/HepMCRdr.h   |  3 +++
 2 files changed, 22 insertions(+), 4 deletions(-)

diff --git a/Generator/src/HepMCRdr.cpp b/Generator/src/HepMCRdr.cpp
index 0ba5577a..5e5c9e5d 100644
--- a/Generator/src/HepMCRdr.cpp
+++ b/Generator/src/HepMCRdr.cpp
@@ -25,14 +25,14 @@ using namespace edm4hep;
 DECLARE_COMPONENT(HepMCRdr)
 
 HepMCRdr::~HepMCRdr(){
-delete ascii_in;
+    delete ascii_in;
 }
 
 bool HepMCRdr::mutate(MyHepMC::GenEvent& event){
 
+    ++m_processed_event;
     HepMC::GenEvent* evt = ascii_in->read_next_event();
     if(!evt) return false;
-    m_processed_event ++;
     int n_mc = evt->particles_size();
     //std::cout<<"Read event :"<< m_processed_event <<", mc size :"<< n_mc <<std::endl;
     std::map<int, int> pmcid_lmcid;
@@ -93,13 +93,13 @@ bool HepMCRdr::mutate(MyHepMC::GenEvent& event){
 }
 
 bool HepMCRdr::isEnd(){
-return false;
+    return false;
 }
 
 bool HepMCRdr::configure_gentool(){
     ascii_in = new HepMC::IO_GenEvent(m_filename.value().c_str(),std::ios::in);
 
-    m_processed_event=0;
+    m_processed_event=-1;
     return true;
 }
 
@@ -115,6 +115,17 @@ HepMCRdr::initialize() {
         return StatusCode::FAILURE;
     }
 
+    // skip the first n events if startIndex is not 0.
+    if (startIndex() > 0) {
+        for (int i=0; i<startIndex(); ++i) {
+            ++m_processed_event;
+            HepMC::GenEvent* evt = ascii_in->read_next_event();
+            if(!evt) break;
+            delete evt;
+        }
+        info() << "Skip the first " << startIndex() << " events." << endmsg;
+    }
+
     return sc;
 }
 
@@ -127,3 +138,7 @@ HepMCRdr::finalize() {
     }
     return sc;
 }
+
+int HepMCRdr::startIndex(){
+    return m_startIndex.value();
+}
\ No newline at end of file
diff --git a/Generator/src/HepMCRdr.h b/Generator/src/HepMCRdr.h
index e6ff3969..43a9d05b 100644
--- a/Generator/src/HepMCRdr.h
+++ b/Generator/src/HepMCRdr.h
@@ -23,6 +23,8 @@ class HepMCRdr: public extends<AlgTool, GenReader> {
         bool mutate(MyHepMC::GenEvent& event);    
         bool finish();
         bool isEnd();
+
+        int startIndex() override;
     private:
         HepMC::IO_GenEvent *ascii_in{nullptr};
         long m_total_event{-1};
@@ -30,6 +32,7 @@ class HepMCRdr: public extends<AlgTool, GenReader> {
 
         // input file name
         Gaudi::Property<std::string> m_filename{this, "Input"};
+        Gaudi::Property<int> m_startIndex{this, "StartIndex", 0, "Default start index"};
 
 };
 
-- 
GitLab