ObjCryst::CellExplorer Class Reference

Algorithm class to find the correct indexing from observed peak positions. More...

Inheritance diagram for ObjCryst::CellExplorer:
Inheritance graph
[legend]
Collaboration diagram for ObjCryst::CellExplorer:
Collaboration graph
[legend]

List of all members.

Public Member Functions

 CellExplorer (const PeakList &dhkl, const CrystalSystem lattice, const unsigned int nbSpurious)
void Evolution (unsigned int ng, const bool randomize=true, const float f=0.7, const float cr=0.5, unsigned int np=100)
void SetLengthMinMax (const float min, const float max)
void SetAngleMinMax (const float min, const float max)
void SetVolumeMinMax (const float min, const float max)
void SetNbSpurious (const unsigned int nb)
void SetD2Error (const float err)
 Allowed error on 1/d (squared!), used for dicvol.
void SetMinMaxZeroShift (const float min, const float max)
void SetCrystalSystem (const CrystalSystem system)
void SetCrystalCentering (const CrystalCentering cent)
virtual const string & GetClassName () const
 Name for this class ("RefinableObj", "Crystal",...). This is only useful to distinguish different classes when picking up objects from the RefinableObj Global Registry.
virtual const string & GetName () const
 Name of the object.
virtual void Print () const
virtual unsigned int GetNbLSQFunction () const
 Number of LSQ functions.
virtual const CrystVector_REAL & GetLSQCalc (const unsigned int) const
 Get the current calculated value for the LSQ function.
virtual const CrystVector_REAL & GetLSQObs (const unsigned int) const
 Get the observed values for the LSQ function.
virtual const CrystVector_REAL & GetLSQWeight (const unsigned int) const
 Get the weight values for the LSQ function.
virtual const CrystVector_REAL & GetLSQDeriv (const unsigned int, RefinablePar &)
 Get the first derivative values for the LSQ function, for a given parameter.
virtual void BeginOptimization (const bool allowApproximations=false, const bool enableRestraints=false)
 This should be called by any optimization class at the begining of an optimization.
void LSQRefine (int nbCycle=1, bool useLevenbergMarquardt=true, const bool silent=false)
void DicVol (const float minScore=10, const unsigned int minDepth=3, const float stopOnScore=50.0, const unsigned int stopOnDepth=6)
 Run DicVOl algorithm, store only solutions with score >minScore or depth>=minDepth, stop at the end of one volume interval (~400 A^3) if best score>stopOnScore, or if one solution was found at depth>=stopOnDepth.
void ReduceSolutions (const bool updateReportThreshold=false)
 Sort all solutions by score, remove duplicates.
float GetBestScore () const
const std::list< std::pair
< RecUnitCell, float > > & 
GetSolutions () const
std::list< std::pair
< RecUnitCell, float > > & 
GetSolutions ()

Private Member Functions

unsigned int RDicVol (RecUnitCell uc0, RecUnitCell uc1, unsigned int depth, unsigned long &nbCalc, const float minV, const float maxV, vector< unsigned int > vdepth=vector< unsigned int >())
void Init ()

Private Attributes

std::list< std::pair
< RecUnitCell, float > > 
mvSolution
 Max number of obs reflections to use.
unsigned int mnpar
const PeakListmpPeakList
float mLengthMin
float mLengthMax
float mAngleMin
float mAngleMax
float mVolumeMin
float mVolumeMax
float mZeroShiftMin
float mZeroShiftMax
float mMin [7]
 Min values for all parameters (7=unit cell +zero).
float mAmp [7]
 Max amplitude (max=min+amplitude) for all parameters All parameters are treated as periodic for DE (??).
CrystalSystem mlattice
 Lattice type for which we search.
CrystalCentering mCentering
 Centering type.
unsigned int mNbSpurious
float mD2Error
LSQNumObj mLSQObj
CrystVector_REAL mObs
CrystVector_REAL mCalc
CrystVector_REAL mWeight
CrystVector_REAL mDeriv
RecUnitCell mRecUnitCell
 Reciprocal unit cell used for least squares refinement.
float mBestScore
 Current best score.
std::vector< unsigned int > mvNbSolutionDepth
 Number of solutions found during dicvol search, at each depth.
float mMinScoreReport
unsigned int mMaxDicVolDepth
unsigned int mDicVolDepthReport
float mCosAngMax
 Stored value of cos(max ang) for tricilinic search - we do not want to recompute the cos at every dicvol iteration.
unsigned int mNbLSQExcept
 Number of exceptions caught during LSQ, in a given search - above 20 LSQ is disabled.

Detailed Description

Algorithm class to find the correct indexing from observed peak positions.

Definition at line 212 of file Indexing.h.


Member Function Documentation

void ObjCryst::CellExplorer::BeginOptimization ( const bool  allowApproximations = false,
const bool  enableRestraints = false 
) [virtual]

This should be called by any optimization class at the begining of an optimization.

This will also check that everything is ready, eg call the RefinableObj::Prepare() function. This also affects all sub-objects.

Note:
this may be called several time for some objects which are used by several other objects, or for nested optimizations (e.g. least-squares optimizations inside a global one).
EndOptimization() must be called at the end of the optimization, the same number of time BeginOptimization() was called !
Parameters:
allowApproximations,: if true, then the object can use faster but less precise functions during the optimization. This is useful for global optimization not using derivatives.
enableRestraints,: 
Deprecated:
if true, then restrained parameters will be allowed to go beyond theur hard limits. This implies that the algorithm will take into account the cost (penalty) related to the restraints. Objects which do not use restraints will simply ignore this. WARNING: this parameter may be removed with the new likelihood scheme.

Reimplemented from ObjCryst::RefinableObj.

Definition at line 1473 of file Indexing.cpp.

void ObjCryst::CellExplorer::DicVol ( const float  minScore = 10,
const unsigned int  minDepth = 3,
const float  stopOnScore = 50.0,
const unsigned int  stopOnDepth = 6 
)

Run DicVOl algorithm, store only solutions with score >minScore or depth>=minDepth, stop at the end of one volume interval (~400 A^3) if best score>stopOnScore, or if one solution was found at depth>=stopOnDepth.

If stopOnDepth==0, do not stop for any depth

Definition at line 2113 of file Indexing.cpp.

const CrystVector_REAL & ObjCryst::CellExplorer::GetLSQDeriv ( const unsigned int  n,
RefinablePar par 
) [virtual]

Get the first derivative values for the LSQ function, for a given parameter.

Note that the default method in the base RefinableObj class is to use numerical derivatives, so it should be overridden for better precision.

Todo:
This should be a const method, and the given RefPar should be const too...

Reimplemented from ObjCryst::RefinableObj.

Definition at line 1443 of file Indexing.cpp.

void ObjCryst::CellExplorer::ReduceSolutions ( const bool  updateReportThreshold = false  ) 

Sort all solutions by score, remove duplicates.

Parameters:
updateReportThreshold,: if true, when too many solutions are produced, the threshold above which solutions are reported will be updated to get less solutions.

Definition at line 2615 of file Indexing.cpp.


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

Generated on Mon Dec 7 23:05:56 2009 for FOX/ObjCryst++ by  doxygen 1.6.1