From 0a24e7eb9abce8a105cdc23a0e42f6a040130661 Mon Sep 17 00:00:00 2001 From: adrien matta <matta@lpccaen.in2p3.fr> Date: Wed, 18 Jul 2018 10:27:56 +0200 Subject: [PATCH] * Fixing issue in beam reaction after merge - The active flag was reset to 0 preventing reaction from occuring --- NPSimulation/Core/Target.cc | 2 +- NPSimulation/Process/BeamReaction.cc | 24 +++++++++++++++++------- NPSimulation/Process/BeamReaction.hh | 6 +++--- NPSimulation/Process/PhysicsList.cc | 4 ++-- 4 files changed, 23 insertions(+), 13 deletions(-) diff --git a/NPSimulation/Core/Target.cc b/NPSimulation/Core/Target.cc index 77b8fc23b..80455597b 100644 --- a/NPSimulation/Core/Target.cc +++ b/NPSimulation/Core/Target.cc @@ -74,7 +74,7 @@ Target::Target(){ m_TargetNbLayers = 5; // Number of steps by default // Set the global pointer TargetInstance = this; - m_ReactionRegion=0; + m_ReactionRegion=NULL; m_TargetDensity = 0 ; m_FrontDeformation = 0 ; diff --git a/NPSimulation/Process/BeamReaction.cc b/NPSimulation/Process/BeamReaction.cc index d38dae754..3c8ef1805 100644 --- a/NPSimulation/Process/BeamReaction.cc +++ b/NPSimulation/Process/BeamReaction.cc @@ -37,7 +37,7 @@ NPS::BeamReaction::BeamReaction(G4String modelName,G4Region* envelope) : ReadConfiguration(); m_PreviousEnergy=0 ; m_PreviousLength=0 ; - m_active = 0; + m_active = true; } @@ -55,13 +55,22 @@ void NPS::BeamReaction::ReadConfiguration(){ NPL::InputParser input(NPOptionManager::getInstance()->GetReactionFile()); m_Reaction.ReadConfigurationFile(input); m_BeamName=NPL::ChangeNameToG4Standard(m_Reaction.GetNucleus1().GetName()); - if(m_Reaction.GetNucleus3().GetName()!="") + if(m_Reaction.GetNucleus3().GetName()!=""){ m_active = true; + } + else{ + m_active = false; + + } } //////////////////////////////////////////////////////////////////////////////// G4bool NPS::BeamReaction::IsApplicable( const G4ParticleDefinition& particleType) { - std::string particleName = particleType.GetParticleName(); + if(!m_active) + return false; + + static std::string particleName; + particleName = particleType.GetParticleName(); if (particleName.find(m_BeamName)!=std::string::npos) { return true; } @@ -70,9 +79,6 @@ G4bool NPS::BeamReaction::IsApplicable( const G4ParticleDefinition& particleType //////////////////////////////////////////////////////////////////////////////// G4bool NPS::BeamReaction::ModelTrigger(const G4FastTrack& fastTrack) { - if(!m_active) - return false; - static bool shoot = false; static double rand = 0; const G4Track* PrimaryTrack = fastTrack.GetPrimaryTrack(); @@ -83,7 +89,11 @@ G4bool NPS::BeamReaction::ModelTrigger(const G4FastTrack& fastTrack) { double in = solid->DistanceToOut(P,V); double out = solid->DistanceToOut(P,-V); double ratio = in / (out+in) ; - // Generate a random for this event + + if(ratio!=ratio) + ratio =1; + + // Generate a random for this event if(!shoot){ rand = G4RandFlat::shoot(); shoot = true; diff --git a/NPSimulation/Process/BeamReaction.hh b/NPSimulation/Process/BeamReaction.hh index aa42d4423..0ddd7b0de 100644 --- a/NPSimulation/Process/BeamReaction.hh +++ b/NPSimulation/Process/BeamReaction.hh @@ -37,9 +37,9 @@ namespace NPS{ public: void ReadConfiguration(); - virtual G4bool IsApplicable(const G4ParticleDefinition&); - virtual G4bool ModelTrigger(const G4FastTrack &); - virtual void DoIt(const G4FastTrack&, G4FastStep&); + G4bool IsApplicable(const G4ParticleDefinition&); + G4bool ModelTrigger(const G4FastTrack &); + void DoIt(const G4FastTrack&, G4FastStep&); private: NPL::Reaction m_Reaction; diff --git a/NPSimulation/Process/PhysicsList.cc b/NPSimulation/Process/PhysicsList.cc index 29bf7065a..130db3d84 100644 --- a/NPSimulation/Process/PhysicsList.cc +++ b/NPSimulation/Process/PhysicsList.cc @@ -293,7 +293,7 @@ void PhysicsList::AddStepMax(){ ///////////////////////////////////////////////////////////////////////////// void PhysicsList::AddParametrisation(){ G4FastSimulationManagerProcess* BeamReaction = - new G4FastSimulationManagerProcess("NPSProcess"); + new G4FastSimulationManagerProcess("NPSimulationProcess"); // For 10.3 and higher #ifndef theParticleIterator @@ -305,7 +305,7 @@ void PhysicsList::AddParametrisation(){ G4ParticleDefinition* particle = theParticleIterator->value(); G4ProcessManager* pmanager = particle->GetProcessManager(); std::string name = particle->GetParticleName(); - pmanager->AddDiscreteProcess(BeamReaction); + pmanager->AddDiscreteProcess(BeamReaction); // Add a Step limiter to the beam particle. // This will be used to limit the step of the beam in the target pmanager->AddProcess(new G4StepLimiter,-1,-1,5); -- GitLab