10 #include "Utilities/func/MathUtil.h" 22 const std::vector<const ISyst*>&
systs)
23 : fVars(vars), fSysts(systs)
45 std::vector<IFitter::SeedPt>
47 const std::vector<SystShifts>& systSeedPts)
const 49 std::vector<SeedPt>
ret;
53 if(!systSeedPts.empty()){
54 std::vector<SeedPt> newret;
68 std::unique_ptr<IFitter::IFitSummary>
72 const std::vector<SystShifts> &systSeedPts,
89 auto fitSummary =
FitHelper(seed, bestSysts, seedPts, systSeedPts, verb);
96 std::cout <<
", " <<
v->ShortName() <<
" = " <<
v->GetValue(seed);
116 std::unique_ptr<IFitter::IFitSummary>
120 const std::vector<SystShifts>& systSeedPts,
127 const std::vector<SeedPt> pts =
ExpandSeeds(seedPts, systSeedPts);
129 std::unique_ptr<IFitSummary> bestFitSummary;
130 std::vector<double> bestFitPars, bestSystPars;
135 if(initseed) seed = initseed->
Copy();
137 pt.fitvars.ResetCalc(seed);
143 if (fitSummary->IsBetterThan(bestFitSummary.get()))
145 bestFitSummary = std::move(fitSummary);
149 bestSystPars.clear();
150 for (
const auto *
v:
fVars)
151 bestFitPars.push_back(
v->GetValue(seed));
153 bestSystPars.push_back(shift->GetShift<
double>(
s));
161 for (
unsigned int i = 0;
i <
fVars.size(); ++
i)
162 fVars[
i]->SetValue(initseed, bestFitPars[
i]);
163 for (
unsigned int i = 0; i <
fSysts.size(); ++
i)
166 return std::move(bestFitSummary);
172 const std::vector<SystShifts>& systSeedPts)
const 174 if(!seed && !
fVars.empty()){
175 std::cout <<
"ERROR: MinuitFitter::Fit() trying to fit oscillation parameters without an oscillation calculator" <<
std::endl;
181 std::cout <<
"ERROR MinuitFitter::Fit() trying to seed '" 183 <<
"' which is not part of the fit." <<
std::endl;
189 for(
const ISyst*
s:
pt.ActiveSysts()){
191 std::cout <<
"ERROR MinuitFitter::Fit() trying to seed '" 193 <<
"' which is not part of the fit." <<
std::endl;
virtual _IOscCalcAdjustable< T > * Copy() const =0
Cuts and Vars for the 2020 FD DiF Study.
virtual std::unique_ptr< SystShifts > Copy() const
const std::vector< Seed > & GetSeeds() const
Simple record of shifts applied to systematic parameters.
void ValidateSeeds(osc::IOscCalcAdjustable *seed, const SeedList &seedPts, const std::vector< SystShifts > &systSeedPts) const
Check that the seeds that were specified are compatible with the vars being fitted.
static SystShifts Nominal()
Encapsulate code to systematically shift a caf::SRProxy.
std::vector< const ISyst * > fSysts
virtual std::unique_ptr< IFitSummary > Fit(osc::IOscCalcAdjustable *seed, SystShifts &bestSysts=junkShifts, const SeedList &seedPts=SeedList(), const std::vector< SystShifts > &systSeedPts={}, Verbosity verb=kVerbose) const
Master fitting method. Depends on FitHelper and FitHelperSeeded.
T GetShift(const ISyst *syst) const
virtual std::unique_ptr< IFitSummary > FitHelperSeeded(osc::IOscCalcAdjustable *seed, SystShifts &systSeed, Verbosity verb) const =0
Helper for FitHelper – actually does fitting. Reimplement in derived classes.
std::vector< const IFitVar * > fVars
static SystShifts junkShifts
assert(nhit_max >=nhit_nbins)
Interface definition for fittable variables.
std::vector< SeedPt > ExpandSeeds(const SeedList &seedPts, const std::vector< SystShifts > &systSeedPts) const
std::unique_ptr< SystShifts > fShifts
std::set< const IFitVar * > ActiveFitVars() const
virtual std::unique_ptr< IFitSummary > FitHelper(osc::IOscCalcAdjustable *seed, SystShifts &bestSysts, const SeedList &seedPts, const std::vector< SystShifts > &systSeedPts, Verbosity verb) const
Helper for Fit.
void SetShift(const ISyst *syst, double shift, bool force=false)
IFitter(const std::vector< const IFitVar * > &vars, const std::vector< const ISyst * > &systs={})