Geant4  10.02.p03
c2_plugin_function_p< float_type > Class Template Reference

a container into which any other c2_function can be dropped, to allow expressions with replacable components.It is useful for plugging different InterpolatingFunctions into a c2_function expression. It saves a lot of effort in other places with casting away const declarations. More...

#include <c2_function.hh>

Inheritance diagram for c2_plugin_function_p< float_type >:
Collaboration diagram for c2_plugin_function_p< float_type >:

Public Member Functions

 c2_plugin_function_p ()
 construct the container with no function More...
 
 c2_plugin_function_p (c2_function< float_type > &f)
 construct the container with a pre-defined function More...
 
void set_function (c2_function< float_type > *f)
 fill the container with a new function, or clear it with a null pointer and copy our domain More...
 
virtual float_type value_with_derivatives (float_type x, float_type *yprime, float_type *yprime2) const throw (c2_exception)
 get the value and derivatives. More...
 
virtual ~c2_plugin_function_p ()
 destructor More...
 
void unset_function ()
 clear our function More...
 
virtual void get_sampling_grid (float_type amin, float_type amax, std::vector< float_type > &grid) const
 
- Public Member Functions inherited from c2_function< float_type >
const std::string cvs_header_vers () const
 get versioning information for the header file More...
 
const std::string cvs_file_vers () const
 get versioning information for the source file More...
 
virtual ~c2_function ()
 destructor More...
 
float_type operator() (float_type x) const throw (c2_exception)
 evaluate the function in the classic way, ignoring derivatives. More...
 
float_type operator() (float_type x, float_type *yprime, float_type *yprime2) const throw (c2_exception)
 get the value and derivatives. More...
 
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 throw (c2_exception)
 solve f(x)==value very efficiently, with explicit knowledge of derivatives of the function More...
 
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 throw (c2_exception)
 for points in xgrid, adaptively return Integral[f(x),{x,xgrid[i],xgrid[i+1]}] and return in vector, along with sum More...
 
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 throw (c2_exception)
 a fully-automated integrator which uses the information provided by the get_sampling_grid() function to figure out what to do. More...
 
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 throw (c2_exception)
 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 More...
 
float_type xmin () const
 return the lower bound of the domain for this function as set by set_domain() More...
 
float_type xmax () const
 return the upper bound of the domain for this function as set by set_domain() More...
 
void set_domain (float_type amin, float_type amax)
 set the domain for this function. More...
 
size_t get_evaluations () const
 this is a counter owned by the function but which can be used to monitor efficiency of algorithms. More...
 
void reset_evaluations () const
 reset the counter More...
 
void increment_evaluations () const
 count evaluations More...
 
bool check_monotonicity (const std::vector< float_type > &data, const char message[]) const throw (c2_exception)
 check that a vector is monotonic, throw an exception if not, and return a flag if it is reversed More...
 
virtual void set_sampling_grid (const std::vector< float_type > &grid) throw (c2_exception)
 establish a grid of 'interesting' points on the function. More...
 
std::vector< float_type > * get_sampling_grid_pointer () const
 get the sampling grid, which may be a null pointer More...
 
void preen_sampling_grid (std::vector< float_type > *result) const
 clean up endpoints on a grid of points More...
 
void refine_sampling_grid (std::vector< float_type > &grid, size_t refinement) const
 refine a grid by splitting each interval into more intervals More...
 
c2_function< float_type > & normalized_function (float_type amin, float_type amax, float_type norm=1.0) const throw (c2_exception)
 create a new c2_function from this one which is normalized on the interval More...
 
c2_function< float_type > & square_normalized_function (float_type amin, float_type amax, float_type norm=1.0) const throw (c2_exception)
 create a new c2_function from this one which is square-normalized on the interval More...
 
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 throw (c2_exception)
 create a new c2_function from this one which is square-normalized with the provided weight on the interval More...
 
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. More...
 
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. More...
 
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. More...
 
c2_ratio_p< float_type > & operator/ (const c2_function< float_type > &rhs) const
 factory function to create a c2_ratio_p from a regular algebraic expression. More...
 
c2_composed_function_p< float_type > & operator() (const c2_function< float_type > &inner) const
 compose this function outside another. More...
 
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. More...
 
void claim_ownership () const
 increment our reference count. Destruction is only legal if the count is zero. More...
 
size_t release_ownership_for_return () const throw (c2_exception)
 decrement our reference count. Do not destroy at zero. More...
 
void release_ownership () const throw (c2_exception)
 decrement our reference count. If the count reaches zero, destroy ourself. More...
 
size_t count_owners () const
 get the reference count, mostly for debugging More...
 
void fill_fblock (c2_fblock< float_type > &fb) const throw (c2_exception)
 fill in a c2_fblock<float_type>... a shortcut for the integrator & sampler More...
 

Protected Attributes

c2_ptr< float_type > func
 
- 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 More...
 

Additional Inherited Members

- 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)
 

Detailed Description

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

