Clipper
Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
clipper::ResolutionFn Class Reference

2nd order resolution function evaluator More...

#include <resol_fn.h>

Inheritance diagram for clipper::ResolutionFn:
clipper::ResolutionFn_nonlinear

Public Member Functions

 ResolutionFn (const HKL_info &hkl_info, const BasisFn_base &basisfn, const TargetFn_base &targetfn, const std::vector< ftype > &params, const ftype damp=0.0, const bool debug=false)
 constructor: need reflections, basis fn and target fn. More...
 
ftype f (const HKL_info::HKL_reference_index &ih) const
 return the value of the basis function with the current paramters
 
const std::vector< ftype > & params () const
 return the values of the parameters More...
 
void debug () const
 print the target, gradient, and curvatures with respect to the params
 

Protected Member Functions

void calc_derivs (const std::vector< ftype > &params, ftype &r, std::vector< ftype > &drdp, Matrix<> &drdp2) const
 calculate derivatives of target wrt params More...
 
 ResolutionFn ()
 null constructor
 

Protected Attributes

const HKL_infohkl_info_
 reflection list
 
const TargetFn_basetargetfn_
 target function
 
const BasisFn_basebasisfn_
 basis function
 
std::vector< ftypeparams_
 basis function parameters
 
Cell cell_
 cell
 

Detailed Description

2nd order resolution function evaluator

This is an automatic evaluator for arbitrary functions of HKL, most commonly used for evaluating a function of resolution (such a mean F^2 or sigmaa), although more general tasks including local scaling of reflections and anisotropic functions can also be handled. This form is for target functions which approach zero quadratically, e.g. least-squares targets.

This version implements a naive Newton-Raphson minimiser, which only uses the gradient and curvature of the target function, ignoring its value. It is ideal for quadratic targets with linear basis functions.

To evaluate a resolution function, this class must be provided with two objects:

For example, the following code may be used to calculate a smooth scaling function to scale one set of data to another using an anisotropic Gaussian scaling function:

// make data object
// INITIALISE THEM HERE!
// calculate the scaling function
std::vector<clipper::ftype> params( 7, 0.0 ); // initial parameters
clipper::BasisFn_aniso_gaussian basisfn; // aniso gaussian
clipper::ResolutionFn_nonlinear rfn( hkls, basisfn, targetfn, params );
// now scale the data
for ( ih = hkls.first(); !ih.last(); ih.next() )
fsig1[ih].scale( sqrt( rfn.f(ih) ) );

The most useful isotropic resolution function is the BasisFn_spline, since it is linear and provides a good fit to most data.

Constructor & Destructor Documentation

clipper::ResolutionFn::ResolutionFn ( const HKL_info hkl_info,
const BasisFn_base basisfn,
const TargetFn_base targetfn,
const std::vector< ftype > &  params,
const ftype  damp = 0.0,
const bool  debug = false 
)

constructor: need reflections, basis fn and target fn.

The constructor performs the full minimisation calculation.

Parameters
hkl_infoHKL_info object which provides the reflection list.
basisfnThe basis function used to describe the desired property.
targetfnThe target function to be minimised.
paramsInitial values for the function parameters.
damp_If > 0.0, shifts are fdamped during early cycles to help convergence with difficult bases/target conbinations.

Member Function Documentation

const std::vector< ftype > & clipper::ResolutionFn::params ( ) const

return the values of the parameters

Returns
The refined basis function parameters
void clipper::ResolutionFn::calc_derivs ( const std::vector< ftype > &  params,
ftype r,
std::vector< ftype > &  drdp,
Matrix<> &  drdp2 
) const
protected

calculate derivatives of target wrt params

The target and its derivatives are calculated by the chain rule and accumulated over all HKLs.

Parameters
paramsCurrent value of parameters.
rThe value of the target function.
drdpThe derivative of the target function.
drdp2The curvature of the target function.

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