1#ifndef __JHISTOGRAM1D__
2#define __JHISTOGRAM1D__
29 template<
class JElement_t>
68 template<
class JElement_t>
94 return (first.getY() + second.getY() <
__y);
108 template<
class JElement_t,
109 template<
class,
class>
class JContainer_t,
112 public JContainer_t<JElement_t, JDistance_t>,
113 public JHistogram<typename JElement_t::abscissa_type, typename JElement_t::ordinate_type>,
114 public JMath< JHistogram1D<JElement_t, JContainer_t, JDistance_t> >
128 typedef typename collection_type::iterator
iterator;
135 typedef JTOOLS::JRebin <value_type>
JRebin;
175 for (
iterator i = this->begin(); i != this->end(); ++i) {
207 if (p == this->begin())
209 else if (p == this->end())
221 template<
class JRebin_t>
224 if (this->size() > 1u) {
232 while (++i != this->end() && merge(*out,*i)) {
233 out->getY() += i->getY();
241 if (this->getDistance(__rbegin->getX(), this->rbegin()->getX()) > 0.0) {
243 *out = *(this->rbegin());
248 this->resize(std::distance(this->begin(), out));
262 histogram_type ::add(
static_cast<const histogram_type&
> (histogram));
277 histogram_type ::sub(
static_cast<const histogram_type&
> (histogram));
291 collection_type::mul(value);
292 histogram_type ::mul(value);
306 collection_type::div(value);
307 histogram_type ::div(value);
338 out << static_cast<const histogram_type&> (
object);
339 out << static_cast<const collection_type&>(
object);
351 template<
class JAbscissa_t,
353 template<
class,
class>
class JContainer_t,
356 public JContainer_t<JBin2D<JAbscissa_t, JContents_t>, JDistance_t>,
358 public JMath< JHistogram1D<JBin2D<JAbscissa_t, JContents_t>, JContainer_t, JDistance_t> >
373 typedef typename collection_type::iterator
iterator;
380 typedef JTOOLS::JRebin <value_type>
JRebin;
428 if (p == this->begin())
430 else if (p == this->end())
442 template<
class JRebin_t>
445 if (this->size() > 1u) {
453 while (++i != this->end() && merge(*out,*i)) {
462 if (getDistance(__rbegin->getX(), this->rbegin()->getX()) > 0.0) {
464 *out = *(this->rbegin());
469 this->resize(std::distance(this->begin(), out));
481 for (
iterator i = this->begin(); i != this->end(); ++i) {
498 for (
iterator i = this->begin(); i != this->end(); ++i) {
533 out << static_cast<const histogram_type&> (
object);
534 out << static_cast<const collection_type&>(
object);
556 template<
class JElement_t,
557 template<
class,
class>
class JContainer_t,
562 typedef typename JElement_t::abscissa_type abscissa_type;
563 typedef typename JElement_t::ordinate_type ordinate_type;
566 if (input.getSize() > 1) {
568 for (const_iterator
j = input.begin(), i =
j++;
j != input.end(); ++i, ++
j) {
570 const abscissa_type x = 0.5 * (i->getX() +
j->getX());
571 const ordinate_type y = i->getY();
572 const double w = input.getDistance(i->getX(),
j->getX());
588 template<
class JAbscissa_t,
590 template<
class,
class>
class JContainer_t,
595 typedef JAbscissa_t abscissa_type;
596 typedef JContents_t contents_type;
599 if (input.getSize() > 1) {
601 for (const_iterator
j = input.begin(), i =
j++;
j != input.end(); ++i, ++
j) {
603 const abscissa_type x = i->getBinCenter();
604 const contents_type y = i->getY();
605 const double w = input.getDistance(i->getX(),
j->getX());
622 template<
class JElement_t,
623 template<
class,
class>
class JContainer_t,
625 inline typename JElement_t::ordinate_type
629 typedef typename JElement_t::ordinate_type ordinate_type;
634 if (input.getSize() > 1) {
636 output.
put(input.begin()->getX(), V);
638 for (const_iterator
j = input.begin(), i =
j++;
j != input.end(); ++i, ++
j) {
642 output.
put(
j->getX(), V);
General purpose class for a collection of sorted elements.
The elements in a collection are sorted according to their abscissa values and a given distance opera...
Base class for data structures with artithmetic capabilities.
Interface for binary input.
Interface for binary output.
collection_type::ordinate_type ordinate_type
collection_type::reverse_iterator reverse_iterator
collection_type::const_reverse_iterator const_reverse_iterator
JHistogram< abscissa_type, ordinate_type > histogram_type
JTOOLS::JContent< value_type > JContent
collection_type::abscissa_type abscissa_type
JHistogram1D(const JAbstractCollection< abscissa_type > &bounds)
Constructor.
JHistogram1D()
Default constructor.
virtual void evaluate(const abscissa_type *pX, typename JClass< contents_type >::argument_type w)
Fill histogram.
JContainer_t< element_type, JDistance_t > collection_type
collection_type::const_iterator const_iterator
histogram_type::contents_type contents_type
void fill(typename JClass< abscissa_type >::argument_type x, typename JClass< contents_type >::argument_type w)
Fill histogram.
collection_type::iterator iterator
collection_type::value_type value_type
JHistogram1D & sub(const JHistogram1D &histogram)
subtraction not allowed with bin centering
friend JWriter & operator<<(JWriter &out, const JHistogram1D &object)
Write histogram to output.
friend JReader & operator>>(JReader &in, JHistogram1D &object)
Read histogram from input.
void rebin(JRebin_t merge)
Rebin histogram.
JHistogram1D & mul(const double value)
Scale contents.
JBin2D< JAbscissa_t, JContents_t > element_type
JHistogram1D & add(const JHistogram1D &histogram)
Make methods inaccessible.
JTOOLS::JRebin< value_type > JRebin
JHistogram1D & div(const double value)
Scale contents.
static const JZero zero
Function object to assign zero value.
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
Template for generic class types.
JArgument< T >::argument_type argument_type
Auxiliary base class for aritmetic operations of derived class types.
Auxiliary class for merging of consecutive bins until minimal content is reached.
JElement_t::ordinate_type contents_type
bool operator()(const value_type &first, const value_type &second) const
Test whether bins should be merged.
JContent(const contents_type y)
Constructor.