diff --git a/Core/Aggregate/ParticleLayout.cpp b/Core/Aggregate/ParticleLayout.cpp index 7e9eec123f9d238e7d45e2801b8e0f53e68325f0..c33dd1759cb5d3ea46cd03c3ceea0efec2d5d166 100644 --- a/Core/Aggregate/ParticleLayout.cpp +++ b/Core/Aggregate/ParticleLayout.cpp @@ -28,7 +28,7 @@ namespace { //! Returns true if interference function is able to calculate particle density automatically, //! which is the case for 2D functions. -bool provideParticleDensity(const IInterferenceFunction& iff) +bool particleDensityIsProvidedByInterference(const IInterferenceFunction& iff) { if(iff.getName() == BornAgain::InterferenceFunction2DLatticeType || iff.getName() == BornAgain::InterferenceFunction2DParaCrystalType) @@ -221,16 +221,19 @@ void ParticleLayout::setAndRegisterInterferenceFunction(IInterferenceFunction* c { mP_interference_function.reset(child); registerChild(child); - if(provideParticleDensity(*mP_interference_function)) - removeParameter(BornAgain::TotalParticleDensity); + + if(particleDensityIsProvidedByInterference(*mP_interference_function)) + registerParticleDensity(false); else - registerParticleDensity(); + registerParticleDensity(true); } -void ParticleLayout::registerParticleDensity() +void ParticleLayout::registerParticleDensity(bool make_registered) { - if(getParameter(BornAgain::TotalParticleDensity)) - return; - - registerParameter(BornAgain::TotalParticleDensity, &m_total_particle_density); + if(make_registered) { + if(!getParameter(BornAgain::TotalParticleDensity)) + registerParameter(BornAgain::TotalParticleDensity, &m_total_particle_density); + } else { + removeParameter(BornAgain::TotalParticleDensity); + } } diff --git a/Core/Aggregate/ParticleLayout.h b/Core/Aggregate/ParticleLayout.h index d69bb662db6a7ee0e688322a7a9b3a7fe57c8019..74bfc28e60198d3634e8d51ef926fd37c7667260 100644 --- a/Core/Aggregate/ParticleLayout.h +++ b/Core/Aggregate/ParticleLayout.h @@ -70,7 +70,7 @@ private: void addAndRegisterAbstractParticle(IAbstractParticle* child); void setAndRegisterInterferenceFunction(IInterferenceFunction* child); - void registerParticleDensity(); + void registerParticleDensity(bool make_registered = true); SafePointerVector<IAbstractParticle> m_particles; //!< Vector of particle types std::unique_ptr<IInterferenceFunction> mP_interference_function;