Jpp test-rotations-new
the software that should make you happy
Loading...
Searching...
No Matches
JPHYSICS::JPDFTable< JFunction1D_t, JMaplist_t, JDistance_t > Class Template Referenceabstract

Multi-dimensional PDF table for arrival time of Cherenkov light. More...

#include <JPDFTable.hh>

Inheritance diagram for JPHYSICS::JPDFTable< JFunction1D_t, JMaplist_t, JDistance_t >:
JTOOLS::JTransformableMultiFunction< JFunction_t, JMaplist_t, JDistance_t > JIO::JSerialisable JIO::JObjectBinaryIO< T > JTOOLS::JMultiFunction< JFunction_t, JMaplist_t, JDistance_t > JTOOLS::JTransformable< JMapLength< JMaplist_t >::value, JFunction_t::argument_type > JTOOLS::JMultiMap< JAbscissa_t, JOrdinate_t, JMaplist_t, JDistance_t >

Public Types

enum  { NUMBER_OF_DIMENSIONS = transformablemultifunction_type::NUMBER_OF_DIMENSIONS }
 
typedef JTransformableMultiFunction< JFunction1D_t, JMaplist_t, JDistance_t > transformablemultifunction_type
 
typedef transformablemultifunction_type::argument_type argument_type
 
typedef transformablemultifunction_type::result_type result_type
 
typedef transformablemultifunction_type::value_type value_type
 
typedef transformablemultifunction_type::multimap_type multimap_type
 
typedef transformablemultifunction_type::transformer_type transformer_type
 
typedef transformablemultifunction_type::super_const_iterator super_const_iterator
 
typedef transformablemultifunction_type::super_iterator super_iterator
 
typedef transformablemultifunction_type::function_type function_type
 
enum  { NUMBER_OF_DIMENSIONS = multifunction_type::NUMBER_OF_DIMENSIONS }
 
typedef JMultiFunction< JFunction_t, JMaplist_t, JDistance_t > multifunction_type
 
typedef multifunction_type::supervisor_type supervisor_type
 
typedef multifunction_type::abscissa_type abscissa_type
 
typedef multifunction_type::ordinate_type ordinate_type
 
typedef multifunction_type::const_iterator const_iterator
 
typedef multifunction_type::const_reverse_iterator const_reverse_iterator
 
typedef multifunction_type::iterator iterator
 
typedef multifunction_type::reverse_iterator reverse_iterator
 
typedef transformer_type::array_type array_type
 
enum  { NUMBER_OF_DIMENSIONS = JMapLength<JMaplist_t>::value + JFunction_t::NUMBER_OF_DIMENSIONS }
 

Public Member Functions

 JPDFTable ()
 Default constructor.
 
template<class __JFunction_t , class __JMaplist_t , class __JDistance_t >
 JPDFTable (const JTransformableMultiFunction< __JFunction_t, __JMaplist_t, __JDistance_t > &input)
 Constructor.
 
template<class JHistogram_t , class __JMaplist_t , class __JDistance_t >
 JPDFTable (const JTransformableMultiHistogram< JHistogram_t, __JMaplist_t, __JDistance_t > &input)
 Constructor.
 
void blur (const double TTS, const int numberOfPoints=25, const double epsilon=1.0e-10, const double quantile=0.99)
 Blur PDF.
 
void compress (const double Xmax, const JRange< typename function_type::abscissa_type > &range)
 Compresses PDF to given abscissa range.
 
virtual JReaderread (JReader &in) override
 Read from input.
 
virtual JWriterwrite (JWriter &out) const override
 Write from input.
 
template<class __JFunction_t , class __JMaplist_t , class __JDistance_t >
void insert (const JTransformableMultiFunction< __JFunction_t, __JMaplist_t, __JDistance_t > &input)
 Insert multidimensional input.
 
template<class JHistogram_t , class __JMaplist_t , class __JDistance_t >
void insert (const JTransformableMultiHistogram< JHistogram_t, __JMaplist_t, __JDistance_t > &input)
 Insert multidimensional input.
 
const JTransformableMultiFunctiongetTransformableMultiFunction () const
 Get transformable multidimensional function.
 
JTransformableMultiFunctiongetTransformableMultiFunction ()
 Get transformable multidimensional function.
 
template<class __JFunction_t , class __JMaplist_t , class __JDistance_t >
void insert (const JMultiFunction< __JFunction_t, __JMaplist_t, __JDistance_t > &input)
 Insert multidimensional input.
 
template<class JHistogram_t , class __JMaplist_t , class __JDistance_t >
void insert (const JMultiHistogram< JHistogram_t, __JMaplist_t, __JDistance_t > &input)
 Insert multidimensional input.
 
template<unsigned int N, class __JAbscissa_t , class __JContents_t , template< class, class, class > class __JMap_t, class __JDistance_t >
void insert (const JMultiKey< N, argument_type > &key, const JHistogramMap< __JAbscissa_t, __JContents_t, __JMap_t, __JDistance_t > &input)
 Insert multidimensional histogram at multidimensional key.
 
