Changeset a1b2471 in sasview


Ignore:
Timestamp:
Sep 21, 2010 5:44:24 PM (14 years ago)
Author:
Jae Cho <jhjcho@…>
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:
db08737
Parents:
60c320b
Message:

added sld plot for onion model and etc…

Files:
1 added
9 edited

Legend:

Unmodified
Added
Removed
  • sansmodels/src/sans/models/CoreMultiShellModel.py

    r4523b68 ra1b2471  
    129129                        except: pass 
    130130 
    131     
     131    def getProfile(self): 
     132        """ 
     133        Get SLD profile  
     134         
     135        : return: (r, beta) where r is a list of radius of the transition points 
     136                beta is a list of the corresponding SLD values  
     137        : Note: This works only for func_shell# = 2. 
     138        """ 
     139        r = [] 
     140        beta = [] 
     141        # for core at r=0 
     142        r.append(0) 
     143        beta.append(self.params['sld_core']) 
     144        # for core at r=rad_core 
     145        r.append(self.params['rad_core']) 
     146        beta.append(self.params['sld_core']) 
     147         
     148        # for shells 
     149        for n in range(1,self.n_shells+1): 
     150            # Left side of each shells 
     151            r0 = r[len(r)-1]             
     152            r.append(r0) 
     153            exec "beta.append(self.params['sld_shell%s'% str(n)])" 
     154 
     155            # Right side of each shells 
     156            exec "r0 += self.params['thick_shell%s'% str(n)]" 
     157            r.append(r0) 
     158            exec "beta.append(self.params['sld_shell%s'% str(n)])" 
     159             
     160        # for solvent 
     161        r0 = r[len(r)-1]             
     162        r.append(r0) 
     163        beta.append(self.params['sld_solv']) 
     164        r_solv = 5*r0/4 
     165        r.append(r_solv) 
     166        beta.append(self.params['sld_solv']) 
     167         
     168        return r, beta 
     169 
    132170    def setParam(self, name, value): 
    133171        """  
  • sansmodels/src/sans/models/MultiplicationModel.py

    r06c7fcc ra1b2471  
    8282        ##set dispersion only from p_model  
    8383        for name , value in self.p_model.dispersion.iteritems(): 
    84             self.dispersion[name]= value                            
    85  
     84            self.dispersion[name]= value  
     85                                       
     86    def getProfile(self): 
     87        """ 
     88        Get SLD profile of p_model if exists 
     89         
     90        : return: (r, beta) where r is a list of radius of the transition points 
     91                beta is a list of the corresponding SLD values  
     92        : Note: This works only for func_shell# = 2 (exp function). 
     93        """ 
     94        try: 
     95            x,y = self.p_model.getProfile() 
     96        except: 
     97            x = None 
     98            y = None 
     99             
     100        return x, y 
     101     
    86102    def _set_params(self): 
    87103        """ 
  • sansmodels/src/sans/models/SphereExpShellModel.py

    re096270 ra1b2471  
    4242        for item in self.model.orientation_params: 
    4343            self.orientation_params.append(item) 
    44                  
     44        self.getProfile()         
    4545    def _clone(self, obj): 
    4646        """ 
     
    133133                            self.model.setParam(key, value) 
    134134                        except: pass 
    135  
    136     
     135    def getProfile(self): 
     136        """ 
     137        Get SLD profile  
     138         
     139        : return: (r, beta) where r is a list of radius of the transition points 
     140                beta is a list of the corresponding SLD values  
     141        : Note: This works only for func_shell# = 2. 
     142        """ 
     143        # max_pts for each shells 
     144        max_pts = 10 
     145        r = [] 
     146        beta = [] 
     147        # for core at r=0 
     148        r.append(0) 
     149        beta.append(self.params['sld_core']) 
     150        # for core at r=rad_core 
     151        r.append(self.params['rad_core']) 
     152        beta.append(self.params['sld_core']) 
     153         
     154        # for shells 
     155        for n in range(1,self.n_shells+1): 
     156            # Left side of each shells 
     157            r0 = r[len(r)-1]             
     158            r.append(r0) 
     159            exec "beta.append(self.params['sld_in_shell%s'% str(n)])" 
     160             
     161            exec "A = self.params['A_shell%s'% str(n)]" 
     162            if A ==0: 
     163                # Right side of each shells 
     164                exec "r0 += self.params['thick_shell%s'% str(n)]" 
     165                r.append(r0) 
     166                exec "beta.append(self.params['sld_in_shell%s'% str(n)])" 
     167            else: 
     168                from math import exp 
     169                rn = r0 
     170                for n_sub in range(0,max_pts): 
     171                    # Right side of each sub_shells 
     172                    exec "rn += self.params['thick_shell%s'% str(n)]/10.0" 
     173                    r.append(rn) 
     174                    exec "slope = (self.params['sld_out_shell%s'% str(n)] \ 
     175                                        -self.params['sld_in_shell%s'% str(n)]) \ 
     176                                        /(exp(self.params['A_shell%s'% str(n)])-1)" 
     177                    exec "const = (self.params['sld_in_shell%s'% str(n)]-slope)" 
     178                    exec "beta_n = slope*exp((self.params['A_shell%s'% str(n)]*(rn-r0) \ 
     179                                        /self.params['thick_shell%s'% str(n)])) + const" 
     180                    beta.append(beta_n) 
     181             
     182        # for solvent 
     183        r0 = r[len(r)-1]             
     184        r.append(r0) 
     185        beta.append(self.params['sld_solv']) 
     186        r_solv = 5*r0/4 
     187        r.append(r_solv) 
     188        beta.append(self.params['sld_solv']) 
     189         
     190        return r, beta 
     191     
    137192    def setParam(self, name, value): 
    138193        """  
  • sansmodels/src/sans/models/c_extensions/onion.c

    re096270 ra1b2471  
    4141        fun_type[n+1] = 0; 
    4242 
    43     double bes,fun,alpha,f,vol,qr,r,contr,f2; 
     43    double bes,fun,alpha,f,vol,vol_pre,vol_sub,qr,r,contr,f2; 
    4444    double sign; 
    4545    double pi; 
     
    4848    f = 0.0; 
    4949    r = 0.0; 
     50    vol = 0.0; 
     51    vol_pre = 0.0; 
     52    vol_sub = 0.0; 
    5053    double r0 = 0.0; 
    5154 
     
    5861                A[i] = 0.0; 
    5962        } 
     63        vol_pre = vol; 
    6064        switch(fun_type[i]){ 
    6165            case 2 : 
     
    103107 
    104108                        vol = 4.0 * pi / 3.0 * r * r * r; 
     109                        if (j == 1 && fabs(sld_in[i]-sld_solv) < 1e-04*fabs(sld_solv) && A[i]==0.0){ 
     110                                vol_sub += (vol_pre - vol); 
     111                        } 
    105112                        f += vol * (contr * (fun) + (sld_in[i]-slope[i]) * bes); 
    106113                        } 
     
    141148                                } 
    142149                            vol = 4.0 * pi / 3.0 * r * r * r; 
     150                            if (j == 1 && fabs(sld_in[i]-sld_solv) < 1e-04*fabs(sld_solv) && fun_type[i]==0){ 
     151                                vol_sub += (vol_pre - vol); 
     152                            } 
    143153                            f += vol * (bes * contr + fun * slope[i]); 
    144154                            } 
     
    147157 
    148158        } 
    149  
     159    vol += vol_sub; 
    150160    f2 = f * f / vol * 1.0e8; 
    151161        f2 *= scale; 
  • sansmodels/src/sans/models/test/utest_model_sphereexpshell.py

    re096270 ra1b2471  
    1414        from sans.models.SphereExpShellModel import SphereExpShellModel 
    1515        from sans.models.CoreMultiShellModel import CoreMultiShellModel 
     16        from sans.models.VesicleModel import VesicleModel  
    1617 
    1718        self.model = SphereExpShellModel(n_shells=1) 
    1819        self.model2 = SphereExpShellModel(n_shells=1).model 
    1920        self.model3 = CoreMultiShellModel(n_shells=1) 
     21        self.model4 = VesicleModel() 
    2022         
    2123    def test_compare_Exp0_flat(self): 
     
    4951        self.assertAlmostEqual(self.model2.run(0.1),self.model3.run(0.1),10) 
    5052 
     53    def test_compare_Exp0_flat_vesicle(self): 
     54        """ 
     55        Check if Exp function with A_shell=0 gives the same value as Flat function of vesicle model when sld_solv=sld_core 
     56        """ 
     57        print "\n*****Note: All tests (test_compare_Exp0_flat and test_compare_Expsmall_line) were passes since Sept. 18, 2010..." 
     58        # Exp: func_shell = 2, Line: func_shell =1 , Flat: func_shell = 0. 
     59        # A_shell = The coefficient of the exponential function: exp(A_shell*(r-ro)/thick_shell) 
     60        # exp function by default 
     61        # exp function crosses over to flat func at A_shell=0 
     62        self.model.setParam("A_shell1", 0) 
     63                # set A_shell=1 
     64        self.model2.setParam("A_shell1", 1) 
     65        # change the function to flat function 
     66        self.model2.setParam("func_shell1", 0) 
     67         
     68        # model: set param values as same as the model2 
     69        self.model.setParam("background", 0.0) 
     70        self.model.setParam("rad_core", 100.0) 
     71        self.model.setParam("scale", 1.0) 
     72        self.model.setParam("sld_core", 6.36e-006) 
     73        self.model.setParam("sld_in_shell1", 5e-007) 
     74        self.model.setParam("sld_solv", 6.36e-006) 
     75        self.model.setParam("thick_shell1", 30.0) 
     76        # model2: set param values as same as the model2 
     77        self.model2.setParam("background", 0.0) 
     78        self.model2.setParam("rad_core", 100.0) 
     79        self.model2.setParam("scale", 1.0) 
     80        self.model2.setParam("sld_core", 6.36e-006) 
     81        self.model2.setParam("sld_in_shell1", 5e-007) 
     82        self.model2.setParam("sld_solv", 6.36e-006) 
     83        self.model2.setParam("thick_shell1", 30.0) 
     84        #Compare exp(A=0) to flat (where A_shell is null) function 
     85        self.assertEqual(self.model.run(0.1),self.model4.run(0.1)) 
     86        self.assertEqual(self.model2.run(0.1),self.model4.run(0.1)) 
     87        #self.assertAlmostEqual(self.model2.run(0.1),self.model3.run(0.1),10) 
     88 
    5189   
    5290    def test_compare_Expsmall_line(self): 
  • sansmodels/src/sans/models/test/utest_models.py

    r9ce41c6 ra1b2471  
    1313# pylint: disable-msg=R0201 
    1414 
    15  
     15class TestSpherew(unittest.TestCase): 
     16    """ Unit tests for sphere model """ 
     17     
     18    def setUp(self): 
     19        from sans.models.CoreFourShellModel import CoreFourShellModel 
     20        from sans.models.CoreMultiShellModel import CoreMultiShellModel 
     21        self.comp = CoreMultiShellModel(4) 
     22         
     23    def test1D(self): 
     24        """ Test 1D model for a sphere """ 
     25        self.comp._set_dispersion() 
    1626         
    1727class TestSphere(unittest.TestCase): 
  • sansview/perspectives/fitting/basepage.py

    re87f9fc ra1b2471  
    16221622        self.text2 = wx.StaticText( self,-1,"P(Q)*S(Q)" ) 
    16231623        self.mutifactor_text = wx.StaticText( self,-1,"No. of Shells: " ) 
    1624          
     1624        self.show_sld_button = wx.Button( self,-1,"Show SLD Profile" ) 
     1625        self.show_sld_button.Bind(wx.EVT_BUTTON,self._on_show_sld) 
     1626 
    16251627        self.formfactorbox = wx.ComboBox(self, -1,style=wx.CB_READONLY) 
    16261628        if self.model!= None: 
     
    16501652        mutifactor_selection.Add(self.mutifactor_text) 
    16511653        mutifactor_selection.Add(self.multifactorbox) 
    1652          
     1654        mutifactor_selection.Add((10,5)) 
     1655        mutifactor_selection.Add(self.show_sld_button) 
     1656 
    16531657        boxsizer1.Add( sizer_buttons ) 
    16541658        boxsizer1.Add( (15,15)) 
     
    16581662         
    16591663        self._set_multfactor_combobox() 
    1660  
     1664        self.show_sld_button.Hide() 
    16611665        #-------------------------------------------------------- 
    16621666        sizer.Add(boxsizer1,0, wx.EXPAND | wx.ALL, 10) 
    16631667        sizer.Layout() 
    16641668        self.SetScrollbars(20,20,25,65) 
     1669         
     1670         
     1671    def _on_show_sld(self, event=None): 
     1672        """ 
     1673        Plot SLD profile 
     1674        """ 
     1675        # get profile data 
     1676        x,y=self.model.getProfile() 
     1677 
     1678        from danse.common.plottools import Data1D 
     1679        from sans.perspectives.theory.profile_dialog import SLDPanel 
     1680        sld_data = Data1D(x,y) 
     1681        sld_data.name = 'SLD' 
     1682    
     1683        self.panel = SLDPanel(self, data=sld_data,id =-1 ) 
     1684        self.panel.ShowModal()     
    16651685         
    16661686    def _set_multfactor_combobox(self):    
     
    18431863            if form_factor().__class__ in self.model_list_box["Multi-Functions"]: 
    18441864                self._show_multfactor_combobox() 
     1865                self.show_sld_button.Show(True) 
    18451866                m_id = self.multifactorbox.GetCurrentSelection() 
    18461867                self.multi_factor = self.multifactorbox.GetClientData(m_id) 
     
    18491870            else: 
    18501871                self._hide_multfactor_combobox() 
     1872                self.show_sld_button.Hide() 
    18511873                form_factor = form_factor() 
    18521874                self.multi_factor = None 
    18531875        else: 
    18541876            self._hide_multfactor_combobox() 
     1877            self.show_sld_button.Hide() 
    18551878            self.multi_factor = None   
    18561879               
  • sansview/perspectives/fitting/models.py

    re87f9fc ra1b2471  
    193193        self.shape_list.append(CoreMultiShellModel) 
    194194        self.multiplication_factor.append(CoreMultiShellModel) 
     195        self.multi_func_list.append(CoreMultiShellModel) 
    195196         
    196197        from sans.models.VesicleModel import VesicleModel 
  • theoryview/perspectives/theory/basepage.py

    re87f9fc ra1b2471  
    11951195        self.text2 = wx.StaticText( self,-1,"P(Q)*S(Q)" ) 
    11961196        self.mutifactor_text = wx.StaticText( self,-1,"No. of Shells: " ) 
    1197          
     1197        self.show_sld_button = wx.Button( self,-1,"Show SLD Profile" ) 
     1198        self.show_sld_button.Bind(wx.EVT_BUTTON,self._on_show_sld) 
    11981199        self.formfactorbox = wx.ComboBox(self, -1,style=wx.CB_READONLY) 
    11991200        if self.model!=None: 
     
    12421243        mutifactor_selection.Add(self.mutifactor_text) 
    12431244        mutifactor_selection.Add(self.multifactorbox) 
     1245        mutifactor_selection.Add((5,5)) 
     1246        mutifactor_selection.Add(self.show_sld_button) 
    12441247         
    12451248        boxsizer1.Add( sizer_buttons ) 
     
    12501253         
    12511254        self._set_multfactor_combobox() 
    1252  
     1255        self.show_sld_button.Hide() 
     1256         
    12531257        #-------------------------------------------------------- 
    12541258        sizer.Add(boxsizer1,0, wx.EXPAND | wx.ALL, 10) 
     
    12561260        self.SetScrollbars(20,20,25,65) 
    12571261         
     1262    def _on_show_sld(self, event=None): 
     1263        """ 
     1264        Plot SLD profile 
     1265        """ 
     1266        # get profile data 
     1267        x,y=self.model.getProfile() 
     1268 
     1269        from danse.common.plottools import Data1D 
     1270        from profile_dialog import SLDPanel 
     1271        sld_data = Data1D(x,y) 
     1272        sld_data.name = 'SLD' 
     1273    
     1274        self.panel = SLDPanel(self, data=sld_data,id =-1 ) 
     1275        self.panel.ShowModal() 
     1276 
    12581277    def _set_multfactor_combobox(self):    
    12591278        """ 
     
    14691488            if form_factor().__class__ in self.model_list_box["Multi-Functions"]: 
    14701489                self._show_multfactor_combobox() 
     1490                self.show_sld_button.Show(True) 
    14711491                m_id = self.multifactorbox.GetCurrentSelection() 
    14721492                self.multi_factor = self.multifactorbox.GetClientData(m_id) 
     
    14751495            else: 
    14761496                self._hide_multfactor_combobox() 
     1497                self.show_sld_button.Hide() 
    14771498                form_factor = form_factor() 
    14781499                self.multi_factor = None 
    14791500        else: 
    14801501            self._hide_multfactor_combobox() 
     1502            self.show_sld_button.Hide() 
    14811503            self.multi_factor = None   
    14821504               
Note: See TracChangeset for help on using the changeset viewer.