Ignore:
Timestamp:
Nov 16, 2009 12:50:50 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:
464fce54
Parents:
4026380
Message:

refactor fit engine set_model can receive sans.model or park.model has a parameter;set_del has a new parameters constraints

File:
1 edited

Legend:

Unmodified
Added
Removed
  • park_integration/AbstractFitEngine.py

    r12b76cf rfd6b789  
    365365        self.model.setParams(self.paramlist,params) 
    366366        self.res= self.data.residuals(self.model.eval) 
    367         #if self.curr_thread != None : 
    368         #    try: 
    369         #        self.curr_thread.isquit() 
    370         #    except: 
    371         #        raise FitAbort,"stop leastsqr optimizer"     
     367        if self.curr_thread != None : 
     368            try: 
     369                self.curr_thread.isquit() 
     370            except: 
     371                raise FitAbort,"stop leastsqr optimizer"     
    372372        return self.res 
    373373     
     
    435435         
    436436         
    437     def set_model(self,model,Uid,pars=[]): 
     437    def set_model(self,model,Uid,pars=[], constraints=[]): 
    438438        """ 
    439439            set a model on a given uid in the fit engine. 
    440             @param model: the model to fit 
     440            @param model: sans.models type  
    441441            @param Uid :is the key of the fitArrange dictionnary where model is saved as a value 
    442442            @param pars: the list of parameters to fit  
     443            @param constraints: list of  
     444                tuple (name of parameter, value of parameters) 
     445                the value of parameter must be a string to constraint 2 different 
     446                parameters. 
     447                Example: 
     448                we want to fit 2 model M1 and M2 both have parameters A and B. 
     449                constraints can be: 
     450                 constraints = [(M1.A, M2.B+2), (M1.B= M2.A *5),...,] 
    443451            @note : pars must contains only name of existing model's paramaters 
    444452        """ 
     453        if model == None: 
     454            raise ValueError, "AbstractFitEngine: Need to set model to fit" 
     455         
     456        new_model= model 
     457        if not issubclass(model.__class__, Model): 
     458            new_model= Model(model) 
     459         
     460        if len(constraints)>0: 
     461            for constraint in constraints: 
     462                name, value = constraint 
     463                try: 
     464                    new_model.parameterset[ str(name)].set( str(value) ) 
     465                except: 
     466                    msg= "Fit Engine: Error occurs when setting the constraint" 
     467                    msg += " %s for parameter %s "%(value, name) 
     468                    raise ValueError, msg 
     469                 
    445470        if len(pars) >0: 
    446             if model==None: 
    447                 raise ValueError, "AbstractFitEngine: Specify parameters to fit" 
    448             else: 
    449                 temp=[] 
    450                 for item in pars: 
    451                     if item in model.model.getParamList(): 
    452                         temp.append(item) 
    453                         self.paramList.append(item) 
    454                     else: 
    455                         raise ValueError,"wrong paramter %s used to set model %s. Choose\ 
    456                             parameter name within %s"%(item, model.model.name,str(model.model.getParamList())) 
    457                         return 
     471            temp=[] 
     472            for item in pars: 
     473                if item in new_model.model.getParamList(): 
     474                    temp.append(item) 
     475                    self.paramList.append(item) 
     476                else: 
     477                     
     478                    msg = "wrong parameter %s used"%str(item) 
     479                    msg += "to set model %s. Choose"%str(new_model.model.name) 
     480                    msg += "parameter name within %s"%str(new_model.model.getParamList()) 
     481                    raise ValueError,msg 
     482               
    458483            #A fitArrange is already created but contains dList only at Uid 
    459484            if self.fitArrangeDict.has_key(Uid): 
    460                 self.fitArrangeDict[Uid].set_model(model) 
     485                self.fitArrangeDict[Uid].set_model(new_model) 
    461486                self.fitArrangeDict[Uid].pars= pars 
    462487            else: 
    463488            #no fitArrange object has been create with this Uid 
    464489                fitproblem = FitArrange() 
    465                 fitproblem.set_model(model) 
     490                fitproblem.set_model(new_model) 
    466491                fitproblem.pars= pars 
    467492                self.fitArrangeDict[Uid] = fitproblem 
Note: See TracChangeset for help on using the changeset viewer.