ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
c2_inverse_function_p< float_type > Class Template Reference

create the formal inverse function of another functionfor example, given a c2_function f More...

#include <geant4/tree/geant4-10.6-release/examples/extended/electromagnetic/TestEm7/include/c2_function.hh>

+ Inheritance diagram for c2_inverse_function_p< float_type >:
+ Collaboration diagram for c2_inverse_function_p< float_type >:

Public Member Functions

 c2_inverse_function_p (const c2_function< float_type > &source)
 Construct the operator.
 
virtual float_type value_with_derivatives (float_type x, float_type *yprime, float_type *yprime2) const
 get the value and derivatives.
 
void set_start_hint (float_type hint) const
 give the function a hint as to where to look for its inverse
 
virtual float_type get_start_hint (float_type x) const
 
void set_hinting_function (const c2_function< float_type > *hint_func)
 set or unset the approximate function used to start the root finder
 
void set_hinting_function (const c2_const_ptr< float_type > hint_func)
 set the hinting function from a pointer.
 
- Public Member Functions inherited from c2_function< float_type >
const std::string cvs_header_vers () const
 get versioning information for the header file
 
const std::string cvs_file_vers () const
 get versioning information for the source file
 
virtual ~c2_function ()
 destructor
 
float_type operator() (float_type x) const
 evaluate the function in the classic way, ignoring derivatives.
 
float_type operator() (float_type x, float_type *yprime, float_type *yprime2) const
 get the value and derivatives.
 
float_type find_root (float_type lower_bracket, float_type upper_bracket, float_type start, float_type value, int *error=0, float_type *final_yprime=0, float_type *final_yprime2=0) const
 solve f(x)==value very efficiently, with explicit knowledge of derivatives of the function
 
float_type partial_integrals (std::vector< float_type > xgrid, std::vector< float_type > *partials=0, float_type abs_tol=1e-12, float_type rel_tol=1e-12, int derivs=2, bool adapt=true, bool extrapolate=true) const
 
float_type integral (float_type amin, float_type amax, std::vector< float_type > *partials=0, float_type abs_tol=1e-12, float_type rel_tol=1e-12, int derivs=2, bool adapt=true, bool extrapolate=true) const
 a fully-automated integrator which uses the information provided by the get_sampling_grid() function to figure out what to do.
 
c2_piecewise_function_p
< float_type > * 
adaptively_sample (float_type amin, float_type amax, float_type abs_tol=1e-12, float_type rel_tol=1e-12, int derivs=2, std::vector< float_type > *xvals=0, std::vector< float_type > *yvals=0) const
 create a c2_piecewise_function_p from c2_connector_function_p segments which is a representation of the parent function to the specified accuracy, but maybe much cheaper to evaluate
 
float_type xmin () const
 
float_type xmax () const
 
void set_domain (float_type amin, float_type amax)
 
size_t get_evaluations () const
 
void reset_evaluations () const
 reset the counter
 
void increment_evaluations () const
 count evaluations
 
bool check_monotonicity (const std::vector< float_type > &data, const char message[]) const
 check that a vector is monotonic, throw an exception if not, and return a flag if it is reversed
 
virtual void set_sampling_grid (const std::vector< float_type > &grid)
 establish a grid of 'interesting' points on the function.
 
std::vector< float_type > * get_sampling_grid_pointer () const
 get the sampling grid, which may be a null pointer
 
virtual void get_sampling_grid (float_type amin, float_type amax, std::vector< float_type > &grid) const
 
void preen_sampling_grid (std::vector< float_type > *result) const
 The grid is modified in place.
 
void refine_sampling_grid (std::vector< float_type > &grid, size_t refinement) const
 
c2_function< float_type > & normalized_function (float_type amin, float_type amax, float_type norm=1.0) const
 create a new c2_function from this one which is normalized on the interval
 
c2_function< float_type > & square_normalized_function (float_type amin, float_type amax, float_type norm=1.0) const
 
c2_function< float_type > & square_normalized_function (float_type amin, float_type amax, const c2_function< float_type > &weight, float_type norm=1.0) const
 create a new c2_function from this one which is square-normalized with the provided weight on the interval
 
c2_sum_p< float_type > & operator+ (const c2_function< float_type > &rhs) const
 factory function to create a c2_sum_p from a regular algebraic expression.
 
c2_diff_p< float_type > & operator- (const c2_function< float_type > &rhs) const
 factory function to create a c2_diff_p from a regular algebraic expression.
 
c2_product_p< float_type > & operator* (const c2_function< float_type > &rhs) const
 factory function to create a c2_product_p from a regular algebraic expression.
 
c2_ratio_p< float_type > & operator/ (const c2_function< float_type > &rhs) const
 
c2_composed_function_p
< float_type > & 
operator() (const c2_function< float_type > &inner) const
 compose this function outside another.
 
float_type get_trouble_point () const
 Find out where a calculation ran into trouble, if it got a nan. If the most recent computation did not return a nan, this is undefined.
 
void claim_ownership () const
 increment our reference count. Destruction is only legal if the count is zero.
 
size_t release_ownership_for_return () const
 decrement our reference count. Do not destroy at zero.
 
void release_ownership () const
 
size_t count_owners () const
 get the reference count, mostly for debugging
 
void fill_fblock (c2_fblock< float_type > &fb) const
 fill in a c2_fblock<float_type>... a shortcut for the integrator & sampler
 

Protected Member Functions

 c2_inverse_function_p ()
 
- Protected Member Functions inherited from c2_function< float_type >
 c2_function (const c2_function< float_type > &src)
 
 c2_function ()
 
