diff --git a/Core/Samples/inc/HomogeneousMaterial.h b/Core/Samples/inc/HomogeneousMaterial.h index db967ba946f7ccafce38e22d67a1dbd344f942f6..c5c4b5b5eb663c7dec7046de5c077f662be14f43 100644 --- a/Core/Samples/inc/HomogeneousMaterial.h +++ b/Core/Samples/inc/HomogeneousMaterial.h @@ -47,9 +47,11 @@ public: void setRefractiveIndex(const complex_t &refractive_index) { m_refractive_index = refractive_index; } +#ifndef GCCXML_SKIP_THIS //! Get the scattering matrix from the refractive index //! and a given wavevector virtual Eigen::Matrix2cd getScatteringMatrix(const kvector_t& k) const; +#endif protected: virtual void print(std::ostream& ostr) const { @@ -60,6 +62,7 @@ protected: complex_t m_refractive_index; //!< complex index of refraction }; +#ifndef GCCXML_SKIP_THIS inline Eigen::Matrix2cd HomogeneousMaterial::getScatteringMatrix( const kvector_t& k) const { @@ -69,6 +72,7 @@ inline Eigen::Matrix2cd HomogeneousMaterial::getScatteringMatrix( result = unit_factor*Eigen::Matrix2cd::Identity(); return result; } +#endif #endif // HOMOGENEOUSMATERIAL_H diff --git a/Core/Samples/inc/IMaterial.h b/Core/Samples/inc/IMaterial.h index c30ac9254f4f449c14be4c3a182dfb4371a4fe3f..eb414eb182de396e4c9a7482374d7b30ac6bd5ba 100644 --- a/Core/Samples/inc/IMaterial.h +++ b/Core/Samples/inc/IMaterial.h @@ -21,7 +21,10 @@ #include <string> #include <iostream> + +#ifndef GCCXML_SKIP_THIS #include <Eigen/Core> +#endif //! Interface to a named material. @@ -42,12 +45,14 @@ public: friend std::ostream &operator<<(std::ostream &ostr, const IMaterial &m) { m.print(ostr); return ostr; } +#ifndef GCCXML_SKIP_THIS //! Get the scattering matrix from the refractive index //! and a given wavevector virtual Eigen::Matrix2cd getScatteringMatrix(const kvector_t& k) const { (void)k; return Eigen::Matrix2cd::Identity(); } +#endif protected: virtual void print(std::ostream& ostr) const diff --git a/Core/Tools/inc/SampleMaterialVisitor.h b/Core/Tools/inc/SampleMaterialVisitor.h new file mode 100644 index 0000000000000000000000000000000000000000..a83dfd6b7db8edd2893c3055774f3717840c47ed --- /dev/null +++ b/Core/Tools/inc/SampleMaterialVisitor.h @@ -0,0 +1,58 @@ +// ************************************************************************** // +// +// BornAgain: simulate and fit scattering at grazing incidence +// +//! @file SampleMaterialVisitor.h +//! @brief Defines class SampleMaterialVisitor. +//! +//! @homepage http://apps.jcns.fz-juelich.de/BornAgain +//! @license GNU General Public License v3 or higher (see COPYING) +//! @copyright Forschungszentrum Jülich GmbH 2013 +//! @authors Scientific Computing Group at MLZ Garching +//! @authors C. Durniak, G. Pospelov, W. Van Herck, J. Wuttke +// +// ************************************************************************** // + +#ifndef SAMPLEMATERIALVISITOR_H_ +#define SAMPLEMATERIALVISITOR_H_ + +#include "ISampleVisitor.h" +#include "IMaterial.h" + +//! SampleMaterialVisitor retrieves a list of the used materials in a sample +class SampleMaterialVisitor : public ISampleVisitor +{ +public: + SampleMaterialVisitor(); + virtual ~SampleMaterialVisitor(); + + void visit(const ISample *sample); + void visit(const MultiLayer *sample); + void visit(const Layer *sample); + void visit(const LayerInterface *sample); + void visit(const ParticleDecoration *sample); + void visit(const ParticleInfo *sample); + void visit(const Particle *sample); + void visit(const IFormFactor *sample); + + void visit(const FormFactorFullSphere *sample); + void visit(const FormFactorPyramid *sample); + void visit(const FormFactorCylinder *sample); + void visit(const FormFactorPrism3 *sample); + + void visit(const IInterferenceFunction *sample); + void visit(const InterferenceFunction1DParaCrystal *); + void visit(const InterferenceFunction2DParaCrystal *); + + std::vector<const IMaterial *> getMaterials() const { + return m_materials; + } + +protected: + void addMaterial(const IMaterial *p_material); + std::vector<const IMaterial *> m_materials; +}; + + + +#endif /* SAMPLEMATERIALVISITOR_H_ */ diff --git a/Core/Tools/src/SampleMaterialVisitor.cpp b/Core/Tools/src/SampleMaterialVisitor.cpp new file mode 100644 index 0000000000000000000000000000000000000000..821fe00bd6dcc7b5b7bc49d0e18b9be6560cc3f6 --- /dev/null +++ b/Core/Tools/src/SampleMaterialVisitor.cpp @@ -0,0 +1,144 @@ +// ************************************************************************** // +// +// BornAgain: simulate and fit scattering at grazing incidence +// +//! @file SampleMaterialVisitor.cpp +//! @brief Implements class SampleMaterialVisitor. +//! +//! @homepage http://apps.jcns.fz-juelich.de/BornAgain +//! @license GNU General Public License v3 or higher (see COPYING) +//! @copyright Forschungszentrum Jülich GmbH 2013 +//! @authors Scientific Computing Group at MLZ Garching +//! @authors C. Durniak, G. Pospelov, W. Van Herck, J. Wuttke +// +// ************************************************************************** // + +#include "SampleMaterialVisitor.h" + +#include <algorithm> + +SampleMaterialVisitor::SampleMaterialVisitor() +{ + m_materials.clear(); +} + +SampleMaterialVisitor::~SampleMaterialVisitor() +{ + m_materials.clear(); +} + +void SampleMaterialVisitor::visit(const ISample* sample) +{ + throw NotImplementedException("SampleMaterialVisitor::visit(ISample *)"); +} + +void SampleMaterialVisitor::visit(const MultiLayer* sample) +{ + assert(sample); + + for(size_t i_layer=0; i_layer < sample->getNumberOfLayers(); ++i_layer) { + const Layer *layer = sample->getLayer(i_layer); + layer->accept(this); + } +} + +void SampleMaterialVisitor::visit(const Layer* sample) +{ + assert(sample); + + IMaterial *p_material = sample->getMaterial(); + addMaterial(p_material); + const IDecoration *p_decoration = sample->getDecoration(); + if (p_decoration) { + p_decoration->accept(this); + } +} + +void SampleMaterialVisitor::visit(const LayerInterface* sample) +{ + throw NotImplementedException("SampleMaterialVisitor::visit(LayerInterface *)"); +} + +void SampleMaterialVisitor::visit(const ParticleDecoration* sample) +{ + assert(sample); + + for (size_t i=0; i<sample->getNumberOfParticles(); ++i) { + const ParticleInfo *p_particle_info = sample->getParticleInfo(i); + p_particle_info->accept(this); + } +} + +void SampleMaterialVisitor::visit(const ParticleInfo* sample) +{ + assert(sample); + + const Particle *p_particle = sample->getParticle(); + if (p_particle) { + p_particle->accept(this); + } +} + +void SampleMaterialVisitor::visit(const Particle* sample) +{ + assert(sample); + + const IMaterial *p_material = sample->getMaterial(); + addMaterial(p_material); +} + +void SampleMaterialVisitor::visit(const IFormFactor* sample) +{ + throw NotImplementedException("SampleMaterialVisitor::" + "visit(IFormFactor *)"); +} + +void SampleMaterialVisitor::visit(const FormFactorFullSphere* sample) +{ + throw NotImplementedException("SampleMaterialVisitor::" + "visit(FormFactorFullSphere *)"); +} + +void SampleMaterialVisitor::visit(const FormFactorPyramid* sample) +{ + throw NotImplementedException("SampleMaterialVisitor::" + "visit(FormFactorPyramid *)"); +} + +void SampleMaterialVisitor::visit(const FormFactorCylinder* sample) +{ + throw NotImplementedException("SampleMaterialVisitor::" + "visit(FormFactorCylinder *)"); +} + +void SampleMaterialVisitor::visit(const FormFactorPrism3* sample) +{ + throw NotImplementedException("SampleMaterialVisitor::" + "visit(FormFactorPrism3 *)"); +} + +void SampleMaterialVisitor::visit(const IInterferenceFunction* sample) +{ + throw NotImplementedException("SampleMaterialVisitor::" + "visit(IInterferenceFunction *)"); +} + +void SampleMaterialVisitor::visit(const InterferenceFunction1DParaCrystal*) +{ + throw NotImplementedException("SampleMaterialVisitor::" + "visit(IInterferenceFunction *)"); +} + +void SampleMaterialVisitor::visit(const InterferenceFunction2DParaCrystal*) +{ + throw NotImplementedException("SampleMaterialVisitor::" + "visit(InterferenceFunction2DParaCrystal *)"); +} + +void SampleMaterialVisitor::addMaterial(const IMaterial* p_material) +{ + if (std::find(m_materials.begin(), m_materials.end(), p_material) != + m_materials.end() ) { + m_materials.push_back(p_material); + } +} diff --git a/Tests/FunctionalTests/TestCore/MesoCrystal1/MesoCrystal1.cpp b/Tests/FunctionalTests/TestCore/MesoCrystal1/MesoCrystal1.cpp index 49c7434262bb85436a4e6404c1e11bce904fd943..cc1268bc78231cc61397604fe68c83209a557e2d 100644 --- a/Tests/FunctionalTests/TestCore/MesoCrystal1/MesoCrystal1.cpp +++ b/Tests/FunctionalTests/TestCore/MesoCrystal1/MesoCrystal1.cpp @@ -13,8 +13,10 @@ using namespace FunctionalTests; MesoCrystal1::MesoCrystal1() - : m_name("MesoCrystal1") - , m_description("Meso crystal simulation") +: m_name("MesoCrystal1") +, m_description("Meso crystal simulation") +, m_result(0) +, m_reference(0) { }