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

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 ae60f86 was ae60f86, checked in by Mathieu Doucet <doucetm@…>, 16 years ago

changing base model

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