Rivet API documentation

Rivet 4.1.3
Container utils

Functions

template<typename CONTAINER, typename = std::enable_if_t< is_citerable_v<std::decay_t<CONTAINER>> >>
unsigned int Rivet::count (const CONTAINER &c)
 Return number of true elements in the container c .
template<typename CONTAINER, typename FN, typename = std::enable_if_t< is_citerable_v<std::decay_t<CONTAINER>> >>
unsigned int Rivet::count (const CONTAINER &c, const FN &f)
 Return number of elements in the container c for which f(x) is true.
template<typename CONTAINER, typename = std::enable_if_t< is_citerable_v<std::decay_t<CONTAINER>> >>
bool Rivet::any (const CONTAINER &c)
 Return true if x is true for any x in container c, otherwise false.
template<typename CONTAINER, typename FN, typename = std::enable_if_t< is_citerable_v<std::decay_t<CONTAINER>> >>
bool Rivet::any (const CONTAINER &c, const FN &f)
 Return true if f(x) is true for any x in container c, otherwise false.
template<typename CONTAINER, typename = std::enable_if_t< is_citerable_v<std::decay_t<CONTAINER>> >>
bool Rivet::all (const CONTAINER &c)
 Return true if x is true for all x in container c, otherwise false.
template<typename CONTAINER, typename FN, typename = std::enable_if_t< is_citerable_v<std::decay_t<CONTAINER>> >>
bool Rivet::all (const CONTAINER &c, const FN &f)
 Return true if f(x) is true for all x in container c, otherwise false.
template<typename CONTAINER, typename = std::enable_if_t< is_citerable_v<std::decay_t<CONTAINER>> >>
bool Rivet::none (const CONTAINER &c)
 Return true if x is false for all x in container c, otherwise false.
template<typename CONTAINER, typename FN, typename = std::enable_if_t< is_citerable_v<std::decay_t<CONTAINER>> >>
bool Rivet::none (const CONTAINER &c, const FN &f)
 Return true if f(x) is false for all x in container c, otherwise false.
template<typename CONTAINER1, typename CONTAINER2, typename FN = typename std::decay_t<CONTAINER2>::value_type( const typename std::decay_t<CONTAINER1>::value_type::ParticleBase&), typename = std::enable_if_t< is_citerable_v<std::decay_t<CONTAINER1>> && is_citerable_v<std::decay_t<CONTAINER2>> >>
const CONTAINER2 & Rivet::transform (const CONTAINER1 &in, CONTAINER2 &out, FN &&f)
 A single-container-arg version of std::transform.
template<typename CONTAINER1, typename RTN, typename = std::enable_if_t< is_citerable_v<std::decay_t<CONTAINER1>> >>
std::vector< RTN > Rivet::transform (const CONTAINER1 &in, const std::function< RTN(typename CONTAINER1::value_type::ParticleBase)> &f)
template<typename CONTAINER1, typename T, typename FN, typename = std::enable_if_t< is_citerable_v<std::decay_t<CONTAINER1>> >>
Rivet::accumulate (const CONTAINER1 &in, const T &init, const FN &f)
 A single-container-arg version of std::accumulate, aka reduce.
template<typename CONTAINER, typename = std::enable_if_t< is_citerable_v<std::decay_t<CONTAINER>> >>
CONTAINER::value_type Rivet::sum (const CONTAINER &c)
 Generic sum function, adding x for all x in container c.
template<typename CONTAINER, typename T, typename = std::enable_if_t< is_citerable_v<std::decay_t<CONTAINER>> >>
Rivet::sum (const CONTAINER &c, const T &start)
template<typename CONTAINER, typename T, typename FN = T(const typename std::decay_t<CONTAINER>::value_type::ParticleBase&), typename = std::enable_if_t< is_citerable_v<std::decay_t<CONTAINER>> >>
Rivet::sum (const CONTAINER &c, FN &&fn, const T &start=T())
 Generic sum function, adding fn(x) for all x in container c, starting with start.
