FOX/ObjCryst++  1.10.X (development)
ObjCryst::RefinablePar Class Reference

Generic class for parameters of refinable objects. More...

+ Inheritance diagram for ObjCryst::RefinablePar:
+ Collaboration diagram for ObjCryst::RefinablePar:

Public Member Functions

void XMLOutput (ostream &os, const string &name, int indent=0) const
 XMLOutput to stream in well-formed XML. More...
 
void XMLOutput (ostream &os, int indent=0) const
 XMLOutput to stream in well-formed XML. More...
 
void XMLInput (istream &is, const XMLCrystTag &tag)
 XMLInput From stream. More...
 
Destructor & Constructors
 RefinablePar ()
 Default Constructor.
 
 RefinablePar (const string &name, REAL *refPar, const REAL min, const REAL max, const RefParType *type, RefParDerivStepModel derivMode=REFPAR_DERIV_STEP_RELATIVE, const bool hasLimits=true, const bool isFixed=false, const bool isUsed=true, const bool isPeriodic=false, const REAL humanScale=1., REAL period=1.)
 Constructor. More...
 
 RefinablePar (const RefinablePar &ref)
 Copy Constructor.
 
 ~RefinablePar ()
 
void Init (const string &name, REAL *refPar, const REAL min, const REAL max, const RefParType *type, RefParDerivStepModel derivMode=REFPAR_DERIV_STEP_RELATIVE, const bool hasLimits=true, const bool isFixed=false, const bool isUsed=true, const bool isPeriodic=false, const REAL humanScale=1., REAL period=1.)
 Constructor. More...
 
void CopyAttributes (const RefinablePar &)
 Copy all attributes (limits, flags, etc...) from another RefinablePar object. More...
 
Access & change the current value of the parameter
REAL GetValue () const
 of the parameter. More...
 
const REAL * GetPointer () const
 Access to a const pointer to the refined value. More...
 
void SetValue (const REAL value)
 of the parameter. More...
 
const REAL & GetHumanValue () const
 Current value of parameter, scaled if necessary (for angles) to a human-understandable value.
 
void SetHumanValue (const REAL &)
 Current value of parameter, scaled if necessary (for angles) to a human-understandable value.
 
void Mutate (const REAL mutateValue)
 Add the given amount to the parameter current value. More...
 
void MutateTo (const REAL newValue)
 Change the current value to the given one. More...
 
REAL GetSigma () const
 
REAL GetHumanSigma () const
 
void SetSigma (const REAL)
 
General info
string GetName () const
 Get the parameter's name.
 
void SetName (const string &)
 Set the name of the parameter. It should be unique in the RefinableObj.
 
void Print () const
 
bool IsFixed () const
 
void SetIsFixed (const bool)
 
bool IsLimited () const
 
void SetIsLimited (const bool)
 
bool IsUsed () const
 Is the parameter used (if not, it is simply irrelevant in the model) ?
 
void SetIsUsed (const bool)
 Is the parameter used (if not, it is simply irrelevant in the model) ?
 
bool IsPeriodic () const
 
void SetIsPeriodic (const bool, REAL period=1)
 
REAL GetHumanScale () const
 Human scale for this parameter : for angles, this is equal to 180/pi.
 
void SetHumanScale (const REAL)
 Human scale for this parameter : for angles, this is equal to 180/pi.
 
Min, max values
REAL GetMin () const
 Minimum value allowed (if limited or periodic)
 
void SetMin (const REAL)
 Set the Minimum value allowed (if limited)
 
REAL GetHumanMin () const
 Get the minimum value allowed (if limited)
 
void SetHumanMin (const REAL)
 Set the minimum value allowed (if limited)
 
REAL GetMax () const
 Get the maximum value allowed (if limited)
 
void SetMax (const REAL)
 Get the maximum value allowed (if limited)
 
REAL GetHumanMax () const
 Get the maximum value allowed (if limited)
 
void SetHumanMax (const REAL)
 Get the maximum value allowed (if limited)
 
REAL GetPeriod () const
 Get the period (if periodic)
 
void SetPeriod (const REAL)
 Set the period value (if periodic)
 
Steps during refinement
REAL GetDerivStep () const
 Fixed step to use to compute numerical derivative.
 
void SetDerivStep (const REAL)
 Fixed step to use to compute numerical derivative.
 
REAL GetGlobalOptimStep () const
 Maximum step to use during Global Optimization algorithms.
 
void SetGlobalOptimStep (const REAL)
 Maximum step to use during Global Optimization algorithms.
 
Parameter's Clock
void AssignClock (RefinableObjClock &clock)
 
Change Limits
void SetLimitsAbsolute (const REAL min, const REAL max)
 Change the limits for this object, giving absolute new limits.
 
