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

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

name change from 2 model

  • Property mode set to 100644
File size: 4.1 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=""
17        ## model description
18        self.description=""
19        if  model1.name != "NoStructure"and  model2.name != "NoStructure":
20             self.name = model1.name +" * "+ model2.name
21             self.description= self.name+"\n"
22             self.description +="see %s description and %s description"%( model1.name,
23                                                                         model2.name )
24        elif  model2.name != "NoStructure":
25            self.name = model2.name
26            self.description= model2.description
27        else :
28            self.name = model1.name
29            self.description= model1.description
30 
31       
32       
33        self.model1= model1
34        self.model2= model2
35        ## dispersion
36        self.dispersion = {}
37        self._set_dispersion()
38        ## Define parameters
39        self.params = {}
40        self._set_params()
41        ## Parameter details [units, min, max]
42        self.details = {}
43        self._set_details()
44        #list of parameter that can be fitted
45        self.fixed= [] 
46        self._set_fixed_params() 
47       
48         
49    def _set_dispersion(self):
50        """
51           combined the two models dispersions
52        """
53        for name , value in self.model1.dispersion.iteritems():
54            self.dispersion[name]= value
55           
56        for name , value in self.model2.dispersion.iteritems():
57            if not name in self.dispersion.keys():
58                self.dispersion[name]= value
59               
60               
61    def _set_params(self):
62        """
63            Concatenate the parameters of the two models to create
64            this model parameters
65        """
66        for name , value in self.model1.params.iteritems():
67            self.params[name]= value
68           
69        for name , value in self.model2.params.iteritems():
70            if not name in self.params.keys():
71                self.params[name]= value
72           
73    def _set_details(self):
74        """
75            Concatenate details of the two models to create
76            this model details
77        """
78        for name ,detail in self.model1.details.iteritems():
79            self.details[name]= detail
80           
81        for name , detail in self.model2.details.iteritems():
82            if not name in self.details.keys():
83                self.details[name]= detail
84               
85    def _set_fixed_params(self):
86        """
87             fill the self.fixed list with the two models fixed list
88        """
89        for item in self.model1.fixed:
90            self.fixed.append(item)
91           
92        for item in self.model2.fixed:
93            if not item in self.fixed:
94                self.fixed.append(item)
95        self.fixed.sort()
96               
97               
98    def run(self, x = 0.0):
99        """ Evaluate the model
100            @param x: input q-value (float or [float, float] as [r, theta])
101            @return: (DAB value)
102        """
103        return self.model1.run(x)* self.model2.run(x)
104   
105    def runXY(self, x = 0.0):
106        """ Evaluate the model
107            @param x: input q-value (float or [float, float] as [qx, qy])
108            @return: DAB value
109        """
110        return self.model1.runXY(x)* self.model2.runXY(x)
111   
112    def set_dispersion(self, parameter, dispersion):
113        """
114            Set the dispersion object for a model parameter
115            @param parameter: name of the parameter [string]
116            @dispersion: dispersion object of type DispersionModel
117        """
118        if parameter in self.model1.getParamList():
119            return self.model1.set_dispersion(parameter, dispersion)
120        else:
121            return self.model2.set_dispersion(parameter, dispersion)
122
123
124
125   
Note: See TracBrowser for help on using the repository browser.