a container into which any other c2_function can be dropped, to allow expressions with replacable components.

It is useful for plugging different InterpolatingFunctions into a c2_function expression. It saves a lot of effort in other places with casting away const declarations.

It is also useful as a wrapper for a function if it is necessary to have a copy of a function which has a different domain or sampling grid than the parent function. This can be be used, for example, to patch badly-behaved functions with c2_piecewise_function_p by taking the parent function, creating two plugins of it with domains on each side of the nasty bit, and then inserting a nice function in the hole.

This can also be used as a fancier c2_ptr which allows direct evaluation instead of having to dereference the container first.

The factory function c2_factory::plugin_function() creates *new c2_plugin_function_p()

Definition at line 782 of file c2_function.hh.

Constructor & Destructor Documentation

◆ c2_plugin_function_p() [1/2]

template<typename float_type = double>
c2_plugin_function_p< float_type >::c2_plugin_function_p ( )
inline

construct the container with no function

Definition at line 786 of file c2_function.hh.

the parent class for all c2_functions.c2_functions know their value, first, and second derivative at ...
Definition: c2_function.hh:138
c2_ptr< float_type > func
Definition: c2_function.hh:817

◆ c2_plugin_function_p() [2/2]

template<typename float_type = double>
c2_plugin_function_p< float_type >::c2_plugin_function_p ( c2_function< float_type > &  f)
inline

construct the container with a pre-defined function

Definition at line 788 of file c2_function.hh.

788  :
the parent class for all c2_functions.c2_functions know their value, first, and second derivative at ...
Definition: c2_function.hh:138
c2_ptr< float_type > func
Definition: c2_function.hh:817

◆ ~c2_plugin_function_p()

template<typename float_type = double>
virtual c2_plugin_function_p< float_type >::~c2_plugin_function_p ( )
inlinevirtual

destructor

Definition at line 805 of file c2_function.hh.

805 { }

Member Function Documentation

◆ get_sampling_grid()

template<typename float_type = double>
virtual void c2_plugin_function_p< float_type >::get_sampling_grid ( float_type  amin,
float_type  amax,
std::vector< float_type > &  grid 
) const
inlinevirtual

Reimplemented from c2_function< float_type >.

Definition at line 810 of file c2_function.hh.

811  {
812  if(!func.valid()) throw c2_exception("c2_plugin_function_p called uninitialized");
813  if(this->sampling_grid) c2_function<float_type>::get_sampling_grid(amin, amax, grid);
814  else func->get_sampling_grid(amin, amax, grid);
815  }
the exception class for c2_function operations.
Definition: c2_function.hh:65
c2_ptr< float_type > func
Definition: c2_function.hh:817
virtual void get_sampling_grid(float_type amin, float_type amax, std::vector< float_type > &grid) const
return the grid of &#39;interesting&#39; points along this function which lie in the region requested ...
std::vector< float_type > * sampling_grid
Definition: c2_function.hh:446

◆ set_function()

template<typename float_type = double>
void c2_plugin_function_p< float_type >::set_function ( c2_function< float_type > *  f)
inline

fill the container with a new function, or clear it with a null pointer and copy our domain

Definition at line 792 of file c2_function.hh.

793  {
794  func.set_function(f);
795  if(f) this->set_domain(f->xmin(), f->xmax());
796  }
float_type xmin() const
return the lower bound of the domain for this function as set by set_domain()
Definition: c2_function.hh:297
void set_domain(float_type amin, float_type amax)
set the domain for this function.
Definition: c2_function.hh:301
float_type xmax() const
return the upper bound of the domain for this function as set by set_domain()
Definition: c2_function.hh:299
c2_ptr< float_type > func
Definition: c2_function.hh:817
Here is the caller graph for this function:

◆ unset_function()

template<typename float_type = double>
void c2_plugin_function_p< float_type >::unset_function ( )
inline

clear our function

Definition at line 808 of file c2_function.hh.

808 { func.unset_function(); }
c2_ptr< float_type > func
Definition: c2_function.hh:817
Here is the caller graph for this function:

◆ value_with_derivatives()

template<typename float_type = double>
virtual float_type c2_plugin_function_p< float_type >::value_with_derivatives ( float_type  x,
float_type *  yprime,
float_type *  yprime2 
) const
throw (c2_exception
)
inlinevirtual

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 needed.

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 Uses the internal function pointer set by set_function().

Implements c2_function< float_type >.

Definition at line 799 of file c2_function.hh.

800  {
801  if(!func.valid()) throw c2_exception("c2_plugin_function_p called uninitialized");
802  return func->value_with_derivatives(x, yprime, yprime2);
803  }
the exception class for c2_function operations.
Definition: c2_function.hh:65
c2_ptr< float_type > func
Definition: c2_function.hh:817

Member Data Documentation

◆ func

template<typename float_type = double>
c2_ptr<float_type> c2_plugin_function_p< float_type >::func
protected

Definition at line 817 of file c2_function.hh.


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