source: sasview/sansmodels/src/sans/models/MultiplicationModel.py @ c9636f7

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 c9636f7 was c9636f7, checked in by Gervaise Alina <gervyh@…>, 15 years ago

model multiplication and testing

  • Property mode set to 100644
File size: 3.8 KB
Line 
1
2from sans.models.BaseComponent import BaseComponent
3import numpy, math
4
5class MultiplicationModel(BaseComponent):
6    """
7        Use for S(Q)*P(Q).
8        Perform multplication of two models.
9        Contains the models parameters combined.
10    """
11    def __init__(self, model1, model2 ):
12        BaseComponent.__init__(self)
13
14       
15        ## Name of the model
16        self.name = model1.name +" * "+ model2.name
17        ## model description
18        self.description= model1.name +" * "+ model2.name
19        self.description +="see %s description and %s description"%(model1.name,
20                                                                     model2.name)
21        self.model1= model1
22        self.model2= model2
23        ## dispersion
24        self.dispersion = {}
25        self._set_dispersion()
26        ## Define parameters
27        self.params = {}
28        self._set_params()
29        ## Parameter details [units, min, max]
30        self.details = {}
31        self._set_details()
32        #list of parameter that can be fitted
33        self.fixed= [] 
34        self._set_fixed_params() 
35       
36         
37    def _set_dispersion(self):
38        """
39           combined the two models dispersions
40        """
41        for name , value in self.model1.dispersion.iteritems():
42            self.dispersion[name]= value
43           
44        for name , value in self.model2.dispersion.iteritems():
45            if not name in self.dispersion.keys():
46                self.dispersion[name]= value
47               
48               
49    def _set_params(self):
50        """
51            Concatenate the parameters of the two models to create
52            this model parameters
53        """
54        for name , value in self.model1.params.iteritems():
55            self.params[name]= value
56           
57        for name , value in self.model2.params.iteritems():
58            if not name in self.params.keys():
59                self.params[name]= value
60           
61    def _set_details(self):
62        """
63            Concatenate details of the two models to create
64            this model details
65        """
66        for name ,detail in self.model1.details.iteritems():
67            self.details[name]= detail
68           
69        for name , detail in self.model2.details.iteritems():
70            if not name in self.details.keys():
71                self.details[name]= detail
72               
73    def _set_fixed_params(self):
74        """
75             fill the self.fixed list with the two models fixed list
76        """
77        for item in self.model1.fixed:
78            self.fixed.append(item)
79           
80        for item in self.model2.fixed:
81            if not item in self.fixed:
82                self.fixed.append(item)
83        self.fixed.sort()
84               
85               
86    def run(self, x = 0.0):
87        """ Evaluate the model
88            @param x: input q-value (float or [float, float] as [r, theta])
89            @return: (DAB value)
90        """
91        return self.model1.run(x)* self.model2.run(x)
92   
93    def runXY(self, x = 0.0):
94        """ Evaluate the model
95            @param x: input q-value (float or [float, float] as [qx, qy])
96            @return: DAB value
97        """
98        return self.model1.runXY(x)* self.model2.runXY(x)
99   
100    def set_dispersion(self, parameter, dispersion):
101        """
102            Set the dispersion object for a model parameter
103            @param parameter: name of the parameter [string]
104            @dispersion: dispersion object of type DispersionModel
105        """
106        if parameter in self.model1.getParamList():
107            return self.model1.set_dispersion(parameter, dispersion)
108        else:
109            return self.model2.set_dispersion(parameter, dispersion)
110
111
112
113   
Note: See TracBrowser for help on using the repository browser.