Ignore:
Timestamp:
Oct 19, 2009 4:57:35 PM (15 years ago)
Author:
Gervaise Alina <gervyh@…>
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:
eb575b0
Parents:
b72b595
Message:

refactor park_integration test

File:
1 edited

Legend:

Unmodified
Added
Removed
  • park_integration/test/test_fit_cylinder.py

    r1ea3488 r2eaaf1a  
    33""" 
    44import unittest 
    5 #from sans.guitools.plottables import Theory1D 
    6 #from sans.guitools.plottables import Data1D 
     5 
    76from danse.common.plottools.plottables import Data1D,Theory1D 
    87from sans.fit.AbstractFitEngine import Model,FitData1D 
     
    1110from DataLoader.loader import Loader 
    1211 
    13 class testFitModule(unittest.TestCase): 
    14     """ test fitting """ 
    15      
     12class TestSingleFit(unittest.TestCase): 
     13    """ test single fitting """ 
     14    def setUp(self): 
     15        """ initialize data""" 
     16        out = Loader().load("cyl_400_20.txt") 
     17        #Create data that fitting engine understands 
     18        data1 = Data1D(x=out.x, y=out.y, dx=out.dx, dy=out.dy) 
     19        self.data = FitData1D(data1) 
     20        # Create model that fitting engine understands 
     21        from sans.models.CylinderModel import CylinderModel 
     22        model1  = CylinderModel() 
     23        model1.setParam("scale", 1.0) 
     24        model1.setParam("radius",18) 
     25        model1.setParam("length", 397) 
     26        model1.setParam("contrast",3e-006 ) 
     27        model1.setParam("background", 0.0) 
     28      
     29        self.model = Model(model1) 
     30        
     31        self.pars1 =['length','radius','scale'] 
     32         
     33    def _fit(self, name="scipy"): 
     34        """ return fit result """ 
     35        fitter = Fit(name) 
     36        fitter.set_data(self.data,1) 
     37         
     38        fitter.set_model(self.model,1,self.pars1) 
     39        fitter.select_problem_for_fit(Uid=1,value=1) 
     40        return  fitter.fit() 
     41        
     42 
    1643    def test_scipy(self): 
    1744        """ Simple cylinder model fit (scipy)  """ 
    1845         
    19         out=Loader().load("cyl_400_20.txt") 
    20         data1 = Data1D(x=out.x, y=out.y, dx=out.dx, dy=out.y) 
    21          
    22         fitter = Fit('scipy') 
    23         # Receives the type of model for the fitting 
    24         from sans.models.CylinderModel import CylinderModel 
    25         model1  = CylinderModel() 
    26         model1.setParam('contrast', 1) 
    27         #data = Data(sans_data=data1) 
    28         data = FitData1D(data1) 
    29         model = Model(model1) 
    30          
    31         pars1 =['length','radius','scale'] 
    32         fitter.set_data(data,1) 
    33         model.set(scale=1e-10) 
    34         fitter.set_model(model,1,pars1) 
    35         fitter.select_problem_for_fit(Uid=1,value=1) 
    36         result1 = fitter.fit() 
     46        result1 = self._fit("scipy") 
    3747         
    3848        self.assert_(result1) 
     
    4252        self.assertTrue( math.fabs(result1.pvec[0]-400.0)/3.0 < result1.stderr[0] ) 
    4353        self.assertTrue( math.fabs(result1.pvec[1]-20.0)/3.0  < result1.stderr[1] ) 
    44         self.assertTrue( math.fabs(result1.pvec[2]-9.0e-12)/3.0   < result1.stderr[2] ) 
     54        self.assertTrue( math.fabs(result1.pvec[2]-1.0)/3.0   < result1.stderr[2] ) 
    4555        self.assertTrue( result1.fitness < 1.0 ) 
     56         
    4657         
    4758    def test_park(self): 
    4859        """ Simple cylinder model fit (park)  """ 
    49          
    50         out=Loader().load("cyl_400_20.txt") 
    51         data1 = Data1D(x=out.x, y=out.y, dx=out.dx, dy=out.y) 
    52          
    53         fitter = Fit('park') 
    54         # Receives the type of model for the fitting 
    55         from sans.models.CylinderModel import CylinderModel 
    56         model1  = CylinderModel() 
    57          
    58         #data = Data(sans_data=data1) 
    59         data = FitData1D(data1) 
    60         model = Model(model1) 
    61          
    62         pars1 =['length','radius','scale'] 
    63         fitter.set_data(data,1) 
    64         model.set(contrast= 1) 
    65         model.set(scale=1e-10) 
    66         fitter.set_model(model,1,pars1) 
    67         fitter.select_problem_for_fit(Uid=1,value=1) 
    68         result1 = fitter.fit() 
     60        result1 = self._fit("park") 
    6961         
    7062        self.assert_(result1) 
    7163        self.assertTrue(len(result1.pvec)>0 or len(result1.pvec)==0 ) 
    7264        self.assertTrue(len(result1.stderr)> 0 or len(result1.stderr)==0) 
    73          
    74         print result1.pvec[0]-400.0, result1.pvec[0] 
    75         print math.fabs(result1.pvec[0]-400.0)/3.0 
     65        
    7666        self.assertTrue( math.fabs(result1.pvec[0]-400.0)/3.0 < result1.stderr[0] ) 
    7767        self.assertTrue( math.fabs(result1.pvec[1]-20.0)/3.0  < result1.stderr[1] ) 
    78         self.assertTrue( math.fabs(result1.pvec[2]-9.0e-12)/3.0   < result1.stderr[2] ) 
     68        self.assertTrue( math.fabs(result1.pvec[2]-1.0)/3.0   < result1.stderr[2] ) 
    7969        self.assertTrue( result1.fitness < 1.0 ) 
    8070         
    81     def test_park2(self): 
    82         """ Simultaneous cylinder model fit (park)  """ 
     71         
     72         
     73class TestSimultaneousFit(unittest.TestCase): 
     74    """ test simultaneous fitting """ 
     75    def setUp(self): 
     76        """ initialize data""" 
    8377         
    8478        out=Loader().load("cyl_400_20.txt") 
    85         data1 = Data1D(x=out.x, y=out.y, dx=out.dx, dy=out.y) 
     79        data1 = Data1D(x=out.x, y=out.y, dx=out.dx, dy=out.dy) 
     80        self.data1 = FitData1D(data1) 
    8681         
    8782        out2=Loader().load("cyl_400_40.txt") 
    88         data2 = Data1D(x=out2.x, y=out2.y, dx=out2.dx, dy=out2.y) 
    89          
    90         fitter = Fit('park') 
     83        data2 = Data1D(x=out2.x, y=out2.y, dx=out2.dx, dy=out2.dy) 
     84        self.data2 = FitData1D(data2) 
     85     
    9186        # Receives the type of model for the fitting 
    9287        from sans.models.CylinderModel import CylinderModel 
    9388        cyl1  = CylinderModel() 
    9489        cyl1.name = "C1" 
    95          
    96         #data1 = Data(sans_data=data1) 
    97         data1 = FitData1D(data1) 
    98         model1 = Model(cyl1) 
    99         model1.set(contrast=1) 
    100         model1.set(scale= 1e-10) 
    101         fitter.set_data(data1,1) 
    102         fitter.set_model(model1, 1, ['length','radius','scale']) 
     90        self.model1 = Model(cyl1) 
     91        self.model1.set(scale= 1.0) 
     92        self.model1.set(radius=18) 
     93        self.model1.set(length=396) 
     94        self.model1.set(contrast=3e-006 ) 
     95        self.model1.set(background=0.0) 
    10396         
    10497        cyl2  = CylinderModel() 
    10598        cyl2.name = "C2" 
     99        self.model2 = Model(cyl2) 
     100        self.model2.set(scale= 1.0) 
     101        self.model2.set(radius=37) 
     102        self.model2.set(length='C1.length') 
     103        self.model2.set(contrast=3e-006 ) 
     104        self.model2.set(background=0.0) 
     105        
     106    def _fit(self, name="park"): 
     107        """ return fit result """ 
     108        fitter = Fit(name) 
     109        fitter.set_data(self.data1,1) 
     110        fitter.set_model(self.model1, 1, ['length','radius','scale']) 
    106111         
    107         #data2 = Data(sans_data=data2) 
    108         data2 = FitData1D(data2) 
    109         # This is wrong. We should not store string as  
    110         # parameter values 
    111         # Why not inherit our AbstracFitEngine.Model from Park.Model? 
    112          
    113         #cyl2.setParam('length', 'C1.length') 
    114         #print "read back:", cyl2.getParam('length') 
    115          
    116         model2 = Model(cyl2) 
    117         model2.set(length='C1.length') 
    118         model2.set(contrast=1) 
    119         model2.set(scale= 1e-10) 
    120         fitter.set_data(data2,2) 
    121         fitter.set_model(model2, 2, ['radius','scale']) 
     112        fitter.set_data(self.data2,2) 
     113        fitter.set_model(self.model2, 2, ['radius','scale']) 
    122114        fitter.select_problem_for_fit(Uid=1,value=1) 
    123115        fitter.select_problem_for_fit(Uid=2,value=1) 
    124         result1 = fitter.fit() 
     116        return fitter.fit() 
     117     
     118     
     119    def test_park2(self): 
     120        """ Simultaneous cylinder model fit (park)  """ 
    125121         
     122        result1= self._fit('park') 
    126123        self.assert_(result1) 
    127         self.assertTrue(len(result1.pvec)>0 or len(result1.pvec)==0 ) 
    128         self.assertTrue(len(result1.stderr)> 0 or len(result1.stderr)==0) 
    129          
     124        self.assertTrue(len(result1.pvec)>=0 ) 
     125        self.assertTrue(len(result1.stderr)>= 0) 
     126       
    130127        for par in result1.parameters: 
    131128            if par.name=='C1.length': 
     
    140137            elif par.name=='C1.scale': 
    141138                print par.name, par.value 
    142                 self.assertTrue( math.fabs(par.value-9.0e-12)/3.0 < par.stderr ) 
     139                self.assertTrue( math.fabs(par.value-1.0)/3.0 < par.stderr ) 
    143140            elif par.name=='C2.scale': 
    144141                print par.name, par.value 
    145                 self.assertTrue( math.fabs(par.value-9.0e-12)/3.0 < par.stderr ) 
     142                self.assertTrue( math.fabs(par.value-1.0)/3.0 < par.stderr ) 
    146143             
    147          
     144 
     145if __name__ == '__main__': 
     146    unittest.main()         
    148147        
Note: See TracChangeset for help on using the changeset viewer.