diff --git a/App/inc/TestMesoCrystal2.h b/App/inc/TestMesoCrystal2.h deleted file mode 100644 index db8519714db4f7cfcb0aea24258d0880befa1632..0000000000000000000000000000000000000000 --- a/App/inc/TestMesoCrystal2.h +++ /dev/null @@ -1,92 +0,0 @@ -// ************************************************************************** // -// -// BornAgain: simulate and fit scattering at grazing incidence -// -//! @file App/inc/TestMesoCrystal2.h -//! @brief Defines class TestMesoCrystal2. -// -//! Homepage: 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 TESTMESOCRYSTAL2_H -#define TESTMESOCRYSTAL2_H - -#include "IApplicationTest.h" -#include "Types.h" -#include "OutputData.h" -#include "ISampleBuilder.h" - -class Simulation; -class ISample; -class MesoCrystal; -class IFormFactor; -class Lattice; -class FitSuite; - -//! Simulation and fit of 3D ordered particle assemblies. - -class TestMesoCrystal2 : public IApplicationTest -{ -public: - typedef std::vector<std::vector<std::string > > fixplan_t; // to hold sets of fit parameters to fix/release - - TestMesoCrystal2(); - virtual ~TestMesoCrystal2(); - - virtual void execute(); - - class SampleBuilder : public ISampleBuilder - { - public: - SampleBuilder(); - virtual ~SampleBuilder(){} - - virtual ISample *buildSample() const; - protected: - //! Initializes pool parameters - virtual void init_parameters(); - private: -// MesoCrystal *createMesoCrystal(double particle_radius, complex_t n_particle, const IFormFactor *p_meso_form_factor) const; -// const Lattice *createLattice(double stacking_radius) const; - MesoCrystal *createMesoCrystal(double stacking_radius_a, double stacking_radius_c, complex_t n_particle, const IFormFactor *p_meso_form_factor) const; - const Lattice *createLattice(double stacking_radius_a, double stacking_radius_c) const; - double m_meso_radius; - double m_surface_filling_ratio; - double m_meso_height; - double m_sigma_meso_height; - double m_sigma_meso_radius; - double m_lattice_length_a; - double m_lattice_length_c; - double m_nanoparticle_radius; - double m_sigma_nanoparticle_radius; - double m_sigma_lattice_length_a; - double m_roughness; - }; - - void draw_results(); // plot fit results - void run_fit(); // run fit - - void fitsuite_setup(int nconfig); - void fitsuite_config1(); - void fitsuite_config2(); - void fitsuite_config3(); - void fitsuite_config4(); - -private: - void initializeRealData(); - void initializeSimulation(const OutputData<double> *output_data=0); - - OutputData<double> *m_real_data; - SampleBuilder_t m_sample_builder; - Simulation *m_simulation; - FitSuite *m_fitSuite; -}; - -#endif // TESTMESOCRYSTAL2_H - - diff --git a/App/inc/TestMiscellaneous.h b/App/inc/TestMiscellaneous.h index 189bd7e12b7ba6c65b1640965b4e2789e4324e72..1b4d49e1c69dd398d9c7b6b688fc8040a671a5c8 100644 --- a/App/inc/TestMiscellaneous.h +++ b/App/inc/TestMiscellaneous.h @@ -40,9 +40,6 @@ public: //! test of fast sin function approximation void test_FastSin(); - //! test of reading of OutputData from ASCII file - void test_OutputDataIOFactory(); - //! test kvector container void test_KVectorContainer(); diff --git a/App/src/ApplicationTestFactory.cpp b/App/src/ApplicationTestFactory.cpp index 24c0c72db8840f53529727645cb239c83b845599..c2d8ef538a68b00fa82b1dddc416adfb6b637cb9 100644 --- a/App/src/ApplicationTestFactory.cpp +++ b/App/src/ApplicationTestFactory.cpp @@ -30,7 +30,6 @@ #include "TestIsGISAXS13.h" #include "TestIsGISAXS5.h" #include "TestMesoCrystal1.h" -#include "TestMesoCrystal2.h" #include "TestMiscellaneous.h" #include "TestMultiLayerRoughness.h" #include "TestPerformance.h" @@ -188,10 +187,6 @@ void RegisterApplicationTests(ApplicationTestFactory *p_test_factory) "mesocrystal1", IFactoryCreateFunction<TestMesoCrystal1, IApplicationTest>, "functional test: mesocrystal"); - p_test_factory->registerItem( - "mesocrystal2", - IFactoryCreateFunction<TestMesoCrystal2, IApplicationTest>, - "functional test: mesocrystal fit"); p_test_factory->registerItem( "roottree", IFactoryCreateFunction<TestRootTree, IApplicationTest>, diff --git a/App/src/TestMesoCrystal1.cpp b/App/src/TestMesoCrystal1.cpp index b51b5e6ee3071754b1fca129919d6a526e1c154b..5a24468684ba9770d7bcca21adb09a91b730d397 100644 --- a/App/src/TestMesoCrystal1.cpp +++ b/App/src/TestMesoCrystal1.cpp @@ -29,13 +29,11 @@ void TestMesoCrystal1::execute() simulation->setProgramOptions(mp_options); // loading reference data - std::string filename = Utils::FileSystem::GetReferenceDataDir()+ "mesocrystal01_reference.int.gz"; + std::string filename = Utils::FileSystem::GetReferenceDataDir() + + "mesocrystal01_reference.int.gz"; - OutputData<double> *reference = IntensityDataIOFactory::readIntensityData(filename); - - // setting detector axis as in reference data - //simulation->setDetectorParameters(*reference); - //simulation->getSampleBuilder()->setParameterValue("nphi_rotations", 180.); + OutputData<double> *reference = + IntensityDataIOFactory::readIntensityData(filename); simulation->runSimulation(); simulation->normalize(); @@ -59,7 +57,7 @@ void TestMesoCrystal1::execute() IsGISAXSTools::drawOutputDataComparisonResults( *data, *reference, "found", "found params", 100, 1e6); - IntensityDataIOFactory::writeIntensityData(*data,"test_mesocrystal1.txt"); + IntensityDataIOFactory::writeIntensityData(*data,"test_mesocrystal1.int"); delete data; delete simulation; diff --git a/App/src/TestMesoCrystal2.cpp b/App/src/TestMesoCrystal2.cpp deleted file mode 100644 index 7f5cd288eb46d595c34e4ad746bdd34c9976b2bc..0000000000000000000000000000000000000000 --- a/App/src/TestMesoCrystal2.cpp +++ /dev/null @@ -1,714 +0,0 @@ -// ************************************************************************** // -// -// BornAgain: simulate and fit scattering at grazing incidence -// -//! @file App/src/TestMesoCrystal2.cpp -//! @brief Implements class TestMesoCrystal2. -// -//! Homepage: 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 "TestMesoCrystal2.h" -#include "AttLimits.h" -#include "Crystal.h" -#include "DrawHelper.h" -#include "FitStrategyAdjustParameters.h" -#include "FitSuite.h" -#include "FitSuiteObserverFactory.h" -#include "FormFactorDecoratorDebyeWaller.h" -#include "FormFactors.h" -#include "Simulation.h" -#include "IInterferenceFunction.h" -#include "InterferenceFunctionNone.h" -#include "IntensityDataFunctions.h" -#include "IsGISAXSTools.h" -#include "LatticeBasis.h" -#include "Materials.h" -#include "MathFunctions.h" -#include "MesoCrystal.h" -#include "MinimizerFactory.h" -#include "MultiLayer.h" -#include "FileSystem.h" -#include "IntensityDataIOFactory.h" -#include "OutputDataReader.h" -#include "OutputDataFunctions.h" -#include "ParticleLayout.h" -#include "ProgramOptions.h" -#include "ResolutionFunction2DSimple.h" -#include "SampleFactory.h" -#include "TRange.h" -#include "Units.h" -#include "Utils.h" - -#include "TCanvas.h" -#include "TH2D.h" -#include <boost/assign/list_of.hpp> - - -/* ************************************************************************* */ -// TestMesoCrystal2 member definitions -/* ************************************************************************* */ -TestMesoCrystal2::TestMesoCrystal2() - : m_real_data(0) - , m_sample_builder(new SampleBuilder) - , m_simulation(0) - , m_fitSuite(0) -{ -} - - -TestMesoCrystal2::~TestMesoCrystal2() -{ - delete m_real_data; - delete m_simulation; - delete m_fitSuite; -} - - -void TestMesoCrystal2::execute() -{ - - //run_fit(); - draw_results(); -} - - - -// ---------------------------------------------------------------------------- -// draw fit results -// ---------------------------------------------------------------------------- -void TestMesoCrystal2::draw_results() -{ - initializeRealData(); - initializeSimulation(m_real_data); - - ParameterPool *pool = m_sample_builder->createParameterTree(); -// pool->setMatchedParametersValue("*/lattice_length_a", 6.2e+00); // 6.2 -// pool->setMatchedParametersValue("*/lattice_length_c", 6.2e+00); // 6.2 -// pool->setMatchedParametersValue("*/nanoparticle_radius", 5.7e+00); // 5.7 -// pool->setMatchedParametersValue("*/sigma_nanoparticle_radius", 1.0e-01); // 0.1 -// pool->setMatchedParametersValue("*/meso_height", 200); // 0.1 -// pool->setMatchedParametersValue("*/meso_radius", 1000); // 0.1 -// pool->setMatchedParametersValue("*/sigma_meso_height", 20); // 0.1 -// pool->setMatchedParametersValue("*/sigma_meso_radius", 100); // 0.1 -// pool->setMatchedParametersValue("*/sigma_lattice_length_a", 1.0); // 1.5 -// pool->setMatchedParametersValue("*/surface_filling_ratio", 0.2); // 0.25 -// pool->setMatchedParametersValue("*/roughness", 1.0); // 1.0 -// m_simulation->setBeamIntensity(8e+12); -// m_simulation->runSimulation(); -// m_simulation->normalize(); - -// IsGISAXSTools::drawOutputDataComparisonResults(*m_simulation->getOutputData(), *m_real_data, "initial", "initial params", 100, 1e6, 100); - - m_sample_builder->setParameterValue("lattice_length_c", 6.5677e+00); // 6.2 - m_sample_builder->setParameterValue("lattice_length_a", 6.2091e+00); // 6.2 - m_sample_builder->setParameterValue("nanoparticle_radius", 4.6976e+00); // 5.7 - m_sample_builder->setParameterValue("sigma_nanoparticle_radius", 3.6720e-01); // 0.1 - m_sample_builder->setParameterValue("meso_height", 1.1221e+02); // 0.1 - m_sample_builder->setParameterValue("meso_radius", 9.4567e+02); // 0.1 - m_sample_builder->setParameterValue("sigma_meso_height", 1.3310e+00); // 0.1 - m_sample_builder->setParameterValue("sigma_meso_radius", 1.3863e+00); // 0.1 - m_sample_builder->setParameterValue("sigma_lattice_length_a", 1.1601e+00); // 1.5 - m_sample_builder->setParameterValue("surface_filling_ratio", 1.7286e-01); // 0.25 - m_sample_builder->setParameterValue("roughness", 2.8746e+01); // 1.0 - m_simulation->setBeamIntensity(5.0090e+12); - std::cout << *pool << std::endl; - m_simulation->runSimulation(); - m_simulation->normalize(); - -// IsGISAXSTools::drawOutputDataComparisonResults( -// *m_simulation->getOutputData(), *m_real_data, -// "found", "found params", 100, 1e6, 100); - -// TCanvas *c1 = new TCanvas("meso_real_data","meso_real_data",1024, 768); -// c1->cd(); -// gPad->SetLogz(); -// gPad->SetRightMargin(0.12); -// gPad->SetLeftMargin(0.125); -// TH2D *hist_real = IsGISAXSTools::getOutputDataTH2D( -// *m_real_data, "real_data"); -// hist_real->SetMinimum(100); -// hist_real->SetMaximum(1e6); -// hist_real->GetYaxis()->SetTitleOffset(1.35); -// hist_real->DrawCopy("CONT4 Z"); - - TCanvas *c2 = new TCanvas("meso_simul_data","meso_simul_data",1024, 768); - c2->cd(); - gPad->SetLogz(); - gPad->SetRightMargin(0.12); - gPad->SetLeftMargin(0.125); - TH2D *hist_simu = IsGISAXSTools::getOutputDataTH2D( - *m_simulation->getOutputData(), "simul_data"); -// hist_simu->SetMinimum(100); -// hist_simu->SetMaximum(1e6); - hist_simu->GetYaxis()->SetTitleOffset(1.35); - hist_simu->DrawCopy("CONT4 Z"); - -// OutputDataIOFactory::writeIntensityData( -// *m_simulation->getOutputData(), "meso_simul.txt"); -} - - - - -/* ************************************************************************* */ -// -/* ************************************************************************* */ -void TestMesoCrystal2::run_fit() -{ - initializeRealData(); - - TCanvas *c1 = DrawHelper::createAndRegisterCanvas("c1_test_meso_crystal", "mesocrystal"); - c1->cd(); gPad->SetLogz(); - gPad->SetRightMargin(0.115); - gPad->SetLeftMargin(0.115); - IsGISAXSTools::setMinimum(100.); - IsGISAXSTools::setMaximum(1e7); - IsGISAXSTools::drawOutputDataInPad(*m_real_data, "CONT4 Z", "experiment"); - c1->Update(); - - // initializing simulation using real data - initializeSimulation(m_real_data); - - // setting fitSuite - m_fitSuite = new FitSuite(); - m_fitSuite->getFitObjects()->setSimulationNormalize(true); - - int fitconfig = (*mp_options)["fitconfig"].as<int>(); - fitsuite_setup(fitconfig); - - m_fitSuite->attachObserver( FitSuiteObserverFactory::createPrintObserver() ); - m_fitSuite->attachObserver( FitSuiteObserverFactory::createDrawObserver() ); - m_fitSuite->attachObserver( FitSuiteObserverFactory::createTreeObserver() ); - - m_fitSuite->runFit(); - - for(FitSuiteParameters::iterator it = m_fitSuite->getFitParameters()->begin(); it!=m_fitSuite->getFitParameters()->end(); ++it) { - std::cout << (*it) << std::endl; - } -} - - -// ---------------------------------------------------------------------------- -// initialize real data -// ---------------------------------------------------------------------------- -void TestMesoCrystal2::initializeRealData() -{ - delete m_real_data; - //std::string file_name = Utils::FileSystem::GetHomePath()+"Examples/MesoCrystals/ex02_fitspheres/004_230_P144_im_full_qyqz.txt.gz"; - //std::string file_name = Utils::FileSystem::GetHomePath()+"Examples/MesoCrystals/ex02_fitspheres/004_230_P144_im_full_phitheta.txt.gz"; - //std::string file_name = "dev-tools/tmp-examples/MesoCrystals/ex02_fitspheres/004_230_P144_im_full_phitheta.txt.gz"; - //std::string file_name = "../support/input/001_ElisabethJosten/2013.01.03/004_230_P144_im_full_phitheta.txt.gz"; - std::string file_name = Utils::FileSystem::GetReferenceDataDir() + "mesocrystal1_reference_v2_nphi180.txt.gz"; - - m_real_data = IntensityDataIOFactory::readIntensityData(file_name); - //Mask *mask1 = OutputDataFunctions::CreateRectangularMask(*m_real_data, 0.025, 0.003, 0.051, 0.0375); - Mask *mask1 = OutputDataFunctions::CreateRectangularMask(*m_real_data, 0.0, 0.015, 0.09, 0.020); - m_real_data->setMask(*mask1); - - - // OutputData<double > *real_data_half = doubleBinSize(*real_data); - // OutputData<double > *real_data_quarter = doubleBinSize(*real_data_half); - // OutputData<double > *real_data_eighth = doubleBinSize(*real_data_quarter); -} - - -// ---------------------------------------------------------------------------- -// run appropriate FitSuite configuration -// ---------------------------------------------------------------------------- -void TestMesoCrystal2::fitsuite_setup(int nconfig) -{ - switch(nconfig) { - case 1: - fitsuite_config1(); - break; - case 2: - fitsuite_config2(); - break; - case 3: - fitsuite_config3(); - break; - case 4: - fitsuite_config4(); - break; - default: - throw LogicErrorException("TestMesoCrystal2::fitsuite_setup() -> Error! Can't setup FitSuite"); - break; - } -} - - - -// ---------------------------------------------------------------------------- -// FitSuite configuration #3 -// * Mask on fit data -// * Several fit iterations with different set of fixed released parameters -// * ChiSquaredModule with normalizer -// ---------------------------------------------------------------------------- -void TestMesoCrystal2::fitsuite_config4() -{ - m_fitSuite->setMinimizer( MinimizerFactory::createMinimizer("Minuit2", "Combined") ); -// m_fitSuite->setMinimizer( MinimizerFactory::createMinimizer("Minuit2", "Fumili") ); - - m_fitSuite->getAttributes().setStepFactor(0.01); - m_fitSuite->addFitParameter("*/lattice_length_a", 6.2091e+00*Units::nanometer, AttLimits::limited(4.0*Units::nanometer, 8.0*Units::nanometer) ); - m_fitSuite->addFitParameter("*/lattice_length_c", 6.5677e+00*Units::nanometer, AttLimits::limited(4.0*Units::nanometer, 8.0*Units::nanometer) ); - m_fitSuite->addFitParameter("*/nanoparticle_radius", 4.6976e+00*Units::nanometer, AttLimits::limited(4.0*Units::nanometer, 8.0*Units::nanometer) ); - m_fitSuite->addFitParameter("*/sigma_nanoparticle_radius", 3.6720e-01*Units::nanometer, AttLimits::limited(0.01*Units::nanometer, 2.0*Units::nanometer) ); - m_fitSuite->addFitParameter("*/meso_height", 1.1221e+02*Units::nanometer, AttLimits::limited(10.0*Units::nanometer, 2000.0*Units::nanometer) ); - m_fitSuite->addFitParameter("*/meso_radius", 9.4567e+02*Units::nanometer, AttLimits::limited(10.0*Units::nanometer, 5000.0*Units::nanometer) ); - m_fitSuite->addFitParameter("*/sigma_meso_height", 1.3310e+00*Units::nanometer, AttLimits::limited(1.0*Units::nanometer, 200.0*Units::nanometer) ); - m_fitSuite->addFitParameter("*/sigma_meso_radius", 1.3863e+00*Units::nanometer, AttLimits::limited(1.0*Units::nanometer, 500.0*Units::nanometer) ); - m_fitSuite->addFitParameter("*/sigma_lattice_length_a", 1.1601e+00*Units::nanometer, AttLimits::limited(0.01*Units::nanometer, 4.0*Units::nanometer) ); - m_fitSuite->addFitParameter("*/surface_filling_ratio", 1.7286e-01, AttLimits::limited(0.05, 0.5) ); - m_fitSuite->addFitParameter("*/roughness", 2.8746e+01*Units::nanometer, AttLimits::limited(0.01*Units::nanometer, 50.0*Units::nanometer) ); - m_fitSuite->addFitParameter("*Beam/intensity", 5.0090e+12, AttLimits::limited(8e11, 8e13) ); - - fixplan_t fixplan; - fixplan.push_back(boost::assign::list_of("*Beam/intensity")("*/lattice_length_a")("*/lattice_length_c")("*/nanoparticle_radius")); - fixplan.push_back(boost::assign::list_of("*Beam/intensity")("*/meso_height")("*/meso_radius")); - fixplan.push_back(boost::assign::list_of("*Beam/intensity")("*/surface_filling_ratio")("*/roughness")); - fixplan.push_back(boost::assign::list_of("*Beam/intensity")("*/sigma_lattice_length_a")("*/sigma_nanoparticle_radius")("*/sigma_meso_height")("*/sigma_meso_radius")); - - // here we are fixing specific parameters before fit - for( size_t i_plan=0; i_plan<fixplan.size(); ++i_plan) { - std::ostringstream ostr; - ostr << "strategy" <<i_plan; - FitStrategyAdjustParameters *strategy = new FitStrategyAdjustParameters(ostr.str()); - strategy->fix_all(); - for(size_t i_par=0; i_par<fixplan[i_plan].size(); ++i_par) { - strategy->release(fixplan[i_plan][i_par]); - } - m_fitSuite->addFitStrategy(strategy); - } - FitStrategyAdjustParameters *strategy_all = new FitStrategyAdjustParameters("strategy_all"); - strategy_all->release_all(); - m_fitSuite->addFitStrategy(strategy_all); - - // fitpreserve=1 - preserve original values - // fitpreserve=0 - return always to previous fit values - for(FitSuiteStrategies::iterator it = m_fitSuite->getFitStrategies()->begin(); it!= m_fitSuite->getFitStrategies()->end(); ++it) { - FitStrategyAdjustParameters *strategy = dynamic_cast<FitStrategyAdjustParameters *>( (*it) ); - assert(strategy); - strategy->setPreserveOriginalValues( (*mp_options)["fitpreserve"].as<int>() ); - } - -// Mask *mask1 = OutputDataFunctions::CreateRectangularMask(*m_real_data, 0.041, 0.003, 0.051, 0.03); - Mask *mask1 = OutputDataFunctions::CreateRectangularMask(*m_real_data, 0.025, 0.003, 0.051, 0.0375); - m_real_data->setMask(*mask1); -// IntensityDataHelper::setRectangularMask(*m_real_data, 0.025, 0.003, 0.051, 0.0375); - - ChiSquaredModule chiModule; -// chiModule.setChiSquaredFunction( SquaredFunctionDefault() ); - //chiModule.setChiSquaredFunction( SquaredFunctionWhichOnlyWorks() ); // it works only with resolution function, without it fit doesn't converge - chiModule.setChiSquaredFunction( new SquaredFunctionMeanSquaredError() ); - //chiModule.setOutputDataNormalizer( OutputDataSimpleNormalizer(1.0,0) ); - - m_fitSuite->addSimulationAndRealData(*m_simulation, *m_real_data, chiModule); -// m_fitSuite->addSimulationAndRealData(*m_simulation, *m_real_data); - -} - - -// ---------------------------------------------------------------------------- -// FitSuite configuration #3 -// * Mask on fit data -// * Several fit iterations with different set of fixed released parameters -// * ChiSquaredModule with normalizer -// ---------------------------------------------------------------------------- -void TestMesoCrystal2::fitsuite_config3() -{ - m_fitSuite->setMinimizer( MinimizerFactory::createMinimizer("Minuit2", "Combined") ); -// m_fitSuite->setMinimizer( MinimizerFactory::createMinimizer("Minuit2", "Fumili") ); - - m_fitSuite->getAttributes().setStepFactor(0.01); - m_fitSuite->addFitParameter("*/lattice_length_a", 6.2*Units::nanometer, AttLimits::limited(4.0*Units::nanometer, 8.0*Units::nanometer) ); - m_fitSuite->addFitParameter("*/lattice_length_c", 6.2*Units::nanometer, AttLimits::limited(4.0*Units::nanometer, 8.0*Units::nanometer) ); - m_fitSuite->addFitParameter("*/nanoparticle_radius", 5.7*Units::nanometer, AttLimits::limited(4.0*Units::nanometer, 8.0*Units::nanometer) ); - m_fitSuite->addFitParameter("*/sigma_nanoparticle_radius", 0.1*Units::nanometer, AttLimits::limited(0.01*Units::nanometer, 2.0*Units::nanometer) ); - m_fitSuite->addFitParameter("*/meso_height", 200.0*Units::nanometer, AttLimits::limited(10.0*Units::nanometer, 2000.0*Units::nanometer) ); - m_fitSuite->addFitParameter("*/meso_radius", 1000.0*Units::nanometer, AttLimits::limited(10.0*Units::nanometer, 5000.0*Units::nanometer) ); - m_fitSuite->addFitParameter("*/sigma_meso_height", 20.0*Units::nanometer, AttLimits::limited(1.0*Units::nanometer, 200.0*Units::nanometer) ); - m_fitSuite->addFitParameter("*/sigma_meso_radius", 100.0*Units::nanometer, AttLimits::limited(1.0*Units::nanometer, 500.0*Units::nanometer) ); - m_fitSuite->addFitParameter("*/sigma_lattice_length_a", 1.0*Units::nanometer, AttLimits::limited(0.01*Units::nanometer, 4.0*Units::nanometer) ); - m_fitSuite->addFitParameter("*/surface_filling_ratio", 0.2, AttLimits::limited(0.05, 0.5) ); - m_fitSuite->addFitParameter("*/roughness", 1.0*Units::nanometer, AttLimits::limited(0.01*Units::nanometer, 50.0*Units::nanometer) ); - m_fitSuite->addFitParameter("*Beam/intensity", 8e12, AttLimits::limited(8e11, 8e13) ); - - fixplan_t fixplan; - fixplan.push_back(boost::assign::list_of("*Beam/intensity")("*/lattice_length_a")("*/lattice_length_c")("*/nanoparticle_radius")); - fixplan.push_back(boost::assign::list_of("*Beam/intensity")("*/meso_height")("*/meso_radius")); - fixplan.push_back(boost::assign::list_of("*Beam/intensity")("*/surface_filling_ratio")("*/roughness")); - fixplan.push_back(boost::assign::list_of("*Beam/intensity")("*/sigma_lattice_length_a")("*/sigma_nanoparticle_radius")("*/sigma_meso_height")("*/sigma_meso_radius")); - - // here we are fixing specific parameters before fit - for( size_t i_plan=0; i_plan<fixplan.size(); ++i_plan) { - std::ostringstream ostr; - ostr << "strategy" <<i_plan; - FitStrategyAdjustParameters *strategy = new FitStrategyAdjustParameters(ostr.str()); - strategy->fix_all(); - for(size_t i_par=0; i_par<fixplan[i_plan].size(); ++i_par) { - strategy->release(fixplan[i_plan][i_par]); - } - m_fitSuite->addFitStrategy(strategy); - } - FitStrategyAdjustParameters *strategy_all = new FitStrategyAdjustParameters("strategy_all"); - strategy_all->release_all(); - m_fitSuite->addFitStrategy(strategy_all); - - // fitpreserve=1 - preserve original values - // fitpreserve=0 - return always to previous fit values - for(FitSuiteStrategies::iterator it = m_fitSuite->getFitStrategies()->begin(); it!= m_fitSuite->getFitStrategies()->end(); ++it) { - FitStrategyAdjustParameters *strategy = dynamic_cast<FitStrategyAdjustParameters *>( (*it) ); - assert(strategy); - strategy->setPreserveOriginalValues( (*mp_options)["fitpreserve"].as<int>() ); - } - -// Mask *mask1 = OutputDataFunctions::CreateRectangularMask(*m_real_data, 0.041, 0.003, 0.051, 0.03); - Mask *mask1 = OutputDataFunctions::CreateRectangularMask(*m_real_data, 0.025, 0.003, 0.051, 0.0375); - m_real_data->setMask(*mask1); - - ChiSquaredModule chiModule; -// chiModule.setChiSquaredFunction( SquaredFunctionDefault() ); - //chiModule.setChiSquaredFunction( SquaredFunctionWhichOnlyWorks() ); // it works only with resolution function, without it fit doesn't converge - chiModule.setChiSquaredFunction( new SquaredFunctionSystematicError() ); - //chiModule.setOutputDataNormalizer( OutputDataSimpleNormalizer(1.0,0) ); - - m_fitSuite->addSimulationAndRealData(*m_simulation, *m_real_data, chiModule); -// m_fitSuite->addSimulationAndRealData(*m_simulation, *m_real_data); - -} - - -// ---------------------------------------------------------------------------- -// FitSuite configuration #2 -// * Mask on fit data -// * Several fit iterations with different set of fixed released parameters -// * ChiSquaredModule with normalizer -// ---------------------------------------------------------------------------- -void TestMesoCrystal2::fitsuite_config2() -{ - m_fitSuite->setMinimizer( MinimizerFactory::createMinimizer("Minuit2", "Combined") ); - - m_fitSuite->getAttributes().setStepFactor(0.01); - m_fitSuite->addFitParameter("*/lattice_length_a", 6.2*Units::nanometer, AttLimits::limited(4.0*Units::nanometer, 8.0*Units::nanometer) ); - m_fitSuite->addFitParameter("*/nanoparticle_radius", 5.7*Units::nanometer, AttLimits::limited(2.0*Units::nanometer, 8.0*Units::nanometer) ); - m_fitSuite->addFitParameter("*/sigma_nanoparticle_radius", 0.1*Units::nanometer, AttLimits::limited(0.01*Units::nanometer, 2.0*Units::nanometer) ); - m_fitSuite->addFitParameter("*/meso_height", 500.0*Units::nanometer, AttLimits::limited(100.0*Units::nanometer, 2000.0*Units::nanometer) ); - m_fitSuite->addFitParameter("*/meso_radius", 1000.0*Units::nanometer, AttLimits::limited(100.0*Units::nanometer, 5000.0*Units::nanometer) ); - m_fitSuite->addFitParameter("*/sigma_meso_height", 5.0*Units::nanometer, AttLimits::limited(10.0*Units::nanometer, 200.0*Units::nanometer) ); - m_fitSuite->addFitParameter("*/sigma_meso_radius", 50.0*Units::nanometer, AttLimits::limited(10.0*Units::nanometer, 500.0*Units::nanometer) ); - m_fitSuite->addFitParameter("*/sigma_lattice_length_a", 1.5*Units::nanometer, AttLimits::limited(0.01*Units::nanometer, 4.0*Units::nanometer) ); - m_fitSuite->addFitParameter("*/surface_filling_ratio", 0.25, AttLimits::limited(0.1, 0.4) ); - m_fitSuite->addFitParameter("*/roughness", 1.0*Units::nanometer, AttLimits::limited(0.01*Units::nanometer, 50.0*Units::nanometer) ); - m_fitSuite->addFitParameter("*Beam/intensity", 8e12, AttLimits::limited(8e11, 8e13) ); - - fixplan_t fixplan; - fixplan.resize(7); - fixplan[0] = boost::assign::list_of("*/lattice_length_a")("*/nanoparticle_radius"); - fixplan[1] = boost::assign::list_of("*/meso_height")("*/meso_radius"); - fixplan[2] = boost::assign::list_of("*Beam/intensity"); - fixplan[3] = boost::assign::list_of("*/surface_filling_ratio"); - fixplan[4] = boost::assign::list_of("*/roughness"); - fixplan[5] = boost::assign::list_of("*/sigma_lattice_length_a")("*/sigma_nanoparticle_radius"); - fixplan[6] = boost::assign::list_of("*/sigma_meso_height")("*/sigma_meso_radius"); - - // here we are fixing specific parameters before fit - for( size_t i_plan=0; i_plan<fixplan.size(); ++i_plan) { - std::ostringstream ostr; - ostr << "strategy" <<i_plan; - FitStrategyAdjustParameters *strategy = new FitStrategyAdjustParameters(ostr.str()); - strategy->fix_all(); - strategy->setPreserveOriginalValues(true); // initial values of parameters will be restored after each fit - for(size_t i_par=0; i_par<fixplan[i_plan].size(); ++i_par) { - strategy->release(fixplan[i_plan][i_par]); - } - m_fitSuite->addFitStrategy(strategy); - } - FitStrategyAdjustParameters *strategy_all = new FitStrategyAdjustParameters("strategy_all"); - strategy_all->release_all(); - m_fitSuite->addFitStrategy(strategy_all); - - // fitpreserve=1 - preserve original values - // fitpreserve=0 - return always to previous fit values - for(FitSuiteStrategies::iterator it = m_fitSuite->getFitStrategies()->begin(); it!= m_fitSuite->getFitStrategies()->end(); ++it) { - FitStrategyAdjustParameters *strategy = dynamic_cast<FitStrategyAdjustParameters *>( (*it) ); - assert(strategy); - strategy->setPreserveOriginalValues( (*mp_options)["fitpreserve"].as<int>() ); - } - - Mask *mask1 = OutputDataFunctions::CreateRectangularMask(*m_real_data, 0.041, 0.003, 0.051, 0.03); - m_real_data->setMask(*mask1); - - -} - - -// ---------------------------------------------------------------------------- -// FitSuite configuration #1 -// 7 fit iterations with different sets of fixed/release parameters -// ---------------------------------------------------------------------------- -void TestMesoCrystal2::fitsuite_config1() -{ - - m_fitSuite->setMinimizer( MinimizerFactory::createMinimizer("Minuit2", "Combined") ); - - m_fitSuite->addFitParameter("*/lattice_length_a", 6.2*Units::nanometer, AttLimits::limited(4.0*Units::nanometer, 8.0*Units::nanometer) ); - m_fitSuite->addFitParameter("*/nanoparticle_radius", 5.7*Units::nanometer, 1.0*Units::nanometer, AttLimits::limited(2.0*Units::nanometer, 8.0*Units::nanometer) ); - m_fitSuite->addFitParameter("*/sigma_nanoparticle_radius", 0.1*Units::nanometer, 0.05*Units::nanometer, AttLimits::limited(0.01*Units::nanometer, 2.0*Units::nanometer) ); - m_fitSuite->addFitParameter("*/meso_height", 500.0*Units::nanometer, 100.0*Units::nanometer, AttLimits::limited(100.0*Units::nanometer, 2000.0*Units::nanometer) ); - m_fitSuite->addFitParameter("*/meso_radius", 1000.0*Units::nanometer, 100.0*Units::nanometer, AttLimits::limited(100.0*Units::nanometer, 5000.0*Units::nanometer) ); - m_fitSuite->addFitParameter("*/sigma_meso_height", 5.0*Units::nanometer, 1.0*Units::nanometer, AttLimits::limited(10.0*Units::nanometer, 200.0*Units::nanometer) ); - m_fitSuite->addFitParameter("*/sigma_meso_radius", 50.0*Units::nanometer, 10.0*Units::nanometer, AttLimits::limited(10.0*Units::nanometer, 500.0*Units::nanometer) ); - m_fitSuite->addFitParameter("*/sigma_lattice_length_a", 1.5*Units::nanometer, 0.5*Units::nanometer, AttLimits::limited(0.01*Units::nanometer, 4.0*Units::nanometer) ); - m_fitSuite->addFitParameter("*/surface_filling_ratio", 0.25, 0.1, AttLimits::limited(0.1, 0.4) ); - m_fitSuite->addFitParameter("*/roughness", 1.0*Units::nanometer, 0.1*Units::nanometer, AttLimits::limited(0.01*Units::nanometer, 50.0*Units::nanometer) ); - m_fitSuite->addFitParameter("*Beam/intensity", 8e12, 100, AttLimits::limited(8e11, 8e13) ); - - fixplan_t fixplan; - fixplan.resize(7); - fixplan[0] = boost::assign::list_of("*/lattice_length_a")("*/nanoparticle_radius"); - fixplan[1] = boost::assign::list_of("*/meso_height")("*/meso_radius"); - fixplan[2] = boost::assign::list_of("*Beam/intensity"); - fixplan[3] = boost::assign::list_of("*/surface_filling_ratio"); - fixplan[4] = boost::assign::list_of("*/roughness"); - fixplan[5] = boost::assign::list_of("*/sigma_lattice_length_a")("*/sigma_nanoparticle_radius"); - fixplan[6] = boost::assign::list_of("*/sigma_meso_height")("*/sigma_meso_radius"); - - // here we are fixing specific parameters before fit - for( size_t i_plan=0; i_plan<fixplan.size(); ++i_plan) { - std::ostringstream ostr; - ostr << "strategy" <<i_plan; - FitStrategyAdjustParameters *strategy = new FitStrategyAdjustParameters(ostr.str()); - strategy->fix_all(); - strategy->setPreserveOriginalValues(true); // initial values of parameters will be restored after each fit - for(size_t i_par=0; i_par<fixplan[i_plan].size(); ++i_par) { - strategy->release(fixplan[i_plan][i_par]); - } - m_fitSuite->addFitStrategy(strategy); - } - FitStrategyAdjustParameters *strategy_all = new FitStrategyAdjustParameters("strategy_all"); - strategy_all->release_all(); - m_fitSuite->addFitStrategy(strategy_all); - - // fitpreserve=1 - preserve original values - // fitpreserve=0 - return always to previous fit values - for(FitSuiteStrategies::iterator it = m_fitSuite->getFitStrategies()->begin(); it!= m_fitSuite->getFitStrategies()->end(); ++it) { - FitStrategyAdjustParameters *strategy = dynamic_cast<FitStrategyAdjustParameters *>( (*it) ); - assert(strategy); - strategy->setPreserveOriginalValues( (*mp_options)["fitpreserve"].as<int>() ); - } - - m_fitSuite->addSimulationAndRealData(*m_simulation, *m_real_data); - -} - - -/* ************************************************************************* */ -// -/* ************************************************************************* */ -void TestMesoCrystal2::initializeSimulation(const OutputData<double> *output_data) -{ - delete m_simulation; - - m_simulation = new Simulation(mp_options); - m_simulation->setSampleBuilder( m_sample_builder ); - m_simulation->setBeamParameters(1.77*Units::angstrom, 0.4*Units::degree, 0.0*Units::degree); - m_simulation->setBeamIntensity(8e12); - m_simulation->setDetectorResolutionFunction(new ResolutionFunction2DSimple(0.0002, 0.0002)); - - if( !output_data ) { - // initialize default detector - m_simulation->setDetectorParameters(200, 0.3*Units::degree, 0.073, 200, -0.4*Units::degree, 0.066); - } else { - // if there is output_data as input parameter, build detector using output_data axises - //const IAxis *axis0 = output_data->getAxis(0); - //const IAxis *axis1 = output_data->getAxis(1); - //std::cout << "Axis!!! " << axis0->getSize() << " " << axis0->getMin() << " " << axis0->getMax() << " " << axis1->getSize() << " " << axis1->getMin() << " " << axis1->getMax() << std::endl; - //m_simulation->setDetectorParameters(axis0->getSize(), axis0->getMin(), axis0->getMax(), axis1->getSize(), axis1->getMin(), axis1->getMax()); - m_simulation->setDetectorParameters(*m_real_data); - } - m_simulation->printParameters(); -} - - - -/* ************************************************************************* */ -// MesoCrystalBuilder member definitions -/* ************************************************************************* */ -TestMesoCrystal2::SampleBuilder::SampleBuilder() -: m_meso_radius(1000.0*Units::nanometer) -, m_surface_filling_ratio(0.25) -, m_meso_height(500.0*Units::nanometer) -, m_sigma_meso_height(5.0*Units::nanometer) -, m_sigma_meso_radius(50.0*Units::nanometer) -, m_lattice_length_a(6.2*Units::nanometer) -, m_lattice_length_c(6.2*Units::nanometer) -, m_nanoparticle_radius(5.7*Units::nanometer) -, m_sigma_nanoparticle_radius(0.1*Units::nanometer) -, m_sigma_lattice_length_a(1.5*Units::nanometer) -, m_roughness(1.0*Units::nanometer) -{ - init_parameters(); -} - - -ISample* TestMesoCrystal2::SampleBuilder::buildSample() const -{ - // create mesocrystal - double surface_density = m_surface_filling_ratio/M_PI/m_meso_radius/m_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(m_surface_filling_ratio*avg_n_squared_meso + 1.0 - m_surface_filling_ratio); - complex_t n_particle_adapted = std::sqrt(n_avg*n_avg + n_particle*n_particle - 1.0); - FormFactorCylinder ff_cyl(m_meso_radius, m_meso_height); - FormFactorDecoratorDebyeWaller ff_meso(ff_cyl.clone(), m_sigma_meso_height*m_sigma_meso_height/2.0, - m_sigma_meso_radius*m_sigma_meso_radius/2.0); - - // Create multilayer - MultiLayer *p_multi_layer = new MultiLayer(); - complex_t n_air(1.0, 0.0); - complex_t n_substrate(1.0-7.57e-6, 1.73e-7); - - HomogeneousMaterial air_material("Air", n_air); - HomogeneousMaterial average_layer_material("Averagelayer", n_avg); - HomogeneousMaterial substrate_material("Substrate", n_substrate); - Layer air_layer; - air_layer.setMaterial(air_material); - Layer avg_layer; - avg_layer.setMaterial(average_layer_material); - avg_layer.setThickness(m_meso_height); - Layer substrate_layer; - substrate_layer.setMaterial(substrate_material); - IInterferenceFunction *p_interference_funtion = - new InterferenceFunctionNone(); - ParticleLayout particle_layout; - size_t n_max_phi_rotation_steps = 1; - size_t n_alpha_rotation_steps = 1; - -// double alpha_step = 5.0*Units::degree/n_alpha_rotation_steps; -// double alpha_start = - (n_alpha_rotation_steps/2.0)*alpha_step; - - double phi_step = 2*M_PI/3.0/n_max_phi_rotation_steps; - double phi_start = 0.0; - for (size_t i=0; i<n_max_phi_rotation_steps; ++i) { - for (size_t j=0; j<n_alpha_rotation_steps; ++j) { - Geometry::Transform3D transform = - Geometry::Transform3D::createRotateZ(phi_start + i*phi_step); -// Geometry::Transform3D transform2 = -// Geometry::Transform3D::createRotateY(alpha_start + j*alpha_step); - particle_layout.addParticle( - createMesoCrystal( - m_lattice_length_a, m_lattice_length_c, - n_particle_adapted, &ff_meso), - transform, m_meso_height); - } - } - - particle_layout.setTotalParticleSurfaceDensity(surface_density); - particle_layout.addInterferenceFunction(p_interference_funtion); - - avg_layer.addLayout(particle_layout); - - LayerRoughness roughness(m_roughness, 0.3, 500.0*Units::nanometer); - - p_multi_layer->addLayer(air_layer); - p_multi_layer->addLayer(avg_layer); - p_multi_layer->addLayerWithTopRoughness(substrate_layer, roughness); - -// std::cout << "Average layer index: " << n_avg << std::endl; -// std::cout << "Adapted particle index: " << n_particle_adapted << std::endl; -// std::cout << "Substrate layer index: " << n_substrate << std::endl; - - return p_multi_layer; -} - -void TestMesoCrystal2::SampleBuilder::init_parameters() -{ - clearParameterPool(); - registerParameter("meso_radius", &m_meso_radius); - registerParameter("surface_filling_ratio", &m_surface_filling_ratio); - registerParameter("meso_height", &m_meso_height); - registerParameter("sigma_meso_height", &m_sigma_meso_height); - registerParameter("sigma_meso_radius", &m_sigma_meso_radius); - registerParameter("lattice_length_a", &m_lattice_length_a); - registerParameter("lattice_length_c", &m_lattice_length_c); - registerParameter("nanoparticle_radius", &m_nanoparticle_radius); - registerParameter("sigma_nanoparticle_radius", &m_sigma_nanoparticle_radius); - registerParameter("sigma_lattice_length_a", &m_sigma_lattice_length_a); - registerParameter("roughness", &m_roughness); -} - -//MesoCrystal* TestMesoCrystal2::SampleBuilder::createMesoCrystal(double stacking_radius, complex_t n_particle, -// const IFormFactor* p_meso_form_factor) const -//{ -// const Lattice *p_lat = createLattice(stacking_radius); -// kvector_t bas_a = p_lat->getBasisVectorA(); -// kvector_t bas_b = p_lat->getBasisVectorB(); -// kvector_t bas_c = p_lat->getBasisVectorC(); -// Particle particle(n_particle, new FormFactorSphereGaussianRadius(m_nanoparticle_radius, m_sigma_nanoparticle_radius)); -// kvector_t position_0 = kvector_t(0.0, 0.0, 0.0); -// kvector_t position_1 = 1.0/3.0*(2.0*bas_a + bas_b + bas_c); -// kvector_t position_2 = 1.0/3.0*(bas_a + 2.0*bas_b + 2.0*bas_c); -// std::vector<kvector_t> pos_vector; -// pos_vector.push_back(position_0); -// pos_vector.push_back(position_1); -// pos_vector.push_back(position_2); -// LatticeBasis basis(particle, pos_vector); - -// Crystal npc(basis, *p_lat); -// delete p_lat; -// double dw_factor = m_sigma_lattice_length_a*m_sigma_lattice_length_a/6.0; -// npc.setDWFactor(dw_factor); -// return new MesoCrystal(npc.clone(), p_meso_form_factor->clone()); -//} - -//const Lattice *TestMesoCrystal2::SampleBuilder::createLattice(double stacking_radius) const -//{ -// Lattice *p_result = new Lattice(Lattice::createTrigonalLattice(stacking_radius*2.0, stacking_radius*2.0*2.3)); -// p_result->setSelectionRule(SimpleSelectionRule(-1, 1, 1, 3)); -// return p_result; -//} - -MesoCrystal* TestMesoCrystal2::SampleBuilder::createMesoCrystal(double stacking_radius_a, double stacking_radius_c, complex_t n_particle, - const IFormFactor* p_meso_form_factor) const -{ - const Lattice *p_lat = createLattice(stacking_radius_a, stacking_radius_c); - kvector_t bas_a = p_lat->getBasisVectorA(); - kvector_t bas_b = p_lat->getBasisVectorB(); - kvector_t bas_c = p_lat->getBasisVectorC(); - - HomogeneousMaterial particle_material("Particle", n_particle); - - Particle particle(particle_material, FormFactorSphereGaussianRadius(m_nanoparticle_radius, m_sigma_nanoparticle_radius)); - kvector_t position_0 = kvector_t(0.0, 0.0, 0.0); - kvector_t position_1 = 1.0/3.0*(2.0*bas_a + bas_b + bas_c); - kvector_t position_2 = 1.0/3.0*(bas_a + 2.0*bas_b + 2.0*bas_c); - std::vector<kvector_t> pos_vector; - pos_vector.push_back(position_0); - pos_vector.push_back(position_1); - pos_vector.push_back(position_2); - LatticeBasis basis(particle, pos_vector); - - Crystal npc(basis, *p_lat); - delete p_lat; - double dw_factor = m_sigma_lattice_length_a*m_sigma_lattice_length_a/6.0; - npc.setDWFactor(dw_factor); - return new MesoCrystal(npc.clone(), p_meso_form_factor->clone()); -} - -const Lattice *TestMesoCrystal2::SampleBuilder::createLattice(double stacking_radius_a, double stacking_radius_c) const -{ - Lattice *p_result = new Lattice(Lattice::createTrigonalLattice(stacking_radius_a*2.0, stacking_radius_c*2.0*2.3)); - p_result->setSelectionRule(SimpleSelectionRule(-1, 1, 1, 3)); - return p_result; -} - - - diff --git a/App/src/TestMiscellaneous.cpp b/App/src/TestMiscellaneous.cpp index 2caab6b2587df4d352c0e0cf5eb5cc442cc5d555..ae2b9ebc7d599302822efd70cfed97e922afc42e 100644 --- a/App/src/TestMiscellaneous.cpp +++ b/App/src/TestMiscellaneous.cpp @@ -64,7 +64,6 @@ void TestMiscellaneous::execute() //test_LogSystem(); //test_OutputDataTo2DArray(); //test_KVectorContainer(); - //test_OutputDataIOFactory(); //test_FastSin(); //test_FormFactor1(); //test_FormFactor(); @@ -260,26 +259,6 @@ void TestMiscellaneous::test_KVectorContainer() } } -/* ************************************************************************* */ -// test of reading of OutputData from ASCII file -/* ************************************************************************* */ -void TestMiscellaneous::test_OutputDataIOFactory() -{ - std::string file_name = Utils::FileSystem::GetHomePath() - +"Examples/MesoCrystals/ex02_fitspheres/004_230_P144_im_full_qyqz.txt.gz"; - OutputData<double > *data = - IntensityDataIOFactory::readIntensityData(file_name); - - TCanvas *c1 = new TCanvas("c1","c1",800, 800); - c1->cd(); gPad->SetRightMargin(0.14); - gPad->SetLogz(); - - TH2D *h2 = IsGISAXSTools::getOutputDataTH2D(*data, "xxx"); - h2->SetMinimum(100.); - h2->Draw("CONT4 Z"); -} - - /* ************************************************************************* */ // test of fast sin function approximation /* ************************************************************************* */ diff --git a/App/src/TestPolarizedDWBA.cpp b/App/src/TestPolarizedDWBA.cpp index 736818edec6e9a66759203aa4b7130e8aea828f6..7853da3f5f58cb94e02dfe3ff24f19ba8d3ec96b 100644 --- a/App/src/TestPolarizedDWBA.cpp +++ b/App/src/TestPolarizedDWBA.cpp @@ -37,43 +37,12 @@ void TestPolarizedDWBA::execute() Simulation *simulation = sim_registry.createSimulation("magcyl2"); simulation->setProgramOptions(mp_options); - simulation->runSimulation(); simulation->normalize(); IsGISAXSTools::drawLogOutputDataPol(*simulation->getPolarizedOutputData(), "c1_polDWBA", "Polarized DWBA", "CONT4 Z", "Polarized DWBA"); -// OutputDataIOFactory::writeIntensityData(*simulation->getPolarizedIntensityData(0,0),"magcyl2_reference_00.txt"); -// OutputDataIOFactory::writeIntensityData(*simulation->getPolarizedIntensityData(0,1),"magcyl2_reference_01.txt"); -// OutputDataIOFactory::writeIntensityData(*simulation->getPolarizedIntensityData(1,0),"magcyl2_reference_10.txt"); -// OutputDataIOFactory::writeIntensityData(*simulation->getPolarizedIntensityData(1,1),"magcyl2_reference_11.txt"); - - -// OutputData<double> *reference00 = OutputDataIOFactory::readIntensityData(Utils::FileSystem::GetReferenceDataDir()+ "magcyl2_reference_00.txt.gz"); -// OutputData<double> *reference01 = OutputDataIOFactory::readIntensityData(Utils::FileSystem::GetReferenceDataDir()+ "magcyl2_reference_01.txt.gz"); -// OutputData<double> *reference10 = OutputDataIOFactory::readIntensityData(Utils::FileSystem::GetReferenceDataDir()+ "magcyl2_reference_10.txt.gz"); -// OutputData<double> *reference11 = OutputDataIOFactory::readIntensityData(Utils::FileSystem::GetReferenceDataDir()+ "magcyl2_reference_11.txt.gz"); - -// IsGISAXSTools::drawOutputDataComparisonResults( -// *simulation->getPolarizedIntensityData(0,0), *reference00, "00", "found params"); - -// IsGISAXSTools::drawOutputDataComparisonResults( -// *simulation->getPolarizedIntensityData(0,1), *reference01, "01", "found params"); - -// IsGISAXSTools::drawOutputDataComparisonResults( -// *simulation->getPolarizedIntensityData(1,0), *reference10, "10", "found params"); - -// IsGISAXSTools::drawOutputDataComparisonResults( -// *simulation->getPolarizedIntensityData(1,1), *reference11, "11", "found params"); - - -// delete reference00; -// delete reference01; -// delete reference10; -// delete reference11; - delete simulation; - } diff --git a/Core/CMakeLists.txt b/Core/CMakeLists.txt index 03b40f8c246b6e5a27f3d12c91c37ec6743e167d..baa08ef2687328eadcd90f56f2cc2ac5b8217c46 100644 --- a/Core/CMakeLists.txt +++ b/Core/CMakeLists.txt @@ -22,16 +22,16 @@ file(GLOB source_files "FormFactors/src/*.cpp" "Geometry/src/*.cpp" "Samples/src/*.cpp" - "StandardSamples/*.cpp" + "StandardSamples/*.cpp" "Tools/src/*.cpp" ) -file(GLOB include_files +file(GLOB include_files "Algorithms/inc/*.h" "FormFactors/inc/*.h" "Geometry/inc/*.h" "Samples/inc/*.h" - "StandardSamples/*.h" + "StandardSamples/*.h" "Tools/inc/*.h" ) @@ -111,7 +111,6 @@ endif() # installation # ----------------------------------------------- install (DIRECTORY ${CMAKE_SOURCE_DIR}/Examples/ DESTINATION ${destination_examples} COMPONENT Examples FILES_MATCHING PATTERN "*.py" ) -install (DIRECTORY ${CMAKE_SOURCE_DIR}/Examples/ DESTINATION ${destination_examples} COMPONENT Examples FILES_MATCHING PATTERN "refdata*.txt" ) install (DIRECTORY ${CMAKE_SOURCE_DIR}/Examples/ DESTINATION ${destination_examples} COMPONENT Examples FILES_MATCHING PATTERN "README") install (DIRECTORY ${CMAKE_SOURCE_DIR}/Examples/cpp DESTINATION ${destination_examples} COMPONENT Examples) # the line below copies the contains ${CMAKE_SOURCE_DIR}/bin to the bin folder of the final package @@ -139,7 +138,7 @@ install (FILES ${include_files} DESTINATION ${destination_include} COMPONENT Hea if(WIN32) if(MSVC) set(boost_suffix "-vc110-mt-1_55.dll") - install(FILES + install(FILES ${CMAKE_LIBRARY_PATH}/boost_date_time${boost_suffix} ${CMAKE_LIBRARY_PATH}/boost_chrono${boost_suffix} ${CMAKE_LIBRARY_PATH}/boost_program_options${boost_suffix} diff --git a/Doc/UserManual/AppendixListings.tex b/Doc/UserManual/AppendixListings.tex index 18ff93b257beca4b37e76cf36c21eb81e9c499de..0591a5d38789f0b304ebfef98cdca1b0c17810a0 100755 --- a/Doc/UserManual/AppendixListings.tex +++ b/Doc/UserManual/AppendixListings.tex @@ -157,7 +157,7 @@ def run_fitting(): simulation = get_simulation() simulation.setSample(sample) - real_data = IntensityDataIOFactory.readIntensityData('refdata_fitcylinderprisms.txt') + real_data = IntensityDataIOFactory.readIntensityData('refdata_fitcylinderprisms.int.gz') fit_suite = FitSuite() fit_suite.addSimulationAndRealData(simulation, real_data) diff --git a/Doc/UserManual/FittingExamples.tex b/Doc/UserManual/FittingExamples.tex index 056758102a75fb51130937a2a9f3383e7fa46723..f6990b8a5b5d4eb969db7f19cbaf49883cb20efd 100755 --- a/Doc/UserManual/FittingExamples.tex +++ b/Doc/UserManual/FittingExamples.tex @@ -110,13 +110,13 @@ def run_fitting(): @\label{script2::run_fitting}@ simulation = get_simulation() simulation.setSample(sample) @\label{script2::setup_simulation2}@ - real_data = IntensityDataIOFactory.readIntensityData('refdata_fitcylinderprisms.txt') @\label{script2::real_data}@ + real_data = IntensityDataIOFactory.readIntensityData('refdata_fitcylinderprisms.int.gz') @\label{script2::real_data}@ \end{lstlisting} Lines ~\ref{script2::setup_simulation1}-~\ref{script2::setup_simulation2} generate the sample and simulation description and assign the sample to the simulation. -Our reference data are contained in the file \Code{'refdata\_fitcylinderprisms.txt'}. +Our reference data are contained in the file \Code{'refdata\_fitcylinderprisms.int.gz'}. This reference had been generated by adding noise on the scattered intensity from a numerical sample with a fixed length of 5~nm for the four fitting parameters (\textit{i.e.} the dimensions of the cylinders and prisms). diff --git a/Examples/python/fitting/ex002_FitCylindersAndPrisms/FitCylindersPrisms_detailed.py b/Examples/python/fitting/ex002_FitCylindersAndPrisms/FitCylindersPrisms_detailed.py index 339ae70485510b4500a63a7a1840a052c0c6bb52..c1caa63ef9ff2f87763ab5035c7e51b6d0a208d7 100644 --- a/Examples/python/fitting/ex002_FitCylindersAndPrisms/FitCylindersPrisms_detailed.py +++ b/Examples/python/fitting/ex002_FitCylindersAndPrisms/FitCylindersPrisms_detailed.py @@ -71,7 +71,7 @@ def get_sample(cylinder_height=1.0*nanometer, def create_real_data(): """ Generating "real" data by adding noise to the simulated data. - This function has been used once to generate refdata_fitcylinderprisms.txt + This function has been used once to generate refdata_fitcylinderprisms.int """ # creating sample with set of parameters we will later try to find during the fit sample = get_sample(5.0*nanometer, 5.0*nanometer, 5.0*nanometer, 5.0*nanometer) diff --git a/GUI/externals/qt-manhattan-style/fancymainwindow.cpp b/GUI/externals/qt-manhattan-style/fancymainwindow.cpp index 74908dd1ec8d9731d28223c0b72ae1d7d70023c0..7a69ac2dd7121117c0f8fadac9f1cfea623e8b56 100644 --- a/GUI/externals/qt-manhattan-style/fancymainwindow.cpp +++ b/GUI/externals/qt-manhattan-style/fancymainwindow.cpp @@ -106,7 +106,8 @@ QDockWidget *FancyMainWindow::addDockForWidget(QWidget *widget) // Set an object name to be used in settings, derive from widget name const QString objectName = widget->objectName(); if (objectName.isEmpty()) { - dockWidget->setObjectName(QLatin1String("dockWidget") + QString::number(dockWidgets().size() + 1)); + dockWidget->setObjectName(QLatin1String("dockWidget") + + QString::number(dockWidgets().size() + 1)); } else { dockWidget->setObjectName(objectName + QLatin1String("DockWidget")); } @@ -124,9 +125,12 @@ QDockWidget *FancyMainWindow::addDockForWidget(QWidget *widget) void FancyMainWindow::updateDockWidget(QDockWidget *dockWidget) { const QDockWidget::DockWidgetFeatures features = - (d->m_locked) ? QDockWidget::DockWidgetClosable | QDockWidget::DockWidgetFloatable - : QDockWidget::DockWidgetMovable | QDockWidget::DockWidgetClosable | QDockWidget::DockWidgetFloatable; - if (dockWidget->property("managed_dockwidget").isNull()) { // for the debugger tool bar + (d->m_locked) ? + QDockWidget::DockWidgetClosable | QDockWidget::DockWidgetFloatable : + QDockWidget::DockWidgetMovable | QDockWidget::DockWidgetClosable + | QDockWidget::DockWidgetFloatable; + // for the debugger tool bar + if (dockWidget->property("managed_dockwidget").isNull()) { QWidget *titleBarWidget = dockWidget->titleBarWidget(); if (d->m_locked && !titleBarWidget && !dockWidget->isFloating()) titleBarWidget = new QWidget(dockWidget); @@ -164,7 +168,8 @@ void FancyMainWindow::setTrackingEnabled(bool enabled) if (enabled) { d->m_handleDockVisibilityChanges = true; foreach (QDockWidget *dockWidget, dockWidgets()) - dockWidget->setProperty(dockWidgetActiveState, dockWidget->isVisible()); + dockWidget->setProperty(dockWidgetActiveState, + dockWidget->isVisible()); } else { d->m_handleDockVisibilityChanges = false; } @@ -243,7 +248,8 @@ QHash<QString, QVariant> FancyMainWindow::saveSettings() const void FancyMainWindow::restoreSettings(const QHash<QString, QVariant> &settings) { - QByteArray ba = settings.value(QLatin1String(stateKeyC), QByteArray()).toByteArray(); + QByteArray ba = settings.value(QLatin1String(stateKeyC), + QByteArray()).toByteArray(); if (!ba.isEmpty()) restoreState(ba, settingsVersion); d->m_locked = settings.value(QLatin1String("Locked"), true).toBool();