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

i) removed pvalue fit criteria

ii) overloaded fit() to output FitResult object of a particular sample
This commit is contained in:
AndrewYongZhenNing 2021-10-07 17:41:36 +01:00
parent 28aff209c4
commit 6eca1e6fc6
2 changed files with 47 additions and 47 deletions

View File

@ -234,21 +234,6 @@ DVec XYSampleData::getYError(const Index j)
return data_.getYError(j); return data_.getYError(j);
} }
void XYSampleData::setPValueBound(double uLim, double lLim)
{
pValMax = uLim;
pValMin = lLim;
}
void XYSampleData::checkPValue(double pValue)
{
if(pValue >= pValMax or pValue <= pValMin or isnan(pValue))
{
string msg = "central pValue = " + to_string(pValue) + " not within user-set bound of " + to_string(pValMin) + " < pValue < " + to_string(pValMax) ;
LATAN_ERROR(Runtime, msg);
}
}
// get total fit variance matrix and its pseudo-inverse //////////////////////// // get total fit variance matrix and its pseudo-inverse ////////////////////////
const DMat & XYSampleData::getFitVarMat(void) const DMat & XYSampleData::getFitVarMat(void)
{ {
@ -297,37 +282,51 @@ 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,
SampleFitResult &result,
FitResult &sampleResult, FitResult &sampleResult,
DVec &init, DVec &init,
Index s) Index s)
{ {
double pValue = 0;
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());
pValue = sampleResult.getPValue();
checkPValue(pValue);
} }
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)
{ FitResult XYSampleData::fit(std::vector<Minimizer *> &minimizer,
result.model_[j].resize(nSample_); const DVec &init,
result.model_[j][s] = sampleResult.getModel(j); const std::vector<const DoubleModel *> &v,
} Index s)
{
computeVarMat();
FitResult sampleResult;
DVec initCopy = init;
fitSample(minimizer, v, sampleResult, initCopy, s);
return sampleResult;
}
FitResult XYSampleData::fit(Minimizer &minimizer,
const DVec &init,
const std::vector<const DoubleModel *> &v,
Index s)
{
vector<Minimizer *> mv{&minimizer};
return fit(mv, init, v, s);
} }
SampleFitResult 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)
bool centralSample)
{ {
computeVarMat(); computeVarMat();
@ -338,15 +337,15 @@ SampleFitResult XYSampleData::fit(std::vector<Minimizer *> &minimizer,
result.resize(nSample_); result.resize(nSample_);
result.chi2_.resize(nSample_); result.chi2_.resize(nSample_);
result.model_.resize(v.size()); result.model_.resize(v.size());
if(centralSample) FOR_STAT_ARRAY(result, s)
{ {
fitSample(minimizer, v, result, sampleResult, initCopy, central); fitSample(minimizer, v, sampleResult, initCopy, s);
} result[s] = sampleResult;
else result.chi2_[s] = sampleResult.getChi2();
{ for (unsigned int j = 0; j < v.size(); ++j)
FOR_STAT_ARRAY(result, s)
{ {
fitSample(minimizer, v, result, sampleResult, initCopy, s); result.model_[j].resize(nSample_);
result.model_[j][s] = sampleResult.getModel(j);
} }
} }
result.nPar_ = sampleResult.getNPar(); result.nPar_ = sampleResult.getNPar();
@ -358,12 +357,11 @@ SampleFitResult XYSampleData::fit(std::vector<Minimizer *> &minimizer,
SampleFitResult 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)
bool centralSample)
{ {
vector<Minimizer *> mv{&minimizer}; vector<Minimizer *> mv{&minimizer};
return fit(mv, init, v, centralSample); return fit(mv, init, v);
} }
// residuals /////////////////////////////////////////////////////////////////// // residuals ///////////////////////////////////////////////////////////////////

View File

@ -91,9 +91,6 @@ public:
const DMat & getXYVar(const Index i, const Index j); const DMat & getXYVar(const Index i, const Index j);
DVec getXError(const Index i); DVec getXError(const Index i);
DVec getYError(const Index j); DVec getYError(const Index j);
// fit criteria
void setPValueBound(double uLim, double lLim);
void checkPValue(double Chi2PerDof);
// get total fit variance matrix and its pseudo-inverse // get total fit variance matrix and its pseudo-inverse
const DMat & getFitVarMat(void); const DMat & getFitVarMat(void);
const DMat & getFitVarMatPInv(void); const DMat & getFitVarMatPInv(void);
@ -102,12 +99,17 @@ public:
// get internal XYStatData // get internal XYStatData
const XYStatData & getData(void); const XYStatData & getData(void);
// fit // fit
void fitSample(std::vector<Minimizer *> &minimizer, const std::vector<const DoubleModel *> &v, void fitSample(std::vector<Minimizer *> &minimizer,
SampleFitResult &result, FitResult &sampleResult, DVec &init, Index s); const std::vector<const DoubleModel *> &v,
SampleFitResult fit(std::vector<Minimizer *> &minimizer, const DVec &init, FitResult &sampleResult, DVec &init, Index s);
const std::vector<const DoubleModel *> &v, bool centralSample = false); FitResult fit(std::vector<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, bool centralSample = false); FitResult fit(Minimizer &minimizer, const DVec &init,
const std::vector<const DoubleModel *> &v, Index s);
SampleFitResult fit(std::vector<Minimizer *> &minimizer, const DVec &init,
const std::vector<const DoubleModel *> &v);
SampleFitResult fit(Minimizer &minimizer, const DVec &init,
const std::vector<const DoubleModel *> &v);
template <typename... Ts> template <typename... Ts>
SampleFitResult fit(std::vector<Minimizer *> &minimizer, const DVec &init, SampleFitResult fit(std::vector<Minimizer *> &minimizer, const DVec &init,
const DoubleModel &model, const Ts... models); const DoubleModel &model, const Ts... models);