Source code for SimEx.Parameters.DMPhasingParameters
""" :module DMPhasingParameters: Module that holds the DMPhasingParameters class. """
##########################################################################
# #
# Copyright (C) 2016-2017 Carsten Fortmann-Grote #
# Contact: Carsten Fortmann-Grote <carsten.grote@xfel.eu> #
# #
# This file is part of simex_platform. #
# simex_platform is free software: you can redistribute it and/or modify #
# it under the terms of the GNU General Public License as published by #
# the Free Software Foundation, either version 3 of the License, or #
# (at your option) any later version. #
# #
# simex_platform is distributed in the hope that it will be useful, #
# but WITHOUT ANY WARRANTY; without even the implied warranty of #
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
# GNU General Public License for more details. #
# #
# You should have received a copy of the GNU General Public License #
# along with this program. If not, see <http://www.gnu.org/licenses/>. #
# #
##########################################################################
from SimEx.Parameters.AbstractCalculatorParameters import AbstractCalculatorParameters
from SimEx.Utilities.EntityChecks import checkAndSetInstance
[docs]class DMPhasingParameters(AbstractCalculatorParameters):
"""
:class DMPhasingParameters: Encapsulates parameters for the DMPhasing analyzer.
"""
def __init__(self,
number_of_trials = None,
number_of_iterations = None,
averaging_start = None,
leash = None,
number_of_shrink_cycles = None,
parameters_dictionary = None,
**kwargs
):
"""
:param number_of_trials: How many trials to run in each iteration.
:type number_of_trials: int>0, default 500
:param number_of_iterations: Maximum number of DM iterations.
:type number_of_iterations: int>0, default 50
:param averaging_start: Start averaging after this many runs.
:type averaging: int>0, default 15
:param leash: DM leash parameter.
:type leash: float>0, default 0.2
:param number_of_shrink_cycles: DM shrink cycles.
:type number_of_shrink_cycles: int>0, default 10
"""
# Legacy support for dictionaries.
if parameters_dictionary is not None:
self.number_of_trials = parameters_dictionary['number_of_trials']
self.number_of_iterations = parameters_dictionary['number_of_iterations']
self.averaging_start = parameters_dictionary['averaging_start']
self.leash = parameters_dictionary['leash']
self.number_of_shrink_cycles = parameters_dictionary['number_of_shrink_cycles']
else:
# Check all parameters.
self.number_of_trials = number_of_trials
self.number_of_iterations = number_of_iterations
self.averaging_start = averaging_start
self.leash = leash
self.number_of_shrink_cycles = number_of_shrink_cycles
def _setDefaults(self):
""" """
""" Set the defaults for needed inherited parameters. """
self._AbstractCalculatorParameters__cpus_per_task_default = "1"
### Setters and queries.
@property
def number_of_trials(self):
""" Query for the 'number_of_trials' parameter. """
return self.__number_of_trials
@number_of_trials.setter
def number_of_trials(self, value):
""" Set the 'number_of_trials' parameter to a given value.
:param value: The value to set 'number_of_trials' to.
:type value: int
"""
number_of_trials = checkAndSetInstance( int, value, 500 )
if all([number_of_trials > 0]):
self.__number_of_trials = number_of_trials
else:
raise ValueError( "Parameter 'number_of_trials' must be an integer (n > 0)")
@property
def number_of_iterations(self):
""" Query for the 'number_of_iterations' parameter. """
return self.__number_of_iterations
@number_of_iterations.setter
def number_of_iterations(self, value):
""" Set the 'number_of_iterations' parameter to a given value.
:param value: The value to set 'number_of_iterations' to.
:type value: int
"""
number_of_iterations = checkAndSetInstance( int, value, 50 )
if all([ number_of_iterations > 0]):
self.__number_of_iterations = number_of_iterations
else:
raise ValueError( "Parameter 'number_of_iterations' must be an integer (n > 0)")
@property
def leash(self):
""" Query for the 'leash' parameter. """
return self.__leash
@leash.setter
def leash(self, value):
""" Set the 'leash' parameter to a given value.
:param value: The value to set 'leash' to.
:type value: float
"""
leash = checkAndSetInstance( float, value, 0.2 )
if leash > 0:
self.__leash = leash
else:
raise ValueError( "The parameter 'leash' must be a positive integer.")
@property
def averaging_start(self):
""" Query for the 'averaging_start' parameter. """
return self.__averaging_start
@averaging_start.setter
def averaging_start(self, value):
""" Set the 'averaging_start' parameter to a given value.
:param value: The value to set 'averaging_start' to.
:type value: int
"""
averaging_start = checkAndSetInstance( int, value, 15 )
if averaging_start > 0:
self.__averaging_start = averaging_start
else:
raise ValueError( "The parameter 'averaging_start' must be a positive integer.")
@property
def number_of_shrink_cycles(self):
""" Query for the 'number_of_shrink_cycles' parameter. """
return self.__number_of_shrink_cycles
@number_of_shrink_cycles.setter
def number_of_shrink_cycles(self, value):
""" Set the 'number_of_shrink_cycles' parameter to a given value.
:param value : The value to set 'number_of_shrink_cycles' to.
:type value: int
"""
number_of_shrink_cycles = checkAndSetInstance( int, value, 10 )
if number_of_shrink_cycles > 0:
self.__number_of_shrink_cycles = number_of_shrink_cycles
else:
raise ValueError( "The parameter 'number_of_shrink_cycles' must be a positive integer.")