Changeset bf5e985 in sasview


Ignore:
Timestamp:
May 21, 2014 5:18:42 PM (10 years ago)
Author:
pkienzle
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:
278e86f
Parents:
233c121
Message:

restore simultaneous fitting for bumps

Location:
src/sans
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • src/sans/fit/AbstractFitEngine.py

    r8d074d9 rbf5e985  
    396396        Base class for scipy and park fit engine 
    397397        """ 
    398         #List of parameter names to fit 
    399         self.param_list = [] 
    400398        #Dictionnary of fitArrange element (fit problems) 
    401399        self.fit_arrange_dict = {} 
     
    444442        self.fit_arrange_dict[id].vals = [sasmodel.getParam(name) for name in pars] 
    445443        self.fit_arrange_dict[id].constraints = constraints 
    446  
    447         self.param_list.extend(pars) 
    448444 
    449445    def set_data(self, data, id, smearer=None, qmin=None, qmax=None): 
  • src/sans/fit/BumpsFitting.py

    r233c121 rbf5e985  
    111111        for k,p in self._pars.items(): 
    112112            p.fixed = (k not in param_list or k in self.constraints) 
    113         self.fitted_pars = [self._pars[k] for k in param_list if k not in self.constraints] 
    114113        self.fitted_par_names = [k for k in param_list if k not in self.constraints] 
     114        self.computed_par_names = [k for k in param_list if k in self.constraints] 
     115        self.fitted_pars = [self._pars[k] for k in self.fitted_par_names] 
     116        self.computed_pars = [self._pars[k] for k in self.computed_par_names] 
    115117 
    116118    # ===== Fitness interface ==== 
     
    163165            ftol=1.49012e-8, reset_flag=False): 
    164166        # Build collection of bumps fitness calculators 
    165         models = [ SasFitness(model=M.get_model(), 
    166                               data=M.get_data(), 
    167                               constraints=M.constraints, 
    168                               fitted=M.pars) 
    169                    for i,M in enumerate(self.fit_arrange_dict.values()) 
    170                    if M.get_to_fit() == 1 ] 
     167        models = [SasFitness(model=M.get_model(), 
     168                             data=M.get_data(), 
     169                             constraints=M.constraints, 
     170                             fitted=M.pars) 
     171                  for M in self.fit_arrange_dict.values() 
     172                  if M.get_to_fit()] 
    171173        if len(models) == 0: 
    172174            raise RuntimeError("Nothing to fit") 
     
    177179        exprs = {} 
    178180        for M in models: 
    179             exprs.update((".".join((M.name,k)),v) for k,v in M.constraints.items()) 
     181            exprs.update((".".join((M.name, k)), v) for k, v in M.constraints.items()) 
    180182        if exprs: 
    181             symtab = dict((".".join((M.name,k)),p) 
     183            symtab = dict((".".join((M.name, k)), p) 
    182184                          for M in models 
    183185                          for k,p in M.parameters().items()) 
    184             constraints = compile_constraints(symtab,exprs) 
     186            constraints = compile_constraints(symtab, exprs) 
    185187        else: 
    186188            constraints = lambda: 0 
     
    206208            fitted_index = [varying.index(p) for p in fitness.fitted_pars] 
    207209            R = FResult(model=fitness.model, data=fitness.data, 
    208                         param_list=fitness.fitted_par_names) 
     210                        param_list=fitness.fitted_par_names+fitness.computed_par_names) 
    209211            R.theory = fitness.theory() 
    210212            R.residuals = fitness.residuals() 
    211213            R.fitter_id = self.fitter_id 
    212214            # TODO: should scale stderr by sqrt(chisq/DOF) if dy is unknown 
    213             R.stderr = result['stderr'][fitted_index] 
    214             R.pvec = result['value'][fitted_index] 
     215            R.stderr = numpy.hstack((result['stderr'][fitted_index], 
     216                                     numpy.NaN*numpy.ones(len(fitness.computed_pars)))) 
     217            R.pvec = numpy.hstack((result['value'][fitted_index], 
     218                                  [p.value for p in fitness.computed_pars])) 
    215219            R.success = result['success'] 
    216220            R.fitness = numpy.sum(R.residuals**2)/(fitness.numpoints() - len(fitted_index)) 
  • src/sans/perspectives/fitting/basepage.py

    r5bf0331 rbf5e985  
    9696        self.num_points = None 
    9797        ## default fitengine type 
    98         self.engine_type = 'scipy' 
     98        self.engine_type = 'bumps' 
    9999        ## smear default 
    100100        self.current_smearer = None 
     
    29862986            self.qmin.SetValue(str(self.qmin_x)) 
    29872987            self.qmax.SetValue(str(self.qmax_x)) 
    2988             self.set_npts2fit() 
     2988            self.show_npts2fit() 
    29892989            # At this point, some button and variables satatus (disabled?) 
    29902990            # should be checked such as color that should be reset to 
     
    38743874        to fit if implemented 
    38753875        """ 
    3876     def set_npts2fit(self): 
     3876    def show_npts2fit(self): 
    38773877        """ 
    38783878        setValue Npts for fitting if implemented 
  • src/sans/perspectives/fitting/fitpage.py

    r233c121 rbf5e985  
    661661                          wx.EXPAND | wx.ADJUST_MINSIZE, 0) 
    662662         
    663         if self.engine_type in ("park","bumps"): 
    664             self.text_disp_max.Show(True) 
    665             self.text_disp_min.Show(True) 
     663        self.text_disp_max.Show(True) 
     664        self.text_disp_min.Show(True) 
    666665 
    667666        for item in self.model.dispersion.keys(): 
     
    738737                                          wx.EXPAND | wx.ADJUST_MINSIZE, 0) 
    739738 
    740                         if self.engine_type in ("park","bumps"): 
    741                             ctl3.Show(True) 
    742                             ctl4.Show(True) 
     739                        ctl3.Show(True) 
     740                        ctl4.Show(True) 
    743741                                                               
    744742                    elif p == "npts": 
     
    12681266        if check_float(tcrtl): 
    12691267            flag = self._onparamEnter_helper() 
    1270             self.set_npts2fit() 
     1268            self.show_npts2fit() 
    12711269            if self.fitrange: 
    12721270                temp_smearer = None 
     
    14681466                    #self.data.mask = index_data 
    14691467                    #self.Npts_fit.SetValue(str(len(self.data.mask))) 
    1470                     self.set_npts2fit() 
     1468                    self.show_npts2fit() 
    14711469            else: 
    14721470                index_data = ((self.qmin_x <= self.data.x) & \ 
     
    17661764            # try re draw the model plot if it exists 
    17671765            self._draw_model() 
    1768             self.set_npts2fit() 
     1766            self.show_npts2fit() 
    17691767        elif self.model == None: 
    17701768            self.panel.MakeModal(False) 
    17711769            event.Skip() 
    1772             self.set_npts2fit() 
     1770            self.show_npts2fit() 
    17731771            msg = "No model is found on updating MASK in the model plot... " 
    17741772            wx.PostEvent(self._manager.parent, StatusEvent(status=msg)) 
     
    20562054        return npts2fit 
    20572055 
    2058     def set_npts2fit(self): 
     2056    def show_npts2fit(self): 
    20592057        """ 
    20602058        setValue Npts for fitting 
     
    20932091        if chisqr != None and numpy.isfinite(chisqr): 
    20942092            #format chi2 
    2095             if self.engine_type in ("park","bumps"): 
    2096                 npt_fit = float(self.get_npts2fit()) 
    20972093            chi2 = format_number(chisqr, True) 
    20982094            self.tcChi.SetValue(chi2) 
  • src/sans/perspectives/fitting/fitting.py

    r233c121 rbf5e985  
    10841084        batch_inputs = {} 
    10851085        batch_outputs = {} 
    1086         page = self.fit_panel.get_page_by_id(uid) 
     1086        if fit_type == "simultaneous": 
     1087            page = self.sim_page 
     1088        elif fit_type == "combined_batch": 
     1089            page = self.batch_page 
     1090        else: 
     1091            page = self.fit_panel.get_page_by_id(uid) 
    10871092        if page.batch_on: 
    10881093            calc_fit = FitThread(handler=handler, 
  • src/sans/perspectives/fitting/simfitpage.py

    r233c121 rbf5e985  
    139139                break 
    140140 
    141         ## some model or parameters can be constrained 
    142         self._show_constraint() 
    143         self.sizer3.Layout() 
    144         self.Layout() 
    145         self.Refresh() 
    146141        #self._onAdd_constraint(None) 
    147142              
     
    820815                         
    821816                    for fid in self.page_finder[id].iterkeys(): 
    822                         self.page_finder[id].set_model_param(param, 
    823                                                         constraint, fid=fid) 
     817                        # wrap in param/constraint in str() to remove unicode 
     818                        self.page_finder[id].set_model_param(str(param), 
     819                                                        str(constraint), fid=fid) 
    824820                    break 
    825821        return True 
Note: See TracChangeset for help on using the changeset viewer.