Geant4.10
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Public Member Functions | Protected Attributes
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 >:
c2_function< float_type > c2_const_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
 return the grid of 'interesting' points along this function which lie in the region requested More...
 
- 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

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

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

return the grid of 'interesting' points along this function which lie in the region requested

if a sampling grid is defined, work from there, otherwise return vector of (amin, amax)

Parameters
aminthe lower bound for which the function is to be sampled
amaxthe upper bound for which the function is to be sampled
[in,out]gridfilled vector containing the samplng grid.

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  }
virtual void get_sampling_grid(float_type amin, float_type amax, std::vector< float_type > &grid) const
return the grid of 'interesting' points along this function which lie in the region requested ...
the exception class for c2_function operations.
Definition: c2_function.hh:65
c2_ptr< float_type > func
Definition: c2_function.hh:817
std::vector< float_type > * sampling_grid
Definition: c2_function.hh:446
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.

Referenced by c2_const_plugin_function_p< G4double >::set_function().

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

Referenced by G4ScreenedCoulombClassicalKinematics::DoScreeningComputation().

808 { func.unset_function(); }
c2_ptr< float_type > func
Definition: c2_function.hh:817
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

Field Documentation

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

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