00001 /*========================================================================= 00002 00003 Program: Medical Imaging & Interaction Toolkit 00004 Language: C++ 00005 Date: $Date$ 00006 Version: $Revision: -1 $ 00007 00008 Copyright (c) German Cancer Research Center, Division of Medical and 00009 Biological Informatics. All rights reserved. 00010 See MITKCopyright.txt or https://www.mitk.org/copyright.html for details. 00011 00012 This software is distributed WITHOUT ANY WARRANTY; without even 00013 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 00014 PURPOSE. See the above copyright notices for more information. 00015 00016 =========================================================================*/ 00017 00018 #include "QmitkSPSAOptimizerView.h" 00019 #include "mitkImageAccessByItk.h" 00020 #include <itkSPSAOptimizer.h> 00021 00022 QmitkSPSAOptimizerView::QmitkSPSAOptimizerView(QWidget* parent, Qt::WindowFlags f ) : QmitkRigidRegistrationOptimizerGUIBase (parent, f), 00023 m_NumberTransformParameters(16) 00024 { 00025 00026 } 00027 00028 QmitkSPSAOptimizerView::~QmitkSPSAOptimizerView() 00029 { 00030 } 00031 00032 itk::Object::Pointer QmitkSPSAOptimizerView::GetOptimizer() 00033 { 00034 itk::SPSAOptimizer::Pointer OptimizerPointer = itk::SPSAOptimizer::New(); 00035 OptimizerPointer->SetMaximize( m_Controls.m_Maximize->isChecked() ); 00036 OptimizerPointer->Seta( m_Controls.m_aSPSA->text().toFloat() ); 00037 OptimizerPointer->SetA( m_Controls.m_ASPSA->text().toFloat() ); 00038 OptimizerPointer->SetAlpha( m_Controls.m_AlphaSPSA->text().toFloat() ); 00039 OptimizerPointer->Setc( m_Controls.m_cSPSA->text().toFloat() ); 00040 OptimizerPointer->SetGamma( m_Controls.m_GammaSPSA->text().toFloat() ); 00041 OptimizerPointer->SetTolerance(m_Controls.m_ToleranceSPSA->text().toFloat()); 00042 OptimizerPointer->SetStateOfConvergenceDecayRate(m_Controls.m_StateOfConvergenceDecayRateSPSA->text().toFloat()); 00043 OptimizerPointer->SetMinimumNumberOfIterations(m_Controls.m_MinimumNumberOfIterationsSPSA->text().toInt()); 00044 OptimizerPointer->SetNumberOfPerturbations(m_Controls.m_NumberOfPerturbationsSPSA->text().toInt()); 00045 OptimizerPointer->SetMaximumNumberOfIterations(m_Controls.m_IterationsSPSA->text().toInt()); 00046 return OptimizerPointer.GetPointer(); 00047 } 00048 00049 itk::Array<double> QmitkSPSAOptimizerView::GetOptimizerParameters() 00050 { 00051 itk::Array<double> optimizerValues; 00052 optimizerValues.SetSize(3); 00053 optimizerValues.fill(0); 00054 optimizerValues[0] = m_Controls.m_Maximize->isChecked(); 00055 optimizerValues[1] = m_Controls.m_aSPSA->text().toFloat(); 00056 optimizerValues[2] = m_Controls.m_ASPSA->text().toFloat(); 00057 optimizerValues[3] = m_Controls.m_AlphaSPSA->text().toFloat(); 00058 optimizerValues[4] = m_Controls.m_cSPSA->text().toFloat(); 00059 optimizerValues[5] = m_Controls.m_GammaSPSA->text().toFloat(); 00060 optimizerValues[6] = m_Controls.m_ToleranceSPSA->text().toFloat(); 00061 optimizerValues[7] = m_Controls.m_StateOfConvergenceDecayRateSPSA->text().toFloat(); 00062 optimizerValues[8] = m_Controls.m_MinimumNumberOfIterationsSPSA->text().toInt(); 00063 optimizerValues[9] = m_Controls.m_NumberOfPerturbationsSPSA->text().toInt(); 00064 optimizerValues[10] = m_Controls.m_IterationsSPSA->text().toInt(); 00065 return optimizerValues; 00066 } 00067 00068 void QmitkSPSAOptimizerView::SetOptimizerParameters(itk::Array<double> optimizerValues) 00069 { 00070 m_Controls.m_Maximize->setChecked(optimizerValues[0]); 00071 m_Controls.m_aSPSA->setText(QString::number(optimizerValues[1])); 00072 m_Controls.m_ASPSA->setText(QString::number(optimizerValues[2])); 00073 m_Controls.m_AlphaSPSA->setText(QString::number(optimizerValues[3])); 00074 m_Controls.m_cSPSA->setText(QString::number(optimizerValues[4])); 00075 m_Controls.m_GammaSPSA->setText(QString::number(optimizerValues[5])); 00076 m_Controls.m_ToleranceSPSA->setText(QString::number(optimizerValues[6])); 00077 m_Controls.m_StateOfConvergenceDecayRateSPSA->setText(QString::number(optimizerValues[7])); 00078 m_Controls.m_MinimumNumberOfIterationsSPSA->setText(QString::number(optimizerValues[8])); 00079 m_Controls.m_NumberOfPerturbationsSPSA->setText(QString::number(optimizerValues[9])); 00080 m_Controls.m_IterationsSPSA->setText(QString::number(optimizerValues[10])); 00081 } 00082 00083 void QmitkSPSAOptimizerView::SetNumberOfTransformParameters(int transformParameters) 00084 { 00085 m_NumberTransformParameters = transformParameters; 00086 } 00087 00088 QString QmitkSPSAOptimizerView::GetName() 00089 { 00090 return "SPSA"; 00091 } 00092 00093 void QmitkSPSAOptimizerView::SetupUI(QWidget* parent) 00094 { 00095 m_Controls.setupUi(parent); 00096 QValidator* validatorLineEditInput = new QIntValidator(0, 20000000, this); 00097 m_Controls.m_MinimumNumberOfIterationsSPSA->setValidator(validatorLineEditInput); 00098 m_Controls.m_NumberOfPerturbationsSPSA->setValidator(validatorLineEditInput); 00099 m_Controls.m_IterationsSPSA->setValidator(validatorLineEditInput); 00100 QValidator* validatorLineEditInputFloat = new QDoubleValidator(0, 20000000, 8, this); 00101 m_Controls.m_aSPSA->setValidator(validatorLineEditInputFloat); 00102 m_Controls.m_ASPSA->setValidator(validatorLineEditInputFloat); 00103 m_Controls.m_AlphaSPSA->setValidator(validatorLineEditInputFloat); 00104 m_Controls.m_cSPSA->setValidator(validatorLineEditInputFloat); 00105 m_Controls.m_GammaSPSA->setValidator(validatorLineEditInputFloat); 00106 m_Controls.m_ToleranceSPSA->setValidator(validatorLineEditInputFloat); 00107 m_Controls.m_StateOfConvergenceDecayRateSPSA->setValidator(validatorLineEditInputFloat); 00108 }