From 7fd99093db01e2955a95ed06ed0c7020f90c81d6 Mon Sep 17 00:00:00 2001
From: Andre Sailer <andre.philippe.sailer@cern.ch>
Date: Tue, 2 Feb 2016 12:28:14 +0000
Subject: [PATCH] DDFORHEP-17: Move the generic simulator bits to the
 ParticleHandler

Moved LEFT_DETECTOR and PARTICLE_STOPPED
---
 DDG4/plugins/Geant4TCUserParticleHandler.cpp | 16 +---------------
 DDG4/src/Geant4ParticleHandler.cpp           | 20 ++++++++++++++++++++
 2 files changed, 21 insertions(+), 15 deletions(-)

diff --git a/DDG4/plugins/Geant4TCUserParticleHandler.cpp b/DDG4/plugins/Geant4TCUserParticleHandler.cpp
index 3648f2892..c70ae55d2 100644
--- a/DDG4/plugins/Geant4TCUserParticleHandler.cpp
+++ b/DDG4/plugins/Geant4TCUserParticleHandler.cpp
@@ -87,7 +87,7 @@ Geant4TCUserParticleHandler::Geant4TCUserParticleHandler(Geant4Context* ctxt, co
 }
 
 /// Post-track action callback
-void Geant4TCUserParticleHandler::end(const G4Track* track, Particle& p)  {
+void Geant4TCUserParticleHandler::end(const G4Track* /* track */, Particle& p)  {
 
   double r_prod = std::sqrt(p.vsx*p.vsx + p.vsy*p.vsy);
   double z_prod = std::fabs(p.vsz);
@@ -121,17 +121,6 @@ void Geant4TCUserParticleHandler::end(const G4Track* track, Particle& p)  {
     simStatus.set(G4PARTICLE_SIM_DECAY_TRACKER);
   }
 
-  const G4Step* theLastStep = track->GetStep();
-  G4StepPoint* theLastPostStepPoint = NULL;
-  if(theLastStep) theLastPostStepPoint = theLastStep->GetPostStepPoint();
-  if( theLastPostStepPoint &&
-      ( theLastPostStepPoint->GetStepStatus() == fWorldBoundary //particle left world volume
-	//|| theLastPostStepPoint->GetStepStatus() == fGeomBoundary
-      )
-    ) {
-    simStatus.set(G4PARTICLE_SIM_LEFT_DETECTOR);
-  }
-
   // if the particle doesn't end in the tracker volume it must have ended in the calorimeter
   if( not ends_in_trk_vol && not simStatus.isSet(G4PARTICLE_SIM_LEFT_DETECTOR) ) {
     simStatus.set(G4PARTICLE_SIM_DECAY_CALO);
@@ -141,9 +130,6 @@ void Geant4TCUserParticleHandler::end(const G4Track* track, Particle& p)  {
     simStatus.set(G4PARTICLE_SIM_BACKSCATTER);
   }
 
-  if(track->GetKineticEnergy() <= 0.) {
-    simStatus.set(G4PARTICLE_SIM_STOPPED);
-  }
   return ;
 
 }
diff --git a/DDG4/src/Geant4ParticleHandler.cpp b/DDG4/src/Geant4ParticleHandler.cpp
index bf43b9139..cc275aca4 100644
--- a/DDG4/src/Geant4ParticleHandler.cpp
+++ b/DDG4/src/Geant4ParticleHandler.cpp
@@ -307,6 +307,26 @@ void Geant4ParticleHandler::end(const G4Track* track)   {
   ph->vey = p.y();
   ph->vez = p.z();
 
+
+  // Set the simulator status bits
+  PropertyMask simStatus(m_currTrack.status);
+
+  // check if the last step ended on the worldVolume boundary
+  const G4Step* theLastStep = track->GetStep();
+  G4StepPoint* theLastPostStepPoint = NULL;
+  if(theLastStep) theLastPostStepPoint = theLastStep->GetPostStepPoint();
+  if( theLastPostStepPoint &&
+      ( theLastPostStepPoint->GetStepStatus() == fWorldBoundary //particle left world volume
+	//|| theLastPostStepPoint->GetStepStatus() == fGeomBoundary
+      )
+    ) {
+    simStatus.set(G4PARTICLE_SIM_LEFT_DETECTOR);
+  }
+
+  if(track->GetKineticEnergy() <= 0.) {
+    simStatus.set(G4PARTICLE_SIM_STOPPED);
+  }
+
   /// Final update of the particle using the user handler
   if ( m_userHandler )  {
     m_userHandler->end(track, m_currTrack);
-- 
GitLab