00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef __freSetupOptimizationOptimizerControllerBase_txx
00024 #define __freSetupOptimizationOptimizerControllerBase_txx
00025
00026 #include "freSetupOptimizationOptimizerControllerBase.h"
00027
00028 namespace FREE
00029 {
00030
00031
00035
00036
00037
00038 template <class TControlledOptimizer>
00039 const char* const SetupOptimizationOptimizerControllerBase<TControlledOptimizer>::cParam_Scales = "Scales";
00040 template <class TControlledOptimizer>
00041 const char* const SetupOptimizationOptimizerControllerBase<TControlledOptimizer>::cParamDsc_Scales = "Scaling for each parameter.";
00042
00043 template <class TControlledOptimizer>
00044 SetupOptimizationOptimizerControllerBase<TControlledOptimizer>::
00045 SetupOptimizationOptimizerControllerBase():OptimizerControllerBase<TControlledOptimizer>()
00046 {
00047 this->UpdateControllerID(ControllerID::SetupOptimizationOptimizerControllerBase);
00048 this->m_Description = "Base class for registration optimizer controller; not for practical use.";
00049 };
00050
00051 template <class TControlledOptimizer>
00052 void
00053 SetupOptimizationOptimizerControllerBase<TControlledOptimizer>::
00054 GenerateProfile(CtrlProfile::ControllerProfile& profile,
00055 const SessionComponentCache* pComponentCache,
00056 bool bRegardOldSetup) const
00057 {
00058 Superclass::GenerateProfile(profile,pComponentCache,bRegardOldSetup);
00059
00060 profile.Parameters().AddParameter(cParam_Scales,CtrlProfile::Parameter::PVTDouble,cParamDsc_Scales,1,"1.0");
00061
00062 CtrlProfile::ProfileOption* pOption = profile.Requirements().AddRequirement(std::string("../")+cComp_MainTransform)->AddProfileOption();
00063 pOption->Inheritance().AddAncestor("Setup Transform");
00064 pOption->CheckForInheritance();
00065
00066 pOption = profile.Requirements().AddRequirement(std::string("../")+cComp_MainMetric)->AddProfileOption();
00067 pOption->Inheritance().AddAncestor("SetupOptimizationMetricBase");
00068 pOption->CheckForInheritance();
00069 };
00070
00071 template <class TControlledOptimizer>
00072 void
00073 SetupOptimizationOptimizerControllerBase<TControlledOptimizer>::
00074 ActualizeMainComponent(ComponentType* pMainComponent,
00075 SessionComponentCache* pComponentCache, SessionInfo* pSessionInfo,
00076 const unsigned int& iActLevel) const
00077 {
00078 Superclass::ActualizeMainComponent(pMainComponent, pComponentCache,
00079 pSessionInfo, iActLevel);
00080
00081 typedef typename ComponentType::ScalesType ComponentScalesType;
00082 ComponentScalesType scales;
00083
00084 Parameter* pParameter = pComponentCache->Setup()->Parameters().GetParameter(cParam_Scales);
00085 if (!pParameter) throwExceptionMacro("Missing parameter: " << cParam_Scales);
00086 scales = Convert::ParameterLayerToArray<ComponentScalesType>(*(pParameter->GetParameterLayer(0)));
00087
00088 pMainComponent->SetScales(scales);
00089 };
00090
00091 template <class TControlledOptimizer>
00092 typename SetupOptimizationOptimizerControllerBase<TControlledOptimizer>::ParametersType
00093 SetupOptimizationOptimizerControllerBase<TControlledOptimizer>::
00094 GetCurrentPosition(TControlledOptimizer* pOptimizer) const
00095 {
00096 return pOptimizer->GetCurrentPosition();
00097 };
00098
00099 template <class TControlledOptimizer>
00100 typename SetupOptimizationOptimizerControllerBase<TControlledOptimizer>::MeasuresType
00101 SetupOptimizationOptimizerControllerBase<TControlledOptimizer>::
00102 GetCurrentValue(TControlledOptimizer* pOptimizer) const
00103 {
00104 return pOptimizer->GetCurrentValue();
00105 };
00106
00107 }
00108
00109 #endif