frePowellSOOptimizer.cxx

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: frePowellSOOptimizer.cxx,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 
00023 #include "frePowellSOOptimizer.h"
00024 #include "itkCommand.h"
00025 #include "itkEventObject.h"
00026 
00027 namespace FREE
00028 {
00029 
00030 PowellSOOptimizer
00031 ::PowellSOOptimizer()
00032 {
00033         m_ItkOptimizer = ItkOptimizerType::New();
00034         m_CostFunctionWrapper = ItkSingleValuedCostFunctionWrapper::New();
00035 
00036         this->SetMaximize(false);
00037         this->SetMaximumIteration(100);
00038         this->SetMaximumLineIteration(100);
00039         this->SetStepLength(1.0);
00040         this->SetStepTolerance(0.00001);
00041         this->SetValueTolerance(0.00001);
00042 
00043         m_IterationObserver = IterationObserver::New();
00044         m_IterationNotificationEvent = NotificationEvent<Self>::New(this, &Self::OnOptIteration);
00045         m_IterationObserver->fnOnNotify = m_IterationNotificationEvent;
00046         m_ItkOptimizer->AddObserver(itk::IterationEvent(), m_IterationObserver);
00047 
00048         m_StartObserver = StartObserver::New();
00049         m_StartNotificationEvent = NotificationEvent<Self>::New(this, &Self::OnOptStart);
00050         m_StartObserver->fnOnNotify = m_StartNotificationEvent;
00051         m_ItkOptimizer->AddObserver(itk::StartEvent(), m_StartObserver);
00052 
00053         m_EndObserver = EndObserver::New();
00054         m_EndNotificationEvent = NotificationEvent<Self>::New(this, &Self::OnOptEnd);
00055         m_EndObserver->fnOnNotify = m_EndNotificationEvent;
00056         m_ItkOptimizer->AddObserver(itk::EndEvent(), m_EndObserver);
00057 }
00058 
00059 PowellSOOptimizer
00060 ::~PowellSOOptimizer()
00061 {
00062 }
00063 
00064 void
00065 PowellSOOptimizer::
00066 SetMaximize(bool maximize)
00067 {
00068         m_ItkOptimizer->SetMaximize(maximize);
00069         this->Modified();
00070 };
00071 
00072 void
00073 PowellSOOptimizer::
00074 SetMaximumIteration(unsigned int iMaximumIteration)
00075 {
00076         m_ItkOptimizer->SetMaximumIteration(iMaximumIteration);
00077         this->Modified();
00078 };
00079 
00080 const unsigned int
00081 PowellSOOptimizer::
00082 GetMaximumIteration() const
00083 {
00084         return m_ItkOptimizer->GetMaximumIteration();
00085 };
00086 
00087 void
00088 PowellSOOptimizer::
00089 SetMaximumLineIteration(unsigned int iMaximumLineIteration)
00090 {
00091         m_ItkOptimizer->SetMaximumLineIteration(iMaximumLineIteration);
00092         this->Modified();
00093 };
00094 
00095 const unsigned int
00096 PowellSOOptimizer::
00097 GetMaximumLineIteration() const
00098 {
00099         return m_ItkOptimizer->GetMaximumLineIteration();
00100 };
00101 
00102 void
00103 PowellSOOptimizer::
00104 SetStepLength(double dStepLenght)
00105 {
00106         m_ItkOptimizer->SetStepLength(dStepLenght);
00107         this->Modified();
00108 };
00109 
00110 const double&
00111 PowellSOOptimizer::
00112 GetStepLength() const
00113 {
00114         return m_ItkOptimizer->GetStepLength();
00115 };
00116 
00117 void
00118 PowellSOOptimizer::
00119 SetStepTolerance(double dStepTolerance)
00120 {
00121         m_ItkOptimizer->SetStepTolerance(dStepTolerance);
00122         this->Modified();
00123 };
00124 
00125 const double&
00126 PowellSOOptimizer::
00127 GetStepTolerance() const
00128 {
00129         return m_ItkOptimizer->GetStepTolerance();
00130 };
00131 
00132 void
00133 PowellSOOptimizer::
00134 SetValueTolerance(double dValueTolerance)
00135 {
00136         m_ItkOptimizer->SetValueTolerance(dValueTolerance);
00137         this->Modified();
00138 };
00139 
00140 const double&
00141 PowellSOOptimizer::
00142 GetValueTolerance() const
00143 {
00144         return m_ItkOptimizer->GetValueTolerance();
00145 };
00146 
00147 void
00148 PowellSOOptimizer::
00149 SetCostFunction( CostFunctionType * costFunction )
00150 {
00151         Superclass::SetCostFunction(costFunction);
00152         m_CostFunctionWrapper->SetWrappedCostFunction(costFunction);
00153         m_ItkOptimizer->SetCostFunction(m_CostFunctionWrapper);
00154 };
00155 
00156 void
00157 PowellSOOptimizer::
00158 SetInitialPosition (const ParametersType &param)
00159 {
00160         Superclass::SetInitialPosition(param);
00161         m_ItkOptimizer->SetInitialPosition(param);
00162 };
00163 
00164 void
00165 PowellSOOptimizer
00166 ::PrintSelf(std::ostream& os, itk::Indent indent) const
00167 {
00168   Superclass::PrintSelf(os,indent);
00169         
00170         os << indent << "Current Iteration " << m_ItkOptimizer->GetCurrentIteration() << std::endl;
00171         os << indent << "Maximize On/Off   " << m_ItkOptimizer->GetMaximize()         << std::endl;
00172         os << indent << "StepLength        " << m_ItkOptimizer->GetStepLength()       << std::endl;
00173         os << indent << "StepTolerance     " << m_ItkOptimizer->GetStepTolerance()    << std::endl;
00174         os << indent << "ValueTolerance    " << m_ItkOptimizer->GetValueTolerance()   << std::endl;
00175         os << indent << "Current Cost      " << m_ItkOptimizer->GetCurrentCost()      << std::endl;
00176         os << indent << "Maximum Line Iteration " << m_ItkOptimizer->GetMaximumLineIteration() << std::endl;
00177         os << indent << "Current Line Iteration " << m_ItkOptimizer->GetCurrentLineIteration() << std::endl;
00178 }
00179 
00180 void
00181 PowellSOOptimizer
00182 ::StartOptimization( void )
00183 {
00184         this->m_ItkOptimizer->SetScales(this->GetScales());
00185         this->m_ItkOptimizer->StartOptimization();
00186 }
00187 
00188 void
00189 PowellSOOptimizer
00190 ::StopOptimization()
00191 {
00192   this->m_ItkOptimizer->StopOptimization();
00193 };
00194 
00195 bool
00196 PowellSOOptimizer
00197 ::IsStoppable() const
00198 {
00199   return true;
00200 };
00201 
00202 
00203 PowellSOOptimizer::ItkOptimizerType * 
00204 PowellSOOptimizer
00205 ::GetItkOptimizer()
00206 {
00207   return m_ItkOptimizer;
00208 }
00209 
00210 void
00211 PowellSOOptimizer::
00212 OnOptIteration(void* pSender, long threadID)
00213 {
00214         this->m_CurrentValue = this->m_ItkOptimizer->GetCurrentCost();
00215         this->m_CurrentDecomposedValue = this->m_CostFunction->GetCurrentDecomposedValue();
00216         this->SetCurrentPosition(this->m_ItkOptimizer->GetCurrentPosition());
00217 
00218 
00219         m_BestValue = m_CurrentValue;
00220         m_BestPosition = this->m_ItkOptimizer->GetCurrentPosition();
00221         
00222         //and pass the signal to the rest of the world
00223         this->InvokeEvent( itk::IterationEvent() );
00224 };
00225 
00226 void
00227 PowellSOOptimizer::
00228 OnOptStart(void* pSender, long threadID)
00229 {
00230         //just pass the signal to the rest of the world
00231         this->InvokeEvent( itk::StartEvent() );
00232 };
00233   
00234 void
00235 PowellSOOptimizer::
00236 OnOptEnd(void* pSender, long threadID)
00237 {
00238         //just pass the signal to the rest of the world
00239         this->InvokeEvent( itk::EndEvent() );
00240 };
00241 
00242 } // end namespace FREE
00243 
00244 

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