Jpp test-rotations-new
the software that should make you happy
Loading...
Searching...
No Matches
JMultiPDF.hh
Go to the documentation of this file.
1#ifndef __JTOOLS__JMULTIPDF__
2#define __JTOOLS__JMULTIPDF__
3
9
10
11/**
12 * \author mdejong
13 */
14
15namespace JTOOLS {}
16namespace JPP { using namespace JTOOLS; }
17
18namespace 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>
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
Histogram in 1D.
collection_type::const_iterator const_iterator
void compile()
Compilation.
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
JTransformableMultiFunction< JFunction_t, JMaplist_t, JDistance_t > transformablemultifunction_type
Definition JMultiPDF.hh:42
transformablemultifunction_type::const_iterator const_iterator
Definition JMultiPDF.hh:56
transformer_type::array_type array_type
Definition JMultiPDF.hh:65
transformablemultifunction_type::reverse_iterator reverse_iterator
Definition JMultiPDF.hh:59
JMultiPDF()
Default constructor.
Definition JMultiPDF.hh:73
JFunction_t function_type
Definition JMultiPDF.hh:46
transformablemultifunction_type::super_const_iterator super_const_iterator
Definition JMultiPDF.hh:62
JMultiMapTransformer< JMapLength< JMaplist_t >::value, argument_type > transformer_type
Definition JMultiPDF.hh:64
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::abscissa_type abscissa_type
Definition JMultiPDF.hh:52
transformablemultifunction_type::const_reverse_iterator const_reverse_iterator
Definition JMultiPDF.hh:57
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
JMultiPDF(const T &input)
Constructor.
Definition JMultiPDF.hh:83
transformablemultifunction_type::result_type result_type
Definition JMultiPDF.hh:54
transformablemultifunction_type::supervisor_type supervisor_type
Definition JMultiPDF.hh:50
transformablemultifunction_type::argument_type argument_type
Definition JMultiPDF.hh:49
transformablemultifunction_type::super_iterator super_iterator
Definition JMultiPDF.hh:61
transformablemultifunction_type::iterator iterator
Definition JMultiPDF.hh:58
void insert(const JMultiHistogram< JHistogram_t, JHistogramMaplist_t, JHistogramDistance_t > &input)
Insert multi-dimensional input.
Definition JMultiPDF.hh:97
void insert(const JTransformableMultiHistogram< JHistogram_t, JHistogramMaplist_t, JHistogramDistance_t > &input)
Insert multi-dimensional input.
Definition JMultiPDF.hh:109
transformablemultifunction_type::ordinate_type ordinate_type
Definition JMultiPDF.hh:53
Transformable multidimensional function.
multifunction_type::ordinate_type ordinate_type
multifunction_type::const_iterator const_iterator
multifunction_type::result_type result_type
multifunction_type::super_const_iterator super_const_iterator
multifunction_type::argument_type argument_type
multifunction_type::super_iterator super_iterator
multifunction_type::abscissa_type abscissa_type
std::shared_ptr< transformer_type > transformer
multifunction_type::supervisor_type supervisor_type
multifunction_type::reverse_iterator reverse_iterator
void insert(const JTransformableMultiFunction< __JFunction_t, __JMaplist_t, __JDistance_t > &input)
Insert multidimensional input.
multifunction_type::const_reverse_iterator const_reverse_iterator
Transformable multidimensional histogram.
std::shared_ptr< transformer_type > transformer
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
Auxiliary classes and methods for multi-dimensional interpolations and histograms.
void makePDF(const JHistogram1D< JElement_t, JContainer_t, JDistance_t > &input, typename JMappable< JElement_t >::map_type &output)
Conversion of histogram to probability density function (PDF).
int j
Definition JPolint.hh:801
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