Skip to content
Snippets Groups Projects
Commit f4f77a04 authored by Wuttke, Joachim's avatar Wuttke, Joachim
Browse files

Doxygen comments ...

parent 5083b12e
No related branches found
No related tags found
No related merge requests found
......@@ -17,7 +17,6 @@
#define MULTILAYER_H
#include <vector>
#include "ICompositeSample.h"
#include "Layer.h"
#include "LayerInterface.h"
#include "LayerRoughness.h"
......
......@@ -20,34 +20,40 @@
#include "Particle.h"
#include "ParticleInfo.h"
#include "IInterferenceFunction.h"
#include "Transform3D.h"
//! Decorator class that adds particles to ISample objects
class ParticleDecoration : public IDecoration
{
public:
ParticleDecoration();
ParticleDecoration(Particle *p_particle, double depth=0.0, double abundance=1.0);
ParticleDecoration(const Particle &p_particle, double depth=0.0, double abundance=1.0);
ParticleDecoration();
ParticleDecoration(
Particle *p_particle, double depth=0.0, double abundance=1.0);
ParticleDecoration(
const Particle &p_particle, double depth=0.0, double abundance=1.0);
virtual ~ParticleDecoration();
/// Clone decoration
virtual ParticleDecoration *clone() const;
virtual ParticleDecoration *clone() const;
/// add particle giving depth and transformation
void addParticle(Particle *p_particle, Geometry::Transform3D *p_transform=0, double depth=0, double abundance=1.0);
void addParticle(const Particle &particle, const Geometry::Transform3D &transform, double depth=0, double abundance=1.0);
//! add particle giving depth and transformation
void addParticle(
Particle *p_particle, Geometry::Transform3D *p_transform=0,
double depth=0, double abundance=1.0);
void addParticle(
const Particle &particle, const Geometry::Transform3D &transform,
double depth=0, double abundance=1.0);
/// add particle giving depth
void addParticle(const Particle &particle, double depth=0.0, double abundance=1.0);
void addParticle(Particle *p_particle, double depth=0.0, double abundance=1.0);
//! add particle giving depth
void addParticle(
const Particle &particle, double depth=0.0, double abundance=1.0);
void addParticle(
Particle *p_particle, double depth=0.0, double abundance=1.0);
/// Add particle info
//! Add particle info
void addParticleInfo(const ParticleInfo &info);
/// Get number of particles
virtual size_t getNumberOfParticles() const { return m_particles.size(); }
//! Get number of particles
virtual size_t getNumberOfParticles() const { return m_particles.size(); }
/// get information about particle with index
virtual const ParticleInfo *getParticleInfo(size_t index) const;
......@@ -56,24 +62,26 @@ class ParticleDecoration : public IDecoration
double getAbundanceFractionOfParticle(size_t index) const;
//! get number of interference functions
virtual size_t getNumberOfInterferenceFunctions() const {
return m_interference_functions.size();
}
virtual size_t getNumberOfInterferenceFunctions() const
{ return m_interference_functions.size(); }
//! get interference functions
virtual SafePointerVector<IInterferenceFunction> getInterferenceFunctions() const {
return m_interference_functions;
}
virtual SafePointerVector<IInterferenceFunction>
getInterferenceFunctions() const
{ return m_interference_functions; }
//! Add interference function
void addInterferenceFunction(
IInterferenceFunction* p_interference_function);
/// Add interference function
void addInterferenceFunction(IInterferenceFunction* p_interference_function);
void addInterferenceFunction(const IInterferenceFunction &interference_function);
void addInterferenceFunction(
const IInterferenceFunction &interference_function);
/// Get interference function with index
//! Get interference function with index
const IInterferenceFunction* getInterferenceFunction(size_t index) const;
private:
//! adding particle information with simultaneous registration in parent class
//! Add particle information with simultaneous registration in parent class.
void addAndRegisterParticleInfo(ParticleInfo *child)
{
m_total_abundance += child->getAbundance();
......@@ -81,7 +89,7 @@ class ParticleDecoration : public IDecoration
registerChild(child);
}
//! adding interference function with simultaneous registration in parent class
//! Add interference function with simultaneous registration in parent class
void addAndRegisterInterferenceFunction(IInterferenceFunction *child)
{
m_interference_functions.push_back(child);
......@@ -90,9 +98,11 @@ class ParticleDecoration : public IDecoration
//TODO: replace with SafePointerVector
std::vector<ParticleInfo *> m_particles;
///< Vector of the types of particles
//! Vector of the types of particles
SafePointerVector<IInterferenceFunction> m_interference_functions;
///< Currently only a scalar interference function (instead of matrix)
//! Currently only a scalar interference function (instead of matrix)
double m_total_abundance;
};
......
......@@ -26,12 +26,14 @@ FunctionalTests::IsGISAXS01::IsGISAXS01()
void FunctionalTests::IsGISAXS01::run()
{
// ---------------------
// building sample
// ---------------------
// ------------
// Build sample
// ------------
MultiLayer multi_layer;
const IMaterial *p_air_material = MaterialManager::getHomogeneousMaterial("Air", 1.0, 0.0);
const IMaterial *p_substrate_material = MaterialManager::getHomogeneousMaterial("Substrate", 1.0-6e-6, 2e-8);
const IMaterial *p_air_material =
MaterialManager::getHomogeneousMaterial("Air", 1., 0.);
const IMaterial *p_substrate_material =
MaterialManager::getHomogeneousMaterial("Substrate", 1-6e-6, 2e-8);
Layer air_layer;
air_layer.setMaterial(p_air_material);
Layer substrate_layer;
......@@ -39,8 +41,16 @@ void FunctionalTests::IsGISAXS01::run()
ParticleDecoration particle_decoration;
complex_t n_particle(1.0-6e-4, 2e-8);
particle_decoration.addParticle(new Particle(n_particle, new FormFactorCylinder(5*Units::nanometer, 5*Units::nanometer)), 0.0, 0.5);
particle_decoration.addParticle(new Particle(n_particle, new FormFactorPrism3(5*Units::nanometer, 5*Units::nanometer)), 0.0, 0.5);
particle_decoration.addParticle(
new Particle(n_particle,
new FormFactorCylinder(5*Units::nanometer,
5*Units::nanometer)),
0.0, 0.5);
particle_decoration.addParticle(
new Particle(n_particle,
new FormFactorPrism3(5*Units::nanometer,
5*Units::nanometer)),
0.0, 0.5);
particle_decoration.addInterferenceFunction(new InterferenceFunctionNone());
LayerDecorator air_layer_decorator(air_layer, particle_decoration);
......@@ -48,22 +58,25 @@ void FunctionalTests::IsGISAXS01::run()
multi_layer.addLayer(air_layer_decorator);
multi_layer.addLayer(substrate_layer);
// ---------------------
// building simulation
// ---------------------
// ----------------
// Build simulation
// ----------------
Simulation simulation;
simulation.setDetectorParameters(100,-1.0*Units::degree, 1.0*Units::degree, 100, 0.0*Units::degree, 2.0*Units::degree, true);
simulation.setBeamParameters(1.0*Units::angstrom, -0.2*Units::degree, 0.0*Units::degree);
// ---------------------
// running simulation
// ---------------------
simulation.setDetectorParameters(
100,-1.0*Units::degree, 1.0*Units::degree, 100,
0.0*Units::degree, 2.0*Units::degree, true);
simulation.setBeamParameters(
1.0*Units::angstrom, -0.2*Units::degree, 0.0*Units::degree);
// --------------
// Run simulation
// --------------
simulation.setSample(multi_layer);
simulation.runSimulation();
// ---------------------
// copying data
// ---------------------
// ------------
// Copy results
// ------------
m_result = simulation.getOutputDataClone();
}
......@@ -72,25 +85,30 @@ int FunctionalTests::IsGISAXS01::analyseResults()
{
const double threshold(1e-10);
// retrieving reference data
std::string filename = Utils::FileSystem::GetHomePath() + "/Tests/FunctionalTests/TestCore/IsGISAXS01/isgisaxs01_reference.ima.gz";
OutputData<double > *reference = OutputDataIOFactory::getOutputData(filename);
// Retrieve reference data.
std::string filename =
Utils::FileSystem::GetHomePath() +
"/Tests/FunctionalTests/TestCore/IsGISAXS01/isgisaxs01_reference.ima.gz";
OutputData<double > *reference =
OutputDataIOFactory::getOutputData(filename);
// calculating average relative difference
// Calculating average relative difference.
*m_result -= *reference;
*m_result /= *reference;
double diff(0);
for(OutputData<double>::const_iterator it=m_result->begin(); it!=m_result->end(); ++it) {
for(OutputData<double>::const_iterator it =
m_result->begin(); it!=m_result->end(); ++it) {
diff+= std::fabs(*it);
}
diff /= m_result->getAllocatedSize();
// Assess result.
bool status_ok(true);
if( diff > threshold || std::isnan(diff) ) status_ok=false;
delete reference;
std::cout << m_name << " " << m_description << " " << (status_ok ? "[OK]" : "[FAILED]") << std::endl;
std::cout << m_name << " " << m_description << " " <<
(status_ok ? "[OK]" : "[FAILED]") << std::endl;
return (int)status_ok;
}
......
#ifndef FUNCTIONALTESTS_ISGISAXS01_H
#define FUNCTIONALTESTS_ISGISAXS01_H
#include <string>
#include "OutputData.h"
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment