source: sasview/sansmodels/src/sans/models/pyre/ScatteringIntensityFactory.py @ 3ce9937

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 3ce9937 was ae3ce4e, checked in by Mathieu Doucet <doucetm@…>, 17 years ago

Moving sansmodels to trunk

  • Property mode set to 100644
File size: 4.0 KB
Line 
1#!/usr/bin/env python
2""" Pyre Component Model factory
3    Factory class that creates pyre component models
4
5    @copyright: Mathieu Doucet (University of Tennessee), for the DANSE project
6"""
7#pylint: disable-msg=R0904
8#pylint: disable-msg=R0912
9#pylint: disable-msg=R0201
10#pylint: disable-msg=W0142
11
12from pyre.components.Component import Component
13
14def ScatteringIntensityFactory( ModelClass ):
15    """ Returns the model if found
16        @param name: class of the model [class]
17        @return: the pyre component class [class]
18    """
19
20    ## Model object to inspect to write the adapter
21    model = ModelClass()
22     
23    class ScatteringModel(Component):
24        """
25            Pyre component adapter class for the specified model
26        """
27        has_changed = False
28
29        class Inventory(Component.Inventory):
30            """
31                Inventory class for the model adapter
32            """
33            import pyre.inventory as pyre_inventory
34           
35            # Create the inventory items from the parameters
36            # of the model
37            for name in model.params:
38                line = '%s=pyre_inventory.float( name, default = %g )' \
39                    % (name, model.params[name])
40                exec line in locals()
41                continue
42       
43        def __init__(self, name, facility="sans"):
44            """ Initialize the component
45                @param name: name of the component object
46                @param facility: name of the facility for the object
47            """
48            Component.__init__(self, name, facility)
49           
50            ## Model to be manipulated through the adapter
51            self._engine = ModelClass()
52            return
53
54                   
55        def __call__(self, *args, **kwds): 
56            """
57                Evaluate the model
58            """
59            return self._engine.run(args[0])
60           
61        def _configure(self):
62            """
63                Configure the component
64            """
65            Component._configure(self)
66           
67            # Add the inventory items to the list of attributes
68            for name in model.params: 
69                line = "self.%s = self.inventory.%s" % (name, name)
70                exec line in locals()
71                continue
72            return
73                   
74           
75        def _init(self):
76            """
77                Initialization of the underlying model
78            """
79            Component._init(self)
80           
81            # Set the parameters of the underlying model
82            for name in model.params: 
83                if hasattr(self, name):
84                    self.set(name, getattr(self, name))
85                else:
86                    raise ValueError, "%s not an attribute" % name
87           
88            return
89           
90        def set(self, key, value):
91            """
92                Set a parameter of the underlying model
93            """
94           
95            # Check that the parameter to set is available
96            if key not in model.params: 
97                raise ValueError, "Model doesn't have param %s" % key
98           
99            # Make use of  pyre's validator to check the inputs
100            cmd = "self.inventory.%s = value" % key
101            exec cmd in locals()
102           
103            # Pass the parameter to the underlying model
104            self._engine.setParam(key, value)
105            self.has_changed = True
106           
107        def __setattr__(self, key, value):
108            self.__dict__["has_changed"] = True
109            return Component.__setattr__(self, key, value)
110       
111        def changed(self):
112            tmp = self.has_changed
113            self.has_changed = False   
114            return tmp
115       
116        def xaxis(self): 
117            return "time", "t", "s"
118        def yaxis(self): 
119            return "amplitude", "A", ""
120           
121           
122           
123    return ScatteringModel
Note: See TracBrowser for help on using the repository browser.