18 class StatEntity :
public Gaudi::Accumulators::PrintableCounter,
19 public Gaudi::Accumulators::AccumulatorSet<double, Gaudi::Accumulators::atomicity::full,
20 Gaudi::Accumulators::StatAccumulator,
21 Gaudi::Accumulators::BinomialAccumulator> {
23 using AccParent = Gaudi::Accumulators::AccumulatorSet<double, Gaudi::Accumulators::atomicity::full,
25 Gaudi::Accumulators::BinomialAccumulator>;
26 using BinomialAccParent = Gaudi::Accumulators::BinomialAccumulator<double, Gaudi::Accumulators::atomicity::full>;
28 using AccParent::reset;
31 template <
class OWNER>
33 o->declareCounter( tag, *
this );
36 const double maxFlag ) {
41 void reset() { AccParent::reset(); }
70 std::make_tuple( se.nEntries(), se.sum(), se.min(), se.max(), se.sum2() );
74 this->AccumulatorSet::operator+=( by );
81 unsigned long add(
const double v ) {
85 unsigned long addFlag(
const double v ) {
return add( v ); }
87 double Sum()
const {
return sum(); }
90 double rms()
const {
return standard_deviation(); }
91 double Rms()
const {
return standard_deviation(); }
92 double RMS()
const {
return standard_deviation(); }
93 double Eff()
const {
return eff(); }
97 double flag()
const {
return sum(); }
98 double flag2()
const {
return sum2(); }
100 double flagRMS()
const {
return standard_deviation(); }
105 using boost::algorithm::icontains;
106 return icontains(
name,
"eff" ) || icontains(
name,
"acc" ) || icontains(
name,
"filt" ) ||
107 icontains(
name,
"fltr" ) || icontains(
name,
"pass" );
109 template <
typename stream>
113 return o << fmt.str();
119 using Gaudi::Accumulators::PrintableCounter::print;
120 template <
typename stream>
124 ( 0 ==
min() || 1 ==
min() ) && ( 0 ==
max() || 1 ==
max() ) ) {
127 if (
name.empty() ) {
128 constexpr
auto fmt =
"|%|10d| |%|11.5g| |(%|#9.7g| +- %|-#8.7g|)%%| ------- | ------- |";
130 ( efficiencyErr() * 100 );
132 auto fmt =
" |*" + fmtHead +
"|%|10d| |%|11.5g| |(%|#9.7g| +- %|-#8.7g|)%%| ------- | ------- |";
134 ( efficiency() * 100 ) % ( efficiencyErr() * 100 );
137 constexpr
auto fmt =
"#=%|-7lu| Sum=%|-11.5g| Eff=|(%|#9.7g| +- %|-#8.6g|)%%|";
139 ( efficiencyErr() * 100 );
144 if (
name.empty() ) {
145 constexpr
auto fmt =
"|%|10d| |%|11.7g| |%|#11.5g| |%|#11.5g| |%|#12.5g| |%|#12.5g| |";
149 auto fmt =
" | " + fmtHead +
"|%|10d| |%|11.7g| |%|#11.5g| |%|#11.5g| |%|#12.5g| |%|#12.5g| |";
154 constexpr
auto fmt =
"#=%|-7lu| Sum=%|-11.5g| Mean=%|#10.4g| +- %|-#10.5g| Min/Max=%|#10.4g|/%|-#10.4g|";
168 return print( o,
true, tag,
true );
171 return print( o,
true, tag,
true );
175 return print( o, tableFormat, emptyName,
true );
179 return print( o, tableFormat, emptyName,
true );
StatEntity()=default
the constructor with automatic registration in the owner's counter map
Definition of the MsgStream class used to transmit messages.
GAUDI_API std::string format(const char *,...)
MsgStream format utility "a la sprintf(...)".
Gaudi::Accumulators::BinomialAccumulator< double, Gaudi::Accumulators::atomicity::full > BinomialAccParent
Gaudi::Accumulators::AccumulatorSet< double, Gaudi::Accumulators::atomicity::full, Gaudi::Accumulators::StatAccumulator, Gaudi::Accumulators::BinomialAccumulator > AccParent
EventIDBase min(const EventIDBase &lhs, const EventIDBase &rhs)
std::ostream & print(std::ostream &o, bool tableFormat=false) const override
stream & printImpl(stream &o, bool tableFormat, const std::string &name, bool flag, std::string const &fmtHead) const
std::ostream & printFormatted(std::ostream &o, const std::string &format) const
StatEntity operator++(int)
EventIDBase max(const EventIDBase &lhs, const EventIDBase &rhs)
std::ostream & fillStream(std::ostream &o) const
StatEntity & operator++()
StatEntity & operator-=(double by)
StatEntity(OWNER *o, const std::string &tag)
MsgStream & print(MsgStream &o, bool tableFormat, const std::string &name, bool flag=true, std::string fmtHead="%|-48.48s|%|27t|") const
double flagMeanErr() const
bool operator<(const StatEntity &se) const
MsgStream & printFormatted(MsgStream &o, const std::string &format) const
StatEntity & operator+=(StatEntity by)
std::ostream & print(std::ostream &o, bool tableFormat, const std::string &name, bool flag=true, std::string fmtHead="%|-48.48s|%|27t|") const
MsgStream & fillStream(MsgStream &o) const
StatEntity & operator--()
static bool effCounter(const std::string &name)
unsigned long addFlag(const double v)
stream & printFormattedImpl(stream &o, const std::string &format) const
StatEntity(const unsigned long entries, const double flag, const double flag2, const double minFlag, const double maxFlag)
backward compatible StatEntity class.
AccumulatorSet< Arithmetic, Atomicity, SigmaAccumulator, MinAccumulator, MaxAccumulator > StatAccumulator
StatAccumulator.
MsgStream & print(MsgStream &o, bool tableFormat=false) const override
StatEntity operator--(int)
std::string toString() const
StatEntity & operator+=(double by)
virtual std::ostream & print(std::ostream &o, const std::string &tag) const override
virtual MsgStream & print(MsgStream &o, const std::string &tag) const override
void operator=(double by)
unsigned long add(const double v)