Jpp
JMultiPDF.hh
Go to the documentation of this file.
1 #ifndef __JTOOLS__JMULTIPDF__
2 #define __JTOOLS__JMULTIPDF__
3 
8 #include "JIO/JObjectBinaryIO.hh"
9 
10 
11 /**
12  * \author mdejong
13  */
14 
15 namespace JTOOLS {}
16 namespace JPP { using namespace JTOOLS; }
17 
18 namespace JTOOLS {
19 
21 
22 
23  /**
24  * General purpose class for multidimensional probability desnity function (PDF).
25  *
26  * This class is a simple wrapper around the JTransformableMultiFunction class
27  * to properly convert a multidimensional histogram to a multidimensional PDF.
28  * In this, the histogram contents in each bin are divided by the summed weight
29  * of the multidimensional histogram and the 'width' of the multidimensional bin.
30  */
31  template<class JFunction_t,
32  class JMaplist_t,
34  class JMultiPDF :
35  public JTransformableMultiFunction<JFunction_t, JMaplist_t, JDistance_t>,
36  public JObjectBinaryIO< JMultiPDF<JFunction_t, JMaplist_t, JDistance_t> >
37  {
38  public:
39 
40  typedef JTransformableMultiFunction<JFunction_t,
41  JMaplist_t,
43 
45 
46  typedef JFunction_t function_type;
47 
51 
55 
60 
63 
66 
68 
69 
70  /**
71  * Default constructor.
72  */
74  {}
75 
76 
77  /**
78  * Constructor.
79  *
80  * \param input multidimensional input
81  */
82  template<class T>
83  JMultiPDF(const T& input)
84  {
85  insert(input);
86 
87  this->compile();
88  }
89 
90 
91  /**
92  * Insert multidimensional input.
93  *
94  * \param input multidimensional histogram
95  */
96  template<class JHistogram_t, class JHistogramMaplist_t, class JHistogramDistance_t>
98  {
99  this->insert(JMultiKey<0, argument_type>(), input, input.getIntegral());
100  }
101 
102 
103  /**
104  * Insert multidimensional input.
105  *
106  * \param input multidimensional histogram
107  */
108  template<class JHistogram_t, class JHistogramMaplist_t, class JHistogramDistance_t>
110  {
111  this->transformer->reset(input.transformer->clone());
112 
113  this->insert(JMultiKey<0, argument_type>(), input, input.getIntegral());
114  }
115 
116  protected:
117  /**
118  * Insert multidimensional histogram at multidimensional key.
119  *
120  * \param key multidimensional key
121  * \param input multidimensional histogram
122  * \param weight weight
123  */
124  template<unsigned int N,
125  class __JAbscissa_t,
126  class __JContents_t,
127  template<class, class, class> class __JMap_t,
128  class __JDistance_t>
131  const double weight)
132  {
133  if (input.size() > 1) {
134 
135  for (typename JHistogramMap<__JAbscissa_t, __JContents_t, __JMap_t, __JDistance_t>::const_iterator j = input.begin(), i = j++; j != input.end(); ++i, ++j) {
136 
137  const argument_type x = 0.5 * (i->getX() + j->getX());
138  const double w = weight * input.getDistance(i->getX(), j->getX());
139 
140  insert(JMultiKey<N+1, argument_type>(key, x), i->getY(), w);
141  }
142  }
143  }
144 
145 
146  /**
147  * Convert one-dimensional histogram to PDF and insert result at given multidimensional key.
148  *
149  * \param key multidimensional key
150  * \param input histogram
151  * \param weight weight
152  */
153  template<class __JElement_t,
154  template<class, class> class __JContainer_t,
155  class __JDistance_t>
158  const double weight)
159  {
160  JFunction_t buffer;
161 
162  makePDF(input, buffer);
163 
164  buffer.div(weight);
165 
167  }
168  };
169 
170 
171  /**
172  * Conversion of multidimensional histogram to multidimensional PDF.
173  *
174  * \param input multidimensional histogram
175  * \param output multidimensional PDF
176  */
177  template<class JHistogram_t,
178  class JHistogramMaplist_t,
179  class JHistogramDistance_t,
180  class JFunction_t,
181  class JFunctionMaplist_t,
182  class JFunctionDistance_t>
185  {
186  output.insert(input);
187  }
188 }
189 
190 #endif
JTOOLS::JMultiPDF::super_const_iterator
transformablemultifunction_t::super_const_iterator super_const_iterator
Definition: JMultiPDF.hh:62
JTOOLS::JHistogram1D
Histogram in 1D.
Definition: JHistogram1D.hh:110
JTOOLS::JTransformableMultiFunction::iterator
multifunction_type::iterator iterator
Definition: JTransformableMultiFunction.hh:62
JTOOLS::w
data_type w[N+1][M+1]
Definition: JPolint.hh:708
JTOOLS::JMultiPDF::abscissa_type
transformablemultifunction_t::abscissa_type abscissa_type
Definition: JMultiPDF.hh:52
JTOOLS::JTransformableMultiFunction
Transformable multidimensional function.
Definition: JTransformableMultiFunction.hh:38
JTOOLS::JTransformableMultiFunction::NUMBER_OF_DIMENSIONS
Definition: JTransformableMultiFunction.hh:48
JTOOLS::JMultiPDF::reverse_iterator
transformablemultifunction_t::reverse_iterator reverse_iterator
Definition: JMultiPDF.hh:59
JTOOLS::JMultiPDF::ordinate_type
transformablemultifunction_t::ordinate_type ordinate_type
Definition: JMultiPDF.hh:53
JTOOLS::JMultiPDF::supervisor_type
transformablemultifunction_t::supervisor_type supervisor_type
Definition: JMultiPDF.hh:50
JTOOLS::JTransformableMultiFunction::abscissa_type
multifunction_type::abscissa_type abscissa_type
Definition: JTransformableMultiFunction.hh:56
JTOOLS::JArray< N, argument_type >
JTOOLS::JMultiPDF::array_type
transformer_type::array_type array_type
Definition: JMultiPDF.hh:65
JTOOLS::JHistogramMap::const_iterator
collection_type::const_iterator const_iterator
Definition: JHistogramMap.hh:41
JTOOLS::JMultiPDF::transformer_type
JMultiMapTransformer< JMapLength< JMaplist_t >::value, argument_type > transformer_type
Definition: JMultiPDF.hh:64
JTOOLS::j
int j
Definition: JPolint.hh:634
JTOOLS::JMapLength
Length of map list.
Definition: JMapList.hh:45
JTOOLS::JMultiPDF::const_reverse_iterator
transformablemultifunction_t::const_reverse_iterator const_reverse_iterator
Definition: JMultiPDF.hh:57
JTransformableMultiFunction.hh
JIO::JObjectBinaryIO
Auxiliary base class for storing and loading a single object to and from a binary file,...
Definition: JObjectBinaryIO.hh:23
JTOOLS::JArray::div
JArray & div(const double factor)
Scale array.
Definition: JArray.hh:382
JTOOLS::JMultiPDF::JMultiPDF
JMultiPDF()
Default constructor.
Definition: JMultiPDF.hh:73
JTOOLS::JMultiPDF::insert
void insert(const JMultiHistogram< JHistogram_t, JHistogramMaplist_t, JHistogramDistance_t > &input)
Insert multidimensional input.
Definition: JMultiPDF.hh:97
JTOOLS::JMultiPDF::iterator
transformablemultifunction_t::iterator iterator
Definition: JMultiPDF.hh:58
JPP
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
Definition: JAAnetToolkit.hh:37
JTransformableMultiHistogram.hh
JTOOLS::JMultiPDF::transformablemultifunction_t
JTransformableMultiFunction< JFunction_t, JMaplist_t, JDistance_t > transformablemultifunction_t
Definition: JMultiPDF.hh:42
JTOOLS::JTransformableMultiFunction::super_iterator
multifunction_type::super_iterator super_iterator
Definition: JTransformableMultiFunction.hh:65
JTOOLS::JMultiFunction::buffer
JArray< NUMBER_OF_DIMENSIONS, argument_type > buffer
Definition: JMultiFunction.hh:236
JTOOLS::JMultiPDF::insert
void insert(const JMultiKey< JMapLength< JMaplist_t >::value, argument_type > &key, const JHistogram1D< __JElement_t, __JContainer_t, __JDistance_t > &input, const double weight)
Convert one-dimensional histogram to PDF and insert result at given multidimensional key.
Definition: JMultiPDF.hh:156
JHistogramMap.hh
JTOOLS::JMultiPDF::result_type
transformablemultifunction_t::result_type result_type
Definition: JMultiPDF.hh:54
JToolsToolkit.hh
JTOOLS::JMultiPDF::argument_type
transformablemultifunction_t::argument_type argument_type
Definition: JMultiPDF.hh:49
JTOOLS::JTransformableMultiFunction::value_type
multifunction_type::value_type value_type
Definition: JTransformableMultiFunction.hh:52
JTOOLS::JMultiMapTransformer
Interface for weight application and coordinate transformation of function.
Definition: JMultiMapTransformer.hh:35
JTOOLS::JMultiPDF::super_iterator
transformablemultifunction_t::super_iterator super_iterator
Definition: JMultiPDF.hh:61
JTOOLS::JMultiPDF
General purpose class for multidimensional probability desnity function (PDF).
Definition: JMultiPDF.hh:34
JTOOLS::JTransformableMultiFunction::reverse_iterator
multifunction_type::reverse_iterator reverse_iterator
Definition: JTransformableMultiFunction.hh:63
JTOOLS::JMultiPDF::const_iterator
transformablemultifunction_t::const_iterator const_iterator
Definition: JMultiPDF.hh:56
JTOOLS::JMultiFunction::argument_type
JFunction_t::argument_type argument_type
Definition: JMultiFunction.hh:55
JTOOLS::makePDF
void makePDF(const JMultiHistogram< JHistogram_t, JHistogramMaplist_t, JHistogramDistance_t > &input, JMultiPDF< JFunction_t, JFunctionMaplist_t, JFunctionDistance_t > &output)
Conversion of multidimensional histogram to multidimensional PDF.
Definition: JMultiPDF.hh:183
JTOOLS::JTransformableMultiFunction::super_const_iterator
multifunction_type::super_const_iterator super_const_iterator
Definition: JTransformableMultiFunction.hh:66
JTOOLS::JTransformableMultiFunction::ordinate_type
multifunction_type::ordinate_type ordinate_type
Definition: JTransformableMultiFunction.hh:57
JTOOLS::JTransformableMultiFunction::transformer
JLANG::JSharedPointer< transformer_type > transformer
Definition: JTransformableMultiFunction.hh:279
JTOOLS::JMultiPDF::JMultiPDF
JMultiPDF(const T &input)
Constructor.
Definition: JMultiPDF.hh:83
JTOOLS::JTransformableMultiFunction::const_iterator
multifunction_type::const_iterator const_iterator
Definition: JTransformableMultiFunction.hh:60
JTOOLS::JMultiHistogram
Multidimensional histogram.
Definition: JMultiHistogram.hh:35
JTOOLS::JMultiPDF::insert
void insert(const JMultiKey< N, argument_type > &key, const JHistogramMap< __JAbscissa_t, __JContents_t, __JMap_t, __JDistance_t > &input, const double weight)
Insert multidimensional histogram at multidimensional key.
Definition: JMultiPDF.hh:129
JObjectBinaryIO.hh
JTOOLS::JMultiFunction::compile
void compile()
Compilation.
Definition: JMultiFunction.hh:143
JTOOLS::JTransformableMultiFunction::supervisor_type
multifunction_type::supervisor_type supervisor_type
Definition: JTransformableMultiFunction.hh:54
JTOOLS::JMultiKey
Forward declaration of template JMultiKey class.
Definition: JMultiKey.hh:29
JTOOLS::JTransformableMultiHistogram
Transformable multidimensional histogram.
Definition: JTransformableMultiHistogram.hh:37
JTOOLS::JDistance
Template class for distance evaluation.
Definition: JDistance.hh:24
JTOOLS::JMultiPDF::insert
void insert(const JTransformableMultiHistogram< JHistogram_t, JHistogramMaplist_t, JHistogramDistance_t > &input)
Insert multidimensional input.
Definition: JMultiPDF.hh:109
JTOOLS::JMultiPDF::function_type
JFunction_t function_type
Definition: JMultiPDF.hh:46
JTOOLS::JTransformableMultiHistogram::transformer
JLANG::JSharedPointer< transformer_type > transformer
Definition: JTransformableMultiHistogram.hh:183
JTOOLS::JTransformableMultiFunction::result_type
multifunction_type::result_type result_type
Definition: JTransformableMultiFunction.hh:58
JTOOLS
Auxiliary classes and methods for multi-dimensional interpolations and histograms.
Definition: JAbstractCollection.hh:9
JTOOLS::JTransformableMultiFunction::const_reverse_iterator
multifunction_type::const_reverse_iterator const_reverse_iterator
Definition: JTransformableMultiFunction.hh:61
JTOOLS::JTransformableMultiFunction::insert
void insert(const JTransformableMultiFunction< JPDF_t, JPDFMaplist_t, JPDFDistance_t > &input)
Insert multidimensional input.
Definition: JTransformableMultiFunction.hh:124
JTOOLS::JHistogramMap
Histogram map.
Definition: JHistogramMap.hh:28
JTOOLS::JMultiPDF::NUMBER_OF_DIMENSIONS
Definition: JMultiPDF.hh:44
JTOOLS::JMultiPDF::value_type
transformablemultifunction_t::value_type value_type
Definition: JMultiPDF.hh:48
JTOOLS::JTransformableMultiFunction::argument_type
multifunction_type::argument_type argument_type
Definition: JTransformableMultiFunction.hh:53