From 5fb648408ead3857202af14fd14d0802cd8e37b6 Mon Sep 17 00:00:00 2001
From: Andrii Verbytskyi <andrii.verbytskyi@cern.ch>
Date: Tue, 1 Dec 2020 18:48:43 +0000
Subject: [PATCH] More routines migrated to HEPMC3

---
 .../G4AtlasTests/src/CalibHitValidate.cxx     |  4 +++
 .../src/SimpleMergeMcEventCollTool.cxx        |  8 ++++--
 .../src/McEventCollectionTestTool.cxx         | 26 +++++++++++++++++++
 .../src/DetailedTrackTruthBuilder.cxx         |  2 +-
 .../TrkValTools/src/GenParticleJetFinder.cxx  |  4 +--
 5 files changed, 39 insertions(+), 5 deletions(-)

diff --git a/Simulation/G4Atlas/G4AtlasTests/src/CalibHitValidate.cxx b/Simulation/G4Atlas/G4AtlasTests/src/CalibHitValidate.cxx
index d27b20c1d01..a30d051c397 100644
--- a/Simulation/G4Atlas/G4AtlasTests/src/CalibHitValidate.cxx
+++ b/Simulation/G4Atlas/G4AtlasTests/src/CalibHitValidate.cxx
@@ -63,8 +63,12 @@ StatusCode CalibHitValidate::execute()
     ATH_MSG_ERROR ( "No  McEventCollection found");
     return StatusCode::FAILURE;
   }
+#ifdef HEPMC3
+  auto gen  = truthEvent->at(0)->particles().front();
+#else
   HepMC::GenEvent::particle_const_iterator pit  = truthEvent->at(0)->particles_begin();
   HepMC::ConstGenParticlePtr   gen  = *pit;
+#endif
 
 
   std::vector<std::string>::iterator containerNameIter;
