1
0
mirror of https://github.com/aportelli/LatAnalyze.git synced 2025-04-11 03:20:46 +01:00

Modified fitSample routines to use SampleFitResult objects.

This commit is contained in:
AndrewYongZhenNing 2022-03-04 10:36:30 +00:00
parent cd1aeac669
commit 493d641e2f
2 changed files with 35 additions and 34 deletions

View File

@ -303,42 +303,58 @@ const XYStatData & XYSampleData::getData(void)
void XYSampleData::fitSample(std::vector<Minimizer *> &minimizer, void XYSampleData::fitSample(std::vector<Minimizer *> &minimizer,
const std::vector<const DoubleModel *> &v, const std::vector<const DoubleModel *> &v,
FitResult &sampleResult, SampleFitResult &result,
DVec &init, DVec &init,
Index s) Index s)
{ {
result.resize(nSample_);
result.chi2_.resize(nSample_);
result.model_.resize(v.size());
FitResult sampleResult;
setDataToSample(s); setDataToSample(s);
if (s == central) if (s == central)
{ {
sampleResult = data_.fit(minimizer, init, v); sampleResult = data_.fit(minimizer, init, v);
init = sampleResult.segment(0, init.size()); init = sampleResult.segment(0, init.size());
result.nPar_ = sampleResult.getNPar();
result.nDof_ = sampleResult.nDof_;
result.parName_ = sampleResult.parName_;
result.corrRangeDb_ = Math::svdDynamicRangeDb(getFitCorrMat());
} }
else else
{ {
sampleResult = data_.fit(*(minimizer.back()), init, v); sampleResult = data_.fit(*(minimizer.back()), init, v);
} }
result[s] = sampleResult;
result.chi2_[s] = sampleResult.getChi2();
for (unsigned int j = 0; j < v.size(); ++j)
{
result.model_[j].resize(nSample_);
result.model_[j][s] = sampleResult.getModel(j);
}
} }
FitResult XYSampleData::fit(std::vector<Minimizer *> &minimizer, SampleFitResult XYSampleData::fit(std::vector<Minimizer *> &minimizer,
const DVec &init, const DVec &init,
const std::vector<const DoubleModel *> &v, const std::vector<const DoubleModel *> &v,
Index s) Index s)
{ {
computeVarMat(); computeVarMat();
FitResult sampleResult; SampleFitResult result;
DVec initCopy = init; DVec initCopy = init;
fitSample(minimizer, v, sampleResult, initCopy, s); fitSample(minimizer, v, result, initCopy, s);
return sampleResult; return result;
} }
FitResult XYSampleData::fit(Minimizer &minimizer, SampleFitResult XYSampleData::fit(Minimizer &minimizer,
const DVec &init, const DVec &init,
const std::vector<const DoubleModel *> &v, const std::vector<const DoubleModel *> &v,
Index s) Index s)
{ {
vector<Minimizer *> mv{&minimizer}; vector<Minimizer *> mv{&minimizer};
@ -352,29 +368,14 @@ SampleFitResult XYSampleData::fit(std::vector<Minimizer *> &minimizer,
computeVarMat(); computeVarMat();
SampleFitResult result; SampleFitResult result;
FitResult sampleResult;
DVec initCopy = init; DVec initCopy = init;
Minimizer::Verbosity verbCopy = minimizer.back()->getVerbosity(); Minimizer::Verbosity verbCopy = minimizer.back()->getVerbosity();
result.resize(nSample_);
result.chi2_.resize(nSample_);
result.model_.resize(v.size());
FOR_STAT_ARRAY(result, s) FOR_STAT_ARRAY(result, s)
{ {
fitSample(minimizer, v, sampleResult, initCopy, s); fitSample(minimizer, v, result, initCopy, s);
result[s] = sampleResult;
result.chi2_[s] = sampleResult.getChi2();
for (unsigned int j = 0; j < v.size(); ++j)
{
result.model_[j].resize(nSample_);
result.model_[j][s] = sampleResult.getModel(j);
}
} }
minimizer.back()->setVerbosity(verbCopy); minimizer.back()->setVerbosity(verbCopy);
result.nPar_ = sampleResult.getNPar();
result.nDof_ = sampleResult.nDof_;
result.parName_ = sampleResult.parName_;
result.corrRangeDb_ = Math::svdDynamicRangeDb(getFitCorrMat());
return result; return result;
} }

View File

@ -105,10 +105,10 @@ public:
// fit // fit
void fitSample(std::vector<Minimizer *> &minimizer, void fitSample(std::vector<Minimizer *> &minimizer,
const std::vector<const DoubleModel *> &v, const std::vector<const DoubleModel *> &v,
FitResult &sampleResult, DVec &init, Index s); SampleFitResult &sampleResult, DVec &init, Index s);
FitResult fit(std::vector<Minimizer *> &minimizer, const DVec &init, SampleFitResult fit(std::vector<Minimizer *> &minimizer, const DVec &init,
const std::vector<const DoubleModel *> &v, Index s); const std::vector<const DoubleModel *> &v, Index s);
FitResult fit(Minimizer &minimizer, const DVec &init, SampleFitResult fit(Minimizer &minimizer, const DVec &init,
const std::vector<const DoubleModel *> &v, Index s); const std::vector<const DoubleModel *> &v, Index s);
SampleFitResult fit(std::vector<Minimizer *> &minimizer, const DVec &init, SampleFitResult fit(std::vector<Minimizer *> &minimizer, const DVec &init,
const std::vector<const DoubleModel *> &v); const std::vector<const DoubleModel *> &v);