From d609655688b2b58f912706d822e6cf28612d208e Mon Sep 17 00:00:00 2001 From: pospelov <pospelov@fz-juelich.de> Date: Tue, 30 Oct 2012 17:53:35 +0100 Subject: [PATCH] New fit strategy which adjust the data before minimization --- App/inc/ROOTMinimizer.h | 3 + App/inc/TestMesoCrystal2.h | 2 +- App/src/FitSuiteHelper.cpp | 4 +- App/src/ROOTMinimizer.cpp | 3 +- App/src/TestFittingModule1.cpp | 2 +- App/src/TestFittingModule2.cpp | 49 +++++++++----- Core/Algorithms/inc/ChiSquaredModule.h | 2 + Core/Algorithms/src/ChiSquaredModule.cpp | 7 ++ Core/Algorithms/src/GISASExperiment.cpp | 1 + Core/Algorithms/src/IFittingDataSelector.cpp | 2 +- Core/Tools/inc/FitSuite.h | 1 + Core/Tools/inc/FitSuiteStrategy.h | 30 ++++++++- Core/Tools/inc/IMinimizer.h | 3 + Core/Tools/src/FitSuite.cpp | 2 +- Core/Tools/src/FitSuiteStrategy.cpp | 65 ++++++++++++++++++- Macros/GitUtils/gisasfw_loc.png | Bin 15790 -> 15866 bytes Macros/GitUtils/git_loc_history.py | 2 +- 17 files changed, 151 insertions(+), 27 deletions(-) diff --git a/App/inc/ROOTMinimizer.h b/App/inc/ROOTMinimizer.h index 3b0a2dec262..5878c288e7f 100644 --- a/App/inc/ROOTMinimizer.h +++ b/App/inc/ROOTMinimizer.h @@ -62,6 +62,9 @@ public: //! printing results virtual void printResults() const; + //! clear resources (parameters) for consecutives minimizations + virtual void clear() { m_root_minimizer->Clear(); } + //! printing minimizer description virtual void printOptions() const; diff --git a/App/inc/TestMesoCrystal2.h b/App/inc/TestMesoCrystal2.h index 7da716e0814..72987ba05d7 100644 --- a/App/inc/TestMesoCrystal2.h +++ b/App/inc/TestMesoCrystal2.h @@ -28,7 +28,7 @@ class Lattice; //- ------------------------------------------------------------------- //! @class TestMesoCrystal2 -//! @brief Simulation of 3D ordered particle assemblies +//! @brief Simulation and fit of 3D ordered particle assemblies //- ------------------------------------------------------------------- class TestMesoCrystal2 : public IFunctionalTest { diff --git a/App/src/FitSuiteHelper.cpp b/App/src/FitSuiteHelper.cpp index 8098c62bf85..19970168f6e 100644 --- a/App/src/FitSuiteHelper.cpp +++ b/App/src/FitSuiteHelper.cpp @@ -76,13 +76,13 @@ void FitSuiteObserverDraw::update(IObservable *subject) gPad->SetLogz(); gPad->SetLeftMargin(0.12); gPad->SetRightMargin(0.12); - IsGISAXSTools::drawOutputDataInPad(*fitSuite->getChiSquaredModule()->getRealData(), "CONT4 Z", "Real data"); + IsGISAXSTools::drawOutputDataInPad(*fitSuite->getChiSquaredModule()->getRealData(), "colz", "Real data"); // drawing simulated data c1->cd(2); gPad->SetLogz(); gPad->SetLeftMargin(0.12); gPad->SetRightMargin(0.12); - IsGISAXSTools::drawOutputDataInPad(*fitSuite->getChiSquaredModule()->getSimulationData(), "CONT4 Z", "current simulated data"); + IsGISAXSTools::drawOutputDataInPad(*fitSuite->getChiSquaredModule()->getSimulationData(), "colz", "current simulated data"); // simple difference c1->cd(3); gPad->SetLogz(); diff --git a/App/src/ROOTMinimizer.cpp b/App/src/ROOTMinimizer.cpp index 8d3f398148c..34e4136005e 100644 --- a/App/src/ROOTMinimizer.cpp +++ b/App/src/ROOTMinimizer.cpp @@ -7,6 +7,7 @@ ROOTMinimizer::ROOTMinimizer(const std::string &minimizer_name, const std::string &algo_type) : m_fcn(0) { m_root_minimizer = ROOT::Math::Factory::CreateMinimizer(minimizer_name.c_str(), algo_type.c_str() ); + m_root_minimizer->SetMaxFunctionCalls(5000); printOptions(); if( m_root_minimizer == 0 ) { throw NullPointerException("ROOTMinimizer::ROOTMinimizer() -> Error! Can't build minimizer"); @@ -40,7 +41,7 @@ void ROOTMinimizer::setVariable(int index, const FitParameter *par) if( !success ) { std::ostringstream ostr; ostr << "ROOTMinimizer::setVariable() -> Error! Minimizer returned false while setting the variable." << std::endl; - ostr << " Probably attempt to use wrond index for given variable name" << std::endl; + ostr << " Probably given index has been already used for another variable name." << std::endl; ostr << " Index:" << index << " name '" << par->getName().c_str() << std::endl; throw LogicErrorException(ostr.str()); } diff --git a/App/src/TestFittingModule1.cpp b/App/src/TestFittingModule1.cpp index 64ec408256d..0ce87095532 100644 --- a/App/src/TestFittingModule1.cpp +++ b/App/src/TestFittingModule1.cpp @@ -164,7 +164,7 @@ void TestFittingModule1::initializeSample2() substrate_layer.setMaterial(p_substrate_material); ParticleDecoration particle_decoration; particle_decoration.addParticle(new Particle(n_particle, new FormFactorCylinder(cylinder_height, cylinder_radius)),0.0, 0.2); - particle_decoration.addParticle(new Particle(n_particle, new FormFactorPrism3(prism3_half_side, prism3_height)), 0.0, 0.8); + particle_decoration.addParticle(new Particle(n_particle, new FormFactorPrism3(prism3_height, prism3_half_side)), 0.0, 0.8); particle_decoration.addInterferenceFunction(new InterferenceFunctionNone()); LayerDecorator air_layer_decorator(air_layer, particle_decoration); diff --git a/App/src/TestFittingModule2.cpp b/App/src/TestFittingModule2.cpp index fa8792b518b..0320e0f3fce 100644 --- a/App/src/TestFittingModule2.cpp +++ b/App/src/TestFittingModule2.cpp @@ -62,29 +62,36 @@ void TestFittingModule2::execute() // creating fit suite m_fitSuite = new FitSuite(); - m_fitSuite->addFitParameter("*SampleBuilder/m_cylinder_height", 12*Units::nanometer, 1*Units::nanometer, AttLimits::lowerLimited(0.01) ); - m_fitSuite->addFitParameter("*SampleBuilder/m_cylinder_radius", 2*Units::nanometer, 1*Units::nanometer, AttLimits::lowerLimited(0.01) ); - m_fitSuite->addFitParameter("*SampleBuilder/m_prism3_half_side",12*Units::nanometer, 1*Units::nanometer, AttLimits::lowerLimited(0.01) ); - m_fitSuite->addFitParameter("*SampleBuilder/m_prism3_height", 2*Units::nanometer, 1*Units::nanometer, AttLimits::lowerLimited(0.01) ); -// m_fitSuite->addFitParameter("*SampleBuilder/m_cylinder_ratio", 0.2, 0.01, AttLimits::limited(0.01, 0.99)); +// m_fitSuite->addFitParameter("*SampleBuilder/m_cylinder_height", 12*Units::nanometer, 1*Units::nanometer, AttLimits::lowerLimited(1) ); +// m_fitSuite->addFitParameter("*SampleBuilder/m_cylinder_radius", 2*Units::nanometer, 1*Units::nanometer, AttLimits::lowerLimited(1) ); +// m_fitSuite->addFitParameter("*SampleBuilder/m_prism3_half_side", 12*Units::nanometer, 1*Units::nanometer, AttLimits::lowerLimited(1) ); +// m_fitSuite->addFitParameter("*SampleBuilder/m_prism3_height", 2*Units::nanometer, 1*Units::nanometer, AttLimits::lowerLimited(1) ); + m_fitSuite->addFitParameter("*SampleBuilder/m_cylinder_height", 12*Units::nanometer, 1*Units::nanometer, AttLimits::limited(1,15) ); + m_fitSuite->addFitParameter("*SampleBuilder/m_cylinder_radius", 2*Units::nanometer, 1*Units::nanometer, AttLimits::limited(1,15) ); + m_fitSuite->addFitParameter("*SampleBuilder/m_prism3_half_side", 12*Units::nanometer, 1*Units::nanometer, AttLimits::limited(1,15) ); + m_fitSuite->addFitParameter("*SampleBuilder/m_prism3_height", 2*Units::nanometer, 1*Units::nanometer, AttLimits::limited(1,15) ); + + //m_fitSuite->addFitParameter("*SampleBuilder/m_cylinder_ratio", 0.5, 0.1, AttLimits::limited(0.1, 0.9)); + m_fitSuite->addFitParameter("*SampleBuilder/m_cylinder_ratio", 0.2, 0.1, AttLimits::fixed()); + +// FitSuiteStrategyAdjustParameters *strategy0 = new FitSuiteStrategyAdjustParameters("strategy0"); +// strategy0->fix_all().release("*SampleBuilder/m_cylinder_ratio"); +// m_fitSuite->addFitStrategy(strategy0); // FitSuiteStrategyAdjustParameters *strategy1 = new FitSuiteStrategyAdjustParameters("strategy1"); -// strategy1->fix_all().release("*SampleBuilder/m_cylinder_height").release("*SampleBuilder/m_cylinder_radius").release("*SampleBuilder/m_prism3_height").release("*SampleBuilder/m_prism3_half_side"); +// strategy1->release_all().fix("*SampleBuilder/m_cylinder_ratio"); // m_fitSuite->addFitStrategy(strategy1); -//// FitSuiteStrategyAdjustParameters *strategy2 = new FitSuiteStrategyAdjustParameters(); -//// strategy2->fix_all().release("*SampleBuilder/m_prism3_height").release("*SampleBuilder/m_prism3_half_side"); -//// m_fitSuite->addFitStrategy(strategy2); - // FitSuiteStrategyAdjustParameters *strategy2 = new FitSuiteStrategyAdjustParameters("strategy2"); -// strategy2->fix_all().release("*SampleBuilder/m_cylinder_ratio"); +// strategy2->release_all(); // m_fitSuite->addFitStrategy(strategy2); -// FitSuiteStrategyAdjustParameters *strategy3 = new FitSuiteStrategyAdjustParameters("strategy3"); -// strategy3->release_all(); -// m_fitSuite->addFitStrategy(strategy3); +// m_fitSuite->addFitStrategy(new FitSuiteStrategyAdjustData(3)); +// m_fitSuite->addFitStrategy(new FitSuiteStrategyAdjustData(2)); +// m_fitSuite->addFitStrategy(new FitSuiteStrategyAdjustData(1)); +// m_fitSuite->addFitStrategy(new FitSuiteStrategyDefault()); initializeExperiment(); generateRealData(0.1); @@ -99,7 +106,15 @@ void TestFittingModule2::execute() // setting up fitSuite m_fitSuite->setExperiment(mp_experiment); m_fitSuite->setRealData(*mp_real_data); - m_fitSuite->setMinimizer( new ROOTMinimizer("Minuit2", "Combined") ); + //m_fitSuite->setMinimizer( new ROOTMinimizer("Minuit2", "Migrad") ); + //fitSuite->setMinimizer( new ROOTMinimizer("Minuit2", "Minimize") ); + //fitSuite->setMinimizer( new ROOTMinimizer("Minuit2", "Combined") ); + //fitSuite->setMinimizer( new ROOTMinimizer("Minuit2", "Fumili") ); //doesn't work, Fumili wants special function with derivative + //fitSuite->setMinimizer( new ROOTMinimizer("GSLMultiMin", "ConjugateFR") ); + //fitSuite->setMinimizer( new ROOTMinimizer("GSLMultiMin", "BFGS") ); + //fitSuite->setMinimizer( new ROOTMinimizer("GSLMultiMin", "SteepestDescent") ); + m_fitSuite->setMinimizer( new ROOTMinimizer("GSLSimAn", "") ); + //fitSuite->setMinimizer( new ROOTMinimizer("Genetic", "") ); m_fitSuite->attachObserver( new FitSuiteObserverPrint() ); @@ -146,6 +161,7 @@ TestFittingModule2::TestSampleBuilder::TestSampleBuilder() init_parameters(); } + ISample *TestFittingModule2::TestSampleBuilder::buildSample() const { MultiLayer *p_multi_layer = new MultiLayer(); @@ -160,7 +176,7 @@ ISample *TestFittingModule2::TestSampleBuilder::buildSample() const substrate_layer.setMaterial(p_substrate_material); ParticleDecoration particle_decoration; particle_decoration.addParticle(new Particle(n_particle, new FormFactorCylinder(m_cylinder_height, m_cylinder_radius)),0.0, m_cylinder_ratio); - particle_decoration.addParticle(new Particle(n_particle, new FormFactorPrism3(m_prism3_half_side, m_prism3_height)), 0.0, 1.0 - m_cylinder_ratio); + particle_decoration.addParticle(new Particle(n_particle, new FormFactorPrism3(m_prism3_height, m_prism3_half_side)), 0.0, 1.0 - m_cylinder_ratio); particle_decoration.addInterferenceFunction(new InterferenceFunctionNone()); LayerDecorator air_layer_decorator(air_layer, particle_decoration); @@ -205,3 +221,4 @@ void TestFittingModule2::generateRealData(double noise_factor) } + diff --git a/Core/Algorithms/inc/ChiSquaredModule.h b/Core/Algorithms/inc/ChiSquaredModule.h index 36f8f400d87..dcadeac3619 100644 --- a/Core/Algorithms/inc/ChiSquaredModule.h +++ b/Core/Algorithms/inc/ChiSquaredModule.h @@ -26,6 +26,8 @@ public: ChiSquaredModule(const OutputData<double> &real_data); virtual ~ChiSquaredModule(); + void setRealData(const OutputData<double> &real_data); + void setSimulationData(const OutputData<double> &simulation_data); void setFittingDataSelector(const IFittingDataSelector &selector); diff --git a/Core/Algorithms/src/ChiSquaredModule.cpp b/Core/Algorithms/src/ChiSquaredModule.cpp index 8b04edd6b97..1802f8482aa 100644 --- a/Core/Algorithms/src/ChiSquaredModule.cpp +++ b/Core/Algorithms/src/ChiSquaredModule.cpp @@ -17,6 +17,13 @@ ChiSquaredModule::~ChiSquaredModule() delete mp_squared_function; } +void ChiSquaredModule::setRealData( + const OutputData<double>& real_data) +{ + delete mp_real_data; + mp_real_data = real_data.clone(); +} + void ChiSquaredModule::setSimulationData( const OutputData<double>& simulation_data) { diff --git a/Core/Algorithms/src/GISASExperiment.cpp b/Core/Algorithms/src/GISASExperiment.cpp index 99331604ca3..87d4c4594f9 100644 --- a/Core/Algorithms/src/GISASExperiment.cpp +++ b/Core/Algorithms/src/GISASExperiment.cpp @@ -100,6 +100,7 @@ void GISASExperiment::normalize() } } +// TODO : refactor to the detector object void GISASExperiment::setDetectorParameters(size_t n_phi, double phi_f_min, double phi_f_max, size_t n_alpha, double alpha_f_min, double alpha_f_max, bool isgisaxs_style) { diff --git a/Core/Algorithms/src/IFittingDataSelector.cpp b/Core/Algorithms/src/IFittingDataSelector.cpp index f7ea0e5f0d7..94080414e7c 100644 --- a/Core/Algorithms/src/IFittingDataSelector.cpp +++ b/Core/Algorithms/src/IFittingDataSelector.cpp @@ -9,7 +9,7 @@ void DefaultAllDataSelector::getFittingData(const OutputData<double>& real_data, { size_t data_size = real_data.getAllocatedSize(); if (simulated_data.getAllocatedSize()!=data_size) { - throw RuntimeErrorException("Size of simulated data should equal size of real data."); + throw RuntimeErrorException("Size of simulated data should be equal to the size of real data."); } real_data_vector.resize(data_size); simulated_data_vector.resize(data_size); diff --git a/Core/Tools/inc/FitSuite.h b/Core/Tools/inc/FitSuite.h index d1a8ae2731b..3ca77ee8074 100644 --- a/Core/Tools/inc/FitSuite.h +++ b/Core/Tools/inc/FitSuite.h @@ -46,6 +46,7 @@ public: //! set experiment void setExperiment(Experiment *experiment) { m_experiment = experiment; } + Experiment *getExperiment() { return m_experiment; } //! set minimizer void setMinimizer(IMinimizer *minimizer) { m_minimizer = minimizer; } diff --git a/Core/Tools/inc/FitSuiteStrategy.h b/Core/Tools/inc/FitSuiteStrategy.h index 1fe9f5cfed8..7d44eba8f29 100644 --- a/Core/Tools/inc/FitSuiteStrategy.h +++ b/Core/Tools/inc/FitSuiteStrategy.h @@ -43,10 +43,36 @@ protected: }; +//- ------------------------------------------------------------------- +//! @class FitSuiteStrategyDefault +//! @brief Default fit strategy just let FitSuite to run it's minimization round +//- ------------------------------------------------------------------- +class FitSuiteStrategyDefault : public IFitSuiteStrategy +{ +public: + FitSuiteStrategyDefault() : IFitSuiteStrategy("FitSuiteStrategyDefault") { } + virtual void execute(); +}; + + +//- ------------------------------------------------------------------- +//! @class FitSuiteStrategyAdjustData +//! @brief Strategy modifies data before running minimizing round +//- ------------------------------------------------------------------- +class FitSuiteStrategyAdjustData : public IFitSuiteStrategy +{ +public: + FitSuiteStrategyAdjustData(int power_of_two = 1) : IFitSuiteStrategy("FitSuiteStrategyAdjustData"), m_power_of_two(power_of_two) { } + virtual void execute(); +private: + size_t m_power_of_two; +}; + + + //- ------------------------------------------------------------------- //! @class FitSuiteStrategyAdjustParameters -//! @brief Strategy which fix/release defined list of fit parameters and -//! then call minimizer +//! @brief Strategy which fixes/releases fit parameters and call minimizer //- ------------------------------------------------------------------- class FitSuiteStrategyAdjustParameters : public IFitSuiteStrategy { diff --git a/Core/Tools/inc/IMinimizer.h b/Core/Tools/inc/IMinimizer.h index 37e342f0d7d..a4015075d36 100644 --- a/Core/Tools/inc/IMinimizer.h +++ b/Core/Tools/inc/IMinimizer.h @@ -50,6 +50,9 @@ public: //! return pointer to the parameters values at the minimum virtual double getErrorOfVariable(size_t i) const = 0; + //! clear resources (parameters) for consecutives minimizations + virtual void clear() = 0; + //! print fit results virtual void printResults() const = 0; diff --git a/Core/Tools/src/FitSuite.cpp b/Core/Tools/src/FitSuite.cpp index 0d2333a5f0d..b2b225f6d76 100644 --- a/Core/Tools/src/FitSuite.cpp +++ b/Core/Tools/src/FitSuite.cpp @@ -143,7 +143,7 @@ void FitSuite::runFit() } else { // round several minimization rounds as defined in concrete strategies for(fitstrategies_t::iterator it = m_fit_strategies.begin(); it!= m_fit_strategies.end(); ++it) { - std::cout << "FitSuite::runFit() -> Info. Running strategy '" << (*it)->getName() << "'" << std::endl; + std::cout << "FitSuite::runFit() -> Info. Running strategy #" << m_n_strategy << " '" << (*it)->getName() << "'" << std::endl; (*it)->execute(); m_n_strategy++; } diff --git a/Core/Tools/src/FitSuiteStrategy.cpp b/Core/Tools/src/FitSuiteStrategy.cpp index 9d0bfd3da3a..258ad01b35c 100644 --- a/Core/Tools/src/FitSuiteStrategy.cpp +++ b/Core/Tools/src/FitSuiteStrategy.cpp @@ -1,10 +1,73 @@ #include "FitSuiteStrategy.h" #include "FitSuite.h" #include "Exceptions.h" +#include "OutputData.h" +#include "ChiSquaredModule.h" +#include "Experiment.h" +#include "GISASExperiment.h" +#include "IMinimizer.h" #include <iostream> + + +/* ************************************************************************* */ +// Default fit strategy just let FitSuite to run it's minimization round +/* ************************************************************************* */ +void FitSuiteStrategyDefault::execute() +{ + // calling minimization + m_fit_suite->minimize(); +} + + + +/* ************************************************************************* */ +// Default fit strategy just let FitSuite to run it's minimization round +/* ************************************************************************* */ +void FitSuiteStrategyAdjustData::execute() +{ + // saving original data + OutputData<double > *orig_data = m_fit_suite->getChiSquaredModule()->getRealData()->clone(); + + OutputData<double> *adjusted_data = orig_data; + for(size_t i=0; i<m_power_of_two; ++i) { + OutputData<double> *new_data = doubleBinSize(*adjusted_data); + if(i!=0) { + delete adjusted_data; + } + adjusted_data = new_data; + } + + // setting all up with new data + m_fit_suite->setRealData(*adjusted_data); + const NamedVector<double> *axis0 = reinterpret_cast<const NamedVector<double>*>(adjusted_data->getAxes()[0]); + const NamedVector<double> *axis1 = reinterpret_cast<const NamedVector<double>*>(adjusted_data->getAxes()[1]); + GISASExperiment *experiment = dynamic_cast<GISASExperiment *>(m_fit_suite->getExperiment()); + if( !experiment ) { + throw NullPointerException("FitSuiteStrategyAdjustData::execute() -> Error! Can't get GISASExperiment."); + } + experiment->setDetectorParameters(axis0->getSize(), axis0->getMin(), axis0->getMax(), axis1->getSize(), axis1->getMin(), axis1->getMax()); + + // calling minimization + m_fit_suite->getMinimizer()->clear(); + + m_fit_suite->minimize(); + + // returning back original data + m_fit_suite->setRealData(*orig_data); + axis0 = reinterpret_cast<const NamedVector<double>*>(orig_data->getAxes()[0]); + axis1 = reinterpret_cast<const NamedVector<double>*>(orig_data->getAxes()[1]); + experiment->setDetectorParameters(axis0->getSize(), axis0->getMin(), axis0->getMax(), axis1->getSize(), axis1->getMin(), axis1->getMax()); + + delete orig_data; + delete adjusted_data; +} + + + + /* ************************************************************************* */ -// +// strategy which fixes/releases fit parameters and then call minimizer /* ************************************************************************* */ void FitSuiteStrategyAdjustParameters::execute() { diff --git a/Macros/GitUtils/gisasfw_loc.png b/Macros/GitUtils/gisasfw_loc.png index fa86f667126219256031dfd51abc8ba2cfef6425..aaaa6c53f982fba2a085cc030fee395c10cb8349 100644 GIT binary patch literal 15866 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 literal 15790 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 diff --git a/Macros/GitUtils/git_loc_history.py b/Macros/GitUtils/git_loc_history.py index da7ce6a2757..a495f95c9b5 100644 --- a/Macros/GitUtils/git_loc_history.py +++ b/Macros/GitUtils/git_loc_history.py @@ -51,7 +51,7 @@ if extfolder: # parsing output of git log wrong_ppp_file=False wrong_mmm_file=False -for x in popen('git log master --reverse -p'): +for x in popen('git log develop --reverse -p'): if x.startswith('commit'): pop() hsh=x[7:14]; -- GitLab