22 return a.name() < b.name();
28 return a.name() == b.name();
45 std::string packUnsigned (
unsigned value)
60 unsigned unpackUnsigned (
const std::string& value)
62 std::istringstream
str (value);
65 RCU_THROW_MSG (
"failed to parse \"" + value +
"\" into an unsigned");
68 RCU_THROW_MSG (
"failed to parse \"" + value +
"\" into an unsigned");
80 std::string packFloat (
float value,
const std::string& plus,
81 const std::string& minus)
83 std::string separator = plus;
91 std::ostringstream
str;
92 str << rint (value * 10000);
110 bool unpackFloatHelper (
const std::string& value,
111 const std::string& separator,
114 if (!separator.empty())
116 std::string::size_type
split =
value.rfind (separator);
117 if (
split != std::string::npos)
120 if (!(
str >> result))
140 float unpackFloat (
const std::string& value,
const std::string& plus,
141 const std::string& minus)
144 if (unpackFloatHelper (value, plus, result))
146 if (unpackFloatHelper (value, minus, result))
158 void SystematicVariation ::
159 testInvariant ()
const
166 SystematicVariation ::
167 SystematicVariation ()
174 SystematicVariation ::
175 SystematicVariation (
const std::string& val_name)
183 SystematicVariation ::
184 SystematicVariation (
const std::string& val_basename,
185 const std::string& val_subvariation)
186 :
m_name (val_basename +
"__" + val_subvariation)
193 SystematicVariation ::
194 SystematicVariation (
const std::string& val_basename,
197 std::string separator =
"up";
198 if (val_parameter < 0)
203 std::ostringstream
str;
204 str << rint (val_parameter * 10000);
227 SystematicVariation ::
228 SystematicVariation (
const std::string& val_basename,
CONTINUOUS_ARG)
229 :
m_name (val_basename +
"__continuous")
238 makeToyVariation (
const std::string&
basename,
239 unsigned toyIndex,
float toyScale)
244 (
basename,
"toy_" + packUnsigned (toyIndex) +
"_" + packFloat (toyScale,
"scale",
""));
250 makeContinuousEnsemble (
const std::string&
basename)
258 makeToyEnsemble (
const std::string&
basename)
266 makeContinuous (
const std::string&
basename)
273 SystematicVariation ::
274 SystematicVariation (
const std::set<SystematicVariation>&
systematics,
275 const std::string& val_basename)
279 for (std::set<SystematicVariation>::const_iterator
283 if (sys->basename() == val_basename)
293 bool SystematicVariation ::
302 const std::string& SystematicVariation ::
311 std::string SystematicVariation ::
316 std::string::size_type
split =
m_name.rfind (
"__");
317 if (
split != std::string::npos)
325 std::string SystematicVariation ::
326 subvariation ()
const
330 std::string::size_type
split =
m_name.rfind (
"__");
331 if (
split != std::string::npos)
339 float SystematicVariation ::
347 if (
split != std::string::npos)
358 if (
split != std::string::npos)
373 std::pair<unsigned,float> SystematicVariation ::
374 getToyVariation ()
const
380 const std::size_t prefixSize = 4;
381 const auto split1 = variation.find (
"toy_");
384 const auto split2 = variation.find (
"_", split1 + prefixSize);
385 if (split2 == std::string::npos)
388 const auto sub1 = variation.substr (prefixSize, split2 - prefixSize);
389 const auto sub2 = variation.substr (split2 + 1);
390 return std::make_pair (unpackUnsigned (sub1), unpackFloat (sub2,
"scale",
""));
395 bool SystematicVariation ::
396 isToyEnsemble ()
const
404 bool SystematicVariation ::
405 isContinuousEnsemble ()
const
413 bool SystematicVariation ::
422 bool SystematicVariation ::
436 bool SystematicVariation ::
437 isToyVariation ()
const
439 static const std::regex pattern (
".*__toy_[0-9]+_[0-9]+((scale)[0-9]{1,4})?");
440 return regex_match (
m_name, pattern);
445 bool SystematicVariation ::
446 isContinuousVariation ()
const
448 static const std::regex pattern (
".*__[0-9]+((up)|(down))([0-9]{1,4})?");
449 return regex_match (
m_name, pattern);
456 return str << obj.name();
#define RCU_NEW_INVARIANT(x)
#define RCU_READ_INVARIANT(x)
static const std::vector< std::string > systematics
#define RCU_THROW_MSG(message)
bool operator==(const CP::SystematicVariation &a, const CP::SystematicVariation &b)
bool operator<(const CP::SystematicVariation &a, const CP::SystematicVariation &b)
SystematicVariation()
effects: standard default constructor guarantee: no-fail
CONTINUOUS_ARG
effects: constructor for indicating continuous systematics guarantee: strong failures: out of memory ...
std::string subvariation() const
description: the part of the name that indicates by how many sigmas we varied guarantee: strong failu...
std::string basename() const
description: the base name, i.e.
std::string m_name
description: members directly corresponding to accessors
bool isToyEnsemble() const
whether this represents a toy ensemble
bool isContinuousEnsemble() const
whether this represents a continuous ensemble
std::vector< std::string > split(const std::string &s, const std::string &t=":")
Select isolated Photons, Electrons and Muons.
std::ostream & operator<<(std::ostream &out, const std::pair< FIRST, SECOND > &pair)
Helper print operator.
std::string str(const TrigT2MbtsBits_v1 &trigT2MbtsBits)
std::string basename(std::string name)
std::string number(const double &d, const std::string &s)