The Gaudi Framework  v37r0 (b608885e)
Gaudi::Accumulators::GenericAccumulator< InputTypeT, InnerType, Atomicity, InputTransform, OutputTransform, ValueHandler > Class Template Reference

Generic Accumulator, templated by. More...

#include </builds/gaudi/Gaudi/GaudiKernel/include/Gaudi/Accumulators.h>

Inheritance diagram for Gaudi::Accumulators::GenericAccumulator< InputTypeT, InnerType, Atomicity, InputTransform, OutputTransform, ValueHandler >:

Public Types

using InputType = InputTypeT
 
using OutputType = std::decay_t< std::result_of_t< OutputTransform(InnerType)> >
 
using InternalType = InnerType
 
using JSONStringEntriesType = std::string
 

Public Member Functions

GenericAccumulator operator+= (const InputType by)
 
 GenericAccumulator ()=default
 
template<atomicity ato, typename VH >
 GenericAccumulator (construct_empty_t, const GenericAccumulator< InputType, InnerType, ato, InputTransform, OutputTransform, VH > &)
 constructor of an empty GenericAccumulator, copying the (non existent) config from another GenericAccumulator More...
 
template<typename... Args>
 GenericAccumulator (std::in_place_t, Args &&... args)
 
 GenericAccumulator (const GenericAccumulator &other)
 
GenericAccumulatoroperator= (const GenericAccumulator &other)
 
OutputType value () const
 
void reset ()
 
template<atomicity ato, typename VH >
void mergeAndReset (GenericAccumulator< InputType, InnerType, ato, InputTransform, OutputTransform, VH > &other)
 
template<atomicity ato, typename VH >
void operator+ (GenericAccumulator< InputType, InnerType, ato, InputTransform, OutputTransform, VH > &&other)
 

Protected Member Functions

 GenericAccumulator (InnerType in)
 
auto rawValue () const
 
void reset (InnerType in)
 

Static Protected Member Functions

static InnerType extractJSONData (const nlohmann::json &j, const JSONStringEntriesType &entries)
 

Private Attributes

ValueHandler::InternalType m_value { ValueHandler::DefaultValue() }
 

Friends

template<typename , typename , atomicity , typename , typename , typename >
class GenericAccumulator
 

Detailed Description

template<typename InputTypeT, typename InnerType, atomicity Atomicity = atomicity::full, typename InputTransform = Identity, typename OutputTransform = Identity, typename ValueHandler = Adder<InnerType, Atomicity>>
class Gaudi::Accumulators::GenericAccumulator< InputTypeT, InnerType, Atomicity, InputTransform, OutputTransform, ValueHandler >

Generic Accumulator, templated by.

  • InputType : the type of input data coming to this Accumulator
  • InnerType : the type of the accumulated value. May be different from InputType, e.g. for a pure counter where InputType is double and InnerType is unsigned long
  • Atomicity : the desired atomicity : none or full
  • InputTransform : a function to be applied to the values pushed in
    • default to identity
    • other typical functions : square for a sumn of squares, constant 1 for a count
  • OutputTransform : a function to be applied to returned value
    • default to identity
    • one could think of sqrt for and RMS accumulator, InputTransform begin square
  • ValueHandler : the handler of the internal value, that is a functor providing :
    • the way to increment the internal value (e.g. +, min, max) as the operator()
    • the type of the internal value (typically Arithmetic or std::atomic<Arithmetic>)
    • the default value for the internal type

Definition at line 434 of file Accumulators.h.

Member Typedef Documentation

◆ InputType

template<typename InputTypeT , typename InnerType , atomicity Atomicity = atomicity::full, typename InputTransform = Identity, typename OutputTransform = Identity, typename ValueHandler = Adder<InnerType, Atomicity>>
using Gaudi::Accumulators::GenericAccumulator< InputTypeT, InnerType, Atomicity, InputTransform, OutputTransform, ValueHandler >::InputType = InputTypeT

Definition at line 439 of file Accumulators.h.