template<class __JElement_t , template< class, class > class __JContainer_t, class __JDistance_t >
void insert (const JMultiKey< JMapLength< JMaplist_t >::value, argument_type > &key, const JHistogram1D< __JElement_t, __JContainer_t, __JDistance_t > &input)
 Convert one-dimensional histogram to PDF and insert result at given multidimensional key.
 
template<class JHistogram_t , class __JMaplist_t , class __JDistance_t >
void insert (const JMultiKey< JMapLength< JMaplist_t >::value, argument_type > &key, const JMultiHistogram< JHistogram_t, __JMaplist_t, __JDistance_t > &input)
 Convert multidimensional histogram to PDF and insert result at given multidimensional key.
 
template<class JMultiFunction_t >
void add (const JMultiFunction_t &input)
 Add function.
 
template<class ... Args>
result_type operator() (const Args &...args) const
 Multidimensional interpolation method call.
 
virtual result_type evaluate (const argument_type *pX) const override
 Recursive function value evaluation.
 
virtual void transform (const transformer_type &transformer) override
 Application of weight function and coordinate transformation.
 
virtual void transform (const transformer_type &transformer)=0
 Application of transformation.
 
const JMultiFunctiongetMultiFunction () const
 Get multidimensional function.
 
JMultiFunctiongetMultiFunction ()
 Get multidimensional function.
 
void compile ()
 Compilation.
 
void setExceptionHandler (const typename function_type::supervisor_type &supervisor)
 Set the supervisor for handling of exceptions.
 
void load (const char *file_name)
 Load from input file.
 
void store (const char *file_name) const
 Store to output file.
 

Public Attributes

std::shared_ptr< transformer_typetransformer
 

Detailed Description

template<class JFunction1D_t, class JMaplist_t, class JDistance_t = JTOOLS::JDistance<typename JFunction1D_t::argument_type>>
class JPHYSICS::JPDFTable< JFunction1D_t, JMaplist_t, JDistance_t >

Multi-dimensional PDF table for arrival time of Cherenkov light.

Definition at line 40 of file JPDFTable.hh.

Member Typedef Documentation

◆ transformablemultifunction_type

template<class JFunction1D_t , class JMaplist_t , class JDistance_t = JTOOLS::JDistance<typename JFunction1D_t::argument_type>>
JTransformableMultiFunction<JFunction1D_t, JMaplist_t, JDistance_t> JPHYSICS::JPDFTable< JFunction1D_t, JMaplist_t, JDistance_t >::transformablemultifunction_type

Definition at line 47 of file JPDFTable.hh.

◆ argument_type

template<class JFunction1D_t , class JMaplist_t , class JDistance_t = JTOOLS::JDistance<typename JFunction1D_t::argument_type>>
transformablemultifunction_type::argument_type JPHYSICS::JPDFTable< JFunction1D_t, JMaplist_t, JDistance_t >::argument_type

Definition at line 49 of file JPDFTable.hh.

◆ result_type

template<class JFunction1D_t , class JMaplist_t , class JDistance_t = JTOOLS::JDistance<typename JFunction1D_t::argument_type>>
transformablemultifunction_type::result_type JPHYSICS::JPDFTable< JFunction1D_t, JMaplist_t, JDistance_t >::result_type

Definition at line 50 of file JPDFTable.hh.

◆ value_type

template<class JFunction1D_t , class JMaplist_t , class JDistance_t = JTOOLS::JDistance<typename JFunction1D_t::argument_type>>
transformablemultifunction_type::value_type JPHYSICS::JPDFTable< JFunction1D_t, JMaplist_t, JDistance_t >::value_type

Definition at line 51 of file JPDFTable.hh.

◆ multimap_type

template<class JFunction1D_t , class JMaplist_t , class JDistance_t = JTOOLS::JDistance<typename JFunction1D_t::argument_type>>
transformablemultifunction_type::multimap_type JPHYSICS::JPDFTable< JFunction1D_t, JMaplist_t, JDistance_t >::multimap_type

Definition at line 53 of file JPDFTable.hh.

◆ transformer_type

template<class JFunction1D_t , class JMaplist_t , class JDistance_t = JTOOLS::JDistance<typename JFunction1D_t::argument_type>>
transformablemultifunction_type::transformer_type JPHYSICS::JPDFTable< JFunction1D_t, JMaplist_t, JDistance_t >::transformer_type

Definition at line 54 of file JPDFTable.hh.

◆ super_const_iterator

template<class JFunction1D_t , class JMaplist_t , class JDistance_t = JTOOLS::JDistance<typename JFunction1D_t::argument_type>>
transformablemultifunction_type::super_const_iterator JPHYSICS::JPDFTable< JFunction1D_t, JMaplist_t, JDistance_t >::super_const_iterator

Definition at line 58 of file JPDFTable.hh.

◆ super_iterator

template<class JFunction1D_t , class JMaplist_t , class JDistance_t = JTOOLS::JDistance<typename JFunction1D_t::argument_type>>
transformablemultifunction_type::super_iterator JPHYSICS::JPDFTable< JFunction1D_t, JMaplist_t, JDistance_t >::super_iterator

