source: sasview/sansmodels/src/sans/models/BaseComponent.py @ 369e492e

ESS_GUIESS_GUI_DocsESS_GUI_batch_fittingESS_GUI_bumps_abstractionESS_GUI_iss1116ESS_GUI_iss879ESS_GUI_iss959ESS_GUI_openclESS_GUI_orderingESS_GUI_sync_sascalccostrafo411magnetic_scattrelease-4.1.1release-4.1.2release-4.2.2release_4.0.1ticket-1009ticket-1094-headlessticket-1242-2d-resolutionticket-1243ticket-1249ticket885unittest-saveload
Last change on this file since 369e492e was 2caecd5, checked in by Gervaise Alina <gervyh@…>, 15 years ago

print statement removed

  • Property mode set to 100644
File size: 5.3 KB
Line 
1#!/usr/bin/env python
2"""
3    Provide base functionality for all model components
4"""
5
6# imports   
7import copy
8#TO DO: that about a way to make the parameter
9#is self return if it is fittable or not 
10
11class BaseComponent:
12    """
13        Basic model component
14       
15        Since version 0.5.0, basic operations are no longer supported.
16    """
17
18    def __init__(self):
19        """ Initialization"""
20       
21        ## Name of the model
22        self.name   = "BaseComponent"
23       
24        ## Parameters to be accessed by client
25        self.params = {}
26        self.details = {}
27        ## Dictionary used to store the dispersity/averaging
28        #  parameters of dispersed/averaged parameters.
29        self.dispersion = {}
30        # string containing information about the model such as the equation
31        #of the given model, exception or possible use
32        self.description=''
33        #list of parameter that cannot be fitted
34        self.fixed= []
35           
36    def __str__(self):
37        """
38            @return: string representation
39        """
40        return self.name
41   
42    def is_fittable(self, par_name):
43        return par_name.lower() not in self.fixed
44        #For the future
45        #return self.params[str(par_name)].is_fittable()
46   
47    def run(self, x): return NotImplemented
48    def runXY(self, x): return NotImplemented 
49   
50    def clone(self):
51        """ Returns a new object identical to the current object """
52        obj = copy.deepcopy(self)
53        return self._clone(obj)
54   
55    def _clone(self, obj):
56        """
57            Internal utility function to copy the internal
58            data members to a fresh copy.
59        """
60        obj.params     = copy.deepcopy(self.params)
61        obj.details    = copy.deepcopy(self.details)
62        obj.dispersion = copy.deepcopy(self.dispersion)
63        return obj
64
65    def setParam(self, name, value):
66        """
67            Set the value of a model parameter
68       
69            @param name: name of the parameter
70            @param value: value of the parameter
71        """
72        # Look for dispersion parameters
73        toks = name.split('.')
74        #print "dispersion",self.dispersion
75        if len(toks)==2:
76            for item in self.dispersion.keys():
77                if item.lower()==toks[0].lower():
78                    for par in self.dispersion[item]:
79                        if par.lower() == toks[1].lower():
80                            self.dispersion[item][par] = value
81                            return
82        else:
83            # Look for standard parameter
84            for item in self.params.keys():
85                if item.lower()==name.lower():
86                    self.params[item] = value
87                    #self.params[item] = Parameter(name= item,value=value, is_fixed=False)
88                    #print "setparam,self.param",self.params.values()
89                    return
90           
91        raise ValueError, "Model does not contain parameter %s" % name
92       
93    def getParam(self, name):
94        """
95            Set the value of a model parameter
96
97            @param name: name of the parameter
98        """
99        # Look for dispersion parameters
100        toks = name.split('.')
101        if len(toks)==2:
102            for item in self.dispersion.keys():
103                if item.lower()==toks[0].lower():
104                    for par in self.dispersion[item]:
105                        if par.lower() == toks[1].lower():
106                            return self.dispersion[item][par]
107        else:
108            # Look for standard parameter
109            for item in self.params.keys():
110                if item.lower()==name.lower():
111                    #print "getparam", self.params
112                    #return self.params[item].value
113                    return self.params[item]
114           
115        raise ValueError, "Model does not contain parameter %s" % name
116     
117    def getParamList(self):
118        """
119            Return a list of all available parameters for the model
120        """ 
121        list = self.params.keys()
122        # WARNING: Extending the list with the dispersion parameters
123        list.extend(self.getDispParamList())
124        return list
125   
126    def getDispParamList(self):
127        """
128            Return a list of all available parameters for the model
129        """ 
130        list = []
131       
132        for item in self.dispersion.keys():
133            for p in self.dispersion[item].keys():
134                if p not in ['type']:
135                    list.append('%s.%s' % (item.lower(), p.lower()))
136                   
137        return list
138   
139    # Old-style methods that are no longer used
140    def setParamWithToken(self, name, value, token, member): return NotImplemented
141    def getParamWithToken(self, name, token, member): return NotImplemented
142    def getParamListWithToken(self, token, member): return NotImplemented
143    def __add__(self, other): raise ValueError, "Model operation are no longer supported"
144    def __sub__(self, other): raise ValueError, "Model operation are no longer supported"
145    def __mul__(self, other): raise ValueError, "Model operation are no longer supported"
146    def __div__(self, other): raise ValueError, "Model operation are no longer supported"
147       
Note: See TracBrowser for help on using the repository browser.