void SetLimitsRelative (const REAL min, const REAL max)
 Change the limits for this object, giving relative new limits (eg giving -.1 and +.1 will set new limits at the current value + min and current value + max) Thus min should logically be <0 and max >0. More...
 
void SetLimitsProportional (const REAL min, const REAL max)
 Change the limits for this object, proportionnaly to the current value. More...
 
- Public Member Functions inherited from ObjCryst::Restraint
 Restraint ()
 Default constructor, sets RefParType to gpRefParTypeObjCryst.
 
 Restraint (const RefParType *type)
 constructor specifying the type
 
virtual const RefParTypeGetType () const
 
virtual void SetType (const RefParType *type)
 
virtual REAL GetLogLikelihood () const
 Get -ln(likelihood) for this restraint.
 

Private Member Functions

void Click ()
 Click the Clock ! to telle the RefinableObj it has been modified.
 

Private Attributes

string mName
 name of the refinable parameter
 
REAL * mpValue
 Pointer to the refinable value.
 
REAL mMin
 Hard lower and upper limits.
 
REAL mMax
 
bool mHasLimits
 Does the refinable parameter need limits (min and max) ?
 
bool mIsFixed
 is the parameter currently fixed ?
 
bool mIsUsed
 Is the parameter currently used ?
 
bool mIsPeriodic
 Is the parameter periodic ? If this is the case, then when using the RefinablePar::Mutate() function, if the parameter goes beyond its limits, it will be shifted by the value of its period. More...
 
REAL mPeriod
 Period value (if relevant)
 
REAL mGlobalOptimStep
 Step to use for global method search (simulated annealing,...)
 
REAL mDerivStep
 Step to use for numerical derivative calculation.
 
RefParDerivStepModel mRefParDerivStepModel
 Model followed for derivation.
 
REAL mSigma
 Calculated sigma on value.
 
REAL mHumanScale
 Scale to be used to display 'human' value. More...
 
bool mHasAssignedClock
 Is there a clock associated with this parameter ? If yes, then it must Click() it each time it is modified.
 
RefinableObjClockmpClock
 

Friends

class RefinableObj
 

Detailed Description

Generic class for parameters of refinable objects.

These must be continuous.

Todo:

: define parameters using equations between parameters.

: for complex objects with lots of parameters, give the possibility to define vectors of parameters, all with the same properties, to reduce memory usage.

Definition at line 223 of file RefinableObj.h.

Constructor & Destructor Documentation

ObjCryst::RefinablePar::RefinablePar ( const string &  name,
REAL *  refPar,
const REAL  min,
const REAL  max,
const RefParType type,
RefParDerivStepModel  derivMode = REFPAR_DERIV_STEP_RELATIVE,
const bool  hasLimits = true,
const bool  isFixed = false,
const bool  isUsed = true,
const bool  isPeriodic = false,
const REAL  humanScale = 1.,
REAL  period = 1. 
)

Constructor.

name: the name of the parameter
refPar: the address of the refined parameter
min,max: the minimum & maximum value for this parameter. Only used
if the parameter is limited.
type: the type (category) of refinable parameter. This is used to (de)activate
groups of parameters.
derivMode: to compute numerical (partial) derivatives, the step used is either
an absolute (fixed) value, or it can be proportionnal to the current value of the parameter.
hasLimits: if true, then the parameter cannot exceed its limits.
isFixed: if true, the parameter cannot be refined.
isUsed: if false, then the parameter does not affect in any way the refined object,
and thus is simply ignored and should never appear to the user.
isPeriodic: if true, then when the parameter exceeds one of its limits, it is
shifted by the period (=max-min), in order to be back to the allowed [min,max] range.
humanScale:this is the scale which should be used to display the value to the
end program user. This is mostly used for angles: the values are stored in radians, so that a scale equal to 180/pi must be used for a 'human-understandable' value. Use the RefinablePar::HumanValue() in order to get this value. By default it is equal to 1.0 (no scaling required).

Definition at line 234 of file RefinableObj.cpp.

Member Function Documentation

void ObjCryst::RefinablePar::AssignClock ( RefinableObjClock clock)

Assign a clock to this parameter. Any time this parameter is modified, the clock will be ticked !

Definition at line 663 of file RefinableObj.cpp.

void ObjCryst::RefinablePar::CopyAttributes ( const RefinablePar old)

Copy all attributes (limits, flags, etc...) from another RefinablePar object.

This is useful in RefinableObj copy constructors. Everything is copied but the pointer to the value refined, and the pointer to the clock.

Definition at line 315 of file RefinableObj.cpp.

const REAL * ObjCryst::RefinablePar::GetPointer ( ) const

Access to a const pointer to the refined value.