template<typename CONTAINER, typename T, typename = std::enable_if_t< is_citerable_v<std::decay_t<CONTAINER>> >>
T & Rivet::isum (const CONTAINER &c, T &out)
template<typename CONTAINER, typename FN, typename T, typename = std::enable_if_t< is_citerable_v<std::decay_t<CONTAINER>> >>
T & Rivet::isum (const CONTAINER &c, const FN &f, T &out)
template<typename CONTAINER, typename FN, typename = std::enable_if_t< is_citerable_v<std::decay_t<CONTAINER>> >>
CONTAINER & Rivet::idiscard (CONTAINER &c, const FN &f)
template<typename CONTAINER, typename = std::enable_if_t< is_citerable_v<std::decay_t<CONTAINER>> >>
CONTAINER & Rivet::idiscard (CONTAINER &c, const typename CONTAINER::value_type &y)
 Version with element-equality comparison in place of a function.
template<typename CONTAINER, typename = std::enable_if_t< is_citerable_v<std::decay_t<CONTAINER>> >>
CONTAINER & Rivet::idiscard_if_any (CONTAINER &c, const CONTAINER &ys)
 Version with several element-equality comparisons in place of a function.
template<typename CONTAINER, typename FN, typename = std::enable_if_t< is_citerable_v<std::decay_t<CONTAINER>> >>
CONTAINER Rivet::discard (const CONTAINER &c, const FN &f)
template<typename CONTAINER, typename = std::enable_if_t< is_citerable_v<std::decay_t<CONTAINER>> >>
CONTAINER Rivet::discard (const CONTAINER &c, const typename CONTAINER::value_type &y)
 Version with element-equality comparison in place of a function.
template<typename CONTAINER, typename = std::enable_if_t< is_citerable_v<std::decay_t<CONTAINER>> >>
CONTAINER Rivet::discard_if_any (const CONTAINER &c, const CONTAINER &ys)
 Version with several element-equality comparisons in place of a function.
template<typename CONTAINER, typename FN, typename = std::enable_if_t< is_citerable_v<std::decay_t<CONTAINER>> >>
CONTAINER & Rivet::discard (const CONTAINER &c, const FN &f, CONTAINER &out)
template<typename CONTAINER, typename = std::enable_if_t< is_citerable_v<std::decay_t<CONTAINER>> >>
CONTAINER & Rivet::discard (const CONTAINER &c, const typename CONTAINER::value_type &y, CONTAINER &out)
 Version with element-equality comparison in place of a function.
template<typename CONTAINER, typename = std::enable_if_t< is_citerable_v<std::decay_t<CONTAINER>> >>
CONTAINER & Rivet::discard_if_any (const CONTAINER &c, const CONTAINER &ys, CONTAINER &out)
 Version with several element-equality comparisons in place of a function.
template<typename CONTAINER, typename FN, typename = std::enable_if_t< is_citerable_v<std::decay_t<CONTAINER>> >>
CONTAINER & Rivet::iselect (CONTAINER &c, const FN &f)
template<typename CONTAINER, typename = std::enable_if_t< is_citerable_v<std::decay_t<CONTAINER>> >>
CONTAINER & Rivet::iselect_if_any (CONTAINER &c, const CONTAINER &ys)
 Version with several element-equality comparisons in place of a function.
template<typename CONTAINER, typename FN, typename = std::enable_if_t< is_citerable_v<std::decay_t<CONTAINER>> >>
CONTAINER Rivet::select (const CONTAINER &c, const FN &f)
template<typename CONTAINER, typename = std::enable_if_t< is_citerable_v<std::decay_t<CONTAINER>> >>
CONTAINER Rivet::select_if_any (const CONTAINER &c, const CONTAINER &ys)
 Version with several element-equality comparisons in place of a function.
template<typename CONTAINER, typename FN, typename = std::enable_if_t< is_citerable_v<std::decay_t<CONTAINER>> >>
CONTAINER & Rivet::select (const CONTAINER &c, const FN &f, CONTAINER &out)
template<typename CONTAINER, typename = std::enable_if_t< is_citerable_v<std::decay_t<CONTAINER>> >>
CONTAINER & Rivet::select_if_any (const CONTAINER &c, const CONTAINER &ys, CONTAINER &out)
 Version with several element-equality comparisons in place of a function.