virtual void set_sampling_grid_pointer (std::vector< float_type > &grid)
 

Protected Attributes

float_type start_hint
 
const c2_const_ptr< float_type > func
 
c2_const_ptr< float_type > hinting_function
 
- Protected Attributes inherited from c2_function< float_type >
std::vector< float_type > * sampling_grid
 
bool no_overwrite_grid
 
float_type fXMin
 
float_type fXMax
 
size_t evaluations
 
float_type bad_x_point
 this point may be used to record where a calculation ran into trouble
 

Detailed Description

template<typename float_type = double>
class c2_inverse_function_p< float_type >

create the formal inverse function of another function

for example, given a c2_function f

c2_inverse_function<double> inv(f);
a=f(x);
x1=inv(a);

will return x1=x to machine precision. The important part of this is that the resulting function is a first-class c2_function, so it knows its derivatives, too, unlike the case of a simple root-finding inverse. This means it can be integrated (for example) quite efficiently.

See Also
ref combined_inversion_hinting_sampling

Definition at line 2100 of file c2_function.hh.

View newest version in sPHENIX GitHub at line 2100 of file c2_function.hh

Constructor & Destructor Documentation

template<typename float_type = double>
c2_inverse_function_p< float_type >::c2_inverse_function_p ( const c2_function< float_type > &  source)

Construct the operator.

Parameters
sourcethe function to be inverted
template<typename float_type = double>
c2_inverse_function_p< float_type >::c2_inverse_function_p ( )
inlineprotected

Definition at line 2153 of file c2_function.hh.

View newest version in sPHENIX GitHub at line 2153 of file c2_function.hh

Member Function Documentation

template<typename float_type = double>
virtual float_type c2_inverse_function_p< float_type >::get_start_hint ( float_type  x) const
inlinevirtual

Definition at line 2115 of file c2_function.hh.

View newest version in sPHENIX GitHub at line 2115 of file c2_function.hh

References c2_inverse_function_p< float_type >::hinting_function, and c2_inverse_function_p< float_type >::start_hint.

template<typename float_type = double>
void c2_inverse_function_p< float_type >::set_hinting_function ( const c2_function< float_type > *  hint_func)
inline

set or unset the approximate function used to start the root finder

A hinting function is mostly useful if the evaluation of this inverse is going to be carried out in very non-local order, so the root finder has to start over for each step. If most evaluations are going to be made in fairly localized clusters (scanning through the function, for example), the default mechanism used (which just remembers the last point) is almost certainly faster.

Typically, the hinting function is likely to be set up by creating the inverse function, and then adaptively sampling an interpolating function from it, and then using the result to hint it. Another way, if the parent function is already an interpolating function, is just to create a version of the parent with the x & y coordinates reversed.

See Also
ref combined_inversion_hinting_sampling
Parameters
hint_functhe function that is an approximate inverse of the parent of this inverse_function

Definition at line 2143 of file c2_function.hh.

View newest version in sPHENIX GitHub at line 2143 of file c2_function.hh

References c2_inverse_function_p< float_type >::hinting_function.

template<typename float_type = double>
void c2_inverse_function_p< float_type >::set_hinting_function ( const c2_const_ptr< float_type >  hint_func)
inline

set the hinting function from a pointer.

See discussion

Parameters
hint_functhe container holding the function

Definition at line 2149 of file c2_function.hh.

View newest version in sPHENIX GitHub at line 2149 of file c2_function.hh

References c2_inverse_function_p< float_type >::hinting_function.

template<typename float_type = double>
void c2_inverse_function_p< float_type >::set_start_hint ( float_type  hint) const
inline

give the function a hint as to where to look for its inverse

Parameters
hintthe likely value of the inverse, which defaults to whatever the evaluation returned.

Definition at line 2113 of file c2_function.hh.

View newest version in sPHENIX GitHub at line 2113 of file c2_function.hh

References c2_inverse_function_p< float_type >::start_hint.

template<typename float_type = double>
virtual float_type c2_inverse_function_p< float_type >::value_with_derivatives ( float_type  x,
float_type *  yprime,
float_type *  yprime2 
) const
virtual

get the value and derivatives.

There is required checking for null pointers on the derivatives, and most implementations should operate faster if derivatives are not

Parameters
[in]xthe point at which to evaluate the function
[out]yprimethe first derivative (if pointer is non-null)
[out]yprime2the second derivative (if pointer is non-null)
Returns
the value of the function

Implements c2_function< float_type >.

Member Data Documentation

template<typename float_type = double>
const c2_const_ptr<float_type> c2_inverse_function_p< float_type >::func
protected

Definition at line 2155 of file c2_function.hh.

View newest version in sPHENIX GitHub at line 2155 of file c2_function.hh

template<typename float_type = double>
c2_const_ptr<float_type> c2_inverse_function_p< float_type >::hinting_function
protected

Definition at line 2156 of file c2_function.hh.

View newest version in sPHENIX GitHub at line 2156 of file c2_function.hh

Referenced by c2_inverse_function_p< float_type >::get_start_hint(), and c2_inverse_function_p< float_type >::set_hinting_function().

template<typename float_type = double>
float_type c2_inverse_function_p< float_type >::start_hint
mutableprotected

Definition at line 2154 of file c2_function.hh.

View newest version in sPHENIX GitHub at line 2154 of file c2_function.hh

Referenced by c2_inverse_function_p< float_type >::get_start_hint(), and c2_inverse_function_p< float_type >::set_start_hint().


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