Definition at line 59 of file JPDFTable.hh.

◆ function_type

template<class JFunction1D_t , class JMaplist_t , class JDistance_t = JTOOLS::JDistance<typename JFunction1D_t::argument_type>>
transformablemultifunction_type::function_type JPHYSICS::JPDFTable< JFunction1D_t, JMaplist_t, JDistance_t >::function_type

Definition at line 60 of file JPDFTable.hh.

◆ multifunction_type

template<class JFunction_t , class JMaplist_t , class JDistance_t = JDistance<typename JFunction_t::argument_type>>
JMultiFunction<JFunction_t, JMaplist_t, JDistance_t> JTOOLS::JTransformableMultiFunction< JFunction_t, JMaplist_t, JDistance_t >::multifunction_type
inherited

Definition at line 48 of file JTransformableMultiFunction.hh.

◆ supervisor_type

template<class JFunction_t , class JMaplist_t , class JDistance_t = JDistance<typename JFunction_t::argument_type>>
multifunction_type::supervisor_type JTOOLS::JTransformableMultiFunction< JFunction_t, JMaplist_t, JDistance_t >::supervisor_type
inherited

Definition at line 56 of file JTransformableMultiFunction.hh.

◆ abscissa_type

template<class JFunction_t , class JMaplist_t , class JDistance_t = JDistance<typename JFunction_t::argument_type>>
multifunction_type::abscissa_type JTOOLS::JTransformableMultiFunction< JFunction_t, JMaplist_t, JDistance_t >::abscissa_type
inherited

Definition at line 58 of file JTransformableMultiFunction.hh.

◆ ordinate_type

template<class JFunction_t , class JMaplist_t , class JDistance_t = JDistance<typename JFunction_t::argument_type>>
multifunction_type::ordinate_type JTOOLS::JTransformableMultiFunction< JFunction_t, JMaplist_t, JDistance_t >::ordinate_type
inherited

Definition at line 59 of file JTransformableMultiFunction.hh.

◆ const_iterator

template<class JFunction_t , class JMaplist_t , class JDistance_t = JDistance<typename JFunction_t::argument_type>>
multifunction_type::const_iterator JTOOLS::JTransformableMultiFunction< JFunction_t, JMaplist_t, JDistance_t >::const_iterator
inherited

Definition at line 62 of file JTransformableMultiFunction.hh.

◆ const_reverse_iterator

template<class JFunction_t , class JMaplist_t , class JDistance_t = JDistance<typename JFunction_t::argument_type>>
multifunction_type::const_reverse_iterator JTOOLS::JTransformableMultiFunction< JFunction_t, JMaplist_t, JDistance_t >::const_reverse_iterator
inherited

Definition at line 63 of file JTransformableMultiFunction.hh.

◆ iterator

template<class JFunction_t , class JMaplist_t , class JDistance_t = JDistance<typename JFunction_t::argument_type>>
multifunction_type::iterator JTOOLS::JTransformableMultiFunction< JFunction_t, JMaplist_t, JDistance_t >::iterator
inherited

Definition at line 64 of file JTransformableMultiFunction.hh.

◆ reverse_iterator

template<class JFunction_t , class JMaplist_t , class JDistance_t = JDistance<typename JFunction_t::argument_type>>
multifunction_type::reverse_iterator JTOOLS::JTransformableMultiFunction< JFunction_t, JMaplist_t, JDistance_t >::reverse_iterator
inherited

Definition at line 65 of file JTransformableMultiFunction.hh.

◆ array_type

template<class JFunction_t , class JMaplist_t , class JDistance_t = JDistance<typename JFunction_t::argument_type>>
transformer_type::array_type JTOOLS::JTransformableMultiFunction< JFunction_t, JMaplist_t, JDistance_t >::array_type
inherited

Definition at line 71 of file JTransformableMultiFunction.hh.

Member Enumeration Documentation

◆ anonymous enum

template<class JFunction1D_t , class JMaplist_t , class JDistance_t = JTOOLS::JDistance<typename JFunction1D_t::argument_type>>
anonymous enum

◆ anonymous enum

template<class JFunction_t , class JMaplist_t , class JDistance_t = JDistance<typename JFunction_t::argument_type>>
anonymous enum
inherited
Enumerator
NUMBER_OF_DIMENSIONS 

Definition at line 50 of file JTransformableMultiFunction.hh.

◆ anonymous enum

template<class JFunction_t , class JMaplist_t , class JDistance_t = JDistance<typename JFunction_t::argument_type>>
anonymous enum
inherited
Enumerator
NUMBER_OF_DIMENSIONS 

Definition at line 49 of file JMultiFunction.hh.

49{ NUMBER_OF_DIMENSIONS = JMapLength<JMaplist_t>::value + JFunction_t::NUMBER_OF_DIMENSIONS };

Constructor & Destructor Documentation

◆ JPDFTable() [1/3]