◆ InternalType

template<typename InputTypeT , typename InnerType , atomicity Atomicity = atomicity::full, typename InputTransform = Identity, typename OutputTransform = Identity, typename ValueHandler = Adder<InnerType, Atomicity>>
using Gaudi::Accumulators::GenericAccumulator< InputTypeT, InnerType, Atomicity, InputTransform, OutputTransform, ValueHandler >::InternalType = InnerType

Definition at line 445 of file Accumulators.h.

◆ JSONStringEntriesType

template<typename InputTypeT , typename InnerType , atomicity Atomicity = atomicity::full, typename InputTransform = Identity, typename OutputTransform = Identity, typename ValueHandler = Adder<InnerType, Atomicity>>
using Gaudi::Accumulators::GenericAccumulator< InputTypeT, InnerType, Atomicity, InputTransform, OutputTransform, ValueHandler >::JSONStringEntriesType = std::string

Definition at line 446 of file Accumulators.h.

◆ OutputType

template<typename InputTypeT , typename InnerType , atomicity Atomicity = atomicity::full, typename InputTransform = Identity, typename OutputTransform = Identity, typename ValueHandler = Adder<InnerType, Atomicity>>
using Gaudi::Accumulators::GenericAccumulator< InputTypeT, InnerType, Atomicity, InputTransform, OutputTransform, ValueHandler >::OutputType = std::decay_t<std::result_of_t<OutputTransform( InnerType )> >

Definition at line 443 of file Accumulators.h.

Constructor & Destructor Documentation

◆ GenericAccumulator() [1/5]

template<typename InputTypeT , typename InnerType , atomicity Atomicity = atomicity::full, typename InputTransform = Identity, typename OutputTransform = Identity, typename ValueHandler = Adder<InnerType, Atomicity>>
Gaudi::Accumulators::GenericAccumulator< InputTypeT, InnerType, Atomicity, InputTransform, OutputTransform, ValueHandler >::GenericAccumulator ( )
default

◆ GenericAccumulator() [2/5]

template<typename InputTypeT , typename InnerType , atomicity Atomicity = atomicity::full, typename InputTransform = Identity, typename OutputTransform = Identity, typename ValueHandler = Adder<InnerType, Atomicity>>
template<atomicity ato, typename VH >
Gaudi::Accumulators::GenericAccumulator< InputTypeT, InnerType, Atomicity, InputTransform, OutputTransform, ValueHandler >::GenericAccumulator ( construct_empty_t  ,
const GenericAccumulator< InputType, InnerType, ato, InputTransform, OutputTransform, VH > &   
)
inline

constructor of an empty GenericAccumulator, copying the (non existent) config from another GenericAccumulator

Definition at line 454 of file Accumulators.h.

456  : GenericAccumulator() {}

◆ GenericAccumulator() [3/5]

template<typename InputTypeT , typename InnerType , atomicity Atomicity = atomicity::full, typename InputTransform = Identity, typename OutputTransform = Identity, typename ValueHandler = Adder<InnerType, Atomicity>>
template<typename... Args>
Gaudi::Accumulators::GenericAccumulator< InputTypeT, InnerType, Atomicity, InputTransform, OutputTransform, ValueHandler >::GenericAccumulator ( std::in_place_t  ,
Args &&...  args 
)
inline

Definition at line 458 of file Accumulators.h.

458 : m_value( std::forward<Args>( args )... ) {}

◆ GenericAccumulator() [4/5]

template<typename InputTypeT , typename InnerType , atomicity Atomicity = atomicity::full, typename InputTransform = Identity, typename OutputTransform = Identity, typename ValueHandler = Adder<InnerType, Atomicity>>
Gaudi::Accumulators::GenericAccumulator< InputTypeT, InnerType, Atomicity, InputTransform, OutputTransform, ValueHandler >::GenericAccumulator ( const GenericAccumulator< InputTypeT, InnerType, Atomicity, InputTransform, OutputTransform, ValueHandler > &  other)
inline