template<typename CONTAINER, typename = std::enable_if_t< is_citerable_v<std::decay_t<CONTAINER>> >>
CONTAINER Rivet::slice (const CONTAINER &c, int i, int j)
 Slice of the container elements cf. Python's [i:j] syntax.
template<typename CONTAINER, typename = std::enable_if_t< is_citerable_v<std::decay_t<CONTAINER>> >>
CONTAINER Rivet::slice (const CONTAINER &c, int i)
 Tail slice of the container elements cf. Python's [i:] syntax.
template<typename CONTAINER, typename = std::enable_if_t< is_citerable_v<std::decay_t<CONTAINER>> >>
CONTAINER Rivet::head (const CONTAINER &c, int n)
 Head slice of the n first container elements.
template<typename CONTAINER, typename = std::enable_if_t< is_citerable_v<std::decay_t<CONTAINER>> >>
CONTAINER Rivet::tail (const CONTAINER &c, int n)
 Tail slice of the n last container elements.
double Rivet::min (const vector< double > &in, double errval=DBL_NAN)
 Find the minimum value in the vector.
double Rivet::max (const vector< double > &in, double errval=DBL_NAN)
 Find the maximum value in the vector.
pair< double, double > Rivet::minmax (const vector< double > &in, double errval=DBL_NAN)
 Find the minimum and maximum values in the vector.
int Rivet::min (const vector< int > &in, int errval=-1)
 Find the minimum value in the vector.
int Rivet::max (const vector< int > &in, int errval=-1)
 Find the maximum value in the vector.
pair< int, int > Rivet::minmax (const vector< int > &in, int errval=-1)
 Find the minimum and maximum values in the vector.

Detailed Description

Function Documentation

◆ discard() [1/2]

template<typename CONTAINER, typename FN, typename = std::enable_if_t< is_citerable_v<std::decay_t<CONTAINER>> >>
CONTAINER Rivet::discard ( const CONTAINER & c,
const FN & f )
inline

Filter a collection by copy, removing the subset that passes the supplied function

Todo
Use const std::function<bool(typename CONTAINER::value_type)>... but need polymorphism for ParticleBase

<

Todo
More efficient would be copy_if with back_inserter...

References idiscard().

◆ discard() [2/2]

template<typename CONTAINER, typename FN, typename = std::enable_if_t< is_citerable_v<std::decay_t<CONTAINER>> >>
CONTAINER & Rivet::discard ( const CONTAINER & c,
const FN & f,
CONTAINER & out )
inline

Filter a collection by copy into a supplied container, removing the subset that passes the supplied function

Note
New container will be replaced, not appended to
Todo
Use const std::function<bool(typename CONTAINER::value_type)>... but need polymorphism for ParticleBase

References discard().

◆ head()

template<typename CONTAINER, typename = std::enable_if_t< is_citerable_v<std::decay_t<CONTAINER>> >>
CONTAINER Rivet::head ( const CONTAINER & c,
int n )
inline

Head slice of the n first container elements.

Negative n means to take the head excluding the n -element tail

References slice().

◆ idiscard()

template<typename CONTAINER, typename FN, typename = std::enable_if_t< is_citerable_v<std::decay_t<CONTAINER>> >>
CONTAINER & Rivet::idiscard ( CONTAINER & c,
const FN & f )
inline

Filter a collection in-place, removing the subset that passes the supplied function

Todo
Use const std::function<bool(typename CONTAINER::value_type)>... but need polymorphism for ParticleBase

◆ iselect()

template<typename CONTAINER, typename FN, typename = std::enable_if_t< is_citerable_v<std::decay_t<CONTAINER>> >>
CONTAINER & Rivet::iselect ( CONTAINER & c,
const FN & f )
inline

Filter a collection in-place, keeping the subset that passes the supplied function

Todo
Use const std::function<bool(typename CONTAINER::value_type)>... but need polymorphism for ParticleBase

References idiscard().

◆ isum() [1/2]