This can be used to identify the parameter

Definition at line 352 of file RefinableObj.cpp.

REAL ObjCryst::RefinablePar::GetValue ( ) const

of the parameter.

Use the The Mutate() and MutateTo() function to change this value.

Definition at line 337 of file RefinableObj.cpp.

void ObjCryst::RefinablePar::Init ( const string &  name,
REAL *  refPar,
const REAL  min,
const REAL  max,
const RefParType type,
RefParDerivStepModel  derivMode = REFPAR_DERIV_STEP_RELATIVE,
const bool  hasLimits = true,
const bool  isFixed = false,
const bool  isUsed = true,
const bool  isPeriodic = false,
const REAL  humanScale = 1.,
REAL  period = 1. 
)

Constructor.

name: the name of the parameter
refPar: the address of the refined parameter
min,max: the minimum & maximum value for this parameter. Only used
if the parameter is limited.
type: the type (category) of refinable parameter. This is used to (de)activate
groups of parameters.
derivMode: to compute numerical (partial) derivatives, the step used is either
an absolute (fixed) value, or it can be proportionnal to the current value of the parameter.
hasLimits: if true, then the parameter cannot exceed its limits.
isFixed: if true, the parameter cannot be refined.
isUsed: if false, then the parameter does not affect in any way the refined object,
and thus is simply ignored and should never appear to the user.
isPeriodic: if true, then when the parameter exceeds one of its limits, it is
shifted by the period (=max-min), in order to be back to the allowed [min,max] range.
humanScale:this is the scale which should be used to display the value to the
end program user. This is mostly used for angles: the values are stored in radians, so that a scale equal to 180/pi must be used for a 'human-understandable' value. Use the RefinablePar::HumanValue() in order to get this value. By default it is equal to 1.0 (no scaling required).

Definition at line 267 of file RefinableObj.cpp.

void ObjCryst::RefinablePar::Mutate ( const REAL  mutateValue)

Add the given amount to the parameter current value.

If limit is hit, set to limit. If the limit is hit and the parameter is periodic, shift by period to bring back to allowed values.

Warning
Will throw an exception if the parameter is defined by an equation.

Definition at line 444 of file RefinableObj.cpp.

void ObjCryst::RefinablePar::MutateTo ( const REAL  newValue)

Change the current value to the given one.

If the limit is hit, then set to the limit (unless the pameter is periodic, then shift by the period amount back to allowed values).

Warning
Will throw an exception if the parameter is defined by an equation.

Definition at line 487 of file RefinableObj.cpp.

void ObjCryst::RefinablePar::SetLimitsProportional ( const REAL  min,
const REAL  max 
)

Change the limits for this object, proportionnaly to the current value.

min should be < 1. and max > 1.

Definition at line 693 of file RefinableObj.cpp.

void ObjCryst::RefinablePar::SetLimitsRelative ( const REAL  min,
const REAL  max 
)

Change the limits for this object, giving relative new limits (eg giving -.1 and +.1 will set new limits at the current value + min and current value + max) Thus min should logically be <0 and max >0.

Definition at line 685 of file RefinableObj.cpp.

void ObjCryst::RefinablePar::SetValue ( const REAL  value)

of the parameter.

Use the The Mutate() and MutateTo() function to change this value.

Definition at line 357 of file RefinableObj.cpp.

void ObjCryst::RefinablePar::XMLInput ( istream &  is,
const XMLCrystTag tag 
)

XMLInput From stream.

Definition at line 229 of file RefinableObj/IO.cpp.

void ObjCryst::RefinablePar::XMLOutput ( ostream &  os,
const string &  name,
int  indent = 0 
) const

XMLOutput to stream in well-formed XML.

this will save the fixed & limited flags, as well as limits

Parameters
namethe name to use instead of the RefPar name.

Definition at line 184 of file RefinableObj/IO.cpp.

void ObjCryst::RefinablePar::XMLOutput ( ostream &  os,
int  indent = 0 
) const

XMLOutput to stream in well-formed XML.

this will save the fixed & limited flags, as well as limits. In this function the name used is that of the RefPar.

Definition at line 224 of file RefinableObj/IO.cpp.

Member Data Documentation

REAL ObjCryst::RefinablePar::mHumanScale
private

Scale to be used to display 'human' value.

This is for angular parameters: the computer stores values in radians, whil the user only understands degrees. So a scale factor of 180/pi is necessary.

Definition at line 516 of file RefinableObj.h.

bool ObjCryst::RefinablePar::mIsPeriodic
private

Is the parameter periodic ? If this is the case, then when using the RefinablePar::Mutate() function, if the parameter goes beyond its limits, it will be shifted by the value of its period.

Definition at line 502 of file RefinableObj.h.


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