template<class JFunction1D_t , class JMaplist_t , class JDistance_t = JTOOLS::JDistance<typename JFunction1D_t::argument_type>>
JPHYSICS::JPDFTable< JFunction1D_t, JMaplist_t, JDistance_t >::JPDFTable ( )
inline

Default constructor.

Definition at line 68 of file JPDFTable.hh.

68 :
70 {}
JTransformableMultiFunction< JFunction1D_t, JMaplist_t, JDistance_t > transformablemultifunction_type
Definition JPDFTable.hh:47

◆ JPDFTable() [2/3]

template<class JFunction1D_t , class JMaplist_t , class JDistance_t = JTOOLS::JDistance<typename JFunction1D_t::argument_type>>
template<class __JFunction_t , class __JMaplist_t , class __JDistance_t >
JPHYSICS::JPDFTable< JFunction1D_t, JMaplist_t, JDistance_t >::JPDFTable ( const JTransformableMultiFunction< __JFunction_t, __JMaplist_t, __JDistance_t > & input)
inline

Constructor.

Parameters
inputmulti-dimensional function

Definition at line 79 of file JPDFTable.hh.

79 :
81 {}

◆ JPDFTable() [3/3]

template<class JFunction1D_t , class JMaplist_t , class JDistance_t = JTOOLS::JDistance<typename JFunction1D_t::argument_type>>
template<class JHistogram_t , class __JMaplist_t , class __JDistance_t >
JPHYSICS::JPDFTable< JFunction1D_t, JMaplist_t, JDistance_t >::JPDFTable ( const JTransformableMultiHistogram< JHistogram_t, __JMaplist_t, __JDistance_t > & input)
inline

Constructor.

Parameters
inputmulti-dimensional histogram

Definition at line 90 of file JPDFTable.hh.

90 :
92 {}

Member Function Documentation

◆ blur()

template<class JFunction1D_t , class JMaplist_t , class JDistance_t = JTOOLS::JDistance<typename JFunction1D_t::argument_type>>
void JPHYSICS::JPDFTable< JFunction1D_t, JMaplist_t, JDistance_t >::blur ( const double TTS,
const int numberOfPoints = 25,
const double epsilon = 1.0e-10,
const double quantile = 0.99 )
inline

Blur PDF.

The arrival times of Cherenkov light are smeared according to a Gaussian distribution with the specified width (i.e. TTS) using Gauss-Hermite integration. An exception is made when the time range according the specified quantile is smaller than the specified width (TTS) of the Gaussian distribution. In that case, the resulting PDF is a Gaussian distribution with the specified width (TTS) and normalisation according to the integral value of the input PDF. A smooth transition is imposed between the normal regime and this exeption.

Parameters
TTSTTS [ns]
numberOfPointsnumber of points for Gauss-Hermite integration
epsilonprecision
quantilequantile

Definition at line 111 of file JPDFTable.hh.

115 {
116 using namespace std;
117 using namespace JPP;
118
120
121 const JGaussHermite engine(numberOfPoints, epsilon);
122
123 for (super_iterator i = this->super_begin(); i != this->super_end(); ++i) {
124
125 const array_type array = (*i).getKey();
126 function_type& f1 = (*i).getValue();
127
128 if (!f1.empty()) {
129
130 const typename function_type::supervisor_type supervisor = f1.getSupervisor(); // copy
131
132 const JMultiMapGetTransformer<NUMBER_OF_DIMENSIONS - 1, value_type> get(*(this->transformer), array);
133 const JMultiMapPutTransformer<NUMBER_OF_DIMENSIONS - 1, value_type> put(*(this->transformer), array);
134
135 f1.transform(get);
136 f1.compile();
137
138 const JQuantiles Q(f1, quantile);
139
140 // abscissa
141
142 JSet<double> X;
143
144 for (JGaussHermite::const_iterator j = engine.begin(); j != engine.end(); ++j) {
145 X.insert(Q.getX() + TTS*sqrt(2.0)*j->getX());
146 }
147
148 for (typename function_type::const_iterator j = f1.begin(); j != f1.end(); ++j) {
149
150 if (j->getX() - TTS < X.getXmin()) {
151 X.insert(j->getX() - TTS);
152 }
153
154 if (j->getX() + TTS > X.getXmax()) {
155 X.insert(j->getX() + TTS);
156 }
157 }
158
159
160 const double W = gauss(Q.getUpperLimit() - Q.getLowerLimit(), TTS);
161
162 function_type buffer;
163
164 for (JSet<double>::const_iterator x = X.begin(); x != X.end(); ++x) {
165
166 double y = 0.0;
167
168 for (JGaussHermite::const_iterator j = engine.begin(); j != engine.end(); ++j) {
169
170 const double u = j->getX();
171 const double v = j->getY() / sqrt(PI);
172 const double w = get_value(f1(*x + u*TTS*sqrt(2.0)));
173
174 y += v * w;
175 }
176
177 buffer[*x] = W * Q.getIntegral() * Gauss(*x - Q.getX(), TTS) + (1.0 - W) * y;
178 }
179
180 buffer.transform(put);
181 buffer.compile();
182
183 f1 = buffer;
184
185 f1.setExceptionHandler(supervisor);
186 }
187 }
188 }
int numberOfPoints
Definition JResultPDF.cc:22
transformablemultifunction_type::function_type function_type
Definition JPDFTable.hh:60
transformablemultifunction_type::super_iterator super_iterator
Definition JPDFTable.hh:59
Numerical integrator for .
Auxiliary class to convert JMultiMapTransformer to JCollectionElementTransformer.
Auxiliary class to convert JMultiMapTransformer to JCollectionElementTransformer.
JArray< N, argument_type > array_type
Quantile calculator for a given function.
std::shared_ptr< transformer_type > transformer
const JPolynome f1(1.0, 2.0, 3.0)
Function.
double Gauss(const double x, const double sigma)
Normalised Gauss function.
double gauss(const double x, const double sigma)
Gauss function (normalised to 1 at x = 0).
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
int j
Definition JPolint.hh:801
Auxiliary data structure for return type of make methods.
Definition JVectorize.hh:28
double getValue(const double x) const
Function value.
Definition JMathlib.hh:1421
Simple data structure for an abstract collection of non-equidistant abscissa values.
Definition JSet.hh:34
virtual abscissa_type getXmin() const override
Get minimal abscissa value.
Definition JSet.hh:105
virtual abscissa_type getXmax() const override
Get maximal abscissa value.
Definition JSet.hh:116

