Changeset 8809e48 in sasview


Ignore:
Timestamp:
Oct 15, 2008 11:01:06 AM (16 years ago)
Author:
Mathieu Doucet <doucetm@…>
Branches:
master, ESS_GUI, ESS_GUI_Docs, ESS_GUI_batch_fitting, ESS_GUI_bumps_abstraction, ESS_GUI_iss1116, ESS_GUI_iss879, ESS_GUI_iss959, ESS_GUI_opencl, ESS_GUI_ordering, ESS_GUI_sync_sascalc, costrafo411, magnetic_scatt, release-4.1.1, release-4.1.2, release-4.2.2, release_4.0.1, ticket-1009, ticket-1094-headless, ticket-1242-2d-resolution, ticket-1243, ticket-1249, ticket885, unittest-saveload
Children:
00353b4
Parents:
ae60f86
Message:

Updated cloning

Location:
sansmodels/src
Files:
3 added
15 edited
1 moved

Legend:

Unmodified
Added
Removed
  • sansmodels/src/release_notes.txt

    rb88c6e0 r8809e48  
    99    - Release date: ? 
    1010    - C extension models now use new C++ classes that incorporate dispersity and averaging 
    11       functionality.  
     11      functionality. See utest_dispersity.py for examples of how to use the new dispersion 
     12      classes. 
     13       
     14      # Create a model 
     15      model= CylinderModel() 
     16       
     17      # Create a dispersion model 
     18      disp = GaussianDispersion() 
     19       
     20          # Set the dispersion for a chosen parameter 
     21          model.set_dispersion('radius', disp) 
     22           
     23          # Set the parameters of the dispersion model 
     24      model.dispersion['radius']['width'] = 5.0 
     25      model.dispersion['radius']['npts'] = 100 
     26 
    1227     
    1328    Version 0.4.1 
  • sansmodels/src/sans/models/BaseComponent.py

    rae60f86 r8809e48  
    3838    def clone(self): 
    3939        """ Returns a new object identical to the current object """ 
    40          
    4140        obj = copy.deepcopy(self) 
     41        return self._clone(obj) 
     42     
     43    def _clone(self, obj): 
     44        """ 
     45            Internal utility function to copy the internal 
     46            data members to a fresh copy. 
     47        """ 
    4248        obj.params     = copy.deepcopy(self.params) 
    4349        obj.details    = copy.deepcopy(self.details) 
    4450        obj.dispersion = copy.deepcopy(self.dispersion) 
    45      
    4651        return obj 
    4752 
     
    7075             
    7176        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 
    11577         
    11678    def getParam(self, name): 
  • sansmodels/src/sans/models/BaseModel.py

    rae60f86 r8809e48  
    3939        self.value = value 
    4040         
     41    def __str__(self): 
     42        return "%s: %g" % (self.name, self.value) 
    4143 
    4244class ParameterProperty(object): 
     
    6870        ## Dictionary of Parameter objects 
    6971        self.parameters = {} 
    70          
    71         for item in self.params: 
    72             self.parameters[item] = Parameter(item, self.params[item]) 
    73  
    74          
    7572 
    7673    # Evaluation methods to be implemented by the models 
     
    106103        if name in self.parameters: 
    107104            print "found" 
     105            #self.parameters[name].value = value 
    108106        return object.__setattr__(self, name, value) 
    109107         
  • sansmodels/src/sans/models/CoreShellModel.py

    r0f5bc9f r8809e48  
    6565    def clone(self): 
    6666        """ Return a identical copy of self """ 
    67         obj = CoreShellModel() 
    68         obj.params = copy.deepcopy(self.params) 
    69         return obj    
     67        return self._clone(CoreShellModel())    
    7068    
    7169    def run(self, x = 0.0): 
  • sansmodels/src/sans/models/CylinderModel.py

    raf03ddd r8809e48  
    6565    def clone(self): 
    6666        """ Return a identical copy of self """ 
    67         obj = CylinderModel() 
    68         obj.params = copy.deepcopy(self.params) 
    69         return obj    
     67        return self._clone(CylinderModel())    
    7068    
    7169    def run(self, x = 0.0): 
  • sansmodels/src/sans/models/EllipsoidModel.py

    r0f5bc9f r8809e48  
    6565    def clone(self): 
    6666        """ Return a identical copy of self """ 
    67         obj = EllipsoidModel() 
    68         obj.params = copy.deepcopy(self.params) 
    69         return obj    
     67        return self._clone(EllipsoidModel())    
    7068    
    7169    def run(self, x = 0.0): 
  • sansmodels/src/sans/models/EllipticalCylinderModel.py

    r0f5bc9f r8809e48  
    6969    def clone(self): 
    7070        """ Return a identical copy of self """ 
    71         obj = EllipticalCylinderModel() 
    72         obj.params = copy.deepcopy(self.params) 
    73         return obj    
     71        return self._clone(EllipticalCylinderModel())    
    7472    
    7573    def run(self, x = 0.0): 
  • sansmodels/src/sans/models/ModelAdaptor.py

    rae60f86 r8809e48  
    5353    def __init__(self): 
    5454        """ Initialization""" 
     55        ## Dictionary of Parameter objects 
     56        self.parameters = {} 
    5557        ## Dictionary of parameters, available for backward compatibility 
    5658        self.params = ParameterDict(self.parameters) 
  • sansmodels/src/sans/models/NewCylinderModel.py

    rae60f86 r8809e48  
    2222""" 
    2323 
    24 from sans.models.BaseModel import BaseModel 
     24from sans.models.BaseModel import BaseModel, Parameter, ParameterProperty 
    2525from sans_extension.c_models import CCylinderModel 
    2626import copy     
     
    4141 
    4242    """ 
    43          
     43    scale      = ParameterProperty('scale') 
     44    radius     = ParameterProperty('radius') 
     45    length     = ParameterProperty('length') 
     46    contrast   = ParameterProperty('contrast') 
     47    background = ParameterProperty('background') 
     48    cyl_theta  = ParameterProperty('cyl_theta') 
     49    cyl_phi    = ParameterProperty('cyl_phi') 
     50         
    4451    def __init__(self): 
    4552        """ Initialization """ 
     
    6269        self.details['cyl_phi'] = ['rad', None, None] 
    6370 
    64     
     71        # The C models have a self.params dictionary 
     72        for item in self.params: 
     73            self.parameters[item] = Parameter(item, self.params[item]) 
     74 
    6575    def clone(self): 
    6676        """ Return a identical copy of self """ 
  • sansmodels/src/sans/models/SphereModel.py

    r0f5bc9f r8809e48  
    5959    def clone(self): 
    6060        """ Return a identical copy of self """ 
    61         obj = SphereModel() 
    62         obj.params = copy.deepcopy(self.params) 
    63         return obj    
     61        return self._clone(SphereModel())    
    6462    
    6563    def run(self, x = 0.0): 
  • sansmodels/src/sans/models/c_models/modelTemplate.txt

    raf03ddd r8809e48  
    4848    def clone(self): 
    4949        """ Return a identical copy of self """ 
    50         obj = [PYTHONCLASS]() 
    51         obj.params = copy.deepcopy(self.params) 
    52         return obj    
     50        return self._clone([PYTHONCLASS]())    
    5351    
    5452    def run(self, x = 0.0): 
  • sansmodels/src/sans/models/test/utest_dispersity.py

    rae60f86 r8809e48  
    4747        self.assertAlmostEqual(self.model.run(0.001), 4723.32213339, 3) 
    4848        self.assertAlmostEqual(self.model.runXY([0.001,0.001]), 4743.56, 2) 
     49         
     50    def test_clone(self): 
     51        from sans.models.dispersion_models import GaussianDispersion 
     52        disp = GaussianDispersion() 
     53        self.model.set_dispersion('radius', disp) 
     54        self.model.dispersion['radius']['width'] = 5.0 
     55        self.model.dispersion['radius']['npts'] = 100 
     56        self.model.setParam('scale', 10.0) 
     57         
     58        new_model = self.model.clone() 
     59        self.assertAlmostEqual(new_model.run(0.001), 4723.32213339, 3) 
     60        self.assertAlmostEqual(new_model.runXY([0.001,0.001]), 4743.56, 2) 
    4961         
    5062    def test_gaussian_zero(self): 
  • sansmodels/src/sans/models/test/utest_newstylemodels.py

    rae60f86 r8809e48  
    2222        return self.params['scale']*x 
    2323 
    24 from sans.models.BaseModel import BaseModel,ParameterProperty 
     24from sans.models.BaseModel import BaseModel, Parameter, ParameterProperty 
    2525class NewTestModel(BaseModel): 
    2626    scale = ParameterProperty('scale') 
     
    3131        self.parameters['scale'] = Parameter('scale', 4.0)  
    3232         
    33     def run(self, x): 
     33         
     34    def runXY(self, x): 
    3435        return self.scale*x 
    3536         
    36  
     37class TestBogusModel(unittest.TestCase): 
     38    def setUp(self): 
     39        self.model = NewTestModel() 
     40         
     41    def test_call(self): 
     42        self.assertEqual(self.model(1), 4.0) 
     43        self.model.scale = 1.0 
     44        self.assertEqual(self.model(1), 1.0) 
     45        self.model.setParam('scale',2.0) 
     46        self.assertEqual(self.model(1), 2.0) 
     47        self.assertEqual(self.model.getParam('scale'), 2.0) 
     48         
    3749class TestBaseModel(unittest.TestCase): 
    3850    """ 
     
    6678         
    6779         
    68         print self.model.parameters 
    6980         
    7081        print self.model(0.001) 
     82        print self.model.parameters['length'] 
    7183        self.model.setParam("length", 250.0) 
     84        self.assertEquals(self.model.getParam("length"), 250.0) 
     85         
     86        print self.model.parameters['length'] 
    7287        print self.model(0.001) 
    7388         
  • sansmodels/src/sans/models/test/utest_nonshape.py

    ra55fac1 r8809e48  
    130130        # An exceptio is raised 
    131131        self.assertRaises(ZeroDivisionError, self.model.run, 0.0) 
     132         
     133    def test1D_clone(self): 
     134        value = self._func(50.0, 1.0, 10.0, 2.0) 
     135        self.model.setParam('background', 10.0) 
     136        clone = self.model.clone() 
     137        self.assertEqual(clone.run(2.0), value) 
     138        self.assertEqual(clone.runXY(2.0), value) 
     139         
     140        # User enter zero as a value of x 
     141        # An exceptio is raised 
     142        self.assertRaises(ZeroDivisionError, clone.run, 0.0) 
    132143         
    133144    def test2D(self): 
  • sansmodels/src/setup.py

    r0f5bc9f r8809e48  
    9292    ext_modules = [ Extension("sans_extension.c_models", 
    9393     sources = [ 
    94         srcdir+"/c_models.cpp", 
     94        "sans/models/c_models/c_models.cpp", 
    9595        #srcdir+"/CSphereModel.c", 
    9696        #srcdir+"/sphere.c", 
Note: See TracChangeset for help on using the changeset viewer.