Jpp  18.2.0-rc.1
the software that should make you happy
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
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
function_type::argument_type argument_type
void insert(const JTransformableMultiFunction< __JFunction_t, __JMaplist_t, __JDistance_t > &input)
Insert multidimensional input.
void compile()
Compilation.
data_type w[N+1][M+1]
Definition: JPolint.hh:778
transformablemultifunction_type::const_reverse_iterator const_reverse_iterator
Definition: JMultiPDF.hh:57
multifunction_type::result_type result_type
Auxiliary base class for storing and loading a single object to and from a binary file...
Histogram map.
Transformable multidimensional function.
Template class for distance evaluation.
Definition: JDistance.hh:24
transformablemultifunction_type::abscissa_type abscissa_type
Definition: JMultiPDF.hh:52
multifunction_type::argument_type argument_type
transformablemultifunction_type::super_iterator super_iterator
Definition: JMultiPDF.hh:61
void insert(const JMultiHistogram< JHistogram_t, JHistogramMaplist_t, JHistogramDistance_t > &input)
Insert multi-dimensional input.
Definition: JMultiPDF.hh:97
Length of map list.
Definition: JMapList.hh:45
JLANG::JSharedPointer< transformer_type > transformer
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::const_iterator const_iterator
Definition: JMultiPDF.hh:56
transformablemultifunction_type::supervisor_type supervisor_type
Definition: JMultiPDF.hh:50
JMultiPDF(const T &input)
Constructor.
Definition: JMultiPDF.hh:83
Multidimensional key.
Definition: JMultiKey.hh:34
transformablemultifunction_type::iterator iterator
Definition: JMultiPDF.hh:58
JMultiPDF()
Default constructor.
Definition: JMultiPDF.hh:73
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
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).
JMultiMapTransformer< JMapLength< JMaplist_t >::value, argument_type > transformer_type
Definition: JMultiPDF.hh:64
JArray< NUMBER_OF_DIMENSIONS, argument_type > buffer
collection_type::const_iterator const_iterator
Transformable multidimensional histogram.
transformablemultifunction_type::reverse_iterator reverse_iterator
Definition: JMultiPDF.hh:59
do set_variable OUTPUT_DIRECTORY $WORKDIR T
This include file contains various recursive methods to operate on multi-dimensional collections...
JFunction_t function_type
Definition: JMultiPDF.hh:46
transformablemultifunction_type::super_const_iterator super_const_iterator
Definition: JMultiPDF.hh:62
General purpose class for multi-dimensional probability density function (PDF).
Definition: JMultiPDF.hh:34
One dimensional array of template objects with fixed length.
Definition: JArray.hh:40
multifunction_type::const_iterator const_iterator
multifunction_type::ordinate_type ordinate_type
then usage $script< input file >[option[primary[working directory]]] nWhere option can be N
Definition: JMuonPostfit.sh:40
transformablemultifunction_type::argument_type argument_type
Definition: JMultiPDF.hh:49
Multidimensional histogram.
multifunction_type::supervisor_type supervisor_type
JTransformableMultiFunction< JFunction_t, JMaplist_t, JDistance_t > transformablemultifunction_type
Definition: JMultiPDF.hh:42
Interface for weight application and coordinate transformation of function.
multifunction_type::abscissa_type abscissa_type
Histogram in 1D.
transformablemultifunction_type::ordinate_type ordinate_type
Definition: JMultiPDF.hh:53
int j
Definition: JPolint.hh:703
multifunction_type::super_iterator super_iterator
transformer_type::array_type array_type
Definition: JMultiPDF.hh:65
JLANG::JSharedPointer< transformer_type > transformer
multifunction_type::super_const_iterator super_const_iterator
transformablemultifunction_type::value_type value_type
Definition: JMultiPDF.hh:48
multifunction_type::const_reverse_iterator const_reverse_iterator
transformablemultifunction_type::result_type result_type
Definition: JMultiPDF.hh:54
void insert(const JTransformableMultiHistogram< JHistogram_t, JHistogramMaplist_t, JHistogramDistance_t > &input)
Insert multi-dimensional input.
Definition: JMultiPDF.hh:109
multifunction_type::reverse_iterator reverse_iterator