Changeset b659551 in sasview for prview/perspectives/pr/pr.py


Ignore:
Timestamp:
Jun 13, 2008 1:10:42 PM (16 years ago)
Author:
Mathieu Doucet <doucetm@…>
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:
ad8bcd6
Parents:
b00b487
Message:

Added reset button, added option to change number of points on the P(r) plot, fixed minor problems with displaying error bars.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • prview/perspectives/pr/pr.py

    r660b1e6 rb659551  
    1313class Plugin: 
    1414     
     15    DEFAULT_ALPHA = 0.0001 
     16    DEFAULT_NFUNC = 10 
     17    DEFAULT_DMAX  = 140.0 
     18     
    1519    def __init__(self): 
    1620        ## Plug-in name 
     
    2731         
    2832        ## State data 
    29         self.alpha      = 0.0001 
    30         self.nfunc      = 10 
    31         self.max_length = 140.0 
     33        self.alpha      = self.DEFAULT_ALPHA 
     34        self.nfunc      = self.DEFAULT_NFUNC 
     35        self.max_length = self.DEFAULT_DMAX 
    3236        self.q_min      = None 
    3337        self.q_max      = None 
     
    4852        ## Currently views plottable 
    4953        self.current_plottable = None 
     54        ## Number of P(r) points to display on the output plot 
     55        self._pr_npts = 51 
    5056 
    5157    def populate_menu(self, id, owner): 
     
    118124 
    119125        # Show input P(r) 
    120         new_plot = Data1D(pr.x, pr.y, pr.err) 
     126        new_plot = Data1D(pr.x, pr.y, dy=pr.err) 
    121127        new_plot.name = "P_{obs}(r)" 
    122128        new_plot.xaxis("\\rm{r}", 'A') 
     
    157163        #Put this call in plottables/guitools     
    158164        wx.PostEvent(self.parent, NewPlotEvent(plot=new_plot, title="Sphere P(r)")) 
     165         
     166    def get_npts(self): 
     167        """ 
     168            Returns the number of points in the I(q) data 
     169        """ 
     170        try: 
     171            return len(self.pr.x) 
     172        except: 
     173            return 0 
    159174         
    160175    def show_iq(self, out, pr, q=None): 
     
    203218         
    204219         
     220    def _on_pr_npts(self, evt): 
     221        """ 
     222            Redisplay P(r) with a different number of points 
     223        """    
     224        from inversion_panel import PrDistDialog 
     225        dialog = PrDistDialog(None, -1) 
     226        dialog.set_content(self._pr_npts) 
     227        if dialog.ShowModal() == wx.ID_OK: 
     228            self._pr_npts= dialog.get_content() 
     229            dialog.Destroy() 
     230            self.show_pr(self.pr.out, self.pr, self.pr.cov) 
     231        else: 
     232            dialog.Destroy() 
    205233         
    206234         
     
    213241         
    214242        # Show P(r) 
    215         x = pylab.arange(0.0, pr.d_max, pr.d_max/51.0) 
     243        x = pylab.arange(0.0, pr.d_max, pr.d_max/self._pr_npts) 
    216244     
    217245        y = numpy.zeros(len(x)) 
     
    253281        return self.parent.choose_file() 
    254282                 
    255     def load(self, path = "sphere_test_data.txt"): 
     283    def load(self, path = "sphere_60_q0_2.txt"): 
    256284        import numpy, math, sys 
    257285        # Read the data from the data file 
     
    259287        data_y   = numpy.zeros(0) 
    260288        data_err = numpy.zeros(0) 
     289        scale    = None 
     290        min_err  = 0.0 
    261291        if not path == None: 
    262292            input_f = open(path,'r') 
     
    268298                    x = float(toks[0]) 
    269299                    y = float(toks[1]) 
    270                     try: 
    271                         scale = 0.05/math.sqrt(data_x[0]) 
    272                     except: 
    273                         scale = 1.0 
    274                     #data_err = numpy.append(data_err, 10.0*math.sqrt(y)+1000.0) 
     300                    if len(toks)>2: 
     301                        err = float(toks[2]) 
     302                    else: 
     303                        if scale==None: 
     304                            scale = 0.05*math.sqrt(y) 
     305                            #scale = 0.05/math.sqrt(y) 
     306                            min_err = 0.01*y 
     307                        err = scale*math.sqrt(y)+min_err 
     308                        #err = 0 
     309                         
    275310                    data_x = numpy.append(data_x, x) 
    276311                    data_y = numpy.append(data_y, y) 
    277                     data_err = numpy.append(data_err, scale*math.sqrt(math.fabs(y))) 
     312                    data_err = numpy.append(data_err, err) 
    278313                except: 
    279                     print "Error reading line: ", line 
    280                     print sys.exc_value 
     314                    pass 
    281315                    
    282         print "Lines read:", len(data_x) 
    283         return data_x, data_y, data_err 
     316        return data_x, data_y, data_err      
    284317         
    285318    def pr_theory(self, r, R): 
     
    303336                 
    304337                return [["Compute P(r)", "Compute P(r) from distribution", self._on_context_inversion], 
    305                        ["Add P(r) data", "Load a data file and display it on this plot", self._on_add_data]] 
     338                       ["Add P(r) data", "Load a data file and display it on this plot", self._on_add_data], 
     339                       ["Change number of P(r) points", "Change the number of points on the P(r) output", self._on_pr_npts]] 
    306340                 
    307341        return [["Compute P(r)", "Compute P(r) from distribution", self._on_context_inversion]] 
     
    318352        x, y, err = self.parent.load_ascii_1D(path) 
    319353         
    320         new_plot = Data1D(x, y, dy=err) 
     354        #new_plot = Data1D(x, y, dy=err) 
     355        new_plot = Theory1D(x, y) 
    321356        new_plot.name = "P_{loaded}(r)" 
    322357        new_plot.xaxis("\\rm{r}", 'A') 
     
    369404        # Save useful info 
    370405        self.elapsed = elapsed 
     406        # Save Pr invertor 
     407        self.pr = pr 
     408         
    371409        message = "Computation completed in %g seconds [chi2=%g]" % (elapsed, pr.chi2) 
    372410        wx.PostEvent(self.parent, StatusEvent(status=message)) 
     
    387425                print "%d: %g +- %g" % (i, out[i], math.sqrt(math.fabs(cov[i][i]))) 
    388426            except:  
     427                print sys.exc_value 
    389428                print "%d: %g +- ?" % (i, out[i])         
    390429         
    391430        # Make a plot of I(q) data 
    392         new_plot = Data1D(self.pr.x, self.pr.y, self.pr.err) 
     431        new_plot = Data1D(self.pr.x, self.pr.y, dy=self.pr.err) 
    393432        new_plot.name = "I_{obs}(q)" 
    394433        new_plot.xaxis("\\rm{Q}", 'A^{-1}') 
     
    411450               
    412451        # Make a plot of I(q) data 
    413         new_plot = Data1D(self.pr.x, self.pr.y, self.pr.err) 
     452        new_plot = Data1D(self.pr.x, self.pr.y, dy=self.pr.err) 
    414453        new_plot.name = "I_{obs}(q)" 
    415454        new_plot.xaxis("\\rm{Q}", 'A^{-1}') 
Note: See TracChangeset for help on using the changeset viewer.