diff --git a/Simulation/G4Utilities/MCTruthSimAlgs/src/SimpleMergeMcEventCollTool.cxx b/Simulation/G4Utilities/MCTruthSimAlgs/src/SimpleMergeMcEventCollTool.cxx
index 9bc8b15e63b..5cc7dcf35d3 100644
--- a/Simulation/G4Utilities/MCTruthSimAlgs/src/SimpleMergeMcEventCollTool.cxx
+++ b/Simulation/G4Utilities/MCTruthSimAlgs/src/SimpleMergeMcEventCollTool.cxx
@@ -160,13 +160,17 @@ void SimpleMergeMcEventCollTool::printDetailsOfMergedMcEventCollection(McEventCo
   ATH_MSG_INFO ( "Current OUTPUT GenEvent: " );
   while(outputEventItr!=endOfEvents)
     {
-      const int signal_process_id((*outputEventItr)->signal_process_id());
+      const int signal_process_id=HepMC::signal_process_id(*outputEventItr);
       const int event_number((*outputEventItr)->event_number());
+#ifdef HEPMC3
+      ATH_MSG_INFO ( "GenEvent #"<<event_number<<", signal_process_id="<<signal_process_id<</*", category="<<event->second<<*/", number of Vertices="<<(*outputEventItr)->vertices().size() );
+#else
       ATH_MSG_INFO ( "GenEvent #"<<event_number<<", signal_process_id="<<signal_process_id<</*", category="<<event->second<<*/", number of Vertices="<<(*outputEventItr)->vertices_size() );
+#endif
       char fname[80];
       sprintf(fname,"%s.event%d.txt",m_truthCollInputKey.value().c_str(),event_number);
       std::ofstream of(fname);
-      (*outputEventItr)->print(of); // verbose output
+      HepMC::Print::line(of,*(*outputEventItr)); // verbose output
       of.close();
       ++outputEventItr;
     }
diff --git a/Simulation/Tests/DigitizationTests/src/McEventCollectionTestTool.cxx b/Simulation/Tests/DigitizationTests/src/McEventCollectionTestTool.cxx
index 6971c5a66a9..82e7cc683a3 100644
--- a/Simulation/Tests/DigitizationTests/src/McEventCollectionTestTool.cxx
+++ b/Simulation/Tests/DigitizationTests/src/McEventCollectionTestTool.cxx
@@ -82,6 +82,31 @@ StatusCode McEventCollectionTestTool::processEvent() {
 
       if(genEventIter != p_mceventcollection->begin()) isFirstEvent = false;
 
+#ifdef HEPMC3
+      ATH_MSG_INFO ("GenEvent Position in McEventCollection: " << n_genEvent-1 <<
+                    ", signal_process_id: " << HepMC::signal_process_id(currentGenEvent) <<
+                    ", event_number: " << currentGenEvent->event_number() <<
+                    ", particles_size: " << currentGenEvent->particles().size() <<
+                    ", vertices_size: " << currentGenEvent->vertices().size() <<
+                    " .");
+      if(currentGenEvent->particles().empty())
+        {
+          ++genEventIter;
+          continue;
+        }
+      ++n_genEventNonEmpty;
+      if(isFirstEvent)
+        {
+          m_sig_n_vert->Fill(currentGenEvent->vertices().size());
+          m_sig_n_part->Fill(currentGenEvent->particles().size());
+        }
+      else
+        {
+          m_bkg_n_vert->Fill(currentGenEvent->vertices().size());
+          m_bkg_n_part->Fill(currentGenEvent->particles().size());
+        }
+      ++genEventIter;
+#else
       ATH_MSG_INFO ("GenEvent Position in McEventCollection: " << n_genEvent-1 <<
                     ", signal_process_id: " << currentGenEvent->signal_process_id() <<
                     ", event_number: " << currentGenEvent->event_number() <<
@@ -105,6 +130,7 @@ StatusCode McEventCollectionTestTool::processEvent() {
           m_bkg_n_part->Fill(currentGenEvent->particles_size());
         }
       ++genEventIter;
+#endif
     }
   m_nGenEvents->Fill(n_genEvent,1);
   m_nEmptyGenEvents->Fill(n_genEvent-n_genEventNonEmpty,1);
diff --git a/Tracking/TrkTools/TrkTruthCreatorTools/src/DetailedTrackTruthBuilder.cxx b/Tracking/TrkTools/TrkTruthCreatorTools/src/DetailedTrackTruthBuilder.cxx
index 89f49bf63f8..e560005102d 100755
--- a/Tracking/TrkTools/TrkTruthCreatorTools/src/DetailedTrackTruthBuilder.cxx
+++ b/Tracking/TrkTools/TrkTruthCreatorTools/src/DetailedTrackTruthBuilder.cxx
@@ -446,7 +446,7 @@ void DetailedTrackTruthBuilder::makeTruthToRecMap( PRD_InverseTruth& result, con
   for( const auto& i : rec2truth ) {
     // i.first = Identifier
     // i.second = HepMcParticleLink
-    const HepMC::GenParticle* pa = i.second.cptr();
+    auto pa = i.second.cptr();
     if( !pa ) { continue; } // skip noise
     if( HepMC::barcode(pa)==std::numeric_limits<int32_t>::max() &&
         pa->pdg_id()==999 ) { continue; } // skip geantinos
diff --git a/Tracking/TrkValidation/TrkValTools/src/GenParticleJetFinder.cxx b/Tracking/TrkValidation/TrkValTools/src/GenParticleJetFinder.cxx
index f26bbb1c707..b4dc39371d1 100644
--- a/Tracking/TrkValidation/TrkValTools/src/GenParticleJetFinder.cxx
+++ b/Tracking/TrkValidation/TrkValTools/src/GenParticleJetFinder.cxx
@@ -113,7 +113,7 @@ std::vector< Trk::GenParticleJet >* Trk::GenParticleJetFinder::jetMCFinder(  std
                  << " ("<<(*jAtMin).getIndicesInEvent().size()<<")" );
 	  if((*iAtMin).getNumParticles()>(*jAtMin).getNumParticles()) {
 
-        std::vector<const HepMC::GenParticle* > partsTemp = (*jAtMin).getParticles();	  
+        auto partsTemp = (*jAtMin).getParticles();	  
         std::vector<int> indexTemp = (*jAtMin).getIndicesInEvent();
         //	  int partsTempSize = partsTemp.size();
         if (partsTemp.size()!=0) {
@@ -132,7 +132,7 @@ std::vector< Trk::GenParticleJet >* Trk::GenParticleJetFinder::jetMCFinder(  std
       }
 	  else {
 
-        std::vector<const HepMC::GenParticle* > partsTemp = (*iAtMin).getParticles();	  
+        auto partsTemp = (*iAtMin).getParticles();	  
         std::vector<int> indexTemp = (*iAtMin).getIndicesInEvent();
         if (partsTemp.size()!=0) {
 
-- 
GitLab