Jpp  master_rocky-40-g5f0272dcd
the software that should make you happy
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 multi-dimensional probability density function (PDF).
25  *
26  * This class is a simple wrapper around the JTransformableMultiFunction class
27  * to properly convert a multi-dimensional histogram to a multi-dimensional PDF.
28  * In this, the histogram contents in each bin are divided by the summed weight
29  * of the multi-dimensional histogram and the width (c.q. area) of the multi-dimensional 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 multi-dimensional 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 multi-dimensional input.
93  *
94  * \param input multi-dimensional 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 multi-dimensional input.
105  *
106  * \param input multi-dimensional 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  * Recursive method to insert multi-dimensional histogram at multi-dimensional key.
119  *
120  * \param key multi-dimensional key
121  * \param input multi-dimensional 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  * Termination method to insert multi-dimensional histogram at multi-dimensional key.
148  *
149  * Convert one-dimensional histogram to PDF, normalise PDF with given weight and insert result at given multi-dimensional key.
150  *
151  * \param key multi-dimensional key
152  * \param input histogram
153  * \param weight weight
154  */
155  template<class __JElement_t,
156  template<class, class> class __JContainer_t,
157  class __JDistance_t>
160  const double weight)
161  {
162  JFunction_t buffer;
163 
164  makePDF(input, buffer);
165 
166  buffer.div(weight);
167 
169  }
170  };
171 
172 
173  /**
174  * Conversion of multi-dimensional histogram to multi-dimensional PDF.
175  *
176  * \param input multi-dimensional histogram
177  * \param output multi-dimensional PDF
178  */
179  template<class JHistogram_t,
180  class JHistogramMaplist_t,
181  class JHistogramDistance_t,
182  class JFunction_t,
183  class JFunctionMaplist_t,
184  class JFunctionDistance_t>
187  {
188  output.insert(input);
189  }
190 }
191 
192 #endif
This include file contains various recursive methods to operate on multi-dimensional collections.
One dimensional array of template objects with fixed length.
Definition: JArray.hh:43
JArray & div(const double factor)
Scale array.
Definition: JArray.hh:416
Histogram in 1D.
collection_type::const_iterator const_iterator
Multidimensional histogram.
Multidimensional key.
Definition: JMultiKey.hh:69
Interface for weight application and coordinate transformation of function.
General purpose class for multi-dimensional probability density function (PDF).
Definition: JMultiPDF.hh:37
transformablemultifunction_type::value_type value_type
Definition: JMultiPDF.hh:48
transformablemultifunction_type::const_reverse_iterator const_reverse_iterator
Definition: JMultiPDF.hh:57
JMultiPDF()
Default constructor.
Definition: JMultiPDF.hh:73
transformer_type::array_type array_type
Definition: JMultiPDF.hh:65
transformablemultifunction_type::abscissa_type abscissa_type
Definition: JMultiPDF.hh:52
void insert(const JMultiKey< N, argument_type > &key, const JHistogramMap< __JAbscissa_t, __JContents_t, __JMap_t, __JDistance_t > &input, const double weight)
Recursive method to insert multi-dimensional histogram at multi-dimensional key.
Definition: JMultiPDF.hh:129
transformablemultifunction_type::iterator iterator
Definition: JMultiPDF.hh:58
transformablemultifunction_type::result_type result_type
Definition: JMultiPDF.hh:54
transformablemultifunction_type::reverse_iterator reverse_iterator
Definition: JMultiPDF.hh:59
transformablemultifunction_type::super_const_iterator super_const_iterator
Definition: JMultiPDF.hh:62
void insert(const JMultiKey< JMapLength< JMaplist_t >::value, argument_type > &key, const JHistogram1D< __JElement_t, __JContainer_t, __JDistance_t > &input, const double weight)
Termination method to insert multi-dimensional histogram at multi-dimensional key.
Definition: JMultiPDF.hh:158
transformablemultifunction_type::argument_type argument_type
Definition: JMultiPDF.hh:49
JMultiPDF(const T &input)
Constructor.
Definition: JMultiPDF.hh:83
transformablemultifunction_type::const_iterator const_iterator
Definition: JMultiPDF.hh:56
transformablemultifunction_type::ordinate_type ordinate_type
Definition: JMultiPDF.hh:53
JFunction_t function_type
Definition: JMultiPDF.hh:46
transformablemultifunction_type::supervisor_type supervisor_type
Definition: JMultiPDF.hh:50
void insert(const JMultiHistogram< JHistogram_t, JHistogramMaplist_t, JHistogramDistance_t > &input)
Insert multi-dimensional input.
Definition: JMultiPDF.hh:97
JTransformableMultiFunction< JFunction_t, JMaplist_t, JDistance_t > transformablemultifunction_type
Definition: JMultiPDF.hh:42
JMultiMapTransformer< JMapLength< JMaplist_t >::value, argument_type > transformer_type
Definition: JMultiPDF.hh:64
void insert(const JTransformableMultiHistogram< JHistogram_t, JHistogramMaplist_t, JHistogramDistance_t > &input)
Insert multi-dimensional input.
Definition: JMultiPDF.hh:109
transformablemultifunction_type::super_iterator super_iterator
Definition: JMultiPDF.hh:61
Transformable multidimensional function.
multifunction_type::const_iterator const_iterator
multifunction_type::result_type result_type
multifunction_type::ordinate_type ordinate_type
multifunction_type::abscissa_type abscissa_type
multifunction_type::const_reverse_iterator const_reverse_iterator
multifunction_type::supervisor_type supervisor_type
multifunction_type::super_const_iterator super_const_iterator
multifunction_type::super_iterator super_iterator
multifunction_type::argument_type argument_type
multifunction_type::reverse_iterator reverse_iterator
void insert(const JTransformableMultiFunction< __JFunction_t, __JMaplist_t, __JDistance_t > &input)
Insert multidimensional input.
Transformable multidimensional histogram.
JLANG::JSharedPointer< transformer_type > transformer
JAbstractHistogram< double > JHistogram_t
Type definition for scan along axis.
Definition: JBillabong.cc:61
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
Auxiliary classes and methods for multi-dimensional interpolations and histograms.
data_type w[N+1][M+1]
Definition: JPolint.hh:867
void makePDF(const JMultiHistogram< JHistogram_t, JHistogramMaplist_t, JHistogramDistance_t > &input, JMultiPDF< JFunction_t, JFunctionMaplist_t, JFunctionDistance_t > &output)
Conversion of multi-dimensional histogram to multi-dimensional PDF.
Definition: JMultiPDF.hh:185
int j
Definition: JPolint.hh:792
Auxiliary base class for storing and loading a single object to and from a binary file,...
Template class for distance evaluation.
Definition: JDistance.hh:24
Length of map list.
Definition: JMapList.hh:45