diff --git a/App/src/TestPolarizedDWBATerms.cpp b/App/src/TestPolarizedDWBATerms.cpp index 17f50b2f3d8150102ad3049267da92b15bdf4dc9..0890860aa46cf9eb0c1d145b090f9a9b3a9004d7 100644 --- a/App/src/TestPolarizedDWBATerms.cpp +++ b/App/src/TestPolarizedDWBATerms.cpp @@ -59,13 +59,15 @@ TestPolarizedDWBATerms::TestPolarizedDWBATerms() void TestPolarizedDWBATerms::execute() { Bin1D alpha_f_bin(m_alpha_f, m_alpha_f); - const ILayerRTCoefficients *p_in_coeffs = - mp_specular_info->getInCoefficients(); + ScalarRTCoefficients in_coeffs; + in_coeffs.lambda = complex_t(0.2, 0.003); + in_coeffs.kz = -m_ki.z(); + in_coeffs.t_r << complex_t(-0.18, 0.001), complex_t(0.7, 0.001); boost::scoped_ptr<const ILayerRTCoefficients> P_out_coeffs( mp_specular_info->getOutCoefficients( - alpha_f_bin.getMidPoint(), 0.0) ); - mp_scalar_ff->setSpecularInfo(p_in_coeffs, P_out_coeffs.get()); - mp_matrix_ff->setSpecularInfo(p_in_coeffs, P_out_coeffs.get()); + alpha_f_bin.getMidPoint(), 0.0, 1.0) ); + mp_scalar_ff->setSpecularInfo(&in_coeffs, P_out_coeffs.get()); + mp_matrix_ff->setSpecularInfo(&in_coeffs, P_out_coeffs.get()); Bin1D zero_bin; mp_scalar_ff->calculateTerms(m_ki, m_kf_bin, alpha_f_bin); mp_matrix_ff->calculateTerms(m_ki, m_kf_bin, alpha_f_bin, zero_bin); @@ -90,13 +92,6 @@ void TestPolarizedDWBATerms::initWavevectors() void TestPolarizedDWBATerms::initSpecularInfo() { ScalarSpecularInfoMap *p_coeff_map = - new ScalarSpecularInfoMap(mp_multilayer, 0, 1.0); - mp_specular_info->addOutCoefficients(p_coeff_map); - - ScalarRTCoefficients rt_coeffs; - - rt_coeffs.lambda = complex_t(0.2, 0.003); - rt_coeffs.kz = -m_ki.z(); - rt_coeffs.t_r << complex_t(-0.18, 0.001), complex_t(0.7, 0.001); - mp_specular_info->addInCoefficients(new ScalarRTCoefficients(rt_coeffs)); + new ScalarSpecularInfoMap(mp_multilayer, 0); + mp_specular_info->addRTCoefficients(p_coeff_map); } diff --git a/Core/Algorithms/inc/LayerStrategyBuilder.h b/Core/Algorithms/inc/LayerStrategyBuilder.h index 2d7483dd3a1bd53e8d3c7ae49ec62e982f723adc..2bb02fa04748a01b92a638e6faa3de1447becde2 100644 --- a/Core/Algorithms/inc/LayerStrategyBuilder.h +++ b/Core/Algorithms/inc/LayerStrategyBuilder.h @@ -73,7 +73,7 @@ private: double getWavelength(); //! Creates formfactor info for single particle FormFactorInfo *createFormFactorInfo( - const ParticleInfo *p_particle_info, + const ParticleInfo &particle_info, const IMaterial *p_ambient_material, complex_t factor) const; diff --git a/Core/Algorithms/src/LayerStrategyBuilder.cpp b/Core/Algorithms/src/LayerStrategyBuilder.cpp index fc28cca16d7d7abb54dd7830d165d8dff1b5928d..eebfd8c20a1d6672748ae1a7a1d842193ff1b750 100644 --- a/Core/Algorithms/src/LayerStrategyBuilder.cpp +++ b/Core/Algorithms/src/LayerStrategyBuilder.cpp @@ -113,10 +113,10 @@ void LayerStrategyBuilder::collectFormFactorInfos() size_t number_of_particles = p_layout->getNumberOfParticles(); for (size_t particle_index = 0; particle_index<number_of_particles; ++particle_index) { - const ParticleInfo *p_particle_info = - p_layout->getParticleInfo(particle_index); + ParticleInfo particle_info(*p_layout->getParticle(particle_index), + p_layout->getAbundanceOfParticle(particle_index) ); FormFactorInfo *p_ff_info; - p_ff_info = createFormFactorInfo(p_particle_info, p_layer_material, + p_ff_info = createFormFactorInfo(particle_info, p_layer_material, wavevector_scattering_factor); p_ff_info->m_abundance = p_layout->getAbundanceOfParticle(particle_index)/total_abundance; @@ -141,27 +141,17 @@ double LayerStrategyBuilder::getWavelength() } FormFactorInfo *LayerStrategyBuilder::createFormFactorInfo( - const ParticleInfo *p_particle_info, + const ParticleInfo &particle_info, const IMaterial *p_ambient_material, complex_t factor) const { FormFactorInfo *p_result = new FormFactorInfo; - boost::scoped_ptr<IParticle> P_particle_clone(p_particle_info-> + boost::scoped_ptr<IParticle> P_particle_clone(particle_info. getParticle()->clone()); P_particle_clone->setAmbientMaterial(*p_ambient_material); // formfactor - IFormFactor *p_ff_particle=0; - kvector_t position = p_particle_info->getPosition(); - if (position==kvector_t(0.0, 0.0, 0.0)) { - p_ff_particle = P_particle_clone->createFormFactor(factor); - } - else { - boost::scoped_ptr<IFormFactor> P_clone( - P_particle_clone->createFormFactor(factor) ); - p_ff_particle = new FormFactorDecoratorPositionFactor( - *P_clone, position); - } + IFormFactor *p_ff_particle = P_particle_clone->createFormFactor(factor); IFormFactor *p_ff_framework(p_ff_particle); size_t n_layers = mp_layer->getNumberOfLayers(); if (n_layers>1) { @@ -176,9 +166,10 @@ FormFactorInfo *LayerStrategyBuilder::createFormFactorInfo( } p_result->mp_ff = p_ff_framework; // Other info (position and abundance) + kvector_t position = P_particle_clone->getPosition(); p_result->m_pos_x = position.x(); p_result->m_pos_y = position.y(); - p_result->m_abundance = p_particle_info->getAbundance(); + p_result->m_abundance = particle_info.getAbundance(); return p_result; } diff --git a/Core/FormFactors/inc/FormFactorDecoratorTransformation.h b/Core/FormFactors/inc/FormFactorDecoratorRotation.h similarity index 73% rename from Core/FormFactors/inc/FormFactorDecoratorTransformation.h rename to Core/FormFactors/inc/FormFactorDecoratorRotation.h index c2be85f061d5594a1519a46832256d8fa116f852..24a93e35ce39d30b160f0a0fdc63b74d9d762a3e 100644 --- a/Core/FormFactors/inc/FormFactorDecoratorTransformation.h +++ b/Core/FormFactors/inc/FormFactorDecoratorRotation.h @@ -2,8 +2,8 @@ // // BornAgain: simulate and fit scattering at grazing incidence // -//! @file FormFactors/inc/FormFactorDecoratorTransformation.h -//! @brief Defines class FormFactorDecoratorTransformation. +//! @file FormFactors/inc/FormFactorDecoratorRotation.h +//! @brief Defines class FormFactorDecoratorRotation. //! //! @homepage http://www.bornagainproject.org //! @license GNU General Public License v3 or higher (see COPYING) @@ -13,32 +13,32 @@ // // ************************************************************************** // -#ifndef FORMFACTORDECORATORTRANSFORMATION_H -#define FORMFACTORDECORATORTRANSFORMATION_H +#ifndef FORMFACTORDECORATORROTATION_H +#define FORMFACTORDECORATORROTATION_H #include "IFormFactorDecorator.h" #include "Rotations.h" #include <memory> -//! @class FormFactorDecoratorTransformation +//! @class FormFactorDecoratorRotation //! @ingroup formfactors_internal //! @brief Equips a formfactor with a rotation. -class BA_CORE_API_ FormFactorDecoratorTransformation : public IFormFactorDecorator +class BA_CORE_API_ FormFactorDecoratorRotation : public IFormFactorDecorator { public: //! Constructor, setting form factor and rotation. - FormFactorDecoratorTransformation( + FormFactorDecoratorRotation( IFormFactor *p_form_factor, const IRotation& transform) : IFormFactorDecorator(p_form_factor) { - setName("FormFactorDecoratorTransformation"); + setName("FormFactorDecoratorRotation"); m_transform = transform.getTransform3D(); } - virtual ~FormFactorDecoratorTransformation() {} + virtual ~FormFactorDecoratorRotation() {} - virtual FormFactorDecoratorTransformation *clone() const; + virtual FormFactorDecoratorRotation *clone() const; virtual void accept(ISampleVisitor *visitor) const { visitor->visit(this); } virtual complex_t evaluate(const cvector_t& k_i, @@ -52,7 +52,7 @@ protected: }; -inline complex_t FormFactorDecoratorTransformation::evaluate( +inline complex_t FormFactorDecoratorRotation::evaluate( const cvector_t& k_i, const Bin1DCVector& k_f_bin, const Bin1D &alpha_f_bin) const { cvector_t new_ki = @@ -65,6 +65,6 @@ inline complex_t FormFactorDecoratorTransformation::evaluate( return mp_form_factor->evaluate(new_ki, new_kf_bin, alpha_f_bin); } -#endif // FORMFACTORDECORATORTRANSFORMATION_H +#endif // FORMFACTORDECORATORROTATION_H diff --git a/Core/FormFactors/inc/FormFactors.h b/Core/FormFactors/inc/FormFactors.h index 23526530908125b92a71a7b2d6d4a90a994ae471..62948814e6823238322e310c23be51ce643defe8 100644 --- a/Core/FormFactors/inc/FormFactors.h +++ b/Core/FormFactors/inc/FormFactors.h @@ -28,7 +28,7 @@ #include "FormFactorDecoratorMultiPositionFactor.h" #include "FormFactorDecoratorPositionFactor.h" #include "FormFactorDecoratorMaterial.h" -#include "FormFactorDecoratorTransformation.h" +#include "FormFactorDecoratorRotation.h" #include "FormFactorDWBA.h" #include "FormFactorDWBAPol.h" #include "FormFactorEllipsoidalCylinder.h" diff --git a/Core/FormFactors/src/FormFactorCrystal.cpp b/Core/FormFactors/src/FormFactorCrystal.cpp index 91ed23a672ea7fb2974e48c3d3b7d8e5f8e1c221..63769acad3f0a54965592a926ccf8d99390ce739 100644 --- a/Core/FormFactors/src/FormFactorCrystal.cpp +++ b/Core/FormFactors/src/FormFactorCrystal.cpp @@ -29,7 +29,7 @@ FormFactorCrystal::FormFactorCrystal(const Crystal &p_crystal, const IRotation *p_rotation = p_crystal.getRotation(); if (p_rotation) { mp_meso_form_factor - = new FormFactorDecoratorTransformation(meso_crystal_form_factor.clone(), *p_rotation); + = new FormFactorDecoratorRotation(meso_crystal_form_factor.clone(), *p_rotation); } else { mp_meso_form_factor = meso_crystal_form_factor.clone(); } diff --git a/Core/FormFactors/src/FormFactorDecoratorTransformation.cpp b/Core/FormFactors/src/FormFactorDecoratorRotation.cpp similarity index 68% rename from Core/FormFactors/src/FormFactorDecoratorTransformation.cpp rename to Core/FormFactors/src/FormFactorDecoratorRotation.cpp index 3108c19632de320366b28c1988280cc4f2b429b7..a6b25bbf6fd26fc11400d2c9dabc041010cbdc75 100644 --- a/Core/FormFactors/src/FormFactorDecoratorTransformation.cpp +++ b/Core/FormFactors/src/FormFactorDecoratorRotation.cpp @@ -2,8 +2,8 @@ // // BornAgain: simulate and fit scattering at grazing incidence // -//! @file FormFactors/src/FormFactorDecoratorTransformation.cpp -//! @brief Implements class FormFactorDecoratorTransformation +//! @file FormFactors/src/FormFactorDecoratorRotation.cpp +//! @brief Implements class FormFactorDecoratorRotation //! //! @homepage http://www.bornagainproject.org //! @license GNU General Public License v3 or higher (see COPYING) @@ -13,14 +13,14 @@ // // ************************************************************************** // -#include "FormFactorDecoratorTransformation.h" +#include "FormFactorDecoratorRotation.h" #include <boost/scoped_ptr.hpp> -FormFactorDecoratorTransformation *FormFactorDecoratorTransformation::clone() const +FormFactorDecoratorRotation *FormFactorDecoratorRotation::clone() const { boost::scoped_ptr<IRotation> P_rotation(IRotation::createRotation(m_transform)); - FormFactorDecoratorTransformation *result = new FormFactorDecoratorTransformation( + FormFactorDecoratorRotation *result = new FormFactorDecoratorRotation( mp_form_factor->clone(), *P_rotation); result->setName(getName()); diff --git a/Core/PythonAPI/inc/ParticleInfo.pypp.h b/Core/PythonAPI/inc/ParticleInfo.pypp.h deleted file mode 100644 index 917bccc328e7251b736b762c3d133f9441c90d95..0000000000000000000000000000000000000000 --- a/Core/PythonAPI/inc/ParticleInfo.pypp.h +++ /dev/null @@ -1,23 +0,0 @@ -// This file has been generated by Py++. - -// ************************************************************************** // -// -// BornAgain: simulate and fit scattering at grazing incidence -// -//! @file Automatically generated boost::python code for BornAgain Python bindings -//! @brief Automatically generated boost::python code for BornAgain Python bindings -//! -//! @homepage http://bornagainproject.org -//! @license GNU General Public License v3 or higher (see COPYING) -//! @copyright Forschungszentrum Juelich GmbH 2015 -//! @authors Scientific Computing Group at MLZ Garching -//! @authors C. Durniak, M. Ganeva, G. Pospelov, W. Van Herck, J. Wuttke -// -// ************************************************************************** // - -#ifndef ParticleInfo_hpp__pyplusplus_wrapper -#define ParticleInfo_hpp__pyplusplus_wrapper - -void register_ParticleInfo_class(); - -#endif//ParticleInfo_hpp__pyplusplus_wrapper diff --git a/Core/PythonAPI/inc/PythonCoreList.h b/Core/PythonAPI/inc/PythonCoreList.h index 455a286b92bbffdeee6ff2b674c9ceb16d3aa1ad..75d0a12f26b60abf898e8909e16e391c6e7a715e 100644 --- a/Core/PythonAPI/inc/PythonCoreList.h +++ b/Core/PythonAPI/inc/PythonCoreList.h @@ -91,7 +91,6 @@ #include "ParticleDistribution.h" #include "ParticleCoreShell.h" #include "ParticleLayout.h" -#include "ParticleInfo.h" #include "PythonOutputData.h" #include "RealParameterWrapper.h" #include "ResolutionFunction2DGaussian.h" diff --git a/Core/PythonAPI/src/Crystal.pypp.cpp b/Core/PythonAPI/src/Crystal.pypp.cpp index 559e2a52bbcf97700295774459d0af95ea882b09..ffeee5538aa721712588c5168d79ffbe496f5abc 100644 --- a/Core/PythonAPI/src/Crystal.pypp.cpp +++ b/Core/PythonAPI/src/Crystal.pypp.cpp @@ -37,16 +37,16 @@ struct Crystal_wrapper : Crystal, bp::wrapper< Crystal > { m_pyobj = 0; } - virtual void applyTransformation( ::IRotation const & rotation ) { - if( bp::override func_applyTransformation = this->get_override( "applyTransformation" ) ) - func_applyTransformation( boost::ref(rotation) ); + virtual void applyRotation( ::IRotation const & rotation ) { + if( bp::override func_applyRotation = this->get_override( "applyRotation" ) ) + func_applyRotation( boost::ref(rotation) ); else{ - this->Crystal::applyTransformation( boost::ref(rotation) ); + this->Crystal::applyRotation( boost::ref(rotation) ); } } - void default_applyTransformation( ::IRotation const & rotation ) { - Crystal::applyTransformation( boost::ref(rotation) ); + void default_applyRotation( ::IRotation const & rotation ) { + Crystal::applyRotation( boost::ref(rotation) ); } virtual ::Crystal * clone( ) const { @@ -306,15 +306,15 @@ void register_Crystal_class(){ typedef bp::class_< Crystal_wrapper, bp::bases< IClusteredParticles >, std::auto_ptr< Crystal_wrapper >, boost::noncopyable > Crystal_exposer_t; Crystal_exposer_t Crystal_exposer = Crystal_exposer_t( "Crystal", "A crystal structure with a form factor as a basis.", bp::init< ParticleComposition const &, Lattice const & >(( bp::arg("lattice_basis"), bp::arg("lattice") )) ); bp::scope Crystal_scope( Crystal_exposer ); - { //::Crystal::applyTransformation + { //::Crystal::applyRotation - typedef void ( ::Crystal::*applyTransformation_function_type)( ::IRotation const & ) ; - typedef void ( Crystal_wrapper::*default_applyTransformation_function_type)( ::IRotation const & ) ; + typedef void ( ::Crystal::*applyRotation_function_type)( ::IRotation const & ) ; + typedef void ( Crystal_wrapper::*default_applyRotation_function_type)( ::IRotation const & ) ; Crystal_exposer.def( - "applyTransformation" - , applyTransformation_function_type(&::Crystal::applyTransformation) - , default_applyTransformation_function_type(&Crystal_wrapper::default_applyTransformation) + "applyRotation" + , applyRotation_function_type(&::Crystal::applyRotation) + , default_applyRotation_function_type(&Crystal_wrapper::default_applyRotation) , ( bp::arg("rotation") ) ); } diff --git a/Core/PythonAPI/src/IClusteredParticles.pypp.cpp b/Core/PythonAPI/src/IClusteredParticles.pypp.cpp index f80df7631c6c10c6a2b3c23e00fdf7f7bdf4df60..2537f95b689fbd74da2173e2e05bf19c5882ccdd 100644 --- a/Core/PythonAPI/src/IClusteredParticles.pypp.cpp +++ b/Core/PythonAPI/src/IClusteredParticles.pypp.cpp @@ -42,16 +42,16 @@ struct IClusteredParticles_wrapper : IClusteredParticles, bp::wrapper< IClustere func_accept( boost::python::ptr(visitor) ); } - virtual void applyTransformation( ::IRotation const & rotation ) { - if( bp::override func_applyTransformation = this->get_override( "applyTransformation" ) ) - func_applyTransformation( boost::ref(rotation) ); + virtual void applyRotation( ::IRotation const & rotation ) { + if( bp::override func_applyRotation = this->get_override( "applyRotation" ) ) + func_applyRotation( boost::ref(rotation) ); else{ - this->IClusteredParticles::applyTransformation( boost::ref(rotation) ); + this->IClusteredParticles::applyRotation( boost::ref(rotation) ); } } - void default_applyTransformation( ::IRotation const & rotation ) { - IClusteredParticles::applyTransformation( boost::ref(rotation) ); + void default_applyRotation( ::IRotation const & rotation ) { + IClusteredParticles::applyRotation( boost::ref(rotation) ); } virtual ::IClusteredParticles * clone( ) const { @@ -294,15 +294,15 @@ void register_IClusteredParticles_class(){ , "calls the ISampleVisitor's visit method." ); } - { //::IClusteredParticles::applyTransformation + { //::IClusteredParticles::applyRotation - typedef void ( ::IClusteredParticles::*applyTransformation_function_type)( ::IRotation const & ) ; - typedef void ( IClusteredParticles_wrapper::*default_applyTransformation_function_type)( ::IRotation const & ) ; + typedef void ( ::IClusteredParticles::*applyRotation_function_type)( ::IRotation const & ) ; + typedef void ( IClusteredParticles_wrapper::*default_applyRotation_function_type)( ::IRotation const & ) ; IClusteredParticles_exposer.def( - "applyTransformation" - , applyTransformation_function_type(&::IClusteredParticles::applyTransformation) - , default_applyTransformation_function_type(&IClusteredParticles_wrapper::default_applyTransformation) + "applyRotation" + , applyRotation_function_type(&::IClusteredParticles::applyRotation) + , default_applyRotation_function_type(&IClusteredParticles_wrapper::default_applyRotation) , ( bp::arg("rotation") ) ); } diff --git a/Core/PythonAPI/src/ILayout.pypp.cpp b/Core/PythonAPI/src/ILayout.pypp.cpp index 93071e3b1c323433f12f260dcdb08f60645672be..d5320977775c4918eaa3875606d627b0120704f8 100644 --- a/Core/PythonAPI/src/ILayout.pypp.cpp +++ b/Core/PythonAPI/src/ILayout.pypp.cpp @@ -79,9 +79,9 @@ struct ILayout_wrapper : ILayout, bp::wrapper< ILayout > { return func_getNumberOfParticles( ); } - virtual ::ParticleInfo const * getParticleInfo( ::std::size_t index ) const { - bp::override func_getParticleInfo = this->get_override( "getParticleInfo" ); - return func_getParticleInfo( index ); + virtual ::IParticle const * getParticle( ::std::size_t index ) const { + bp::override func_getParticle = this->get_override( "getParticle" ); + return func_getParticle( index ); } virtual bool areParametersChanged( ) { @@ -370,13 +370,13 @@ void register_ILayout_class(){ , "Returns number of particles." ); } - { //::ILayout::getParticleInfo + { //::ILayout::getParticle - typedef ::ParticleInfo const * ( ::ILayout::*getParticleInfo_function_type)( ::std::size_t ) const; + typedef ::IParticle const * ( ::ILayout::*getParticle_function_type)( ::std::size_t ) const; ILayout_exposer.def( - "getParticleInfo" - , bp::pure_virtual( getParticleInfo_function_type(&::ILayout::getParticleInfo) ) + "getParticle" + , bp::pure_virtual( getParticle_function_type(&::ILayout::getParticle) ) , ( bp::arg("index") ) , bp::return_value_policy< bp::reference_existing_object >() , "Returns information about particle with index." ); diff --git a/Core/PythonAPI/src/IParticle.pypp.cpp b/Core/PythonAPI/src/IParticle.pypp.cpp index 53a520ba7fb8585a8cadfd52c0f3e863de963e23..9f6eddec1ab5a90d597d3372160cd832937a71f1 100644 --- a/Core/PythonAPI/src/IParticle.pypp.cpp +++ b/Core/PythonAPI/src/IParticle.pypp.cpp @@ -264,14 +264,15 @@ void register_IParticle_class(){ typedef bp::class_< IParticle_wrapper, bp::bases< ICompositeSample >, std::auto_ptr< IParticle_wrapper >, boost::noncopyable > IParticle_exposer_t; IParticle_exposer_t IParticle_exposer = IParticle_exposer_t( "IParticle", "Interface for a generic particl.", bp::no_init ); bp::scope IParticle_scope( IParticle_exposer ); - { //::IParticle::applyTransformation + { //::IParticle::applyRotation - typedef void ( ::IParticle::*applyTransformation_function_type)( ::IRotation const & ) ; + typedef void ( ::IParticle::*applyRotation_function_type)( ::IRotation const & ) ; IParticle_exposer.def( - "applyTransformation" - , applyTransformation_function_type( &::IParticle::applyTransformation ) - , ( bp::arg("rotation") ) ); + "applyRotation" + , applyRotation_function_type( &::IParticle::applyRotation ) + , ( bp::arg("rotation") ) + , "Applies transformation by composing it with the existing one." ); } { //::IParticle::applyTransformationToSubParticles @@ -327,6 +328,26 @@ void register_IParticle_class(){ , bp::return_value_policy< bp::reference_existing_object >() , "Returns particle's material." ); + } + { //::IParticle::getDepth + + typedef double ( ::IParticle::*getDepth_function_type)( ) const; + + IParticle_exposer.def( + "getDepth" + , getDepth_function_type( &::IParticle::getDepth ) + , "Returns depth of particle." ); + + } + { //::IParticle::getPosition + + typedef ::kvector_t ( ::IParticle::*getPosition_function_type)( ) const; + + IParticle_exposer.def( + "getPosition" + , getPosition_function_type( &::IParticle::getPosition ) + , "Returns particle position, including depth." ); + } { //::IParticle::getRotation @@ -351,14 +372,26 @@ void register_IParticle_class(){ , ( bp::arg("material") ) ); } - { //::IParticle::setTransformation + { //::IParticle::setPosition - typedef void ( ::IParticle::*setTransformation_function_type)( ::IRotation const & ) ; + typedef void ( ::IParticle::*setPosition_function_type)( ::kvector_t ) ; IParticle_exposer.def( - "setTransformation" - , setTransformation_function_type( &::IParticle::setTransformation ) - , ( bp::arg("rotation") ) ); + "setPosition" + , setPosition_function_type( &::IParticle::setPosition ) + , ( bp::arg("position") ) + , "Sets particle position, including depth." ); + + } + { //::IParticle::setRotation + + typedef void ( ::IParticle::*setRotation_function_type)( ::IRotation const & ) ; + + IParticle_exposer.def( + "setRotation" + , setRotation_function_type( &::IParticle::setRotation ) + , ( bp::arg("rotation") ) + , "Sets transformation." ); } { //::IParameterized::areParametersChanged diff --git a/Core/PythonAPI/src/ParticleInfo.pypp.cpp b/Core/PythonAPI/src/ParticleInfo.pypp.cpp deleted file mode 100644 index c87256214087a67df5330072b7ea1552047ea55d..0000000000000000000000000000000000000000 --- a/Core/PythonAPI/src/ParticleInfo.pypp.cpp +++ /dev/null @@ -1,538 +0,0 @@ -// This file has been generated by Py++. - -// ************************************************************************** // -// -// BornAgain: simulate and fit scattering at grazing incidence -// -//! @file Automatically generated boost::python code for BornAgain Python bindings -//! @brief Automatically generated boost::python code for BornAgain Python bindings -//! -//! @homepage http://bornagainproject.org -//! @license GNU General Public License v3 or higher (see COPYING) -//! @copyright Forschungszentrum Juelich GmbH 2015 -//! @authors Scientific Computing Group at MLZ Garching -//! @authors C. Durniak, M. Ganeva, G. Pospelov, W. Van Herck, J. Wuttke -// -// ************************************************************************** // - -#include "Macros.h" -GCC_DIAG_OFF(unused-parameter) -GCC_DIAG_OFF(missing-field-initializers) -#include "boost/python.hpp" -GCC_DIAG_ON(unused-parameter) -GCC_DIAG_ON(missing-field-initializers) -#include "__call_policies.pypp.hpp" -#include "__convenience.pypp.hpp" -#include "PythonCoreList.h" -#include "ParticleInfo.pypp.h" - -namespace bp = boost::python; - -struct ParticleInfo_wrapper : ParticleInfo, bp::wrapper< ParticleInfo > { - - ParticleInfo_wrapper(::IParticle const & p_particle, double depth=0.0, double abundance=1.0e+0 ) - : ParticleInfo( boost::ref(p_particle), depth, abundance ) - , bp::wrapper< ParticleInfo >(){ - // constructor - m_pyobj = 0; - } - - ParticleInfo_wrapper(::IParticle const & p_particle, ::kvector_t position, double abundance=1.0e+0 ) - : ParticleInfo( boost::ref(p_particle), position, abundance ) - , bp::wrapper< ParticleInfo >(){ - // constructor - m_pyobj = 0; - } - - virtual ::ParticleInfo * clone( ) const { - if( bp::override func_clone = this->get_override( "clone" ) ) - return func_clone( ); - else{ - return this->ParticleInfo::clone( ); - } - } - - ::ParticleInfo * default_clone( ) const { - return ParticleInfo::clone( ); - } - - virtual ::ParticleInfo * cloneInvertB( ) const { - if( bp::override func_cloneInvertB = this->get_override( "cloneInvertB" ) ) - return func_cloneInvertB( ); - else{ - return this->ParticleInfo::cloneInvertB( ); - } - } - - ::ParticleInfo * default_cloneInvertB( ) const { - return ParticleInfo::cloneInvertB( ); - } - - virtual bool areParametersChanged( ) { - if( bp::override func_areParametersChanged = this->get_override( "areParametersChanged" ) ) - return func_areParametersChanged( ); - else{ - return this->IParameterized::areParametersChanged( ); - } - } - - bool default_areParametersChanged( ) { - return IParameterized::areParametersChanged( ); - } - - virtual void clearParameterPool( ) { - if( bp::override func_clearParameterPool = this->get_override( "clearParameterPool" ) ) - func_clearParameterPool( ); - else{ - this->IParameterized::clearParameterPool( ); - } - } - - void default_clearParameterPool( ) { - IParameterized::clearParameterPool( ); - } - - virtual bool containsMagneticMaterial( ) const { - if( bp::override func_containsMagneticMaterial = this->get_override( "containsMagneticMaterial" ) ) - return func_containsMagneticMaterial( ); - else{ - return this->ISample::containsMagneticMaterial( ); - } - } - - bool default_containsMagneticMaterial( ) const { - return ISample::containsMagneticMaterial( ); - } - - virtual ::ParameterPool * createParameterTree( ) const { - if( bp::override func_createParameterTree = this->get_override( "createParameterTree" ) ) - return func_createParameterTree( ); - else{ - return this->IParameterized::createParameterTree( ); - } - } - - ::ParameterPool * default_createParameterTree( ) const { - return IParameterized::createParameterTree( ); - } - - virtual ::ICompositeSample * getCompositeSample( ) { - if( bp::override func_getCompositeSample = this->get_override( "getCompositeSample" ) ) - return func_getCompositeSample( ); - else{ - return this->ICompositeSample::getCompositeSample( ); - } - } - - ::ICompositeSample * default_getCompositeSample( ) { - return ICompositeSample::getCompositeSample( ); - } - - virtual ::ICompositeSample const * getCompositeSample( ) const { - if( bp::override func_getCompositeSample = this->get_override( "getCompositeSample" ) ) - return func_getCompositeSample( ); - else{ - return this->ICompositeSample::getCompositeSample( ); - } - } - - ::ICompositeSample const * default_getCompositeSample( ) const { - return ICompositeSample::getCompositeSample( ); - } - - virtual bool preprocess( ) { - if( bp::override func_preprocess = this->get_override( "preprocess" ) ) - return func_preprocess( ); - else{ - return this->ISample::preprocess( ); - } - } - - bool default_preprocess( ) { - return ISample::preprocess( ); - } - - virtual void printParameters( ) const { - if( bp::override func_printParameters = this->get_override( "printParameters" ) ) - func_printParameters( ); - else{ - this->IParameterized::printParameters( ); - } - } - - void default_printParameters( ) const { - IParameterized::printParameters( ); - } - - virtual void printSampleTree( ) { - if( bp::override func_printSampleTree = this->get_override( "printSampleTree" ) ) - func_printSampleTree( ); - else{ - this->ISample::printSampleTree( ); - } - } - - void default_printSampleTree( ) { - ISample::printSampleTree( ); - } - - virtual void registerParameter( ::std::string const & name, double * parpointer, ::AttLimits const & limits=AttLimits::limitless( ) ) { - namespace bpl = boost::python; - if( bpl::override func_registerParameter = this->get_override( "registerParameter" ) ){ - bpl::object py_result = bpl::call<bpl::object>( func_registerParameter.ptr(), name, parpointer, limits ); - } - else{ - IParameterized::registerParameter( name, parpointer, boost::ref(limits) ); - } - } - - static void default_registerParameter( ::IParameterized & inst, ::std::string const & name, long unsigned int parpointer, ::AttLimits const & limits=AttLimits::limitless( ) ){ - if( dynamic_cast< ParticleInfo_wrapper * >( boost::addressof( inst ) ) ){ - inst.::IParameterized::registerParameter(name, reinterpret_cast< double * >( parpointer ), limits); - } - else{ - inst.registerParameter(name, reinterpret_cast< double * >( parpointer ), limits); - } - } - - virtual bool setParameterValue( ::std::string const & name, double value ) { - if( bp::override func_setParameterValue = this->get_override( "setParameterValue" ) ) - return func_setParameterValue( name, value ); - else{ - return this->IParameterized::setParameterValue( name, value ); - } - } - - bool default_setParameterValue( ::std::string const & name, double value ) { - return IParameterized::setParameterValue( name, value ); - } - - virtual void setParametersAreChanged( ) { - if( bp::override func_setParametersAreChanged = this->get_override( "setParametersAreChanged" ) ) - func_setParametersAreChanged( ); - else{ - this->IParameterized::setParametersAreChanged( ); - } - } - - void default_setParametersAreChanged( ) { - IParameterized::setParametersAreChanged( ); - } - - virtual ::std::size_t size( ) const { - if( bp::override func_size = this->get_override( "size" ) ) - return func_size( ); - else{ - return this->ICompositeSample::size( ); - } - } - - ::std::size_t default_size( ) const { - return ICompositeSample::size( ); - } - - virtual void transferToCPP( ) { - - if( !this->m_pyobj) { - this->m_pyobj = boost::python::detail::wrapper_base_::get_owner(*this); - Py_INCREF(this->m_pyobj); - } - - if( bp::override func_transferToCPP = this->get_override( "transferToCPP" ) ) - func_transferToCPP( ); - else{ - this->ICloneable::transferToCPP( ); - } - } - - void default_transferToCPP( ) { - - if( !this->m_pyobj) { - this->m_pyobj = boost::python::detail::wrapper_base_::get_owner(*this); - Py_INCREF(this->m_pyobj); - } - - ICloneable::transferToCPP( ); - } - - PyObject* m_pyobj; - -}; - -void register_ParticleInfo_class(){ - - { //::ParticleInfo - typedef bp::class_< ParticleInfo_wrapper, bp::bases< ICompositeSample >, std::auto_ptr< ParticleInfo_wrapper >, boost::noncopyable > ParticleInfo_exposer_t; - ParticleInfo_exposer_t ParticleInfo_exposer = ParticleInfo_exposer_t( "ParticleInfo", "Holds additional information about particle.", bp::init< IParticle const &, bp::optional< double, double > >(( bp::arg("p_particle"), bp::arg("depth")=0.0, bp::arg("abundance")=1.0e+0 )) ); - bp::scope ParticleInfo_scope( ParticleInfo_exposer ); - ParticleInfo_exposer.def( bp::init< IParticle const &, kvector_t, bp::optional< double > >(( bp::arg("p_particle"), bp::arg("position"), bp::arg("abundance")=1.0e+0 )) ); - { //::ParticleInfo::applyTransformation - - typedef void ( ::ParticleInfo::*applyTransformation_function_type)( ::IRotation const & ) ; - - ParticleInfo_exposer.def( - "applyTransformation" - , applyTransformation_function_type( &::ParticleInfo::applyTransformation ) - , ( bp::arg("transform") ) - , "Applies transformation by composing it with the existing one." ); - - } - { //::ParticleInfo::clone - - typedef ::ParticleInfo * ( ::ParticleInfo::*clone_function_type)( ) const; - typedef ::ParticleInfo * ( ParticleInfo_wrapper::*default_clone_function_type)( ) const; - - ParticleInfo_exposer.def( - "clone" - , clone_function_type(&::ParticleInfo::clone) - , default_clone_function_type(&ParticleInfo_wrapper::default_clone) - , bp::return_value_policy< bp::manage_new_object >() ); - - } - { //::ParticleInfo::cloneInvertB - - typedef ::ParticleInfo * ( ::ParticleInfo::*cloneInvertB_function_type)( ) const; - typedef ::ParticleInfo * ( ParticleInfo_wrapper::*default_cloneInvertB_function_type)( ) const; - - ParticleInfo_exposer.def( - "cloneInvertB" - , cloneInvertB_function_type(&::ParticleInfo::cloneInvertB) - , default_cloneInvertB_function_type(&ParticleInfo_wrapper::default_cloneInvertB) - , bp::return_value_policy< bp::reference_existing_object >() ); - - } - { //::ParticleInfo::getAbundance - - typedef double ( ::ParticleInfo::*getAbundance_function_type)( ) const; - - ParticleInfo_exposer.def( - "getAbundance" - , getAbundance_function_type( &::ParticleInfo::getAbundance ) - , "Returns abundance." ); - - } - { //::ParticleInfo::getDepth - - typedef double ( ::ParticleInfo::*getDepth_function_type)( ) const; - - ParticleInfo_exposer.def( - "getDepth" - , getDepth_function_type( &::ParticleInfo::getDepth ) - , "Returns depth." ); - - } - { //::ParticleInfo::getParticle - - typedef ::IParticle const * ( ::ParticleInfo::*getParticle_function_type)( ) const; - - ParticleInfo_exposer.def( - "getParticle" - , getParticle_function_type( &::ParticleInfo::getParticle ) - , bp::return_value_policy< bp::reference_existing_object >() - , "Returns particle." ); - - } - { //::ParticleInfo::getPosition - - typedef ::kvector_t ( ::ParticleInfo::*getPosition_function_type)( ) const; - - ParticleInfo_exposer.def( - "getPosition" - , getPosition_function_type( &::ParticleInfo::getPosition ) - , "Returns particle position, including depth." ); - - } - { //::ParticleInfo::setAbundance - - typedef void ( ::ParticleInfo::*setAbundance_function_type)( double ) ; - - ParticleInfo_exposer.def( - "setAbundance" - , setAbundance_function_type( &::ParticleInfo::setAbundance ) - , ( bp::arg("abundance") ) - , "Sets abundance." ); - - } - { //::ParticleInfo::setAmbientMaterial - - typedef void ( ::ParticleInfo::*setAmbientMaterial_function_type)( ::IMaterial const & ) ; - - ParticleInfo_exposer.def( - "setAmbientMaterial" - , setAmbientMaterial_function_type( &::ParticleInfo::setAmbientMaterial ) - , ( bp::arg("material") ) - , "Sets the ambient material." ); - - } - { //::ParticleInfo::setPosition - - typedef void ( ::ParticleInfo::*setPosition_function_type)( ::kvector_t ) ; - - ParticleInfo_exposer.def( - "setPosition" - , setPosition_function_type( &::ParticleInfo::setPosition ) - , ( bp::arg("position") ) - , "Sets particle position, including depth." ); - - } - { //::IParameterized::areParametersChanged - - typedef bool ( ::IParameterized::*areParametersChanged_function_type)( ) ; - typedef bool ( ParticleInfo_wrapper::*default_areParametersChanged_function_type)( ) ; - - ParticleInfo_exposer.def( - "areParametersChanged" - , areParametersChanged_function_type(&::IParameterized::areParametersChanged) - , default_areParametersChanged_function_type(&ParticleInfo_wrapper::default_areParametersChanged) ); - - } - { //::IParameterized::clearParameterPool - - typedef void ( ::IParameterized::*clearParameterPool_function_type)( ) ; - typedef void ( ParticleInfo_wrapper::*default_clearParameterPool_function_type)( ) ; - - ParticleInfo_exposer.def( - "clearParameterPool" - , clearParameterPool_function_type(&::IParameterized::clearParameterPool) - , default_clearParameterPool_function_type(&ParticleInfo_wrapper::default_clearParameterPool) ); - - } - { //::ISample::containsMagneticMaterial - - typedef bool ( ::ISample::*containsMagneticMaterial_function_type)( ) const; - typedef bool ( ParticleInfo_wrapper::*default_containsMagneticMaterial_function_type)( ) const; - - ParticleInfo_exposer.def( - "containsMagneticMaterial" - , containsMagneticMaterial_function_type(&::ISample::containsMagneticMaterial) - , default_containsMagneticMaterial_function_type(&ParticleInfo_wrapper::default_containsMagneticMaterial) ); - - } - { //::IParameterized::createParameterTree - - typedef ::ParameterPool * ( ::IParameterized::*createParameterTree_function_type)( ) const; - typedef ::ParameterPool * ( ParticleInfo_wrapper::*default_createParameterTree_function_type)( ) const; - - ParticleInfo_exposer.def( - "createParameterTree" - , createParameterTree_function_type(&::IParameterized::createParameterTree) - , default_createParameterTree_function_type(&ParticleInfo_wrapper::default_createParameterTree) - , bp::return_value_policy< bp::manage_new_object >() ); - - } - { //::ICompositeSample::getCompositeSample - - typedef ::ICompositeSample * ( ::ICompositeSample::*getCompositeSample_function_type)( ) ; - typedef ::ICompositeSample * ( ParticleInfo_wrapper::*default_getCompositeSample_function_type)( ) ; - - ParticleInfo_exposer.def( - "getCompositeSample" - , getCompositeSample_function_type(&::ICompositeSample::getCompositeSample) - , default_getCompositeSample_function_type(&ParticleInfo_wrapper::default_getCompositeSample) - , bp::return_value_policy< bp::reference_existing_object >() ); - - } - { //::ICompositeSample::getCompositeSample - - typedef ::ICompositeSample const * ( ::ICompositeSample::*getCompositeSample_function_type)( ) const; - typedef ::ICompositeSample const * ( ParticleInfo_wrapper::*default_getCompositeSample_function_type)( ) const; - - ParticleInfo_exposer.def( - "getCompositeSample" - , getCompositeSample_function_type(&::ICompositeSample::getCompositeSample) - , default_getCompositeSample_function_type(&ParticleInfo_wrapper::default_getCompositeSample) - , bp::return_value_policy< bp::reference_existing_object >() ); - - } - { //::ISample::preprocess - - typedef bool ( ::ISample::*preprocess_function_type)( ) ; - typedef bool ( ParticleInfo_wrapper::*default_preprocess_function_type)( ) ; - - ParticleInfo_exposer.def( - "preprocess" - , preprocess_function_type(&::ISample::preprocess) - , default_preprocess_function_type(&ParticleInfo_wrapper::default_preprocess) ); - - } - { //::IParameterized::printParameters - - typedef void ( ::IParameterized::*printParameters_function_type)( ) const; - typedef void ( ParticleInfo_wrapper::*default_printParameters_function_type)( ) const; - - ParticleInfo_exposer.def( - "printParameters" - , printParameters_function_type(&::IParameterized::printParameters) - , default_printParameters_function_type(&ParticleInfo_wrapper::default_printParameters) ); - - } - { //::ISample::printSampleTree - - typedef void ( ::ISample::*printSampleTree_function_type)( ) ; - typedef void ( ParticleInfo_wrapper::*default_printSampleTree_function_type)( ) ; - - ParticleInfo_exposer.def( - "printSampleTree" - , printSampleTree_function_type(&::ISample::printSampleTree) - , default_printSampleTree_function_type(&ParticleInfo_wrapper::default_printSampleTree) ); - - } - { //::IParameterized::registerParameter - - typedef void ( *default_registerParameter_function_type )( ::IParameterized &,::std::string const &,long unsigned int,::AttLimits const & ); - - ParticleInfo_exposer.def( - "registerParameter" - , default_registerParameter_function_type( &ParticleInfo_wrapper::default_registerParameter ) - , ( bp::arg("inst"), bp::arg("name"), bp::arg("parpointer"), bp::arg("limits")=AttLimits::limitless( ) ) - , "main method to register data address in the pool." ); - - } - { //::IParameterized::setParameterValue - - typedef bool ( ::IParameterized::*setParameterValue_function_type)( ::std::string const &,double ) ; - typedef bool ( ParticleInfo_wrapper::*default_setParameterValue_function_type)( ::std::string const &,double ) ; - - ParticleInfo_exposer.def( - "setParameterValue" - , setParameterValue_function_type(&::IParameterized::setParameterValue) - , default_setParameterValue_function_type(&ParticleInfo_wrapper::default_setParameterValue) - , ( bp::arg("name"), bp::arg("value") ) ); - - } - { //::IParameterized::setParametersAreChanged - - typedef void ( ::IParameterized::*setParametersAreChanged_function_type)( ) ; - typedef void ( ParticleInfo_wrapper::*default_setParametersAreChanged_function_type)( ) ; - - ParticleInfo_exposer.def( - "setParametersAreChanged" - , setParametersAreChanged_function_type(&::IParameterized::setParametersAreChanged) - , default_setParametersAreChanged_function_type(&ParticleInfo_wrapper::default_setParametersAreChanged) ); - - } - { //::ICompositeSample::size - - typedef ::std::size_t ( ::ICompositeSample::*size_function_type)( ) const; - typedef ::std::size_t ( ParticleInfo_wrapper::*default_size_function_type)( ) const; - - ParticleInfo_exposer.def( - "size" - , size_function_type(&::ICompositeSample::size) - , default_size_function_type(&ParticleInfo_wrapper::default_size) ); - - } - { //::ICloneable::transferToCPP - - typedef void ( ::ICloneable::*transferToCPP_function_type)( ) ; - typedef void ( ParticleInfo_wrapper::*default_transferToCPP_function_type)( ) ; - - ParticleInfo_exposer.def( - "transferToCPP" - , transferToCPP_function_type(&::ICloneable::transferToCPP) - , default_transferToCPP_function_type(&ParticleInfo_wrapper::default_transferToCPP) ); - - } - } - -} diff --git a/Core/PythonAPI/src/ParticleLayout.pypp.cpp b/Core/PythonAPI/src/ParticleLayout.pypp.cpp index 513b206025b9b9f8d83b2e4213b737832be1805c..1cd7f115c3945376bdaadb1af60ee5ad28d52b40 100644 --- a/Core/PythonAPI/src/ParticleLayout.pypp.cpp +++ b/Core/PythonAPI/src/ParticleLayout.pypp.cpp @@ -116,16 +116,16 @@ struct ParticleLayout_wrapper : ParticleLayout, bp::wrapper< ParticleLayout > { return ParticleLayout::getNumberOfParticles( ); } - virtual ::ParticleInfo const * getParticleInfo( ::std::size_t index ) const { - if( bp::override func_getParticleInfo = this->get_override( "getParticleInfo" ) ) - return func_getParticleInfo( index ); + virtual ::IParticle const * getParticle( ::std::size_t index ) const { + if( bp::override func_getParticle = this->get_override( "getParticle" ) ) + return func_getParticle( index ); else{ - return this->ParticleLayout::getParticleInfo( index ); + return this->ParticleLayout::getParticle( index ); } } - ::ParticleInfo const * default_getParticleInfo( ::std::size_t index ) const { - return ParticleLayout::getParticleInfo( index ); + ::IParticle const * default_getParticle( ::std::size_t index ) const { + return ParticleLayout::getParticle( index ); } virtual bool preprocess( ) { @@ -358,17 +358,6 @@ void register_ParticleLayout_class(){ , ( bp::arg("particle"), bp::arg("depth")=0.0, bp::arg("abundance")=1.0e+0 ) , "Adds particle without rotation." ); - } - { //::ParticleLayout::addParticleInfo - - typedef void ( ::ParticleLayout::*addParticleInfo_function_type)( ::ParticleInfo const & ) ; - - ParticleLayout_exposer.def( - "addParticleInfo" - , addParticleInfo_function_type( &::ParticleLayout::addParticleInfo ) - , ( bp::arg("info") ) - , "Adds particle info." ); - } { //::ParticleLayout::clone @@ -451,15 +440,15 @@ void register_ParticleLayout_class(){ , default_getNumberOfParticles_function_type(&ParticleLayout_wrapper::default_getNumberOfParticles) ); } - { //::ParticleLayout::getParticleInfo + { //::ParticleLayout::getParticle - typedef ::ParticleInfo const * ( ::ParticleLayout::*getParticleInfo_function_type)( ::std::size_t ) const; - typedef ::ParticleInfo const * ( ParticleLayout_wrapper::*default_getParticleInfo_function_type)( ::std::size_t ) const; + typedef ::IParticle const * ( ::ParticleLayout::*getParticle_function_type)( ::std::size_t ) const; + typedef ::IParticle const * ( ParticleLayout_wrapper::*default_getParticle_function_type)( ::std::size_t ) const; ParticleLayout_exposer.def( - "getParticleInfo" - , getParticleInfo_function_type(&::ParticleLayout::getParticleInfo) - , default_getParticleInfo_function_type(&ParticleLayout_wrapper::default_getParticleInfo) + "getParticle" + , getParticle_function_type(&::ParticleLayout::getParticle) + , default_getParticle_function_type(&ParticleLayout_wrapper::default_getParticle) , ( bp::arg("index") ) , bp::return_value_policy< bp::reference_existing_object >() ); diff --git a/Core/PythonAPI/src/PythonInterface_free_functions.pypp.cpp b/Core/PythonAPI/src/PythonInterface_free_functions.pypp.cpp index 81ad8dda658de56a55cdd8c9c01f4e5094c6fc52..e28b5b205f9da605b876fb5ca67d7d55e633022c 100644 --- a/Core/PythonAPI/src/PythonInterface_free_functions.pypp.cpp +++ b/Core/PythonAPI/src/PythonInterface_free_functions.pypp.cpp @@ -28,6 +28,18 @@ namespace bp = boost::python; void register_free_functions(){ + { //::CreateProduct + + typedef ::IRotation * ( *CreateProduct_function_type )( ::IRotation const &,::IRotation const & ); + + bp::def( + "CreateProduct" + , CreateProduct_function_type( &::CreateProduct ) + , ( bp::arg("left"), bp::arg("right") ) + , bp::return_value_policy< bp::reference_existing_object >() ); + + } + { //::MathFunctions::GenerateNormalRandom typedef double ( *GenerateNormalRandom_function_type )( double,double ); diff --git a/Core/PythonAPI/src/PythonModule.cpp b/Core/PythonAPI/src/PythonModule.cpp index b56588902c3ff6bf41eee6df367b0358bae51818..dd2248edd81bf72ab33750024361d73486f32352 100644 --- a/Core/PythonAPI/src/PythonModule.cpp +++ b/Core/PythonAPI/src/PythonModule.cpp @@ -121,7 +121,6 @@ GCC_DIAG_ON(missing-field-initializers) #include "Lattice.pypp.h" #include "AttLimits.pypp.h" #include "IInterferenceFunction.pypp.h" -#include "ParticleInfo.pypp.h" #include "Instrument.pypp.h" #include "FormFactorInfLongBox.pypp.h" #include "FormFactorCone.pypp.h" @@ -264,7 +263,6 @@ BOOST_PYTHON_MODULE(libBornAgainCore){ register_ParticleComposition_class(); register_ParticleCoreShell_class(); register_ParticleDistribution_class(); - register_ParticleInfo_class(); register_ParticleLayout_class(); register_RealParameterWrapper_class(); register_ResolutionFunction2DGaussian_class(); diff --git a/Core/Samples/inc/Crystal.h b/Core/Samples/inc/Crystal.h index 961e1a091eab7716ee1db633de810650c6b47dbf..195679e32fd07719baba50e7d4b78c931122f6bd 100644 --- a/Core/Samples/inc/Crystal.h +++ b/Core/Samples/inc/Crystal.h @@ -60,7 +60,7 @@ public: void setDWFactor(double dw_factor) { m_dw_factor = dw_factor; } //! Composes transformation with existing one - void applyTransformation(const IRotation& rotation); + void applyRotation(const IRotation& rotation); //! Gets transformation const IRotation* getRotation() const { @@ -76,7 +76,7 @@ private: void applyTransformationToSubParticles(const IRotation& rotation); Lattice m_lattice; - std::auto_ptr<IRotation> mP_rotation; + boost::scoped_ptr<IRotation> mP_rotation; ParticleComposition *mp_lattice_basis; double m_dw_factor; }; diff --git a/Core/Samples/inc/IClusteredParticles.h b/Core/Samples/inc/IClusteredParticles.h index af6f4223ee1a70be416d93097fcc94bd8b9d3449..309ee15fbfb01b4927e4f418428b1612b859e047 100644 --- a/Core/Samples/inc/IClusteredParticles.h +++ b/Core/Samples/inc/IClusteredParticles.h @@ -18,7 +18,6 @@ #include "IFormFactor.h" #include "ICompositeSample.h" -#include "ParticleInfo.h" #include "Exceptions.h" //! @class IClusteredParticles @@ -64,7 +63,7 @@ public: } //! Composes transformation with existing one - virtual void applyTransformation(const IRotation& rotation) + virtual void applyRotation(const IRotation& rotation) { (void)rotation; throw NotImplementedException( diff --git a/Core/Samples/inc/ILayout.h b/Core/Samples/inc/ILayout.h index b873f39e3e14f67cdd0eeed7874fe78ea3fb3ae4..c2e62324509b767b9095924fb40d16cba732a138 100644 --- a/Core/Samples/inc/ILayout.h +++ b/Core/Samples/inc/ILayout.h @@ -18,7 +18,6 @@ #include "ICompositeSample.h" #include "IFormFactor.h" -#include "ParticleInfo.h" #include "SafePointerVector.h" class IInterferenceFunctionStrategy; @@ -49,7 +48,7 @@ public: virtual size_t getNumberOfParticles() const=0; //! Returns information about particle with index - virtual const ParticleInfo *getParticleInfo(size_t index) const=0; + virtual const IParticle *getParticle(size_t index) const=0; /// Get abundance fraction of particle with index virtual double getAbundanceOfParticle(size_t index) const=0; diff --git a/Core/Samples/inc/IParticle.h b/Core/Samples/inc/IParticle.h index 2ec2cc8e0a8091f941fa80b9c270def13302facb..11e07fe8f2573c21b21e038566c32333f352358d 100644 --- a/Core/Samples/inc/IParticle.h +++ b/Core/Samples/inc/IParticle.h @@ -56,7 +56,25 @@ public: //! Create a form factor which includes the particle's shape, //! material, ambient material, an optional transformation and an extra //! scattering factor - virtual IFormFactor *createFormFactor(complex_t wavevector_scattering_factor) const = 0; + virtual IFormFactor *createFormFactor(complex_t wavevector_scattering_factor) const=0; + + //! Returns particle position, including depth. + kvector_t getPosition() const + { + return m_position; + } + + //! Returns depth of particle + double getDepth() const + { + return -m_position.z(); + } + + //! Sets particle position, including depth. + void setPosition(kvector_t position) + { + m_position = position; + } //! Returns rotation object const IRotation *getRotation() const @@ -65,42 +83,16 @@ public: } //! Sets transformation. - void setTransformation(const IRotation &rotation); + void setRotation(const IRotation &rotation); //! Applies transformation by composing it with the existing one - void applyTransformation(const IRotation &roation); + void applyRotation(const IRotation &rotation); protected: virtual void applyTransformationToSubParticles(const IRotation &rotation) = 0; + IFormFactor *createTransformedFormFactor(const IFormFactor &bare_ff) const; + kvector_t m_position; boost::scoped_ptr<IRotation> mP_rotation; }; -inline void IParticle::setTransformation(const IRotation &rotation) -{ - if (!mP_rotation.get()) { - mP_rotation.reset(rotation.clone()); - registerChild(mP_rotation.get()); - applyTransformationToSubParticles(rotation); - return; - } - deregisterChild(mP_rotation.get()); - boost::scoped_ptr<IRotation> P_inverse_rotation(mP_rotation->createInverse()); - applyTransformationToSubParticles(*P_inverse_rotation); - mP_rotation.reset(rotation.clone()); - registerChild(mP_rotation.get()); - applyTransformationToSubParticles(rotation); -} - -inline void IParticle::applyTransformation(const IRotation &rotation) -{ - if (mP_rotation.get()) { - deregisterChild(mP_rotation.get()); - mP_rotation.reset(CreateProduct(rotation, *mP_rotation)); - } else { - mP_rotation.reset(rotation.clone()); - } - registerChild(mP_rotation.get()); - applyTransformationToSubParticles(rotation); -} - #endif // IPARTICLE_H diff --git a/Core/Samples/inc/ISampleVisitor.h b/Core/Samples/inc/ISampleVisitor.h index 4e33ecebf3c6d4b21334f4ff611db2562d3e4c5a..0e4f8639f420e964c8e627aa0c2a0d9e9e17f895 100644 --- a/Core/Samples/inc/ISampleVisitor.h +++ b/Core/Samples/inc/ISampleVisitor.h @@ -89,7 +89,7 @@ class FormFactorDecoratorFactor; class FormFactorDecoratorMaterial; class FormFactorDecoratorMultiPositionFactor; class FormFactorDecoratorPositionFactor; -class FormFactorDecoratorTransformation; +class FormFactorDecoratorRotation; // - class IInterferenceFunction; class InterferenceFunction1DLattice; @@ -192,7 +192,7 @@ public: virtual void visit(const FormFactorDecoratorMaterial *); virtual void visit(const FormFactorDecoratorMultiPositionFactor *); virtual void visit(const FormFactorDecoratorPositionFactor *); - virtual void visit(const FormFactorDecoratorTransformation *); + virtual void visit(const FormFactorDecoratorRotation *); virtual void visit(const IInterferenceFunction *); virtual void visit(const InterferenceFunction1DLattice *); diff --git a/Core/Samples/inc/Particle.h b/Core/Samples/inc/Particle.h index d830e0edaf64211c0967d79fffab080ea16a6907..c63b8295e388842656b937889259c819646a0be7 100644 --- a/Core/Samples/inc/Particle.h +++ b/Core/Samples/inc/Particle.h @@ -18,7 +18,7 @@ #include "IParticle.h" #include "FormFactorDecoratorMaterial.h" -#include "FormFactorDecoratorTransformation.h" +#include "FormFactorDecoratorRotation.h" #include "IMaterial.h" #include <boost/scoped_ptr.hpp> @@ -89,7 +89,6 @@ public: } protected: - IFormFactor *createTransformedFormFactor() const; //! Propagates a transformation to child particles virtual void applyTransformationToSubParticles(const IRotation& rotation); boost::scoped_ptr<IMaterial> mP_material; diff --git a/Core/Samples/inc/ParticleComposition.h b/Core/Samples/inc/ParticleComposition.h index 92dae500584caf9d668449cf0bd059a9f15f4fab..966b7a1701d3540115e8e1462ba27b0790223daa 100644 --- a/Core/Samples/inc/ParticleComposition.h +++ b/Core/Samples/inc/ParticleComposition.h @@ -58,7 +58,7 @@ public: } kvector_t getParticlePosition(size_t index) const - { return m_position_vector[check_index(index)]; } + { return m_particles[check_index(index)]->getPosition(); } protected: virtual void applyTransformationToSubParticles(const IRotation& rotation); @@ -66,16 +66,17 @@ protected: private: //! Checks index inline size_t check_index(size_t index) const { - return index < m_position_vector.size() + return index < m_particles.size() ? index : throw OutOfBoundsException("ParticleComposition::check_index()" "-> Index is out of bounds"); } //! For internal use in cloneInvertB(): - void addParticlePointer(IParticle *p_particle, kvector_t position); + void addParticlePointer(IParticle *p_particle); + + void addParticleNoPosition(const IParticle& particle); std::vector<IParticle *> m_particles; - std::vector<kvector_t> m_position_vector; }; #endif /* PARTICLECOMPOSITION_H_ */ diff --git a/Core/Samples/inc/ParticleDistribution.h b/Core/Samples/inc/ParticleDistribution.h index e88503ff56de0faafbe4239cc2c1d3593b300314..a3ca505f11b3f17efa0abc158a35fc8078af48f8 100644 --- a/Core/Samples/inc/ParticleDistribution.h +++ b/Core/Samples/inc/ParticleDistribution.h @@ -52,13 +52,13 @@ public: //! scattering power) virtual void setAmbientMaterial(const IMaterial &material) { - m_particle.setAmbientMaterial(material); + mP_particle->setAmbientMaterial(material); } //! Returns particle's material. virtual const IMaterial *getAmbientMaterial() const { - return m_particle.getParticle()->getAmbientMaterial(); + return mP_particle->getAmbientMaterial(); } //! Should not be called for objects of this class: @@ -67,7 +67,7 @@ public: virtual IFormFactor *createFormFactor(complex_t wavevector_scattering_factor) const; //! Returns list of new particles generated according to a distribution - std::vector<ParticleInfo *> generateParticleInfos(kvector_t position, double abundance) const; + std::vector<ParticleInfo *> generateParticleInfos(double abundance) const; //! Returns the distributed parameter data ParameterDistribution getParameterDistribution() const @@ -77,17 +77,17 @@ public: //! Returns the parameter pool that can be used for parameter distributions ParameterPool *createDistributedParameterPool() const { - return m_particle.createParameterTree(); + return mP_particle->createParameterTree(); } //! Returns particle. const IParticle *getParticle() const { - return m_particle.getParticle(); + return mP_particle.get(); } protected: - ParticleInfo m_particle; + boost::scoped_ptr<IParticle> mP_particle; ParameterDistribution m_par_distribution; //! Propagates a transformation to child particles virtual void applyTransformationToSubParticles(const IRotation& rotation); diff --git a/Core/Samples/inc/ParticleInfo.h b/Core/Samples/inc/ParticleInfo.h index f3c6e842f13c2228c542c7551e9a1722a76ab69f..a30e3128fd4d64130ef04feebf77b0dc02a4a086 100644 --- a/Core/Samples/inc/ParticleInfo.h +++ b/Core/Samples/inc/ParticleInfo.h @@ -19,17 +19,18 @@ #include "ICompositeSample.h" #include "IParticle.h" +#include <boost/scoped_ptr.hpp> + //! @class ParticleInfo //! @ingroup samples //! @brief Holds additional information about particle. //! //! Used in ParticleLayout -class BA_CORE_API_ ParticleInfo : public ICompositeSample +class ParticleInfo : public ICompositeSample { public: - ParticleInfo(const IParticle &p_particle, double depth = 0.0, double abundance = 1.0); - ParticleInfo(const IParticle &p_particle, kvector_t position, double abundance = 1.0); + ParticleInfo(const IParticle &p_particle, double abundance = 1.0); virtual ~ParticleInfo() { @@ -55,13 +56,13 @@ public: //! Returns depth. double getDepth() const { - return m_depth; + return -mP_particle->getPosition().z(); } //! Returns particle position, including depth. kvector_t getPosition() const { - return kvector_t(m_x, m_y, -m_depth); + return mP_particle->getPosition(); } //! Sets particle position, including depth. @@ -85,18 +86,12 @@ public: mP_particle->setAmbientMaterial(material); } - //! Applies transformation by composing it with the existing one - void applyTransformation(const IRotation& transform); - protected: virtual void init_parameters(); virtual void print(std::ostream &ostr) const; - std::auto_ptr<IParticle> mP_particle; - double m_x; - double m_y; - double m_depth; + boost::scoped_ptr<IParticle> mP_particle; double m_abundance; }; diff --git a/Core/Samples/inc/ParticleLayout.h b/Core/Samples/inc/ParticleLayout.h index 2b2dde60add66e0666ff3f5111eeb2c75c888271..df968ae1c116947ec2f48b790d61185927abe80e 100644 --- a/Core/Samples/inc/ParticleLayout.h +++ b/Core/Samples/inc/ParticleLayout.h @@ -51,9 +51,6 @@ public: //! Adds particle without rotation void addParticle(const IParticle &particle, double depth = 0.0, double abundance = 1.0); - //! Adds particle info - void addParticleInfo(const ParticleInfo &info); - //! Returns number of particles virtual size_t getNumberOfParticles() const { @@ -61,7 +58,7 @@ public: } //! get information about particle with index - virtual const ParticleInfo *getParticleInfo(size_t index) const; + virtual const IParticle *getParticle(size_t index) const; //! Get abundance fraction of particle with index double getAbundanceOfParticle(size_t index) const; diff --git a/Core/Samples/src/Crystal.cpp b/Core/Samples/src/Crystal.cpp index a1a322f30296f35e75ddb1cb0270f90e182c6367..35c93ebc9f187124ca7e31456c0ffd6dd7bd041c 100644 --- a/Core/Samples/src/Crystal.cpp +++ b/Core/Samples/src/Crystal.cpp @@ -74,7 +74,7 @@ Lattice Crystal::getTransformedLattice() const } } -void Crystal::applyTransformation(const IRotation& rotation) +void Crystal::applyRotation(const IRotation& rotation) { if (mP_rotation.get()) { IRotation *total_rotation = CreateProduct(rotation, *mP_rotation); @@ -97,5 +97,5 @@ Crystal::Crystal(ParticleComposition* p_lattice_basis, const Lattice& lattice) void Crystal::applyTransformationToSubParticles(const IRotation& rotation) { - mp_lattice_basis->applyTransformation(rotation); + mp_lattice_basis->applyRotation(rotation); } diff --git a/Core/Samples/src/IParticle.cpp b/Core/Samples/src/IParticle.cpp new file mode 100644 index 0000000000000000000000000000000000000000..7ca9d2f8ab83ee724279dcb0729a05f68a39910d --- /dev/null +++ b/Core/Samples/src/IParticle.cpp @@ -0,0 +1,67 @@ +// ************************************************************************** // +// +// BornAgain: simulate and fit scattering at grazing incidence +// +//! @file Samples/src/IParticle.cpp +//! @brief Implements generic member functions of IParticle. +//! +//! @homepage http://www.bornagainproject.org +//! @license GNU General Public License v3 or higher (see COPYING) +//! @copyright Forschungszentrum Jülich GmbH 2015 +//! @authors Scientific Computing Group at MLZ Garching +//! @authors C. Durniak, M. Ganeva, G. Pospelov, W. Van Herck, J. Wuttke +// +// ************************************************************************** // + +#include "IParticle.h" +#include "IFormFactor.h" +#include "FormFactorDecoratorRotation.h" +#include "FormFactorDecoratorPositionFactor.h" + +void IParticle::setRotation(const IRotation &rotation) +{ + if (!mP_rotation.get()) { + mP_rotation.reset(rotation.clone()); + registerChild(mP_rotation.get()); + applyTransformationToSubParticles(rotation); + return; + } + deregisterChild(mP_rotation.get()); + boost::scoped_ptr<IRotation> P_inverse_rotation(mP_rotation->createInverse()); + applyTransformationToSubParticles(*P_inverse_rotation); + mP_rotation.reset(rotation.clone()); + registerChild(mP_rotation.get()); + applyTransformationToSubParticles(rotation); +} + +void IParticle::applyRotation(const IRotation &rotation) +{ + if (mP_rotation.get()) { + deregisterChild(mP_rotation.get()); + mP_rotation.reset(CreateProduct(rotation, *mP_rotation)); + } else { + mP_rotation.reset(rotation.clone()); + } + m_position = rotation.getTransform3D().transformed(m_position); + registerChild(mP_rotation.get()); + applyTransformationToSubParticles(rotation); +} + +IFormFactor *IParticle::createTransformedFormFactor(const IFormFactor &bare_ff) const +{ + IFormFactor *p_bare_clone = bare_ff.clone(); + IFormFactor *p_intermediate; + if (mP_rotation.get()) { + p_intermediate = new FormFactorDecoratorRotation(p_bare_clone, *mP_rotation); + } else { + p_intermediate = p_bare_clone; + } + IFormFactor *p_result; + if (m_position != kvector_t()) { + p_result = new FormFactorDecoratorPositionFactor(*p_intermediate, m_position); + delete p_intermediate; + } else { + p_result = p_intermediate; + } + return p_result; +} diff --git a/Core/Samples/src/ISampleVisitor.cpp b/Core/Samples/src/ISampleVisitor.cpp index 308540ba9cc546a5c5e8aed2323a897450babe65..340017d5be238cfaceaebd044982b14a1f548947 100644 --- a/Core/Samples/src/ISampleVisitor.cpp +++ b/Core/Samples/src/ISampleVisitor.cpp @@ -377,9 +377,9 @@ void ISampleVisitor::visit(const FormFactorDecoratorPositionFactor *) "*) -> Error. Not implemented."); } -void ISampleVisitor::visit(const FormFactorDecoratorTransformation *) +void ISampleVisitor::visit(const FormFactorDecoratorRotation *) { - throw NotImplementedException("ISampleVisitor::visit(const FormFactorDecoratorTransformation " + throw NotImplementedException("ISampleVisitor::visit(const FormFactorDecoratorRotation " "*) -> Error. Not implemented."); } diff --git a/Core/Samples/src/Lattice.cpp b/Core/Samples/src/Lattice.cpp index 62f036383582b628ce909c4ff147ba670d347672..49f834e2c8a93311deb14d982749d75ed5fdfbc8 100644 --- a/Core/Samples/src/Lattice.cpp +++ b/Core/Samples/src/Lattice.cpp @@ -61,7 +61,9 @@ Lattice Lattice::createTransformedLattice(const IRotation& rotation) const kvector_t a1 = transform.transformed(m_a1); kvector_t a2 = transform.transformed(m_a2); kvector_t a3 = transform.transformed(m_a3); - return Lattice(a1, a2, a3); + Lattice result = Lattice(a1, a2, a3); + if (mp_selection_rule) result.setSelectionRule(*mp_selection_rule); + return result; } void Lattice::initialize() const diff --git a/Core/Samples/src/MesoCrystal.cpp b/Core/Samples/src/MesoCrystal.cpp index f147d804de4a6c1ab283daece4ae0ea3d7a0dbea..e299abf423f3dc021d01b352a9db093cd3759388 100644 --- a/Core/Samples/src/MesoCrystal.cpp +++ b/Core/Samples/src/MesoCrystal.cpp @@ -14,6 +14,7 @@ // ************************************************************************** // #include "MesoCrystal.h" +#include "FormFactorDecoratorPositionFactor.h" MesoCrystal::MesoCrystal(IClusteredParticles* p_particle_structure, IFormFactor* p_form_factor) @@ -21,6 +22,9 @@ MesoCrystal::MesoCrystal(IClusteredParticles* p_particle_structure, , mp_meso_form_factor(p_form_factor) { setName("MesoCrystal"); + registerParameter("position_x", &m_position[0]); + registerParameter("position_y", &m_position[1]); + registerParameter("position_z", &m_position[2]); registerChild(mp_particle_structure); registerChild(mp_meso_form_factor); } @@ -31,6 +35,9 @@ MesoCrystal::MesoCrystal(const IClusteredParticles& particle_structure, , mp_meso_form_factor(form_factor.clone()) { setName("MesoCrystal"); + registerParameter("position_x", &m_position[0]); + registerParameter("position_y", &m_position[1]); + registerParameter("position_z", &m_position[2]); registerChild(mp_particle_structure); registerChild(mp_meso_form_factor); } @@ -48,6 +55,7 @@ MesoCrystal* MesoCrystal::clone() const if (mP_rotation.get()) { p_result->mP_rotation.reset(mP_rotation->clone()); } + p_result->setPosition(m_position); return p_result; } @@ -58,6 +66,7 @@ MesoCrystal* MesoCrystal::cloneInvertB() const if (mP_rotation.get()) { p_result->mP_rotation.reset(mP_rotation->clone()); } + p_result->setPosition(m_position); return p_result; } @@ -75,12 +84,11 @@ const IMaterial *MesoCrystal::getAmbientMaterial() const IFormFactor* MesoCrystal::createFormFactor( complex_t wavevector_scattering_factor) const { - return mp_particle_structure->createTotalFormFactor( - *mp_meso_form_factor, *getAmbientMaterial(), - wavevector_scattering_factor); + boost::scoped_ptr<IFormFactor> P_simple_ff(mp_particle_structure->createTotalFormFactor( + *mp_meso_form_factor, *getAmbientMaterial(), wavevector_scattering_factor) ); + return createTransformedFormFactor(*P_simple_ff); } -void MesoCrystal::applyTransformationToSubParticles(const IRotation& rotation) +void MesoCrystal::applyTransformationToSubParticles(const IRotation&) { - mp_particle_structure->applyTransformation(rotation); } diff --git a/Core/Samples/src/Particle.cpp b/Core/Samples/src/Particle.cpp index 008fcbd7f4661f4ffd6ada80e5a487b297d6fe96..27b09a35ba4f2b0fc7392f54d990183394d1b542 100644 --- a/Core/Samples/src/Particle.cpp +++ b/Core/Samples/src/Particle.cpp @@ -14,33 +14,47 @@ // ************************************************************************** // #include "Particle.h" -#include "ParticleInfo.h" #include "Materials.h" #include <boost/scoped_ptr.hpp> Particle::Particle() { setName("Particle"); + registerParameter("position_x", &m_position[0]); + registerParameter("position_y", &m_position[1]); + registerParameter("position_z", &m_position[2]); } -Particle::Particle(const IMaterial &p_material) : mP_material(p_material.clone()) +Particle::Particle(const IMaterial &p_material) + : mP_material(p_material.clone()) { setName("Particle"); + registerParameter("position_x", &m_position[0]); + registerParameter("position_y", &m_position[1]); + registerParameter("position_z", &m_position[2]); } Particle::Particle(const IMaterial &p_material, const IFormFactor &form_factor) - : mP_material(p_material.clone()), mP_form_factor(form_factor.clone()) + : mP_material(p_material.clone()) + , mP_form_factor(form_factor.clone()) { setName("Particle"); + registerParameter("position_x", &m_position[0]); + registerParameter("position_y", &m_position[1]); + registerParameter("position_z", &m_position[2]); registerChild(mP_form_factor.get()); } Particle::Particle(const IMaterial &p_material, const IFormFactor &form_factor, const IRotation &rotation) - : mP_material(p_material.clone()), mP_form_factor(form_factor.clone()) + : mP_material(p_material.clone()) + , mP_form_factor(form_factor.clone()) { setName("Particle"); - mP_rotation.reset(rotation.clone()); + registerParameter("position_x", &m_position[0]); + registerParameter("position_y", &m_position[1]); + registerParameter("position_z", &m_position[2]); + setRotation(rotation); registerChild(mP_form_factor.get()); } @@ -50,43 +64,47 @@ Particle::~Particle() Particle *Particle::clone() const { - Particle *result = new Particle(); + Particle *p_result = new Particle(); if (mP_form_factor.get()) - result->setFormFactor(*mP_form_factor); + p_result->setFormFactor(*mP_form_factor); if (mP_material.get()) - result->setMaterial(*mP_material); + p_result->setMaterial(*mP_material); if (mP_ambient_material.get()) - result->setAmbientMaterial(*mP_ambient_material); + p_result->setAmbientMaterial(*mP_ambient_material); if (mP_rotation.get()) - result->setTransformation(*mP_rotation); - result->setName(getName()); + p_result->setRotation(*mP_rotation); + p_result->setPosition(m_position); + p_result->setName(getName()); - return result; + return p_result; } Particle *Particle::cloneInvertB() const { - Particle *result = new Particle(); + Particle *p_result = new Particle(); if (mP_form_factor.get()) - result->setFormFactor(*mP_form_factor); + p_result->setFormFactor(*mP_form_factor); if (mP_material.get()) - result->mP_material.reset(Materials::createInvertedMaterial(mP_material.get())); + p_result->mP_material.reset(Materials::createInvertedMaterial(mP_material.get())); if (mP_ambient_material.get()) - result->mP_ambient_material.reset( + p_result->mP_ambient_material.reset( Materials::createInvertedMaterial(mP_ambient_material.get())); if (mP_rotation.get()) - result->mP_rotation.reset(mP_rotation->clone()); + p_result->mP_rotation.reset(mP_rotation->clone()); + p_result->setPosition(m_position); - result->setName(getName() + "_inv"); - return result; + p_result->setName(getName() + "_inv"); + return p_result; } IFormFactor *Particle::createFormFactor(complex_t wavevector_scattering_factor) const { - IFormFactor *p_transformed_ff = createTransformedFormFactor(); + if (!mP_form_factor.get()) + return 0; + IFormFactor *p_transformed_ff = createTransformedFormFactor(*mP_form_factor); if (!p_transformed_ff) { return 0; } @@ -114,19 +132,6 @@ void Particle::setFormFactor(const IFormFactor &form_factor) } } -IFormFactor *Particle::createTransformedFormFactor() const -{ - if (!mP_form_factor.get()) - return 0; - IFormFactor *p_result; - if (mP_rotation.get()) { - p_result = new FormFactorDecoratorTransformation(mP_form_factor->clone(), *mP_rotation); - } else { - p_result = mP_form_factor->clone(); - } - return p_result; -} - void Particle::applyTransformationToSubParticles(const IRotation &rotation) { (void)rotation; diff --git a/Core/Samples/src/ParticleComposition.cpp b/Core/Samples/src/ParticleComposition.cpp index 41fcb76a2bf109ca7fd5d757b48e8736ef3383bc..287f167b021772692d11a9fa38758583f9a37b30 100644 --- a/Core/Samples/src/ParticleComposition.cpp +++ b/Core/Samples/src/ParticleComposition.cpp @@ -21,17 +21,26 @@ ParticleComposition::ParticleComposition() { setName("ParticleComposition"); + registerParameter("position_x", &m_position[0]); + registerParameter("position_y", &m_position[1]); + registerParameter("position_z", &m_position[2]); } ParticleComposition::ParticleComposition(const IParticle& particle) { setName("ParticleComposition"); + registerParameter("position_x", &m_position[0]); + registerParameter("position_y", &m_position[1]); + registerParameter("position_z", &m_position[2]); addParticle( particle, kvector_t(0.0, 0.0, 0.0) ); } ParticleComposition::ParticleComposition(const IParticle &particle, kvector_t position) { setName("ParticleComposition"); + registerParameter("position_x", &m_position[0]); + registerParameter("position_y", &m_position[1]); + registerParameter("position_z", &m_position[2]); addParticle(particle, position); } @@ -39,6 +48,9 @@ ParticleComposition::ParticleComposition(const IParticle& particle, std::vector<kvector_t> positions) { setName("ParticleComposition"); + registerParameter("position_x", &m_position[0]); + registerParameter("position_y", &m_position[1]); + registerParameter("position_z", &m_position[2]); addParticles(particle, positions); } @@ -53,7 +65,7 @@ ParticleComposition* ParticleComposition::clone() const { ParticleComposition *p_new = new ParticleComposition(); for (size_t index=0; index<m_particles.size(); ++index) { - p_new->addParticle(*m_particles[index], m_position_vector[index]); + p_new->addParticleNoPosition(*m_particles[index]); } p_new->setName(getName()); p_new->setAmbientMaterial(*getAmbientMaterial()); @@ -67,8 +79,7 @@ ParticleComposition* ParticleComposition::cloneInvertB() const { ParticleComposition *p_new = new ParticleComposition(); for (size_t index=0; index<m_particles.size(); ++index) { - p_new->addParticlePointer(m_particles[index]->cloneInvertB(), - m_position_vector[index]); + p_new->addParticlePointer(m_particles[index]->cloneInvertB()); } p_new->setName(getName() + "_inv"); @@ -85,9 +96,9 @@ ParticleComposition* ParticleComposition::cloneInvertB() const void ParticleComposition::addParticle(const IParticle &particle, kvector_t position) { IParticle *np = particle.clone(); + np->setPosition(position); registerChild(np); m_particles.push_back(np); - m_position_vector.push_back(position); } void ParticleComposition::addParticles(const IParticle& particle, @@ -119,8 +130,7 @@ IFormFactor* ParticleComposition::createFormFactor( boost::scoped_ptr<IFormFactor> P_particle_ff( m_particles[index]->createFormFactor( wavevector_scattering_factor)); - FormFactorDecoratorPositionFactor pos_ff(*P_particle_ff, m_position_vector[index]); - p_ff->addFormFactor(pos_ff); + p_ff->addFormFactor(*P_particle_ff); } p_ff->setAmbientMaterial(*getAmbientMaterial()); return p_ff; @@ -131,20 +141,20 @@ void ParticleComposition::applyTransformationToSubParticles(const IRotation& rot for (std::vector<IParticle *>::iterator it = m_particles.begin(); it != m_particles.end(); ++it) { - (*it)->applyTransformation(rotation); - } - Geometry::Transform3D transform = rotation.getTransform3D(); - for (std::vector<kvector_t>::iterator it_vec = - m_position_vector.begin(); it_vec != m_position_vector.end(); - ++it_vec) { - *it_vec = transform.transformed(*it_vec); + (*it)->applyRotation(rotation); } } -void ParticleComposition::addParticlePointer(IParticle* p_particle, kvector_t position) +void ParticleComposition::addParticlePointer(IParticle* p_particle) { registerChild(p_particle); m_particles.push_back(p_particle); - m_position_vector.push_back(position); +} + +void ParticleComposition::addParticleNoPosition(const IParticle &particle) +{ + IParticle *np = particle.clone(); + registerChild(np); + m_particles.push_back(np); } diff --git a/Core/Samples/src/ParticleCoreShell.cpp b/Core/Samples/src/ParticleCoreShell.cpp index 4a3f3dab404e1e2200d9e5917dce9021897d8f25..29c52a51a0af4f8e0a042c1d504858f138a8ef2c 100644 --- a/Core/Samples/src/ParticleCoreShell.cpp +++ b/Core/Samples/src/ParticleCoreShell.cpp @@ -26,8 +26,14 @@ ParticleCoreShell::ParticleCoreShell(const Particle& shell, , m_relative_core_position(relative_core_position) { setName("ParticleCoreShell"); + registerParameter("position_x", &m_position[0]); + registerParameter("position_y", &m_position[1]); + registerParameter("position_z", &m_position[2]); addAndRegisterCore(core); addAndRegisterShell(shell); + registerParameter("rel_position_x", &m_relative_core_position[0]); + registerParameter("rel_position_y", &m_relative_core_position[1]); + registerParameter("rel_position_z", &m_relative_core_position[2]); } ParticleCoreShell::~ParticleCoreShell() @@ -125,10 +131,10 @@ ParticleCoreShell::ParticleCoreShell(kvector_t relative_core_position) void ParticleCoreShell::applyTransformationToSubParticles(const IRotation& rotation) { if (mp_core) { - mp_core->applyTransformation(rotation); + mp_core->applyRotation(rotation); } if (mp_shell) { - mp_shell->applyTransformation(rotation); + mp_shell->applyRotation(rotation); } Geometry::Transform3D transform = rotation.getTransform3D(); m_relative_core_position = transform.transformed(m_relative_core_position); @@ -142,7 +148,7 @@ FormFactorDecoratorMaterial *ParticleCoreShell::getTransformedFormFactor( const IRotation *p_rotation = p_particle->getRotation(); IFormFactor *p_transf_ff = 0; if (p_rotation) { - p_transf_ff = new FormFactorDecoratorTransformation( + p_transf_ff = new FormFactorDecoratorRotation( p_particle->getFormFactor()->clone(), *p_rotation); } else { p_transf_ff = p_particle->getFormFactor()->clone(); diff --git a/Core/Samples/src/ParticleDistribution.cpp b/Core/Samples/src/ParticleDistribution.cpp index 6fffdde0f5e02d188695c547fed9da6ce18196b3..31099b964ba935e4028b963ac3e823d87a691d59 100644 --- a/Core/Samples/src/ParticleDistribution.cpp +++ b/Core/Samples/src/ParticleDistribution.cpp @@ -20,27 +20,28 @@ ParticleDistribution::ParticleDistribution(const IParticle &prototype, const ParameterDistribution &par_distr) - : m_particle(prototype), m_par_distribution(par_distr) + : m_par_distribution(par_distr) { setName("ParticleDistribution"); - registerChild(&m_particle); + mP_particle.reset(prototype.clone()); + registerChild(mP_particle.get()); } ParticleDistribution::ParticleDistribution(const IParticle &prototype, const ParameterDistribution &par_distr, kvector_t position) - : m_particle(prototype, position), m_par_distribution(par_distr) + : m_par_distribution(par_distr) { - setName("ParticleDistribution"); - registerChild(&m_particle); + mP_particle.reset(prototype.clone()); + mP_particle->setPosition(position); + registerChild(mP_particle.get()); } ParticleDistribution *ParticleDistribution::clone() const { - kvector_t position = m_particle.getPosition(); ParticleDistribution *p_result - = new ParticleDistribution(*m_particle.getParticle(), m_par_distribution, position); + = new ParticleDistribution(*mP_particle, m_par_distribution); return p_result; } @@ -57,8 +58,7 @@ IFormFactor *ParticleDistribution::createFormFactor(complex_t wavevector_scatter "createFormFactor: should never be called"); } -std::vector<ParticleInfo *> ParticleDistribution::generateParticleInfos(kvector_t position, - double abundance) const +std::vector<ParticleInfo *> ParticleDistribution::generateParticleInfos(double abundance) const { std::vector<ParticleInfo *> result; boost::scoped_ptr<ParameterPool> P_pool(createDistributedParameterPool() ); @@ -92,10 +92,10 @@ std::vector<ParticleInfo *> ParticleDistribution::generateParticleInfos(kvector_ for (size_t i = 0; i < main_par_samples.size(); ++i) { ParameterSample main_sample = main_par_samples[i]; double particle_abundance = abundance * main_sample.weight; - ParticleInfo *p_particle_info = m_particle.clone(); - p_particle_info->setPosition(position); + ParticleInfo *p_particle_info = new ParticleInfo(*mP_particle); p_particle_info->setAbundance(particle_abundance); - boost::scoped_ptr<ParameterPool> P_new_pool(p_particle_info->createParameterTree() ); + boost::scoped_ptr<ParameterPool> P_new_pool( + p_particle_info->getParticle()->createParameterTree() ); int changed = P_new_pool->setMatchedParametersValue(main_par_name, main_sample.value); if (changed != 1) { throw Exceptions::RuntimeErrorException( @@ -121,6 +121,6 @@ std::vector<ParticleInfo *> ParticleDistribution::generateParticleInfos(kvector_ void ParticleDistribution::applyTransformationToSubParticles(const IRotation& rotation) { - m_particle.applyTransformation(rotation); + mP_particle->applyRotation(rotation); return; } diff --git a/Core/Samples/src/ParticleInfo.cpp b/Core/Samples/src/ParticleInfo.cpp index 358e9fd92f792fa43cd45fd087d043ec4d96468a..a07b0158a0122e04b03dcabdd3a9e4662684f634 100644 --- a/Core/Samples/src/ParticleInfo.cpp +++ b/Core/Samples/src/ParticleInfo.cpp @@ -16,25 +16,8 @@ #include "ParticleInfo.h" -ParticleInfo::ParticleInfo(const IParticle& p_particle, double depth, - double abundance) +ParticleInfo::ParticleInfo(const IParticle& p_particle, double abundance) : mP_particle(p_particle.clone()) - , m_x(0.0) - , m_y(0.0) - , m_depth(depth) - , m_abundance(abundance) -{ - setName("ParticleInfo"); - registerChild(mP_particle.get()); - init_parameters(); -} - -ParticleInfo::ParticleInfo(const IParticle &p_particle, kvector_t position, - double abundance) - : mP_particle(p_particle.clone()) - , m_x(position.x()) - , m_y(position.y()) - , m_depth(-position.z()) , m_abundance(abundance) { setName("ParticleInfo"); @@ -44,42 +27,31 @@ ParticleInfo::ParticleInfo(const IParticle &p_particle, kvector_t position, ParticleInfo *ParticleInfo::clone() const { - return new ParticleInfo(*mP_particle, getPosition(), m_abundance); + return new ParticleInfo(*mP_particle, m_abundance); } ParticleInfo *ParticleInfo::cloneInvertB() const { boost::scoped_ptr<IParticle> P_inverted_particle( mP_particle->cloneInvertB()); - return new ParticleInfo(*P_inverted_particle, getPosition(), m_abundance); + return new ParticleInfo(*P_inverted_particle, m_abundance); } void ParticleInfo::setPosition(kvector_t position) { - m_x = position.x(); - m_y = position.y(); - m_depth = -position.z(); -} - -void ParticleInfo::applyTransformation(const IRotation &rotation) -{ - mP_particle->applyTransformation(rotation); + mP_particle->setPosition(position); } void ParticleInfo::init_parameters() { clearParameterPool(); - registerParameter("x_position", &m_x); - registerParameter("y_position", &m_y); - registerParameter("depth", &m_depth); registerParameter("abundance", &m_abundance); } void ParticleInfo::print(std::ostream& ostr) const { ostr << "ParticleInfo:" << getName() << "<" << this << "> : {" << - " depth=" << m_depth << - ", abundance=" << m_abundance; + "abundance=" << m_abundance; ostr << " }"; } diff --git a/Core/Samples/src/ParticleLayout.cpp b/Core/Samples/src/ParticleLayout.cpp index e45afec219ce24e8df6e566c6e1d6ffc9af31493..23c1d11f0cacf288160acaa185a2fea5efd722b9 100644 --- a/Core/Samples/src/ParticleLayout.cpp +++ b/Core/Samples/src/ParticleLayout.cpp @@ -78,17 +78,16 @@ ParticleLayout* ParticleLayout::cloneInvertB() const //! Adds generic particle, &-version. void ParticleLayout::addParticle( - const IParticle& p_particle, const IRotation& rotation, + const IParticle& particle, const IRotation& rotation, double depth, double abundance) { - if(!abundance) { - throw LogicErrorException("ParticleLayout::addParticle() ->" - " Error! Abundance can't be equal to 0.0"); - } - boost::scoped_ptr<IParticle> P_particle_clone(p_particle.clone()); - P_particle_clone->setTransformation(rotation); + boost::scoped_ptr<IParticle> P_particle_clone(particle.clone()); + P_particle_clone->setRotation(rotation); + kvector_t position = particle.getPosition(); + position.setZ(position.z()-depth); + P_particle_clone->setPosition(position); addAndRegisterParticleInfo( - new ParticleInfo(*P_particle_clone, depth, abundance)); + new ParticleInfo(*P_particle_clone, abundance)); } //! Adds particle without rotation, &-version. @@ -96,29 +95,27 @@ void ParticleLayout::addParticle( const IParticle& particle, double depth, double abundance) { + boost::scoped_ptr<IParticle> P_particle_clone(particle.clone()); + kvector_t position = particle.getPosition(); + position.setZ(position.z()-depth); + P_particle_clone->setPosition(position); addAndRegisterParticleInfo( - new ParticleInfo(particle, depth, abundance)); -} - -//! Adds particle info. -void ParticleLayout::addParticleInfo(const ParticleInfo& info) -{ - addAndRegisterParticleInfo( info.clone() ); + new ParticleInfo(*P_particle_clone, abundance)); } //! Returns particle info -const ParticleInfo* ParticleLayout::getParticleInfo(size_t index) const +const IParticle* ParticleLayout::getParticle(size_t index) const { if (index<m_particles.size()) - return m_particles[index]; + return m_particles[index]->getParticle(); throw OutOfBoundsException( - "ParticleLayout::getParticleInfo() -> " + "ParticleLayout::getParticle() -> " "Error! Not so many particles in this decoration."); } double ParticleLayout::getAbundanceOfParticle(size_t index) const { - return getParticleInfo(index)->getAbundance(); + return m_particles[index]->getAbundance(); } //! Adds interference functions @@ -179,8 +176,7 @@ void ParticleLayout::replaceParticleDistribution(size_t index) dynamic_cast<const ParticleDistribution *>( p_particle_info->getParticle()); std::vector<ParticleInfo *> particles = - p_particle_coll->generateParticleInfos( - p_particle_info->getPosition(), p_particle_info->getAbundance()); + p_particle_coll->generateParticleInfos(p_particle_info->getAbundance()); for (size_t i=0; i<particles.size(); ++i) { addAndRegisterParticleInfo(particles[i]); } diff --git a/Core/StandardSamples/CylindersBuilder.cpp b/Core/StandardSamples/CylindersBuilder.cpp index 1018889e4e6aa656ef85e4d64da33f462ca71fd2..b9430c1ee0bf2c77d1fc5231919c3bdb5bbb1a16 100644 --- a/Core/StandardSamples/CylindersBuilder.cpp +++ b/Core/StandardSamples/CylindersBuilder.cpp @@ -148,7 +148,7 @@ ISample *CylindersWithSizeDistributionBuilder::buildSample() const // to get radius_min = average - 2.0*FWHM: double n_sigma = 2.0*2.0*std::sqrt(2.0*std::log(2.0)); DistributionGaussian gauss(m_radius, sigma); - ParameterDistribution par_distr("/ParticleInfo/Particle/FormFactorCylinder/radius", gauss, n_samples, n_sigma); + ParameterDistribution par_distr("/Particle/FormFactorCylinder/radius", gauss, n_samples, n_sigma); ParticleDistribution particle_collection(nano_particle, par_distr); particle_layout.addParticle(particle_collection); particle_layout.addInterferenceFunction(new InterferenceFunctionNone()); diff --git a/Core/StandardSamples/IsGISAXS06Builder.cpp b/Core/StandardSamples/IsGISAXS06Builder.cpp index ee315e8b61fada836f02f9be52e6cd4b5fc00710..3594d2981e74967730c230ccfa1c44cf4230e537 100644 --- a/Core/StandardSamples/IsGISAXS06Builder.cpp +++ b/Core/StandardSamples/IsGISAXS06Builder.cpp @@ -135,8 +135,8 @@ ISample *IsGISAXS06Lattice3Builder::buildSample() const FormFactorCylinder ff_cyl(5.0*Units::nanometer, 5.0*Units::nanometer); kvector_t position(0.0, 0.0, 0.0); Particle p(particle_material, ff_cyl); - ParticleInfo particle_info(p, position, 1.0); - particle_layout.addParticleInfo(particle_info); + p.setPosition(position); + particle_layout.addParticle(p); particle_layout.addInterferenceFunction(p_interference_function); air_layer.addLayout(particle_layout); @@ -187,9 +187,9 @@ ISample *IsGISAXS06Lattice4Builder::buildSample() const kvector_t position(0.0, 0.0, 0.0); Particle cylinder(particle_material, ff_cyl); + cylinder.setPosition(position); - ParticleInfo particle_info(cylinder, position, 1.0); - particle_layout.addParticleInfo(particle_info); + particle_layout.addParticle(cylinder); particle_layout.addInterferenceFunction(p_interference_function); diff --git a/Core/StandardSamples/IsGISAXS07Builder.cpp b/Core/StandardSamples/IsGISAXS07Builder.cpp index 501749f50a2f1bdfdd26a4088445abdb4e2ca62b..039b610e3623e36e3b5b793eb5c5128fef101614 100644 --- a/Core/StandardSamples/IsGISAXS07Builder.cpp +++ b/Core/StandardSamples/IsGISAXS07Builder.cpp @@ -47,80 +47,80 @@ ISample *IsGISAXS07Builder::buildSample() const 1.0*Units::nanometer); kvector_t pos1(0.0*Units::nanometer, 0.0*Units::nanometer, 0.0); Particle p1(particle_material, ff1); - ParticleInfo particle_info1(p1, pos1, 0.5); - particle_layout.addParticleInfo(particle_info1); + p1.setPosition(pos1); + particle_layout.addParticle(p1, 0.0, 0.5); // add particle number 2: FormFactorBox ff2(2.0*Units::nanometer, 4.0*Units::nanometer, 1.0*Units::nanometer); kvector_t pos2(5.0*Units::nanometer, 5.0*Units::nanometer, 0.0); RotationZ m2(10*Units::degree); Particle p2(particle_material, ff2, m2); - ParticleInfo particle_info2(p2, pos2, 0.5); - particle_layout.addParticleInfo(particle_info2); + p2.setPosition(pos2); + particle_layout.addParticle(p2, 0.0, 0.5); // add particle number 3: FormFactorBox ff3(2.0*Units::nanometer, 6.0*Units::nanometer, 1.0*Units::nanometer); kvector_t pos3(-5.0*Units::nanometer, -5.0*Units::nanometer, 0.0); RotationZ m3(20*Units::degree); Particle p3(particle_material, ff3, m3); - ParticleInfo particle_info3(p3, pos3, 0.5); - particle_layout.addParticleInfo(particle_info3); + p3.setPosition(pos3); + particle_layout.addParticle(p3, 0.0, 0.5); // add particle number 4: FormFactorBox ff4(2.0*Units::nanometer, 8.0*Units::nanometer, 1.0*Units::nanometer); kvector_t pos4(5.0*Units::nanometer, -5.0*Units::nanometer, 0.0); RotationZ m4(30*Units::degree); Particle p4(particle_material, ff4, m4); - ParticleInfo particle_info4(p4, pos4, 0.5); - particle_layout.addParticleInfo(particle_info4); + p4.setPosition(pos4); + particle_layout.addParticle(p4, 0.0, 0.5); // add particle number 5: FormFactorBox ff5(2.0*Units::nanometer, 10.0*Units::nanometer, 1.0*Units::nanometer); kvector_t pos5(-5.0*Units::nanometer, 5.0*Units::nanometer, 0.0); RotationZ m5(40*Units::degree); Particle p5(particle_material, ff5, m5); - ParticleInfo particle_info5(p5, pos5, 0.5); - particle_layout.addParticleInfo(particle_info5); + p5.setPosition(pos5); + particle_layout.addParticle(p5, 0.0, 0.5); // add particle number 6: FormFactorBox ff6(2.0*Units::nanometer, 2.0*Units::nanometer, 1.0*Units::nanometer); kvector_t pos6(0.0*Units::nanometer, 0.0*Units::nanometer, 0.0); RotationZ m6(50*Units::degree); Particle p6(particle_material, ff6, m6); - ParticleInfo particle_info6(p6, pos6, 0.5); - particle_layout.addParticleInfo(particle_info6); + p6.setPosition(pos6); + particle_layout.addParticle(p6, 0.0, 0.5); // add particle number 7: FormFactorBox ff7(2.0*Units::nanometer, 4.0*Units::nanometer, 1.0*Units::nanometer); kvector_t pos7(5.0*Units::nanometer, 5.0*Units::nanometer, 0.0); RotationZ m7(60*Units::degree); Particle p7(particle_material, ff7, m7); - ParticleInfo particle_info7(p7, pos7, 0.5); - particle_layout.addParticleInfo(particle_info7); + p7.setPosition(pos7); + particle_layout.addParticle(p7, 0.0, 0.5); // add particle number 8: FormFactorBox ff8(2.0*Units::nanometer, 6.0*Units::nanometer, 1.0*Units::nanometer); kvector_t pos8(-5.0*Units::nanometer, -5.0*Units::nanometer, 0.0); RotationZ m8(70*Units::degree); Particle p8(particle_material, ff8, m8); - ParticleInfo particle_info8(p8, pos8, 0.5); - particle_layout.addParticleInfo(particle_info8); + p8.setPosition(pos8); + particle_layout.addParticle(p8, 0.0, 0.5); // add particle number 9: FormFactorBox ff9(2.0*Units::nanometer, 8.0*Units::nanometer, 1.0*Units::nanometer); kvector_t pos9(5.0*Units::nanometer, -5.0*Units::nanometer, 0.0); RotationZ m9(80*Units::degree); Particle p9(particle_material, ff9, m9); - ParticleInfo particle_info9(p9, pos9, 0.5); - particle_layout.addParticleInfo(particle_info9); + p9.setPosition(pos9); + particle_layout.addParticle(p9, 0.0, 0.5); // add particle number 10: FormFactorBox ff10(2.0*Units::nanometer, 10.0*Units::nanometer, 1.0*Units::nanometer); kvector_t pos10(-5.0*Units::nanometer, 5.0*Units::nanometer, 0.0); RotationZ m10(90*Units::degree); Particle p10(particle_material, ff10, m10); - ParticleInfo particle_info10(p10, pos10, 0.5); - particle_layout.addParticleInfo(particle_info10); + p10.setPosition(pos10); + particle_layout.addParticle(p10, 0.0, 0.5); particle_layout.setApproximation(ILayout::ISGISAXSMOR); air_layer.addLayout(particle_layout); diff --git a/Core/Tools/inc/SampleMaterialVisitor.h b/Core/Tools/inc/SampleMaterialVisitor.h index 851485be5c068d4a250e7bdb7abfe654772d08bf..ec07d9c3a06ff5a95c2f1ce1164755ecf2102782 100644 --- a/Core/Tools/inc/SampleMaterialVisitor.h +++ b/Core/Tools/inc/SampleMaterialVisitor.h @@ -103,7 +103,7 @@ public: void visit(const FormFactorDecoratorMaterial *sample); void visit(const FormFactorDecoratorMultiPositionFactor *sample); void visit(const FormFactorDecoratorPositionFactor *sample); - void visit(const FormFactorDecoratorTransformation *sample); + void visit(const FormFactorDecoratorRotation *sample); void visit(const IInterferenceFunction *sample); void visit(const InterferenceFunction1DLattice *sample); diff --git a/Core/Tools/inc/SamplePrintVisitor.h b/Core/Tools/inc/SamplePrintVisitor.h index 03ea2314eef42ec838e8148163ef7f030c6115c9..ec2fd4cc4267ff2e8e3ffa20105be67b04573995 100644 --- a/Core/Tools/inc/SamplePrintVisitor.h +++ b/Core/Tools/inc/SamplePrintVisitor.h @@ -100,7 +100,7 @@ public: void visit(const FormFactorDecoratorMaterial *sample); void visit(const FormFactorDecoratorMultiPositionFactor *sample); void visit(const FormFactorDecoratorPositionFactor *sample); - void visit(const FormFactorDecoratorTransformation *sample); + void visit(const FormFactorDecoratorRotation *sample); void visit(const IInterferenceFunction *sample); void visit(const InterferenceFunction1DLattice *sample); diff --git a/Core/Tools/src/PyGenVisitor.cpp b/Core/Tools/src/PyGenVisitor.cpp index 95a9e0f75082727d2b49b78ecd0ceb2d2048713e..09aed75324e8412d8a3f34d3761c05d055e4e6db 100644 --- a/Core/Tools/src/PyGenVisitor.cpp +++ b/Core/Tools/src/PyGenVisitor.cpp @@ -1172,26 +1172,27 @@ std::string PyGenVisitor::defineParticleLayouts() const size_t particleIndex = 0; while (particleIndex != numberOfParticles) { - const ParticleInfo *particleInfo = particleLayout->getParticleInfo(particleIndex); - kvector_t pos = particleInfo->getPosition(); + const IParticle *p_particle = particleLayout->getParticle(particleIndex); + double abundance = particleLayout->getAbundanceOfParticle(particleIndex); + kvector_t pos = p_particle->getPosition(); if (pos.x() != 0.0 || pos.y() != 0.0) { - result << indent() << m_label->getLabel(particleInfo->getParticle()) + result << indent() << m_label->getLabel(p_particle) << "_position = kvector_t(" << pos.x() << "*nanometer, " << pos.y() << "*nanometer, " << pos.z() << "*nanometer)\n"; - result << indent() << m_label->getLabel(particleInfo->getParticle()) + result << indent() << m_label->getLabel(p_particle) << "_positionInfo = ParticleInfo(" - << m_label->getLabel(particleInfo->getParticle()) << ", " - << m_label->getLabel(particleInfo->getParticle()) << "_position, " - << PyGenTools::printDouble(particleInfo->getAbundance()) << ")\n"; + << m_label->getLabel(p_particle) << ", " + << m_label->getLabel(p_particle) << "_position, " + << PyGenTools::printDouble(abundance) << ")\n"; result << indent() << it->second << ".addParticleInfo(" - << m_label->getLabel(particleInfo->getParticle()) << "_positionInfo)\n"; + << m_label->getLabel(p_particle) << "_positionInfo)\n"; } else { result << indent() << it->second << ".addParticle(" - << m_label->getLabel(particleInfo->getParticle()) << ", " - << PyGenTools::printDouble(particleInfo->getDepth()) << ", " - << PyGenTools::printDouble(particleInfo->getAbundance()) << ")\n"; + << m_label->getLabel(p_particle) << ", " + << PyGenTools::printDouble(-pos.z()) << ", " + << PyGenTools::printDouble(abundance) << ")\n"; } particleIndex++; } diff --git a/Core/Tools/src/SampleMaterialVisitor.cpp b/Core/Tools/src/SampleMaterialVisitor.cpp index c939473acc5d1cdac3420f5043a7e78ee233c8b8..7f85f6255add5c792fef090abd1cceccdc5987a9 100644 --- a/Core/Tools/src/SampleMaterialVisitor.cpp +++ b/Core/Tools/src/SampleMaterialVisitor.cpp @@ -276,7 +276,7 @@ void SampleMaterialVisitor::visit(const FormFactorDecoratorPositionFactor *) { } -void SampleMaterialVisitor::visit(const FormFactorDecoratorTransformation *) +void SampleMaterialVisitor::visit(const FormFactorDecoratorRotation *) { } diff --git a/Core/Tools/src/SamplePrintVisitor.cpp b/Core/Tools/src/SamplePrintVisitor.cpp index ebcc48e883864b93b89f90a80e6bd719f0c362f8..390b4983f9005f9a4bf45d480a1adda7dbc16227 100644 --- a/Core/Tools/src/SamplePrintVisitor.cpp +++ b/Core/Tools/src/SamplePrintVisitor.cpp @@ -379,10 +379,10 @@ void SamplePrintVisitor::visit(const FormFactorDecoratorPositionFactor *) } -void SamplePrintVisitor::visit(const FormFactorDecoratorTransformation *) +void SamplePrintVisitor::visit(const FormFactorDecoratorRotation *) { throw NotImplementedException("SamplePrintVisitor::" - "visit(const FormFactorDecoratorTransformation *) -> " + "visit(const FormFactorDecoratorRotation *) -> " "Error. Not implemented."); } diff --git a/Examples/Demos/simul_demo_lattice1.py b/Examples/Demos/simul_demo_lattice1.py index 7b90f34bf7cb9c913eb136327f0bd30843cdf4c7..a30580ff1599fd3f62095c49a64cb3994a00d693 100644 --- a/Examples/Demos/simul_demo_lattice1.py +++ b/Examples/Demos/simul_demo_lattice1.py @@ -21,9 +21,9 @@ def RunSimulation(): cylinder_ff = FormFactorCylinder(5*nanometer, 5*nanometer) cylinder = Particle(mParticle, cylinder_ff.clone()) position = kvector_t(0.0, 0.0, 0.0) - particle_info = ParticleInfo(cylinder, position, 1.0) + cylinder.setPosition(position) particle_layout = ParticleLayout() - particle_layout.addParticleInfo(particle_info) + particle_layout.addParticle(cylinder, 0.0, 1.0) # interference function interference = InterferenceFunction2DLattice.createSquare(10.0*nanometer) diff --git a/Examples/Demos/simul_demo_lattice2.py b/Examples/Demos/simul_demo_lattice2.py index ad333ed28894bc8872525512da5db984525357b0..121df2a0efc3c9120d273bb8cb0d529a36d9f7cf 100644 --- a/Examples/Demos/simul_demo_lattice2.py +++ b/Examples/Demos/simul_demo_lattice2.py @@ -21,14 +21,14 @@ def RunSimulation(): cylinder_ff = FormFactorCylinder(5*nanometer, 5*nanometer) cylinder = Particle(mParticle, cylinder_ff) position = kvector_t(0.0, 0.0, 0.0) - particle_info = ParticleInfo(cylinder, position, 1.0) + cylinder.setPosition(position) particle_layout1 = ParticleLayout() - particle_layout1.addParticleInfo(particle_info) + particle_layout1.addParticle(cylinder, 0.0, 1.0) # particle 2 position_2 = kvector_t(5.0*nanometer, 5.0*nanometer, 0.0) - particle_info.setPosition(position_2) + cylinder.setPosition(position_2) particle_layout2 = ParticleLayout() - particle_layout2.addParticleInfo(particle_info) + particle_layout2.addParticle(cylinder, 0.0, 1.0) # interference function interference = InterferenceFunction2DLattice.createSquare(10.0*nanometer) diff --git a/Examples/python/simulation/ex03_InterferenceFunctions/Interference2DLaticeSumOfRotated.py b/Examples/python/simulation/ex03_InterferenceFunctions/Interference2DLatticeSumOfRotated.py similarity index 96% rename from Examples/python/simulation/ex03_InterferenceFunctions/Interference2DLaticeSumOfRotated.py rename to Examples/python/simulation/ex03_InterferenceFunctions/Interference2DLatticeSumOfRotated.py index ed6500d27a873019ee0517798335215cfee52a36..136a5e6dc9aa471a16ce37fbc90b3347070818b0 100644 --- a/Examples/python/simulation/ex03_InterferenceFunctions/Interference2DLaticeSumOfRotated.py +++ b/Examples/python/simulation/ex03_InterferenceFunctions/Interference2DLatticeSumOfRotated.py @@ -28,8 +28,8 @@ def get_sample(xi_value): ff_cyl = FormFactorCylinder(3.0*nanometer, 3.0*nanometer) position = kvector_t(0.0, 0.0, 0.0) cylinder = Particle(m_particle, ff_cyl.clone()) - particle_info = ParticleInfo(cylinder, position, 1.0) - particle_layout.addParticleInfo(particle_info) + cylinder.setPosition(position) + particle_layout.addParticle(cylinder, 0.0, 1.0) particle_layout.addInterferenceFunction(p_interference_function) air_layer.addLayout(particle_layout) diff --git a/GUI/coregui/Models/DomainObjectBuilder.cpp b/GUI/coregui/Models/DomainObjectBuilder.cpp index e235740719a351366abe97a0a344037960dcf0da..f5c781f376990f5064a392b6419cf5635d7b87d1 100644 --- a/GUI/coregui/Models/DomainObjectBuilder.cpp +++ b/GUI/coregui/Models/DomainObjectBuilder.cpp @@ -86,11 +86,12 @@ ParticleLayout *DomainObjectBuilder::buildParticleLayout(const ParameterizedItem ParameterizedItem *particle_item = children[i]; boost::scoped_ptr<Particle> P_particle(buildParticle(*particle_item, depth, abundance)); if (P_particle.get()) { - addParticleToLayout(result, particle_item, depth, abundance, *P_particle); + result->addParticle(*P_particle, depth, abundance); } } else if (children[i]->modelType() == Constants::ParticleCoreShellType) { + ParameterizedItem *coreshell_item = children[i]; boost::scoped_ptr<ParticleCoreShell> P_coreshell( - buildParticleCoreShell(*children[i], depth, abundance)); + buildParticleCoreShell(*coreshell_item, depth, abundance)); if (P_coreshell.get()) { result->addParticle(*P_coreshell, depth, abundance); } @@ -114,11 +115,12 @@ ParticleLayout *DomainObjectBuilder::buildParticleLayout(const ParameterizedItem boost::scoped_ptr<Particle> P_particle( buildParticle(*particle_item, depth, abundance)); if (P_particle.get()) { - addParticleToLayout(result, particle_item, depth, abundance, *P_particle); + result->addParticle(*P_particle, depth, abundance); } } else if (grandchildren[0]->modelType() == Constants::ParticleCoreShellType) { + ParameterizedItem *coreshell_item = grandchildren[0]; boost::scoped_ptr<ParticleCoreShell> P_coreshell( - buildParticleCoreShell(*grandchildren[0], depth, abundance)); + buildParticleCoreShell(*coreshell_item, depth, abundance)); if (P_coreshell.get()) { result->addParticle(*P_coreshell, depth, abundance); } @@ -132,9 +134,9 @@ ParticleLayout *DomainObjectBuilder::buildParticleLayout(const ParameterizedItem } } else if (children[i]->modelType() == Constants::ParticleCompositionType) { boost::scoped_ptr<ParticleComposition> P_part_coll( - buildParticleComposition(*children[i], abundance)); + buildParticleComposition(*children[i], depth, abundance)); if (P_part_coll.get()) { - result->addParticle(*P_part_coll, 0.0, abundance); + result->addParticle(*P_part_coll, depth, abundance); } } else if (children[i]->modelType().startsWith("InterferenceFunction")) { boost::scoped_ptr<IInterferenceFunction> P_interference( @@ -150,15 +152,10 @@ ParticleLayout *DomainObjectBuilder::buildParticleLayout(const ParameterizedItem return result; } -Particle *DomainObjectBuilder::buildParticle(const ParameterizedItem &item, double &depth, - double &abundance) const +void DomainObjectBuilder::setTransformationInfo(IParticle *result, double &depth, + const ParameterizedItem &item) const { - Particle *result = TransformToDomain::createParticle(item, depth, abundance); QList<ParameterizedItem *> children = item.childItems(); - if (children.size() > 1) { - throw GUIHelpers::Error("DomainObjectBuilder::buildParticle() " - "-> Error! ParticleItem has too many child items."); - } for (int i = 0; i < children.size(); ++i) { if (children[i]->modelType() == Constants::TransformationType) { RotationItem *rot_item = dynamic_cast<RotationItem *>( @@ -170,14 +167,29 @@ Particle *DomainObjectBuilder::buildParticle(const ParameterizedItem &item, doub } boost::scoped_ptr<IRotation> P_rotation(rot_item->createRotation()); if (P_rotation.get()) { - result->setTransformation(*P_rotation); + result->setRotation(*P_rotation); } - } else { - throw GUIHelpers::Error("DomainObjectBuilder::buildParticle() " - "-> Error! Not implemented"); + ParameterizedItem *pos_item + = children[i]->getSubItems()[TransformationItem::P_POS]; + double pos_x = pos_item->getRegisteredProperty(VectorItem::P_X).toDouble(); + double pos_y = pos_item->getRegisteredProperty(VectorItem::P_Y).toDouble(); + double pos_z = pos_item->getRegisteredProperty(VectorItem::P_Z).toDouble(); + if (pos_x != 0.0 || pos_y != 0.0) { + kvector_t position(pos_x, pos_y, pos_z - depth); + result->setPosition(position); + depth = 0.0; + } + break; } } - return result; +} + +Particle *DomainObjectBuilder::buildParticle(const ParameterizedItem &item, double &depth, + double &abundance) const +{ + Particle *p_result = TransformToDomain::createParticle(item, depth, abundance); + setTransformationInfo(p_result, depth, item); + return p_result; } ParticleCoreShell *DomainObjectBuilder::buildParticleCoreShell(const ParameterizedItem &item, @@ -203,18 +215,19 @@ ParticleCoreShell *DomainObjectBuilder::buildParticleCoreShell(const Parameteriz throw GUIHelpers::Error("DomainObjectBuilder::buildParticleCoreShell() -> Error. Either " "core or shell particle is undefined."); - ParticleCoreShell *result = TransformToDomain::createParticleCoreShell( + ParticleCoreShell *p_result = TransformToDomain::createParticleCoreShell( item, *coreParticle, *shellParticle, depth, abundance); + setTransformationInfo(p_result, depth, item); delete coreParticle; delete shellParticle; - return result; + return p_result; } ParticleComposition *DomainObjectBuilder::buildParticleComposition(const ParameterizedItem &item, - double &abundance) const + double &depth, double &abundance) const { - ParticleComposition *result - = TransformToDomain::createParticleComposition(item, abundance); + ParticleComposition *p_result + = TransformToDomain::createParticleComposition(item, depth, abundance); QList<ParameterizedItem *> children = item.childItems(); for (int i = 0; i < children.size(); ++i) { double tmp_depth(0.0), tmp_abundance(0.0); @@ -223,21 +236,22 @@ ParticleComposition *DomainObjectBuilder::buildParticleComposition(const Paramet boost::scoped_ptr<Particle> P_particle( buildParticle(*particle_item, tmp_depth, tmp_abundance)); if (P_particle.get()) { - addParticleToParticleComposition(result, particle_item, *P_particle); //TODO: add depth + addParticleToParticleComposition(p_result, particle_item, tmp_depth, *P_particle); } } else if (children[i]->modelType() == Constants::ParticleCoreShellType) { ParameterizedItem *particle_item = children[i]; boost::scoped_ptr<ParticleCoreShell> P_coreshell( buildParticleCoreShell(*children[i], tmp_depth, tmp_abundance)); if (P_coreshell.get()) { - addParticleToParticleComposition(result, particle_item, *P_coreshell); + addParticleToParticleComposition(p_result, particle_item, tmp_depth, *P_coreshell); } } else { throw GUIHelpers::Error("DomainObjectBuilder::buildParticleComposition()" " -> Error! Not implemented"); } } - return result; + setTransformationInfo(p_result, depth, item); + return p_result; } //! Creates ParticleDistribution from parameterized item. If catch_errors=true, then @@ -252,18 +266,20 @@ ParticleDistribution *DomainObjectBuilder::buildParticleDistribution(const Param if (children.size() == 0) { return p_result; } - if (children.size() > 1) { - throw GUIHelpers::Error("DomainObjectBuilder::buildParticleDistribution()" - " -> Error! Too many particles defined"); - } boost::scoped_ptr<IParticle> P_particle; - if (children[0]->modelType() == Constants::ParticleType) { - ParameterizedItem *particle_item = children[0]; - P_particle.reset(buildParticle(*particle_item, depth, abundance)); - } else if (children[0]->modelType() == Constants::ParticleCoreShellType) { - ParameterizedItem *particle_item = children[0]; - P_particle.reset(buildParticleCoreShell(*particle_item, depth, abundance)); + for(int i=0; i<children.size(); ++i) { + ParameterizedItem *p_child = children[i]; + if (p_child->modelType() == Constants::ParticleType) { + P_particle.reset(buildParticle(*p_child, depth, abundance)); + if (depth!=0) P_particle->setPosition(kvector_t(0.0, 0.0, -depth)); + break; + } else if (p_child->modelType() == Constants::ParticleCoreShellType) { + P_particle.reset(buildParticleCoreShell(*p_child, depth, abundance)); + if (depth!=0) P_particle->setPosition(kvector_t(0.0, 0.0, -depth)); + break; + } } + if (!P_particle.get()) { throw GUIHelpers::Error("DomainObjectBuilder::buildParticleDistribution()" " -> Error! No correct particle defined"); @@ -295,6 +311,7 @@ ParticleDistribution *DomainObjectBuilder::buildParticleDistribution(const Param ParameterDistribution par_distr(par_name.toStdString(), *distr, nbr_samples, sigma_factor); delete distr; p_result = new ParticleDistribution(*P_particle, par_distr); + setTransformationInfo(p_result, depth, item); return p_result; } @@ -331,42 +348,11 @@ Beam *DomainObjectBuilder::buildBeam(const ParameterizedItem &item) const return result; } -void DomainObjectBuilder::addParticleToLayout(ParticleLayout *result, - ParameterizedItem *particle_item, double depth, - double abundance, const Particle &particle) const -{ - QList<ParameterizedItem *> particle_children = particle_item->childItems(); - if (particle_children.size() > 1) { - throw GUIHelpers::Error("DomainObjectBuilder::addParticleToLayout() " - "-> Error! ParticleItem has too many child items."); - } else if (particle_children.size() == 0) { - result->addParticle(particle, depth, abundance); - } else { - if (particle_children[0]->modelType() == Constants::TransformationType) { - ParameterizedItem *pos_item - = particle_children[0]->getSubItems()[TransformationItem::P_POS]; - double pos_x = pos_item->getRegisteredProperty(VectorItem::P_X).toDouble(); - double pos_y = pos_item->getRegisteredProperty(VectorItem::P_Y).toDouble(); - double pos_z = pos_item->getRegisteredProperty(VectorItem::P_Z).toDouble(); - if (pos_x != 0.0 || pos_y != 0.0 || pos_z != 0.0) { - kvector_t position(pos_x, pos_y, pos_z); - ParticleInfo particle_info(particle, position, abundance); - result->addParticleInfo(particle_info); - } else { - result->addParticle(particle, depth, abundance); - } - } else { - throw GUIHelpers::Error("DomainObjectBuilder::addParticleToLayout() " - "-> Error! Not implemented"); - } - } -} - void DomainObjectBuilder::addParticleToParticleComposition(ParticleComposition *result, ParameterizedItem *particle_item, + double depth, const IParticle &particle) const { - double depth = particle_item->getRegisteredProperty(ParticleItem::P_DEPTH).toDouble(); QList<ParameterizedItem *> particle_children = particle_item->childItems(); kvector_t position; if (particle_children.size() == 1 diff --git a/GUI/coregui/Models/DomainObjectBuilder.h b/GUI/coregui/Models/DomainObjectBuilder.h index f768170d70a0007bd09f2c11bc0868d493d40f7e..8b85e49a2b8a2995eaa6f41537613f4291dd40fe 100644 --- a/GUI/coregui/Models/DomainObjectBuilder.h +++ b/GUI/coregui/Models/DomainObjectBuilder.h @@ -51,7 +51,7 @@ public: ParticleCoreShell *buildParticleCoreShell(const ParameterizedItem &item, double &depth, double &abundance) const; ParticleComposition *buildParticleComposition(const ParameterizedItem &item, - double &abundance) const; + double &depth, double &abundance) const; ParticleDistribution *buildParticleDistribution(const ParameterizedItem &item, double &depth, double &abundance, bool catch_errors=false) const; @@ -59,10 +59,9 @@ public: Beam *buildBeam(const ParameterizedItem &item) const; private: - void addParticleToLayout(ParticleLayout *result, ParameterizedItem *particle_item, double depth, - double abundance, const Particle &particle) const; + void setTransformationInfo(IParticle *result, double &depth, const ParameterizedItem &item) const; void addParticleToParticleComposition(ParticleComposition *result, - ParameterizedItem *particle_item, + ParameterizedItem *particle_item, double depth, const IParticle &particle) const; }; diff --git a/GUI/coregui/Models/GUIObjectBuilder.cpp b/GUI/coregui/Models/GUIObjectBuilder.cpp index f09ca7c7b196cdf10dd92419ac28f99af73dcdeb..11c1e363a306333fc60ce7133b736b1c282cddbd 100644 --- a/GUI/coregui/Models/GUIObjectBuilder.cpp +++ b/GUI/coregui/Models/GUIObjectBuilder.cpp @@ -213,93 +213,27 @@ void GUIObjectBuilder::visit(const Particle *sample) particleItem = m_sampleModel->insertNewItem(Constants::ParticleType, m_sampleModel->indexOfItem(parent), -1, ParameterizedItem::PortInfo::PORT_0); - const IRotation *p_rotation = sample->getRotation(); - if (p_rotation) { - m_sampleModel->insertNewItem(Constants::TransformationType, - m_sampleModel->indexOfItem(particleItem)); - } } else if(sample == coreshell->getShellParticle()) { particleItem = m_sampleModel->insertNewItem(Constants::ParticleType, m_sampleModel->indexOfItem(parent), -1, ParameterizedItem::PortInfo::PORT_1); - const IRotation *p_rotation = sample->getRotation(); - if (p_rotation) { - m_sampleModel->insertNewItem(Constants::TransformationType, - m_sampleModel->indexOfItem(particleItem)); - } } else { throw GUIHelpers::Error("GUIObjectBuilder::visit" "(const Particle *sample) -> Error. Logically should not be here"); } - } - else if(parent->modelType() == Constants::ParticleCompositionType){ - const ParticleComposition *particle_composition = - dynamic_cast<const ParticleComposition *>(m_itemToSample[parent]); - Q_ASSERT(particle_composition); - size_t index = 0; - for (size_t i=0; i<particle_composition->getNbrParticles(); ++i) { - if (sample == particle_composition->getParticle(i)) { - index = i; - } - } - if (index == 0 && sample != particle_composition->getParticle(0)) { - throw GUIHelpers::Error("GUIObjectBuilder::visit" - "(const Particle *sample) -> Error. Particle is not part of" - " ParticleComposition"); - } - kvector_t position = particle_composition->getParticlePosition(index); - particleItem = m_sampleModel->insertNewItem(Constants::ParticleType, - m_sampleModel->indexOfItem(parent) ); - ParameterizedItem *transformation_item = - m_sampleModel->insertNewItem(Constants::TransformationType, - m_sampleModel->indexOfItem(particleItem)); - ParameterizedItem *p_position_item = - transformation_item->getSubItems()[TransformationItem::P_POS]; - p_position_item->setRegisteredProperty(VectorItem::P_X, position.x()); - p_position_item->setRegisteredProperty(VectorItem::P_Y, position.y()); - p_position_item->setRegisteredProperty(VectorItem::P_Z, position.z()); - } - else if(parent->modelType() == Constants::ParticleLayoutType + } else if(parent->modelType() == Constants::ParticleCompositionType + || parent->modelType() == Constants::ParticleLayoutType || parent->modelType() == Constants::ParticleDistributionType) { particleItem = m_sampleModel->insertNewItem(Constants::ParticleType, m_sampleModel->indexOfItem(parent)); - bool has_position_info = m_sample_encountered[ - Constants::TransformationType]; - const IRotation *p_rotation = sample->getRotation(); - if (has_position_info || p_rotation) { - ParameterizedItem *transformation_item = - m_sampleModel->insertNewItem(Constants::TransformationType, - m_sampleModel->indexOfItem(particleItem)); - if (has_position_info) { - ParameterizedItem *p_position_item = - transformation_item->getSubItems()[TransformationItem::P_POS]; - p_position_item->setRegisteredProperty(VectorItem::P_X, - m_propertyToValue[VectorItem::P_X]); - p_position_item->setRegisteredProperty(VectorItem::P_Y, - m_propertyToValue[VectorItem::P_Y]); - p_position_item->setRegisteredProperty(VectorItem::P_Z, - m_propertyToValue[VectorItem::P_Z]); - m_sample_encountered[Constants::TransformationType] = false; - } - } - } - else { + } else { throw GUIHelpers::Error("GUIObjectBuilder::visit" "(const Particle *sample) -> Logic error."); } - if(!m_propertyToValue.contains(ParticleItem::P_DEPTH)) - throw GUIHelpers::Error("GUIObjectBuilder::visit" - "(const Particle *sample) -> Error. No depth property."); - if(!m_propertyToValue.contains(ParticleItem::P_ABUNDANCE)) - throw GUIHelpers::Error("GUIObjectBuilder::visit" - "(const Particle *sample) -> Error. No abundance property."); + buildTransformationInfo(particleItem, sample); - particleItem->setRegisteredProperty(ParticleItem::P_DEPTH, - m_propertyToValue[ParticleItem::P_DEPTH]); - particleItem->setRegisteredProperty(ParticleItem::P_ABUNDANCE, - m_propertyToValue[ParticleItem::P_ABUNDANCE]); particleItem->setItemName(sample->getName().c_str()); particleItem->setRegisteredProperty(ParticleItem::P_MATERIAL, createMaterialFromDomain(sample->getMaterial()).getVariant()); @@ -317,6 +251,8 @@ void GUIObjectBuilder::visit(const ParticleDistribution *sample) m_sampleModel->insertNewItem(Constants::ParticleDistributionType, m_sampleModel->indexOfItem(layoutItem)); Q_ASSERT(item); + buildTransformationInfo(item, sample); + TransformFromDomain::setItemFromSample(item, sample); m_levelToParentItem[getLevel()] = item; m_itemToSample[item] = sample; @@ -333,18 +269,8 @@ void GUIObjectBuilder::visit(const ParticleCoreShell *sample) ParameterizedItem *coreshellItem = m_sampleModel->insertNewItem(Constants::ParticleCoreShellType, m_sampleModel->indexOfItem(parent)); + buildTransformationInfo(coreshellItem, sample); - if(!m_propertyToValue.contains(ParticleItem::P_DEPTH)) - throw GUIHelpers::Error("GUIObjectBuilder::visit" - "(const ParticleCoreShell *sample) -> Error. No depth property."); - if(!m_propertyToValue.contains(ParticleItem::P_ABUNDANCE)) - throw GUIHelpers::Error("GUIObjectBuilder::visit" - "(const ParticleCoreShell *sample) -> Error. No abundance property."); - - coreshellItem->setRegisteredProperty(ParticleItem::P_DEPTH, - m_propertyToValue[ParticleItem::P_DEPTH]); - coreshellItem->setRegisteredProperty(ParticleItem::P_ABUNDANCE, - m_propertyToValue[ParticleItem::P_ABUNDANCE]); coreshellItem->setItemName(sample->getName().c_str()); kvector_t pos = sample->getRelativeCorePosition(); @@ -362,21 +288,17 @@ void GUIObjectBuilder::visit(const ParticleCoreShell *sample) void GUIObjectBuilder::visit(const ParticleComposition *sample) { qDebug() << "GUIObjectBuilder::visit(const ParticleComposition *)" << getLevel(); + ParameterizedItem *parent = m_levelToParentItem[getLevel()-1]; - ParameterizedItem *item(0); - if(parent) { - item = m_sampleModel->insertNewItem(Constants::ParticleCompositionType, + Q_ASSERT(parent); + ParameterizedItem *particle_composition_item = m_sampleModel->insertNewItem( + Constants::ParticleCompositionType, m_sampleModel->indexOfItem(parent)); - } else { - item = m_sampleModel->insertNewItem(Constants::ParticleCompositionType); - } - item->setItemName(sample->getName().c_str()); + buildTransformationInfo(particle_composition_item, sample); - item->setRegisteredProperty(ParticleItem::P_ABUNDANCE, - m_propertyToValue[ParticleItem::P_ABUNDANCE]); - - m_levelToParentItem[getLevel()] = item; - m_itemToSample[item] = sample; + particle_composition_item->setItemName(sample->getName().c_str()); + m_levelToParentItem[getLevel()] = particle_composition_item; + m_itemToSample[particle_composition_item] = sample; } void GUIObjectBuilder::visit(const ParticleInfo *sample) @@ -385,16 +307,6 @@ void GUIObjectBuilder::visit(const ParticleInfo *sample) ParameterizedItem *parent = m_levelToParentItem[getLevel()-1]; Q_ASSERT(parent); m_propertyToValue[ParticleItem::P_ABUNDANCE] = sample->getAbundance(); - kvector_t position = sample->getPosition(); - if (position.x()!=0.0 || position.y()!=0.0) { - m_sample_encountered[Constants::TransformationType] = true; - m_propertyToValue[VectorItem::P_X] = position.x(); - m_propertyToValue[VectorItem::P_Y] = position.y(); - m_propertyToValue[VectorItem::P_Z] = position.z(); - m_propertyToValue[ParticleItem::P_DEPTH] = 0.0; - } else { - m_propertyToValue[ParticleItem::P_DEPTH] = sample->getDepth(); - } m_levelToParentItem[getLevel()] = parent; } @@ -746,6 +658,44 @@ void GUIObjectBuilder::visit(const RotationEuler *sample) m_levelToParentItem[getLevel()] = transformation_item; } +void GUIObjectBuilder::buildTransformationInfo(ParameterizedItem *particleItem, + const IParticle *sample) +{ + kvector_t position = sample->getPosition(); + bool has_position_info = (position.x()!=0.0 || position.y()!=0.0); + const IRotation *p_rotation = sample->getRotation(); + if (has_position_info || p_rotation) { + ParameterizedItem *transformation_item = + m_sampleModel->insertNewItem(Constants::TransformationType, + m_sampleModel->indexOfItem(particleItem)); + if (has_position_info) { + ParameterizedItem *p_position_item = + transformation_item->getSubItems()[TransformationItem::P_POS]; + p_position_item->setRegisteredProperty(VectorItem::P_X, + sample->getPosition().x()); + p_position_item->setRegisteredProperty(VectorItem::P_Y, + sample->getPosition().y()); + p_position_item->setRegisteredProperty(VectorItem::P_Z, + sample->getPosition().z()); + } + } + if (has_position_info) { + particleItem->setRegisteredProperty(ParticleItem::P_DEPTH, 0.0); + } else { + particleItem->setRegisteredProperty(ParticleItem::P_DEPTH, sample->getDepth()); + } + ParameterizedItem *parent = m_levelToParentItem[getLevel()-1]; + Q_ASSERT(parent); + if(parent->modelType() == Constants::ParticleLayoutType) { + if(!m_propertyToValue.contains(ParticleItem::P_ABUNDANCE)) + throw GUIHelpers::Error("GUIObjectBuilder::buildTransformationInfo: " + "Error. No abundance property and parent is Layout"); + + particleItem->setRegisteredProperty(ParticleItem::P_ABUNDANCE, + m_propertyToValue[ParticleItem::P_ABUNDANCE]); + } +} + MaterialProperty GUIObjectBuilder::createMaterialFromDomain( const IMaterial *material) { diff --git a/GUI/coregui/Models/GUIObjectBuilder.h b/GUI/coregui/Models/GUIObjectBuilder.h index f81705502c846df39ab7c72051864fa7129cb623..515796e1a5ad7eda1f815ed71ec464f61b86da32 100644 --- a/GUI/coregui/Models/GUIObjectBuilder.h +++ b/GUI/coregui/Models/GUIObjectBuilder.h @@ -96,6 +96,7 @@ public: void visit(const RotationEuler *); private: + void buildTransformationInfo(ParameterizedItem *particleItem, const IParticle *sample); MaterialProperty createMaterialFromDomain(const IMaterial *); SampleModel *m_sampleModel; diff --git a/GUI/coregui/Models/ParticleCompositionItem.cpp b/GUI/coregui/Models/ParticleCompositionItem.cpp index 92f58407d257057ccb793012b9e9805595868904..377355fccf0d109d6d430b3ffef96a966975e681 100644 --- a/GUI/coregui/Models/ParticleCompositionItem.cpp +++ b/GUI/coregui/Models/ParticleCompositionItem.cpp @@ -22,6 +22,8 @@ ParticleCompositionItem::ParticleCompositionItem(ParameterizedItem *parent) setItemName(Constants::ParticleCompositionType); setItemPort(ParameterizedItem::PortInfo::PORT_0); + registerProperty(ParticleItem::P_DEPTH, 0.0, + PropertyAttribute(AttLimits::limited(-10000.0, 10000.0), 2)); registerProperty(ParticleItem::P_ABUNDANCE, 1.0, PropertyAttribute(AttLimits::limited(0.0, 1.0),3)); diff --git a/GUI/coregui/Models/ParticleCoreShellItem.cpp b/GUI/coregui/Models/ParticleCoreShellItem.cpp index 39d996aa09ca21e38495b279d16e4f12c1cac5b0..6654fa7cebe8c5328801f3efe1b690cd0acc5f4e 100644 --- a/GUI/coregui/Models/ParticleCoreShellItem.cpp +++ b/GUI/coregui/Models/ParticleCoreShellItem.cpp @@ -26,7 +26,8 @@ ParticleCoreShellItem::ParticleCoreShellItem(ParameterizedItem *parent) { setItemName(Constants::ParticleCoreShellType); setItemPort(ParameterizedItem::PortInfo::PORT_0); - registerProperty(ParticleItem::P_DEPTH, 0.0); + registerProperty(ParticleItem::P_DEPTH, 0.0, + PropertyAttribute(AttLimits::limited(-10000.0, 10000.0), 2)); registerProperty(ParticleItem::P_ABUNDANCE, 1.0, PropertyAttribute(AttLimits::limited(0.0, 1.0),3)); diff --git a/GUI/coregui/Models/ParticleDistributionItem.cpp b/GUI/coregui/Models/ParticleDistributionItem.cpp index 82ad2b7728b2bcc61133b28b43855f98b371f16e..944fa0a0051ed4ebfc7a05d21bbf0634be782be4 100644 --- a/GUI/coregui/Models/ParticleDistributionItem.cpp +++ b/GUI/coregui/Models/ParticleDistributionItem.cpp @@ -34,6 +34,8 @@ ParticleDistributionItem::ParticleDistributionItem(ParameterizedItem *parent) setItemName(Constants::ParticleDistributionType); setItemPort(ParameterizedItem::PortInfo::PORT_0); + registerProperty(ParticleItem::P_DEPTH, 0.0, + PropertyAttribute(AttLimits::limited(-10000.0, 10000.0), 2)); registerProperty(ParticleItem::P_ABUNDANCE, 1.0, PropertyAttribute(AttLimits::limited(0.0, 1.0), 3)); diff --git a/GUI/coregui/Models/TransformToDomain.cpp b/GUI/coregui/Models/TransformToDomain.cpp index 17a306905f9e1eeb68d417e986830743f1581afd..fa9cdd60ca04070356b9549f5df7f414f5523cab 100644 --- a/GUI/coregui/Models/TransformToDomain.cpp +++ b/GUI/coregui/Models/TransformToDomain.cpp @@ -376,8 +376,9 @@ ParticleCoreShell *TransformToDomain::createParticleCoreShell(const Parameterize ParticleComposition *TransformToDomain::createParticleComposition(const ParameterizedItem &item, - double &abundance) + double &depth, double &abundance) { + depth = item.getRegisteredProperty(ParticleItem::P_DEPTH).toDouble(); abundance = item.getRegisteredProperty(ParticleItem::P_ABUNDANCE).toDouble(); ParticleComposition *result = new ParticleComposition(); return result; diff --git a/GUI/coregui/Models/TransformToDomain.h b/GUI/coregui/Models/TransformToDomain.h index d1f79cf7715b505f6282e9a693701680b0392ccd..024ae274a1cde84e101f424ec4bfc1374a836ed2 100644 --- a/GUI/coregui/Models/TransformToDomain.h +++ b/GUI/coregui/Models/TransformToDomain.h @@ -32,7 +32,7 @@ BA_CORE_API_ Particle *createParticle(const ParameterizedItem &item, BA_CORE_API_ ParticleCoreShell *createParticleCoreShell(const ParameterizedItem &item, const Particle &core, const Particle &shell, double &depth, double &abundance); BA_CORE_API_ ParticleComposition *createParticleComposition(const ParameterizedItem &item, - double &abundance); + double &depth, double &abundance); BA_CORE_API_ IFormFactor *createFormFactor(const ParameterizedItem &item); BA_CORE_API_ IDistribution1D * createDistribution( const ParameterizedItem &item); diff --git a/Tests/FunctionalTests/TestPyCore/isgisaxs06.py b/Tests/FunctionalTests/TestPyCore/isgisaxs06.py index 6ec57aa2eaad4471aa2f6ea720d21ff0d11ff0b0..5a0c6e4c149489562effec626941b2ea510c26bd 100644 --- a/Tests/FunctionalTests/TestPyCore/isgisaxs06.py +++ b/Tests/FunctionalTests/TestPyCore/isgisaxs06.py @@ -178,8 +178,8 @@ def build_sample(xi_value): ff_cyl = FormFactorCylinder(5.0*nanometer, 5.0*nanometer) position = kvector_t(0.0, 0.0, 0.0) cylinder = Particle(mParticle, ff_cyl.clone()) - particle_info = ParticleInfo( cylinder, position, 1.0) - particle_layout.addParticleInfo(particle_info) + cylinder.setPosition(position) + particle_layout.addParticle(cylinder) particle_layout.addInterferenceFunction(p_interference_function) air_layer.addLayout(particle_layout) diff --git a/Tests/FunctionalTests/TestPyCore/isgisaxs07.py b/Tests/FunctionalTests/TestPyCore/isgisaxs07.py index ba02d1ea3e177f00f247aff7385994d4e3a64a5a..0c7490d353e4ca2ff998a3e4c308f2deac7360c9 100644 --- a/Tests/FunctionalTests/TestPyCore/isgisaxs07.py +++ b/Tests/FunctionalTests/TestPyCore/isgisaxs07.py @@ -24,74 +24,74 @@ def RunSimulation(): particle_layout = ParticleLayout() # add particle number 1: - ff1 = FormFactorBox(2.0*nanometer, 2.0*nanometer,1.0*nanometer) + ff1 = FormFactorBox(2.0*nanometer, 2.0*nanometer, 1.0*nanometer) pos1 = kvector_t(0.0*nanometer, 0.0*nanometer, 0.0) particle1 = Particle(mParticle, ff1) - particle_info1 = ParticleInfo(particle1, pos1, 0.5) - particle_layout.addParticleInfo(particle_info1) + particle1.setPosition(pos1) + particle_layout.addParticle(particle1, 0.0, 0.5) #add particle number 2: - ff2 = FormFactorBox(2.0*nanometer, 4.0*nanometer,1.0*nanometer) + ff2 = FormFactorBox(2.0*nanometer, 4.0*nanometer, 1.0*nanometer) pos2 = kvector_t(5.0*nanometer, 5.0*nanometer, 0.0) p_rot2 = RotationZ(10*degree) particle2 = Particle(mParticle, ff2, p_rot2) - particle_info2 = ParticleInfo(particle2, pos2, 0.5) - particle_layout.addParticleInfo(particle_info2) + particle2.setPosition(pos2) + particle_layout.addParticle(particle2, 0.0, 0.5) #add particle number 3: - ff3 = FormFactorBox(2.0*nanometer, 6.0*nanometer,1.0*nanometer) + ff3 = FormFactorBox(2.0*nanometer, 6.0*nanometer, 1.0*nanometer) pos3 = kvector_t(-5.0*nanometer, -5.0*nanometer, 0.0) p_rot3 = RotationZ(20*degree) particle3 = Particle(mParticle, ff3, p_rot3) - particle_info3 = ParticleInfo(particle3, pos3, 0.5) - particle_layout.addParticleInfo(particle_info3) + particle3.setPosition(pos3) + particle_layout.addParticle(particle3, 0.0, 0.5) #add particle number 4: - ff4 = FormFactorBox(2.0*nanometer, 8.0*nanometer,1.0*nanometer) + ff4 = FormFactorBox(2.0*nanometer, 8.0*nanometer, 1.0*nanometer) pos4 = kvector_t(5.0*nanometer, -5.0*nanometer, 0.0) p_rot4 = RotationZ(30*degree) particle4 = Particle(mParticle, ff4, p_rot4) - particle_info4 = ParticleInfo(particle4, pos4, 0.5) - particle_layout.addParticleInfo(particle_info4) + particle4.setPosition(pos4) + particle_layout.addParticle(particle4, 0.0, 0.5) #add particle number 5: - ff5 = FormFactorBox(2.0*nanometer, 10.0*nanometer,1.0*nanometer) + ff5 = FormFactorBox(2.0*nanometer, 10.0*nanometer, 1.0*nanometer) pos5 = kvector_t(-5.0*nanometer, 5.0*nanometer, 0.0) p_rot5 = RotationZ(40*degree) particle5 = Particle(mParticle, ff5, p_rot5) - particle_info5 = ParticleInfo(particle5, pos5, 0.5) - particle_layout.addParticleInfo(particle_info5) + particle5.setPosition(pos5) + particle_layout.addParticle(particle5, 0.0, 0.5) #add particle number 6: - ff6 = FormFactorBox(2.0*nanometer, 2.0*nanometer,1.0*nanometer) + ff6 = FormFactorBox(2.0*nanometer, 2.0*nanometer, 1.0*nanometer) pos6 = kvector_t(0.0*nanometer, 0.0*nanometer, 0.0) p_rot6 = RotationZ(50*degree) particle6 = Particle(mParticle, ff6, p_rot6) - particle_info6 = ParticleInfo(particle6, pos6, 0.5) - particle_layout.addParticleInfo(particle_info6) + particle6.setPosition(pos6) + particle_layout.addParticle(particle6, 0.0, 0.5) #add particle number 7: - ff7 = FormFactorBox(2.0*nanometer, 4.0*nanometer,1.0*nanometer) + ff7 = FormFactorBox(2.0*nanometer, 4.0*nanometer, 1.0*nanometer) pos7 = kvector_t(5.0*nanometer, 5.0*nanometer, 0.0) p_rot7 = RotationZ(60*degree) particle7 = Particle(mParticle, ff7, p_rot7) - particle_info7 = ParticleInfo(particle7, pos7, 0.5) - particle_layout.addParticleInfo(particle_info7) + particle7.setPosition(pos7) + particle_layout.addParticle(particle7, 0.0, 0.5) #add particle number 8: - ff8 = FormFactorBox(2.0*nanometer, 6.0*nanometer,1.0*nanometer) + ff8 = FormFactorBox(2.0*nanometer, 6.0*nanometer, 1.0*nanometer) pos8 = kvector_t(-5.0*nanometer, -5.0*nanometer, 0.0) p_rot8 = RotationZ(70*degree) particle8 = Particle(mParticle, ff8, p_rot8) - particle_info8 = ParticleInfo(particle8 , pos8, 0.5) - particle_layout.addParticleInfo(particle_info8) + particle8.setPosition(pos8) + particle_layout.addParticle(particle8, 0.0, 0.5) #add particle number 9: - ff9 = FormFactorBox(2.0*nanometer, 8.0*nanometer,1.0*nanometer) + ff9 = FormFactorBox(2.0*nanometer, 8.0*nanometer, 1.0*nanometer) pos9 = kvector_t(5.0*nanometer, -5.0*nanometer, 0.0) p_rot9 = RotationZ(80*degree) particle9 = Particle(mParticle, ff9, p_rot9) - particle_info9 = ParticleInfo(particle9, pos9, 0.5) - particle_layout.addParticleInfo(particle_info9) + particle9.setPosition(pos9) + particle_layout.addParticle(particle9, 0.0, 0.5) #add particle number 10: - ff10 = FormFactorBox(2.0*nanometer, 10.0*nanometer,1.0*nanometer) + ff10 = FormFactorBox(2.0*nanometer, 10.0*nanometer, 1.0*nanometer) pos10 = kvector_t(-5.0*nanometer, 5.0*nanometer, 0.0) p_rot10 = RotationZ(90*degree) particle10 = Particle(mParticle, ff10, p_rot10) - particle_info10 = ParticleInfo(particle10, pos10, 0.5) - particle_layout.addParticleInfo(particle_info10) + particle10.setPosition(pos10) + particle_layout.addParticle(particle10, 0.0, 0.5) particle_layout.setApproximation(ILayout.ISGISAXSMOR) diff --git a/Tests/FunctionalTests/TestPyCore/mesocrystal1.py b/Tests/FunctionalTests/TestPyCore/mesocrystal1.py index 795233ad018484c4c07c67ea635a3d95c00355bb..b625c6d7c08fd324ac99bd8625241630be1b2c96 100644 --- a/Tests/FunctionalTests/TestPyCore/mesocrystal1.py +++ b/Tests/FunctionalTests/TestPyCore/mesocrystal1.py @@ -118,8 +118,6 @@ class MySampleBuilder(ISampleBuilder): ff_sphere = FormFactorSphereGaussianRadius(self.nanoparticle_radius.value, self.sigma_nanoparticle_radius.value) particle = Particle(mParticle, ff_sphere ) position_0 = kvector_t(0.0, 0.0, 0.0) - position_1 = kvector_t(0.0, 0.0, 0.0) - position_2 = kvector_t(0.0, 0.0, 0.0) position_1 = 1.0/3.0*(2.0*bas_a + bas_b + bas_c) position_2 = 1.0/3.0*(bas_a + 2.0*bas_b + 2.0*bas_c) positions = [ position_0, position_1, position_2 ] diff --git a/Tests/UnitTests/TestCore/ParticleCoreShellTest.h b/Tests/UnitTests/TestCore/ParticleCoreShellTest.h index e5f703b0a1255994e1f47629fe55675ba6b590fd..47edc373b2a7da8096a31c06095f3d41598f23ae 100644 --- a/Tests/UnitTests/TestCore/ParticleCoreShellTest.h +++ b/Tests/UnitTests/TestCore/ParticleCoreShellTest.h @@ -75,7 +75,7 @@ TEST_F(ParticleCoreShellTest, Transform) { kvector_t zero_vector; RotationZ transform(1.0); - mp_coreshell->setTransformation(transform); + mp_coreshell->setRotation(transform); EXPECT_EQ(NULL, mp_coreshell->getAmbientMaterial()); EXPECT_EQ(NULL, mp_coreshell->createFormFactor(1.0)); Geometry::Transform3D transform_2 = mp_coreshell->getRotation()->getTransform3D(); diff --git a/Tests/UnitTests/TestCore/ParticleInfoTest.h b/Tests/UnitTests/TestCore/ParticleInfoTest.h index 9449de8a5e79918e9e1e5519488e6e907ce623c7..33c36ac4b2ae535a6c3d914f4978f78bcef9aa03 100644 --- a/Tests/UnitTests/TestCore/ParticleInfoTest.h +++ b/Tests/UnitTests/TestCore/ParticleInfoTest.h @@ -30,12 +30,6 @@ TEST_F(ParticleInfoTest , ParticleInfoInitialState) particleInfo.setAbundance(2.0); EXPECT_EQ(position, particleInfo.getPosition()); EXPECT_EQ(2.0, particleInfo.getAbundance()); - - ParticleInfo particleInfo2(particle,2.0,3.0); - - EXPECT_EQ(-2.0, particleInfo2.getPosition().z()); - EXPECT_EQ(3.0, particleInfo2.getAbundance()); - EXPECT_EQ("ParticleInfo", particleInfo2.getName()); } @@ -46,10 +40,8 @@ TEST_F(ParticleInfoTest , ParticleInfoTestPool) ParticleInfo particleInfo(particle); - particleInfo.setParameterValue("/ParticleInfo/depth",4.1); particleInfo.setParameterValue("/ParticleInfo/abundance",4.2); - EXPECT_EQ(4.1, particleInfo.getDepth()); EXPECT_EQ(4.2, particleInfo.getAbundance()); EXPECT_EQ("ParticleInfo", particleInfo.getName()); } @@ -62,10 +54,9 @@ TEST_F(ParticleInfoTest , ParticleInfoInitialStateClonedParticle) Particle particle; Particle *pClone = particle.clone(); - ParticleInfo particleInfo(*pClone,2.0,3.0); + ParticleInfo particleInfo(*pClone,3.0); delete pClone; - EXPECT_EQ(2.0, particleInfo.getDepth()); EXPECT_EQ(3.0, particleInfo.getAbundance()); EXPECT_EQ("ParticleInfo", particleInfo.getName()); } @@ -76,7 +67,7 @@ TEST_F(ParticleInfoTest , ParticleInfoClone) //test with default parameter Particle particle; - ParticleInfo original(particle, 1.0,2.0); + ParticleInfo original(particle, 2.0); ParticleInfo *clone = original.clone(); EXPECT_EQ(clone->getDepth(), original.getDepth()); @@ -92,7 +83,7 @@ TEST_F(ParticleInfoTest , ParticleInfoCloneInvertB) { HomogeneousMaterial mat("Air",0,0); Particle particle2(mat); - ParticleInfo particle_info2(particle2, 1.0,2.0); + ParticleInfo particle_info2(particle2, 2.0); ParticleInfo *clone = particle_info2.cloneInvertB(); EXPECT_EQ(clone->getDepth(), particle_info2.getDepth()); EXPECT_EQ(clone->getAbundance(), particle_info2.getAbundance()); diff --git a/Tests/UnitTests/TestCore/ParticleLayoutTest.h b/Tests/UnitTests/TestCore/ParticleLayoutTest.h index 8564d06ddd01038f517597ea3c9356b94438bb59..6486244c4fc5b554c13bdd17c156ab4f08728e56 100644 --- a/Tests/UnitTests/TestCore/ParticleLayoutTest.h +++ b/Tests/UnitTests/TestCore/ParticleLayoutTest.h @@ -34,10 +34,10 @@ TEST_F(ParticleLayoutTest, ParticleLayoutInitByValue) EXPECT_EQ(size_t(0), particleDecoration.getNumberOfInterferenceFunctions()); - const ParticleInfo * pInfo = particleDecoration.getParticleInfo(size_t(0)); - EXPECT_TRUE(NULL!=pInfo); - EXPECT_EQ(1.0, pInfo->getDepth()); - EXPECT_EQ(2.0, pInfo->getAbundance()); + const IParticle * p_particle = particleDecoration.getParticle(size_t(0)); + EXPECT_TRUE(NULL!=p_particle); + EXPECT_EQ(1.0, p_particle->getDepth()); + EXPECT_EQ(2.0, particleDecoration.getAbundanceOfParticle(size_t(0))); EXPECT_EQ(size_t(0), particleDecoration.getNumberOfInterferenceFunctions()); @@ -55,10 +55,10 @@ TEST_F(ParticleLayoutTest, ParticleLayoutInitByRef) EXPECT_EQ(size_t(0), particleDecoration.getNumberOfInterferenceFunctions()); - const ParticleInfo * pInfo = particleDecoration.getParticleInfo(size_t(0)); - EXPECT_TRUE(NULL!=pInfo); - EXPECT_EQ(3.0, pInfo->getDepth()); - EXPECT_EQ(-2.0, pInfo->getAbundance()); + const IParticle * p_particle = particleDecoration.getParticle(size_t(0)); + EXPECT_TRUE(NULL!=p_particle); + EXPECT_EQ(3.0, p_particle->getDepth()); + EXPECT_EQ(-2.0, particleDecoration.getAbundanceOfParticle(size_t(0))); } @@ -67,26 +67,24 @@ TEST_F(ParticleLayoutTest, ParticleLayoutAddParticleInfo) ParticleLayout particleDecoration; Particle particle; - ParticleInfo particleInfo(particle, 0.1,-2.0); - particleDecoration.addParticleInfo(particleInfo); + particleDecoration.addParticle(particle, 0.1, -2.0); EXPECT_EQ(size_t(1), particleDecoration.getNumberOfParticles()); Particle particle2; - ParticleInfo particleInfo2(particle2, 5.0,0.1); - particleDecoration.addParticleInfo(particleInfo2); + particleDecoration.addParticle(particle2, 5.0,0.1); EXPECT_EQ(size_t(2), particleDecoration.getNumberOfParticles()); - const ParticleInfo * pInfo = particleDecoration.getParticleInfo(size_t(0)); - EXPECT_TRUE(NULL!=pInfo); - EXPECT_EQ(0.1, pInfo->getDepth()); - EXPECT_EQ(-2.0, pInfo->getAbundance()); + const IParticle * p_particle = particleDecoration.getParticle(size_t(0)); + EXPECT_TRUE(NULL!=p_particle); + EXPECT_EQ(0.1, p_particle->getDepth()); + EXPECT_EQ(-2.0, particleDecoration.getAbundanceOfParticle(size_t(0))); - const ParticleInfo * pInfo2 = particleDecoration.getParticleInfo(size_t(1)); - EXPECT_TRUE(NULL!=pInfo2); - EXPECT_EQ(5.0, pInfo2->getDepth()); - EXPECT_EQ(0.1, pInfo2->getAbundance()); + const IParticle * p_particle2 = particleDecoration.getParticle(size_t(1)); + EXPECT_TRUE(NULL!=p_particle2); + EXPECT_EQ(5.0, p_particle2->getDepth()); + EXPECT_EQ(0.1, particleDecoration.getAbundanceOfParticle(size_t(1))); } @@ -109,29 +107,29 @@ TEST_F(ParticleLayoutTest, ParticleLayoutAddParticle) EXPECT_EQ(size_t(4), particleDecoration.getNumberOfParticles()); - const ParticleInfo * pInfo1 = particleDecoration.getParticleInfo(size_t(0)); - EXPECT_TRUE(NULL!=pInfo1); - EXPECT_EQ(0.0, pInfo1->getDepth()); - EXPECT_EQ(1.0, pInfo1->getAbundance()); - EXPECT_TRUE(NULL == pInfo1->getParticle()->getRotation()); - - const ParticleInfo * pInfo2 = particleDecoration.getParticleInfo(size_t(1)); - EXPECT_TRUE(NULL!=pInfo2); - EXPECT_EQ(2.1, pInfo2->getDepth()); - EXPECT_EQ(2.2, pInfo2->getAbundance()); - EXPECT_TRUE(NULL == pInfo2->getParticle()->getRotation()); - - const ParticleInfo * pInfo3 = particleDecoration.getParticleInfo(size_t(2)); - EXPECT_TRUE(NULL!=pInfo3); - EXPECT_EQ(0.0, pInfo3->getDepth()); - EXPECT_EQ(1.0, pInfo3->getAbundance()); - EXPECT_TRUE(NULL != pInfo3->getParticle()->getRotation()); - - const ParticleInfo * pInfo4 = particleDecoration.getParticleInfo(size_t(3)); - EXPECT_TRUE(NULL!=pInfo4); - EXPECT_EQ(4.1, pInfo4->getDepth()); - EXPECT_EQ(-4.2, pInfo4->getAbundance()); - EXPECT_TRUE(NULL != pInfo4->getParticle()->getRotation()); + const IParticle * p_particle1 = particleDecoration.getParticle(size_t(0)); + EXPECT_TRUE(NULL!=p_particle1); + EXPECT_EQ(0.0, p_particle1->getDepth()); + EXPECT_EQ(1.0, particleDecoration.getAbundanceOfParticle(size_t(0))); + EXPECT_TRUE(NULL == p_particle1->getRotation()); + + const IParticle * p_particle2 = particleDecoration.getParticle(size_t(1)); + EXPECT_TRUE(NULL!=p_particle2); + EXPECT_EQ(2.1, p_particle2->getDepth()); + EXPECT_EQ(2.2, particleDecoration.getAbundanceOfParticle(size_t(1))); + EXPECT_TRUE(NULL == p_particle2->getRotation()); + + const IParticle * p_particle3 = particleDecoration.getParticle(size_t(2)); + EXPECT_TRUE(NULL!=p_particle3); + EXPECT_EQ(0.0, p_particle3->getDepth()); + EXPECT_EQ(1.0, particleDecoration.getAbundanceOfParticle(size_t(2))); + EXPECT_TRUE(NULL != p_particle3->getRotation()); + + const IParticle * p_particle4 = particleDecoration.getParticle(size_t(3)); + EXPECT_TRUE(NULL!=p_particle4); + EXPECT_EQ(4.1, p_particle4->getDepth()); + EXPECT_EQ(-4.2, particleDecoration.getAbundanceOfParticle(size_t(3))); + EXPECT_TRUE(NULL != p_particle4->getRotation()); } @@ -180,8 +178,7 @@ TEST_F(ParticleLayoutTest, ParticleLayoutClone) HomogeneousMaterial mat5("core", 0, 0); Particle particle5(mat5); - ParticleInfo particleInfo5(particle5, 0.0, 0.0); - particleDecoration.addParticleInfo(particleInfo5); + particleDecoration.addParticle(particle5, 0.0, 0.0); particleDecoration.addInterferenceFunction(new InterferenceFunctionNone()); particleDecoration.addInterferenceFunction(new InterferenceFunctionNone()); @@ -191,41 +188,35 @@ TEST_F(ParticleLayoutTest, ParticleLayoutClone) EXPECT_EQ("ParticleLayout", clone->getName()); - const ParticleInfo * pInfo1 = clone->getParticleInfo(size_t(0)); - EXPECT_TRUE(NULL!=pInfo1); - EXPECT_EQ(0.0, pInfo1->getDepth()); - EXPECT_EQ(1.0, pInfo1->getAbundance()); - EXPECT_TRUE(NULL == pInfo1->getParticle()->getRotation()); - - const ParticleInfo * pInfo2 = clone->getParticleInfo(size_t(1)); - EXPECT_TRUE(NULL!=pInfo2); - EXPECT_EQ(2.1, pInfo2->getDepth()); - EXPECT_EQ(2.0, pInfo2->getAbundance()); - EXPECT_TRUE(NULL == pInfo2->getParticle()->getRotation()); - - const ParticleInfo * pInfo3 = clone->getParticleInfo(size_t(2)); - EXPECT_TRUE(NULL!=pInfo3); - EXPECT_EQ(0.0, pInfo3->getDepth()); - EXPECT_EQ(1.0, pInfo3->getAbundance()); - EXPECT_TRUE(NULL != pInfo3->getParticle()->getRotation()); - - const ParticleInfo * pInfo4 = clone->getParticleInfo(size_t(3)); - EXPECT_TRUE(NULL!=pInfo4); - EXPECT_EQ(4.1, pInfo4->getDepth()); - EXPECT_EQ(4.0, pInfo4->getAbundance()); - EXPECT_TRUE(NULL != pInfo4->getParticle()->getRotation()); - - const ParticleInfo * pInfo5 = clone->getParticleInfo(size_t(4)); - EXPECT_TRUE(NULL!=pInfo5); - EXPECT_EQ(0.0, pInfo5->getDepth()); - EXPECT_EQ(0.0, pInfo5->getAbundance()); - EXPECT_TRUE(NULL == pInfo2->getParticle()->getRotation()); - - EXPECT_EQ(1.0, clone->getAbundanceOfParticle(size_t(0))); - EXPECT_EQ(2.0, clone->getAbundanceOfParticle(size_t(1))); - EXPECT_EQ(1.0, clone->getAbundanceOfParticle(size_t(2))); - EXPECT_EQ(4.0, clone->getAbundanceOfParticle(size_t(3))); - EXPECT_EQ(0.0, clone->getAbundanceOfParticle(size_t(4))); + const IParticle * p_particle1 = clone->getParticle(size_t(0)); + EXPECT_TRUE(NULL!=p_particle1); + EXPECT_EQ(0.0, p_particle1->getDepth()); + EXPECT_EQ(1.0, particleDecoration.getAbundanceOfParticle(size_t(0))); + EXPECT_TRUE(NULL == p_particle1->getRotation()); + + const IParticle * p_particle2 = clone->getParticle(size_t(1)); + EXPECT_TRUE(NULL!=p_particle2); + EXPECT_EQ(2.1, p_particle2->getDepth()); + EXPECT_EQ(2.0, particleDecoration.getAbundanceOfParticle(size_t(1))); + EXPECT_TRUE(NULL == p_particle2->getRotation()); + + const IParticle * p_particle3 = clone->getParticle(size_t(2)); + EXPECT_TRUE(NULL!=p_particle3); + EXPECT_EQ(0.0, p_particle3->getDepth()); + EXPECT_EQ(1.0, particleDecoration.getAbundanceOfParticle(size_t(2))); + EXPECT_TRUE(NULL != p_particle3->getRotation()); + + const IParticle * p_particle4 = clone->getParticle(size_t(3)); + EXPECT_TRUE(NULL!=p_particle4); + EXPECT_EQ(4.1, p_particle4->getDepth()); + EXPECT_EQ(4.0, particleDecoration.getAbundanceOfParticle(size_t(3))); + EXPECT_TRUE(NULL != p_particle4->getRotation()); + + const IParticle * p_particle5 = clone->getParticle(size_t(4)); + EXPECT_TRUE(NULL!=p_particle5); + EXPECT_EQ(0.0, p_particle5->getDepth()); + EXPECT_EQ(0.0, particleDecoration.getAbundanceOfParticle(size_t(4))); + EXPECT_TRUE(NULL == p_particle5->getRotation()); EXPECT_EQ(size_t(3), clone->getNumberOfInterferenceFunctions()); EXPECT_EQ(size_t(3), clone->getInterferenceFunctions().size()); @@ -262,8 +253,7 @@ TEST_F(ParticleLayoutTest, ParticleLayoutCloneInvertB) HomogeneousMaterial mat5("core",0,0); Particle particle5(mat5); - ParticleInfo particleInfo5(particle5, 0.0,0.0); - particleDecoration.addParticleInfo(particleInfo5); + particleDecoration.addParticle(particle5, 0.0,0.0); particleDecoration.addInterferenceFunction(new InterferenceFunctionNone()); particleDecoration.addInterferenceFunction(new InterferenceFunctionNone()); @@ -273,42 +263,35 @@ TEST_F(ParticleLayoutTest, ParticleLayoutCloneInvertB) EXPECT_EQ("ParticleLayout_inv", clone->getName()); - const ParticleInfo * pInfo1 = clone->getParticleInfo(size_t(0)); - EXPECT_TRUE(NULL!=pInfo1); - EXPECT_EQ(0.0, pInfo1->getDepth()); - EXPECT_EQ(1.0, pInfo1->getAbundance()); - EXPECT_TRUE(NULL == pInfo1->getParticle()->getRotation()); - - const ParticleInfo * pInfo2 = clone->getParticleInfo(size_t(1)); - EXPECT_TRUE(NULL!=pInfo2); - EXPECT_EQ(2.1, pInfo2->getDepth()); - EXPECT_EQ(2.0, pInfo2->getAbundance()); - EXPECT_TRUE(NULL == pInfo2->getParticle()->getRotation()); - - const ParticleInfo * pInfo3 = clone->getParticleInfo(size_t(2)); - EXPECT_TRUE(NULL!=pInfo3); - EXPECT_EQ(0.0, pInfo3->getDepth()); - EXPECT_EQ(1.0, pInfo3->getAbundance()); - EXPECT_TRUE(NULL != pInfo3->getParticle()->getRotation()); - - const ParticleInfo * pInfo4 = clone->getParticleInfo(size_t(3)); - EXPECT_TRUE(NULL!=pInfo4); - EXPECT_EQ(4.1, pInfo4->getDepth()); - EXPECT_EQ(4.0, pInfo4->getAbundance()); - EXPECT_TRUE(NULL != pInfo4->getParticle()->getRotation()); - - - const ParticleInfo * pInfo5 = clone->getParticleInfo(size_t(4)); - EXPECT_TRUE(NULL!=pInfo5); - EXPECT_EQ(0.0, pInfo5->getDepth()); - EXPECT_EQ(0.0, pInfo5->getAbundance()); - EXPECT_TRUE(NULL == pInfo2->getParticle()->getRotation()); - - EXPECT_EQ(1.0, clone->getAbundanceOfParticle(size_t(0))); - EXPECT_EQ(2.0, clone->getAbundanceOfParticle(size_t(1))); - EXPECT_EQ(1.0, clone->getAbundanceOfParticle(size_t(2))); - EXPECT_EQ(4.0, clone->getAbundanceOfParticle(size_t(3))); - EXPECT_EQ(0.0, clone->getAbundanceOfParticle(size_t(4))); + const IParticle * p_particle1 = clone->getParticle(size_t(0)); + EXPECT_TRUE(NULL!=p_particle1); + EXPECT_EQ(0.0, p_particle1->getDepth()); + EXPECT_EQ(1.0, particleDecoration.getAbundanceOfParticle(size_t(0))); + EXPECT_TRUE(NULL == p_particle1->getRotation()); + + const IParticle * p_particle2 = clone->getParticle(size_t(1)); + EXPECT_TRUE(NULL!=p_particle2); + EXPECT_EQ(2.1, p_particle2->getDepth()); + EXPECT_EQ(2.0, particleDecoration.getAbundanceOfParticle(size_t(1))); + EXPECT_TRUE(NULL == p_particle2->getRotation()); + + const IParticle * p_particle3 = clone->getParticle(size_t(2)); + EXPECT_TRUE(NULL!=p_particle3); + EXPECT_EQ(0.0, p_particle3->getDepth()); + EXPECT_EQ(1.0, particleDecoration.getAbundanceOfParticle(size_t(2))); + EXPECT_TRUE(NULL != p_particle3->getRotation()); + + const IParticle * p_particle4 = clone->getParticle(size_t(3)); + EXPECT_TRUE(NULL!=p_particle4); + EXPECT_EQ(4.1, p_particle4->getDepth()); + EXPECT_EQ(4.0, particleDecoration.getAbundanceOfParticle(size_t(3))); + EXPECT_TRUE(NULL != p_particle4->getRotation()); + + const IParticle * p_particle5 = clone->getParticle(size_t(4)); + EXPECT_TRUE(NULL!=p_particle5); + EXPECT_EQ(0.0, p_particle5->getDepth()); + EXPECT_EQ(0.0, particleDecoration.getAbundanceOfParticle(size_t(4))); + EXPECT_TRUE(NULL == p_particle5->getRotation()); EXPECT_EQ(size_t(3), clone->getNumberOfInterferenceFunctions()); EXPECT_EQ(size_t(3), clone->getInterferenceFunctions().size()); diff --git a/Tests/UnitTests/TestCore/ParticleTest.h b/Tests/UnitTests/TestCore/ParticleTest.h index 98c787693e94b645e416085e859512dae5b7835b..26757930b9b30e087ac5b78b7ec62c0ed34338c5 100644 --- a/Tests/UnitTests/TestCore/ParticleTest.h +++ b/Tests/UnitTests/TestCore/ParticleTest.h @@ -120,7 +120,7 @@ TEST_F(ParticleTest, SetParam) EXPECT_EQ("FormFactorFullSphere", particle.getFormFactor()->getName()); EXPECT_EQ(2.1, particle.getFormFactor()->getRadius()); - particle.setTransformation(transform); + particle.setRotation(transform); EXPECT_TRUE(NULL != particle.getRotation()); Particle *particle2 = particle.clone(); EXPECT_EQ("Particle", particle2->getName()); diff --git a/cmake/modules/SearchInstalledSoftware.cmake b/cmake/modules/SearchInstalledSoftware.cmake index d0853a022bcc0d8313d81bff54c89b83fa47b752..b347ee78c551e9c6e34df9e1f15eab4fb594582a 100644 --- a/cmake/modules/SearchInstalledSoftware.cmake +++ b/cmake/modules/SearchInstalledSoftware.cmake @@ -85,6 +85,6 @@ endif() # --- ROOT --- -if(ROOT_SUPPORT) +if(ROOT_SUPPORT OR BORNAGAIN_APP) find_package(ROOT) endif() diff --git a/dev-tools/python-bindings/settings_core.py b/dev-tools/python-bindings/settings_core.py index 3666206fad4d3352a94c6b3865295866773e2cec..06c1939421915ef229955ccd4601b5ab222dc5aa 100644 --- a/dev-tools/python-bindings/settings_core.py +++ b/dev-tools/python-bindings/settings_core.py @@ -160,7 +160,6 @@ include_classes = [ "ParticleDistribution", "ParticleCoreShell", "ParticleLayout", - "ParticleInfo", "RealParameterWrapper", "ResolutionFunction2DGaussian", "RotationX", @@ -242,6 +241,8 @@ def ManualClassTunings(mb): if 'SetLevel' in ff.name: ff.alias = 'SetMessageLevel' ff.include() + if 'CreateProduct' in ff.name: + ff.include() # cl = mb.class_("BasicVector3D<double>") cl.add_code("def( bp::self - bp::self )")