Skip to content
Snippets Groups Projects
Commit 9da86387 authored by pospelov's avatar pospelov
Browse files

Attempt to apply fit strategies in TestMesocrystal2

parent f7201786
No related branches found
No related tags found
No related merge requests found
......@@ -22,6 +22,7 @@
#include "FitMultiParameter.h"
#include "GISASExperiment.h"
#include "ISampleBuilder.h"
#include "FitSuiteStrategy.h"
class FitSuite;
......
......@@ -20,6 +20,7 @@ void AddApplicationOptions(ProgramOptions* p_options)
("all", "run all registered functional test")
("profile", "profile specified test")
("config,c", bpo::value<std::string>()->default_value("gisasfw.cfg"),"config file name")
("fitmode", bpo::value<int>()->default_value(1), "used in TestMesocrystal2")
;
// there is no positional options (without '--' or '-' signs) at the moment
......@@ -35,3 +36,4 @@ void AddApplicationOptions(ProgramOptions* p_options)
// adding options to the main option holder
p_options->add(general_options).add(functional_test_options);
}
......@@ -7,7 +7,8 @@
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);
m_root_minimizer->SetMaxFunctionCalls(20000);
m_root_minimizer->SetMaxIterations(20000);
printOptions();
if( m_root_minimizer == 0 ) {
throw NullPointerException("ROOTMinimizer::ROOTMinimizer() -> Error! Can't build minimizer");
......
......@@ -73,17 +73,20 @@ void TestFittingModule1::execute()
m_fitSuite->setExperiment(mp_experiment);
m_fitSuite->setRealData(*mp_real_data);
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") );
//fitSuite->setMinimizer( new ROOTMinimizer("GSLSimAn", "") );
//fitSuite->setMinimizer( new ROOTMinimizer("Genetic", "") );
//m_fitSuite->setMinimizer( new ROOTMinimizer("Minuit2", "Simplex") );
//m_fitSuite->setMinimizer( new ROOTMinimizer("Minuit2", "Minimize") );
//m_fitSuite->setMinimizer( new ROOTMinimizer("Minuit2", "Combined") );
//m_fitSuite->setMinimizer( new ROOTMinimizer("Minuit2", "Fumili") ); //doesn't work, Fumili wants special function with derivative
//m_fitSuite->setMinimizer( new ROOTMinimizer("GSLMultiMin", "ConjugateFR") );
//m_fitSuite->setMinimizer( new ROOTMinimizer("GSLMultiMin", "BFGS") );
//m_fitSuite->setMinimizer( new ROOTMinimizer("GSLMultiMin", "SteepestDescent") );
//m_fitSuite->setMinimizer( new ROOTMinimizer("GSLSimAn", "") );
//m_fitSuite->setMinimizer( new ROOTMinimizer("Genetic", "") );
// tuning minimizer
//ROOT::Math::Minimizer *minim = (dynamic_cast<ROOTMinimizer *>(m_fitSuite->getMinimizer()))->getROOTMinimizer();
//minim->SetTolerance(1000.0);
//minim->SetPrecision(0.00001);
//minim->SetTolerance(0.00001);
//minim->SetStrategy(2);
//minim->SetMaxFunctionCalls(50); // for Minuit
//minim->SetMaxIterations(50); // for GSL
//minim->SetPrintLevel(4);
......
......@@ -75,27 +75,27 @@ void TestFittingModule2::execute()
//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());
// Applying fit strategy4: fixing/releasing parameters
// FitSuiteStrategyAdjustParameters *strategy0 = new FitSuiteStrategyAdjustParameters("strategy0");
// strategy0->fix_all().release("*SampleBuilder/m_cylinder_ratio");
// m_fitSuite->addFitStrategy(strategy0);
// FitSuiteStrategyAdjustParameters *strategy1 = new FitSuiteStrategyAdjustParameters("strategy1");
// strategy1->release_all().fix("*SampleBuilder/m_cylinder_ratio");
// m_fitSuite->addFitStrategy(strategy1);
// FitSuiteStrategyAdjustParameters *strategy2 = new FitSuiteStrategyAdjustParameters("strategy2");
// strategy2->release_all();
// m_fitSuite->addFitStrategy(strategy2);
// Applying fit strategy: resizing real data
// m_fitSuite->addFitStrategy(new FitSuiteStrategyAdjustData(3));
// m_fitSuite->addFitStrategy(new FitSuiteStrategyAdjustData(2));
// m_fitSuite->addFitStrategy(new FitSuiteStrategyAdjustData(1));
// m_fitSuite->addFitStrategy(new FitSuiteStrategyDefault());
// Applying fit strategy: disturning data to get out of local minima
m_fitSuite->addFitStrategy(new FitSuiteStrategyBootstrap());
initializeExperiment();
generateRealData(0.1);
......@@ -110,24 +110,6 @@ void TestFittingModule2::execute()
m_fitSuite->setExperiment(mp_experiment);
m_fitSuite->setRealData(*mp_real_data);
m_fitSuite->setMinimizer( new ROOTMinimizer("Minuit2", "Migrad") );
//m_fitSuite->setMinimizer( new ROOTMinimizer("Minuit2", "Simplex") );
//m_fitSuite->setMinimizer( new ROOTMinimizer("Minuit2", "Minimize") );
//m_fitSuite->setMinimizer( new ROOTMinimizer("Minuit2", "Combined") );
//m_fitSuite->setMinimizer( new ROOTMinimizer("Minuit2", "Fumili") ); //doesn't work, Fumili wants special function with derivative
//m_fitSuite->setMinimizer( new ROOTMinimizer("GSLMultiMin", "ConjugateFR") );
//m_fitSuite->setMinimizer( new ROOTMinimizer("GSLMultiMin", "BFGS") );
//m_fitSuite->setMinimizer( new ROOTMinimizer("GSLMultiMin", "SteepestDescent") );
//m_fitSuite->setMinimizer( new ROOTMinimizer("GSLSimAn", "") );
//m_fitSuite->setMinimizer( new ROOTMinimizer("Genetic", "") );
// tuning minimizer
//ROOT::Math::Minimizer *minim = (dynamic_cast<ROOTMinimizer *>(m_fitSuite->getMinimizer()))->getROOTMinimizer();
//minim->SetPrecision(0.00001);
//minim->SetTolerance(0.00001);
//minim->SetStrategy(2);
//minim->SetMaxFunctionCalls(50); // for Minuit
//minim->SetMaxIterations(50); // for GSL
//minim->SetPrintLevel(4);
m_fitSuite->attachObserver( new FitSuiteObserverPrint() );
m_fitSuite->attachObserver( new FitSuiteObserverDraw() );
......
......@@ -27,6 +27,7 @@
#include "TRange.h"
#include "FitSuiteHelper.h"
#include "AttLimits.h"
#include "ProgramOptions.h"
#include "TCanvas.h"
#include "TH2D.h"
......@@ -68,48 +69,122 @@ void TestMesoCrystal2::execute()
std::string file_name = Utils::FileSystem::GetHomePath()+"Examples/MesoCrystals/ex02_fitspheres/004_230_P144_im_full_phitheta.txt.gz";
OutputDataReader *reader = OutputDataIOFactory::instance().getReader(file_name);
OutputData<double > *real_data = reader->getOutputData();
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);
delete reader;
// 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);
c1->cd(1); gPad->SetLogz();
IsGISAXSTools::drawOutputDataInPad(*real_data_quarter, "CONT4 Z", "experiment");
IsGISAXSTools::drawOutputDataInPad(*real_data, "CONT4 Z", "experiment");
c1->Update();
// initializing experiment using real data to have detector axises like in real_data
initializeExperiment(real_data_quarter);
initializeExperiment(real_data);
mp_experiment->printParameters();
// setting fitSuite
FitSuite *fitSuite = new FitSuite();
fitSuite->setExperiment(mp_experiment);
fitSuite->setRealData(*real_data_quarter);
fitSuite->setRealData(*real_data);
fitSuite->setMinimizer( new ROOTMinimizer("Minuit2", "Combined") );
ROOT::Math::Minimizer *minim = (dynamic_cast<ROOTMinimizer *>(fitSuite->getMinimizer()))->getROOTMinimizer();
minim->SetStrategy(2); // 0- not accurate, 1 - normal, 2 - acurate (maximum FCN calls)
fitSuite->addFitParameter("*/lattice_length_a", 6.2*Units::nanometer, 1.0*Units::nanometer,
AttLimits::limited(4.0*Units::nanometer, 8.0*Units::nanometer) );
fitSuite->addFitParameter("*/nanoparticle_radius", 5.7*Units::nanometer, 1.0*Units::nanometer,
AttLimits::limited(2.0*Units::nanometer, 8.0*Units::nanometer) );
// fitSuite->addFitParameter("*/sigma_nanoparticle_radius", 0.1*Units::nanometer, 0.05*Units::nanometer,
// AttLimits::limited(0.01*Units::nanometer, 2.0*Units::nanometer) );
fitSuite->addFitParameter("*/sigma_nanoparticle_radius", 0.1*Units::nanometer, 0.05*Units::nanometer,
AttLimits::limited(0.01*Units::nanometer, 2.0*Units::nanometer) );
fitSuite->addFitParameter("*/meso_height", 500.0*Units::nanometer, 100.0*Units::nanometer,
AttLimits::limited(100.0*Units::nanometer, 2000.0*Units::nanometer) );
fitSuite->addFitParameter("*/meso_radius", 1000.0*Units::nanometer, 100.0*Units::nanometer,
AttLimits::limited(100.0*Units::nanometer, 5000.0*Units::nanometer) );
// fitSuite->addFitParameter("*/sigma_meso_height", 5.0*Units::nanometer, 1.0*Units::nanometer,
// AttLimits::limited(10.0*Units::nanometer, 200.0*Units::nanometer) );
// fitSuite->addFitParameter("*/sigma_meso_radius", 50.0*Units::nanometer, 10.0*Units::nanometer,
// AttLimits::limited(10.0*Units::nanometer, 500.0*Units::nanometer) );
// fitSuite->addFitParameter("*/sigma_lattice_length_a", 1.5*Units::nanometer, 0.5*Units::nanometer,
// AttLimits::limited(0.01*Units::nanometer, 4.0*Units::nanometer) );
fitSuite->addFitParameter("*/sigma_meso_height", 5.0*Units::nanometer, 1.0*Units::nanometer,
AttLimits::limited(10.0*Units::nanometer, 200.0*Units::nanometer) );
fitSuite->addFitParameter("*/sigma_meso_radius", 50.0*Units::nanometer, 10.0*Units::nanometer,
AttLimits::limited(10.0*Units::nanometer, 500.0*Units::nanometer) );
fitSuite->addFitParameter("*/sigma_lattice_length_a", 1.5*Units::nanometer, 0.5*Units::nanometer,
AttLimits::limited(0.01*Units::nanometer, 4.0*Units::nanometer) );
fitSuite->addFitParameter("*/surface_filling_ratio", 0.25, 0.1,
AttLimits::limited(0.1, 0.4) );
fitSuite->addFitParameter("*/roughness", 1.0*Units::nanometer, 0.1*Units::nanometer,
AttLimits::limited(0.01*Units::nanometer, 50.0*Units::nanometer) );
fitSuite->addFitParameter("*Beam/intensity", 8e12, 100, AttLimits::limited(8e11, 8e13) );
// fitSuite->addFitParameter("*/ResolutionFunction2D/sigma_x", 0.0002, 0.00001,
// AttLimits::limited(0.0, 0.002) );
// fitSuite->addFitParameter("*/ResolutionFunction2D/sigma_y", 0.0002, 0.00001,
// AttLimits::limited(0.0, 0.002) );
// // decrease number of bins in fit
// FitSuiteStrategyAdjustData *strategy0 = new FitSuiteStrategyAdjustData(3);
// strategy0->setCallMinimize(false);
// strategy0->setPreserveOriginalData(false);
// fitSuite->addFitStrategy(strategy0);
typedef std::vector<std::string > parnames_t;
std::vector<parnames_t > fixplan;
parnames_t pars;
pars.clear(); pars.push_back("*/lattice_length_a"); pars.push_back("*/nanoparticle_radius"); fixplan.push_back(pars);
pars.clear(); pars.push_back("*/meso_height"); pars.push_back("*/meso_radius"); fixplan.push_back(pars);
pars.clear(); pars.push_back("*Beam/intensity"); fixplan.push_back(pars);
pars.clear(); pars.push_back("*/surface_filling_ratio"); fixplan.push_back(pars);
pars.clear(); pars.push_back("*/roughness"); fixplan.push_back(pars);
pars.clear(); pars.push_back("*/sigma_lattice_length_a"); pars.push_back("*/sigma_nanoparticle_radius"); fixplan.push_back(pars);
pars.clear(); pars.push_back("*/sigma_meso_height"); pars.push_back("*/sigma_meso_radius"); fixplan.push_back(pars);
// 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;
FitSuiteStrategyAdjustParameters *strategy = new FitSuiteStrategyAdjustParameters(ostr.str());
strategy->fix_all();
int fitmode = (*mp_options)["fitmode"].as<int>();
if(fitmode==1) {
strategy->setPreserveOriginalValues(true); // initial values of parameters will be restored after each fit
} else {
strategy->setPreserveOriginalValues(false);
}
for(size_t i_par=0; i_par<fixplan[i_plan].size(); ++i_par) {
strategy->release(fixplan[i_plan][i_par]);
}
fitSuite->addFitStrategy(strategy);
}
FitSuiteStrategyAdjustParameters *strategy_all = new FitSuiteStrategyAdjustParameters("strategy_all");
strategy_all->release_all();
fitSuite->addFitStrategy(strategy_all);
// // Applying fit strategy: fixing/releasing parameters
// FitSuiteStrategyAdjustParameters *strategy1 = new FitSuiteStrategyAdjustParameters("strategy1");
// strategy1->fix_all().release("*/lattice_length_a").release("*/nanoparticle_radius");
// strategy1->setPreserveOriginalValues(true);
// fitSuite->addFitStrategy(strategy1);
// FitSuiteStrategyAdjustParameters *strategy2 = new FitSuiteStrategyAdjustParameters("strategy2");
// strategy2->fix_all().release("*/sigma_lattice_length_a").release("*/sigma_nanoparticle_radius");
// fitSuite->addFitStrategy(strategy2);
// FitSuiteStrategyAdjustParameters *strategy3 = new FitSuiteStrategyAdjustParameters("strategy3");
// strategy3->fix_all().release("*/meso_height").release("*/meso_radius").release("*/roughness");
// fitSuite->addFitStrategy(strategy3);
// FitSuiteStrategyAdjustParameters *strategy4 = new FitSuiteStrategyAdjustParameters("strategy4");
// strategy4->fix_all().release("*Beam/intensity");
// fitSuite->addFitStrategy(strategy4);
// FitSuiteStrategyAdjustParameters *strategy5 = new FitSuiteStrategyAdjustParameters("strategy5");
// strategy5->fix_all().release("*/sigma_meso_height").release("*/sigma_meso_radius");
// fitSuite->addFitStrategy(strategy5);
// FitSuiteStrategyAdjustParameters *strategy6 = new FitSuiteStrategyAdjustParameters("strategy6");
// strategy6->release_all();
// fitSuite->addFitStrategy(strategy6);
// IsGISAXSTools::setMinimum(1e2);
// std::string tree_file_name = Utils::FileSystem::GetHomePath()+"Examples/MesoCrystals/ex02_fitspheres/mesofit.tree";
// FitSuiteObserverWriteTree *writeTreeObserver = new FitSuiteObserverWriteTree(tree_file_name);
......
......@@ -20,10 +20,12 @@
#include "AttLimits.h"
#include "FitMultiParameter.h"
#include "FitSuiteStrategy.h"
#include "IMinimizer.h"
#include <string>
class Experiment;
class IMinimizer;
class ParameterPool;
class ChiSquaredModule;
......@@ -49,7 +51,7 @@ public:
Experiment *getExperiment() { return m_experiment; }
//! set minimizer
void setMinimizer(IMinimizer *minimizer) { m_minimizer = minimizer; }
void setMinimizer(IMinimizer *minimizer) { delete m_minimizer; m_minimizer = minimizer; }
//! get minimizer
IMinimizer *getMinimizer() { return m_minimizer; }
......
......@@ -34,6 +34,8 @@ class FitSuite;
class IFitSuiteStrategy : public INamed
{
public:
// TODO refactor all strategies (decorator, policies?) to change the way of calling FitSuite's minimizer: simple call, clear parameters/matrices before the call, no call at all, see FitSuiteStrategyAdjustData
IFitSuiteStrategy() : m_fit_suite(0) {}
IFitSuiteStrategy(const std::string &name) : INamed(name), m_fit_suite(0) {}
......@@ -59,15 +61,19 @@ public:
//- -------------------------------------------------------------------
//! @class FitSuiteStrategyAdjustData
//! @brief Strategy modifies data before running minimizing round
//! @brief Strategy modifies data before running minimization round
//- -------------------------------------------------------------------
class FitSuiteStrategyAdjustData : public IFitSuiteStrategy
{
public:
FitSuiteStrategyAdjustData(int power_of_two = 1) : IFitSuiteStrategy("FitSuiteStrategyAdjustData"), m_power_of_two(power_of_two) { }
FitSuiteStrategyAdjustData(int power_of_two = 1, bool preserve_original=true, bool call_minimize=true) : IFitSuiteStrategy("FitSuiteStrategyAdjustData"), m_power_of_two(power_of_two), m_preserve_original_data(preserve_original), m_call_minimize(call_minimize) { }
void setPreserveOriginalData(bool preserve_original) { m_preserve_original_data = preserve_original; }
void setCallMinimize(bool call_minimize) { m_call_minimize = call_minimize; }
virtual void execute();
private:
size_t m_power_of_two;
bool m_preserve_original_data; //! if it is true, strategy will restore original data in FitSuite before exiting
bool m_call_minimize; //! if it's true, modify data and then call FitSuite's minimizer, if false - simply modify the data
};
......@@ -78,19 +84,21 @@ private:
class FitSuiteStrategyAdjustParameters : public IFitSuiteStrategy
{
public:
FitSuiteStrategyAdjustParameters(const std::string &name) : IFitSuiteStrategy(name), m_fix_all(false), m_release_all(false) { }
FitSuiteStrategyAdjustParameters() : IFitSuiteStrategy("FitSuiteStrategyAdjustParameters"), m_fix_all(false), m_release_all(false) { }
FitSuiteStrategyAdjustParameters(const std::string &name) : IFitSuiteStrategy(name), m_fix_all(false), m_release_all(false), m_preserve_original_values(false) { }
FitSuiteStrategyAdjustParameters() : IFitSuiteStrategy("FitSuiteStrategyAdjustParameters"), m_fix_all(false), m_release_all(false), m_preserve_original_values(false) { }
virtual ~FitSuiteStrategyAdjustParameters(){}
virtual void execute();
FitSuiteStrategyAdjustParameters &fix_all() { m_fix_all = true; return *this; }
FitSuiteStrategyAdjustParameters &release_all() { m_release_all = true; return *this; }
FitSuiteStrategyAdjustParameters &fix(std::string parname ) { m_pars_to_fix.push_back(parname); return *this; }
FitSuiteStrategyAdjustParameters &release(std::string parname ) { m_pars_to_release.push_back(parname); return *this; }
void setPreserveOriginalValues(bool preserve_values) { m_preserve_original_values = preserve_values; }
private:
bool m_fix_all;
bool m_release_all;
std::vector<std::string > m_pars_to_fix;
std::vector<std::string > m_pars_to_release;
bool m_preserve_original_values; //! if it's true, strategy will set back values of parameters as they were before minimization round
};
......
......@@ -109,6 +109,10 @@ void FitSuite::minimize()
{
if( !m_minimizer ) throw NullPointerException("FitSuite::runFit() -> Error! Minimizer is missed.");
// initializing minimizer with fcn function belonging to given class
m_minimizer->setFunction( std::bind1st(std::mem_fun(&FitSuite::functionToMinimize), this), m_fit_params.size() );
// propagating fit parameters to the minimizer
int index(0);
for(fitparameters_t::iterator it = m_fit_params.begin(); it!= m_fit_params.end(); ++it) {
......@@ -134,8 +138,8 @@ void FitSuite::runFit()
// initializing fit parameters
init_fit_parameters();
// initializing minimizer with fcn function belonging to given class
m_minimizer->setFunction( std::bind1st(std::mem_fun(&FitSuite::functionToMinimize), this), m_fit_params.size() );
// // initializing minimizer with fcn function belonging to given class
// m_minimizer->setFunction( std::bind1st(std::mem_fun(&FitSuite::functionToMinimize), this), m_fit_params.size() );
// running minimizer
if( m_fit_strategies.empty() ) {
......
......@@ -32,13 +32,15 @@ void FitSuiteStrategyAdjustData::execute()
// if no data rediction was requested, just call FitSuite's minimization
if( m_power_of_two == 0 ) {
m_fit_suite->minimize();
if(m_call_minimize) {
m_fit_suite->minimize();
}
return;
}
// saving original data
OutputData<double > *orig_data = m_fit_suite->getChiSquaredModule()->getRealData()->clone();
// create adjusted data which will have doubled (4,8,...) bin size
// create adjusted data which will have doubled (2,4,8,...) bin size
OutputData<double> *adjusted_data = orig_data;
for(size_t i=0; i<m_power_of_two; ++i) {
OutputData<double> *new_data = doubleBinSize(*adjusted_data);
......@@ -59,14 +61,18 @@ void FitSuiteStrategyAdjustData::execute()
experiment->setDetectorParameters(axis0->getSize(), axis0->getMin(), axis0->getMax(), axis1->getSize(), axis1->getMin(), axis1->getMax());
// calling minimization
m_fit_suite->getMinimizer()->clear(); // clear minimizer's parameters and error matrixes
m_fit_suite->minimize();
if(m_call_minimize) {
m_fit_suite->getMinimizer()->clear(); // clear minimizer's parameters and error matrixes
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());
// setting back original data
if(m_preserve_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;
......@@ -108,8 +114,21 @@ void FitSuiteStrategyAdjustParameters::execute()
m_fit_suite->getFitParameter((*it))->setFixed(false);
}
std::vector<double > original_param_values;
for(FitSuite::fitparameters_t::iterator it = m_fit_suite->fitparams_begin(); it!=m_fit_suite->fitparams_end(); ++it) {
original_param_values.push_back( (*it)->getValue() );
}
// calling minimization
m_fit_suite->minimize();
if(m_preserve_original_values) {
int index(0);
for(FitSuite::fitparameters_t::iterator it = m_fit_suite->fitparams_begin(); it!=m_fit_suite->fitparams_end(); ++it) {
(*it)->setValue(original_param_values[index++]);
}
}
}
......@@ -130,17 +149,9 @@ void FitSuiteStrategyBootstrap::execute()
double chi2_last = m_fit_suite->getMinimizer()->getMinValue();
FitResult fitResult;
// fitResult.chi2 = m_fit_suite->getMinimizer()->getMinValue();
// for(FitSuite::fitparameters_t::iterator it = m_fit_suite->fitparams_begin(); it!=m_fit_suite->fitparams_end(); ++it) {
// fitResult.param_values.push_back( (*it)->getValue());
// param_values.push_back( (*it)->getValue() );
// }
// fitHistory.push_back(fitResult);
OutputData<double > *orig_data = m_fit_suite->getChiSquaredModule()->getRealData()->clone();
for(int i_iter=0; i_iter<m_n_iterations; ++i_iter) {
OutputData<double > *noisy_data = generateNoisyData(100, *orig_data);
OutputData<double > *noisy_data = generateNoisyData(10, *orig_data);
fitResult.clear();
fitResult.niter = i_iter;
......@@ -198,12 +209,7 @@ void FitSuiteStrategyBootstrap::execute()
std::cout << "FitSuiteStrategyBootstrap::execute() -> Results" << std::endl;
for(size_t i=0; i<fitHistory.size(); ++i) {
std::cout << "i:" << i
<< " niter:" << fitHistory[i].niter
// << " chi2_last:" << fitHistory[i].chi2_last
// << " chi2_noisy:" << fitHistory[i].chi2_noisy
// << " chi2_current:" << fitHistory[i].chi2_current
<< std::endl;
std::cout << "i:" << i << " niter:" << fitHistory[i].niter << std::endl;
std::cout << " chi2_last :" << fitHistory[i].chi2_last << " | ";
for(size_t j=0; j<fitHistory[i].param_values.size(); ++j) std::cout << fitHistory[i].param_values[j] << " ";
std::cout << std::endl;
......@@ -252,23 +258,10 @@ OutputData<double> *FitSuiteStrategyBootstrap::generateNoisyData(double noise_fa
double current = p_result->currentValue();
double sigma = noise_factor*std::sqrt(current);
double random = MathFunctions::GenerateNormalRandom(current, sigma);
//std::cout << "XXX " << current << " " << random << " " << current/random << std::endl;
if (random<0.0) random = 0.0;
p_result->next() = random;
}
// OutputData<double> *p_result = source.clone();
// p_result->resetIndex();
// double random_factor = noise_factor*MathFunctions::GenerateNormalRandom(0.0, 1.0);
// while (p_result->hasNext()) {
// double current = p_result->currentValue();
// double random = current + random_factor*current;
// if (random<0.0) random = 0.0;
// p_result->next() = random;
// std::cout << random << " XXXXXX " << current << " " << random/current << std::endl;
// }
return p_result;
}
Macros/GitUtils/gisasfw_loc.png

14.8 KiB | W: | H:

Macros/GitUtils/gisasfw_loc.png

15.8 KiB | W: | H:

Macros/GitUtils/gisasfw_loc.png
Macros/GitUtils/gisasfw_loc.png
Macros/GitUtils/gisasfw_loc.png
Macros/GitUtils/gisasfw_loc.png
  • 2-up
  • Swipe
  • Onion skin
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