freOnePlusOneEvolutionarySOOptimizer.h

Go to the documentation of this file.
00001 /*=========================================================================
00002 
00003   Program:   F.R.E.E. - flexible registration evaluation engine
00004   Version:   v.1.0.0
00005   Date:      $Date: 2006/09/01 12:00:00 $
00006   Module:    $RCSfile: freOnePlusOneEvolutionarySOOptimizer.h,v $
00007   Language:  C++
00008 
00009 
00010 
00011   Copyright (c) 2007 Ralf o Floca (Department of Medical Informatics,
00012   Institute for Medical Biometry and Informatics, University of Heidelberg,
00013   Germany). All rights reserved.
00014   See FREECopyright.txt or http://www.mi.med.uni-hd.de/free/copyright.htm
00015   for details.
00016 
00017      This software is distributed WITHOUT ANY WARRANTY; without even 
00018      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
00019      PURPOSE.  See the above copyright notices for more information.
00020 
00021 =========================================================================*/
00022 #ifndef __freOnePlusOneEvolutionarySOOptimizer_h
00023 #define __freOnePlusOneEvolutionarySOOptimizer_h
00024 
00025 #include "freSetupOptimizationOptimizer.h"
00026 #include "freRegistrationObserver.h"
00027 #include "freItkSingleValuedCostFunctionWrapper.h"
00028 
00029 #include "itkOnePlusOneEvolutionaryOptimizer.h"
00030 #include "itkRandomVariateGeneratorBase.h"
00031 
00032 namespace FREE
00033 {
00034   
00040 class ITK_EXPORT OnePlusOneEvolutionarySOOptimizer : 
00041         public SetupOptimizationOptimizer
00042 {
00043 public:
00045   typedef OnePlusOneEvolutionarySOOptimizer  Self;
00046   typedef SetupOptimizationOptimizer                                                            Superclass;
00047   typedef itk::SmartPointer<Self>               Pointer;
00048   typedef itk::SmartPointer<const Self>         ConstPointer;
00049 
00051   itkTypeMacro( OnePlusOneEvolutionarySOOptimizer, SetupOptimizationOptimizer );
00052 
00054   itkNewMacro(Self);
00055 
00057         typedef itk::Statistics::RandomVariateGeneratorBase NormalVariateGeneratorType ;
00058   
00060   void SetMaximize(bool maximize);
00061   itkBooleanMacro( Maximize );
00062 
00064   void SetMaximumIteration(unsigned int maximumIteration);
00065   const unsigned int& GetMaximumIteration() const;
00066 
00068   void SetGrowthFactor(double growthFactor);
00069   const double& GetGrowthFactor() const;
00070 
00072   void SetShrinkFactor(double shrinkFactor);
00073   const double& GetShrinkFactor() const;
00074 
00076   void SetInitialRadius(double initialRadius);
00077   const double& GetInitialRadius() const;
00078 
00081   void SetEpsilon(double epsilon);
00082   const double& GetEpsilon() const;
00083 
00085   const double& GetFrobeniusNorm() const;
00086 
00087   virtual void SetCostFunction( CostFunctionType * costFunction );
00088 
00089         virtual void SetInitialPosition (const ParametersType &param);
00090 
00091   void SetNormalVariateGenerator(NormalVariateGeneratorType* generator) ;
00092 
00093   itkGetConstReferenceMacro( CurrentChildValue, MeasureType );
00094   itkGetConstReferenceMacro( CurrentChildPosition, ParametersType );
00095 
00102   void Initialize(double initialRadius, double grow = -1, double shrink = -1) ;
00103 
00104   virtual void StartOptimization( void );
00105 
00106         virtual void StopOptimization();
00107 
00108   virtual bool IsStoppable() const;
00109 
00110         typedef itk::OnePlusOneEvolutionaryOptimizer ItkOptimizerType;
00111         typedef ItkOptimizerType::Pointer ItkOptimizerPointer;
00112 
00113         ItkOptimizerType * GetItkOptimizer();
00114 
00115 protected:
00116   OnePlusOneEvolutionarySOOptimizer();
00117   virtual ~OnePlusOneEvolutionarySOOptimizer();
00118         void PrintSelf(std::ostream& os, itk::Indent indent) const;
00119 
00120   void OnOptIteration(void* pSender, long threadID);
00121   void OnOptStart(void* pSender, long threadID);
00122   void OnOptEnd(void* pSender, long threadID);
00123 
00124   IterationObserver::Pointer m_IterationObserver;
00125         NotificationEvent<Self>::Pointer m_IterationNotificationEvent;
00126 
00127         typedef RegistrationObserverBase<itk::StartEvent> StartObserver;
00128         StartObserver::Pointer m_StartObserver;
00129         NotificationEvent<Self>::Pointer m_StartNotificationEvent;
00130 
00131         typedef RegistrationObserverBase<itk::EndEvent> EndObserver;
00132         EndObserver::Pointer m_EndObserver;
00133         NotificationEvent<Self>::Pointer m_EndNotificationEvent;
00134 
00135         ItkOptimizerPointer m_ItkOptimizer;
00136         ItkSingleValuedCostFunctionWrapper::Pointer m_CostFunctionWrapper;
00137 
00138   mutable MeasureType m_CurrentChildValue;
00139   mutable ParametersType m_CurrentChildPosition;
00140 
00141 private:  
00142   OnePlusOneEvolutionarySOOptimizer(const Self&); //purposely not implemented
00143   void operator=(const Self&);//purposely not implemented
00144 };
00145 
00146 } // end namespace FREE
00147 
00148 #endif
00149     
00150  

Generated at Sat Oct 13 16:51:34 2007 for f.r.e.e. - Flexible Registration and Evaluation Engine by doxygen 1.5.3 written by Dimitri van Heesch, © 1997-2000