3 #include "TObjString.h" 4 #include "TParameter.h" 10 const std::vector<std::string> &diagBranchNames,
11 const std::vector<const IFitVar *> &
vars,
const std::vector<const ISyst *> &
systs)
12 : fDiagBranches(
std::move(diagBranchNames)), fVars(
std::move(vars)), fSysts(
std::move(systs))
19 fVals.reserve(1 + diagVals.size() + entryVals.size());
21 fVals.insert(
fVals.end(), diagVals.begin(), diagVals.end());
22 fVals.insert(
fVals.end(), entryVals.begin(), entryVals.end());
27 const std::vector<const ana::ISyst *> &
systs)
29 fVals.resize(map.GetSize());
30 std::size_t diagBranchSize = map.GetSize() - vars.size() - systs.size() - 1;
32 for (
const auto &mapPair : map)
34 auto pair =
dynamic_cast<TPair *
>(mapPair);
36 double value =
dynamic_cast<TParameter<double> *
>(pair->Value())->GetVal();
39 auto itSyst = (itVar == vars.end()) ? systs.end() :
std::find_if(systs.begin(), systs.end(), [&
name](
const ISyst*
s){
return s->ShortName() ==
name; });
42 if (itVar != vars.end())
44 else if (itSyst != systs.end())
45 fVals[1 + diagBranchSize + vars.size() +
std::distance(systs.begin(), itSyst)] = value;
46 else if (
name ==
"logprob")
60 assert(
it !=
fDiagBranches.end() && (
"This MCMCSample does not contain a value called '" + brName +
"'").c_str());
68 auto ret = std::make_unique<TMap>();
69 ret->Add(
new TObjString(
"logprob"),
new TParameter<double>(
"",
fVals[0]));
72 ret->Add(
new TObjString(brName.c_str()),
new TParameter<double>(
"",
DiagnosticVal(brName)));
73 for (
const auto &
v :
fVars)
74 ret->Add(
new TObjString(
v->ShortName().c_str()),
new TParameter<double>(
"",
Val(
v)));
76 ret->Add(
new TObjString(
s->ShortName().c_str()),
new TParameter<double>(
"",
Val(
s)));
78 return std::move(
ret);
std::unique_ptr< TMap > ToTMap() const
Mostly for serialization.
std::vector< std::string > fDiagBranches
Cuts and Vars for the 2020 FD DiF Study.
virtual const std::string & ShortName() const final
The name printed out to the screen.
std::vector< const ana::IFitVar * > fVars
double DiagnosticVal(const std::string &brName) const
unsigned distance(const T &t1, const T &t2)
Encapsulate code to systematically shift a caf::SRProxy.
const XML_Char int const XML_Char * value
double Val(const ana::IFitVar *var) const
MCMCSample(double LL, const std::vector< double > &diagVals, const std::vector< double > &entryVals, const std::vector< std::string > &diagBranchNames, const std::vector< const IFitVar * > &vars, const std::vector< const ISyst * > &systs)
const std::string & ShortName() const
string GetString(xmlDocPtr xml_doc, string node_path)
assert(nhit_max >=nhit_nbins)
Interface definition for fittable variables.
std::vector< double > fVals
std::vector< const ana::ISyst * > fSysts