Changeset 2a92852 in sasview


Ignore:
Timestamp:
Jul 1, 2008 12:57:14 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:
bb03739
Parents:
f168d02
Message:

Updated GUI for slit smearing

Location:
prview
Files:
4 edited

Legend:

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

    rd6113849 r2a92852  
    299299        #panel = wx.Panel(self, -1) 
    300300        vbox = wx.BoxSizer(wx.VERTICAL) 
     301        #vbox.SetMinSize((1000,50)) 
    301302 
    302303        # ----- I(q) data ----- 
     
    340341         
    341342        # ----- Add slit parameters ----- 
    342         if False: 
     343        if True: 
    343344            sbox = wx.StaticBox(self, -1, "Slit parameters") 
    344345            sboxsizer = wx.StaticBoxSizer(sbox, wx.VERTICAL) 
     
    355356            self.sheight_ctl.SetToolTipString("Enter slit height in units of Q or leave blank.") 
    356357            self.swidth_ctl.SetToolTipString("Enter slit width in units of Q or leave blank.") 
    357             self.sheight_ctl.Bind(wx.EVT_TEXT, self._on_pars_changed) 
    358             self.swidth_ctl.Bind(wx.EVT_TEXT,  self._on_pars_changed) 
     358            #self.sheight_ctl.Bind(wx.EVT_TEXT, self._on_pars_changed) 
     359            #self.swidth_ctl.Bind(wx.EVT_TEXT,  self._on_pars_changed) 
    359360             
    360361            iy = 0 
     
    648649            scenes.  
    649650        """ 
    650         flag, alpha, dmax, nfunc, qmin, qmax = self._read_pars() 
     651        flag, alpha, dmax, nfunc, qmin, qmax, height, width = self._read_pars() 
    651652        has_bck = self.bck_chk.IsChecked() 
    652653         
    653654        # If the pars are valid, estimate alpha 
    654655        if flag: 
     656            self.nterms_estimate_ctl.Enable(False) 
     657            self.alpha_estimate_ctl.Enable(False) 
     658             
    655659            if self.standalone==False and self.plot_radio.GetValue(): 
    656660                dataset = self.plot_data.GetValue() 
     
    658662                                                     d_max=dmax, 
    659663                                                     q_min=qmin, q_max=qmax, 
    660                                                      bck=has_bck) 
     664                                                     bck=has_bck,  
     665                                                     height=height, 
     666                                                     width=width) 
    661667            else: 
    662668                path = self.data_file.GetValue() 
     
    664670                                                     d_max=dmax, path=path, 
    665671                                                     q_min=qmin, q_max=qmax, 
    666                                                      bck=has_bck) 
     672                                                     bck=has_bck, 
     673                                                     height=height, 
     674                                                     width=width) 
    667675         
    668676         
     
    673681        qmin  = 0 
    674682        qmax  = 0 
     683        height = 0 
     684        width  = 0 
    675685         
    676686        flag = True 
     687         
     688         
     689        # Read slit height 
     690        try: 
     691            height_str = self.sheight_ctl.GetValue() 
     692            if len(height_str.lstrip().rstrip())==0: 
     693                height = 0 
     694            else: 
     695                height = float(height_str) 
     696                self.sheight_ctl.SetBackgroundColour(wx.WHITE) 
     697                self.sheight_ctl.Refresh() 
     698        except: 
     699            flag = False 
     700            self.sheight_ctl.SetBackgroundColour("pink") 
     701            self.sheight_ctl.Refresh() 
     702             
     703        # Read slit width 
     704        try: 
     705            width_str = self.swidth_ctl.GetValue() 
     706            if len(width_str.lstrip().rstrip())==0: 
     707                width = 0 
     708            else: 
     709                width = float(width_str) 
     710                self.swidth_ctl.SetBackgroundColour(wx.WHITE) 
     711                self.swidth_ctl.Refresh() 
     712        except: 
     713            flag = False 
     714            self.swidth_ctl.SetBackgroundColour("pink") 
     715            self.swidth_ctl.Refresh() 
    677716         
    678717        # Read alpha 
     
    739778            self.qmax_ctl.Refresh() 
    740779         
    741         return flag, alpha, dmax, nfunc, qmin, qmax 
     780        return flag, alpha, dmax, nfunc, qmin, qmax, height, width 
    742781     
    743782    def _on_invert(self, evt): 
     
    749788        # Push it to the manager 
    750789         
    751         flag, alpha, dmax, nfunc, qmin, qmax = self._read_pars() 
     790        flag, alpha, dmax, nfunc, qmin, qmax, height, width = self._read_pars() 
    752791        has_bck = self.bck_chk.IsChecked() 
    753792         
     
    762801                                                      d_max=dmax, 
    763802                                                      q_min=qmin, q_max=qmax, 
    764                                                       bck=has_bck) 
     803                                                      bck=has_bck, 
     804                                                      height=height, 
     805                                                      width=width) 
    765806            else: 
    766807                path = self.data_file.GetValue() 
     
    772813                                                      d_max=dmax, path=path, 
    773814                                                      q_min=qmin, q_max=qmax, 
    774                                                       bck=has_bck) 
     815                                                      bck=has_bck, 
     816                                                      height=height, 
     817                                                      width=width) 
    775818                 
    776819        else: 
     
    791834                    self.file_radio.SetValue(True) 
    792835                self._on_pars_changed(None) 
    793                 self.manager.show_data(path) 
     836                self.manager.show_data(path, reset=True) 
    794837         
    795838 
  • prview/perspectives/pr/pr.py

    rd6113849 r2a92852  
    1212from sans.pr.invertor import Invertor 
    1313 
    14 PR_FIT_LABEL    = "P_{fit}(r)" 
    15 PR_LOADED_LABEL = "P_{loaded}(r)" 
    16 IQ_DATA_LABEL   = "I_{obs}(q)" 
     14PR_FIT_LABEL       = "P_{fit}(r)" 
     15PR_LOADED_LABEL    = "P_{loaded}(r)" 
     16IQ_DATA_LABEL      = "I_{obs}(q)" 
     17IQ_FIT_LABEL       = "I_{fit}(q)" 
     18IQ_SMEARED_LABEL   = "I_{smeared}(q)" 
    1719 
    1820import wx.lib 
     
    4648        self.q_max      = None 
    4749        self.has_bck    = False 
     50        self.slit_height = 0 
     51        self.slit_width  = 0 
    4852        ## Remember last plottable processed 
    4953        self.last_data  = "sphere_60_q0_2.txt" 
     
    5660        self.invertor    = None 
    5761        self.pr          = None 
     62        self.pr_estimate = None 
    5863        ## Calculation thread 
    5964        self.calc_thread = None 
     
    222227                 
    223228        new_plot = Theory1D(x, y) 
    224         new_plot.name = "I_{fit}(q)" 
     229        new_plot.name = IQ_FIT_LABEL 
    225230        new_plot.xaxis("\\rm{Q}", 'A^{-1}') 
    226231        new_plot.yaxis("\\rm{Intensity} ","cm^{-1}") 
    227232        #new_plot.group_id = "test group" 
    228233        wx.PostEvent(self.parent, NewPlotEvent(plot=new_plot, title="I(q)")) 
     234         
     235        # If we have used slit smearing, plot the smeared I(q) too 
     236        if pr.slit_width>0 or pr.slit_height>0: 
     237            x = pylab.arange(minq, maxq, maxq/301.0) 
     238            y = numpy.zeros(len(x)) 
     239            err = numpy.zeros(len(x)) 
     240            for i in range(len(x)): 
     241                value = pr.iq_smeared(out, x[i]) 
     242                y[i] = value 
     243                try: 
     244                    err[i] = math.sqrt(math.fabs(value)) 
     245                except: 
     246                    err[i] = 1.0 
     247                    print "Error getting error", value, x[i] 
     248                     
     249            new_plot = Theory1D(x, y) 
     250            new_plot.name = IQ_SMEARED_LABEL 
     251            new_plot.xaxis("\\rm{Q}", 'A^{-1}') 
     252            new_plot.yaxis("\\rm{Intensity} ","cm^{-1}") 
     253            #new_plot.group_id = "test group" 
     254            wx.PostEvent(self.parent, NewPlotEvent(plot=new_plot, title="I(q)")) 
    229255         
    230256         
     
    417443        """ 
    418444        # Save useful info 
    419         print "Number of terms =", nterms 
    420445        self.elapsed = elapsed 
    421446        self.control_panel.nterms_estimate = nterms 
     
    482507        #result_panel = InversionResults(self.parent, -1, style=wx.RAISED_BORDER) 
    483508         
    484     def show_data(self, path=None): 
     509    def show_data(self, path=None, reset=False): 
     510        """ 
     511            Show data read from a file 
     512            @param path: file path 
     513            @param reset: if True all other plottables will be cleared 
     514        """ 
     515         
     516         
    485517        if not path==None: 
    486518            self._create_file_pr(path)   
     
    493525        new_plot.interactive = True 
    494526        #new_plot.group_id = "test group" 
    495         wx.PostEvent(self.parent, NewPlotEvent(plot=new_plot, title="I(q)")) 
     527        wx.PostEvent(self.parent, NewPlotEvent(plot=new_plot, title="I(q)", reset=reset)) 
    496528         
    497529        # Get Q range 
     
    501533 
    502534         
    503     def setup_plot_inversion(self, alpha, nfunc, d_max, q_min=None, q_max=None, bck=False): 
     535    def setup_plot_inversion(self, alpha, nfunc, d_max, q_min=None, q_max=None,  
     536                             bck=False, height=0, width=0): 
    504537        self.alpha = alpha 
    505538        self.nfunc = nfunc 
     
    508541        self.q_max = q_max 
    509542        self.has_bck = bck 
     543        self.slit_height = height 
     544        self.slit_width  = width 
    510545         
    511546        try: 
    512             self._create_plot_pr() 
    513             self.perform_inversion() 
     547            pr = self._create_plot_pr() 
     548            if not pr==None: 
     549                self.pr = pr 
     550                self.perform_inversion() 
    514551        except: 
    515552            wx.PostEvent(self.parent, StatusEvent(status=sys.exc_value)) 
    516553 
    517     def estimate_plot_inversion(self, alpha, nfunc, d_max, q_min=None, q_max=None, bck=False): 
     554    def estimate_plot_inversion(self, alpha, nfunc, d_max, q_min=None, q_max=None,  
     555                                bck=False, height=0, width=0): 
    518556        self.alpha = alpha 
    519557        self.nfunc = nfunc 
     
    522560        self.q_max = q_max 
    523561        self.has_bck = bck 
     562        self.slit_height = height 
     563        self.slit_width  = width 
    524564         
    525565        try: 
    526             self._create_plot_pr() 
    527             self.perform_estimate() 
     566            pr = self._create_plot_pr() 
     567            if not pr==None: 
     568                self.pr = pr 
     569                self.perform_estimate() 
    528570        except: 
    529571            wx.PostEvent(self.parent, StatusEvent(status=sys.exc_value))             
    530572 
    531     def _create_plot_pr(self): 
     573    def _create_plot_pr(self, estimate=False): 
    532574        """ 
    533575            Create and prepare invertor instance from 
     
    544586        pr.y = self.current_plottable.y 
    545587        pr.has_bck = self.has_bck 
     588        pr.slit_height = self.slit_height 
     589        pr.slit_width = self.slit_width 
    546590         
    547591        # Fill in errors if none were provided 
     
    554598        else: 
    555599            pr.err = self.current_plottable.dy 
    556              
    557         self.pr = pr 
    558         self.iq_data_shown = True 
     600         
     601        #self.pr = pr 
     602        return pr 
    559603 
    560604           
    561     def setup_file_inversion(self, alpha, nfunc, d_max, path, q_min=None, q_max=None, bck=False): 
     605    def setup_file_inversion(self, alpha, nfunc, d_max, path, q_min=None, q_max=None,  
     606                             bck=False, height=0, width=0): 
    562607        self.alpha = alpha 
    563608        self.nfunc = nfunc 
     
    566611        self.q_max = q_max 
    567612        self.has_bck = bck 
     613        self.slit_height = height 
     614        self.slit_width  = width 
    568615         
    569616        try: 
    570             if self._create_file_pr(path): 
     617            pr = self._create_file_pr(path) 
     618            if not pr==None: 
     619                self.pr = pr 
    571620                self.perform_inversion() 
    572621        except: 
    573622            wx.PostEvent(self.parent, StatusEvent(status=sys.exc_value)) 
    574623           
    575     def estimate_file_inversion(self, alpha, nfunc, d_max, path, q_min=None, q_max=None, bck=False): 
     624    def estimate_file_inversion(self, alpha, nfunc, d_max, path, q_min=None, q_max=None,  
     625                                bck=False, height=0, width=0): 
    576626        self.alpha = alpha 
    577627        self.nfunc = nfunc 
     
    580630        self.q_max = q_max 
    581631        self.has_bck = bck 
     632        self.slit_height = height 
     633        self.slit_width  = width 
    582634         
    583635        try: 
    584             if self._create_file_pr(path): 
     636            pr = self._create_file_pr(path) 
     637            if not pr==None: 
     638                self.pr = pr 
    585639                self.perform_estimate() 
    586640        except: 
     
    608662            pr.err = err 
    609663            pr.has_bck = self.has_bck 
    610              
    611             self.pr = pr 
    612             return True 
    613         return False 
     664            pr.slit_height = self.slit_height 
     665            pr.slit_width = self.slit_width 
     666            return pr 
     667            #self.pr = pr 
     668            #return True 
     669        #return False 
     670        return None 
    614671         
    615672    def perform_estimate(self): 
     
    639696                 
    640697        pr = self.pr.clone() 
     698        # Skip the slit settings for the estimation 
     699        # It slows down the application and it doesn't change the estimates 
     700        pr.slit_height = 0.0 
     701        pr.slit_width  = 0.0 
    641702        self.estimation_thread = EstimateNT(pr, self.nfunc, error_func=self._thread_error,  
    642703                                            completefn = self._estimateNT_completed,  
     
    649710        # Time estimate 
    650711        #estimated = self.elapsed*self.nfunc**2 
    651         message = "Computation time may take up to %g seconds" % self.elapsed 
    652         wx.PostEvent(self.parent, StatusEvent(status=message)) 
     712        #message = "Computation time may take up to %g seconds" % self.elapsed 
     713        #wx.PostEvent(self.parent, StatusEvent(status=message)) 
    653714         
    654715        # Start inversion thread 
  • prview/perspectives/pr/pr_thread.py

    r35adaf6 r2a92852  
    4444            elapsed = time.time()-self.starttime 
    4545            self.complete(out=out, cov=cov, pr=self.pr, elapsed=elapsed) 
     46        except KeyboardInterrupt: 
     47            # Thread was interrupted, just proceed 
     48            printEVT("P(r) calc interrupted") 
    4649        except: 
    4750            if not self.error_func==None: 
     
    7174        self.starttime = 0 
    7275         
    73     def isquit(self): 
    74         try: 
    75             CalcThread.isquit(self) 
    76         except KeyboardInterrupt: 
    77             printEVT("Alpha estimator thread interrupted") 
    78             raise KeyboardInterrupt     
    79          
    8076    def compute(self): 
    8177        """ 
     
    8682            self.isquit() 
    8783            self.complete(alpha=alpha, message=message, elapsed=elapsed) 
     84        except KeyboardInterrupt: 
     85            # Thread was interrupted, just proceed 
     86            printEVT("Alpha estimator thread interrupted") 
    8887        except: 
    8988            if not self.error_func==None: 
    90                 printEVT("EstimatePr.compute: %s" % sys.exc_value) 
     89                self.error_func("EstimatePr.compute: %s" % sys.exc_value) 
    9190 
    9291class EstimateNT(CalcThread): 
     
    107106        self.starttime = 0 
    108107         
    109     def isquit(self): 
    110         try: 
    111             CalcThread.isquit(self) 
    112         except KeyboardInterrupt: 
    113             printEVT("Number of terms thread interrupted") 
    114             raise KeyboardInterrupt     
    115          
    116108    def compute(self): 
    117109        """ 
     
    125117            self.isquit() 
    126118            self.complete(nterms=nterms, alpha=alpha, message=message, elapsed=t_1) 
     119        except KeyboardInterrupt: 
     120            # Thread was interrupted, just proceed 
     121            printEVT("Number of terms thread interrupted") 
    127122        except: 
    128123            if not self.error_func==None: 
    129                 printEVT("EstimatePr2.compute: %s" % sys.exc_value) 
     124                self.error_func("EstimatePr2.compute: %s" % sys.exc_value) 
    130125 
    131126     
  • prview/sansview.py

    raa4b8379 r2a92852  
    1414    def OnInit(self): 
    1515        #from gui_manager import ViewerFrame 
    16         self.frame = PrFrame(None, -1, local_config.__appname__)     
     16        self.frame = PrFrame(None, -1, local_config.__appname__,  
     17                             window_height=650, window_width=750)     
    1718        self.frame.Show(True) 
    1819 
Note: See TracChangeset for help on using the changeset viewer.