Changeset 34ae302 in sasview for guitools


Ignore:
Timestamp:
Apr 30, 2008 5:47:33 PM (17 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:
bbec827
Parents:
eca05c8
Message:

more modifications added but reset does not keep line to fit

Location:
guitools
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • guitools/PlotPanel.py

    r47f695c9 r34ae302  
    3535        # TODO: use proper scale transformers 
    3636        if scale=='log': 
    37             lo,hi = log10(lo),log10(hi) 
    38             if pt is not None: pt = log10(pt) 
     37            lo,hi = math.log10(lo),math.log10(hi) 
     38            if pt is not None: pt = math.log10(pt) 
    3939     
    4040        # Compute delta from axis range * %, or 1-% if persent is negative 
     
    5353        # Convert transformed values back to the original scale 
    5454        if scale=='log': 
    55             lo,hi = pow(10.,lo),pow(10.,hi) 
     55            lo,hi = math.pow(10.,lo),math.pow(10.,hi) 
     56            print "check y axis rescale" 
    5657     
    5758        return (lo,hi) 
     
    108109        """ 
    109110        ax = event.inaxes 
     111         
    110112        step = event.step 
    111113 
     
    123125            xdata,ydata = None,None 
    124126            x,y = event.x,event.y 
     127            
    125128            for ax in self.axes: 
    126129                insidex,_ = ax.xaxis.contains(event) 
    127130                if insidex: 
    128131                    xdata,_ = ax.transAxes.inverse_xy_tup((x,y)) 
    129                     #print "xaxis",x,"->",xdata 
     132                    print "xaxis",x,"->",xdata 
    130133                insidey,_ = ax.yaxis.contains(event) 
    131134                if insidey: 
    132135                    _,ydata = ax.transAxes.inverse_xy_tup((x,y)) 
    133                     #print "yaxis",y,"->",ydata 
     136                    print "yaxis",y,"->",ydata 
    134137            if xdata is not None: 
    135138                lo,hi = ax.get_xlim() 
    136                 lo,hi = _rescale(lo,hi,step,bal=xdata) 
     139                lo,hi = _rescale(lo,hi,step,bal=xdata,scale=ax.get_xscale()) 
    137140                ax.set_xlim((lo,hi)) 
    138141            if ydata is not None: 
    139142                lo,hi = ax.get_ylim() 
    140                 lo,hi = _rescale(lo,hi,step,bal=ydata) 
     143                lo,hi = _rescale(lo,hi,step,bal=ydata,scale=ax.get_yscale()) 
    141144                ax.set_ylim((lo,hi)) 
    142145 
     
    173176            The user selects a transformation for x or y value and a new plot is displayed 
    174177        """ 
    175         from PropertyDialog import Properties 
    176         dial = Properties(self, -1, 'Properties') 
    177         dial.setValues( self.prevXtrans, self.prevYtrans,self.viewModel ) 
    178         if dial.ShowModal() == wx.ID_OK: 
    179             self.xscales, self.yscales,self.viewModel = dial.getValues() 
    180             if self.viewModel =="Guinier lny vs x^(2)": 
    181                 self.xscales="x^(2)" 
    182                 self.yscales="ln(y)" 
    183                 self.viewModel = "--" 
    184                 dial.setValues( self.xscales, self.yscales,self.viewModel ) 
    185             self._onEVT_FUNC_PROPERTY() 
    186         dial.Destroy() 
     178        list =[] 
     179        list = self.graph.returnPlottable() 
     180        if len(list.keys())>0: 
     181            first_item = list.keys()[0] 
     182            if first_item.x !=[]: 
     183                from PropertyDialog import Properties 
     184                dial = Properties(self, -1, 'Properties') 
     185                dial.setValues( self.prevXtrans, self.prevYtrans,self.viewModel ) 
     186                if dial.ShowModal() == wx.ID_OK: 
     187                    self.xscales, self.yscales,self.viewModel = dial.getValues() 
     188                    if self.viewModel =="Guinier lny vs x^(2)": 
     189                        self.xscales="x^(2)" 
     190                        self.yscales="ln(y)" 
     191                        self.viewModel = "--" 
     192                        dial.setValues( self.xscales, self.yscales,self.viewModel ) 
     193                    self._onEVT_FUNC_PROPERTY() 
     194                dial.Destroy() 
     195            
    187196   
    188197    def set_yscale(self, scale='linear'): 
     
    284293        slicerpop.Append(317, '&Linear Fit') 
    285294        wx.EVT_MENU(self, 317, self.onFitting) 
     295         
     296        slicerpop.AppendSeparator() 
     297        slicerpop.Append(318, '&Reset Graph') 
     298        wx.EVT_MENU(self, 318, self.onResetGraph) 
    286299        
    287300        pos = event.GetPosition() 
     
    426439                self.set_xscale("log") 
    427440                name, units = item.get_xaxis()  
    428                 self.graph.xaxis("Log10 %s" % name,  "%s^{-1}" % units) 
     441                self.graph.xaxis("\log_{10}\ \ %s" % name,  "%s^{-1}" % units) 
    429442                 
    430443            if ( self.yscales=="ln(y)" ): 
     
    432445                self.set_yscale("linear") 
    433446                name, units = item.get_yaxis() 
    434                 self.graph.yaxis("log %s" % name,  "%s^{-1}" % units) 
     447                self.graph.yaxis("log\ \ %s" % name,  "%s^{-1}" % units) 
    435448                 
    436449            if ( self.yscales=="y" ): 
     
    444457                self.set_yscale("log")   
    445458                name, units = item.get_yaxis() 
    446                 self.graph.yaxis("Log10 %s" % name,  "%s^{-1}" % units) 
     459                self.graph.yaxis("\log_{10}\ \ %s" % name,  "%s^{-1}" % units) 
    447460                 
    448461            if ( self.yscales=="y^(2)" ): 
     
    450463                self.set_yscale("linear") 
    451464                name, units = item.get_yaxis() 
    452                 self.graph.yaxis("%s^2" % name,  "%s^{-2}" % units) 
     465                self.graph.yaxis("%s^{2}" % name,  "%s^{-2}" % units) 
    453466                 
    454467            if ( self.yscales =="1/y"): 
     
    456469                self.set_yscale("linear") 
    457470                name, units = item.get_yaxis() 
    458                 self.graph.yaxis("%s" % name,  "%s" % units) 
     471                self.graph.yaxis("%s" % name,  "\ \%s" % units) 
    459472                 
    460473            if ( self.yscales =="1/sqrt(y)" ): 
     
    462475                self.set_yscale("linear") 
    463476                name, units = item.get_yaxis() 
    464                 self.graph.yaxis("%s" %name,  "%s" % units) 
     477                self.graph.yaxis("\sqrt{%s}" %name,  "%s" % units) 
    465478                 
    466479            if ( self.yscales =="ln(y*x)"): 
     
    469482                yname, yunits = item.get_yaxis() 
    470483                xname, xunits = item.get_xaxis() 
    471                 self.graph.yaxis("Log %s%s" % (yname,xname),  "%s^{-1}%s^{-1}" % (yunits,xunits)) 
     484                self.graph.yaxis("log\ %s %s" % (yname,xname),  "%s^{-1}%s^{-1}" % (yunits,xunits)) 
    472485                 
    473486            if ( self.yscales =="ln(y*x^(2))"): 
     
    502515        self.subplot.figure.canvas.draw_idle() 
    503516         
    504     def onFitDisplay(self, plottable): 
     517    def onFitDisplay(self, plottable,xmin,xmax): 
    505518        """ 
    506519            Add a new plottable into the graph .In this case this plottable will be used  
     
    508521            @param plottable: the plottable to plot 
    509522        """ 
     523        list =[] 
     524        list = self.graph.returnPlottable() 
     525        for item in list: 
     526            item.onFitRange(xmin,xmax) 
    510527        #Add the data to fit  
    511         
    512528        self.graph.add(plottable) 
    513529        self.graph.render(self) 
     
    516532        self.graph.delete(plottable) 
    517533    
    518  
     534    def onResetGraph(self,event): 
     535        list =[] 
     536        list = self.graph.returnPlottable() 
     537        for item in list: 
     538            item.onReset() 
     539        self.graph.render(self) 
     540        self.subplot.figure.canvas.draw_idle() 
    519541         
    520542class NoRepaintCanvas(FigureCanvasWxAgg): 
  • guitools/fitDialog.py

    rf193585 r34ae302  
    171171                    if (self.xtrans.lower() == "log10(x)"): 
    172172                        for i in range(len(x)): 
    173                             if x[i]>=xmin: 
     173                            if x[i]>= math.log10(xmin): 
    174174                                tempy.append(math.log10(y[i]))  
    175175                                tempdy.append(transform.errToLogX(y[i],0,dy[i],0)) 
    176176                    else: 
    177                         for y_i in y: 
    178                             tempy.append(math.log10(y_i))  
     177                        for i in range(len(y)): 
     178                            tempy.append(math.log10(y[i]))  
    179179                            tempdy.append(transform.errToLogX(y[i],0,dy[i],0)) 
    180180                else: 
     
    184184                if (self.xtrans.lower() == "log10(x)"): 
    185185                    for x_i in x: 
    186                         if x_i >= xmin: 
     186                        if x_i >= math.log10(xmin): 
    187187                            tempx.append(math.log10(x_i))  
    188188                else: 
     
    196196                        
    197197                #Find the fitting parameters 
    198  
    199                 chisqr, out, cov = fittings.sansfit(self.model,  
     198                if (self.xtrans.lower() == "log10(x)"): 
     199                    chisqr, out, cov = fittings.sansfit(self.model, [self.cstA, self.cstB], 
     200                    tempx, tempy,tempdy,math.log10(xmin),math.log10(xmax)) 
     201                else: 
     202                    chisqr, out, cov = fittings.sansfit(self.model,  
    200203                                [self.cstA, self.cstB],tempx, tempy,tempdy,xminView,xmaxView) 
    201204                print "this out",out 
     
    259262                 
    260263                #Send the data to display to the PlotPanel 
    261                 self.push_data(self.file_data1) 
     264                self.push_data(self.file_data1,xminView,xmaxView) 
    262265                 
    263266                # Display the fitting value on the Fit Dialog 
     
    310313        if (self.xtrans=="log10(x)" ): 
    311314            if x >0: 
    312                 return math.log10(x) 
     315                return x 
    313316            else: 
    314317                raise ValueError,"cannot compute log of a negative number" 
  • guitools/plottables.py

    r47f695c9 r34ae302  
    5353            if not cond: return False 
    5454        return True 
    55  
     55def error_msg(msg, parent=None): 
     56    """ 
     57    Signal an error condition -- in a GUI, popup a error dialog 
     58    """ 
     59    # Code brought with minor podifications from mpl.backends.backend_wx 
     60    # Copyright (C) Jeremy O'Donoghue & John Hunter, 2003-4 
     61    dialog =wx.MessageDialog(parent  = parent, 
     62                             message = msg, 
     63                             caption = 'Polplot error', 
     64                             style=wx.OK | wx.CENTRE) 
     65    dialog.ShowModal() 
     66    dialog.Destroy() 
     67    return None 
    5668# Graph structure for holding multiple plottables 
    5769class Graph: 
     
    383395        """ Reload view with new value to plot""" 
    384396        self.view = self.View(self.x, self.y, self.dx, self.dy) 
    385          
     397        self.view.Xreel = self.view.x 
     398        self.view.Yreel = self.view.y 
     399        self.view.DXreel = self.view.dx 
     400        self.view.DYreel = self.view.dy 
    386401    def render(self,plot): 
    387402        """The base class makes sure the correct units are being used for 
     
    412427    def check_data_PlottableY(self):  
    413428        self.view.check_data_logY()  
     429         
    414430    def returnTransformationx(self,transx,transdx): 
    415431        self.view.returntransformx(transx,transdx) 
     432         
    416433    def returnTransformationy(self,transy,transdy): 
    417434        self.view.returntransformy(transy,transdy) 
    418     
     435    def onReset(self): 
     436        self.view.onResetView() 
     437    def onFitRange(self,xmin,xmax): 
     438        self.view.onFitRangeView(xmin,xmax) 
    419439    class View: 
    420440        """ 
     
    432452            self.dx = dx 
    433453            self.dy = dy 
    434             
     454            #to change x range to the reel range 
     455            self.Xreel = self.x 
     456            self.Yreel = self.y 
     457            self.DXreel = self.dx 
     458            self.DYreel = self.dy 
     459             
    435460            self.transx ="" 
    436461            self.transy ="" 
     462            # function to transform x and y 
    437463            self.funcx= None 
    438464            self.funcy= None 
     
    463489                self.dx = [] 
    464490                self.dy = [] 
    465                 
     491                tempx=[] 
     492                tempy=[] 
    466493                if dx==None: 
    467494                    dx=numpy.zeros(len(x)) 
     
    481508                         self.dy.append(tempdy) 
    482509                    except: 
     510                         tempx=x[i] 
     511                         tempy=y[i] 
    483512                         print "View.transform: skipping point x %g" % x[i] 
    484513                         print "View.transform: skipping point y %g" % y[i] 
    485514                         print "View.transform: skipping point dy %g" % dy[i] 
     515                          
    486516                         print sys.exc_value   
    487                 print len(self.x) 
    488                 print len(self.dx) 
    489                 print len(self.y) 
    490                 print len(self.dy) 
     517                
    491518                # Sanity check 
    492519                if not (len(self.x)==len(self.dx))and(len(self.x)==len(self.dy))\ 
     
    495522                self.check_data_logX() 
    496523                self.check_data_logY() 
    497                 print len(self.x) 
    498                 print len(self.dx) 
    499                 print len(self.y) 
    500                 print len(self.dy) 
     524                self.Xreel = self.x 
     525                self.Yreel = self.y 
     526                self.DXreel = self.dx 
     527                self.DYreel = self.dy 
     528        def onResetView(self): 
     529            self.x=self.Xreel 
     530            self.y=self.Yreel 
     531            self.dx=self.DXreel 
     532            self.dy=self.DYreel 
    501533        def returntransformx(self,funcx,funcdx):     
    502534            self.funcx= funcx 
     
    574606                self.dy=tempdy 
    575607                 
    576              
     608        def onFitRangeView(self,xmin,xmax): 
     609            tempx=[] 
     610            tempdx=[] 
     611            tempy=[] 
     612            tempdy=[] 
     613            for i in range(len(self.x)): 
     614                if ( self.x[i] >= xmin ) and ( self.x[i] <= xmax ): 
     615                    tempx.append(self.x[i]) 
     616                    tempdx.append(self.dx[i]) 
     617                    tempy.append(self.y[i]) 
     618                    tempdy.append(self.dy[i]) 
     619            self.x=tempx 
     620            self.y=tempy 
     621            self.dx=tempdx 
     622            self.dy=tempdy         
    577623 
    578624class Data1D(Plottable): 
Note: See TracChangeset for help on using the changeset viewer.