Jpp
JTransformableMultiHistogram.hh
Go to the documentation of this file.
1 #ifndef __JTOOLS__JTRANSFORMABLEMULTIHISTOGRAM__
2 #define __JTOOLS__JTRANSFORMABLEMULTIHISTOGRAM__
3 
4 #include <stdarg.h>
5 
6 #include "JIO/JSerialisable.hh"
8 
9 #include "JTools/JMultiMap.hh"
12 #include "JTools/JArray.hh"
13 #include "JIO/JSerialisable.hh"
14 
15 
16 /**
17  * \author mdejong
18  */
19 
20 namespace JTOOLS {}
21 namespace JPP { using namespace JTOOLS; }
22 
23 namespace JTOOLS {
24 
25  using JIO::JReader;
26  using JIO::JWriter;
27 
28 
29  /**
30  * Transformable multidimensional histogram.
31  *
32  * This class implements the JTransformable interface.
33  */
34  template<class JHistogram_t,
35  class JMaplist_t,
38  public JMultiHistogram<JHistogram_t, JMaplist_t, JDistance_t>,
39  public JTransformable<JMapLength<JMaplist_t>::value, typename JHistogram_t::abscissa_type>
40  {
41  public:
42 
43  typedef JMultiHistogram<JHistogram_t,
44  JMaplist_t,
45  JDistance_t> JMultiHistogram_t;
46 
48 
49  typedef JHistogram_t histogram_type;
50 
51  typedef typename histogram_type::contents_type contents_type;
52  typedef typename histogram_type::value_type value_type;
53 
56 
61 
64 
67 
68 
69  /**
70  * Default constructor.
71  */
73  transformer(transformer_type::getClone())
74  {}
75 
76 
77  /**
78  * Get transformable multidimensional histogram.
79  *
80  * \return this transformable multidimensional histogram
81  */
83  {
84  return static_cast<const JTransformableMultiHistogram&>(*this);
85  }
86 
87 
88  /**
89  * Get transformable multidimensional histogram.
90  *
91  * \return this transformable multidimensional histogram
92  */
94  {
95  return static_cast<JTransformableMultiHistogram&>(*this);
96  }
97 
98 
99  /**
100  * Multidimensional fill method call.
101  *
102  * \param x comma seperated list of abscissa values
103  * \return function value
104  */
105  void fill(const abscissa_type x, ...)
106  {
107  va_start(this->ap, x);
108 
109  this->buffer[0] = x;
110 
111  for (int i = 1; i != NUMBER_OF_DIMENSIONS; ++i) {
112  this->buffer[i] = va_arg(this->ap, abscissa_type);
113  }
114 
115  const contents_type w = va_arg(this->ap, contents_type);
116 
117  va_end(this->ap);
118 
119  this->buffer[NUMBER_OF_DIMENSIONS - 1] = transformer->putXn(this->buffer, this->buffer[NUMBER_OF_DIMENSIONS - 1]);
120 
121  const double z = transformer->putXn(this->buffer, 1.0) - transformer->putXn(this->buffer, 0.0);
122  const double W = transformer->getWeight(this->buffer);
123 
124  this->evaluate(this->buffer.begin(), w * z / W);
125  }
126 
127 
128  /**
129  * Application of weight function and coordinate transformation.
130  *
131  * \param transformer function transformer
132  */
134  {
135  typedef typename transformer_type::array_type array_type;
136 
137  for (super_iterator i = this->super_begin(); i != this->super_end(); ++i) {
138 
139  const array_type array = (*i).getKey();
140  histogram_type& histogram = (*i).getValue();
141 
142  const JMultiMapGetTransformer<NUMBER_OF_DIMENSIONS - 1, value_type> get(*(this->transformer), array);
144 
145  histogram.transform(get);
146  histogram.transform(put);
147  }
148 
149  this->transformer.reset(transformer.clone());
150  }
151 
152 
153  /**
154  * Read transformable multidimensional histogram.
155  *
156  * \param in reader
157  * \param object transformable multidimensional histogram.
158  * \return reader
159  */
161  {
162  in >> static_cast<JMultiHistogram_t&>(object);
163 
164  return object.transformer->read(in);
165  }
166 
167 
168  /**
169  * Write transformable multidimensional histogram.
170  *
171  * \param out writer
172  * \param object transformable multidimensional histogram
173  * \return writer
174  */
175  friend inline JWriter& operator<<(JWriter& out, const JTransformableMultiHistogram& object)
176  {
177  out << static_cast<const JMultiHistogram_t&>(object);
178 
179  return object.transformer->write(out);
180  }
181 
182 
184  };
185 }
186 
187 #endif
JTOOLS::JMultiMapGetTransformer
Auxiliary class to convert JMultiMapTransformer to JCollectionElementTransformer.
Definition: JMultiMapTransformer.hh:291
JTOOLS::JTransformableMultiHistogram::operator>>
friend JReader & operator>>(JReader &in, JTransformableMultiHistogram &object)
Read transformable multidimensional histogram.
Definition: JTransformableMultiHistogram.hh:160
JTOOLS::JMultiHistogram::contents_type
JHistogram_t::contents_type contents_type
Definition: JMultiHistogram.hh:58
JTOOLS::JTransformableMultiHistogram::reverse_iterator
JMultiHistogram_t::reverse_iterator reverse_iterator
Definition: JTransformableMultiHistogram.hh:60
JIO::JReader
Interface for binary input.
Definition: JSerialisable.hh:62
JTOOLS::JArray::begin
const_iterator begin() const
get iterator to begin of data
Definition: JArray.hh:188
JTOOLS::JTransformableMultiHistogram::transform
virtual void transform(const transformer_type &transformer)
Application of weight function and coordinate transformation.
Definition: JTransformableMultiHistogram.hh:133
JTOOLS::JTransformableMultiHistogram::ordinate_type
JMultiHistogram_t::ordinate_type ordinate_type
Definition: JTransformableMultiHistogram.hh:55
JTOOLS::w
data_type w[N+1][M+1]
Definition: JPolint.hh:708
JTOOLS::JTransformableMultiHistogram::const_iterator
JMultiHistogram_t::const_iterator const_iterator
Definition: JTransformableMultiHistogram.hh:57
JTOOLS::JTransformableMultiHistogram::abscissa_type
JMultiHistogram_t::abscissa_type abscissa_type
Definition: JTransformableMultiHistogram.hh:54
JTOOLS::JMultiHistogram::NUMBER_OF_DIMENSIONS
Definition: JMultiHistogram.hh:45
JTOOLS::JTransformableMultiHistogram::iterator
JMultiHistogram_t::iterator iterator
Definition: JTransformableMultiHistogram.hh:59
JTOOLS::JTransformableMultiHistogram::operator<<
friend JWriter & operator<<(JWriter &out, const JTransformableMultiHistogram &object)
Write transformable multidimensional histogram.
Definition: JTransformableMultiHistogram.hh:175
JSharedPointer.hh
JTOOLS::JArray< N, argument_type >
JTOOLS::JTransformableMultiHistogram::super_const_iterator
JMultiHistogram_t::super_const_iterator super_const_iterator
Definition: JTransformableMultiHistogram.hh:63
JTOOLS::JMultiHistogram::abscissa_type
multimap_type::abscissa_type abscissa_type
Definition: JMultiHistogram.hh:47
JTOOLS::JTransformableMultiHistogram::getTransformableMultiHistogram
const JTransformableMultiHistogram & getTransformableMultiHistogram() const
Get transformable multidimensional histogram.
Definition: JTransformableMultiHistogram.hh:82
JTOOLS::JMultiHistogram::super_iterator
multimap_type::super_iterator super_iterator
Definition: JMultiHistogram.hh:55
JTOOLS::JMultiHistogram::super_const_iterator
multimap_type::super_const_iterator super_const_iterator
Definition: JMultiHistogram.hh:56
JMultiHistogram.hh
JPP
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
Definition: JAAnetToolkit.hh:37
JTOOLS::JTransformableMultiHistogram::getTransformableMultiHistogram
JTransformableMultiHistogram & getTransformableMultiHistogram()
Get transformable multidimensional histogram.
Definition: JTransformableMultiHistogram.hh:93
JTOOLS::JTransformableMultiHistogram::contents_type
histogram_type::contents_type contents_type
Definition: JTransformableMultiHistogram.hh:51
JSerialisable.hh
JTOOLS::JTransformableMultiHistogram::histogram_type
JHistogram_t histogram_type
Definition: JTransformableMultiHistogram.hh:49
JTOOLS::JMultiMapTransformer
Interface for weight application and coordinate transformation of function.
Definition: JMultiMapTransformer.hh:35
JIO::JWriter
Interface for binary output.
Definition: JSerialisable.hh:131
JTOOLS::JMultiHistogram::const_reverse_iterator
multimap_type::const_reverse_iterator const_reverse_iterator
Definition: JMultiHistogram.hh:51
JTOOLS::JMultiMapPutTransformer
Auxiliary class to convert JMultiMapTransformer to JCollectionElementTransformer.
Definition: JMultiMapTransformer.hh:240
JMultiMapTransformer.hh
JTOOLS::JTransformableMultiHistogram::const_reverse_iterator
JMultiHistogram_t::const_reverse_iterator const_reverse_iterator
Definition: JTransformableMultiHistogram.hh:58
JTOOLS::JTransformableMultiHistogram::transformer_type
JMultiMapTransformer< JMapLength< JMaplist_t >::value, abscissa_type > transformer_type
Definition: JTransformableMultiHistogram.hh:65
JTOOLS::JMultiHistogram::ordinate_type
multimap_type::ordinate_type ordinate_type
Definition: JMultiHistogram.hh:48
JTOOLS::JMultiHistogram
Multidimensional histogram.
Definition: JMultiHistogram.hh:35
JTOOLS::JTransformableMultiHistogram::JTransformableMultiHistogram
JTransformableMultiHistogram()
Default constructor.
Definition: JTransformableMultiHistogram.hh:72
JTOOLS::JTransformableMultiHistogram::value_type
histogram_type::value_type value_type
Definition: JTransformableMultiHistogram.hh:52
JMultiMap.hh
JTOOLS::JMultiHistogram::const_iterator
multimap_type::const_iterator const_iterator
Definition: JMultiHistogram.hh:50
JTOOLS::JTransformableMultiHistogram::array_type
transformer_type::array_type array_type
Definition: JTransformableMultiHistogram.hh:66
JTOOLS::JTransformable
Abstract interface for transformable multidimensional map.
Definition: JMultiMapTransformer.hh:342
JTOOLS::JTransformableMultiHistogram
Transformable multidimensional histogram.
Definition: JTransformableMultiHistogram.hh:37
JTOOLS::JTransformableMultiHistogram::NUMBER_OF_DIMENSIONS
Definition: JTransformableMultiHistogram.hh:47
JTOOLS::JDistance
Template class for distance evaluation.
Definition: JDistance.hh:24
JTOOLS::JMultiHistogram::reverse_iterator
multimap_type::reverse_iterator reverse_iterator
Definition: JMultiHistogram.hh:53
JTOOLS::JTransformableMultiHistogram::transformer
JLANG::JSharedPointer< transformer_type > transformer
Definition: JTransformableMultiHistogram.hh:183
JTOOLS::JTransformableMultiHistogram::fill
void fill(const abscissa_type x,...)
Multidimensional fill method call.
Definition: JTransformableMultiHistogram.hh:105
JAANET::get
T get(const JHead &header)
Get object from header.
Definition: JHeadToolkit.hh:295
JTOOLS
Auxiliary classes and methods for multi-dimensional interpolations and histograms.
Definition: JAbstractCollection.hh:9
JTOOLS::JTransformableMultiHistogram::super_iterator
JMultiHistogram_t::super_iterator super_iterator
Definition: JTransformableMultiHistogram.hh:62
JTOOLS::JMultiHistogram::ap
va_list ap
Definition: JMultiHistogram.hh:114
JTOOLS::JMultiHistogram::iterator
multimap_type::iterator iterator
Definition: JMultiHistogram.hh:52
JLANG::JSharedPointer
The template JSharedPointer class can be used to share a pointer to an object.
Definition: JSharedPointer.hh:28
JTOOLS::JTransformableMultiHistogram::JMultiHistogram_t
JMultiHistogram< JHistogram_t, JMaplist_t, JDistance_t > JMultiHistogram_t
Definition: JTransformableMultiHistogram.hh:45
JTOOLS::JMultiHistogram::buffer
JArray< NUMBER_OF_DIMENSIONS, abscissa_type > buffer
Definition: JMultiHistogram.hh:115
JArray.hh