Geant4  10.03.p03
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
c2_ratio_p< float_type > Class Template Reference

create a c2_function which is the ratio of two other c2_functions.This should always be constructed using c2_function::operator/() More...

#include <c2_function.hh>

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

Public Member Functions

 c2_ratio_p (const c2_function< float_type > &left, const c2_function< float_type > &right)
 construct left / right More...
 
 c2_ratio_p ()
 Create a stub just for the combiner to avoid statics. More...
 
- Public Member Functions inherited from c2_binary_function< float_type >
virtual float_type value_with_derivatives (float_type x, float_type *yprime, float_type *yprime2) const
 get the value and derivatives. More...
 
virtual ~c2_binary_function ()
 destructor releases ownership of member functions 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
 evaluate the function in the classic way, ignoring derivatives. More...
 
float_type operator() (float_type x, float_type *yprime, float_type *yprime2) const
 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
 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
 
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. 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
 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
 
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 More...
 
void increment_evaluations () const
 count evaluations More...
 
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 More...
 
virtual void set_sampling_grid (const std::vector< float_type > &grid)
 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...
 
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. More...
 
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 More...
 
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 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
 
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
 decrement our reference count. Do not destroy at zero. More...
 
void release_ownership () const
 
size_t count_owners () const
 get the reference count, mostly for debugging More...
 
void fill_fblock (c2_fblock< float_type > &fb) const
 fill in a c2_fblock<float_type>... a shortcut for the integrator & sampler More...
 

Static Public Member Functions

static float_type combine (const c2_function< float_type > &left, const c2_function< float_type > &right, float_type x, float_type *yprime, float_type *yprime2)
 execute math necessary to do division More...
 

Additional Inherited Members

- Public Attributes inherited from c2_binary_function< float_type >
float_type(*const combine )(const c2_function< float_type > &left, const c2_function< float_type > &right, float_type x, float_type *yprime, float_type *yprime2)
 
- Protected Member Functions inherited from c2_binary_function< float_type >
 c2_binary_function (float_type(*combiner)(const c2_function< float_type > &left, const c2_function< float_type > &right, float_type x, float_type *yprime, float_type *yprime2), const c2_function< float_type > &left, const c2_function< float_type > &right)
 
 c2_binary_function (float_type(*combiner)(const c2_function< float_type > &left, const c2_function< float_type > &right, float_type x, float_type *yprime, float_type *yprime2))
 
- 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 inherited from c2_binary_function< float_type >
const c2_const_ptr< float_type > Left
 
const c2_const_ptr< float_type > Right
 
bool stub
 
- 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...
 

Detailed Description

template<typename float_type>
class c2_ratio_p< float_type >

create a c2_function which is the ratio of two other c2_functions.

This should always be constructed using c2_function::operator/()

Definition at line 83 of file c2_function.hh.

Constructor & Destructor Documentation

template<typename float_type >
c2_ratio_p< float_type >::c2_ratio_p ( const c2_function< float_type > &  left,
const c2_function< float_type > &  right 
)
inline

construct left / right

Parameters
leftthe left function
rightthe right function

Definition at line 1209 of file c2_function.hh.

static float_type combine(const c2_function< float_type > &left, const c2_function< float_type > &right, float_type x, float_type *yprime, float_type *yprime2)
execute math necessary to do division
template<typename float_type >
c2_ratio_p< float_type >::c2_ratio_p ( )
inline

Create a stub just for the combiner to avoid statics.

Definition at line 1213 of file c2_function.hh.

static float_type combine(const c2_function< float_type > &left, const c2_function< float_type > &right, float_type x, float_type *yprime, float_type *yprime2)
execute math necessary to do division

Member Function Documentation

template<typename float_type >
static float_type c2_ratio_p< float_type >::combine ( const c2_function< float_type > &  left,
const c2_function< float_type > &  right,
float_type  x,
float_type *  yprime,
float_type *  yprime2 
)
inlinestatic

execute math necessary to do division

Definition at line 1216 of file c2_function.hh.

1220  {
1221  float_type y0, y1;
1222  if(yprime || yprime2) {
1223  float_type yp0, ypp0, yp1, ypp1;
1224  y0=left.value_with_derivatives(x, &yp0, &ypp0);
1225  y1=right.value_with_derivatives(x, &yp1, &ypp1);
1226  if(yprime) *yprime=(yp0*y1-y0*yp1)/(y1*y1); // first deriv of ratio
1227  if(yprime2) *yprime2=(y1*y1*ypp0+y0*(2*yp1*yp1-y1*ypp1)-2*y1*yp0*yp1)
1228  /(y1*y1*y1);
1229  } else {
1230  y0=left(x);
1231  y1=right(x);
1232  }
1233  return y0/y1;
1234  }
tuple x
Definition: test.py:50
virtual float_type value_with_derivatives(float_type x, float_type *yprime, float_type *yprime2) const =0
get the value and derivatives.

Here is the call graph for this function:


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