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