◆ compress()

template<class JFunction1D_t , class JMaplist_t , class JDistance_t = JTOOLS::JDistance<typename JFunction1D_t::argument_type>>
void JPHYSICS::JPDFTable< JFunction1D_t, JMaplist_t, JDistance_t >::compress ( const double Xmax,
const JRange< typename function_type::abscissa_type > & range )
inline

Compresses PDF to given abscissa range.

Parameters
Xmaxmaximal value first abscissa
rangeaccepted range final abscissa

Definition at line 197 of file JPDFTable.hh.

198 {
199 static_cast<typename transformablemultifunction_type::container_type*>(this)->erase(this->lower_bound(Xmax), this->end());
200
201 for (super_iterator i = this->super_begin(); i != this->super_end(); ++i) {
202
204 function_type f2;
205
206 typename function_type::iterator p = f1.lower_bound(range.getLowerLimit());
207 typename function_type::iterator q = f1.lower_bound(range.getUpperLimit());
208
209 for (++q; p != q; ++p) {
210 f2.insert(*p);
211 }
212
213 f2.swap(f1);
214 }
215
216 this->compile();
217 }
void compile()
Compilation.

◆ read()

template<class JFunction1D_t , class JMaplist_t , class JDistance_t = JTOOLS::JDistance<typename JFunction1D_t::argument_type>>
virtual JReader & JPHYSICS::JPDFTable< JFunction1D_t, JMaplist_t, JDistance_t >::read ( JReader & in)
inlineoverridevirtual

Read from input.

Parameters
inreader
Returns
reader

Implements JIO::JSerialisable.

Definition at line 226 of file JPDFTable.hh.

227 {
228 if (in >> static_cast<transformablemultifunction_type&>(*this)) {
229
230 // read optional transformer
231
232 JPDFTransformer<NUMBER_OF_DIMENSIONS - 1, argument_type> buffer;
233
234 if (buffer.read(in)) {
235
236 this->transformer.reset(buffer.clone());
237
238 } else {
239
240 in.clear();
241
243 }
244 }
245
246 this->compile();
247
248 return in;
249 }
transformablemultifunction_type::argument_type argument_type
Definition JPDFTable.hh:49
static JMultiMapTransformer * getClone()
Get clone of default transformer.

◆ write()

template<class JFunction1D_t , class JMaplist_t , class JDistance_t = JTOOLS::JDistance<typename JFunction1D_t::argument_type>>
virtual JWriter & JPHYSICS::JPDFTable< JFunction1D_t, JMaplist_t, JDistance_t >::write ( JWriter & out) const
inlineoverridevirtual

Write from input.

Parameters
outwriter
Returns
writer

Implements JIO::JSerialisable.

Definition at line 258 of file JPDFTable.hh.

259 {
260 out << static_cast<const transformablemultifunction_type&>(*this);
261
262 this->transformer->write(out);
263
264 return out;
265 }

◆ insert() [1/7]

template<class JFunction1D_t , class JMaplist_t , class JDistance_t = JTOOLS::JDistance<typename JFunction1D_t::argument_type>>
template<class __JFunction_t , class __JMaplist_t , class __JDistance_t >
void JTOOLS::JTransformableMultiFunction< JFunction_t, JMaplist_t, JDistance_t >::insert ( const JTransformableMultiFunction< __JFunction_t, __JMaplist_t, __JDistance_t > & input)
inline

Insert multidimensional input.

Parameters
inputmultidimensional function

Definition at line 126 of file JTransformableMultiFunction.hh.

127 {
128 this->transformer.reset(input.transformer->clone());
129
131 }
void insert(const JMultiFunction< __JFunction_t, __JMaplist_t, __JDistance_t > &input)
Insert multidimensional input.

