Skip to content
Snippets Groups Projects
Commit 6a1697b9 authored by Van Herck, Walter's avatar Van Herck, Walter
Browse files

Added parameter registration, xi integration flag usage, isgisaxs8 first...

Added parameter registration, xi integration flag usage, isgisaxs8 first sample initialization, debug symbols in release
parent d38b734e
No related branches found
No related tags found
No related merge requests found
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
#include "TestIsGISAXS2.h" #include "TestIsGISAXS2.h"
#include "TestIsGISAXS3.h" #include "TestIsGISAXS3.h"
#include "TestIsGISAXS4.h" #include "TestIsGISAXS4.h"
#include "TestIsGISAXS8.h"
#include "TestIsGISAXS9.h" #include "TestIsGISAXS9.h"
#include "TestIsGISAXS10.h" #include "TestIsGISAXS10.h"
#include "TestIsGISAXS11.h" #include "TestIsGISAXS11.h"
...@@ -44,7 +45,9 @@ FunctionalTestFactory::FunctionalTestFactory() : m_benchmark(0) ...@@ -44,7 +45,9 @@ FunctionalTestFactory::FunctionalTestFactory() : m_benchmark(0)
registerItem("isgisaxs3", IFactoryCreateFunction<TestIsGISAXS3, IFunctionalTest>, registerItem("isgisaxs3", IFactoryCreateFunction<TestIsGISAXS3, IFunctionalTest>,
"functional test: isgisaxs ex-3 (cylinder FF)"); "functional test: isgisaxs ex-3 (cylinder FF)");
registerItem("isgisaxs4", IFactoryCreateFunction<TestIsGISAXS4, IFunctionalTest>, registerItem("isgisaxs4", IFactoryCreateFunction<TestIsGISAXS4, IFunctionalTest>,
"functional test: isgisaxs ex-4 (paracrystal structure factors)"); "functional test: isgisaxs ex-4 (paracrystal 1d structure factors)");
registerItem("isgisaxs8", IFactoryCreateFunction<TestIsGISAXS8, IFunctionalTest>,
"functional test: isgisaxs ex-8 (paracrystal lattice structure factors)");
registerItem("isgisaxs9", IFactoryCreateFunction<TestIsGISAXS9, IFunctionalTest>, registerItem("isgisaxs9", IFactoryCreateFunction<TestIsGISAXS9, IFunctionalTest>,
"functional test: isgisaxs ex-9 (rotated pyramid FF)"); "functional test: isgisaxs ex-9 (rotated pyramid FF)");
registerItem("isgisaxs10", IFactoryCreateFunction<TestIsGISAXS10, IFunctionalTest>, registerItem("isgisaxs10", IFactoryCreateFunction<TestIsGISAXS10, IFunctionalTest>,
......
...@@ -456,7 +456,12 @@ ISample *StandardSamples::IsGISAXS8_2DDL_lattice() ...@@ -456,7 +456,12 @@ ISample *StandardSamples::IsGISAXS8_2DDL_lattice()
air_layer.setMaterial(p_air_material); air_layer.setMaterial(p_air_material);
Layer substrate_layer; Layer substrate_layer;
substrate_layer.setMaterial(p_substrate_material); substrate_layer.setMaterial(p_substrate_material);
IInterferenceFunction *p_interference_function = new InterferenceFunction1DParaCrystal(20.0*Units::nanometer,7*Units::nanometer, 1e3*Units::nanometer); InterferenceFunction2DParaCrystal *p_interference_function = new InterferenceFunction2DParaCrystal(10.0*Units::nanometer, 10.0*Units::nanometer, M_PI/2.0,
0.0, 1e7*Units::nanometer);
p_interference_function->setDomainSizes(20.0*Units::micrometer, 20.0*Units::micrometer);
FTDistribution2DCauchy pdf1(0.5*Units::nanometer, 2.0*Units::nanometer);
FTDistribution2DCauchy pdf2(2.0*Units::nanometer, 0.5*Units::nanometer);
p_interference_function->setProbabilityDistributions(pdf1, pdf2);
ParticleDecoration particle_decoration( new Particle(n_particle, new FormFactorCylinder(5*Units::nanometer, 5*Units::nanometer))); ParticleDecoration particle_decoration( new Particle(n_particle, new FormFactorCylinder(5*Units::nanometer, 5*Units::nanometer)));
particle_decoration.addInterferenceFunction(p_interference_function); particle_decoration.addInterferenceFunction(p_interference_function);
LayerDecorator air_layer_decorator(air_layer, particle_decoration); LayerDecorator air_layer_decorator(air_layer, particle_decoration);
......
...@@ -27,6 +27,8 @@ void TestIsGISAXS8::execute() ...@@ -27,6 +27,8 @@ void TestIsGISAXS8::execute()
// 2DDL_lattice // 2DDL_lattice
p_sample = dynamic_cast<MultiLayer *>(SampleFactory::instance().createItem("IsGISAXS8_2DDL_lattice")); p_sample = dynamic_cast<MultiLayer *>(SampleFactory::instance().createItem("IsGISAXS8_2DDL_lattice"));
// ParameterPool *p_pool = p_sample->createParameterTree();
// std::cout << (*p_pool);
experiment.setSample(*p_sample); experiment.setSample(*p_sample);
experiment.runSimulation(); experiment.runSimulation();
IsGISAXSTools::writeOutputDataToFile(*experiment.getOutputData(), m_data_path+"this_2DDL_lattice.ima"); IsGISAXSTools::writeOutputDataToFile(*experiment.getOutputData(), m_data_path+"this_2DDL_lattice.ima");
......
...@@ -14,6 +14,8 @@ ...@@ -14,6 +14,8 @@
//! @author Scientific Computing Group at FRM II //! @author Scientific Computing Group at FRM II
//! @date Oct 26, 2012 //! @date Oct 26, 2012
#include "IParameterized.h"
#include "ParameterPool.h"
#include <cmath> #include <cmath>
class IFTDistribution1D class IFTDistribution1D
...@@ -27,7 +29,7 @@ protected: ...@@ -27,7 +29,7 @@ protected:
double m_omega; double m_omega;
}; };
class IFTDistribution2D class IFTDistribution2D : public IParameterized
{ {
public: public:
IFTDistribution2D(double omega_x, double omega_y) : m_omega_x(omega_x), m_omega_y(omega_y), IFTDistribution2D(double omega_x, double omega_y) : m_omega_x(omega_x), m_omega_y(omega_y),
...@@ -55,6 +57,8 @@ public: ...@@ -55,6 +57,8 @@ public:
virtual FTDistribution2DCauchy *clone() const; virtual FTDistribution2DCauchy *clone() const;
virtual double evaluate(double qx, double qy) const; virtual double evaluate(double qx, double qy) const;
protected:
virtual void init_parameters();
}; };
#endif /* FTDISTRIBUTIONS_H_ */ #endif /* FTDISTRIBUTIONS_H_ */
...@@ -3,6 +3,8 @@ ...@@ -3,6 +3,8 @@
FTDistribution2DCauchy::FTDistribution2DCauchy(double omega_x, double omega_y) FTDistribution2DCauchy::FTDistribution2DCauchy(double omega_x, double omega_y)
: IFTDistribution2D(omega_x, omega_y) : IFTDistribution2D(omega_x, omega_y)
{ {
setName("2DDistributionCauchy");
init_parameters();
} }
FTDistribution2DCauchy* FTDistribution2DCauchy::clone() const FTDistribution2DCauchy* FTDistribution2DCauchy::clone() const
...@@ -15,3 +17,10 @@ double FTDistribution2DCauchy::evaluate(double qx, double qy) const ...@@ -15,3 +17,10 @@ double FTDistribution2DCauchy::evaluate(double qx, double qy) const
double sum_sq = qx*qx*m_omega_x*m_omega_x + qy*qy*m_omega_y*m_omega_y; double sum_sq = qx*qx*m_omega_x*m_omega_x + qy*qy*m_omega_y*m_omega_y;
return std::pow(1.0 + sum_sq, -1.5); return std::pow(1.0 + sum_sq, -1.5);
} }
void FTDistribution2DCauchy::init_parameters()
{
getParameterPool()->clear();
getParameterPool()->registerParameter("omega_x", &m_omega_x);
getParameterPool()->registerParameter("omega_y", &m_omega_y);
}
...@@ -21,7 +21,7 @@ class InterferenceFunction2DParaCrystal : public IInterferenceFunction ...@@ -21,7 +21,7 @@ class InterferenceFunction2DParaCrystal : public IInterferenceFunction
{ {
public: public:
InterferenceFunction2DParaCrystal(double length_1, double length_2, double alpha_lattice, double xi=0.0, double corr_length=0.0); InterferenceFunction2DParaCrystal(double length_1, double length_2, double alpha_lattice, double xi=0.0, double corr_length=0.0);
virtual ~InterferenceFunction2DParaCrystal() {} virtual ~InterferenceFunction2DParaCrystal();
virtual InterferenceFunction2DParaCrystal *clone() const { virtual InterferenceFunction2DParaCrystal *clone() const {
InterferenceFunction2DParaCrystal *p_new = new InterferenceFunction2DParaCrystal(m_lattice_lengths[0], m_lattice_lengths[1], m_alpha_lattice, m_xi, m_corr_length); InterferenceFunction2DParaCrystal *p_new = new InterferenceFunction2DParaCrystal(m_lattice_lengths[0], m_lattice_lengths[1], m_alpha_lattice, m_xi, m_corr_length);
p_new->setDomainSizes(m_domain_sizes[0], m_domain_sizes[1]); p_new->setDomainSizes(m_domain_sizes[0], m_domain_sizes[1]);
...@@ -45,6 +45,8 @@ public: ...@@ -45,6 +45,8 @@ public:
virtual double evaluate(const cvector_t &q) const; virtual double evaluate(const cvector_t &q) const;
//! add parameters from local pool to external pool and call recursion over direct children
virtual std::string addParametersToExternalPool(std::string path, ParameterPool *external_pool, int copy_number=-1) const;
protected: protected:
void transformToPrincipalAxes(double qx, double qy, double gamma, double delta, double &q_pa_1, double &q_pa_2) const; void transformToPrincipalAxes(double qx, double qy, double gamma, double delta, double &q_pa_1, double &q_pa_2) const;
double m_lattice_lengths[2]; double m_lattice_lengths[2];
......
...@@ -31,6 +31,13 @@ InterferenceFunction2DParaCrystal::InterferenceFunction2DParaCrystal(double leng ...@@ -31,6 +31,13 @@ InterferenceFunction2DParaCrystal::InterferenceFunction2DParaCrystal(double leng
init_parameters(); init_parameters();
} }
InterferenceFunction2DParaCrystal::~InterferenceFunction2DParaCrystal()
{
for (size_t i=0; i<2; ++i) {
if (m_pdfs[i]) delete m_pdfs[i];
}
}
void InterferenceFunction2DParaCrystal::setProbabilityDistributions( void InterferenceFunction2DParaCrystal::setProbabilityDistributions(
const IFTDistribution2D& pdf_1, const IFTDistribution2D& pdf_2) const IFTDistribution2D& pdf_1, const IFTDistribution2D& pdf_2)
{ {
...@@ -45,14 +52,36 @@ double InterferenceFunction2DParaCrystal::evaluate(const cvector_t &q) const ...@@ -45,14 +52,36 @@ double InterferenceFunction2DParaCrystal::evaluate(const cvector_t &q) const
{ {
m_qx = q.x().real(); m_qx = q.x().real();
m_qy = q.y().real(); m_qy = q.y().real();
std::binder1st<std::const_mem_fun1_t<double, InterferenceFunction2DParaCrystal, double> > f_base = std::bind1st(std::mem_fun(&InterferenceFunction2DParaCrystal::interferenceForXi), this); double result;
gsl_function f; if (m_integrate_xi) {
f.function = &wrapFunctionForGSL; std::binder1st<std::const_mem_fun1_t<double, InterferenceFunction2DParaCrystal, double> > f_base = std::bind1st(std::mem_fun(&InterferenceFunction2DParaCrystal::interferenceForXi), this);
f.params = &f_base; gsl_function f;
double result = MathFunctions::Integrate1D(&f, 0.0, M_PI)/M_PI; f.function = &wrapFunctionForGSL;
f.params = &f_base;
result = MathFunctions::Integrate1D(&f, 0.0, M_PI)/M_PI;
}
else {
result = interferenceForXi(m_xi);
}
return result; return result;
} }
std::string InterferenceFunction2DParaCrystal::addParametersToExternalPool(std::string path,
ParameterPool* external_pool, int copy_number) const
{
// add own parameters
std::string new_path = IParameterized::addParametersToExternalPool(path, external_pool, copy_number);
// add parameters of the probability density functions
if (m_pdfs[0]) {
m_pdfs[0]->addParametersToExternalPool(new_path, external_pool, 0);
}
if (m_pdfs[1]) {
m_pdfs[1]->addParametersToExternalPool(new_path, external_pool, 1);
}
return new_path;
}
void InterferenceFunction2DParaCrystal::transformToPrincipalAxes(double qx, void InterferenceFunction2DParaCrystal::transformToPrincipalAxes(double qx,
double qy, double gamma, double delta, double& q_pa_1, double& q_pa_2) const double qy, double gamma, double delta, double& q_pa_1, double& q_pa_2) const
{ {
...@@ -63,8 +92,13 @@ void InterferenceFunction2DParaCrystal::transformToPrincipalAxes(double qx, ...@@ -63,8 +92,13 @@ void InterferenceFunction2DParaCrystal::transformToPrincipalAxes(double qx,
void InterferenceFunction2DParaCrystal::init_parameters() void InterferenceFunction2DParaCrystal::init_parameters()
{ {
getParameterPool()->clear(); getParameterPool()->clear();
// getParameterPool()->registerParameter("peak_distance", &m_peak_distance); getParameterPool()->registerParameter("lattice_length_1", &m_lattice_lengths[0]);
getParameterPool()->registerParameter("lattice_length_2", &m_lattice_lengths[1]);
getParameterPool()->registerParameter("lattice_angle", &m_alpha_lattice);
getParameterPool()->registerParameter("lattice_orientation", &m_xi);
getParameterPool()->registerParameter("corr_length", &m_corr_length); getParameterPool()->registerParameter("corr_length", &m_corr_length);
getParameterPool()->registerParameter("domain_size_1", &m_domain_sizes[0]);
getParameterPool()->registerParameter("domain_size_2", &m_domain_sizes[1]);
} }
InterferenceFunction2DParaCrystal* InterferenceFunction2DParaCrystal::createSquare( InterferenceFunction2DParaCrystal* InterferenceFunction2DParaCrystal::createSquare(
......
...@@ -90,7 +90,7 @@ NumberOfSuchFiles=$$system(ls $${GENERAL_EXTERNALS_DIR}/lib/libboost_thread-mt* ...@@ -90,7 +90,7 @@ NumberOfSuchFiles=$$system(ls $${GENERAL_EXTERNALS_DIR}/lib/libboost_thread-mt*
QMAKE_CXXFLAGS_DEBUG += -fdiagnostics-show-option # to find out in gcc which option control warning QMAKE_CXXFLAGS_DEBUG += -fdiagnostics-show-option # to find out in gcc which option control warning
#QMAKE_CXXFLAGS_RELEASE += -O3 -ffast-math -msse3 #QMAKE_CXXFLAGS_RELEASE += -O3 -ffast-math -msse3
QMAKE_CXXFLAGS_RELEASE -= -O2 QMAKE_CXXFLAGS_RELEASE -= -O2
QMAKE_CXXFLAGS_RELEASE += -O3 -ffast-math QMAKE_CXXFLAGS_RELEASE += -g -O3 -ffast-math
# uncommenting line below produces non-stripped (very large) libraries # uncommenting line below produces non-stripped (very large) libraries
#QMAKE_STRIP=: #QMAKE_STRIP=:
......
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