Definition at line 459 of file Accumulators.h.

459 : m_value( ValueHandler::getValue( other.m_value ) ) {}

◆ GenericAccumulator() [5/5]

template<typename InputTypeT , typename InnerType , atomicity Atomicity = atomicity::full, typename InputTransform = Identity, typename OutputTransform = Identity, typename ValueHandler = Adder<InnerType, Atomicity>>
Gaudi::Accumulators::GenericAccumulator< InputTypeT, InnerType, Atomicity, InputTransform, OutputTransform, ValueHandler >::GenericAccumulator ( InnerType  in)
inlineprotected

Definition at line 476 of file Accumulators.h.

476 : m_value( std::move( in ) ) {}

Member Function Documentation

◆ extractJSONData()

template<typename InputTypeT , typename InnerType , atomicity Atomicity = atomicity::full, typename InputTransform = Identity, typename OutputTransform = Identity, typename ValueHandler = Adder<InnerType, Atomicity>>
static InnerType Gaudi::Accumulators::GenericAccumulator< InputTypeT, InnerType, Atomicity, InputTransform, OutputTransform, ValueHandler >::extractJSONData ( const nlohmann::json &  j,
const JSONStringEntriesType entries 
)
inlinestaticprotected

Definition at line 479 of file Accumulators.h.

479  {
480  return j.at( entries ).get<InnerType>();
481  }

◆ mergeAndReset()

template<typename InputTypeT , typename InnerType , atomicity Atomicity = atomicity::full, typename InputTransform = Identity, typename OutputTransform = Identity, typename ValueHandler = Adder<InnerType, Atomicity>>
template<atomicity ato, typename VH >
void Gaudi::Accumulators::GenericAccumulator< InputTypeT, InnerType, Atomicity, InputTransform, OutputTransform, ValueHandler >::mergeAndReset ( GenericAccumulator< InputType, InnerType, ato, InputTransform, OutputTransform, VH > &  other)
inline

Definition at line 467 of file Accumulators.h.

467  {
468  ValueHandler::merge( m_value, VH::exchange( other.m_value, VH::DefaultValue() ) );
469  }

◆ operator+()

template<typename InputTypeT , typename InnerType , atomicity Atomicity = atomicity::full, typename InputTransform = Identity, typename OutputTransform = Identity, typename ValueHandler = Adder<InnerType, Atomicity>>
template<atomicity ato, typename VH >
void Gaudi::Accumulators::GenericAccumulator< InputTypeT, InnerType, Atomicity, InputTransform, OutputTransform, ValueHandler >::operator+ ( GenericAccumulator< InputType, InnerType, ato, InputTransform, OutputTransform, VH > &&  other)
inline

Definition at line 471 of file Accumulators.h.

471  {
472  ValueHandler::merge( m_value, other.m_value );
473  }

◆ operator+=()

template<typename InputTypeT , typename InnerType , atomicity Atomicity = atomicity::full, typename InputTransform = Identity, typename OutputTransform = Identity, typename ValueHandler = Adder<InnerType, Atomicity>>
GenericAccumulator Gaudi::Accumulators::GenericAccumulator< InputTypeT, InnerType, Atomicity, InputTransform, OutputTransform, ValueHandler >::operator+= ( const InputType  by)
inline

Definition at line 447 of file Accumulators.h.

447  {
448  ValueHandler::merge( m_value, InputTransform{}( by ) );
449  return *this;
450  }

◆ operator=()

template<typename InputTypeT , typename InnerType , atomicity Atomicity = atomicity::full, typename InputTransform = Identity, typename OutputTransform = Identity, typename ValueHandler = Adder<InnerType, Atomicity>>
GenericAccumulator& Gaudi::Accumulators::GenericAccumulator< InputTypeT, InnerType, Atomicity, InputTransform, OutputTransform, ValueHandler >::operator= ( const GenericAccumulator< InputTypeT, InnerType, Atomicity, InputTransform, OutputTransform, ValueHandler > &  other)
inline

