diff --git a/DDG4/src/Geant4ParticleHandler.cpp b/DDG4/src/Geant4ParticleHandler.cpp index 2b3021f7d7b3860a100f52018313c6577e523558..3ed0126eb41fd54c78d826dd384116b41ff8e16a 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 ) {