freMVNonLinearVNLOptimizerControllerBase.txx

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: freMVNonLinearVNLOptimizerControllerBase.txx,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 __freMVNonLinearVNLOptimizerControllerBase_txx
00023 #define __freMVNonLinearVNLOptimizerControllerBase_txx
00024 
00025 #include "freMVNonLinearVNLOptimizerControllerBase.h"
00026 
00027 namespace FREE
00028 {
00029 
00030 template <class TControlledVNLOptimizer>
00031 const char* const
00032 MVNonLinearVNLOptimizerControllerBase<TControlledVNLOptimizer>::cParam_UseCostFunctionGradient = "UseCostFunctionGradient";
00033 
00034 template <class TControlledVNLOptimizer>
00035 const char* const
00036 MVNonLinearVNLOptimizerControllerBase<TControlledVNLOptimizer>::cParamDsc_UseCostFunctionGradient = "Indicates if the gradient of the cost function should be used";
00037 
00038 template <class TControlledVNLOptimizer>
00039 MVNonLinearVNLOptimizerControllerBase<TControlledVNLOptimizer>::
00040 MVNonLinearVNLOptimizerControllerBase()
00041 {
00042   //Profile settings
00043   this->UpdateControllerID(ControllerID::MVNonLinearVNLOptimizerControllerBase);
00044   this->m_Description = "Base controller for multiple valued vnl optimizers.";
00045 };
00046 
00047 template <class TControlledVNLOptimizer>
00048 void
00049 MVNonLinearVNLOptimizerControllerBase<TControlledVNLOptimizer>::
00050 GenerateProfile(CtrlProfile::ControllerProfile& profile,
00051                 const SessionComponentCache* pComponentCache,
00052                 bool bRegardOldSetup) const
00053 {
00054   Superclass::GenerateProfile(profile,pComponentCache,bRegardOldSetup);
00055 
00056   //Parameter
00057   profile.Parameters().AddParameter(cParam_UseCostFunctionGradient,CtrlProfile::Parameter::PVTBool,cParamDsc_UseCostFunctionGradient,1,"false");
00058 };
00059 
00060 template <class TControlledVNLOptimizer>
00061 void
00062 MVNonLinearVNLOptimizerControllerBase<TControlledVNLOptimizer>::
00063 SetStatisticEntryMainComponent(StatisticEntry& rStatisticEntry,
00064                                              ComponentType* pMainComponent,
00065                                              SessionComponentCache* pMainComponentCache,
00066                                              SessionInfo* pSessionInfo,
00067                                              StatisticDictionary& rDictionary) const
00068 {
00069   ParameterArrayType parameters = pMainComponent->GetCachedCurrentPosition();
00070   MeasuresType measure = pMainComponent->GetCachedValue();
00071 
00072   std::string sName = "Position #";
00073   std::string sIDPath = pMainComponentCache->GetIDPath();
00074   StatisticValueDefinition* pParamEntry = rDictionary.GetValueDefinitionByName(sIDPath,sName+"0");
00075   StatisticValueDefinition* pValueEntry = rDictionary.GetValueDefinitionByName(sIDPath,"OptimizerValue #0");
00076     
00077   if (!pParamEntry) //Entry is not recorded yet, so do so.
00078   {
00079     pParamEntry = rDictionary.AddValueDefinition(sIDPath,sName+"0", "Optimizer position. Meaning depends on chosen transformation");
00080     for (unsigned int i = 1; i<parameters.Size(); i++)
00081     {
00082       rDictionary.AddValueDefinition(sIDPath,sName+Convert::ToStr(i),"Optimizer position. Meaning depends on chosen transformation");
00083     }
00084   }
00085 
00086   if (!pValueEntry) //Entry is not recorded yet, so do so.
00087   {
00088     pValueEntry = rDictionary.AddValueDefinition(sIDPath,"OptimizerValue #0", "Current optimizer value; meaning depends on chosen metric");
00089     for (unsigned int i = 1; i<measure.Size(); i++)
00090     {
00091       rDictionary.AddValueDefinition(sIDPath,"OptimizerValue #"+Convert::ToStr(i),"Current optimizer value; meaning depends on chosen metric");
00092     }
00093   }
00094   
00095   for (unsigned int i = 0; i<parameters.Size(); i++)
00096   {
00097     rStatisticEntry.AddValue(Convert::ToStr(parameters.GetElement(i)),pParamEntry->GetRefID()+i);
00098   }
00099 
00100   for (unsigned int i = 0; i<measure.Size(); i++)
00101   {
00102     rStatisticEntry.AddValue(Convert::ToStr(measure.GetElement(i)),pValueEntry->GetRefID()+i);
00103   }
00104 };
00105 
00106 template <class TControlledVNLOptimizer>
00107 typename MVNonLinearVNLOptimizerControllerBase<TControlledVNLOptimizer>::ParametersType
00108 MVNonLinearVNLOptimizerControllerBase<TControlledVNLOptimizer>::
00109 GetCurrentPosition(TControlledVNLOptimizer* pOptimizer) const
00110 {
00111         return pOptimizer->GetCachedCurrentPosition();
00112 };
00113 
00114 template <class TControlledVNLOptimizer>
00115 typename MVNonLinearVNLOptimizerControllerBase<TControlledVNLOptimizer>::MeasuresType
00116 MVNonLinearVNLOptimizerControllerBase<TControlledVNLOptimizer>::
00117 GetCurrentValue(TControlledVNLOptimizer* pOptimizer) const
00118 {
00119         return pOptimizer->GetCachedValue();
00120 };
00121 
00122 template <class TControlledVNLOptimizer>
00123 void
00124 MVNonLinearVNLOptimizerControllerBase<TControlledVNLOptimizer>::
00125 ActualizeMainComponent(ComponentType* pMainComponent,
00126                        SessionComponentCache* pComponentCache, SessionInfo* pSessionInfo,
00127                                                                                          const unsigned int& iActLevel) const
00128 {
00129   Superclass::ActualizeMainComponent(pMainComponent, pComponentCache, pSessionInfo, iActLevel);
00130 
00131   bool bUseCostGradient = true;
00132 
00133   try
00134   {
00135     SessionAccessor::GetParameterValue(pComponentCache,cParam_UseCostFunctionGradient,bUseCostGradient);
00136   }
00137   catchAllNPassMacro("Error while retrieving parameter values.");
00138 
00139   pMainComponent->SetUseCostFunctionGradient(bUseCostGradient);
00140 };
00141 
00142 } //end of namespace FREE
00143 
00144 #endif

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