Definition at line 460 of file Accumulators.h.

460  {
461  m_value = ValueHandler::getValue( other.m_value );
462  return *this;
463  }

◆ rawValue()

template<typename InputTypeT , typename InnerType , atomicity Atomicity = atomicity::full, typename InputTransform = Identity, typename OutputTransform = Identity, typename ValueHandler = Adder<InnerType, Atomicity>>
auto Gaudi::Accumulators::GenericAccumulator< InputTypeT, InnerType, Atomicity, InputTransform, OutputTransform, ValueHandler >::rawValue ( ) const
inlineprotected

Definition at line 477 of file Accumulators.h.

477 { return ValueHandler::getValue( m_value ); }

◆ reset() [1/2]

template<typename InputTypeT , typename InnerType , atomicity Atomicity = atomicity::full, typename InputTransform = Identity, typename OutputTransform = Identity, typename ValueHandler = Adder<InnerType, Atomicity>>
void Gaudi::Accumulators::GenericAccumulator< InputTypeT, InnerType, Atomicity, InputTransform, OutputTransform, ValueHandler >::reset ( )
inline

Definition at line 465 of file Accumulators.h.

465 { reset( ValueHandler::DefaultValue() ); }

◆ reset() [2/2]

template<typename InputTypeT , typename InnerType , atomicity Atomicity = atomicity::full, typename InputTransform = Identity, typename OutputTransform = Identity, typename ValueHandler = Adder<InnerType, Atomicity>>
void Gaudi::Accumulators::GenericAccumulator< InputTypeT, InnerType, Atomicity, InputTransform, OutputTransform, ValueHandler >::reset ( InnerType  in)
inlineprotected

Definition at line 478 of file Accumulators.h.

478 { m_value = std::move( in ); }

◆ value()

template<typename InputTypeT , typename InnerType , atomicity Atomicity = atomicity::full, typename InputTransform = Identity, typename OutputTransform = Identity, typename ValueHandler = Adder<InnerType, Atomicity>>
OutputType Gaudi::Accumulators::GenericAccumulator< InputTypeT, InnerType, Atomicity, InputTransform, OutputTransform, ValueHandler >::value ( ) const
inline

Definition at line 464 of file Accumulators.h.

464 { return OutputTransform{}( ValueHandler::getValue( m_value ) ); }

Friends And Related Function Documentation

◆ GenericAccumulator

template<typename InputTypeT , typename InnerType , atomicity Atomicity = atomicity::full, typename InputTransform = Identity, typename OutputTransform = Identity, typename ValueHandler = Adder<InnerType, Atomicity>>
template<typename , typename , atomicity , typename , typename , typename >
friend class GenericAccumulator
friend

Definition at line 436 of file Accumulators.h.

Member Data Documentation

◆ m_value

template<typename InputTypeT , typename InnerType , atomicity Atomicity = atomicity::full, typename InputTransform = Identity, typename OutputTransform = Identity, typename ValueHandler = Adder<InnerType, Atomicity>>
ValueHandler::InternalType Gaudi::Accumulators::GenericAccumulator< InputTypeT, InnerType, Atomicity, InputTransform, OutputTransform, ValueHandler >::m_value { ValueHandler::DefaultValue() }
private

Definition at line 484 of file Accumulators.h.


The documentation for this class was generated from the following file:
Gaudi::Accumulators::GenericAccumulator::m_value
ValueHandler::InternalType m_value
Definition: Accumulators.h:484
std::move
T move(T... args)
Gaudi::Accumulators::GenericAccumulator::reset
void reset()
Definition: Accumulators.h:465
ProduceConsume.j
j
Definition: ProduceConsume.py:101
Gaudi::Accumulators::GenericAccumulator::GenericAccumulator
friend class GenericAccumulator
Definition: Accumulators.h:436
merge
int merge(const char *target, const char *source, bool fixup=false, bool dbg=true)
Definition: merge.C:430
gaudirun.args
args
Definition: gaudirun.py:338