template<typename CONTAINER, typename FN, typename T, typename = std::enable_if_t< is_citerable_v<std::decay_t<CONTAINER>> >>
T & Rivet::isum ( const CONTAINER & c,
const FN & f,
T & out )
inline

In-place generic sum function, adding fn(x) on to container out for all x in container c

Note
It's more flexible here to not use CONTAINER::value_type, allowing implicit casting to T.

◆ isum() [2/2]

template<typename CONTAINER, typename T, typename = std::enable_if_t< is_citerable_v<std::decay_t<CONTAINER>> >>
T & Rivet::isum ( const CONTAINER & c,
T & out )
inline

In-place generic sum function, adding x on to container out for all x in container c

Note
It's more flexible here to not use CONTAINER::value_type, allowing implicit casting to T.

◆ select() [1/2]

template<typename CONTAINER, typename FN, typename = std::enable_if_t< is_citerable_v<std::decay_t<CONTAINER>> >>
CONTAINER Rivet::select ( const CONTAINER & c,
const FN & f )
inline

Filter a collection by copy, keeping the subset that passes the supplied function

Todo
Use const std::function<bool(typename CONTAINER::value_type)>... but need polymorphism for ParticleBase

<

Todo
More efficient would be copy_if with back_inserter ... but is that equally container agnostic?

References iselect().

◆ select() [2/2]

template<typename CONTAINER, typename FN, typename = std::enable_if_t< is_citerable_v<std::decay_t<CONTAINER>> >>
CONTAINER & Rivet::select ( const CONTAINER & c,
const FN & f,
CONTAINER & out )
inline

Filter a collection by copy into a supplied container, keeping the subset that passes the supplied function

Note
New container will be replaced, not appended to
Todo
Use const std::function<bool(typename CONTAINER::value_type)>... but need polymorphism for ParticleBase

References select().

◆ slice() [1/2]

template<typename CONTAINER, typename = std::enable_if_t< is_citerable_v<std::decay_t<CONTAINER>> >>
CONTAINER Rivet::slice ( const CONTAINER & c,
int i )
inline

Tail slice of the container elements cf. Python's [i:] syntax.

Single-index specialisation of slice(c, i, j)

References slice().

◆ slice() [2/2]

template<typename CONTAINER, typename = std::enable_if_t< is_citerable_v<std::decay_t<CONTAINER>> >>
CONTAINER Rivet::slice ( const CONTAINER & c,
int i,
int j )
inline

Slice of the container elements cf. Python's [i:j] syntax.

The element at the j index is not included in the returned container. i and j can be negative, treated as backward offsets from the end of the container.

Referenced by head(), Rivet::DressedLepton::photons(), slice(), and tail().

◆ sum() [1/2]

template<typename CONTAINER, typename = std::enable_if_t< is_citerable_v<std::decay_t<CONTAINER>> >>
CONTAINER::value_type Rivet::sum ( const CONTAINER & c)
inline

Generic sum function, adding x for all x in container c.

Note
Default-constructs the return type – not always possible! Supply an explicit start value if necessary.

◆ sum() [2/2]

template<typename CONTAINER, typename T, typename = std::enable_if_t< is_citerable_v<std::decay_t<CONTAINER>> >>
T Rivet::sum ( const CONTAINER & c,
const T & start )
inline

Generic sum function, adding x for all x in container c, starting with start

Note
It's more flexible here to not use CONTAINER::value_type, allowing implicit casting to T.

◆ tail()

template<typename CONTAINER, typename = std::enable_if_t< is_citerable_v<std::decay_t<CONTAINER>> >>
CONTAINER Rivet::tail ( const CONTAINER & c,
int n )
inline

Tail slice of the n last container elements.

Negative n means to take the tail from after the n th element

References slice().

◆ transform()

template<typename CONTAINER1, typename RTN, typename = std::enable_if_t< is_citerable_v<std::decay_t<CONTAINER1>> >>
std::vector< RTN > Rivet::transform ( const CONTAINER1 & in,
const std::function< RTN(typename CONTAINER1::value_type::ParticleBase)> & f )
inline

A single-container-arg, return-value version of std::transform, aka map

Todo
Make the function template polymorphic... or specific to ParticleBase