diff --git a/NPSimulation/Core/Target.cc b/NPSimulation/Core/Target.cc index 77b8fc23bbb6fe688bd30ecaf97d8425bb52a8d4..80455597be2763600ab413f5cb5d593c95fcfc96 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 d38dae754efd21d5b776945157984223581588ca..3c8ef1805e5e6e9bff04ee2572964fed49160dd1 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 aa42d4423be7f496e49efadd71ef1e8f209acb12..0ddd7b0de3f8dd03db784aace3129336342205a4 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 29bf7065ab635184d02f4354f2fd39d89381ae23..130db3d84b4b31121cf52e526d8da512c84adda0 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);