Source code for sas.qtgui.Plotting.LineModel

#!/usr/bin/env python
"""
Provide Line function (y= Ax + B). Until July 10, 2016 this function provided
(y= A + Bx).  This however was contrary to all the other code using it which 
assumed (y= mx+b) or in this nomenclature (y=Ax + B). This lead to some
contortions in the code and worse incorrect calculations until now for at least
some of the functions.  This seemed the easiest to fix particularly since this
function should disappear in a future iteration (see notes in fitDialog)

                -PDB   July 10, 2016
"""

import math

[docs]class LineModel(object): """ Class that evaluates a linear model. $f(x) = Ax + B$ List of default parameters: A = 1.0 B = 1.0 """
[docs] def __init__(self): """ Initialization """ # # Name of the model self.name = "LineModel" # # Define parameters self.params = {} self.params['A'] = 1.0 self.params['B'] = 1.0 # # Parameter details [units, min, max] self.details = {} self.details['A'] = ['', None, None] self.details['B'] = ['', None, None]
[docs] def getParam(self, name): """ Return parameter value """ return self.params[name.upper()]
[docs] def setParam(self, name, value): """ Set parameter value """ self.params[name.upper()] = value
[docs] def _line(self, x): """ Evaluate the function :param x: x-value :return: function value """ return (self.params['A'] * x) + self.params['B']
[docs] def run(self, x=0.0): """ Evaluate the model :param x: simple value :return: (Line value) .. note:: This is the function called by fitDialog to calculate the the y(xmin) and y(xmax), but the only difference between this and runXY is when the if statement is true. I however cannot see what that function is for. It needs to be documented here or removed. -PDB 7/10/16 """ if x.__class__.__name__ == 'list': return self._line(x[0] * math.cos(x[1])) * \ self._line(x[0] * math.sin(x[1])) elif x.__class__.__name__ == 'tuple': msg = "Tuples are not allowed as input to BaseComponent models" raise ValueError(msg) else: return self._line(x)
[docs] def runXY(self, x=0.0): """ Evaluate the model. :param x: simple value :return: Line value ..note:: This is to be what is called by fitDialog for the actual fit but the only difference between this and run is when the if statement is true. I however cannot see what that function is for. It needs to be documented here or removed. -PDB 7/10/16 """ if x.__class__.__name__ == 'list': return self._line(x[0]) * self._line(x[1]) elif x.__class__.__name__ == 'tuple': msg = "Tuples are not allowed as input to BaseComponent models" raise ValueError(msg) else: return self._line(x)