Ignore:
Timestamp:
Oct 20, 2010 6:08:34 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:
d2539aa
Parents:
f118fe2f
Message:

added new models

File:
1 edited

Legend:

Unmodified
Added
Removed
  • sansview/perspectives/fitting/fitpage.py

    r20905a0 rfb59ed9  
    11921192            self.smear_accuracy.Append(list[idx],idx) 
    11931193             
     1194    def _set_fun_box_list(self,fun_box): 
     1195        """ 
     1196        Set the list of func for multifunctional models 
     1197        """ 
     1198        # Check if it is multi_functional model 
     1199        if self.model.__class__ not in self.model_list_box["Multi-Functions"]: 
     1200            return None 
     1201        # Get the func name list 
     1202        list = self.model.fun_list 
     1203        if len(list) == 0: 
     1204            return None 
     1205        # build function (combo)box 
     1206        ind = 0 
     1207        while(ind < len(list)): 
     1208            for key, val in list.iteritems(): 
     1209                if (val == ind): 
     1210                    fun_box.Append(key,val) 
     1211                    break 
     1212            ind += 1 
     1213         
    11941214    def _on_select_accuracy(self,event): 
    11951215        """ 
     
    12061226            if self.current_smearer != None: 
    12071227                self.current_smearer.set_accuracy(accuracy = self.smear2d_accuracy)  
     1228        event.Skip() 
     1229 
     1230    def _on_fun_box(self,event): 
     1231        """ 
     1232        Select an func: Erf,Rparabola,LParabola 
     1233        """ 
     1234        fun_val = None 
     1235        fun_box = event.GetEventObject() 
     1236        name = fun_box.Name 
     1237        value = fun_box.GetValue() 
     1238        if self.model.fun_list.has_key(value): 
     1239            fun_val = self.model.fun_list[value] 
     1240 
     1241        self.model.setParam(name,fun_val) 
     1242        # save state 
     1243        self._copy_parameters_state(self.str_parameters, self.state.str_parameters) 
     1244        # update params 
     1245        self._update_paramv_on_fit()  
     1246        # draw 
     1247        self._draw_model() 
     1248        self.Refresh() 
     1249        # get ready for new event 
    12081250        event.Skip() 
    12091251         
     
    20462088        self.sizer3.Clear(True) 
    20472089        self.parameters = [] 
     2090        self.str_parameters = [] 
    20482091        self.param_toFit=[] 
    20492092        self.fittable_param=[] 
     
    20742117            Custom compare to order, first by alphabets then second by number. 
    20752118            """  
     2119            # number at the last digit 
    20762120            a_last = a[len(a)-1] 
    20772121            b_last = b[len(b)-1] 
    2078              
     2122            # default 
    20792123            num_a = None 
    20802124            num_b = None 
     2125            # split the names 
     2126            a2 = a.lower().split('_') 
     2127            b2 = b.lower().split('_') 
     2128            # check length of a2, b2 
     2129            len_a2 = len(a2) 
     2130            len_b2 = len(b2) 
    20812131            # check if it contains a int number(<10) 
    20822132            try:  
     
    20862136                num_b = int(b_last) 
    20872137            except: pass 
     2138            # Put 'scale' near the top; happens  
     2139            # when numbered param name exists 
     2140            if a == 'scale': 
     2141                return -1 
    20882142            # both have a number     
    20892143            if num_a != None and num_b != None: 
    2090                 if num_a > num_b: return 1 
     2144                if num_a > num_b: return -1 
     2145                # same number 
    20912146                elif num_a == num_b:  
    2092                     return cmp(a.lower(), b.lower()) 
    2093                 else: return -1 
     2147                    # different last names 
     2148                    if a2[len_a2-1] != b2[len_b2-1] and num_a != 0: 
     2149                        return -cmp(a2[len_a2-1], b2[len_b2-1]) 
     2150                    else:  
     2151                        return cmp(a, b)  
     2152                else: return 1 
    20942153            # one of them has a number 
    20952154            elif num_a != None: return 1 
    20962155            elif num_b != None: return -1 
    2097             # no nuumbers 
     2156            # no numbers 
    20982157            else: return cmp(a.lower(), b.lower()) 
     2158 
    20992159                         
    21002160        keys.sort(custom_compare) 
     
    21472207                iy += 1 
    21482208                ix = 0 
    2149                 ## add parameters name with checkbox for selecting to fit 
    2150                 cb = wx.CheckBox(self, -1, item )               
    2151                 cb.SetToolTipString(" Check for fitting.") 
    2152                 #cb.SetValue(True) 
    2153                 wx.EVT_CHECKBOX(self, cb.GetId(), self.select_param) 
    2154                  
    2155                 sizer.Add( cb,( iy, ix),(1,1), 
    2156                              wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 5) 
    2157                  
    2158                 ## add parameter value 
    2159                 ix += 1 
    2160                 value= self.model.getParam(item) 
    2161                 ctl1 = self.ModelTextCtrl(self, -1, size=(_BOX_WIDTH,20), 
    2162                                     style=wx.TE_PROCESS_ENTER) 
    2163                 ctl1.SetToolTipString("Hit 'Enter' after typing.") 
    2164                 ctl1.SetValue(format_number(value)) 
    2165                 sizer.Add(ctl1, (iy,ix),(1,1), wx.EXPAND) 
    2166                 ## text to show error sign 
    2167                 ix += 1 
    2168                 text2=wx.StaticText(self, -1, '+/-') 
    2169                 sizer.Add(text2,(iy, ix),(1,1),\ 
    2170                                 wx.EXPAND|wx.ADJUST_MINSIZE, 0)  
    2171                 text2.Hide()  
    2172                 ix += 1 
    2173                 ctl2 = wx.TextCtrl(self, -1, size=(_BOX_WIDTH,20), style=0) 
    2174                 sizer.Add(ctl2, (iy,ix),(1,1), wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
    2175                 ctl2.Hide() 
    2176                  
    2177                 ix += 1 
    2178                 ctl3 = self.ModelTextCtrl(self, -1, size=(_BOX_WIDTH/2,20), style=wx.TE_PROCESS_ENTER, 
    2179                                                text_enter_callback = self._onparamRangeEnter) 
    2180       
    2181                 sizer.Add(ctl3, (iy,ix),(1,1), wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
    2182                 ctl3.Hide() 
    2183          
    2184                 ix += 1 
    2185                 ctl4 = self.ModelTextCtrl(self, -1, size=(_BOX_WIDTH/2,20), style=wx.TE_PROCESS_ENTER, 
    2186                                                text_enter_callback = self._onparamRangeEnter) 
    2187                 sizer.Add(ctl4, (iy,ix),(1,1), wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
    2188        
    2189                 ctl4.Hide() 
    2190  
    2191                 if self.engine_type=="park": 
    2192                     ctl3.Show(True) 
    2193                     ctl4.Show(True) 
    2194                 ix +=1 
    2195                 # Units 
    2196                 if self.model.details.has_key(item): 
    2197                     units = wx.StaticText(self, -1, self.model.details[item][0], style=wx.ALIGN_LEFT) 
     2209                if self.model.__class__ in self.model_list_box["Multi-Functions"] \ 
     2210                    and item in self.model.non_fittable: 
     2211                    non_fittable_name = wx.StaticText(self, -1, item ) 
     2212                    sizer.Add(non_fittable_name,(iy, ix),(1,1),\ 
     2213                            wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 21) 
     2214                    ## add parameter value 
     2215                    ix += 1 
     2216                    value= self.model.getParam(item) 
     2217                    if len(self.model.fun_list) > 0: 
     2218                        num = item.split('_')[1][5:7] 
     2219                        fun_box = wx.ComboBox(self, -1,size=(100,-1),style=wx.CB_READONLY, name = '%s'% item) 
     2220                        self._set_fun_box_list(fun_box) 
     2221                        fun_box.SetSelection(0) 
     2222                        #self.fun_box.SetToolTipString("A function describing the interface") 
     2223                        wx.EVT_COMBOBOX(fun_box,-1, self._on_fun_box) 
     2224                    else: 
     2225                        fun_box = self.ModelTextCtrl(self, -1, size=(_BOX_WIDTH,20), 
     2226                                        style=wx.TE_PROCESS_ENTER, name ='%s'% item) 
     2227                        fun_box.SetToolTipString("Hit 'Enter' after typing.") 
     2228                        fun_box.SetValue(format_number(value)) 
     2229                    sizer.Add(fun_box, (iy,ix),(1,1), wx.EXPAND) 
     2230                    self.str_parameters.append([None,item, fun_box,None,None,None,None,None]) 
     2231 
     2232                     
    21982233                else: 
    2199                     units = wx.StaticText(self, -1, "", style=wx.ALIGN_LEFT) 
    2200                 sizer.Add(units, (iy,ix),(1,1),  wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
     2234                    ## add parameters name with checkbox for selecting to fit 
     2235                    cb = wx.CheckBox(self, -1, item )               
     2236                    cb.SetToolTipString(" Check for fitting.") 
     2237                    #cb.SetValue(True) 
     2238                    wx.EVT_CHECKBOX(self, cb.GetId(), self.select_param) 
    22012239                     
    2202                 ##[cb state, name, value, "+/-", error of fit, min, max , units] 
    2203                 self.parameters.append([cb,item, ctl1, 
    2204                                         text2,ctl2, ctl3, ctl4,units]) 
    2205                
     2240                    sizer.Add( cb,( iy, ix),(1,1), 
     2241                                 wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 5) 
     2242 
     2243                    ## add parameter value 
     2244                    ix += 1 
     2245                    value= self.model.getParam(item) 
     2246                    ctl1 = self.ModelTextCtrl(self, -1, size=(_BOX_WIDTH,20), 
     2247                                        style=wx.TE_PROCESS_ENTER) 
     2248                    ctl1.SetToolTipString("Hit 'Enter' after typing.") 
     2249                    ctl1.SetValue(format_number(value)) 
     2250                    sizer.Add(ctl1, (iy,ix),(1,1), wx.EXPAND) 
     2251                    ## text to show error sign 
     2252                    ix += 1 
     2253                    text2=wx.StaticText(self, -1, '+/-') 
     2254                    sizer.Add(text2,(iy, ix),(1,1),\ 
     2255                                    wx.EXPAND|wx.ADJUST_MINSIZE, 0)  
     2256                    text2.Hide()  
     2257                    ix += 1 
     2258                    ctl2 = wx.TextCtrl(self, -1, size=(_BOX_WIDTH,20), style=0) 
     2259                    sizer.Add(ctl2, (iy,ix),(1,1), wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
     2260                    ctl2.Hide() 
     2261                     
     2262                    ix += 1 
     2263                    ctl3 = self.ModelTextCtrl(self, -1, size=(_BOX_WIDTH/2,20), style=wx.TE_PROCESS_ENTER, 
     2264                                                   text_enter_callback = self._onparamRangeEnter) 
     2265          
     2266                    sizer.Add(ctl3, (iy,ix),(1,1), wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
     2267                    ctl3.Hide() 
     2268             
     2269                    ix += 1 
     2270                    ctl4 = self.ModelTextCtrl(self, -1, size=(_BOX_WIDTH/2,20), style=wx.TE_PROCESS_ENTER, 
     2271                                                   text_enter_callback = self._onparamRangeEnter) 
     2272                    sizer.Add(ctl4, (iy,ix),(1,1), wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
     2273           
     2274                    ctl4.Hide() 
     2275     
     2276                    if self.engine_type=="park": 
     2277                        ctl3.Show(True) 
     2278                        ctl4.Show(True) 
     2279                    ix +=1 
     2280                    # Units 
     2281                    if self.model.details.has_key(item): 
     2282                        units = wx.StaticText(self, -1, self.model.details[item][0], style=wx.ALIGN_LEFT) 
     2283                    else: 
     2284                        units = wx.StaticText(self, -1, "", style=wx.ALIGN_LEFT) 
     2285                    sizer.Add(units, (iy,ix),(1,1),  wx.EXPAND|wx.ADJUST_MINSIZE, 0) 
     2286                         
     2287                    ##[cb state, name, value, "+/-", error of fit, min, max , units] 
     2288                    self.parameters.append([cb,item, ctl1, 
     2289                                            text2,ctl2, ctl3, ctl4,units]) 
     2290                                   
    22062291        iy+=1 
    22072292        sizer.Add((10,10),(iy,ix),(1,1), wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15) 
Note: See TracChangeset for help on using the changeset viewer.