Changeset fdef956 in sasview


Ignore:
Timestamp:
Jun 14, 2012 8:05:22 PM (12 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:
d7b49576
Parents:
0008f54
Message:

sum model editot can handle multi model too.

Files:
3 edited

Legend:

Unmodified
Added
Removed
  • calculatorview/src/sans/perspectives/calculator/model_editor.py

    r0008f54 rfdef956  
    1818if sys.platform.count("win32") > 0: 
    1919    FONT_VARIANT = 0 
    20     PNL_WIDTH = 460 
     20    PNL_WIDTH = 450 
    2121    PNL_HITE = 320 
    2222else: 
    2323    FONT_VARIANT = 1 
    24     PNL_WIDTH = 500 
     24    PNL_WIDTH = 590 
    2525    PNL_HITE = 400 
    26 M_NAME = 'SumModel' 
     26M_NAME = 'Model' 
    2727EDITOR_WIDTH = 800 
    2828EDITOR_HEIGTH = 720 
    2929PANEL_WIDTH = 500 
    30 _BOX_WIDTH = 51 
     30_BOX_WIDTH = 55 
    3131 
    3232     
     
    7474        self.model1_string = "SphereModel" 
    7575        self.model2_string = "CylinderModel" 
     76        self.name = 'Sum' + M_NAME 
    7677        self._notes = '' 
    7778        self.operator = '+' 
     79        self.operator_cbox = None 
     80        self.explanation = '' 
     81        self.explanationctr = None 
     82        self.sizer = None 
    7883        self._msg_box = None 
    7984        self.msg_sizer = None 
     
    8287        self.model2_name = str(self.model2.GetValue()) 
    8388        self.good_name = True 
     89        self.fill_oprator_combox() 
    8490         
    8591    def _layout_name(self): 
     
    98104        self.name_tcl.SetToolTipString(hint_name) 
    99105        self.name_hsizer.AddMany([(name_txt, 0, wx.LEFT|wx.TOP, 10), 
    100                             (self.name_tcl, 0, wx.RIGHT|wx.TOP|wx.BOTTOM, 10)]) 
    101         self.name_sizer.AddMany([(self.name_hsizer, 0,  
     106                            (self.name_tcl, -1,  
     107                             wx.EXPAND|wx.RIGHT|wx.TOP|wx.BOTTOM, 10)]) 
     108        self.name_sizer.AddMany([(self.name_hsizer, -1,  
    102109                                        wx.LEFT|wx.TOP, 10)]) 
    103110         
     
    113120        self.desc_tcl.SetValue('') 
    114121        #self.name_tcl.SetFont(self.font) 
    115         hint_desc = "Write a short description of the sum model function." 
     122        hint_desc = "Write a short description of this model function." 
    116123        self.desc_tcl.SetToolTipString(hint_desc) 
    117124        self.desc_sizer.AddMany([(desc_txt, 0, wx.LEFT|wx.TOP, 10), 
    118                                        (self.desc_tcl, 0,  
    119                                         wx.RIGHT|wx.TOP|wx.BOTTOM, 10)])      
     125                                    (self.desc_tcl, -1,  
     126                                    wx.EXPAND|wx.RIGHT|wx.TOP|wx.BOTTOM, 10)])      
    120127   
    121128    def _build_sizer(self): 
     
    123130        Build gui 
    124131        """ 
    125         _BOX_WIDTH = 195 # combobox width 
     132        box_width = 195 # combobox width 
    126133        vbox  = wx.BoxSizer(wx.VERTICAL) 
    127         sizer = wx.GridBagSizer(1, 3) 
     134        self.sizer = wx.GridBagSizer(1, 3) 
    128135        self._layout_name() 
    129136        self._layout_description() 
     
    138145        self.model1 =  wx.ComboBox(self, -1, style=wx.CB_READONLY) 
    139146        wx.EVT_COMBOBOX(self.model1, -1, self.on_model1) 
    140         self.model1.SetMinSize((_BOX_WIDTH, -1)) 
     147        self.model1.SetMinSize((box_width*5/6, -1)) 
    141148        self.model1.SetToolTipString("model1") 
     149         
     150        self.operator_cbox = wx.ComboBox(self, -1, size=(50, -1),  
     151                                         style=wx.CB_READONLY) 
     152        wx.EVT_COMBOBOX(self.operator_cbox, -1, self.on_select_operator) 
     153        operation_tip = "Add: +, Multiply: * " 
     154        self.operator_cbox.SetToolTipString(operation_tip) 
     155         
    142156        self.model2 =  wx.ComboBox(self, -1, style=wx.CB_READONLY) 
    143157        wx.EVT_COMBOBOX(self.model2, -1, self.on_model2) 
    144         self.model2.SetMinSize((_BOX_WIDTH, -1)) 
     158        self.model2.SetMinSize((box_width*5/6, -1)) 
    145159        self.model2.SetToolTipString("model2") 
    146160        self._set_model_list() 
     
    148162         # Buttons on the bottom 
    149163        self.static_line_1 = wx.StaticLine(self, -1) 
    150         self.okButton = wx.Button(self,wx.ID_OK, 'Apply', size=(_BOX_WIDTH/2, 25)) 
     164        self.okButton = wx.Button(self,wx.ID_OK, 'Apply', size=(box_width/2, 25)) 
    151165        self.okButton.Bind(wx.EVT_BUTTON, self.check_name) 
    152166        self.closeButton = wx.Button(self,wx.ID_CANCEL, 'Close',  
    153                                      size=(_BOX_WIDTH/2, 25)) 
     167                                     size=(box_width/2, 25)) 
    154168        # Intro 
    155         explanation  = "  custom model = scale_factor * (model1 %s model2)\n"\ 
     169        self.explanation  = "  custom model = scale_factor * (model1 %s model2)\n"\ 
    156170                            % self.operator 
    157171        #explanation  += "  Note: This will overwrite the previous sum model.\n" 
     
    163177        vbox.Add(self.name_hsizer) 
    164178        vbox.Add(self.desc_sizer) 
    165         vbox.Add(sizer) 
     179        vbox.Add(self.sizer) 
    166180        ix = 0 
    167181        iy = 1 
    168         sizer.Add(wx.StaticText(self, -1, explanation), (iy, ix), 
     182        self.explanationctr = wx.StaticText(self, -1, self.explanation) 
     183        self.sizer.Add(self.explanationctr , (iy, ix), 
    169184                 (1, 1), wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15) 
    170185        model1_box.Add(wx.StaticText(self,-1, model_string% (1, 1)), -1, 0) 
    171         model1_box.Add((_BOX_WIDTH-35,10)) 
     186        model1_box.Add((box_width-15,10)) 
    172187        model1_box.Add(wx.StaticText(self, -1, model_string% (2, 2)), -1, 0) 
    173188        model2_box.Add(self.model1, -1, 0) 
    174         model2_box.Add((20,10)) 
     189        model2_box.Add((15,10)) 
     190        model2_box.Add(self.operator_cbox, 0, 0) 
     191        model2_box.Add((15,10)) 
    175192        model2_box.Add(self.model2, -1, 0) 
    176193        model_vbox.Add(model1_box, -1, 0) 
     
    179196        iy += 1 
    180197        ix = 0 
    181         sizer.Add(sum_box, (iy, ix), 
     198        self.sizer.Add(sum_box, (iy, ix), 
    182199                  (1, 1), wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15) 
    183200        vbox.Add((10,10)) 
     
    190207                         wx.LEFT|wx.RIGHT|wx.ADJUST_MINSIZE, 0) 
    191208        sizer_button.Add(self.closeButton, 0, 
    192                           wx.LEFT|wx.RIGHT|wx.ADJUST_MINSIZE, 15)         
     209                          wx.LEFT|wx.RIGHT|wx.ADJUST_MINSIZE, 10)         
    193210        vbox.Add(sizer_button, 0, wx.EXPAND|wx.BOTTOM|wx.TOP, 10) 
     211          
    194212        self.SetSizer(vbox) 
    195213        self.Centre() 
     
    214232        title = self.name_tcl.GetValue().lstrip().rstrip() 
    215233        if title == '': 
    216             title = M_NAME 
     234            text = self.operator_cbox.GetLabel().strip() 
     235            if text == '+': 
     236                name = 'Sum' 
     237            else: 
     238                name = 'Multi' 
     239            self.name = name + M_NAME 
     240            title = self.name 
    217241        self.name = title 
    218242        t_fname = title + '.py' 
    219243        if not self.overwrite_name: 
    220             if t_fname in list_fnames and title != M_NAME: 
     244            if t_fname in list_fnames and title != self.name: 
    221245                self.name_tcl.SetBackgroundColour('pink') 
    222246                self.good_name = False 
     
    254278            color = 'blue' 
    255279        except: 
    256             msg= "Easy Custom Sum: Error occurred..." 
     280            msg= "Easy Custom Sum/Multipy: Error occurred..." 
    257281            info = 'Error' 
    258282            color = 'red' 
     
    295319        self.model2_name = str(self.model2.GetValue()) 
    296320        self.model2_string = self.model2_name 
    297   
     321         
     322    def on_select_operator(self, event=None): 
     323        """ 
     324        On Select an Operator 
     325        """ 
     326        item = event.GetEventObject() 
     327        text = item.GetLabel().strip() 
     328        if text == '+': 
     329            name = 'Sum' 
     330        else: 
     331            name = 'Multi' 
     332        self.operator = str(text) 
     333        self.explanation = "  custom model = scale_factor * " 
     334        self.explanation += "(model1 %s model2)\n"% self.operator 
     335        self.explanationctr.SetLabel(self.explanation) 
     336        self.name = name + M_NAME  
     337        self.sizer.Layout() 
     338              
     339    def fill_oprator_combox(self): 
     340        """ 
     341        fill the current combobox with the operator 
     342        """    
     343        operator_list = [' +', ' *'] 
     344        for oper in operator_list: 
     345            pos = self.operator_cbox.Append(str(oper)) 
     346            self.operator_cbox.SetClientData(pos, str(oper.strip())) 
     347        self.operator_cbox.SetSelection(0) 
     348             
    298349    def getText(self): 
    299350        """ 
     
    312363        name = self.name_tcl.GetValue().lstrip().rstrip() 
    313364        if name == '': 
    314             name = M_NAME 
     365            text = self.operator_cbox.GetLabel().strip() 
     366            if text == '+': 
     367                name = 'Sum' 
     368            else: 
     369                name = 'Multi' 
     370            self.name = name + M_NAME 
    315371        path = self.fname 
    316372        try: 
     
    11541210    #m2.p_model2.setParam("rg", 100) 
    11551211    out2 = m2.p_model1.runXY(0.01) %s m2.p_model2.runXY(0.01)\n 
     1212    print "My name is %s."% m1.name 
    11561213    print out1, " = ", out2 
    11571214    if out1 == out2: 
  • fittingview/src/sans/perspectives/fitting/fitting.py

    rdbb3914 rfdef956  
    294294        model_list = model_manager.get_model_name_list() 
    295295        plug_dir = models.find_plugins_dir() 
    296         textdial = TextDialog(None, self, -1, 'Easy Sum(p1, p2)',  
     296        textdial = TextDialog(None, self, -1, 'Easy Sum/Multi(p1, p2) Editor',  
    297297                              model_list, plug_dir) 
    298298        self.put_icon(textdial) 
     
    352352        wx.EVT_MENU(owner, id, self.make_new_model) 
    353353        id = wx.NewId() 
    354         self.edit_model_menu.Append(id, 'Sum(p1, p2)', 
     354        self.edit_model_menu.Append(id, 'Sum|Multi(p1, p2)', 
    355355                                    'Sum of two model functions') 
    356356        wx.EVT_MENU(owner, id, self.make_sum_model) 
  • sansguiframe/src/sans/guiframe/dataFitting.py

    r0008f54 rfdef956  
    364364        return _str  
    365365     
     366    def _validity_check(self, other): 
     367        """ 
     368        Checks that the data lengths are compatible. 
     369        Checks that the x vectors are compatible. 
     370        Returns errors vectors equal to original 
     371        errors vectors if they were present or vectors 
     372        of zeros when none was found. 
     373         
     374        :param other: other data set for operation 
     375         
     376        :return: dy for self, dy for other [numpy arrays] 
     377         
     378        :raise ValueError: when lengths are not compatible 
     379         
     380        """ 
     381        err_other = None 
     382        if isinstance(other, Data2D): 
     383            # Check that data lengths are the same 
     384            if len(self.data) != len(other.data) or \ 
     385                len(self.qx_data) != len(other.qx_data) or \ 
     386                len(self.qy_data) != len(other.qy_data): 
     387                msg = "Unable to perform operation: data length are not equal" 
     388                raise ValueError, msg 
     389            #if len(self.data) < 1: 
     390            #    msg = "Incompatible data sets: I-values do not match" 
     391            #    raise ValueError, msg  
     392            for ind in range(len(self.data)): 
     393                if self.qx_data[ind] != other.qx_data[ind]: 
     394                    msg = "Incompatible data sets: qx-values do not match" 
     395                    raise ValueError, msg 
     396                if self.qy_data[ind] != other.qy_data[ind]: 
     397                    msg = "Incompatible data sets: qy-values do not match" 
     398                    raise ValueError, msg 
     399                    
     400            # Check that the scales match 
     401            err_other = other.err_data 
     402            if other.err_data == None or \ 
     403                (len(other.err_data) != len(other.data)): 
     404                err_other = numpy.zeros(len(other.data)) 
     405             
     406        # Check that we have errors, otherwise create zero vector 
     407        err = self.err_data 
     408        if self.err_data == None or \ 
     409            (len(self.err_data) != len(self.data)): 
     410            err = numpy.zeros(len(other.data)) 
     411             
     412        return err, err_other 
     413 
     414    def _validity_check_union(self, other): 
     415        """ 
     416        Checks that the data lengths are compatible. 
     417        Checks that the x vectors are compatible. 
     418        Returns errors vectors equal to original 
     419        errors vectors if they were present or vectors 
     420        of zeros when none was found. 
     421         
     422        :param other: other data set for operation 
     423         
     424        :return: bool 
     425         
     426        :raise ValueError: when data types are not compatible 
     427         
     428        """ 
     429        if not isinstance(other, Data2D): 
     430            msg = "Unable to perform operation: different types of data set" 
     431            raise ValueError, msg    
     432        return True 
     433     
    366434    def _perform_operation(self, other, operation): 
    367435        """ 
Note: See TracChangeset for help on using the changeset viewer.