Changeset 48882d1 in sasview for park_integration/ParkFitting.py
- Timestamp:
- Aug 22, 2008 5:51:05 PM (16 years ago)
- 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:
- 3c404d3
- Parents:
- d6513cd
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
park_integration/ParkFitting.py
ree5b04c r48882d1 6 6 import time 7 7 import numpy 8 9 8 import park 10 9 from park import fit,fitresult 11 10 from park import assembly 12 11 from park.fitmc import FitSimplex, FitMC 13 14 12 from sans.guitools.plottables import Data1D 15 13 from Loader import Load 16 from AbstractFitEngine import FitEngine, Parameter, FitArrange 17 class SansParameter(park.Parameter): 18 """ 19 SANS model parameters for use in the PARK fitting service. 20 The parameter attribute value is redirected to the underlying 21 parameter value in the SANS model. 22 """ 23 def __init__(self, name, model): 24 self._model, self._name = model,name 25 self.set(model.getParam(name)) 26 27 def _getvalue(self): return self._model.getParam(self.name) 28 29 def _setvalue(self,value): 30 self._model.setParam(self.name, value) 31 32 value = property(_getvalue,_setvalue) 33 34 def _getrange(self): 35 lo,hi = self._model.details[self.name][1:] 36 if lo is None: lo = -numpy.inf 37 if hi is None: hi = numpy.inf 38 return lo,hi 39 40 def _setrange(self,r): 41 self._model.details[self.name][1:] = r 42 range = property(_getrange,_setrange) 14 from AbstractFitEngine import FitEngine,FitArrange,Model 43 15 44 45 class Model(object):46 """47 PARK wrapper for SANS models.48 """49 def __init__(self, sans_model):50 self.model = sans_model51 #print "ParkFitting:sans model",self.model52 sansp = sans_model.getParamList()53 #print "ParkFitting: sans model parameter list",sansp54 parkp = [SansParameter(p,sans_model) for p in sansp]55 #print "ParkFitting: park model parameter ",parkp56 self.parameterset = park.ParameterSet(sans_model.name,pars=parkp)57 58 def eval(self,x):59 #print "eval",self.parameterset[0].value,self.parameterset[1].value60 #print "model run ",self.model.run(x)61 return self.model.run(x)62 63 class Data(object):64 """ Wrapper class for SANS data """65 def __init__(self,x=None,y=None,dy=None,dx=None,sans_data=None):66 if not sans_data==None:67 self.x= sans_data.x68 self.y= sans_data.y69 self.dx= sans_data.dx70 self.dy= sans_data.dy71 else:72 if x!=None and y!=None and dy!=None:73 self.x=x74 self.y=y75 self.dx=dx76 self.dy=dy77 else:78 raise ValueError,\79 "Data is missing x, y or dy, impossible to compute residuals later on"80 self.qmin=None81 self.qmax=None82 83 def setFitRange(self,mini=None,maxi=None):84 """ to set the fit range"""85 self.qmin=mini86 self.qmax=maxi87 88 def residuals(self, fn):89 """ @param fn: function that return model value90 @return residuals91 """92 x,y,dy = [numpy.asarray(v) for v in (self.x,self.y,self.dy)]93 if self.qmin==None and self.qmax==None:94 self.fx = fn(x)95 return (y - fn(x))/dy96 97 else:98 self.fx = fn(x[idx])99 idx = x>=self.qmin & x <= self.qmax100 return (y[idx] - fn(x[idx]))/dy[idx]101 102 103 def residuals_deriv(self, model, pars=[]):104 """105 @return residuals derivatives .106 @note: in this case just return empty array107 """108 return []109 110 111 16 class ParkFit(FitEngine): 112 17 """ … … 154 59 i=0 155 60 for k,value in self.fitArrangeList.iteritems(): 156 sansmodel=value.get_model()61 #sansmodel=value.get_model() 157 62 #wrap sans model 158 parkmodel = Model(sansmodel) 63 #parkmodel = Model(sansmodel) 64 parkmodel = value.get_model() 159 65 #print "ParkFitting: createproblem: just create a model",parkmodel.parameterset 160 66 for p in parkmodel.parameterset: … … 162 68 #if p.isfixed(): 163 69 #print 'parameters',p.name 164 #print "self.paramList",self.paramList70 print "parkfitting: self.paramList",self.paramList 165 71 if p.isfixed() and p._getname()in self.paramList: 166 72 p.set([-numpy.inf,numpy.inf]) 167 73 i+=1 168 74 Ldata=value.get_data() 169 x,y,dy=self._concatenateData(Ldata) 170 #wrap sansdata 171 parkdata=Data(x,y,dy,None) 75 parkdata=self._concatenateData(Ldata) 76 172 77 couple=(parkmodel,parkdata) 173 78 #print "Parkfitting: fitness",couple … … 204 109 localfit.ftol = 1e-8 205 110 fitter = FitMC(localfit=localfit) 206 111 print "ParkFitting: result1" 207 112 result = fit.fit(self.problem, 208 113 fitter=fitter, … … 212 117 #for p in result.parameters: 213 118 # print "fit in park fitting", p.name, p.value,p.stderr 214 return result.fitness,result.pvec,result.cov,result 119 #return result.fitness,result.pvec,result.cov,result 120 return result 215 121 else: 216 122 raise ValueError, "SVD did not converge"
Note: See TracChangeset
for help on using the changeset viewer.