From 695be9530d08fb3d02851ebc05ed65ba0a1d2431 Mon Sep 17 00:00:00 2001
From: Andre Sailer <andre.philippe.sailer@cern.ch>
Date: Fri, 8 Apr 2016 08:31:23 +0000
Subject: [PATCH] Fix for particle history mixup

The G4event primary map does not know about the final state particles,
apparently. Need to find the G4Primaries we know about in the primaryMap and
look the the corresponding TrackID that was updated inside Geant4
---
 DDG4/src/Geant4ParticleHandler.cpp | 16 +++++++---------
 1 file changed, 7 insertions(+), 9 deletions(-)

diff --git a/DDG4/src/Geant4ParticleHandler.cpp b/DDG4/src/Geant4ParticleHandler.cpp
index 2b3021f7d..3ed0126eb 100644
--- a/DDG4/src/Geant4ParticleHandler.cpp
+++ b/DDG4/src/Geant4ParticleHandler.cpp
@@ -48,14 +48,12 @@ using namespace DD4hep::Simulation;
 typedef ReferenceBitMask<int> PropertyMask;
 
 namespace {
-  G4PrimaryParticle* primary(int id, const G4Event& evt)   {
-    for(int i=0, ni=evt.GetNumberOfPrimaryVertex(); i<ni; ++i)  {
-      G4PrimaryVertex* v = evt.GetPrimaryVertex(i);
-      for(int j=0, nj=v->GetNumberOfParticle(); j<nj; ++j)  {
-        G4PrimaryParticle* p = v->GetPrimary(j);
-        if ( id == p->GetTrackID() )   {
-          return p;
-        }
+  const G4PrimaryParticle* primary(int id, Geant4PrimaryMap::Primaries const& primaryMap)   {
+    Geant4PrimaryMap::Primaries::const_iterator iprim =   primaryMap.begin();
+    Geant4PrimaryMap::Primaries::const_iterator primEnd = primaryMap.end();
+    for (; iprim != primEnd; ++iprim) {
+      if( iprim->first->GetTrackID() == id ){
+	return iprim->first;
       }
     }
     return 0;
@@ -213,7 +211,7 @@ void Geant4ParticleHandler::begin(const G4Track* track)   {
   G4ThreeVector m = h.momentum();
   const G4ThreeVector& v = h.vertex();
   int reason = (kine > m_kinEnergyCut) ? G4PARTICLE_ABOVE_ENERGY_THRESHOLD : 0;
-  G4PrimaryParticle* prim = primary(h.id(),context()->event().event());
+  const G4PrimaryParticle* prim = primary(h.id(),m_primaryMap->primaryMap);
   Particle* prim_part = 0;
 
   if ( prim )   {
-- 
GitLab