◆ insert() [2/7]

template<class JFunction1D_t , class JMaplist_t , class JDistance_t = JTOOLS::JDistance<typename JFunction1D_t::argument_type>>
template<class JHistogram_t , class __JMaplist_t , class __JDistance_t >
void JTOOLS::JTransformableMultiFunction< JFunction_t, JMaplist_t, JDistance_t >::insert ( const JTransformableMultiHistogram< JHistogram_t, __JMaplist_t, __JDistance_t > & input)
inline

Insert multidimensional input.

Parameters
inputmultidimensional histogram

Definition at line 140 of file JTransformableMultiFunction.hh.

141 {
142 this->transformer.reset(input.transformer->clone());
143
145 }

◆ getTransformableMultiFunction() [1/2]

template<class JFunction_t , class JMaplist_t , class JDistance_t = JDistance<typename JFunction_t::argument_type>>
const JTransformableMultiFunction & JTOOLS::JTransformableMultiFunction< JFunction_t, JMaplist_t, JDistance_t >::getTransformableMultiFunction ( ) const
inlineinherited

Get transformable multidimensional function.

Returns
this transformable multidimensional function

Definition at line 103 of file JTransformableMultiFunction.hh.

104 {
105 return static_cast<const JTransformableMultiFunction&>(*this);
106 }

◆ getTransformableMultiFunction() [2/2]

template<class JFunction_t , class JMaplist_t , class JDistance_t = JDistance<typename JFunction_t::argument_type>>
JTransformableMultiFunction & JTOOLS::JTransformableMultiFunction< JFunction_t, JMaplist_t, JDistance_t >::getTransformableMultiFunction ( )
inlineinherited

Get transformable multidimensional function.

Returns
this transformable multidimensional function

Definition at line 114 of file JTransformableMultiFunction.hh.

115 {
116 return static_cast<JTransformableMultiFunction&>(*this);
117 }

◆ insert() [3/7]

template<class JFunction_t , class JMaplist_t , class JDistance_t = JDistance<typename JFunction_t::argument_type>>
template<class __JFunction_t , class __JMaplist_t , class __JDistance_t >
void JTOOLS::JMultiFunction< JFunction_t, JMaplist_t, JDistance_t >::insert ( const JMultiFunction< __JFunction_t, __JMaplist_t, __JDistance_t > & input)
inlineinherited

Insert multidimensional input.

Parameters
inputmultidimensional function

Definition at line 121 of file JMultiFunction.hh.

122 {
123 copy(input, *this);
124 }
void copy(const T &input, T &output)
Copy of input to output.

◆ insert() [4/7]

template<class JFunction_t , class JMaplist_t , class JDistance_t = JDistance<typename JFunction_t::argument_type>>
template<class JHistogram_t , class __JMaplist_t , class __JDistance_t >
void JTOOLS::JMultiFunction< JFunction_t, JMaplist_t, JDistance_t >::insert ( const JMultiHistogram< JHistogram_t, __JMaplist_t, __JDistance_t > & input)
inlineinherited

Insert multidimensional input.

Parameters
inputmultidimensional histogram

Definition at line 133 of file JMultiFunction.hh.

134 {
135 this->insert(JMultiKey<0, argument_type>(), input);
136 }
void insert(const JTransformableMultiFunction< __JFunction_t, __JMaplist_t, __JDistance_t > &input)
Insert multidimensional input.

◆ insert() [5/7]

template<class JFunction_t , class JMaplist_t , class JDistance_t = JDistance<typename JFunction_t::argument_type>>
template<unsigned int N, class __JAbscissa_t , class __JContents_t , template< class, class, class > class __JMap_t, class __JDistance_t >
void JTOOLS::JMultiFunction< JFunction_t, JMaplist_t, JDistance_t >::insert ( const JMultiKey< N, argument_type > & key,
const JHistogramMap< __JAbscissa_t, __JContents_t, __JMap_t, __JDistance_t > & input )
inlineinherited

Insert multidimensional histogram at multidimensional key.

Parameters
keymultidimensional key
inputmultidimensional histogram

Definition at line 194 of file JMultiFunction.hh.

196 {
197 if (input.size() > 1) {
198
199 for (auto j = input.begin(), i = j++; j != input.end(); ++i, ++j) {
200
201 const argument_type x = 0.5 * (i->getX() + j->getX());
202
203 insert(JMultiKey<N+1, argument_type>(key, x), i->getY());
204 }
205 }
206 }
multifunction_type::argument_type argument_type

◆ insert() [6/7]

template<class JFunction_t , class JMaplist_t , class JDistance_t = JDistance<typename JFunction_t::argument_type>>
template<class __JElement_t , template< class, class > class __JContainer_t, class __JDistance_t >
void JTOOLS::JMultiFunction< JFunction_t, JMaplist_t, JDistance_t >::insert ( const JMultiKey< JMapLength< JMaplist_t >::value, argument_type > & key,
const JHistogram1D< __JElement_t, __JContainer_t, __JDistance_t > & input )
inlineinherited

