Ignore:
Timestamp:
Mar 20, 2009 8:29:58 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:
858fabed
Parents:
c77d859
Message:

fit with qmin qmax value only

File:
1 edited

Legend:

Unmodified
Added
Removed
  • park_integration/AbstractFitEngine.py

    ra7abdb1 r20d30e9  
    4646            hi= numpy.inf 
    4747        return lo,hi 
    48          
    4948     
    5049    def _setrange(self,r): 
     
    157156            @return residuals 
    158157        """ 
    159          
    160158        x,y,dy = [numpy.asarray(v) for v in (self.x,self.y,self.dy)] 
    161159        if self.qmin==None and self.qmax==None:  
     
    207205         
    208206        ## Min Q-value 
    209         self.qmin=None 
     207        self.qmin= min (self.data.x) 
    210208        ## Max Q-value 
    211         self.qmax=None 
    212         
    213         
    214     def setFitRange(self,qmin=None,qmax=None,ymin=None,ymax=None,): 
     209        self.qmax= max (self.data.x) 
     210        
     211        
     212    def setFitRange(self,qmin=None,qmax=None): 
    215213        """ to set the fit range""" 
    216         self.qmin=qmin 
    217         self.qmax=qmax 
     214        self.qmin = qmin 
     215        self.qmax = qmax 
    218216         
    219217         
     
    238236            
    239237        # Find entries to consider 
    240         if self.qmin==None and self.qmax==None: 
    241             idx = Ellipsis 
    242         else: 
    243             idx = (x>=self.qmin) & (x <= self.qmax) 
    244                          
     238        if self.qmin==None: 
     239            self.qmin= min(self.data.x) 
     240        if  self.qmax==None: 
     241            self.qmin= max(self.data.x) 
     242         
     243        idx = (x>=self.qmin) & (x <= self.qmax) 
     244   
    245245        # Compute theory data f(x) 
    246246        fx = numpy.zeros(len(x)) 
     
    250250        if self.smearer is not None: 
    251251            fx = self.smearer(fx) 
     252        
    252253        # Sanity check 
    253254        if numpy.size(dy) < numpy.size(x): 
     
    256257        return (y[idx] - fx[idx])/dy[idx] 
    257258      
    258     def residuals_old(self, fn): 
    259         """ @param fn: function that return model value 
    260             @return residuals 
    261         """ 
    262         x,y,dy = [numpy.asarray(v) for v in (self.x,self.y,self.dy)] 
    263         if self.qmin==None and self.qmax==None:  
    264             fx =numpy.asarray([fn(v) for v in x]) 
    265             return (y - fx)/dy 
    266         else: 
    267             idx = (x>=self.qmin) & (x <= self.qmax) 
    268             fx = numpy.asarray([fn(item)for item in x[idx ]]) 
    269             return (y[idx] - fx)/dy[idx] 
     259   
    270260         
    271261    def residuals_deriv(self, model, pars=[]): 
     
    290280        self.y_bins= sans_data2d.y_bins 
    291281        
    292         self.xmin= self.data.xmin 
    293         self.xmax= self.data.xmax 
    294         self.ymin= self.data.ymin 
    295         self.ymax= self.data.ymax 
    296         
    297         
    298     def setFitRange(self,qmin=None,qmax=None,ymin=None,ymax=None): 
     282        x = max(self.data.xmin, self.data.xmax) 
     283        y = max(self.data.ymin, self.data.ymax) 
     284         
     285        ## fitting range 
     286        self.qmin = 0 
     287        self.qmax = math.sqrt(x*x +y*y) 
     288        
     289        
     290        
     291    def setFitRange(self,qmin=None,qmax=None): 
    299292        """ to set the fit range""" 
    300         self.xmin= qmin 
    301         self.xmax= qmax 
    302         self.ymin= ymin 
    303         self.ymax= ymax 
     293        self.qmin= qmin 
     294        self.qmax= qmax 
     295       
    304296         
    305297    def getFitRange(self): 
     
    307299            @return the range of data.x to fit 
    308300        """ 
    309         return self.xmin, self.xmax,self.ymin, self.ymax 
     301        return self.qmin, self.qmax 
    310302      
    311303      
     
    315307        """ 
    316308        res=[] 
    317         if self.xmin==None:        #Here we define that xmin = qmin >=0 and xmax=qmax>=qmain 
    318             self.xmin= 0 #self.data.xmin 
    319         if self.xmax==None: 
    320             self.xmax= self.data.xmax 
    321         if self.ymin==None: 
    322             self.ymin= self.data.ymin 
    323         if self.ymax==None: 
    324             self.ymax= self.data.ymax 
     309        #Here we define that  qmin >=0 and qmax>=qmain 
     310        x = max(self.data.xmin, self.data.xmax) 
     311        y = max(self.data.ymin, self.data.ymax) 
     312         
     313        ## fitting range 
     314        if self.qmin == None: 
     315            self.qmin = 0 
     316        if self.qmax == None: 
     317            self.qmax = math.sqrt(x*x +y*y) 
     318         
     319         
    325320        for i in range(len(self.y_bins)): 
    326             #if self.y_bins[i]>= self.ymin and self.y_bins[i]<= self.ymax: 
    327321            for j in range(len(self.x_bins)): 
    328                  if math.pow(self.data.x_bins[i],2)+math.pow(self.data.y_bins[j],2)>=math.pow(self.xmin,2): 
    329                      if math.pow(self.data.x_bins[i],2)+math.pow(self.data.y_bins[j],2)<=math.pow(self.xmax,2): 
    330                          #if self.x_bins[j]>= self.xmin and self.x_bins[j]<= self.xmax:                 
    331                         res.append( (self.image[i][j]- fn([self.x_bins[i],self.y_bins[j]]))\ 
    332                             /self.err_image[i][j] ) 
     322                radius = math.pow(self.data.x_bins[i],2)+math.pow(self.data.y_bins[j],2) 
     323                if self.qmin <= radius and radius <= self.qmax: 
     324                    res.append( (self.image[j][i]- fn([self.x_bins[i],self.y_bins[j]]))\ 
     325                            /self.err_image[j][i] ) 
    333326         
    334327        return numpy.array(res) 
     
    346339         Sans Assembly class a class wrapper to be call in optimizer.leastsq method 
    347340    """ 
    348      
    349341    def __init__(self,paramlist,Model=None , Data=None): 
    350342        """ 
     
    365357        for item in self.res: 
    366358            sum += item*item 
    367         #print "length of data =",len(self.res) 
     359        
    368360        return sum/ len(self.res) 
     361     
    369362    def __call__(self,params): 
    370363        """ 
     
    413406            ytemp=[] 
    414407            dytemp=[] 
    415             dxtemp=[] 
    416408            self.mini=None 
    417409            self.maxi=None 
     
    437429                    else: 
    438430                        raise RuntimeError, "Fit._concatenateData: y-errors missing" 
    439                     if data.dx is not None and len(data.dx)==len(data.x):    
    440                         dxtemp.append(data.dx[i]) 
    441                     else: 
    442                         raise RuntimeError, "Fit._concatenateData: dQ-errors missing" 
    443             data= Data(x=xtemp,y=ytemp,dy=dytemp, dx=dxtemp) 
     431            data= Data(x=xtemp,y=ytemp,dy=dytemp) 
    444432            data.setFitRange(self.mini, self.maxi) 
    445433            return data 
     
    476464            raise ValueError, "park_integration:missing parameters" 
    477465     
    478     def set_data(self,data,Uid,smearer=None,qmin=None,qmax=None,ymin=None,ymax=None): 
     466    def set_data(self,data,Uid,smearer=None,qmin=None,qmax=None): 
    479467        """ Receives plottable, creates a list of data to fit,set data 
    480468            in a FitArrange object and adds that object in a dictionary  
     
    487475        else: 
    488476            fitdata=FitData1D(data, smearer) 
    489         fitdata.setFitRange(qmin=qmin,qmax=qmax, ymin=ymin,ymax=ymax) 
     477        
     478        fitdata.setFitRange(qmin=qmin,qmax=qmax) 
    490479        #A fitArrange is already created but contains model only at Uid 
    491480        if self.fitArrangeDict.has_key(Uid): 
     
    496485            fitproblem.add_data(fitdata) 
    497486            self.fitArrangeDict[Uid]=fitproblem     
    498  
     487    
    499488    def get_model(self,Uid): 
    500489        """  
Note: See TracChangeset for help on using the changeset viewer.