diff --git a/App/src/TestMesoCrystal1.cpp b/App/src/TestMesoCrystal1.cpp index dbad4d10ddfe14b992cfb1029784c6e2236491d5..d73652ad635e0aa168661f2b1c63a2e7d1e067ad 100644 --- a/App/src/TestMesoCrystal1.cpp +++ b/App/src/TestMesoCrystal1.cpp @@ -68,15 +68,15 @@ void TestMesoCrystal1::initializeSample() { delete mp_sample; // create mesocrystal - double meso_width = 1000*Units::nanometer; + double meso_radius = 1000*Units::nanometer; double surface_filling_ratio = 0.25; - double surface_density = surface_filling_ratio/M_PI/meso_width/meso_width; + double surface_density = surface_filling_ratio/M_PI/meso_radius/meso_radius; // complex_t n_particle(1.0-1.55e-5, 1.37e-6); // data from Artur complex_t n_particle(1.0-2.84e-5, 4.7e-7); // data from http://henke.lbl.gov/optical_constants/getdb2.html complex_t avg_n_squared_meso = 0.7886*n_particle*n_particle + 0.2114; complex_t n_avg = std::sqrt(surface_filling_ratio*avg_n_squared_meso + 1.0 - surface_filling_ratio); complex_t n_particle_adapted = std::sqrt(n_avg*n_avg + n_particle*n_particle - 1.0); - FormFactorCylinder ff_cyl(0.5*Units::micrometer, meso_width); + FormFactorCylinder ff_cyl(0.5*Units::micrometer, meso_radius); double sigma_h = 4*Units::nanometer; double sigma_r = 50*Units::nanometer; FormFactorDecoratorDebyeWaller ff_meso(ff_cyl.clone(), sigma_h*sigma_h/2.0, sigma_r*sigma_r/2.0); @@ -135,7 +135,7 @@ void TestMesoCrystal1::initializeSample() particle_decoration.addInterferenceFunction(p_interference_funtion); LayerDecorator avg_layer_decorator(avg_layer, particle_decoration); - LayerRoughness roughness(2.0*Units::nanometer, 0.3, 500.0*Units::nanometer); + LayerRoughness roughness(1.0*Units::nanometer, 0.3, 500.0*Units::nanometer); p_multi_layer->addLayer(air_layer); p_multi_layer->addLayer(avg_layer_decorator); diff --git a/Core/Algorithms/inc/DiffuseDWBASimulation.h b/Core/Algorithms/inc/DiffuseDWBASimulation.h index 07452bcc5e2258fe7a8d5b3b16a0d336a5ee751a..b557cd7f5eb428c07ef0295324f6b004df77ff68 100644 --- a/Core/Algorithms/inc/DiffuseDWBASimulation.h +++ b/Core/Algorithms/inc/DiffuseDWBASimulation.h @@ -34,6 +34,14 @@ protected: complex_t m_refractive_index; double m_surface_density; std::vector<DiffuseParticleInfo *> m_np_infos; + struct DiffuseFormFactorTerm { + ~DiffuseFormFactorTerm(); + std::vector<IFormFactor *> m_form_factors; + std::vector<double> m_probabilities; + double m_factor; + }; + void initDiffuseFormFactorTerms(std::vector<DiffuseFormFactorTerm *> &terms, + size_t nbr_heights, size_t samples_per_particle); }; #endif /* DIFFUSEDWBASIMULATION_H_ */ diff --git a/Core/Algorithms/src/DiffuseDWBASimulation.cpp b/Core/Algorithms/src/DiffuseDWBASimulation.cpp index 364e5cb890bf10c5a023219e3b433658af2cc343..fcef776c6e740b8aca477c49695274305e09f18f 100644 --- a/Core/Algorithms/src/DiffuseDWBASimulation.cpp +++ b/Core/Algorithms/src/DiffuseDWBASimulation.cpp @@ -16,35 +16,12 @@ DiffuseDWBASimulation::~DiffuseDWBASimulation() void DiffuseDWBASimulation::run() { -// complex_t k_iz = -mp_kz_function->evaluate(-m_alpha_i); - size_t number_of_nps = m_np_infos.size(); - std::vector<IFormFactor *> form_factors; - // collect all particle formfactors and create dwba formfactors for these - for (size_t np_index=0; np_index<number_of_nps; ++np_index) { - ParticleInfo *p_np_info = m_np_infos[np_index]; - Particle *p_np = p_np_info->getParticle()->clone(); - double depth = p_np_info->getDepth(); - - p_np->setAmbientRefractiveIndex(m_refractive_index); - IFormFactor *ff_particle = p_np->createFormFactor(); - delete p_np; - // TODO: include geometric transformation? -// IFormFactor *ff_transformed(0); -// if(transform) { -// ff_transformed = new FormFactorDecoratorTransformation(ff_particle, new Geometry::Transform3D(*transform)); -// } else{ -// ff_transformed = ff_particle; -// } - - FormFactorDWBAConstZ *p_dwba_z = new FormFactorDWBAConstZ(ff_particle, depth); - p_dwba_z->setReflectionFunction(*mp_R_function); - p_dwba_z->setTransmissionFunction(*mp_T_function); - - form_factors.push_back(p_dwba_z); - } - + std::vector<DiffuseFormFactorTerm *> diffuse_terms; + size_t nbr_heights = 50; + size_t samples_per_particle = 9; + initDiffuseFormFactorTerms(diffuse_terms, nbr_heights, samples_per_particle); double wavevector_scattering_factor = M_PI/getWaveLength()/getWaveLength(); -// m_dwba_intensity.resetIndex(); + resetIndex(); while ( hasNext() ) { if( (int)m_output_data_mask.currentValue() !=1 ) { @@ -63,21 +40,22 @@ void DiffuseDWBASimulation::run() k_f.setLambdaAlphaPhi(getWaveLength(), alpha_f, phi_f); k_f.setZ(mp_kz_function->evaluate(alpha_f)); - complex_t amplitude(0.0, 0.0); - double intensity = 0.0; - for (size_t i=0; i<form_factors.size(); ++i) { - double weight = m_np_infos[i]->getAbundance(); - complex_t amp = form_factors[i]->evaluate(m_ki, k_f, -m_alpha_i, alpha_f); - amplitude += weight*amp; - intensity += weight*std::norm(amp); + double total_intensity = 0.0; + for (size_t i=0; i<diffuse_terms.size(); ++i) { + DiffuseFormFactorTerm *p_diffuse_term = diffuse_terms[i]; + complex_t amplitude(0.0, 0.0); + double intensity = 0.0; + for (size_t j=0; j<p_diffuse_term->m_form_factors.size(); ++j) { + complex_t amp = p_diffuse_term->m_form_factors[j]->evaluate(m_ki, k_f, -m_alpha_i, alpha_f); + amplitude += p_diffuse_term->m_probabilities[j]*amp; + intensity += p_diffuse_term->m_probabilities[j]*std::norm(amp); + } + total_intensity += p_diffuse_term->m_factor*(intensity - std::norm(amplitude)); } -// m_dwba_intensity.next() = m_surface_density*wavevector_scattering_factor*wavevector_scattering_factor -// *(intensity - std::norm(amplitude)); - next() = m_surface_density*wavevector_scattering_factor*wavevector_scattering_factor*(intensity - std::norm(amplitude)); + next() = total_intensity*wavevector_scattering_factor*wavevector_scattering_factor; } - for (size_t i=0; i<form_factors.size(); ++i) delete form_factors[i]; - + for (size_t i=0; i<diffuse_terms.size(); ++i) delete diffuse_terms[i]; } void DiffuseDWBASimulation::addParticleInfo(DiffuseParticleInfo *p_info) @@ -92,3 +70,41 @@ void DiffuseDWBASimulation::rescaleAbundances(double factor) m_np_infos[np_index]->scaleAbundance(factor); } } + +void DiffuseDWBASimulation::initDiffuseFormFactorTerms( + std::vector<DiffuseFormFactorTerm*>& terms, size_t nbr_heights, + size_t samples_per_particle) +{ + size_t number_of_nps = m_np_infos.size(); + for (size_t i=0; i<number_of_nps; ++i) { + DiffuseParticleInfo *p_diff_info = m_np_infos[i]; + Particle *p_particle = p_diff_info->getParticle()->clone(); + double total_particle_density = p_diff_info->getNumberPerMeso(); + double density_per_height_per_particle = total_particle_density/nbr_heights; + for (size_t j=0; j<nbr_heights; ++j) { + DiffuseFormFactorTerm *p_diffuse_term = new DiffuseFormFactorTerm; + p_diffuse_term->m_factor = density_per_height_per_particle; + double depth = p_diff_info->getDepth() - (double)j*p_diff_info->getHeightRange()/(nbr_heights-1.0); + std::vector<IFormFactor *> form_factors; + p_diff_info->getParticle()->getSimpleFormFactor()->createDistributedFormFactors( + form_factors, p_diffuse_term->m_probabilities, samples_per_particle); + for (size_t ff_index=0; ff_index<form_factors.size(); ++ff_index) { + p_particle->setSimpleFormFactor(form_factors[ff_index]); + IFormFactor *ff_particle = p_particle->createFormFactor(); + FormFactorDWBAConstZ *p_dwba_z = new FormFactorDWBAConstZ(ff_particle, depth); + p_dwba_z->setReflectionFunction(*mp_R_function); + p_dwba_z->setTransmissionFunction(*mp_T_function); + p_diffuse_term->m_form_factors.push_back(p_dwba_z); + } + terms.push_back(p_diffuse_term); + } + delete p_particle; + } +} + +DiffuseDWBASimulation::DiffuseFormFactorTerm::~DiffuseFormFactorTerm() +{ + for (size_t i=0; i<m_form_factors.size(); ++i) { + delete m_form_factors[i]; + } +} diff --git a/Core/FormFactors/inc/FormFactorCylinder.h b/Core/FormFactors/inc/FormFactorCylinder.h index f35b39a83d5b6e3702aedd267b7d0795570ea7df..a3e294af331c5b0f178b906d0c1da7cdeb78d457 100644 --- a/Core/FormFactors/inc/FormFactorCylinder.h +++ b/Core/FormFactors/inc/FormFactorCylinder.h @@ -28,6 +28,8 @@ public: virtual int getNumberOfStochasticParameters() const { return 2; } + virtual double getHeight() const { return m_height; } + protected: virtual complex_t evaluate_for_q(const cvector_t &q) const; diff --git a/Core/FormFactors/inc/FormFactorFullSphere.h b/Core/FormFactors/inc/FormFactorFullSphere.h index bfa24d1b1ecba61ffa8ab0184ea0e54b5d1727de..728077a7aba1c66915ac2708cc5eb46d22d06a53 100644 --- a/Core/FormFactors/inc/FormFactorFullSphere.h +++ b/Core/FormFactors/inc/FormFactorFullSphere.h @@ -30,6 +30,8 @@ public: //! return radius of sphere double getRadius() const { return m_radius; } + virtual double getHeight() const { return 2.0*m_radius; } + protected: virtual complex_t evaluate_for_q(const cvector_t &q) const; diff --git a/Core/FormFactors/inc/FormFactorParallelepiped.h b/Core/FormFactors/inc/FormFactorParallelepiped.h index 83c190db942aec83597882e762c78485cfaad45a..02a83f0b421fdbe597390d6dd0aa9a8b12f47165 100644 --- a/Core/FormFactors/inc/FormFactorParallelepiped.h +++ b/Core/FormFactors/inc/FormFactorParallelepiped.h @@ -29,13 +29,12 @@ public: //! return radius of parallelepiped double getRadius() const { return m_radius; } - //! return height of parallelepiped - double getHeight() const { return m_height; } - virtual double getVolume() const { return 4.0*m_height*m_radius*m_radius; } + virtual double getHeight() const { return m_height; } + protected: virtual complex_t evaluate_for_q(const cvector_t &q) const; diff --git a/Core/FormFactors/inc/FormFactorPrism3.h b/Core/FormFactors/inc/FormFactorPrism3.h index 00dbeb1334160a27c2046b81e0c402aa9c5ac801..a6c215cc9e91013df408d9e2719ff077c86a7eb5 100644 --- a/Core/FormFactors/inc/FormFactorPrism3.h +++ b/Core/FormFactors/inc/FormFactorPrism3.h @@ -28,6 +28,9 @@ public: virtual int getNumberOfStochasticParameters() const { return 2; } + virtual double getHeight() const { return m_height; } + + protected: virtual complex_t evaluate_for_q(const cvector_t &q) const; diff --git a/Core/FormFactors/inc/FormFactorPyramid.h b/Core/FormFactors/inc/FormFactorPyramid.h index b9777e74af5cbd087903a48b952e250171da1ed5..039f52f38d4e2e9bf33f70a1b4fa683e029ea73b 100644 --- a/Core/FormFactors/inc/FormFactorPyramid.h +++ b/Core/FormFactors/inc/FormFactorPyramid.h @@ -36,6 +36,8 @@ public: virtual int getNumberOfStochasticParameters() const { return 3; } + virtual double getHeight() const { return m_height; } + protected: virtual complex_t evaluate_for_q(const cvector_t &q) const; diff --git a/Core/FormFactors/inc/FormFactorSphereGaussianRadius.h b/Core/FormFactors/inc/FormFactorSphereGaussianRadius.h index 97f1d5bdb2d208c06ca8f1d7e44d1f34d84640c6..a034d00b61e8110da20fddbea5cfd35f16fd0224 100644 --- a/Core/FormFactors/inc/FormFactorSphereGaussianRadius.h +++ b/Core/FormFactors/inc/FormFactorSphereGaussianRadius.h @@ -1,5 +1,6 @@ #ifndef FORMFACTORSPHEREGAUSSIANRADIUS_H_ #define FORMFACTORSPHEREGAUSSIANRADIUS_H_ +#include "MathFunctions.h" // ******************************************************************** // * The BornAgain project * // * Simulation of neutron and x-ray scattering at grazing incidence * @@ -22,6 +23,12 @@ public: virtual ~FormFactorSphereGaussianRadius(); virtual int getNumberOfStochasticParameters() const; + virtual bool isDistributedFormFactor() const { return true; } + virtual void createDistributedFormFactors(std::vector<IFormFactor *> &form_factors, + std::vector<double> &probabilities, size_t nbr_samples) const; + + virtual double getHeight() const { return p_ff_sphere->getHeight(); } + protected: virtual complex_t evaluate_for_q(const cvector_t &q) const; private: @@ -71,4 +78,24 @@ inline double FormFactorSphereGaussianRadius::calculateMeanR3() const return std::pow(m_mean*(m_mean*m_mean+3.0*m_sigma*m_sigma),1.0/3.0); } +inline void FormFactorSphereGaussianRadius::createDistributedFormFactors( + std::vector<IFormFactor*>& form_factors, + std::vector<double>& probabilities, size_t nbr_samples) const +{ + double sigma_range = 2.0*m_sigma; + double step = 2.0*sigma_range/(nbr_samples-1.0); + double radius_start = m_mean-step*(nbr_samples/2); + double total_prob = 0.0; + for (size_t i=0; i<nbr_samples; ++i) { + double radius = radius_start + (double)i*step; + double probability = MathFunctions::Gaussian(radius, m_mean, m_sigma); + form_factors.push_back(new FormFactorFullSphere(radius)); + probabilities.push_back(probability); + total_prob += probability; + } + for (size_t i=0; i<probabilities.size(); ++i) { + probabilities[i] /= total_prob; + } +} + #endif /* FORMFACTORSPHEREGAUSSIANRADIUS_H_ */ diff --git a/Core/FormFactors/inc/IFormFactor.h b/Core/FormFactors/inc/IFormFactor.h index ac21c1b09458bb870696d3d657973fca8cdea6af..6a20d1027b3d6415b2aac00bb17ddac086dc987c 100644 --- a/Core/FormFactors/inc/IFormFactor.h +++ b/Core/FormFactors/inc/IFormFactor.h @@ -41,6 +41,17 @@ public: virtual double getVolume() const; + virtual double getHeight() const; + + virtual bool isDistributedFormFactor() const { return false; } + + virtual void createDistributedFormFactors(std::vector<IFormFactor *> &form_factors, + std::vector<double> &probabilities, size_t nbr_samples) const { + (void)form_factors; + (void)probabilities; + (void)nbr_samples; + } + }; inline double IFormFactor::getVolume() const @@ -49,6 +60,12 @@ inline double IFormFactor::getVolume() const return std::abs(evaluate(zero, zero, 0.0, 0.0)); } +inline double IFormFactor::getHeight() const +{ + double result = std::pow(getVolume(), 1.0/3.0); + return result; +} + class IFormFactorDecorator : public IFormFactor { public: @@ -57,6 +74,9 @@ public: virtual IFormFactorDecorator *clone() const=0; virtual void setAmbientRefractiveIndex(complex_t refractive_index) { if (mp_form_factor) mp_form_factor->setAmbientRefractiveIndex(refractive_index); } + + virtual double getHeight() const { return mp_form_factor->getHeight(); } + protected: IFormFactor *mp_form_factor; }; diff --git a/Core/PythonAPI/src/PythonInterface_classes_1.cpp b/Core/PythonAPI/src/PythonInterface_classes_1.cpp index 90c71f278be5b71c469dd3f7bedcd52841151bd3..d50442d622a56326e2d927042677f9d47f10a214 100644 --- a/Core/PythonAPI/src/PythonInterface_classes_1.cpp +++ b/Core/PythonAPI/src/PythonInterface_classes_1.cpp @@ -72,7 +72,7 @@ struct ISample_wrapper : ISample, bp::wrapper< ISample > { return ISample::clone( ); } - virtual ::ParameterPool * createParameterTree( ) { + virtual ::ParameterPool * createParameterTree( ) const { if( bp::override func_createParameterTree = this->get_override( "createParameterTree" ) ) return func_createParameterTree( ); else{ @@ -80,7 +80,7 @@ struct ISample_wrapper : ISample, bp::wrapper< ISample > { } } - ::ParameterPool * default_createParameterTree( ) { + ::ParameterPool * default_createParameterTree( ) const { return ISample::createParameterTree( ); } @@ -119,7 +119,7 @@ struct ICompositeSample_wrapper : ICompositeSample, bp::wrapper< ICompositeSampl return ISample::clone( ); } - virtual ::ParameterPool * createParameterTree( ) { + virtual ::ParameterPool * createParameterTree( ) const { if( bp::override func_createParameterTree = this->get_override( "createParameterTree" ) ) return func_createParameterTree( ); else{ @@ -127,7 +127,7 @@ struct ICompositeSample_wrapper : ICompositeSample, bp::wrapper< ICompositeSampl } } - ::ParameterPool * default_createParameterTree( ) { + ::ParameterPool * default_createParameterTree( ) const { return ISample::createParameterTree( ); } @@ -188,7 +188,7 @@ struct IClusteredParticles_wrapper : IClusteredParticles, bp::wrapper< IClustere func_setAmbientRefractiveIndex( refractive_index ); } - virtual ::ParameterPool * createParameterTree( ) { + virtual ::ParameterPool * createParameterTree( ) const { if( bp::override func_createParameterTree = this->get_override( "createParameterTree" ) ) return func_createParameterTree( ); else{ @@ -196,7 +196,7 @@ struct IClusteredParticles_wrapper : IClusteredParticles, bp::wrapper< IClustere } } - ::ParameterPool * default_createParameterTree( ) { + ::ParameterPool * default_createParameterTree( ) const { return ISample::createParameterTree( ); } @@ -278,7 +278,7 @@ struct Crystal_wrapper : Crystal, bp::wrapper< Crystal > { Crystal::setAmbientRefractiveIndex( refractive_index ); } - virtual ::ParameterPool * createParameterTree( ) { + virtual ::ParameterPool * createParameterTree( ) const { if( bp::override func_createParameterTree = this->get_override( "createParameterTree" ) ) return func_createParameterTree( ); else{ @@ -286,7 +286,7 @@ struct Crystal_wrapper : Crystal, bp::wrapper< Crystal > { } } - ::ParameterPool * default_createParameterTree( ) { + ::ParameterPool * default_createParameterTree( ) const { return ISample::createParameterTree( ); } @@ -353,11 +353,35 @@ struct IFormFactor_wrapper : IFormFactor, bp::wrapper< IFormFactor > { return func_clone( ); } + virtual void createDistributedFormFactors( ::std::vector< IFormFactor* > & form_factors, ::std::vector< double > & probabilities, ::size_t nbr_samples ) const { + if( bp::override func_createDistributedFormFactors = this->get_override( "createDistributedFormFactors" ) ) + func_createDistributedFormFactors( boost::ref(form_factors), boost::ref(probabilities), nbr_samples ); + else{ + this->IFormFactor::createDistributedFormFactors( boost::ref(form_factors), boost::ref(probabilities), nbr_samples ); + } + } + + void default_createDistributedFormFactors( ::std::vector< IFormFactor* > & form_factors, ::std::vector< double > & probabilities, ::size_t nbr_samples ) const { + IFormFactor::createDistributedFormFactors( boost::ref(form_factors), boost::ref(probabilities), nbr_samples ); + } + virtual ::complex_t evaluate( ::cvector_t const & k_i, ::cvector_t const & k_f, double alpha_i, double alpha_f ) const { bp::override func_evaluate = this->get_override( "evaluate" ); return func_evaluate( boost::ref(k_i), boost::ref(k_f), alpha_i, alpha_f ); } + virtual double getHeight( ) const { + if( bp::override func_getHeight = this->get_override( "getHeight" ) ) + return func_getHeight( ); + else{ + return this->IFormFactor::getHeight( ); + } + } + + double default_getHeight( ) const { + return IFormFactor::getHeight( ); + } + virtual int getNumberOfStochasticParameters( ) const { if( bp::override func_getNumberOfStochasticParameters = this->get_override( "getNumberOfStochasticParameters" ) ) return func_getNumberOfStochasticParameters( ); @@ -382,6 +406,18 @@ struct IFormFactor_wrapper : IFormFactor, bp::wrapper< IFormFactor > { return IFormFactor::getVolume( ); } + virtual bool isDistributedFormFactor( ) const { + if( bp::override func_isDistributedFormFactor = this->get_override( "isDistributedFormFactor" ) ) + return func_isDistributedFormFactor( ); + else{ + return this->IFormFactor::isDistributedFormFactor( ); + } + } + + bool default_isDistributedFormFactor( ) const { + return IFormFactor::isDistributedFormFactor( ); + } + virtual void setAmbientRefractiveIndex( ::complex_t refractive_index ) { if( bp::override func_setAmbientRefractiveIndex = this->get_override( "setAmbientRefractiveIndex" ) ) func_setAmbientRefractiveIndex( refractive_index ); @@ -394,7 +430,7 @@ struct IFormFactor_wrapper : IFormFactor, bp::wrapper< IFormFactor > { IFormFactor::setAmbientRefractiveIndex( refractive_index ); } - virtual ::ParameterPool * createParameterTree( ) { + virtual ::ParameterPool * createParameterTree( ) const { if( bp::override func_createParameterTree = this->get_override( "createParameterTree" ) ) return func_createParameterTree( ); else{ @@ -402,7 +438,7 @@ struct IFormFactor_wrapper : IFormFactor, bp::wrapper< IFormFactor > { } } - ::ParameterPool * default_createParameterTree( ) { + ::ParameterPool * default_createParameterTree( ) const { return ISample::createParameterTree( ); } @@ -451,7 +487,19 @@ struct IFormFactorBorn_wrapper : IFormFactorBorn, bp::wrapper< IFormFactorBorn > return func_evaluate_for_q( boost::ref(q) ); } - virtual ::ParameterPool * createParameterTree( ) { + virtual void createDistributedFormFactors( ::std::vector< IFormFactor* > & form_factors, ::std::vector< double > & probabilities, ::size_t nbr_samples ) const { + if( bp::override func_createDistributedFormFactors = this->get_override( "createDistributedFormFactors" ) ) + func_createDistributedFormFactors( boost::ref(form_factors), boost::ref(probabilities), nbr_samples ); + else{ + this->IFormFactor::createDistributedFormFactors( boost::ref(form_factors), boost::ref(probabilities), nbr_samples ); + } + } + + void default_createDistributedFormFactors( ::std::vector< IFormFactor* > & form_factors, ::std::vector< double > & probabilities, ::size_t nbr_samples ) const { + IFormFactor::createDistributedFormFactors( boost::ref(form_factors), boost::ref(probabilities), nbr_samples ); + } + + virtual ::ParameterPool * createParameterTree( ) const { if( bp::override func_createParameterTree = this->get_override( "createParameterTree" ) ) return func_createParameterTree( ); else{ @@ -459,10 +507,22 @@ struct IFormFactorBorn_wrapper : IFormFactorBorn, bp::wrapper< IFormFactorBorn > } } - ::ParameterPool * default_createParameterTree( ) { + ::ParameterPool * default_createParameterTree( ) const { return ISample::createParameterTree( ); } + virtual double getHeight( ) const { + if( bp::override func_getHeight = this->get_override( "getHeight" ) ) + return func_getHeight( ); + else{ + return this->IFormFactor::getHeight( ); + } + } + + double default_getHeight( ) const { + return IFormFactor::getHeight( ); + } + virtual int getNumberOfStochasticParameters( ) const { if( bp::override func_getNumberOfStochasticParameters = this->get_override( "getNumberOfStochasticParameters" ) ) return func_getNumberOfStochasticParameters( ); @@ -487,6 +547,18 @@ struct IFormFactorBorn_wrapper : IFormFactorBorn, bp::wrapper< IFormFactorBorn > return IFormFactor::getVolume( ); } + virtual bool isDistributedFormFactor( ) const { + if( bp::override func_isDistributedFormFactor = this->get_override( "isDistributedFormFactor" ) ) + return func_isDistributedFormFactor( ); + else{ + return this->IFormFactor::isDistributedFormFactor( ); + } + } + + bool default_isDistributedFormFactor( ) const { + return IFormFactor::isDistributedFormFactor( ); + } + virtual void setAmbientRefractiveIndex( ::complex_t refractive_index ) { if( bp::override func_setAmbientRefractiveIndex = this->get_override( "setAmbientRefractiveIndex" ) ) func_setAmbientRefractiveIndex( refractive_index ); @@ -546,7 +618,19 @@ struct FormFactorCrystal_wrapper : FormFactorCrystal, bp::wrapper< FormFactorCry FormFactorCrystal::setAmbientRefractiveIndex( refractive_index ); } - virtual ::ParameterPool * createParameterTree( ) { + virtual void createDistributedFormFactors( ::std::vector< IFormFactor* > & form_factors, ::std::vector< double > & probabilities, ::size_t nbr_samples ) const { + if( bp::override func_createDistributedFormFactors = this->get_override( "createDistributedFormFactors" ) ) + func_createDistributedFormFactors( boost::ref(form_factors), boost::ref(probabilities), nbr_samples ); + else{ + this->IFormFactor::createDistributedFormFactors( boost::ref(form_factors), boost::ref(probabilities), nbr_samples ); + } + } + + void default_createDistributedFormFactors( ::std::vector< IFormFactor* > & form_factors, ::std::vector< double > & probabilities, ::size_t nbr_samples ) const { + IFormFactor::createDistributedFormFactors( boost::ref(form_factors), boost::ref(probabilities), nbr_samples ); + } + + virtual ::ParameterPool * createParameterTree( ) const { if( bp::override func_createParameterTree = this->get_override( "createParameterTree" ) ) return func_createParameterTree( ); else{ @@ -554,7 +638,7 @@ struct FormFactorCrystal_wrapper : FormFactorCrystal, bp::wrapper< FormFactorCry } } - ::ParameterPool * default_createParameterTree( ) { + ::ParameterPool * default_createParameterTree( ) const { return ISample::createParameterTree( ); } @@ -570,6 +654,18 @@ struct FormFactorCrystal_wrapper : FormFactorCrystal, bp::wrapper< FormFactorCry return IFormFactorBorn::evaluate( boost::ref(k_i), boost::ref(k_f), alpha_i, alpha_f ); } + virtual double getHeight( ) const { + if( bp::override func_getHeight = this->get_override( "getHeight" ) ) + return func_getHeight( ); + else{ + return this->IFormFactor::getHeight( ); + } + } + + double default_getHeight( ) const { + return IFormFactor::getHeight( ); + } + virtual int getNumberOfStochasticParameters( ) const { if( bp::override func_getNumberOfStochasticParameters = this->get_override( "getNumberOfStochasticParameters" ) ) return func_getNumberOfStochasticParameters( ); @@ -594,6 +690,18 @@ struct FormFactorCrystal_wrapper : FormFactorCrystal, bp::wrapper< FormFactorCry return IFormFactor::getVolume( ); } + virtual bool isDistributedFormFactor( ) const { + if( bp::override func_isDistributedFormFactor = this->get_override( "isDistributedFormFactor" ) ) + return func_isDistributedFormFactor( ); + else{ + return this->IFormFactor::isDistributedFormFactor( ); + } + } + + bool default_isDistributedFormFactor( ) const { + return IFormFactor::isDistributedFormFactor( ); + } + virtual void walk_and_print( ) { if( bp::override func_walk_and_print = this->get_override( "walk_and_print" ) ) func_walk_and_print( ); @@ -629,7 +737,19 @@ struct FormFactorCylinder_wrapper : FormFactorCylinder, bp::wrapper< FormFactorC return FormFactorCylinder::clone( ); } - virtual int getNumberOfStochasticParameters( ) { + virtual double getHeight( ) const { + if( bp::override func_getHeight = this->get_override( "getHeight" ) ) + return func_getHeight( ); + else{ + return this->FormFactorCylinder::getHeight( ); + } + } + + double default_getHeight( ) const { + return FormFactorCylinder::getHeight( ); + } + + virtual int getNumberOfStochasticParameters( ) const { if( bp::override func_getNumberOfStochasticParameters = this->get_override( "getNumberOfStochasticParameters" ) ) return func_getNumberOfStochasticParameters( ); else{ @@ -637,11 +757,23 @@ struct FormFactorCylinder_wrapper : FormFactorCylinder, bp::wrapper< FormFactorC } } - int default_getNumberOfStochasticParameters( ) { + int default_getNumberOfStochasticParameters( ) const { return FormFactorCylinder::getNumberOfStochasticParameters( ); } - virtual ::ParameterPool * createParameterTree( ) { + virtual void createDistributedFormFactors( ::std::vector< IFormFactor* > & form_factors, ::std::vector< double > & probabilities, ::size_t nbr_samples ) const { + if( bp::override func_createDistributedFormFactors = this->get_override( "createDistributedFormFactors" ) ) + func_createDistributedFormFactors( boost::ref(form_factors), boost::ref(probabilities), nbr_samples ); + else{ + this->IFormFactor::createDistributedFormFactors( boost::ref(form_factors), boost::ref(probabilities), nbr_samples ); + } + } + + void default_createDistributedFormFactors( ::std::vector< IFormFactor* > & form_factors, ::std::vector< double > & probabilities, ::size_t nbr_samples ) const { + IFormFactor::createDistributedFormFactors( boost::ref(form_factors), boost::ref(probabilities), nbr_samples ); + } + + virtual ::ParameterPool * createParameterTree( ) const { if( bp::override func_createParameterTree = this->get_override( "createParameterTree" ) ) return func_createParameterTree( ); else{ @@ -649,7 +781,7 @@ struct FormFactorCylinder_wrapper : FormFactorCylinder, bp::wrapper< FormFactorC } } - ::ParameterPool * default_createParameterTree( ) { + ::ParameterPool * default_createParameterTree( ) const { return ISample::createParameterTree( ); } @@ -665,18 +797,6 @@ struct FormFactorCylinder_wrapper : FormFactorCylinder, bp::wrapper< FormFactorC return IFormFactorBorn::evaluate( boost::ref(k_i), boost::ref(k_f), alpha_i, alpha_f ); } - virtual int getNumberOfStochasticParameters( ) const { - if( bp::override func_getNumberOfStochasticParameters = this->get_override( "getNumberOfStochasticParameters" ) ) - return func_getNumberOfStochasticParameters( ); - else{ - return this->IFormFactor::getNumberOfStochasticParameters( ); - } - } - - int default_getNumberOfStochasticParameters( ) const { - return IFormFactor::getNumberOfStochasticParameters( ); - } - virtual double getVolume( ) const { if( bp::override func_getVolume = this->get_override( "getVolume" ) ) return func_getVolume( ); @@ -689,6 +809,18 @@ struct FormFactorCylinder_wrapper : FormFactorCylinder, bp::wrapper< FormFactorC return IFormFactor::getVolume( ); } + virtual bool isDistributedFormFactor( ) const { + if( bp::override func_isDistributedFormFactor = this->get_override( "isDistributedFormFactor" ) ) + return func_isDistributedFormFactor( ); + else{ + return this->IFormFactor::isDistributedFormFactor( ); + } + } + + bool default_isDistributedFormFactor( ) const { + return IFormFactor::isDistributedFormFactor( ); + } + virtual void setAmbientRefractiveIndex( ::complex_t refractive_index ) { if( bp::override func_setAmbientRefractiveIndex = this->get_override( "setAmbientRefractiveIndex" ) ) func_setAmbientRefractiveIndex( refractive_index ); @@ -743,7 +875,19 @@ struct FormFactorFullSphere_wrapper : FormFactorFullSphere, bp::wrapper< FormFac return FormFactorFullSphere::clone( ); } - virtual int getNumberOfStochasticParameters( ) { + virtual double getHeight( ) const { + if( bp::override func_getHeight = this->get_override( "getHeight" ) ) + return func_getHeight( ); + else{ + return this->FormFactorFullSphere::getHeight( ); + } + } + + double default_getHeight( ) const { + return FormFactorFullSphere::getHeight( ); + } + + virtual int getNumberOfStochasticParameters( ) const { if( bp::override func_getNumberOfStochasticParameters = this->get_override( "getNumberOfStochasticParameters" ) ) return func_getNumberOfStochasticParameters( ); else{ @@ -751,11 +895,23 @@ struct FormFactorFullSphere_wrapper : FormFactorFullSphere, bp::wrapper< FormFac } } - int default_getNumberOfStochasticParameters( ) { + int default_getNumberOfStochasticParameters( ) const { return FormFactorFullSphere::getNumberOfStochasticParameters( ); } - virtual ::ParameterPool * createParameterTree( ) { + virtual void createDistributedFormFactors( ::std::vector< IFormFactor* > & form_factors, ::std::vector< double > & probabilities, ::size_t nbr_samples ) const { + if( bp::override func_createDistributedFormFactors = this->get_override( "createDistributedFormFactors" ) ) + func_createDistributedFormFactors( boost::ref(form_factors), boost::ref(probabilities), nbr_samples ); + else{ + this->IFormFactor::createDistributedFormFactors( boost::ref(form_factors), boost::ref(probabilities), nbr_samples ); + } + } + + void default_createDistributedFormFactors( ::std::vector< IFormFactor* > & form_factors, ::std::vector< double > & probabilities, ::size_t nbr_samples ) const { + IFormFactor::createDistributedFormFactors( boost::ref(form_factors), boost::ref(probabilities), nbr_samples ); + } + + virtual ::ParameterPool * createParameterTree( ) const { if( bp::override func_createParameterTree = this->get_override( "createParameterTree" ) ) return func_createParameterTree( ); else{ @@ -763,7 +919,7 @@ struct FormFactorFullSphere_wrapper : FormFactorFullSphere, bp::wrapper< FormFac } } - ::ParameterPool * default_createParameterTree( ) { + ::ParameterPool * default_createParameterTree( ) const { return ISample::createParameterTree( ); } @@ -779,18 +935,6 @@ struct FormFactorFullSphere_wrapper : FormFactorFullSphere, bp::wrapper< FormFac return IFormFactorBorn::evaluate( boost::ref(k_i), boost::ref(k_f), alpha_i, alpha_f ); } - virtual int getNumberOfStochasticParameters( ) const { - if( bp::override func_getNumberOfStochasticParameters = this->get_override( "getNumberOfStochasticParameters" ) ) - return func_getNumberOfStochasticParameters( ); - else{ - return this->IFormFactor::getNumberOfStochasticParameters( ); - } - } - - int default_getNumberOfStochasticParameters( ) const { - return IFormFactor::getNumberOfStochasticParameters( ); - } - virtual double getVolume( ) const { if( bp::override func_getVolume = this->get_override( "getVolume" ) ) return func_getVolume( ); @@ -803,6 +947,18 @@ struct FormFactorFullSphere_wrapper : FormFactorFullSphere, bp::wrapper< FormFac return IFormFactor::getVolume( ); } + virtual bool isDistributedFormFactor( ) const { + if( bp::override func_isDistributedFormFactor = this->get_override( "isDistributedFormFactor" ) ) + return func_isDistributedFormFactor( ); + else{ + return this->IFormFactor::isDistributedFormFactor( ); + } + } + + bool default_isDistributedFormFactor( ) const { + return IFormFactor::isDistributedFormFactor( ); + } + virtual void setAmbientRefractiveIndex( ::complex_t refractive_index ) { if( bp::override func_setAmbientRefractiveIndex = this->get_override( "setAmbientRefractiveIndex" ) ) func_setAmbientRefractiveIndex( refractive_index ); @@ -857,7 +1013,7 @@ struct FormFactorGauss_wrapper : FormFactorGauss, bp::wrapper< FormFactorGauss > return FormFactorGauss::clone( ); } - virtual int getNumberOfStochasticParameters( ) { + virtual int getNumberOfStochasticParameters( ) const { if( bp::override func_getNumberOfStochasticParameters = this->get_override( "getNumberOfStochasticParameters" ) ) return func_getNumberOfStochasticParameters( ); else{ @@ -865,11 +1021,23 @@ struct FormFactorGauss_wrapper : FormFactorGauss, bp::wrapper< FormFactorGauss > } } - int default_getNumberOfStochasticParameters( ) { + int default_getNumberOfStochasticParameters( ) const { return FormFactorGauss::getNumberOfStochasticParameters( ); } - virtual ::ParameterPool * createParameterTree( ) { + virtual void createDistributedFormFactors( ::std::vector< IFormFactor* > & form_factors, ::std::vector< double > & probabilities, ::size_t nbr_samples ) const { + if( bp::override func_createDistributedFormFactors = this->get_override( "createDistributedFormFactors" ) ) + func_createDistributedFormFactors( boost::ref(form_factors), boost::ref(probabilities), nbr_samples ); + else{ + this->IFormFactor::createDistributedFormFactors( boost::ref(form_factors), boost::ref(probabilities), nbr_samples ); + } + } + + void default_createDistributedFormFactors( ::std::vector< IFormFactor* > & form_factors, ::std::vector< double > & probabilities, ::size_t nbr_samples ) const { + IFormFactor::createDistributedFormFactors( boost::ref(form_factors), boost::ref(probabilities), nbr_samples ); + } + + virtual ::ParameterPool * createParameterTree( ) const { if( bp::override func_createParameterTree = this->get_override( "createParameterTree" ) ) return func_createParameterTree( ); else{ @@ -877,7 +1045,7 @@ struct FormFactorGauss_wrapper : FormFactorGauss, bp::wrapper< FormFactorGauss > } } - ::ParameterPool * default_createParameterTree( ) { + ::ParameterPool * default_createParameterTree( ) const { return ISample::createParameterTree( ); } @@ -893,16 +1061,16 @@ struct FormFactorGauss_wrapper : FormFactorGauss, bp::wrapper< FormFactorGauss > return IFormFactorBorn::evaluate( boost::ref(k_i), boost::ref(k_f), alpha_i, alpha_f ); } - virtual int getNumberOfStochasticParameters( ) const { - if( bp::override func_getNumberOfStochasticParameters = this->get_override( "getNumberOfStochasticParameters" ) ) - return func_getNumberOfStochasticParameters( ); + virtual double getHeight( ) const { + if( bp::override func_getHeight = this->get_override( "getHeight" ) ) + return func_getHeight( ); else{ - return this->IFormFactor::getNumberOfStochasticParameters( ); + return this->IFormFactor::getHeight( ); } } - int default_getNumberOfStochasticParameters( ) const { - return IFormFactor::getNumberOfStochasticParameters( ); + double default_getHeight( ) const { + return IFormFactor::getHeight( ); } virtual double getVolume( ) const { @@ -917,6 +1085,18 @@ struct FormFactorGauss_wrapper : FormFactorGauss, bp::wrapper< FormFactorGauss > return IFormFactor::getVolume( ); } + virtual bool isDistributedFormFactor( ) const { + if( bp::override func_isDistributedFormFactor = this->get_override( "isDistributedFormFactor" ) ) + return func_isDistributedFormFactor( ); + else{ + return this->IFormFactor::isDistributedFormFactor( ); + } + } + + bool default_isDistributedFormFactor( ) const { + return IFormFactor::isDistributedFormFactor( ); + } + virtual void setAmbientRefractiveIndex( ::complex_t refractive_index ) { if( bp::override func_setAmbientRefractiveIndex = this->get_override( "setAmbientRefractiveIndex" ) ) func_setAmbientRefractiveIndex( refractive_index ); @@ -971,7 +1151,7 @@ struct FormFactorLorentz_wrapper : FormFactorLorentz, bp::wrapper< FormFactorLor return FormFactorLorentz::clone( ); } - virtual int getNumberOfStochasticParameters( ) { + virtual int getNumberOfStochasticParameters( ) const { if( bp::override func_getNumberOfStochasticParameters = this->get_override( "getNumberOfStochasticParameters" ) ) return func_getNumberOfStochasticParameters( ); else{ @@ -979,11 +1159,23 @@ struct FormFactorLorentz_wrapper : FormFactorLorentz, bp::wrapper< FormFactorLor } } - int default_getNumberOfStochasticParameters( ) { + int default_getNumberOfStochasticParameters( ) const { return FormFactorLorentz::getNumberOfStochasticParameters( ); } - virtual ::ParameterPool * createParameterTree( ) { + virtual void createDistributedFormFactors( ::std::vector< IFormFactor* > & form_factors, ::std::vector< double > & probabilities, ::size_t nbr_samples ) const { + if( bp::override func_createDistributedFormFactors = this->get_override( "createDistributedFormFactors" ) ) + func_createDistributedFormFactors( boost::ref(form_factors), boost::ref(probabilities), nbr_samples ); + else{ + this->IFormFactor::createDistributedFormFactors( boost::ref(form_factors), boost::ref(probabilities), nbr_samples ); + } + } + + void default_createDistributedFormFactors( ::std::vector< IFormFactor* > & form_factors, ::std::vector< double > & probabilities, ::size_t nbr_samples ) const { + IFormFactor::createDistributedFormFactors( boost::ref(form_factors), boost::ref(probabilities), nbr_samples ); + } + + virtual ::ParameterPool * createParameterTree( ) const { if( bp::override func_createParameterTree = this->get_override( "createParameterTree" ) ) return func_createParameterTree( ); else{ @@ -991,7 +1183,7 @@ struct FormFactorLorentz_wrapper : FormFactorLorentz, bp::wrapper< FormFactorLor } } - ::ParameterPool * default_createParameterTree( ) { + ::ParameterPool * default_createParameterTree( ) const { return ISample::createParameterTree( ); } @@ -1007,16 +1199,16 @@ struct FormFactorLorentz_wrapper : FormFactorLorentz, bp::wrapper< FormFactorLor return IFormFactorBorn::evaluate( boost::ref(k_i), boost::ref(k_f), alpha_i, alpha_f ); } - virtual int getNumberOfStochasticParameters( ) const { - if( bp::override func_getNumberOfStochasticParameters = this->get_override( "getNumberOfStochasticParameters" ) ) - return func_getNumberOfStochasticParameters( ); + virtual double getHeight( ) const { + if( bp::override func_getHeight = this->get_override( "getHeight" ) ) + return func_getHeight( ); else{ - return this->IFormFactor::getNumberOfStochasticParameters( ); + return this->IFormFactor::getHeight( ); } } - int default_getNumberOfStochasticParameters( ) const { - return IFormFactor::getNumberOfStochasticParameters( ); + double default_getHeight( ) const { + return IFormFactor::getHeight( ); } virtual double getVolume( ) const { @@ -1031,6 +1223,18 @@ struct FormFactorLorentz_wrapper : FormFactorLorentz, bp::wrapper< FormFactorLor return IFormFactor::getVolume( ); } + virtual bool isDistributedFormFactor( ) const { + if( bp::override func_isDistributedFormFactor = this->get_override( "isDistributedFormFactor" ) ) + return func_isDistributedFormFactor( ); + else{ + return this->IFormFactor::isDistributedFormFactor( ); + } + } + + bool default_isDistributedFormFactor( ) const { + return IFormFactor::isDistributedFormFactor( ); + } + virtual void setAmbientRefractiveIndex( ::complex_t refractive_index ) { if( bp::override func_setAmbientRefractiveIndex = this->get_override( "setAmbientRefractiveIndex" ) ) func_setAmbientRefractiveIndex( refractive_index ); @@ -1078,126 +1282,43 @@ struct FormFactorPrism3_wrapper : FormFactorPrism3, bp::wrapper< FormFactorPrism return FormFactorPrism3::clone( ); } - virtual int getNumberOfStochasticParameters( ) { - if( bp::override func_getNumberOfStochasticParameters = this->get_override( "getNumberOfStochasticParameters" ) ) - return func_getNumberOfStochasticParameters( ); - else{ - return this->FormFactorPrism3::getNumberOfStochasticParameters( ); - } - } - - int default_getNumberOfStochasticParameters( ) { - return FormFactorPrism3::getNumberOfStochasticParameters( ); - } - - virtual ::ParameterPool * createParameterTree( ) { - if( bp::override func_createParameterTree = this->get_override( "createParameterTree" ) ) - return func_createParameterTree( ); + virtual double getHeight( ) const { + if( bp::override func_getHeight = this->get_override( "getHeight" ) ) + return func_getHeight( ); else{ - return this->ISample::createParameterTree( ); + return this->FormFactorPrism3::getHeight( ); } } - ::ParameterPool * default_createParameterTree( ) { - return ISample::createParameterTree( ); - } - - virtual ::complex_t evaluate( ::cvector_t const & k_i, ::cvector_t const & k_f, double alpha_i, double alpha_f ) const { - if( bp::override func_evaluate = this->get_override( "evaluate" ) ) - return func_evaluate( boost::ref(k_i), boost::ref(k_f), alpha_i, alpha_f ); - else{ - return this->IFormFactorBorn::evaluate( boost::ref(k_i), boost::ref(k_f), alpha_i, alpha_f ); - } - } - - ::complex_t default_evaluate( ::cvector_t const & k_i, ::cvector_t const & k_f, double alpha_i, double alpha_f ) const { - return IFormFactorBorn::evaluate( boost::ref(k_i), boost::ref(k_f), alpha_i, alpha_f ); + double default_getHeight( ) const { + return FormFactorPrism3::getHeight( ); } virtual int getNumberOfStochasticParameters( ) const { if( bp::override func_getNumberOfStochasticParameters = this->get_override( "getNumberOfStochasticParameters" ) ) return func_getNumberOfStochasticParameters( ); else{ - return this->IFormFactor::getNumberOfStochasticParameters( ); + return this->FormFactorPrism3::getNumberOfStochasticParameters( ); } } int default_getNumberOfStochasticParameters( ) const { - return IFormFactor::getNumberOfStochasticParameters( ); - } - - virtual double getVolume( ) const { - if( bp::override func_getVolume = this->get_override( "getVolume" ) ) - return func_getVolume( ); - else{ - return this->IFormFactor::getVolume( ); - } - } - - double default_getVolume( ) const { - return IFormFactor::getVolume( ); - } - - virtual void setAmbientRefractiveIndex( ::complex_t refractive_index ) { - if( bp::override func_setAmbientRefractiveIndex = this->get_override( "setAmbientRefractiveIndex" ) ) - func_setAmbientRefractiveIndex( refractive_index ); - else{ - this->IFormFactor::setAmbientRefractiveIndex( refractive_index ); - } - } - - void default_setAmbientRefractiveIndex( ::complex_t refractive_index ) { - IFormFactor::setAmbientRefractiveIndex( refractive_index ); - } - - virtual void walk_and_print( ) { - if( bp::override func_walk_and_print = this->get_override( "walk_and_print" ) ) - func_walk_and_print( ); - else{ - this->ISample::walk_and_print( ); - } - } - - void default_walk_and_print( ) { - ISample::walk_and_print( ); - } - -}; - -struct FormFactorPyramid_wrapper : FormFactorPyramid, bp::wrapper< FormFactorPyramid > { - - FormFactorPyramid_wrapper(double height, double half_side, double alpha ) - : FormFactorPyramid( height, half_side, alpha ) - , bp::wrapper< FormFactorPyramid >(){ - // constructor - - } - - virtual ::FormFactorPyramid * clone( ) const { - if( bp::override func_clone = this->get_override( "clone" ) ) - return func_clone( ); - else{ - return this->FormFactorPyramid::clone( ); - } - } - - ::FormFactorPyramid * default_clone( ) const { - return FormFactorPyramid::clone( ); + return FormFactorPrism3::getNumberOfStochasticParameters( ); } - virtual int getNumberOfStochasticParameters( ) { - if( bp::override func_getNumberOfStochasticParameters = this->get_override( "getNumberOfStochasticParameters" ) ) - return func_getNumberOfStochasticParameters( ); + virtual void createDistributedFormFactors( ::std::vector< IFormFactor* > & form_factors, ::std::vector< double > & probabilities, ::size_t nbr_samples ) const { + if( bp::override func_createDistributedFormFactors = this->get_override( "createDistributedFormFactors" ) ) + func_createDistributedFormFactors( boost::ref(form_factors), boost::ref(probabilities), nbr_samples ); else{ - return this->FormFactorPyramid::getNumberOfStochasticParameters( ); + this->IFormFactor::createDistributedFormFactors( boost::ref(form_factors), boost::ref(probabilities), nbr_samples ); } } - int default_getNumberOfStochasticParameters( ) { - return FormFactorPyramid::getNumberOfStochasticParameters( ); + void default_createDistributedFormFactors( ::std::vector< IFormFactor* > & form_factors, ::std::vector< double > & probabilities, ::size_t nbr_samples ) const { + IFormFactor::createDistributedFormFactors( boost::ref(form_factors), boost::ref(probabilities), nbr_samples ); } - virtual ::ParameterPool * createParameterTree( ) { + virtual ::ParameterPool * createParameterTree( ) const { if( bp::override func_createParameterTree = this->get_override( "createParameterTree" ) ) return func_createParameterTree( ); else{ @@ -1205,7 +1326,7 @@ struct FormFactorPyramid_wrapper : FormFactorPyramid, bp::wrapper< FormFactorPyr } } - ::ParameterPool * default_createParameterTree( ) { + ::ParameterPool * default_createParameterTree( ) const { return ISample::createParameterTree( ); } @@ -1221,18 +1342,6 @@ struct FormFactorPyramid_wrapper : FormFactorPyramid, bp::wrapper< FormFactorPyr return IFormFactorBorn::evaluate( boost::ref(k_i), boost::ref(k_f), alpha_i, alpha_f ); } - virtual int getNumberOfStochasticParameters( ) const { - if( bp::override func_getNumberOfStochasticParameters = this->get_override( "getNumberOfStochasticParameters" ) ) - return func_getNumberOfStochasticParameters( ); - else{ - return this->IFormFactor::getNumberOfStochasticParameters( ); - } - } - - int default_getNumberOfStochasticParameters( ) const { - return IFormFactor::getNumberOfStochasticParameters( ); - } - virtual double getVolume( ) const { if( bp::override func_getVolume = this->get_override( "getVolume" ) ) return func_getVolume( ); @@ -1245,6 +1354,18 @@ struct FormFactorPyramid_wrapper : FormFactorPyramid, bp::wrapper< FormFactorPyr return IFormFactor::getVolume( ); } + virtual bool isDistributedFormFactor( ) const { + if( bp::override func_isDistributedFormFactor = this->get_override( "isDistributedFormFactor" ) ) + return func_isDistributedFormFactor( ); + else{ + return this->IFormFactor::isDistributedFormFactor( ); + } + } + + bool default_isDistributedFormFactor( ) const { + return IFormFactor::isDistributedFormFactor( ); + } + virtual void setAmbientRefractiveIndex( ::complex_t refractive_index ) { if( bp::override func_setAmbientRefractiveIndex = this->get_override( "setAmbientRefractiveIndex" ) ) func_setAmbientRefractiveIndex( refractive_index ); @@ -1271,43 +1392,22 @@ struct FormFactorPyramid_wrapper : FormFactorPyramid, bp::wrapper< FormFactorPyr }; -struct GISASExperiment_wrapper : GISASExperiment, bp::wrapper< GISASExperiment > { +void register_classes_1(){ - GISASExperiment_wrapper( ) - : GISASExperiment( ) - , bp::wrapper< GISASExperiment >(){ - // null constructor - + { //::std::vector< double > + typedef bp::class_< std::vector< double > > vdouble1d_t_exposer_t; + vdouble1d_t_exposer_t vdouble1d_t_exposer = vdouble1d_t_exposer_t( "vdouble1d_t" ); + bp::scope vdouble1d_t_scope( vdouble1d_t_exposer ); + vdouble1d_t_exposer.def( bp::vector_indexing_suite< ::std::vector< double >, true >() ); } - virtual void normalize( ) { - if( bp::override func_normalize = this->get_override( "normalize" ) ) - func_normalize( ); - else{ - this->GISASExperiment::normalize( ); - } - } - - void default_normalize( ) { - GISASExperiment::normalize( ); - } - - virtual void runSimulation( ) { - if( bp::override func_runSimulation = this->get_override( "runSimulation" ) ) - func_runSimulation( ); - else{ - this->GISASExperiment::runSimulation( ); - } - } - - void default_runSimulation( ) { - GISASExperiment::runSimulation( ); + { //::std::vector< ParticleInfo* > + typedef bp::class_< std::vector< ParticleInfo* > > vector_less__ParticleInfo_ptr___greater__exposer_t; + vector_less__ParticleInfo_ptr___greater__exposer_t vector_less__ParticleInfo_ptr___greater__exposer = vector_less__ParticleInfo_ptr___greater__exposer_t( "vector_less__ParticleInfo_ptr___greater_" ); + bp::scope vector_less__ParticleInfo_ptr___greater__scope( vector_less__ParticleInfo_ptr___greater__exposer ); + vector_less__ParticleInfo_ptr___greater__exposer.def( bp::vector_indexing_suite< ::std::vector< ParticleInfo* > >() ); } -}; - -void register_classes_1(){ - { //::std::vector< OpticalFresnel::FresnelCoeff > typedef bp::class_< std::vector< OpticalFresnel::FresnelCoeff > > MultiLayerCoeff_t_exposer_t; MultiLayerCoeff_t_exposer_t MultiLayerCoeff_t_exposer = MultiLayerCoeff_t_exposer_t( "MultiLayerCoeff_t" ); @@ -1315,6 +1415,13 @@ void register_classes_1(){ MultiLayerCoeff_t_exposer.def( bp::vector_indexing_suite< ::std::vector< OpticalFresnel::FresnelCoeff > >() ); } + { //::std::vector< IFormFactor* > + typedef bp::class_< std::vector< IFormFactor* > > vector_less__IFormFactor_ptr___greater__exposer_t; + vector_less__IFormFactor_ptr___greater__exposer_t vector_less__IFormFactor_ptr___greater__exposer = vector_less__IFormFactor_ptr___greater__exposer_t( "vector_less__IFormFactor_ptr___greater_" ); + bp::scope vector_less__IFormFactor_ptr___greater__scope( vector_less__IFormFactor_ptr___greater__exposer ); + vector_less__IFormFactor_ptr___greater__exposer.def( bp::vector_indexing_suite< ::std::vector< IFormFactor* > >() ); + } + { //::std::vector< Geometry::BasicVector3D<double> > typedef bp::class_< std::vector< Geometry::BasicVector3D<double> > > vector_kvector_t_exposer_t; vector_kvector_t_exposer_t vector_kvector_t_exposer = vector_kvector_t_exposer_t( "vector_kvector_t" ); @@ -1349,8 +1456,8 @@ void register_classes_1(){ } { //::ISample::createParameterTree - typedef ::ParameterPool * ( ::ISample::*createParameterTree_function_type )( ) ; - typedef ::ParameterPool * ( ISample_wrapper::*default_createParameterTree_function_type )( ) ; + typedef ::ParameterPool * ( ::ISample::*createParameterTree_function_type )( ) const; + typedef ::ParameterPool * ( ISample_wrapper::*default_createParameterTree_function_type )( ) const; ISample_exposer.def( "createParameterTree" @@ -1392,8 +1499,8 @@ void register_classes_1(){ , bp::return_value_policy< bp::manage_new_object >() ) .def( "createParameterTree" - , (::ParameterPool * ( ::ISample::* )( ) )(&::ISample::createParameterTree) - , (::ParameterPool * ( ICompositeSample_wrapper::* )( ) )(&ICompositeSample_wrapper::default_createParameterTree) + , (::ParameterPool * ( ::ISample::* )( ) const)(&::ISample::createParameterTree) + , (::ParameterPool * ( ICompositeSample_wrapper::* )( ) const)(&ICompositeSample_wrapper::default_createParameterTree) , bp::return_value_policy< bp::manage_new_object >() ) .def( "walk_and_print" @@ -1423,8 +1530,8 @@ void register_classes_1(){ , ( bp::arg("refractive_index") ) ) .def( "createParameterTree" - , (::ParameterPool * ( ::ISample::* )( ) )(&::ISample::createParameterTree) - , (::ParameterPool * ( IClusteredParticles_wrapper::* )( ) )(&IClusteredParticles_wrapper::default_createParameterTree) + , (::ParameterPool * ( ::ISample::* )( ) const)(&::ISample::createParameterTree) + , (::ParameterPool * ( IClusteredParticles_wrapper::* )( ) const)(&IClusteredParticles_wrapper::default_createParameterTree) , bp::return_value_policy< bp::manage_new_object >() ) .def( "walk_and_print" @@ -1471,8 +1578,8 @@ void register_classes_1(){ , ( bp::arg("dw_factor") ) ) .def( "createParameterTree" - , (::ParameterPool * ( ::ISample::* )( ) )(&::ISample::createParameterTree) - , (::ParameterPool * ( Crystal_wrapper::* )( ) )(&Crystal_wrapper::default_createParameterTree) + , (::ParameterPool * ( ::ISample::* )( ) const)(&::ISample::createParameterTree) + , (::ParameterPool * ( Crystal_wrapper::* )( ) const)(&Crystal_wrapper::default_createParameterTree) , bp::return_value_policy< bp::manage_new_object >() ) .def( "walk_and_print" @@ -1506,10 +1613,20 @@ void register_classes_1(){ "clone" , bp::pure_virtual( (::IFormFactor * ( ::IFormFactor::* )( ) const)(&::IFormFactor::clone) ) , bp::return_value_policy< bp::manage_new_object >() ) + .def( + "createDistributedFormFactors" + , (void ( ::IFormFactor::* )( ::std::vector< IFormFactor* > &,::std::vector< double > &,::size_t ) const)(&::IFormFactor::createDistributedFormFactors) + , (void ( IFormFactor_wrapper::* )( ::std::vector< IFormFactor* > &,::std::vector< double > &,::size_t ) const)(&IFormFactor_wrapper::default_createDistributedFormFactors) + , ( bp::arg("form_factors"), bp::arg("probabilities"), bp::arg("nbr_samples") ) + , bp::return_value_policy< bp::manage_new_object >() ) .def( "evaluate" , bp::pure_virtual( (::complex_t ( ::IFormFactor::* )( ::cvector_t const &,::cvector_t const &,double,double ) const)(&::IFormFactor::evaluate) ) , ( bp::arg("k_i"), bp::arg("k_f"), bp::arg("alpha_i"), bp::arg("alpha_f") ) ) + .def( + "getHeight" + , (double ( ::IFormFactor::* )( ) const)(&::IFormFactor::getHeight) + , (double ( IFormFactor_wrapper::* )( ) const)(&IFormFactor_wrapper::default_getHeight) ) .def( "getNumberOfStochasticParameters" , (int ( ::IFormFactor::* )( ) const)(&::IFormFactor::getNumberOfStochasticParameters) @@ -1518,6 +1635,10 @@ void register_classes_1(){ "getVolume" , (double ( ::IFormFactor::* )( ) const)(&::IFormFactor::getVolume) , (double ( IFormFactor_wrapper::* )( ) const)(&IFormFactor_wrapper::default_getVolume) ) + .def( + "isDistributedFormFactor" + , (bool ( ::IFormFactor::* )( ) const)(&::IFormFactor::isDistributedFormFactor) + , (bool ( IFormFactor_wrapper::* )( ) const)(&IFormFactor_wrapper::default_isDistributedFormFactor) ) .def( "setAmbientRefractiveIndex" , (void ( ::IFormFactor::* )( ::complex_t ) )(&::IFormFactor::setAmbientRefractiveIndex) @@ -1525,8 +1646,8 @@ void register_classes_1(){ , ( bp::arg("refractive_index") ) ) .def( "createParameterTree" - , (::ParameterPool * ( ::ISample::* )( ) )(&::ISample::createParameterTree) - , (::ParameterPool * ( IFormFactor_wrapper::* )( ) )(&IFormFactor_wrapper::default_createParameterTree) + , (::ParameterPool * ( ::ISample::* )( ) const)(&::ISample::createParameterTree) + , (::ParameterPool * ( IFormFactor_wrapper::* )( ) const)(&IFormFactor_wrapper::default_createParameterTree) , bp::return_value_policy< bp::manage_new_object >() ) .def( "walk_and_print" @@ -1547,11 +1668,21 @@ void register_classes_1(){ "evaluate_for_q" , (::complex_t ( IFormFactorBorn_wrapper::* )( ::cvector_t const & ) const)(&IFormFactorBorn_wrapper::evaluate_for_q) , ( bp::arg("q") ) ) + .def( + "createDistributedFormFactors" + , (void ( ::IFormFactor::* )( ::std::vector< IFormFactor* > &,::std::vector< double > &,::size_t ) const)(&::IFormFactor::createDistributedFormFactors) + , (void ( IFormFactorBorn_wrapper::* )( ::std::vector< IFormFactor* > &,::std::vector< double > &,::size_t ) const)(&IFormFactorBorn_wrapper::default_createDistributedFormFactors) + , ( bp::arg("form_factors"), bp::arg("probabilities"), bp::arg("nbr_samples") ) + , bp::return_value_policy< bp::manage_new_object >() ) .def( "createParameterTree" - , (::ParameterPool * ( ::ISample::* )( ) )(&::ISample::createParameterTree) - , (::ParameterPool * ( IFormFactorBorn_wrapper::* )( ) )(&IFormFactorBorn_wrapper::default_createParameterTree) + , (::ParameterPool * ( ::ISample::* )( ) const)(&::ISample::createParameterTree) + , (::ParameterPool * ( IFormFactorBorn_wrapper::* )( ) const)(&IFormFactorBorn_wrapper::default_createParameterTree) , bp::return_value_policy< bp::manage_new_object >() ) + .def( + "getHeight" + , (double ( ::IFormFactor::* )( ) const)(&::IFormFactor::getHeight) + , (double ( IFormFactorBorn_wrapper::* )( ) const)(&IFormFactorBorn_wrapper::default_getHeight) ) .def( "getNumberOfStochasticParameters" , (int ( ::IFormFactor::* )( ) const)(&::IFormFactor::getNumberOfStochasticParameters) @@ -1560,6 +1691,10 @@ void register_classes_1(){ "getVolume" , (double ( ::IFormFactor::* )( ) const)(&::IFormFactor::getVolume) , (double ( IFormFactorBorn_wrapper::* )( ) const)(&IFormFactorBorn_wrapper::default_getVolume) ) + .def( + "isDistributedFormFactor" + , (bool ( ::IFormFactor::* )( ) const)(&::IFormFactor::isDistributedFormFactor) + , (bool ( IFormFactorBorn_wrapper::* )( ) const)(&IFormFactorBorn_wrapper::default_isDistributedFormFactor) ) .def( "setAmbientRefractiveIndex" , (void ( ::IFormFactor::* )( ::complex_t ) )(&::IFormFactor::setAmbientRefractiveIndex) @@ -1581,16 +1716,26 @@ void register_classes_1(){ , (void ( ::FormFactorCrystal::* )( ::complex_t ) )(&::FormFactorCrystal::setAmbientRefractiveIndex) , (void ( FormFactorCrystal_wrapper::* )( ::complex_t ) )(&FormFactorCrystal_wrapper::default_setAmbientRefractiveIndex) , ( bp::arg("refractive_index") ) ) + .def( + "createDistributedFormFactors" + , (void ( ::IFormFactor::* )( ::std::vector< IFormFactor* > &,::std::vector< double > &,::size_t ) const)(&::IFormFactor::createDistributedFormFactors) + , (void ( FormFactorCrystal_wrapper::* )( ::std::vector< IFormFactor* > &,::std::vector< double > &,::size_t ) const)(&FormFactorCrystal_wrapper::default_createDistributedFormFactors) + , ( bp::arg("form_factors"), bp::arg("probabilities"), bp::arg("nbr_samples") ) + , bp::return_value_policy< bp::manage_new_object >() ) .def( "createParameterTree" - , (::ParameterPool * ( ::ISample::* )( ) )(&::ISample::createParameterTree) - , (::ParameterPool * ( FormFactorCrystal_wrapper::* )( ) )(&FormFactorCrystal_wrapper::default_createParameterTree) + , (::ParameterPool * ( ::ISample::* )( ) const)(&::ISample::createParameterTree) + , (::ParameterPool * ( FormFactorCrystal_wrapper::* )( ) const)(&FormFactorCrystal_wrapper::default_createParameterTree) , bp::return_value_policy< bp::manage_new_object >() ) .def( "evaluate" , (::complex_t ( ::IFormFactorBorn::* )( ::cvector_t const &,::cvector_t const &,double,double ) const)(&::IFormFactorBorn::evaluate) , (::complex_t ( FormFactorCrystal_wrapper::* )( ::cvector_t const &,::cvector_t const &,double,double ) const)(&FormFactorCrystal_wrapper::default_evaluate) , ( bp::arg("k_i"), bp::arg("k_f"), bp::arg("alpha_i"), bp::arg("alpha_f") ) ) + .def( + "getHeight" + , (double ( ::IFormFactor::* )( ) const)(&::IFormFactor::getHeight) + , (double ( FormFactorCrystal_wrapper::* )( ) const)(&FormFactorCrystal_wrapper::default_getHeight) ) .def( "getNumberOfStochasticParameters" , (int ( ::IFormFactor::* )( ) const)(&::IFormFactor::getNumberOfStochasticParameters) @@ -1599,6 +1744,10 @@ void register_classes_1(){ "getVolume" , (double ( ::IFormFactor::* )( ) const)(&::IFormFactor::getVolume) , (double ( FormFactorCrystal_wrapper::* )( ) const)(&FormFactorCrystal_wrapper::default_getVolume) ) + .def( + "isDistributedFormFactor" + , (bool ( ::IFormFactor::* )( ) const)(&::IFormFactor::isDistributedFormFactor) + , (bool ( FormFactorCrystal_wrapper::* )( ) const)(&FormFactorCrystal_wrapper::default_isDistributedFormFactor) ) .def( "walk_and_print" , (void ( ::ISample::* )( ) )(&::ISample::walk_and_print) @@ -1610,28 +1759,38 @@ void register_classes_1(){ , (::FormFactorCylinder * ( ::FormFactorCylinder::* )( ) const)(&::FormFactorCylinder::clone) , (::FormFactorCylinder * ( FormFactorCylinder_wrapper::* )( ) const)(&FormFactorCylinder_wrapper::default_clone) , bp::return_value_policy< bp::manage_new_object >() ) + .def( + "getHeight" + , (double ( ::FormFactorCylinder::* )( ) const)(&::FormFactorCylinder::getHeight) + , (double ( FormFactorCylinder_wrapper::* )( ) const)(&FormFactorCylinder_wrapper::default_getHeight) ) .def( "getNumberOfStochasticParameters" - , (int ( ::FormFactorCylinder::* )( ) )(&::FormFactorCylinder::getNumberOfStochasticParameters) - , (int ( FormFactorCylinder_wrapper::* )( ) )(&FormFactorCylinder_wrapper::default_getNumberOfStochasticParameters) ) + , (int ( ::FormFactorCylinder::* )( ) const)(&::FormFactorCylinder::getNumberOfStochasticParameters) + , (int ( FormFactorCylinder_wrapper::* )( ) const)(&FormFactorCylinder_wrapper::default_getNumberOfStochasticParameters) ) + .def( + "createDistributedFormFactors" + , (void ( ::IFormFactor::* )( ::std::vector< IFormFactor* > &,::std::vector< double > &,::size_t ) const)(&::IFormFactor::createDistributedFormFactors) + , (void ( FormFactorCylinder_wrapper::* )( ::std::vector< IFormFactor* > &,::std::vector< double > &,::size_t ) const)(&FormFactorCylinder_wrapper::default_createDistributedFormFactors) + , ( bp::arg("form_factors"), bp::arg("probabilities"), bp::arg("nbr_samples") ) + , bp::return_value_policy< bp::manage_new_object >() ) .def( "createParameterTree" - , (::ParameterPool * ( ::ISample::* )( ) )(&::ISample::createParameterTree) - , (::ParameterPool * ( FormFactorCylinder_wrapper::* )( ) )(&FormFactorCylinder_wrapper::default_createParameterTree) + , (::ParameterPool * ( ::ISample::* )( ) const)(&::ISample::createParameterTree) + , (::ParameterPool * ( FormFactorCylinder_wrapper::* )( ) const)(&FormFactorCylinder_wrapper::default_createParameterTree) , bp::return_value_policy< bp::manage_new_object >() ) .def( "evaluate" , (::complex_t ( ::IFormFactorBorn::* )( ::cvector_t const &,::cvector_t const &,double,double ) const)(&::IFormFactorBorn::evaluate) , (::complex_t ( FormFactorCylinder_wrapper::* )( ::cvector_t const &,::cvector_t const &,double,double ) const)(&FormFactorCylinder_wrapper::default_evaluate) , ( bp::arg("k_i"), bp::arg("k_f"), bp::arg("alpha_i"), bp::arg("alpha_f") ) ) - .def( - "getNumberOfStochasticParameters" - , (int ( ::IFormFactor::* )( ) const)(&::IFormFactor::getNumberOfStochasticParameters) - , (int ( FormFactorCylinder_wrapper::* )( ) const)(&FormFactorCylinder_wrapper::default_getNumberOfStochasticParameters) ) .def( "getVolume" , (double ( ::IFormFactor::* )( ) const)(&::IFormFactor::getVolume) , (double ( FormFactorCylinder_wrapper::* )( ) const)(&FormFactorCylinder_wrapper::default_getVolume) ) + .def( + "isDistributedFormFactor" + , (bool ( ::IFormFactor::* )( ) const)(&::IFormFactor::isDistributedFormFactor) + , (bool ( FormFactorCylinder_wrapper::* )( ) const)(&FormFactorCylinder_wrapper::default_isDistributedFormFactor) ) .def( "setAmbientRefractiveIndex" , (void ( ::IFormFactor::* )( ::complex_t ) )(&::IFormFactor::setAmbientRefractiveIndex) @@ -1648,31 +1807,41 @@ void register_classes_1(){ , (::FormFactorFullSphere * ( ::FormFactorFullSphere::* )( ) const)(&::FormFactorFullSphere::clone) , (::FormFactorFullSphere * ( FormFactorFullSphere_wrapper::* )( ) const)(&FormFactorFullSphere_wrapper::default_clone) , bp::return_value_policy< bp::manage_new_object >() ) + .def( + "getHeight" + , (double ( ::FormFactorFullSphere::* )( ) const)(&::FormFactorFullSphere::getHeight) + , (double ( FormFactorFullSphere_wrapper::* )( ) const)(&FormFactorFullSphere_wrapper::default_getHeight) ) .def( "getNumberOfStochasticParameters" - , (int ( ::FormFactorFullSphere::* )( ) )(&::FormFactorFullSphere::getNumberOfStochasticParameters) - , (int ( FormFactorFullSphere_wrapper::* )( ) )(&FormFactorFullSphere_wrapper::default_getNumberOfStochasticParameters) ) + , (int ( ::FormFactorFullSphere::* )( ) const)(&::FormFactorFullSphere::getNumberOfStochasticParameters) + , (int ( FormFactorFullSphere_wrapper::* )( ) const)(&FormFactorFullSphere_wrapper::default_getNumberOfStochasticParameters) ) .def( "getRadius" , (double ( ::FormFactorFullSphere::* )( ) const)( &::FormFactorFullSphere::getRadius ) ) + .def( + "createDistributedFormFactors" + , (void ( ::IFormFactor::* )( ::std::vector< IFormFactor* > &,::std::vector< double > &,::size_t ) const)(&::IFormFactor::createDistributedFormFactors) + , (void ( FormFactorFullSphere_wrapper::* )( ::std::vector< IFormFactor* > &,::std::vector< double > &,::size_t ) const)(&FormFactorFullSphere_wrapper::default_createDistributedFormFactors) + , ( bp::arg("form_factors"), bp::arg("probabilities"), bp::arg("nbr_samples") ) + , bp::return_value_policy< bp::manage_new_object >() ) .def( "createParameterTree" - , (::ParameterPool * ( ::ISample::* )( ) )(&::ISample::createParameterTree) - , (::ParameterPool * ( FormFactorFullSphere_wrapper::* )( ) )(&FormFactorFullSphere_wrapper::default_createParameterTree) + , (::ParameterPool * ( ::ISample::* )( ) const)(&::ISample::createParameterTree) + , (::ParameterPool * ( FormFactorFullSphere_wrapper::* )( ) const)(&FormFactorFullSphere_wrapper::default_createParameterTree) , bp::return_value_policy< bp::manage_new_object >() ) .def( "evaluate" , (::complex_t ( ::IFormFactorBorn::* )( ::cvector_t const &,::cvector_t const &,double,double ) const)(&::IFormFactorBorn::evaluate) , (::complex_t ( FormFactorFullSphere_wrapper::* )( ::cvector_t const &,::cvector_t const &,double,double ) const)(&FormFactorFullSphere_wrapper::default_evaluate) , ( bp::arg("k_i"), bp::arg("k_f"), bp::arg("alpha_i"), bp::arg("alpha_f") ) ) - .def( - "getNumberOfStochasticParameters" - , (int ( ::IFormFactor::* )( ) const)(&::IFormFactor::getNumberOfStochasticParameters) - , (int ( FormFactorFullSphere_wrapper::* )( ) const)(&FormFactorFullSphere_wrapper::default_getNumberOfStochasticParameters) ) .def( "getVolume" , (double ( ::IFormFactor::* )( ) const)(&::IFormFactor::getVolume) , (double ( FormFactorFullSphere_wrapper::* )( ) const)(&FormFactorFullSphere_wrapper::default_getVolume) ) + .def( + "isDistributedFormFactor" + , (bool ( ::IFormFactor::* )( ) const)(&::IFormFactor::isDistributedFormFactor) + , (bool ( FormFactorFullSphere_wrapper::* )( ) const)(&FormFactorFullSphere_wrapper::default_isDistributedFormFactor) ) .def( "setAmbientRefractiveIndex" , (void ( ::IFormFactor::* )( ::complex_t ) )(&::IFormFactor::setAmbientRefractiveIndex) @@ -1692,12 +1861,18 @@ void register_classes_1(){ , bp::return_value_policy< bp::manage_new_object >() ) .def( "getNumberOfStochasticParameters" - , (int ( ::FormFactorGauss::* )( ) )(&::FormFactorGauss::getNumberOfStochasticParameters) - , (int ( FormFactorGauss_wrapper::* )( ) )(&FormFactorGauss_wrapper::default_getNumberOfStochasticParameters) ) + , (int ( ::FormFactorGauss::* )( ) const)(&::FormFactorGauss::getNumberOfStochasticParameters) + , (int ( FormFactorGauss_wrapper::* )( ) const)(&FormFactorGauss_wrapper::default_getNumberOfStochasticParameters) ) + .def( + "createDistributedFormFactors" + , (void ( ::IFormFactor::* )( ::std::vector< IFormFactor* > &,::std::vector< double > &,::size_t ) const)(&::IFormFactor::createDistributedFormFactors) + , (void ( FormFactorGauss_wrapper::* )( ::std::vector< IFormFactor* > &,::std::vector< double > &,::size_t ) const)(&FormFactorGauss_wrapper::default_createDistributedFormFactors) + , ( bp::arg("form_factors"), bp::arg("probabilities"), bp::arg("nbr_samples") ) + , bp::return_value_policy< bp::manage_new_object >() ) .def( "createParameterTree" - , (::ParameterPool * ( ::ISample::* )( ) )(&::ISample::createParameterTree) - , (::ParameterPool * ( FormFactorGauss_wrapper::* )( ) )(&FormFactorGauss_wrapper::default_createParameterTree) + , (::ParameterPool * ( ::ISample::* )( ) const)(&::ISample::createParameterTree) + , (::ParameterPool * ( FormFactorGauss_wrapper::* )( ) const)(&FormFactorGauss_wrapper::default_createParameterTree) , bp::return_value_policy< bp::manage_new_object >() ) .def( "evaluate" @@ -1705,13 +1880,17 @@ void register_classes_1(){ , (::complex_t ( FormFactorGauss_wrapper::* )( ::cvector_t const &,::cvector_t const &,double,double ) const)(&FormFactorGauss_wrapper::default_evaluate) , ( bp::arg("k_i"), bp::arg("k_f"), bp::arg("alpha_i"), bp::arg("alpha_f") ) ) .def( - "getNumberOfStochasticParameters" - , (int ( ::IFormFactor::* )( ) const)(&::IFormFactor::getNumberOfStochasticParameters) - , (int ( FormFactorGauss_wrapper::* )( ) const)(&FormFactorGauss_wrapper::default_getNumberOfStochasticParameters) ) + "getHeight" + , (double ( ::IFormFactor::* )( ) const)(&::IFormFactor::getHeight) + , (double ( FormFactorGauss_wrapper::* )( ) const)(&FormFactorGauss_wrapper::default_getHeight) ) .def( "getVolume" , (double ( ::IFormFactor::* )( ) const)(&::IFormFactor::getVolume) , (double ( FormFactorGauss_wrapper::* )( ) const)(&FormFactorGauss_wrapper::default_getVolume) ) + .def( + "isDistributedFormFactor" + , (bool ( ::IFormFactor::* )( ) const)(&::IFormFactor::isDistributedFormFactor) + , (bool ( FormFactorGauss_wrapper::* )( ) const)(&FormFactorGauss_wrapper::default_isDistributedFormFactor) ) .def( "setAmbientRefractiveIndex" , (void ( ::IFormFactor::* )( ::complex_t ) )(&::IFormFactor::setAmbientRefractiveIndex) @@ -1731,12 +1910,18 @@ void register_classes_1(){ , bp::return_value_policy< bp::manage_new_object >() ) .def( "getNumberOfStochasticParameters" - , (int ( ::FormFactorLorentz::* )( ) )(&::FormFactorLorentz::getNumberOfStochasticParameters) - , (int ( FormFactorLorentz_wrapper::* )( ) )(&FormFactorLorentz_wrapper::default_getNumberOfStochasticParameters) ) + , (int ( ::FormFactorLorentz::* )( ) const)(&::FormFactorLorentz::getNumberOfStochasticParameters) + , (int ( FormFactorLorentz_wrapper::* )( ) const)(&FormFactorLorentz_wrapper::default_getNumberOfStochasticParameters) ) + .def( + "createDistributedFormFactors" + , (void ( ::IFormFactor::* )( ::std::vector< IFormFactor* > &,::std::vector< double > &,::size_t ) const)(&::IFormFactor::createDistributedFormFactors) + , (void ( FormFactorLorentz_wrapper::* )( ::std::vector< IFormFactor* > &,::std::vector< double > &,::size_t ) const)(&FormFactorLorentz_wrapper::default_createDistributedFormFactors) + , ( bp::arg("form_factors"), bp::arg("probabilities"), bp::arg("nbr_samples") ) + , bp::return_value_policy< bp::manage_new_object >() ) .def( "createParameterTree" - , (::ParameterPool * ( ::ISample::* )( ) )(&::ISample::createParameterTree) - , (::ParameterPool * ( FormFactorLorentz_wrapper::* )( ) )(&FormFactorLorentz_wrapper::default_createParameterTree) + , (::ParameterPool * ( ::ISample::* )( ) const)(&::ISample::createParameterTree) + , (::ParameterPool * ( FormFactorLorentz_wrapper::* )( ) const)(&FormFactorLorentz_wrapper::default_createParameterTree) , bp::return_value_policy< bp::manage_new_object >() ) .def( "evaluate" @@ -1744,13 +1929,17 @@ void register_classes_1(){ , (::complex_t ( FormFactorLorentz_wrapper::* )( ::cvector_t const &,::cvector_t const &,double,double ) const)(&FormFactorLorentz_wrapper::default_evaluate) , ( bp::arg("k_i"), bp::arg("k_f"), bp::arg("alpha_i"), bp::arg("alpha_f") ) ) .def( - "getNumberOfStochasticParameters" - , (int ( ::IFormFactor::* )( ) const)(&::IFormFactor::getNumberOfStochasticParameters) - , (int ( FormFactorLorentz_wrapper::* )( ) const)(&FormFactorLorentz_wrapper::default_getNumberOfStochasticParameters) ) + "getHeight" + , (double ( ::IFormFactor::* )( ) const)(&::IFormFactor::getHeight) + , (double ( FormFactorLorentz_wrapper::* )( ) const)(&FormFactorLorentz_wrapper::default_getHeight) ) .def( "getVolume" , (double ( ::IFormFactor::* )( ) const)(&::IFormFactor::getVolume) , (double ( FormFactorLorentz_wrapper::* )( ) const)(&FormFactorLorentz_wrapper::default_getVolume) ) + .def( + "isDistributedFormFactor" + , (bool ( ::IFormFactor::* )( ) const)(&::IFormFactor::isDistributedFormFactor) + , (bool ( FormFactorLorentz_wrapper::* )( ) const)(&FormFactorLorentz_wrapper::default_isDistributedFormFactor) ) .def( "setAmbientRefractiveIndex" , (void ( ::IFormFactor::* )( ::complex_t ) )(&::IFormFactor::setAmbientRefractiveIndex) @@ -1768,90 +1957,45 @@ void register_classes_1(){ , (::FormFactorPrism3 * ( FormFactorPrism3_wrapper::* )( ) const)(&FormFactorPrism3_wrapper::default_clone) , bp::return_value_policy< bp::manage_new_object >() ) .def( - "getNumberOfStochasticParameters" - , (int ( ::FormFactorPrism3::* )( ) )(&::FormFactorPrism3::getNumberOfStochasticParameters) - , (int ( FormFactorPrism3_wrapper::* )( ) )(&FormFactorPrism3_wrapper::default_getNumberOfStochasticParameters) ) - .def( - "createParameterTree" - , (::ParameterPool * ( ::ISample::* )( ) )(&::ISample::createParameterTree) - , (::ParameterPool * ( FormFactorPrism3_wrapper::* )( ) )(&FormFactorPrism3_wrapper::default_createParameterTree) - , bp::return_value_policy< bp::manage_new_object >() ) - .def( - "evaluate" - , (::complex_t ( ::IFormFactorBorn::* )( ::cvector_t const &,::cvector_t const &,double,double ) const)(&::IFormFactorBorn::evaluate) - , (::complex_t ( FormFactorPrism3_wrapper::* )( ::cvector_t const &,::cvector_t const &,double,double ) const)(&FormFactorPrism3_wrapper::default_evaluate) - , ( bp::arg("k_i"), bp::arg("k_f"), bp::arg("alpha_i"), bp::arg("alpha_f") ) ) + "getHeight" + , (double ( ::FormFactorPrism3::* )( ) const)(&::FormFactorPrism3::getHeight) + , (double ( FormFactorPrism3_wrapper::* )( ) const)(&FormFactorPrism3_wrapper::default_getHeight) ) .def( "getNumberOfStochasticParameters" - , (int ( ::IFormFactor::* )( ) const)(&::IFormFactor::getNumberOfStochasticParameters) + , (int ( ::FormFactorPrism3::* )( ) const)(&::FormFactorPrism3::getNumberOfStochasticParameters) , (int ( FormFactorPrism3_wrapper::* )( ) const)(&FormFactorPrism3_wrapper::default_getNumberOfStochasticParameters) ) .def( - "getVolume" - , (double ( ::IFormFactor::* )( ) const)(&::IFormFactor::getVolume) - , (double ( FormFactorPrism3_wrapper::* )( ) const)(&FormFactorPrism3_wrapper::default_getVolume) ) - .def( - "setAmbientRefractiveIndex" - , (void ( ::IFormFactor::* )( ::complex_t ) )(&::IFormFactor::setAmbientRefractiveIndex) - , (void ( FormFactorPrism3_wrapper::* )( ::complex_t ) )(&FormFactorPrism3_wrapper::default_setAmbientRefractiveIndex) - , ( bp::arg("refractive_index") ) ) - .def( - "walk_and_print" - , (void ( ::ISample::* )( ) )(&::ISample::walk_and_print) - , (void ( FormFactorPrism3_wrapper::* )( ) )(&FormFactorPrism3_wrapper::default_walk_and_print) ); - - bp::class_< FormFactorPyramid_wrapper, bp::bases< IFormFactorBorn >, boost::noncopyable >( "FormFactorPyramid", bp::init< double, double, double >(( bp::arg("height"), bp::arg("half_side"), bp::arg("alpha") )) ) - .def( - "clone" - , (::FormFactorPyramid * ( ::FormFactorPyramid::* )( ) const)(&::FormFactorPyramid::clone) - , (::FormFactorPyramid * ( FormFactorPyramid_wrapper::* )( ) const)(&FormFactorPyramid_wrapper::default_clone) + "createDistributedFormFactors" + , (void ( ::IFormFactor::* )( ::std::vector< IFormFactor* > &,::std::vector< double > &,::size_t ) const)(&::IFormFactor::createDistributedFormFactors) + , (void ( FormFactorPrism3_wrapper::* )( ::std::vector< IFormFactor* > &,::std::vector< double > &,::size_t ) const)(&FormFactorPrism3_wrapper::default_createDistributedFormFactors) + , ( bp::arg("form_factors"), bp::arg("probabilities"), bp::arg("nbr_samples") ) , bp::return_value_policy< bp::manage_new_object >() ) - .def( - "getNumberOfStochasticParameters" - , (int ( ::FormFactorPyramid::* )( ) )(&::FormFactorPyramid::getNumberOfStochasticParameters) - , (int ( FormFactorPyramid_wrapper::* )( ) )(&FormFactorPyramid_wrapper::default_getNumberOfStochasticParameters) ) .def( "createParameterTree" - , (::ParameterPool * ( ::ISample::* )( ) )(&::ISample::createParameterTree) - , (::ParameterPool * ( FormFactorPyramid_wrapper::* )( ) )(&FormFactorPyramid_wrapper::default_createParameterTree) + , (::ParameterPool * ( ::ISample::* )( ) const)(&::ISample::createParameterTree) + , (::ParameterPool * ( FormFactorPrism3_wrapper::* )( ) const)(&FormFactorPrism3_wrapper::default_createParameterTree) , bp::return_value_policy< bp::manage_new_object >() ) .def( "evaluate" , (::complex_t ( ::IFormFactorBorn::* )( ::cvector_t const &,::cvector_t const &,double,double ) const)(&::IFormFactorBorn::evaluate) - , (::complex_t ( FormFactorPyramid_wrapper::* )( ::cvector_t const &,::cvector_t const &,double,double ) const)(&FormFactorPyramid_wrapper::default_evaluate) + , (::complex_t ( FormFactorPrism3_wrapper::* )( ::cvector_t const &,::cvector_t const &,double,double ) const)(&FormFactorPrism3_wrapper::default_evaluate) , ( bp::arg("k_i"), bp::arg("k_f"), bp::arg("alpha_i"), bp::arg("alpha_f") ) ) - .def( - "getNumberOfStochasticParameters" - , (int ( ::IFormFactor::* )( ) const)(&::IFormFactor::getNumberOfStochasticParameters) - , (int ( FormFactorPyramid_wrapper::* )( ) const)(&FormFactorPyramid_wrapper::default_getNumberOfStochasticParameters) ) .def( "getVolume" , (double ( ::IFormFactor::* )( ) const)(&::IFormFactor::getVolume) - , (double ( FormFactorPyramid_wrapper::* )( ) const)(&FormFactorPyramid_wrapper::default_getVolume) ) + , (double ( FormFactorPrism3_wrapper::* )( ) const)(&FormFactorPrism3_wrapper::default_getVolume) ) + .def( + "isDistributedFormFactor" + , (bool ( ::IFormFactor::* )( ) const)(&::IFormFactor::isDistributedFormFactor) + , (bool ( FormFactorPrism3_wrapper::* )( ) const)(&FormFactorPrism3_wrapper::default_isDistributedFormFactor) ) .def( "setAmbientRefractiveIndex" , (void ( ::IFormFactor::* )( ::complex_t ) )(&::IFormFactor::setAmbientRefractiveIndex) - , (void ( FormFactorPyramid_wrapper::* )( ::complex_t ) )(&FormFactorPyramid_wrapper::default_setAmbientRefractiveIndex) + , (void ( FormFactorPrism3_wrapper::* )( ::complex_t ) )(&FormFactorPrism3_wrapper::default_setAmbientRefractiveIndex) , ( bp::arg("refractive_index") ) ) .def( "walk_and_print" , (void ( ::ISample::* )( ) )(&::ISample::walk_and_print) - , (void ( FormFactorPyramid_wrapper::* )( ) )(&FormFactorPyramid_wrapper::default_walk_and_print) ); - - bp::class_< GISASExperiment_wrapper, bp::bases< Experiment >, boost::noncopyable >( "GISASExperiment", bp::init< >() ) - .def( - "normalize" - , (void ( ::GISASExperiment::* )( ) )(&::GISASExperiment::normalize) - , (void ( GISASExperiment_wrapper::* )( ) )(&GISASExperiment_wrapper::default_normalize) ) - .def( - "runSimulation" - , (void ( ::GISASExperiment::* )( ) )(&::GISASExperiment::runSimulation) - , (void ( GISASExperiment_wrapper::* )( ) )(&GISASExperiment_wrapper::default_runSimulation) ) - .def( - "setDetectorParameters" - , (void ( ::GISASExperiment::* )( ::size_t,double,double,::size_t,double,double,bool ) )( &::GISASExperiment::setDetectorParameters ) - , ( bp::arg("n_phi"), bp::arg("phi_f_min"), bp::arg("phi_f_max"), bp::arg("n_alpha"), bp::arg("alpha_f_min"), bp::arg("alpha_f_max"), bp::arg("isgisaxs_style")=(bool)(false) ) ) - .def( - "smearIntensityFromZAxisTilting" - , (void ( ::GISASExperiment::* )( ) )( &::GISASExperiment::smearIntensityFromZAxisTilting ) ); + , (void ( FormFactorPrism3_wrapper::* )( ) )(&FormFactorPrism3_wrapper::default_walk_and_print) ); } diff --git a/Core/PythonAPI/src/PythonInterface_classes_2.cpp b/Core/PythonAPI/src/PythonInterface_classes_2.cpp index b85a99ef3fc326368980b5ff1bebf76596680563..950c2ba1abbd32480249e9f3794cf68b06c5d6fe 100644 --- a/Core/PythonAPI/src/PythonInterface_classes_2.cpp +++ b/Core/PythonAPI/src/PythonInterface_classes_2.cpp @@ -43,8 +43,239 @@ namespace bp = boost::python; +struct FormFactorPyramid_wrapper : FormFactorPyramid, bp::wrapper< FormFactorPyramid > { + + FormFactorPyramid_wrapper(double height, double half_side, double alpha ) + : FormFactorPyramid( height, half_side, alpha ) + , bp::wrapper< FormFactorPyramid >(){ + // constructor + + } + + virtual ::FormFactorPyramid * clone( ) const { + if( bp::override func_clone = this->get_override( "clone" ) ) + return func_clone( ); + else{ + return this->FormFactorPyramid::clone( ); + } + } + + ::FormFactorPyramid * default_clone( ) const { + return FormFactorPyramid::clone( ); + } + + virtual double getHeight( ) const { + if( bp::override func_getHeight = this->get_override( "getHeight" ) ) + return func_getHeight( ); + else{ + return this->FormFactorPyramid::getHeight( ); + } + } + + double default_getHeight( ) const { + return FormFactorPyramid::getHeight( ); + } + + virtual int getNumberOfStochasticParameters( ) const { + if( bp::override func_getNumberOfStochasticParameters = this->get_override( "getNumberOfStochasticParameters" ) ) + return func_getNumberOfStochasticParameters( ); + else{ + return this->FormFactorPyramid::getNumberOfStochasticParameters( ); + } + } + + int default_getNumberOfStochasticParameters( ) const { + return FormFactorPyramid::getNumberOfStochasticParameters( ); + } + + virtual void createDistributedFormFactors( ::std::vector< IFormFactor* > & form_factors, ::std::vector< double > & probabilities, ::size_t nbr_samples ) const { + if( bp::override func_createDistributedFormFactors = this->get_override( "createDistributedFormFactors" ) ) + func_createDistributedFormFactors( boost::ref(form_factors), boost::ref(probabilities), nbr_samples ); + else{ + this->IFormFactor::createDistributedFormFactors( boost::ref(form_factors), boost::ref(probabilities), nbr_samples ); + } + } + + void default_createDistributedFormFactors( ::std::vector< IFormFactor* > & form_factors, ::std::vector< double > & probabilities, ::size_t nbr_samples ) const { + IFormFactor::createDistributedFormFactors( boost::ref(form_factors), boost::ref(probabilities), nbr_samples ); + } + + virtual ::ParameterPool * createParameterTree( ) const { + if( bp::override func_createParameterTree = this->get_override( "createParameterTree" ) ) + return func_createParameterTree( ); + else{ + return this->ISample::createParameterTree( ); + } + } + + ::ParameterPool * default_createParameterTree( ) const { + return ISample::createParameterTree( ); + } + + virtual ::complex_t evaluate( ::cvector_t const & k_i, ::cvector_t const & k_f, double alpha_i, double alpha_f ) const { + if( bp::override func_evaluate = this->get_override( "evaluate" ) ) + return func_evaluate( boost::ref(k_i), boost::ref(k_f), alpha_i, alpha_f ); + else{ + return this->IFormFactorBorn::evaluate( boost::ref(k_i), boost::ref(k_f), alpha_i, alpha_f ); + } + } + + ::complex_t default_evaluate( ::cvector_t const & k_i, ::cvector_t const & k_f, double alpha_i, double alpha_f ) const { + return IFormFactorBorn::evaluate( boost::ref(k_i), boost::ref(k_f), alpha_i, alpha_f ); + } + + virtual double getVolume( ) const { + if( bp::override func_getVolume = this->get_override( "getVolume" ) ) + return func_getVolume( ); + else{ + return this->IFormFactor::getVolume( ); + } + } + + double default_getVolume( ) const { + return IFormFactor::getVolume( ); + } + + virtual bool isDistributedFormFactor( ) const { + if( bp::override func_isDistributedFormFactor = this->get_override( "isDistributedFormFactor" ) ) + return func_isDistributedFormFactor( ); + else{ + return this->IFormFactor::isDistributedFormFactor( ); + } + } + + bool default_isDistributedFormFactor( ) const { + return IFormFactor::isDistributedFormFactor( ); + } + + virtual void setAmbientRefractiveIndex( ::complex_t refractive_index ) { + if( bp::override func_setAmbientRefractiveIndex = this->get_override( "setAmbientRefractiveIndex" ) ) + func_setAmbientRefractiveIndex( refractive_index ); + else{ + this->IFormFactor::setAmbientRefractiveIndex( refractive_index ); + } + } + + void default_setAmbientRefractiveIndex( ::complex_t refractive_index ) { + IFormFactor::setAmbientRefractiveIndex( refractive_index ); + } + + virtual void walk_and_print( ) { + if( bp::override func_walk_and_print = this->get_override( "walk_and_print" ) ) + func_walk_and_print( ); + else{ + this->ISample::walk_and_print( ); + } + } + + void default_walk_and_print( ) { + ISample::walk_and_print( ); + } + +}; + +struct GISASExperiment_wrapper : GISASExperiment, bp::wrapper< GISASExperiment > { + + GISASExperiment_wrapper( ) + : GISASExperiment( ) + , bp::wrapper< GISASExperiment >(){ + // null constructor + + } + + virtual void normalize( ) { + if( bp::override func_normalize = this->get_override( "normalize" ) ) + func_normalize( ); + else{ + this->GISASExperiment::normalize( ); + } + } + + void default_normalize( ) { + GISASExperiment::normalize( ); + } + + virtual void runSimulation( ) { + if( bp::override func_runSimulation = this->get_override( "runSimulation" ) ) + func_runSimulation( ); + else{ + this->GISASExperiment::runSimulation( ); + } + } + + void default_runSimulation( ) { + GISASExperiment::runSimulation( ); + } + +}; + void register_classes_2(){ + bp::class_< FormFactorPyramid_wrapper, bp::bases< IFormFactorBorn >, boost::noncopyable >( "FormFactorPyramid", bp::init< double, double, double >(( bp::arg("height"), bp::arg("half_side"), bp::arg("alpha") )) ) + .def( + "clone" + , (::FormFactorPyramid * ( ::FormFactorPyramid::* )( ) const)(&::FormFactorPyramid::clone) + , (::FormFactorPyramid * ( FormFactorPyramid_wrapper::* )( ) const)(&FormFactorPyramid_wrapper::default_clone) + , bp::return_value_policy< bp::manage_new_object >() ) + .def( + "getHeight" + , (double ( ::FormFactorPyramid::* )( ) const)(&::FormFactorPyramid::getHeight) + , (double ( FormFactorPyramid_wrapper::* )( ) const)(&FormFactorPyramid_wrapper::default_getHeight) ) + .def( + "getNumberOfStochasticParameters" + , (int ( ::FormFactorPyramid::* )( ) const)(&::FormFactorPyramid::getNumberOfStochasticParameters) + , (int ( FormFactorPyramid_wrapper::* )( ) const)(&FormFactorPyramid_wrapper::default_getNumberOfStochasticParameters) ) + .def( + "createDistributedFormFactors" + , (void ( ::IFormFactor::* )( ::std::vector< IFormFactor* > &,::std::vector< double > &,::size_t ) const)(&::IFormFactor::createDistributedFormFactors) + , (void ( FormFactorPyramid_wrapper::* )( ::std::vector< IFormFactor* > &,::std::vector< double > &,::size_t ) const)(&FormFactorPyramid_wrapper::default_createDistributedFormFactors) + , ( bp::arg("form_factors"), bp::arg("probabilities"), bp::arg("nbr_samples") ) + , bp::return_value_policy< bp::manage_new_object >() ) + .def( + "createParameterTree" + , (::ParameterPool * ( ::ISample::* )( ) const)(&::ISample::createParameterTree) + , (::ParameterPool * ( FormFactorPyramid_wrapper::* )( ) const)(&FormFactorPyramid_wrapper::default_createParameterTree) + , bp::return_value_policy< bp::manage_new_object >() ) + .def( + "evaluate" + , (::complex_t ( ::IFormFactorBorn::* )( ::cvector_t const &,::cvector_t const &,double,double ) const)(&::IFormFactorBorn::evaluate) + , (::complex_t ( FormFactorPyramid_wrapper::* )( ::cvector_t const &,::cvector_t const &,double,double ) const)(&FormFactorPyramid_wrapper::default_evaluate) + , ( bp::arg("k_i"), bp::arg("k_f"), bp::arg("alpha_i"), bp::arg("alpha_f") ) ) + .def( + "getVolume" + , (double ( ::IFormFactor::* )( ) const)(&::IFormFactor::getVolume) + , (double ( FormFactorPyramid_wrapper::* )( ) const)(&FormFactorPyramid_wrapper::default_getVolume) ) + .def( + "isDistributedFormFactor" + , (bool ( ::IFormFactor::* )( ) const)(&::IFormFactor::isDistributedFormFactor) + , (bool ( FormFactorPyramid_wrapper::* )( ) const)(&FormFactorPyramid_wrapper::default_isDistributedFormFactor) ) + .def( + "setAmbientRefractiveIndex" + , (void ( ::IFormFactor::* )( ::complex_t ) )(&::IFormFactor::setAmbientRefractiveIndex) + , (void ( FormFactorPyramid_wrapper::* )( ::complex_t ) )(&FormFactorPyramid_wrapper::default_setAmbientRefractiveIndex) + , ( bp::arg("refractive_index") ) ) + .def( + "walk_and_print" + , (void ( ::ISample::* )( ) )(&::ISample::walk_and_print) + , (void ( FormFactorPyramid_wrapper::* )( ) )(&FormFactorPyramid_wrapper::default_walk_and_print) ); + + bp::class_< GISASExperiment_wrapper, bp::bases< Experiment >, boost::noncopyable >( "GISASExperiment", bp::init< >() ) + .def( + "normalize" + , (void ( ::GISASExperiment::* )( ) )(&::GISASExperiment::normalize) + , (void ( GISASExperiment_wrapper::* )( ) )(&GISASExperiment_wrapper::default_normalize) ) + .def( + "runSimulation" + , (void ( ::GISASExperiment::* )( ) )(&::GISASExperiment::runSimulation) + , (void ( GISASExperiment_wrapper::* )( ) )(&GISASExperiment_wrapper::default_runSimulation) ) + .def( + "setDetectorParameters" + , (void ( ::GISASExperiment::* )( ::size_t,double,double,::size_t,double,double,bool ) )( &::GISASExperiment::setDetectorParameters ) + , ( bp::arg("n_phi"), bp::arg("phi_f_min"), bp::arg("phi_f_max"), bp::arg("n_alpha"), bp::arg("alpha_f_min"), bp::arg("alpha_f_max"), bp::arg("isgisaxs_style")=(bool)(false) ) ) + .def( + "smearIntensityFromZAxisTilting" + , (void ( ::GISASExperiment::* )( ) )( &::GISASExperiment::smearIntensityFromZAxisTilting ) ); + { //::Geometry::BasicVector3D< double > typedef bp::class_< Geometry::BasicVector3D< double > > kvector_t_exposer_t; kvector_t_exposer_t kvector_t_exposer = kvector_t_exposer_t( "kvector_t", bp::init< >() ); @@ -744,7 +975,4 @@ void register_classes_2(){ bp::class_< Geometry::TranslateY3D, bp::bases< Geometry::Translate3D > >( "TranslateY3D", bp::init< >() ) .def( bp::init< double >(( bp::arg("y") )) ); - bp::class_< Geometry::TranslateZ3D, bp::bases< Geometry::Translate3D > >( "TranslateZ3D", bp::init< >() ) - .def( bp::init< double >(( bp::arg("z") )) ); - } diff --git a/Core/PythonAPI/src/PythonInterface_classes_3.cpp b/Core/PythonAPI/src/PythonInterface_classes_3.cpp index 2511355a76e6d4c67fa0ff76b67c56aa28b65c70..754e1b204cbb739cc5d44a0dd2f3c5e654d26334 100644 --- a/Core/PythonAPI/src/PythonInterface_classes_3.cpp +++ b/Core/PythonAPI/src/PythonInterface_classes_3.cpp @@ -50,6 +50,18 @@ struct IFormFactorDecorator_wrapper : IFormFactorDecorator, bp::wrapper< IFormFa return func_clone( ); } + virtual double getHeight( ) const { + if( bp::override func_getHeight = this->get_override( "getHeight" ) ) + return func_getHeight( ); + else{ + return this->IFormFactorDecorator::getHeight( ); + } + } + + double default_getHeight( ) const { + return IFormFactorDecorator::getHeight( ); + } + virtual void setAmbientRefractiveIndex( ::complex_t refractive_index ) { if( bp::override func_setAmbientRefractiveIndex = this->get_override( "setAmbientRefractiveIndex" ) ) func_setAmbientRefractiveIndex( refractive_index ); @@ -62,7 +74,19 @@ struct IFormFactorDecorator_wrapper : IFormFactorDecorator, bp::wrapper< IFormFa IFormFactorDecorator::setAmbientRefractiveIndex( refractive_index ); } - virtual ::ParameterPool * createParameterTree( ) { + virtual void createDistributedFormFactors( ::std::vector< IFormFactor* > & form_factors, ::std::vector< double > & probabilities, ::size_t nbr_samples ) const { + if( bp::override func_createDistributedFormFactors = this->get_override( "createDistributedFormFactors" ) ) + func_createDistributedFormFactors( boost::ref(form_factors), boost::ref(probabilities), nbr_samples ); + else{ + this->IFormFactor::createDistributedFormFactors( boost::ref(form_factors), boost::ref(probabilities), nbr_samples ); + } + } + + void default_createDistributedFormFactors( ::std::vector< IFormFactor* > & form_factors, ::std::vector< double > & probabilities, ::size_t nbr_samples ) const { + IFormFactor::createDistributedFormFactors( boost::ref(form_factors), boost::ref(probabilities), nbr_samples ); + } + + virtual ::ParameterPool * createParameterTree( ) const { if( bp::override func_createParameterTree = this->get_override( "createParameterTree" ) ) return func_createParameterTree( ); else{ @@ -70,7 +94,7 @@ struct IFormFactorDecorator_wrapper : IFormFactorDecorator, bp::wrapper< IFormFa } } - ::ParameterPool * default_createParameterTree( ) { + ::ParameterPool * default_createParameterTree( ) const { return ISample::createParameterTree( ); } @@ -103,6 +127,18 @@ struct IFormFactorDecorator_wrapper : IFormFactorDecorator, bp::wrapper< IFormFa return IFormFactor::getVolume( ); } + virtual bool isDistributedFormFactor( ) const { + if( bp::override func_isDistributedFormFactor = this->get_override( "isDistributedFormFactor" ) ) + return func_isDistributedFormFactor( ); + else{ + return this->IFormFactor::isDistributedFormFactor( ); + } + } + + bool default_isDistributedFormFactor( ) const { + return IFormFactor::isDistributedFormFactor( ); + } + virtual void walk_and_print( ) { if( bp::override func_walk_and_print = this->get_override( "walk_and_print" ) ) func_walk_and_print( ); @@ -136,7 +172,7 @@ struct IInterferenceFunction_wrapper : IInterferenceFunction, bp::wrapper< IInte return func_evaluate( boost::ref(q) ); } - virtual ::ParameterPool * createParameterTree( ) { + virtual ::ParameterPool * createParameterTree( ) const { if( bp::override func_createParameterTree = this->get_override( "createParameterTree" ) ) return func_createParameterTree( ); else{ @@ -144,7 +180,7 @@ struct IInterferenceFunction_wrapper : IInterferenceFunction, bp::wrapper< IInte } } - ::ParameterPool * default_createParameterTree( ) { + ::ParameterPool * default_createParameterTree( ) const { return ISample::createParameterTree( ); } @@ -195,7 +231,7 @@ struct InterferenceFunction1DParaCrystal_wrapper : InterferenceFunction1DParaCry return InterferenceFunction1DParaCrystal::evaluate( boost::ref(q) ); } - virtual ::ParameterPool * createParameterTree( ) { + virtual ::ParameterPool * createParameterTree( ) const { if( bp::override func_createParameterTree = this->get_override( "createParameterTree" ) ) return func_createParameterTree( ); else{ @@ -203,7 +239,7 @@ struct InterferenceFunction1DParaCrystal_wrapper : InterferenceFunction1DParaCry } } - ::ParameterPool * default_createParameterTree( ) { + ::ParameterPool * default_createParameterTree( ) const { return ISample::createParameterTree( ); } @@ -254,7 +290,7 @@ struct InterferenceFunctionNone_wrapper : InterferenceFunctionNone, bp::wrapper< return InterferenceFunctionNone::evaluate( boost::ref(q) ); } - virtual ::ParameterPool * createParameterTree( ) { + virtual ::ParameterPool * createParameterTree( ) const { if( bp::override func_createParameterTree = this->get_override( "createParameterTree" ) ) return func_createParameterTree( ); else{ @@ -262,7 +298,7 @@ struct InterferenceFunctionNone_wrapper : InterferenceFunctionNone, bp::wrapper< } } - ::ParameterPool * default_createParameterTree( ) { + ::ParameterPool * default_createParameterTree( ) const { return ISample::createParameterTree( ); } @@ -313,6 +349,18 @@ struct Particle_wrapper : Particle, bp::wrapper< Particle > { return Particle::createDiffuseParticleInfo( boost::ref(parent_info) ); } + virtual ::std::vector< ParticleInfo* > createDistributedParticles( ::size_t samples_per_particle, double factor ) const { + if( bp::override func_createDistributedParticles = this->get_override( "createDistributedParticles" ) ) + return func_createDistributedParticles( samples_per_particle, factor ); + else{ + return this->Particle::createDistributedParticles( samples_per_particle, factor ); + } + } + + ::std::vector< ParticleInfo* > default_createDistributedParticles( ::size_t samples_per_particle, double factor ) const { + return Particle::createDistributedParticles( samples_per_particle, factor ); + } + virtual ::IFormFactor * createFormFactor( ) const { if( bp::override func_createFormFactor = this->get_override( "createFormFactor" ) ) return func_createFormFactor( ); @@ -325,6 +373,18 @@ struct Particle_wrapper : Particle, bp::wrapper< Particle > { return Particle::createFormFactor( ); } + virtual ::complex_t const getRefractiveIndex( ) const { + if( bp::override func_getRefractiveIndex = this->get_override( "getRefractiveIndex" ) ) + return func_getRefractiveIndex( ); + else{ + return this->Particle::getRefractiveIndex( ); + } + } + + ::complex_t const default_getRefractiveIndex( ) const { + return Particle::getRefractiveIndex( ); + } + virtual ::IFormFactor const * getSimpleFormFactor( ) const { if( bp::override func_getSimpleFormFactor = this->get_override( "getSimpleFormFactor" ) ) return func_getSimpleFormFactor( ); @@ -337,6 +397,18 @@ struct Particle_wrapper : Particle, bp::wrapper< Particle > { return Particle::getSimpleFormFactor( ); } + virtual bool hasDistributedFormFactor( ) const { + if( bp::override func_hasDistributedFormFactor = this->get_override( "hasDistributedFormFactor" ) ) + return func_hasDistributedFormFactor( ); + else{ + return this->Particle::hasDistributedFormFactor( ); + } + } + + bool default_hasDistributedFormFactor( ) const { + return Particle::hasDistributedFormFactor( ); + } + virtual void setAmbientRefractiveIndex( ::complex_t refractive_index ) { if( bp::override func_setAmbientRefractiveIndex = this->get_override( "setAmbientRefractiveIndex" ) ) func_setAmbientRefractiveIndex( refractive_index ); @@ -349,7 +421,7 @@ struct Particle_wrapper : Particle, bp::wrapper< Particle > { Particle::setAmbientRefractiveIndex( refractive_index ); } - virtual ::ParameterPool * createParameterTree( ) { + virtual ::ParameterPool * createParameterTree( ) const { if( bp::override func_createParameterTree = this->get_override( "createParameterTree" ) ) return func_createParameterTree( ); else{ @@ -357,7 +429,7 @@ struct Particle_wrapper : Particle, bp::wrapper< Particle > { } } - ::ParameterPool * default_createParameterTree( ) { + ::ParameterPool * default_createParameterTree( ) const { return ISample::createParameterTree( ); } @@ -396,7 +468,19 @@ struct LatticeBasis_wrapper : LatticeBasis, bp::wrapper< LatticeBasis > { return Particle::createDiffuseParticleInfo( boost::ref(parent_info) ); } - virtual ::ParameterPool * createParameterTree( ) { + virtual ::std::vector< ParticleInfo* > createDistributedParticles( ::size_t samples_per_particle, double factor ) const { + if( bp::override func_createDistributedParticles = this->get_override( "createDistributedParticles" ) ) + return func_createDistributedParticles( samples_per_particle, factor ); + else{ + return this->Particle::createDistributedParticles( samples_per_particle, factor ); + } + } + + ::std::vector< ParticleInfo* > default_createDistributedParticles( ::size_t samples_per_particle, double factor ) const { + return Particle::createDistributedParticles( samples_per_particle, factor ); + } + + virtual ::ParameterPool * createParameterTree( ) const { if( bp::override func_createParameterTree = this->get_override( "createParameterTree" ) ) return func_createParameterTree( ); else{ @@ -404,10 +488,22 @@ struct LatticeBasis_wrapper : LatticeBasis, bp::wrapper< LatticeBasis > { } } - ::ParameterPool * default_createParameterTree( ) { + ::ParameterPool * default_createParameterTree( ) const { return ISample::createParameterTree( ); } + virtual ::complex_t const getRefractiveIndex( ) const { + if( bp::override func_getRefractiveIndex = this->get_override( "getRefractiveIndex" ) ) + return func_getRefractiveIndex( ); + else{ + return this->Particle::getRefractiveIndex( ); + } + } + + ::complex_t const default_getRefractiveIndex( ) const { + return Particle::getRefractiveIndex( ); + } + virtual ::IFormFactor const * getSimpleFormFactor( ) const { if( bp::override func_getSimpleFormFactor = this->get_override( "getSimpleFormFactor" ) ) return func_getSimpleFormFactor( ); @@ -420,6 +516,18 @@ struct LatticeBasis_wrapper : LatticeBasis, bp::wrapper< LatticeBasis > { return Particle::getSimpleFormFactor( ); } + virtual bool hasDistributedFormFactor( ) const { + if( bp::override func_hasDistributedFormFactor = this->get_override( "hasDistributedFormFactor" ) ) + return func_hasDistributedFormFactor( ); + else{ + return this->Particle::hasDistributedFormFactor( ); + } + } + + bool default_hasDistributedFormFactor( ) const { + return Particle::hasDistributedFormFactor( ); + } + virtual void walk_and_print( ) { if( bp::override func_walk_and_print = this->get_override( "walk_and_print" ) ) func_walk_and_print( ); @@ -539,7 +647,7 @@ struct Layer_wrapper : Layer, bp::wrapper< Layer > { Layer::setThickness( thickness ); } - virtual ::ParameterPool * createParameterTree( ) { + virtual ::ParameterPool * createParameterTree( ) const { if( bp::override func_createParameterTree = this->get_override( "createParameterTree" ) ) return func_createParameterTree( ); else{ @@ -547,7 +655,7 @@ struct Layer_wrapper : Layer, bp::wrapper< Layer > { } } - ::ParameterPool * default_createParameterTree( ) { + ::ParameterPool * default_createParameterTree( ) const { return ISample::createParameterTree( ); } @@ -670,7 +778,7 @@ struct LayerDecorator_wrapper : LayerDecorator, bp::wrapper< LayerDecorator > { LayerDecorator::setThickness( thickness ); } - virtual ::ParameterPool * createParameterTree( ) { + virtual ::ParameterPool * createParameterTree( ) const { if( bp::override func_createParameterTree = this->get_override( "createParameterTree" ) ) return func_createParameterTree( ); else{ @@ -678,7 +786,7 @@ struct LayerDecorator_wrapper : LayerDecorator, bp::wrapper< LayerDecorator > { } } - ::ParameterPool * default_createParameterTree( ) { + ::ParameterPool * default_createParameterTree( ) const { return ISample::createParameterTree( ); } @@ -731,7 +839,7 @@ struct LayerRoughness_wrapper : LayerRoughness, bp::wrapper< LayerRoughness > { return ISample::clone( ); } - virtual ::ParameterPool * createParameterTree( ) { + virtual ::ParameterPool * createParameterTree( ) const { if( bp::override func_createParameterTree = this->get_override( "createParameterTree" ) ) return func_createParameterTree( ); else{ @@ -739,7 +847,7 @@ struct LayerRoughness_wrapper : LayerRoughness, bp::wrapper< LayerRoughness > { } } - ::ParameterPool * default_createParameterTree( ) { + ::ParameterPool * default_createParameterTree( ) const { return ISample::createParameterTree( ); } @@ -766,7 +874,19 @@ struct MesoCrystal_wrapper : MesoCrystal, bp::wrapper< MesoCrystal > { } - virtual ::ParameterPool * createParameterTree( ) { + virtual ::std::vector< ParticleInfo* > createDistributedParticles( ::size_t samples_per_particle, double factor ) const { + if( bp::override func_createDistributedParticles = this->get_override( "createDistributedParticles" ) ) + return func_createDistributedParticles( samples_per_particle, factor ); + else{ + return this->Particle::createDistributedParticles( samples_per_particle, factor ); + } + } + + ::std::vector< ParticleInfo* > default_createDistributedParticles( ::size_t samples_per_particle, double factor ) const { + return Particle::createDistributedParticles( samples_per_particle, factor ); + } + + virtual ::ParameterPool * createParameterTree( ) const { if( bp::override func_createParameterTree = this->get_override( "createParameterTree" ) ) return func_createParameterTree( ); else{ @@ -774,10 +894,34 @@ struct MesoCrystal_wrapper : MesoCrystal, bp::wrapper< MesoCrystal > { } } - ::ParameterPool * default_createParameterTree( ) { + ::ParameterPool * default_createParameterTree( ) const { return ISample::createParameterTree( ); } + virtual ::complex_t const getRefractiveIndex( ) const { + if( bp::override func_getRefractiveIndex = this->get_override( "getRefractiveIndex" ) ) + return func_getRefractiveIndex( ); + else{ + return this->Particle::getRefractiveIndex( ); + } + } + + ::complex_t const default_getRefractiveIndex( ) const { + return Particle::getRefractiveIndex( ); + } + + virtual bool hasDistributedFormFactor( ) const { + if( bp::override func_hasDistributedFormFactor = this->get_override( "hasDistributedFormFactor" ) ) + return func_hasDistributedFormFactor( ); + else{ + return this->Particle::hasDistributedFormFactor( ); + } + } + + bool default_hasDistributedFormFactor( ) const { + return Particle::hasDistributedFormFactor( ); + } + virtual void setAmbientRefractiveIndex( ::complex_t refractive_index ) { if( bp::override func_setAmbientRefractiveIndex = this->get_override( "setAmbientRefractiveIndex" ) ) func_setAmbientRefractiveIndex( refractive_index ); @@ -813,7 +957,7 @@ struct MultiLayer_wrapper : MultiLayer, bp::wrapper< MultiLayer > { } - virtual ::ParameterPool * createParameterTree( ) { + virtual ::ParameterPool * createParameterTree( ) const { if( bp::override func_createParameterTree = this->get_override( "createParameterTree" ) ) return func_createParameterTree( ); else{ @@ -821,7 +965,7 @@ struct MultiLayer_wrapper : MultiLayer, bp::wrapper< MultiLayer > { } } - ::ParameterPool * default_createParameterTree( ) { + ::ParameterPool * default_createParameterTree( ) const { return ISample::createParameterTree( ); } @@ -860,7 +1004,7 @@ struct ParticleDecoration_wrapper : ParticleDecoration, bp::wrapper< ParticleDec return ParticleDecoration::clone( ); } - virtual ::ParameterPool * createParameterTree( ) { + virtual ::ParameterPool * createParameterTree( ) const { if( bp::override func_createParameterTree = this->get_override( "createParameterTree" ) ) return func_createParameterTree( ); else{ @@ -868,7 +1012,7 @@ struct ParticleDecoration_wrapper : ParticleDecoration, bp::wrapper< ParticleDec } } - ::ParameterPool * default_createParameterTree( ) { + ::ParameterPool * default_createParameterTree( ) const { return ISample::createParameterTree( ); } @@ -888,6 +1032,9 @@ struct ParticleDecoration_wrapper : ParticleDecoration, bp::wrapper< ParticleDec void register_classes_3(){ + bp::class_< Geometry::TranslateZ3D, bp::bases< Geometry::Translate3D > >( "TranslateZ3D", bp::init< >() ) + .def( bp::init< double >(( bp::arg("z") )) ); + { //::IMaterial typedef bp::class_< IMaterial > IMaterial_exposer_t; IMaterial_exposer_t IMaterial_exposer = IMaterial_exposer_t( "IMaterial", bp::init< >() ); @@ -952,15 +1099,25 @@ void register_classes_3(){ "clone" , bp::pure_virtual( (::IFormFactorDecorator * ( ::IFormFactorDecorator::* )( ) const)(&::IFormFactorDecorator::clone) ) , bp::return_value_policy< bp::manage_new_object >() ) + .def( + "getHeight" + , (double ( ::IFormFactorDecorator::* )( ) const)(&::IFormFactorDecorator::getHeight) + , (double ( IFormFactorDecorator_wrapper::* )( ) const)(&IFormFactorDecorator_wrapper::default_getHeight) ) .def( "setAmbientRefractiveIndex" , (void ( ::IFormFactorDecorator::* )( ::complex_t ) )(&::IFormFactorDecorator::setAmbientRefractiveIndex) , (void ( IFormFactorDecorator_wrapper::* )( ::complex_t ) )(&IFormFactorDecorator_wrapper::default_setAmbientRefractiveIndex) , ( bp::arg("refractive_index") ) ) + .def( + "createDistributedFormFactors" + , (void ( ::IFormFactor::* )( ::std::vector< IFormFactor* > &,::std::vector< double > &,::size_t ) const)(&::IFormFactor::createDistributedFormFactors) + , (void ( IFormFactorDecorator_wrapper::* )( ::std::vector< IFormFactor* > &,::std::vector< double > &,::size_t ) const)(&IFormFactorDecorator_wrapper::default_createDistributedFormFactors) + , ( bp::arg("form_factors"), bp::arg("probabilities"), bp::arg("nbr_samples") ) + , bp::return_value_policy< bp::manage_new_object >() ) .def( "createParameterTree" - , (::ParameterPool * ( ::ISample::* )( ) )(&::ISample::createParameterTree) - , (::ParameterPool * ( IFormFactorDecorator_wrapper::* )( ) )(&IFormFactorDecorator_wrapper::default_createParameterTree) + , (::ParameterPool * ( ::ISample::* )( ) const)(&::ISample::createParameterTree) + , (::ParameterPool * ( IFormFactorDecorator_wrapper::* )( ) const)(&IFormFactorDecorator_wrapper::default_createParameterTree) , bp::return_value_policy< bp::manage_new_object >() ) .def( "evaluate" @@ -974,6 +1131,10 @@ void register_classes_3(){ "getVolume" , (double ( ::IFormFactor::* )( ) const)(&::IFormFactor::getVolume) , (double ( IFormFactorDecorator_wrapper::* )( ) const)(&IFormFactorDecorator_wrapper::default_getVolume) ) + .def( + "isDistributedFormFactor" + , (bool ( ::IFormFactor::* )( ) const)(&::IFormFactor::isDistributedFormFactor) + , (bool ( IFormFactorDecorator_wrapper::* )( ) const)(&IFormFactorDecorator_wrapper::default_isDistributedFormFactor) ) .def( "walk_and_print" , (void ( ::ISample::* )( ) )(&::ISample::walk_and_print) @@ -990,8 +1151,8 @@ void register_classes_3(){ , ( bp::arg("q") ) ) .def( "createParameterTree" - , (::ParameterPool * ( ::ISample::* )( ) )(&::ISample::createParameterTree) - , (::ParameterPool * ( IInterferenceFunction_wrapper::* )( ) )(&IInterferenceFunction_wrapper::default_createParameterTree) + , (::ParameterPool * ( ::ISample::* )( ) const)(&::ISample::createParameterTree) + , (::ParameterPool * ( IInterferenceFunction_wrapper::* )( ) const)(&IInterferenceFunction_wrapper::default_createParameterTree) , bp::return_value_policy< bp::manage_new_object >() ) .def( "walk_and_print" @@ -1018,8 +1179,8 @@ void register_classes_3(){ , ( bp::arg("q") ) ) .def( "createParameterTree" - , (::ParameterPool * ( ::ISample::* )( ) )(&::ISample::createParameterTree) - , (::ParameterPool * ( InterferenceFunction1DParaCrystal_wrapper::* )( ) )(&InterferenceFunction1DParaCrystal_wrapper::default_createParameterTree) + , (::ParameterPool * ( ::ISample::* )( ) const)(&::ISample::createParameterTree) + , (::ParameterPool * ( InterferenceFunction1DParaCrystal_wrapper::* )( ) const)(&InterferenceFunction1DParaCrystal_wrapper::default_createParameterTree) , bp::return_value_policy< bp::manage_new_object >() ) .def( "walk_and_print" @@ -1039,8 +1200,8 @@ void register_classes_3(){ , ( bp::arg("q") ) ) .def( "createParameterTree" - , (::ParameterPool * ( ::ISample::* )( ) )(&::ISample::createParameterTree) - , (::ParameterPool * ( InterferenceFunctionNone_wrapper::* )( ) )(&InterferenceFunctionNone_wrapper::default_createParameterTree) + , (::ParameterPool * ( ::ISample::* )( ) const)(&::ISample::createParameterTree) + , (::ParameterPool * ( InterferenceFunctionNone_wrapper::* )( ) const)(&InterferenceFunctionNone_wrapper::default_createParameterTree) , bp::return_value_policy< bp::manage_new_object >() ) .def( "walk_and_print" @@ -1078,16 +1239,30 @@ void register_classes_3(){ , (::std::vector< DiffuseParticleInfo* > * ( Particle_wrapper::* )( ::ParticleInfo const & ) const)(&Particle_wrapper::default_createDiffuseParticleInfo) , ( bp::arg("parent_info") ) , bp::return_value_policy< bp::manage_new_object >() ) + .def( + "createDistributedParticles" + , (::std::vector< ParticleInfo* > ( ::Particle::* )( ::size_t,double ) const)(&::Particle::createDistributedParticles) + , (::std::vector< ParticleInfo* > ( Particle_wrapper::* )( ::size_t,double ) const)(&Particle_wrapper::default_createDistributedParticles) + , ( bp::arg("samples_per_particle"), bp::arg("factor") ) + , bp::return_value_policy< bp::manage_new_object >() ) .def( "createFormFactor" , (::IFormFactor * ( ::Particle::* )( ) const)(&::Particle::createFormFactor) , (::IFormFactor * ( Particle_wrapper::* )( ) const)(&Particle_wrapper::default_createFormFactor) , bp::return_value_policy< bp::manage_new_object >() ) + .def( + "getRefractiveIndex" + , (::complex_t const ( ::Particle::* )( ) const)(&::Particle::getRefractiveIndex) + , (::complex_t const ( Particle_wrapper::* )( ) const)(&Particle_wrapper::default_getRefractiveIndex) ) .def( "getSimpleFormFactor" , (::IFormFactor const * ( ::Particle::* )( ) const)(&::Particle::getSimpleFormFactor) , (::IFormFactor const * ( Particle_wrapper::* )( ) const)(&Particle_wrapper::default_getSimpleFormFactor) , bp::return_value_policy< bp::reference_existing_object >() ) + .def( + "hasDistributedFormFactor" + , (bool ( ::Particle::* )( ) const)(&::Particle::hasDistributedFormFactor) + , (bool ( Particle_wrapper::* )( ) const)(&Particle_wrapper::default_hasDistributedFormFactor) ) .def( "setAmbientRefractiveIndex" , (void ( ::Particle::* )( ::complex_t ) )(&::Particle::setAmbientRefractiveIndex) @@ -1095,8 +1270,8 @@ void register_classes_3(){ , ( bp::arg("refractive_index") ) ) .def( "createParameterTree" - , (::ParameterPool * ( ::ISample::* )( ) )(&::ISample::createParameterTree) - , (::ParameterPool * ( Particle_wrapper::* )( ) )(&Particle_wrapper::default_createParameterTree) + , (::ParameterPool * ( ::ISample::* )( ) const)(&::ISample::createParameterTree) + , (::ParameterPool * ( Particle_wrapper::* )( ) const)(&Particle_wrapper::default_createParameterTree) , bp::return_value_policy< bp::manage_new_object >() ) .def( "walk_and_print" @@ -1114,16 +1289,30 @@ void register_classes_3(){ , (::std::vector< DiffuseParticleInfo* > * ( LatticeBasis_wrapper::* )( ::ParticleInfo const & ) const)(&LatticeBasis_wrapper::default_createDiffuseParticleInfo) , ( bp::arg("parent_info") ) , bp::return_value_policy< bp::manage_new_object >() ) + .def( + "createDistributedParticles" + , (::std::vector< ParticleInfo* > ( ::Particle::* )( ::size_t,double ) const)(&::Particle::createDistributedParticles) + , (::std::vector< ParticleInfo* > ( LatticeBasis_wrapper::* )( ::size_t,double ) const)(&LatticeBasis_wrapper::default_createDistributedParticles) + , ( bp::arg("samples_per_particle"), bp::arg("factor") ) + , bp::return_value_policy< bp::manage_new_object >() ) .def( "createParameterTree" - , (::ParameterPool * ( ::ISample::* )( ) )(&::ISample::createParameterTree) - , (::ParameterPool * ( LatticeBasis_wrapper::* )( ) )(&LatticeBasis_wrapper::default_createParameterTree) + , (::ParameterPool * ( ::ISample::* )( ) const)(&::ISample::createParameterTree) + , (::ParameterPool * ( LatticeBasis_wrapper::* )( ) const)(&LatticeBasis_wrapper::default_createParameterTree) , bp::return_value_policy< bp::manage_new_object >() ) + .def( + "getRefractiveIndex" + , (::complex_t const ( ::Particle::* )( ) const)(&::Particle::getRefractiveIndex) + , (::complex_t const ( LatticeBasis_wrapper::* )( ) const)(&LatticeBasis_wrapper::default_getRefractiveIndex) ) .def( "getSimpleFormFactor" , (::IFormFactor const * ( ::Particle::* )( ) const)(&::Particle::getSimpleFormFactor) , (::IFormFactor const * ( LatticeBasis_wrapper::* )( ) const)(&LatticeBasis_wrapper::default_getSimpleFormFactor) , bp::return_value_policy< bp::reference_existing_object >() ) + .def( + "hasDistributedFormFactor" + , (bool ( ::Particle::* )( ) const)(&::Particle::hasDistributedFormFactor) + , (bool ( LatticeBasis_wrapper::* )( ) const)(&LatticeBasis_wrapper::default_hasDistributedFormFactor) ) .def( "walk_and_print" , (void ( ::ISample::* )( ) )(&::ISample::walk_and_print) @@ -1169,8 +1358,8 @@ void register_classes_3(){ , ( bp::arg("thickness") ) ) .def( "createParameterTree" - , (::ParameterPool * ( ::ISample::* )( ) )(&::ISample::createParameterTree) - , (::ParameterPool * ( Layer_wrapper::* )( ) )(&Layer_wrapper::default_createParameterTree) + , (::ParameterPool * ( ::ISample::* )( ) const)(&::ISample::createParameterTree) + , (::ParameterPool * ( Layer_wrapper::* )( ) const)(&Layer_wrapper::default_createParameterTree) , bp::return_value_policy< bp::manage_new_object >() ) .def( "walk_and_print" @@ -1223,8 +1412,8 @@ void register_classes_3(){ , ( bp::arg("thickness") ) ) .def( "createParameterTree" - , (::ParameterPool * ( ::ISample::* )( ) )(&::ISample::createParameterTree) - , (::ParameterPool * ( LayerDecorator_wrapper::* )( ) )(&LayerDecorator_wrapper::default_createParameterTree) + , (::ParameterPool * ( ::ISample::* )( ) const)(&::ISample::createParameterTree) + , (::ParameterPool * ( LayerDecorator_wrapper::* )( ) const)(&LayerDecorator_wrapper::default_createParameterTree) , bp::return_value_policy< bp::manage_new_object >() ) .def( "walk_and_print" @@ -1319,8 +1508,8 @@ void register_classes_3(){ } { //::ISample::createParameterTree - typedef ::ParameterPool * ( ::ISample::*createParameterTree_function_type )( ) ; - typedef ::ParameterPool * ( LayerRoughness_wrapper::*default_createParameterTree_function_type )( ) ; + typedef ::ParameterPool * ( ::ISample::*createParameterTree_function_type )( ) const; + typedef ::ParameterPool * ( LayerRoughness_wrapper::*default_createParameterTree_function_type )( ) const; LayerRoughness_exposer.def( "createParameterTree" @@ -1360,11 +1549,25 @@ void register_classes_3(){ .def( bp::self_ns::str( bp::self ) ); bp::class_< MesoCrystal_wrapper, bp::bases< Particle >, boost::noncopyable >( "MesoCrystal", bp::init< IClusteredParticles const &, IFormFactor & >(( bp::arg("particle_structure"), bp::arg("form_factor") )) ) + .def( + "createDistributedParticles" + , (::std::vector< ParticleInfo* > ( ::Particle::* )( ::size_t,double ) const)(&::Particle::createDistributedParticles) + , (::std::vector< ParticleInfo* > ( MesoCrystal_wrapper::* )( ::size_t,double ) const)(&MesoCrystal_wrapper::default_createDistributedParticles) + , ( bp::arg("samples_per_particle"), bp::arg("factor") ) + , bp::return_value_policy< bp::manage_new_object >() ) .def( "createParameterTree" - , (::ParameterPool * ( ::ISample::* )( ) )(&::ISample::createParameterTree) - , (::ParameterPool * ( MesoCrystal_wrapper::* )( ) )(&MesoCrystal_wrapper::default_createParameterTree) + , (::ParameterPool * ( ::ISample::* )( ) const)(&::ISample::createParameterTree) + , (::ParameterPool * ( MesoCrystal_wrapper::* )( ) const)(&MesoCrystal_wrapper::default_createParameterTree) , bp::return_value_policy< bp::manage_new_object >() ) + .def( + "getRefractiveIndex" + , (::complex_t const ( ::Particle::* )( ) const)(&::Particle::getRefractiveIndex) + , (::complex_t const ( MesoCrystal_wrapper::* )( ) const)(&MesoCrystal_wrapper::default_getRefractiveIndex) ) + .def( + "hasDistributedFormFactor" + , (bool ( ::Particle::* )( ) const)(&::Particle::hasDistributedFormFactor) + , (bool ( MesoCrystal_wrapper::* )( ) const)(&MesoCrystal_wrapper::default_hasDistributedFormFactor) ) .def( "setAmbientRefractiveIndex" , (void ( ::Particle::* )( ::complex_t ) )(&::Particle::setAmbientRefractiveIndex) @@ -1386,8 +1589,8 @@ void register_classes_3(){ , ( bp::arg("layer"), bp::arg("roughness") ) ) .def( "createParameterTree" - , (::ParameterPool * ( ::ISample::* )( ) )(&::ISample::createParameterTree) - , (::ParameterPool * ( MultiLayer_wrapper::* )( ) )(&MultiLayer_wrapper::default_createParameterTree) + , (::ParameterPool * ( ::ISample::* )( ) const)(&::ISample::createParameterTree) + , (::ParameterPool * ( MultiLayer_wrapper::* )( ) const)(&MultiLayer_wrapper::default_createParameterTree) , bp::return_value_policy< bp::manage_new_object >() ) .def( "walk_and_print" @@ -1421,22 +1624,12 @@ void register_classes_3(){ .def_readwrite( "m_data", &OpticalFresnel::MultiLayerCoeff::m_data ); { //::OpticalFresnel::execute - typedef int ( ::OpticalFresnel::*execute_function_type )( ::MultiLayer const &,::kvector_t const &,::std::vector< OpticalFresnel::FresnelCoeff > &,bool ) ; - - OpticalFresnel_exposer.def( - "execute" - , execute_function_type( &::OpticalFresnel::execute ) - , ( bp::arg("sample"), bp::arg("k"), bp::arg("coeff"), bp::arg("useRoughness")=(bool)(false) ) ); - - } - { //::OpticalFresnel::execute - - typedef int ( ::OpticalFresnel::*execute_function_type )( ::MultiLayer const &,::kvector_t const &,::OpticalFresnel::MultiLayerCoeff &,bool ) ; + typedef int ( ::OpticalFresnel::*execute_function_type )( ::MultiLayer const &,::kvector_t const &,::std::vector< OpticalFresnel::FresnelCoeff > & ) ; OpticalFresnel_exposer.def( "execute" , execute_function_type( &::OpticalFresnel::execute ) - , ( bp::arg("sample"), bp::arg("k"), bp::arg("coeff"), bp::arg("useRoughness")=(bool)(false) ) ); + , ( bp::arg("sample"), bp::arg("k"), bp::arg("coeff") ) ); } } @@ -1462,7 +1655,7 @@ void register_classes_3(){ .def( bp::self_ns::str( bp::self ) ); { //::ParameterPool::addParameter - typedef bool ( ::ParameterPool::*addParameter_function_type )( ::std::string,::ParameterPool::RealPar ) ; + typedef bool ( ::ParameterPool::*addParameter_function_type )( ::std::string const &,::ParameterPool::RealPar ) ; ParameterPool_exposer.def( "addParameter" @@ -1509,7 +1702,7 @@ void register_classes_3(){ } { //::ParameterPool::cloneWithPrefix - typedef ::ParameterPool * ( ::ParameterPool::*cloneWithPrefix_function_type )( ::std::string ) ; + typedef ::ParameterPool * ( ::ParameterPool::*cloneWithPrefix_function_type )( ::std::string const & ) ; ParameterPool_exposer.def( "cloneWithPrefix" @@ -1538,7 +1731,7 @@ void register_classes_3(){ } { //::ParameterPool::getParameter - typedef ::ParameterPool::RealPar ( ::ParameterPool::*getParameter_function_type )( ::std::string ) const; + typedef ::ParameterPool::RealPar ( ::ParameterPool::*getParameter_function_type )( ::std::string const & ) const; ParameterPool_exposer.def( "getParameter" @@ -1548,7 +1741,7 @@ void register_classes_3(){ } { //::ParameterPool::setMatchedParametersValue - typedef int ( ::ParameterPool::*setMatchedParametersValue_function_type )( ::std::string,double ) ; + typedef int ( ::ParameterPool::*setMatchedParametersValue_function_type )( ::std::string const &,double ) ; ParameterPool_exposer.def( "setMatchedParametersValue" @@ -1558,7 +1751,7 @@ void register_classes_3(){ } { //::ParameterPool::setParameterValue - typedef bool ( ::ParameterPool::*setParameterValue_function_type )( ::std::string,double ) ; + typedef bool ( ::ParameterPool::*setParameterValue_function_type )( ::std::string const &,double ) ; ParameterPool_exposer.def( "setParameterValue" @@ -1626,8 +1819,8 @@ void register_classes_3(){ , ( bp::arg("surface_density") ) ) .def( "createParameterTree" - , (::ParameterPool * ( ::ISample::* )( ) )(&::ISample::createParameterTree) - , (::ParameterPool * ( ParticleDecoration_wrapper::* )( ) )(&ParticleDecoration_wrapper::default_createParameterTree) + , (::ParameterPool * ( ::ISample::* )( ) const)(&::ISample::createParameterTree) + , (::ParameterPool * ( ParticleDecoration_wrapper::* )( ) const)(&ParticleDecoration_wrapper::default_createParameterTree) , bp::return_value_policy< bp::manage_new_object >() ) .def( "walk_and_print" diff --git a/Core/PythonAPI/src/PythonInterface_global_variables.cpp b/Core/PythonAPI/src/PythonInterface_global_variables.cpp index 82c00be28f69cbe85127487db354378b174cd8d0..8f080a93f4a385161bd7211ded9fdb4d1b472073 100644 --- a/Core/PythonAPI/src/PythonInterface_global_variables.cpp +++ b/Core/PythonAPI/src/PythonInterface_global_variables.cpp @@ -45,6 +45,14 @@ namespace bp = boost::python; void register_global_variables(){ + bp::scope().attr("PI") = Units::PI; + + bp::scope().attr("PI2") = Units::PI2; + + bp::scope().attr("PID2") = Units::PID2; + + bp::scope().attr("PI_SQR") = Units::PI_SQR; + bp::scope().attr("angstrom") = Units::angstrom; bp::scope().attr("deg") = Units::deg; diff --git a/Core/Samples/inc/Crystal.h b/Core/Samples/inc/Crystal.h index eff6b4e9889f2691852a9e073a8bfd92ffc1ad33..3c24c422c7285d7f6501f4f8288a66d0e45012f2 100644 --- a/Core/Samples/inc/Crystal.h +++ b/Core/Samples/inc/Crystal.h @@ -49,7 +49,8 @@ public: void setDWFactor(double dw_factor) { m_dw_factor = dw_factor; } - virtual std::vector<DiffuseParticleInfo *> *createDiffuseParticleInfo(const ParticleInfo &parent_info) const; + virtual std::vector<DiffuseParticleInfo *> *createDiffuseParticleInfo( + const ParticleInfo &parent_info) const; private: Lattice m_lattice; diff --git a/Core/Samples/inc/DiffuseParticleInfo.h b/Core/Samples/inc/DiffuseParticleInfo.h index 293753486424da243321e2e6a3432f9881422995..37c1b39720d90d24fdc39bbf1ffe287e66ec472a 100644 --- a/Core/Samples/inc/DiffuseParticleInfo.h +++ b/Core/Samples/inc/DiffuseParticleInfo.h @@ -33,8 +33,15 @@ public: //! get number of particles per containing mesocrystal double getNumberPerMeso() const { return m_number_per_meso; } + + //! set the range of height + void setHeightRange(double height_range) { m_height_range = height_range; } + + //! get the range of height + double getHeightRange() const { return m_height_range; } protected: double m_number_per_meso; + double m_height_range; }; diff --git a/Core/Samples/inc/LatticeBasis.h b/Core/Samples/inc/LatticeBasis.h index b1cb65947e8d5aa4fd7bb1dd50882b76b1043503..e8e5965c6d13dc40181a4cb05da2753b51d15cc9 100644 --- a/Core/Samples/inc/LatticeBasis.h +++ b/Core/Samples/inc/LatticeBasis.h @@ -37,7 +37,7 @@ public: size_t getNbrParticles() const {return m_particles.size(); } //! return number of positions for particle with index - size_t getNbrPositionsForParticle(size_t index) { return m_positions_vector[check_index(index)].size(); } + size_t getNbrPositionsForParticle(size_t index) const { return m_positions_vector[check_index(index)].size(); } //! return position of element with given index // kvector_t getPosition(size_t index) const { return m_positions[check_index(index)]; } @@ -47,6 +47,9 @@ public: std::vector<kvector_t> getParticlePositions(size_t index) const { return m_positions_vector[check_index(index)]; } + //! create vector of size/shape distributed particles corresponding to the particle with index i + std::vector<DiffuseParticleInfo *> createDiffuseParticleInfos() const; + private: //! check index inline size_t check_index(size_t index) const { return index < m_positions_vector.size() ? index : throw OutOfBoundsException("LatticeBasis::check_index() -> Index is out of bounds"); } diff --git a/Core/Samples/inc/Particle.h b/Core/Samples/inc/Particle.h index 3f4c612bde019fda7acd7c9e2b1aa59a2ab13f2f..a6d7d5e1bd2466fd3855a849b00c458d12fd9f87 100644 --- a/Core/Samples/inc/Particle.h +++ b/Core/Samples/inc/Particle.h @@ -57,7 +57,7 @@ public: registerChild(mp_form_factor); } } - + //! return refractive index of the particle virtual const complex_t getRefractiveIndex() const { return m_refractive_index; @@ -72,6 +72,10 @@ public: return 0; } + virtual bool hasDistributedFormFactor() const { return mp_form_factor->isDistributedFormFactor(); } + + virtual std::vector<ParticleInfo *> createDistributedParticles(size_t samples_per_particle, double factor) const; + protected: complex_t m_ambient_refractive_index; complex_t m_refractive_index; diff --git a/Core/Samples/inc/ParticleInfo.h b/Core/Samples/inc/ParticleInfo.h index ce7f0dfebcea9e96b6384486d988903b56988add..d653cb344685cf8cbc35175482e3422b1986b234 100644 --- a/Core/Samples/inc/ParticleInfo.h +++ b/Core/Samples/inc/ParticleInfo.h @@ -37,14 +37,26 @@ public: const Particle *getParticle() const { return mp_particle; } //! return particle transformation - const Geometry::Transform3D *getTransform3D() const { return m_transform; } + const Geometry::Transform3D *getTransform3D() const { return mp_transform; } + + //! set particle transformation + void setTransform(const Geometry::Transform3D &transform) { + delete mp_transform; + mp_transform = new Geometry::Transform3D(transform); + } //! return particle depth double getDepth() const { return m_depth;} + //! set particle depth + void setDepth(double depth) { m_depth = depth; } + //! return particle abundance double getAbundance() const { return m_abundance; } + //! set particle abundance + void setAbundance(double abundance) { m_abundance = abundance; } + protected: ParticleInfo &operator=(const ParticleInfo &right); ParticleInfo(const ParticleInfo &source); @@ -53,7 +65,7 @@ protected: virtual void init_parameters(); Particle *mp_particle; - Geometry::Transform3D *m_transform; + Geometry::Transform3D *mp_transform; double m_depth; double m_abundance; }; diff --git a/Core/Samples/src/Crystal.cpp b/Core/Samples/src/Crystal.cpp index a6cc7f0871168857c90443624b220172527e4cfa..c839b55cf168ef8ace676c92d64eb81f6cfb4c82 100644 --- a/Core/Samples/src/Crystal.cpp +++ b/Core/Samples/src/Crystal.cpp @@ -42,57 +42,29 @@ IFormFactor* Crystal::createTotalFormFactor( std::vector<DiffuseParticleInfo*>* Crystal::createDiffuseParticleInfo( const ParticleInfo& parent_info) const { + std::vector<DiffuseParticleInfo *> *p_result = new std::vector<DiffuseParticleInfo *>( + mp_lattice_basis->createDiffuseParticleInfos()); + if (p_result->size()==0) { + return p_result; + } double primitive_cell_volume = m_lattice.getVolume(); double parent_volume = parent_info.getParticle()->getSimpleFormFactor()->getVolume(); + double parent_height = parent_info.getParticle()->getSimpleFormFactor()->getHeight(); + double parent_depth = parent_info.getDepth(); + + Geometry::Transform3D *p_new_transform(0); const Geometry::Transform3D *p_parent_transform = parent_info.getTransform3D(); - double depth = parent_info.getDepth(); - double weight = parent_info.getAbundance(); - double np_density = 3.0*parent_volume/primitive_cell_volume; - //TODO: refine this method; current implementation only serves as a test - double height = 0.5*Units::micrometer; - size_t nbr_heights = 251; - double mean_radius = 4.2*Units::nanometer; - double sigma = 0.2*Units::nanometer; - size_t nbr_radii = 7; - complex_t n_particle(0.999966, 5.62664e-7); - std::vector<DiffuseParticleInfo *> *p_infos = new std::vector<DiffuseParticleInfo *>(); - double total_prob = 0.0; - for (size_t i=0; i<nbr_radii; ++i) { - double radius = (mean_radius-1.5*sigma) + 3.0*sigma/(nbr_radii-1); - total_prob += MathFunctions::Gaussian(radius, mean_radius, sigma); - } - total_prob *= nbr_heights; - for (size_t i=0; i<nbr_radii; ++i) { - double radius; - if (nbr_radii<2) { - radius = mean_radius; - } - else { - radius = (mean_radius-2.0*sigma) + 4.0*sigma*i/(nbr_radii-1); - } - double particle_weight = weight*MathFunctions::Gaussian(radius, mean_radius, sigma)/total_prob; - Particle particle(n_particle, new FormFactorFullSphere(radius)); - DiffuseParticleInfo *p_new_np_info; - if (nbr_heights<2) { - Geometry::Transform3D *p_new_transform(0); - if(p_parent_transform) p_new_transform = new Geometry::Transform3D(*p_parent_transform); - p_new_np_info = new DiffuseParticleInfo(particle.clone(), - p_new_transform, 5.0*Units::nanometer, particle_weight); - p_new_np_info->setNumberPerMeso(np_density*particle_weight); - p_infos->push_back(p_new_np_info); - } - else { - for (size_t j=0; j<nbr_heights; ++j) { -// double particle_depth = depth - height*MathFunctions::GenerateUniformRandom(); - double particle_depth = depth - j*height/(nbr_heights-1); - Geometry::Transform3D *p_new_transform(0); - if(p_parent_transform) p_new_transform = new Geometry::Transform3D(*p_parent_transform); - p_new_np_info = new DiffuseParticleInfo(particle.clone(), - p_new_transform, particle_depth, particle_weight); - p_new_np_info->setNumberPerMeso(np_density*particle_weight); - p_infos->push_back(p_new_np_info); - } - } + if(p_parent_transform) p_new_transform = new Geometry::Transform3D(*p_parent_transform); + + double nbr_unit_cells = parent_volume/primitive_cell_volume; + + for (size_t i=0; i<p_result->size(); ++i) { + DiffuseParticleInfo *p_info = (*p_result)[i]; + p_info->setTransform(*p_parent_transform); + p_info->setDepth(parent_depth); + p_info->setNumberPerMeso(nbr_unit_cells*p_info->getNumberPerMeso()); + p_info->setHeightRange(parent_height); } - return p_infos; + + return p_result; } diff --git a/Core/Samples/src/LatticeBasis.cpp b/Core/Samples/src/LatticeBasis.cpp index 1af813adc3f99ce73e558274aaa3ad66b4d24a23..58a51b4fc341965bd040a1c95e1f1d61f761dfbb 100644 --- a/Core/Samples/src/LatticeBasis.cpp +++ b/Core/Samples/src/LatticeBasis.cpp @@ -1,6 +1,7 @@ #include "LatticeBasis.h" #include "FormFactorWeighted.h" #include "FormFactorDecoratorMultiPositionFactor.h" +#include "DiffuseParticleInfo.h" LatticeBasis::LatticeBasis() : Particle(complex_t(1.0, 0.0)) @@ -61,7 +62,6 @@ void LatticeBasis::setAmbientRefractiveIndex(complex_t refractive_index) IFormFactor* LatticeBasis::createFormFactor() const { - // TODO: for equal particles, create position superposition times the formfactor FormFactorWeighted *p_ff = new FormFactorWeighted(); for (size_t index=0; index<m_particles.size(); ++index) { IFormFactor *p_particle_ff = m_particles[index]->createFormFactor(); @@ -72,3 +72,18 @@ IFormFactor* LatticeBasis::createFormFactor() const p_ff->setAmbientRefractiveIndex(m_ambient_refractive_index); return p_ff; } + +std::vector<DiffuseParticleInfo *> LatticeBasis::createDiffuseParticleInfos() const +{ + std::vector<DiffuseParticleInfo *> result; + for (size_t index=0; index<getNbrParticles(); ++index) { + const Particle *p_particle = getParticle(index); + if (p_particle->hasDistributedFormFactor()) { + DiffuseParticleInfo *p_new_info = new DiffuseParticleInfo( + p_particle->clone()); + p_new_info->setNumberPerMeso((double)getNbrPositionsForParticle(index)); + result.push_back(p_new_info); + } + } + return result; +} diff --git a/Core/Samples/src/LayerDecorator.cpp b/Core/Samples/src/LayerDecorator.cpp index 18496d8f29b06f0a51a51cce35031fa6b4e06e41..462a8abd65429c7bd9d97ea253656379b6acaf79 100644 --- a/Core/Samples/src/LayerDecorator.cpp +++ b/Core/Samples/src/LayerDecorator.cpp @@ -32,27 +32,24 @@ DiffuseDWBASimulation* LayerDecorator::createDiffuseDWBASimulation() const { DiffuseDWBASimulation *p_sim = new DiffuseDWBASimulation; size_t nbr_particles = mp_decoration->getNumberOfParticles(); - double meso_density = mp_decoration->getTotalParticleSurfaceDensity(); - double nps_per_meso = 0.0; - double total_abundance = 0.0; + double particle_density = mp_decoration->getTotalParticleSurfaceDensity(); for (size_t i=0; i<nbr_particles; ++i) { const ParticleInfo *p_info = mp_decoration->getParticleInfo(i); std::vector<DiffuseParticleInfo *> *p_diffuse_nps = p_info->getParticle()->createDiffuseParticleInfo(*p_info); if (p_diffuse_nps) { for (size_t j=0; j<p_diffuse_nps->size(); ++j) { + DiffuseParticleInfo *p_diff_info = (*p_diffuse_nps)[j]; + p_diff_info->setNumberPerMeso(particle_density*p_info->getAbundance() + *p_diff_info->getNumberPerMeso()); p_sim->addParticleInfo((*p_diffuse_nps)[j]); - nps_per_meso += (*p_diffuse_nps)[j]->getNumberPerMeso(); } - total_abundance += p_info->getAbundance(); delete p_diffuse_nps; - break; // TODO: remove this (temporarely to increase speed) + break; // TODO: remove this break (this necessitates the creation of a phi-averaged mesocrystal class generating only one nanoparticle for diffuse calculations) } } if (p_sim->getSize()>0) { p_sim->setRefractiveIndex(getRefractiveIndex()); - p_sim->setSurfaceDensity(meso_density*nps_per_meso); - p_sim->rescaleAbundances(1.0/total_abundance); return p_sim; } delete p_sim; diff --git a/Core/Samples/src/Particle.cpp b/Core/Samples/src/Particle.cpp index 3401ae4652950f6ac052c215f3bd25f6008411bf..211ca42024b2afb00d1bc24f3061e13055caacc2 100644 --- a/Core/Samples/src/Particle.cpp +++ b/Core/Samples/src/Particle.cpp @@ -1,4 +1,5 @@ #include "Particle.h" +#include "ParticleInfo.h" Particle::Particle(complex_t refractive_index, IFormFactor *p_form_factor) : m_ambient_refractive_index(complex_t(1.0, 0.0)) @@ -31,3 +32,23 @@ Particle* Particle::clone() const p_new->setAmbientRefractiveIndex(m_ambient_refractive_index); return p_new; } + +std::vector<ParticleInfo*> Particle::createDistributedParticles( + size_t samples_per_particle, double factor) const +{ + std::vector<ParticleInfo*> result; + if (mp_form_factor->isDistributedFormFactor()) { + std::vector<IFormFactor *> form_factors; + std::vector<double> probabilities; + mp_form_factor->createDistributedFormFactors(form_factors, probabilities, samples_per_particle); + if (form_factors.size() > 0 && form_factors.size()==probabilities.size()) { + for (size_t i=0; i<form_factors.size(); ++i) { + Particle *new_particle = clone(); + new_particle->setSimpleFormFactor(form_factors[i]); + ParticleInfo *p_info = new ParticleInfo(new_particle, 0, 0, probabilities[i]*factor); + result.push_back(p_info); + } + } + } + return result; +} diff --git a/Core/Samples/src/ParticleInfo.cpp b/Core/Samples/src/ParticleInfo.cpp index f35e95463aab22004e559663108aa8f6241eab83..f36b30300767edda8f7c39269f733e82358df9d0 100644 --- a/Core/Samples/src/ParticleInfo.cpp +++ b/Core/Samples/src/ParticleInfo.cpp @@ -4,7 +4,7 @@ ParticleInfo::ParticleInfo(Particle* p_particle, Geometry::Transform3D *transform, double depth, double abundance) : mp_particle(p_particle) -, m_transform(transform) +, mp_transform(transform) , m_depth(depth) , m_abundance(abundance) { @@ -17,7 +17,7 @@ ParticleInfo::ParticleInfo(Particle* p_particle, Geometry::Transform3D *transfor ParticleInfo::~ParticleInfo() { delete mp_particle; - delete m_transform; + delete mp_transform; } @@ -35,6 +35,6 @@ void ParticleInfo::init_parameters() ParticleInfo *ParticleInfo::clone() const { Geometry::Transform3D *transform(0); - if(m_transform) transform = new Geometry::Transform3D(*m_transform); + if(mp_transform) transform = new Geometry::Transform3D(*mp_transform); return new ParticleInfo(mp_particle->clone(), transform, m_depth, m_abundance); }