Convert one-dimensional histogram to PDF and insert result at given multidimensional key.

Parameters
keymultidimensional key
inputhistogram

Definition at line 216 of file JMultiFunction.hh.

219 {
220 JFunction_t buffer;
221
222 makePDF(input, buffer);
223
224 multimap_type::insert(key, buffer);
225 }
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).

◆ insert() [7/7]

template<class JFunction_t , class JMaplist_t , class JDistance_t = JDistance<typename JFunction_t::argument_type>>
template<class JHistogram_t , class __JMaplist_t , class __JDistance_t >
void JTOOLS::JMultiFunction< JFunction_t, JMaplist_t, JDistance_t >::insert ( const JMultiKey< JMapLength< JMaplist_t >::value, argument_type > & key,
const JMultiHistogram< JHistogram_t, __JMaplist_t, __JDistance_t > & input )
inlineinherited

Convert multidimensional histogram to PDF and insert result at given multidimensional key.

Parameters
keymultidimensional key
inputmultidimensional histogram

Definition at line 235 of file JMultiFunction.hh.

237 {
238 JFunction_t buffer;
239
240 makePDF(input, buffer);
241
242 multimap_type::insert(key, buffer);
243 }

◆ add()

template<class JFunction_t , class JMaplist_t , class JDistance_t = JDistance<typename JFunction_t::argument_type>>
template<class JMultiFunction_t >
void JTOOLS::JTransformableMultiFunction< JFunction_t, JMaplist_t, JDistance_t >::add ( const JMultiFunction_t & input)
inlineinherited

Add function.

Note that the summation is made via iteration of the elements in this multidimensional function.

Parameters
inputmultidimensional function

Definition at line 156 of file JTransformableMultiFunction.hh.

157 {
158 for (super_iterator i = this->super_begin(); i != this->super_end(); ++i) {
159
160 const array_type array = (*i).getKey();
161 function_type& f1 = (*i).getValue();
162
163 if (!f1.empty()) {
164
165 const JMultiMapGetTransformer<NUMBER_OF_DIMENSIONS - 1, value_type> get(*(this->transformer), array);
166 const JMultiMapPutTransformer<NUMBER_OF_DIMENSIONS - 1, value_type> put(*(this->transformer), array);
167
168 f1.transform(get);
169
170 for (typename function_type::iterator j = f1.begin(); j != f1.end(); ++j) {
171
172 const JArray<NUMBER_OF_DIMENSIONS, argument_type> buffer(array, j->getX());
173
174 j->getY() += get_value(input.evaluate(buffer.data()));
175 }
176
177 f1.transform(put);
178 f1.compile();
179 }
180 }
181 }
multifunction_type::super_iterator super_iterator
JResultEvaluator< JResult_t >::result_type get_value(const JResult_t &value)
Helper method to recursively evaluate a to function value.
Definition JResult.hh:998

◆ operator()()

template<class JFunction_t , class JMaplist_t , class JDistance_t = JDistance<typename JFunction_t::argument_type>>
template<class ... Args>
result_type JTOOLS::JTransformableMultiFunction< JFunction_t, JMaplist_t, JDistance_t >::operator() ( const Args &... args) const
inlineinherited

Multidimensional interpolation method call.

Parameters
argscomma seperated list of abscissa values
Returns
function value

Definition at line 191 of file JTransformableMultiFunction.hh.

192 {
193 const JArray<NUMBER_OF_DIMENSIONS, argument_type> buffer(args...);
194
195 return this->evaluate(buffer.data());
196 }
virtual result_type evaluate(const argument_type *pX) const override
Recursive function value evaluation.

◆ evaluate()

template<class JFunction_t , class JMaplist_t , class JDistance_t = JDistance<typename JFunction_t::argument_type>>
virtual result_type JTOOLS::JTransformableMultiFunction< JFunction_t, JMaplist_t, JDistance_t >::evaluate ( const argument_type * pX) const
inlineoverridevirtualinherited

Recursive function value evaluation.

Parameters
pXpointer to abscissa values
Returns
function value

Definition at line 205 of file JTransformableMultiFunction.hh.

206 {
207 JArray<NUMBER_OF_DIMENSIONS, argument_type> buffer;
208
209 for (int i = 0; i != NUMBER_OF_DIMENSIONS; ++i) {
210 buffer[i] = pX[i];
211 }
212
213 buffer[NUMBER_OF_DIMENSIONS - 1] = transformer->putXn(buffer, buffer[NUMBER_OF_DIMENSIONS - 1]);
214
215 const result_type y = multifunction_type::evaluate(buffer.data());
216 const double W = transformer->getWeight(buffer);
217
219 }
multifunction_type::result_type result_type
static result_type transform(const JMultiMapTransformer< N, JArgument_t > &transformer, typename JMultiMapTransformer< N, JArgument_t >::const_array_type array, const result_type &result)

◆ transform() [1/2]

template<class JFunction_t , class JMaplist_t , class JDistance_t = JDistance<typename JFunction_t::argument_type>>
virtual void JTOOLS::JTransformableMultiFunction< JFunction_t, JMaplist_t, JDistance_t >::transform ( const transformer_type & transformer)
inlineoverridevirtualinherited

Application of weight function and coordinate transformation.

Parameters
transformerfunction transformer

Definition at line 227 of file JTransformableMultiFunction.hh.

228 {
229 for (super_iterator i = this->super_begin(); i != this->super_end(); ++i) {
230
231 const array_type array = (*i).getKey();
232 function_type& function = (*i).getValue();
233
234 const JMultiMapGetTransformer<NUMBER_OF_DIMENSIONS - 1, value_type> get(*(this->transformer), array);
235 const JMultiMapPutTransformer<NUMBER_OF_DIMENSIONS - 1, value_type> put( transformer, array);
236
237 function.transform(get);
238 function.transform(put);
239 }
240
241 this->transformer.reset(transformer.clone());
242 this->compile();
243 }

◆ transform() [2/2]

virtual void JTOOLS::JTransformable< N, JFunction_t::argument_type >::transform ( const transformer_type & transformer)
pure virtualinherited

Application of transformation.

Parameters
transformerfunction transformer

◆ getMultiFunction() [1/2]

template<class JFunction_t , class JMaplist_t , class JDistance_t = JDistance<typename JFunction_t::argument_type>>
const JMultiFunction & JTOOLS::JMultiFunction< JFunction_t, JMaplist_t, JDistance_t >::getMultiFunction ( ) const
inlineinherited

Get multidimensional function.

Returns
this multidimensional function

Definition at line 98 of file JMultiFunction.hh.

99 {
100 return static_cast<const JMultiFunction&>(*this);
101 }
JMultiFunction()
Default constructor.

◆ getMultiFunction() [2/2]

template<class JFunction_t , class JMaplist_t , class JDistance_t = JDistance<typename JFunction_t::argument_type>>
JMultiFunction & JTOOLS::JMultiFunction< JFunction_t, JMaplist_t, JDistance_t >::getMultiFunction ( )
inlineinherited

Get multidimensional function.

Returns
this multidimensional function

Definition at line 109 of file JMultiFunction.hh.

110 {
111 return static_cast<JMultiFunction&>(*this);
112 }

◆ compile()

template<class JFunction_t , class JMaplist_t , class JDistance_t = JDistance<typename JFunction_t::argument_type>>
void JTOOLS::JMultiFunction< JFunction_t, JMaplist_t, JDistance_t >::compile ( )
inlineinherited

Compilation.

Definition at line 142 of file JMultiFunction.hh.

143 {
144 this->for_each(compiler);
145
146 for (super_iterator i = this->super_begin(); i != this->super_end(); ++i) {
147 (*i).getValue().compile();
148 }
149 }
multimap_type::super_iterator super_iterator
static const JCompiler compiler
Function object for functional object compilation.
JObject_t & for_each(JObject_t &object, JType< JTypeList< JHead_t, JTail_t > > typelist, const JTuple< T > &tuple)
For each data type method.
Definition JTuple.hh:666

◆ setExceptionHandler()

template<class JFunction_t , class JMaplist_t , class JDistance_t = JDistance<typename JFunction_t::argument_type>>
void JTOOLS::JMultiFunction< JFunction_t, JMaplist_t, JDistance_t >::setExceptionHandler ( const typename function_type::supervisor_type & supervisor)
inlineinherited

Set the supervisor for handling of exceptions.

Parameters
supervisorsupervisor

Definition at line 157 of file JMultiFunction.hh.

158 {
159 this->for_each(supervisor);
160
161 for (super_iterator i = this->super_begin(); i != this->super_end(); ++i) {
162 (*i).getValue().setExceptionHandler(supervisor);
163 }
164 }

◆ load()

template<class T >
void JIO::JObjectBinaryIO< T >::load ( const char * file_name)
inlineinherited

Load from input file.

Parameters
file_namefile name

Definition at line 29 of file JObjectBinaryIO.hh.

30 {
31 JLANG::load<JFileStreamReader>(file_name, static_cast<T&>(*this));
32 }
void load(const std::string &file_name, T &object)
Load object from input file.
Definition JObjectIO.hh:55

◆ store()

template<class T >
void JIO::JObjectBinaryIO< T >::store ( const char * file_name) const
inlineinherited

Store to output file.

Parameters
file_namefile name

Definition at line 40 of file JObjectBinaryIO.hh.

41 {
42 JLANG::store<JFileStreamWriter>(file_name, static_cast<const T&>(*this));
43 }
void store(const std::string &file_name, const T &object)
Store object to output file.
Definition JObjectIO.hh:68

Member Data Documentation

◆ transformer

template<class JFunction_t , class JMaplist_t , class JDistance_t = JDistance<typename JFunction_t::argument_type>>
std::shared_ptr<transformer_type> JTOOLS::JTransformableMultiFunction< JFunction_t, JMaplist_t, JDistance_t >::transformer
inherited

Definition at line 276 of file JTransformableMultiFunction.hh.


The documentation for this class was generated from the following file: