Changeset a4bd2ac in sasview for prview/perspectives


Ignore:
Timestamp:
Jun 30, 2008 2:18:57 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:
e96a852
Parents:
9a23253e
Message:

Started to add slit smearing. Added Rg and I(q=0) as outputs. GUI

Location:
prview/perspectives/pr
Files:
2 edited

Legend:

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

    r3fd1ebc ra4bd2ac  
    122122         
    123123        ## Data file TextCtrl 
    124         self.data_file = None 
    125         self.plot_data = None 
    126         self.nfunc_ctl = None 
    127         self.alpha_ctl = None 
    128         self.dmax_ctl  = None 
    129         self.time_ctl  = None 
    130         self.chi2_ctl  = None 
    131         self.osc_ctl  = None 
     124        self.data_file  = None 
     125        self.plot_data  = None 
     126        self.nfunc_ctl  = None 
     127        self.alpha_ctl  = None 
     128        self.dmax_ctl   = None 
     129        self.time_ctl   = None 
     130        self.chi2_ctl   = None 
     131        self.osc_ctl    = None 
    132132        self.file_radio = None 
    133133        self.plot_radio = None 
    134134        self.label_sugg = None 
    135         self.qmin_ctl = None 
    136         self.qmax_ctl = None 
     135        self.qmin_ctl   = None 
     136        self.qmax_ctl   = None 
     137         
     138        self.rg_ctl     = None 
     139        self.iq0_ctl    = None 
     140        self.bck_chk    = None 
     141        self.bck_ctl    = None 
    137142         
    138143        # TextCtrl for fraction of positive P(r) 
     
    164169            self.alpha_ctl.SetValue(str(value)) 
    165170        elif name=='chi2': 
    166             self.chi2_ctl.SetValue("%-5.3g" % value) 
     171            self.chi2_ctl.SetValue("%-5.2g" % value) 
     172        elif name=='bck': 
     173            self.bck_ctl.SetValue("%-5.2g" % value) 
    167174        elif name=='q_min': 
    168             self.qmin_ctl.SetValue("%-5.3g" % value) 
     175            self.qmin_ctl.SetValue("%-5.2g" % value) 
    169176        elif name=='q_max': 
    170             self.qmax_ctl.SetValue("%-5.3g" % value) 
     177            self.qmax_ctl.SetValue("%-5.2g" % value) 
    171178        elif name=='elapsed': 
    172179            self.time_ctl.SetValue("%-5.2g" % value) 
     180        elif name=='rg': 
     181            self.rg_ctl.SetValue("%-5.2g" % value) 
     182        elif name=='iq0': 
     183            self.iq0_ctl.SetValue("%-5.2g" % value) 
    173184        elif name=='oscillation': 
    174185            self.osc_ctl.SetValue("%-5.2g" % value) 
     
    219230            except: 
    220231                return -1.0 
     232        elif name=='bck': 
     233            try: 
     234                return float(self.bck_ctl.GetValue()) 
     235            except: 
     236                return -1.0 
    221237        elif name=='q_min': 
    222238            try: 
     
    232248            try: 
    233249                return float(self.time_ctl.GetValue()) 
     250            except: 
     251                return -1.0 
     252        elif name=='rg': 
     253            try: 
     254                return float(self.rg_ctl.GetValue()) 
     255            except: 
     256                return -1.0 
     257        elif name=='iq0': 
     258            try: 
     259                return float(self.iq0_ctl.GetValue()) 
    234260            except: 
    235261                return -1.0 
     
    275301 
    276302        iy = 0 
    277         self.file_radio = wx.RadioButton(self, -1, "File data:") 
     303        if self.standalone==False: 
     304            self.file_radio = wx.RadioButton(self, -1, "File data:") 
     305        else: 
     306            self.file_radio = wx.StaticText(self, -1, "Data file:") 
    278307        self.data_file = wx.TextCtrl(self, -1, size=(100,20)) 
    279308        self.data_file.SetEditable(False) 
     
    283312        self.Bind(wx.EVT_BUTTON, self._change_file, id = id)    
    284313        pars_sizer.Add(self.file_radio, (iy,0), (1,1), wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15) 
    285         pars_sizer.Add(self.data_file, (iy,1), (1,1), wx.EXPAND|wx.ADJUST_MINSIZE, 15) 
     314        #pars_sizer.Add(self.data_file, (iy,1), (1,1), wx.EXPAND|wx.ADJUST_MINSIZE, 15) 
     315        pars_sizer.Add(self.data_file, (iy,1), (1,1), wx.ADJUST_MINSIZE, 15) 
    286316        pars_sizer.Add(choose_button, (iy,3), (1,1), wx.RIGHT|wx.EXPAND|wx.ADJUST_MINSIZE, 15) 
    287317         
     
    294324            pars_sizer.Add(self.plot_data, (iy,1), (1,1), wx.EXPAND|wx.ADJUST_MINSIZE, 15) 
    295325         
    296         boxsizer1.Add(pars_sizer, 0, wx.EXPAND) 
     326        self.bck_chk = wx.CheckBox(self, -1, "Estimate background level") 
     327        self.bck_chk.SetToolTipString("Check box to let the fit estimate the constant background level.") 
     328        self.bck_chk.Bind(wx.EVT_CHECKBOX, self._on_pars_changed) 
     329        iy += 1 
     330        pars_sizer.Add(self.bck_chk, (iy,0), (1,2), wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 15) 
     331        boxsizer1.Add(pars_sizer, 0, wx.EXPAND)   
    297332        vbox.Add(boxsizer1) 
     333         
     334        # ----- Add slit parameters ----- 
     335        if False: 
     336            sbox = wx.StaticBox(self, -1, "Slit parameters") 
     337            sboxsizer = wx.StaticBoxSizer(sbox, wx.VERTICAL) 
     338            sboxsizer.SetMinSize((320,20)) 
     339             
     340            sizer_slit = wx.GridBagSizer(5,5) 
     341     
     342            label_sheight = wx.StaticText(self, -1, "Height") 
     343            label_swidth = wx.StaticText(self, -1, "Width") 
     344            #label_sunits1 = wx.StaticText(self, -1, "[A^(-1)]") 
     345            label_sunits2 = wx.StaticText(self, -1, "[A^(-1)]") 
     346            self.sheight_ctl = wx.TextCtrl(self, -1, size=(60,20)) 
     347            self.swidth_ctl = wx.TextCtrl(self, -1, size=(60,20)) 
     348            self.sheight_ctl.SetToolTipString("Enter slit height in units of Q or leave blank.") 
     349            self.swidth_ctl.SetToolTipString("Enter slit width in units of Q or leave blank.") 
     350            self.sheight_ctl.Bind(wx.EVT_TEXT, self._on_pars_changed) 
     351            self.swidth_ctl.Bind(wx.EVT_TEXT,  self._on_pars_changed) 
     352             
     353            iy = 0 
     354            sizer_slit.Add(label_sheight,    (iy,0), (1,1), wx.LEFT|wx.EXPAND, 15) 
     355            sizer_slit.Add(self.sheight_ctl, (iy,1), (1,1), wx.LEFT|wx.EXPAND, 10) 
     356            #sizer_slit.Add(label_sunits1,    (iy,2), (1,1), wx.LEFT|wx.EXPAND, 10) 
     357            sizer_slit.Add(label_swidth,     (iy,2), (1,1), wx.LEFT|wx.EXPAND, 15) 
     358            sizer_slit.Add(self.swidth_ctl,  (iy,3), (1,1), wx.LEFT|wx.EXPAND, 10) 
     359            sizer_slit.Add(label_sunits2,    (iy,4), (1,1), wx.LEFT|wx.EXPAND, 10) 
     360             
     361            sboxsizer.Add(sizer_slit, wx.TOP, 15) 
     362            vbox.Add(sboxsizer) 
     363         
    298364 
    299365        # ----- Parameters ----- 
     
    335401         
    336402        # EVT_TEXT would trigger an event for each character entered 
    337         self.nfunc_ctl.Bind(wx.EVT_KILL_FOCUS, self._on_pars_changed) 
    338         self.alpha_ctl.Bind(wx.EVT_KILL_FOCUS, self._read_pars) 
    339         self.dmax_ctl.Bind(wx.EVT_KILL_FOCUS, self._on_pars_changed) 
     403        #self.nfunc_ctl.Bind(wx.EVT_KILL_FOCUS, self._on_pars_changed) 
     404        #self.alpha_ctl.Bind(wx.EVT_KILL_FOCUS, self._read_pars) 
     405        #self.dmax_ctl.Bind(wx.EVT_KILL_FOCUS, self._on_pars_changed) 
    340406        #self.dmax_ctl.Bind(wx.EVT_TEXT_ENTER, self._on_pars_changed) 
    341407        #self.Bind(wx.EVT_TEXT_ENTER, self._on_pars_changed) 
     408         
     409        self.nfunc_ctl.Bind(wx.EVT_TEXT, self._on_pars_changed) 
     410        self.alpha_ctl.Bind(wx.EVT_TEXT, self._read_pars) 
     411        self.dmax_ctl.Bind(wx.EVT_TEXT, self._on_pars_changed) 
     412         
     413         
    342414         
    343415        sizer_params = wx.GridBagSizer(5,5) 
     
    369441        label_qmin = wx.StaticText(self, -1, "Q min") 
    370442        label_qmax = wx.StaticText(self, -1, "Q max") 
     443        #label_qunits1 = wx.StaticText(self, -1, "[A^(-1)]") 
     444        label_qunits2 = wx.StaticText(self, -1, "[A^(-1)]") 
    371445        self.qmin_ctl = wx.TextCtrl(self, -1, size=(60,20)) 
    372446        self.qmax_ctl = wx.TextCtrl(self, -1, size=(60,20)) 
    373         self.qmin_ctl.Bind(wx.EVT_KILL_FOCUS, self._on_pars_changed) 
    374         self.qmax_ctl.Bind(wx.EVT_KILL_FOCUS, self._on_pars_changed) 
     447        self.qmin_ctl.SetToolTipString("Select a lower bound for Q or leave blank.") 
     448        self.qmax_ctl.SetToolTipString("Select an upper bound for Q or leave blank.") 
     449        self.qmin_ctl.Bind(wx.EVT_TEXT, self._on_pars_changed) 
     450        self.qmax_ctl.Bind(wx.EVT_TEXT, self._on_pars_changed) 
    375451         
    376452        iy = 0 
    377         sizer_q.Add(label_qmin, (iy,0), (1,1), wx.LEFT|wx.EXPAND, 15) 
     453        sizer_q.Add(label_qmin,    (iy,0), (1,1), wx.LEFT|wx.EXPAND, 15) 
    378454        sizer_q.Add(self.qmin_ctl, (iy,1), (1,1), wx.LEFT|wx.EXPAND, 10) 
    379         sizer_q.Add(label_qmax, (iy,2), (1,1), wx.LEFT|wx.EXPAND, 15) 
     455        #sizer_q.Add(label_qunits1, (iy,2), (1,1), wx.LEFT|wx.EXPAND, 15) 
     456        sizer_q.Add(label_qmax,    (iy,2), (1,1), wx.LEFT|wx.EXPAND, 15) 
    380457        sizer_q.Add(self.qmax_ctl, (iy,3), (1,1), wx.LEFT|wx.EXPAND, 10) 
     458        sizer_q.Add(label_qunits2, (iy,4), (1,1), wx.LEFT|wx.EXPAND, 15) 
    381459        qboxsizer.Add(sizer_q, wx.TOP, 15) 
    382460        vbox.Add(qboxsizer) 
     
    388466        ressizer = wx.StaticBoxSizer(resbox, wx.VERTICAL) 
    389467        ressizer.SetMinSize((320,50)) 
     468         
     469        label_rg       = wx.StaticText(self, -1, "Rg") 
     470        label_rg_unit  = wx.StaticText(self, -1, "[A]") 
     471        label_iq0      = wx.StaticText(self, -1, "I(Q=0)") 
     472        label_iq0_unit = wx.StaticText(self, -1, "[A^(-1)]") 
     473        label_bck      = wx.StaticText(self, -1, "Background") 
     474        label_bck_unit = wx.StaticText(self, -1, "[A^(-1)]") 
     475        self.rg_ctl    = wx.TextCtrl(self, -1, size=(60,20)) 
     476        self.rg_ctl.SetEditable(False) 
     477        self.rg_ctl.SetToolTipString("Radius of gyration for the computed P(r).") 
     478        self.iq0_ctl   = wx.TextCtrl(self, -1, size=(60,20)) 
     479        self.iq0_ctl.SetEditable(False) 
     480        self.iq0_ctl.SetToolTipString("Scattering intensity at Q=0 for the computed P(r).") 
     481        self.bck_ctl   = wx.TextCtrl(self, -1, size=(60,20)) 
     482        self.bck_ctl.SetEditable(False) 
     483        self.bck_ctl.SetToolTipString("Value of estimated constant background.") 
    390484         
    391485        label_time = wx.StaticText(self, -1, "Computation time") 
     
    427521 
    428522        iy = 0 
     523        sizer_res.Add(label_rg, (iy,0), (1,1), wx.LEFT|wx.EXPAND, 15) 
     524        sizer_res.Add(self.rg_ctl,   (iy,1), (1,1), wx.RIGHT|wx.EXPAND, 15) 
     525        sizer_res.Add(label_rg_unit,   (iy,2), (1,1), wx.RIGHT|wx.EXPAND, 15) 
     526        iy += 1 
     527        sizer_res.Add(label_iq0, (iy,0), (1,1), wx.LEFT|wx.EXPAND, 15) 
     528        sizer_res.Add(self.iq0_ctl,   (iy,1), (1,1), wx.RIGHT|wx.EXPAND, 15) 
     529        sizer_res.Add(label_iq0_unit,   (iy,2), (1,1), wx.RIGHT|wx.EXPAND, 15) 
     530        iy += 1 
     531        sizer_res.Add(label_bck, (iy,0), (1,1), wx.LEFT|wx.EXPAND, 15) 
     532        sizer_res.Add(self.bck_ctl,   (iy,1), (1,1), wx.RIGHT|wx.EXPAND, 15) 
     533        sizer_res.Add(label_bck_unit,   (iy,2), (1,1), wx.RIGHT|wx.EXPAND, 15) 
     534        iy += 1 
    429535        sizer_res.Add(label_time, (iy,0), (1,1), wx.LEFT|wx.EXPAND, 15) 
    430536        sizer_res.Add(self.time_ctl,   (iy,1), (1,1), wx.RIGHT|wx.EXPAND, 15) 
     
    472578 
    473579        self.SetSizer(vbox) 
    474          
    475  
    476580         
    477581    def _on_accept_alpha(self, evt): 
     
    500604        self.qmax_ctl.SetValue("") 
    501605        self.time_ctl.SetValue("") 
     606        self.rg_ctl.SetValue("") 
     607        self.iq0_ctl.SetValue("") 
     608        self.bck_ctl.SetValue("") 
    502609        self.chi2_ctl.SetValue("") 
    503610        self.osc_ctl.SetValue("") 
     
    515622        """ 
    516623        flag, alpha, dmax, nfunc, qmin, qmax = self._read_pars() 
     624        has_bck = self.bck_chk.IsChecked() 
    517625         
    518626        # If the pars are valid, estimate alpha 
     
    522630                self.manager.estimate_plot_inversion(alpha=alpha, nfunc=nfunc,  
    523631                                                     d_max=dmax, 
    524                                                      q_min=qmin, q_max=qmax) 
     632                                                     q_min=qmin, q_max=qmax, 
     633                                                     bck=has_bck) 
    525634            else: 
    526635                path = self.data_file.GetValue() 
    527636                self.manager.estimate_file_inversion(alpha=alpha, nfunc=nfunc,  
    528637                                                     d_max=dmax, path=path, 
    529                                                      q_min=qmin, q_max=qmax) 
     638                                                     q_min=qmin, q_max=qmax, 
     639                                                     bck=has_bck) 
    530640         
    531641         
     
    613723         
    614724        flag, alpha, dmax, nfunc, qmin, qmax = self._read_pars() 
     725        has_bck = self.bck_chk.IsChecked() 
    615726         
    616727        if flag: 
     
    623734                    self.manager.setup_plot_inversion(alpha=alpha, nfunc=nfunc,  
    624735                                                      d_max=dmax, 
    625                                                       q_min=qmin, q_max=qmax) 
     736                                                      q_min=qmin, q_max=qmax, 
     737                                                      bck=has_bck) 
    626738            else: 
    627739                path = self.data_file.GetValue() 
     
    632744                    self.manager.setup_file_inversion(alpha=alpha, nfunc=nfunc,  
    633745                                                      d_max=dmax, path=path, 
    634                                                       q_min=qmin, q_max=qmax 
    635                                                       ) 
     746                                                      q_min=qmin, q_max=qmax, 
     747                                                      bck=has_bck) 
    636748                 
    637749        else: 
     
    649761            if path and os.path.isfile(path): 
    650762                self.data_file.SetValue(str(path)) 
    651                 self.file_radio.SetValue(True) 
     763                if self.standalone==False: 
     764                    self.file_radio.SetValue(True) 
    652765                self._on_pars_changed(None) 
    653766                self.manager.show_data(path) 
  • prview/perspectives/pr/pr.py

    r9b85e93 ra4bd2ac  
    4545        self.q_min      = None 
    4646        self.q_max      = None 
     47        self.has_bck    = False 
    4748        ## Remember last plottable processed 
    4849        self.last_data  = "sphere_60_q0_2.txt" 
     
    7879        """ 
    7980        return [] 
    80         import wx 
    81         shapes = wx.Menu() 
    82  
    83         id = wx.NewId() 
    84         shapes.Append(id, '&Sphere test') 
    85         wx.EVT_MENU(owner, id, self._fit_pr) 
    86          
    87         return [(id, shapes, "P(r)")] 
    8881     
    8982    def help(self, evt): 
     
    440433        self.control_panel.positive = pr.get_positive(out) 
    441434        self.control_panel.pos_err  = pr.get_pos_err(out, cov) 
     435        self.control_panel.rg = pr.rg(out) 
     436        self.control_panel.iq0 = pr.iq0(out) 
     437        self.control_panel.bck = pr.background 
    442438         
    443439        for i in range(len(out)): 
     
    457453            wx.PostEvent(self.parent, NewPlotEvent(plot=new_plot, title="Iq")) 
    458454                 
     455        # Compute the fit I(Q=0) 
     456        try: 
     457            print "I(0) = ", self.pr.iq0(out) 
     458        except: 
     459            pass 
     460         
     461        # Get R_g 
     462        print "Rg = ", self.pr.rg(out) 
    459463        # Show I(q) fit 
    460464        self.show_iq(out, self.pr) 
     
    485489 
    486490         
    487     def setup_plot_inversion(self, alpha, nfunc, d_max, q_min=None, q_max=None): 
     491    def setup_plot_inversion(self, alpha, nfunc, d_max, q_min=None, q_max=None, bck=False): 
    488492        self.alpha = alpha 
    489493        self.nfunc = nfunc 
     
    491495        self.q_min = q_min 
    492496        self.q_max = q_max 
     497        self.has_bck = bck 
    493498         
    494499        try: 
     
    498503            wx.PostEvent(self.parent, StatusEvent(status=sys.exc_value)) 
    499504 
    500     def estimate_plot_inversion(self, alpha, nfunc, d_max, q_min=None, q_max=None): 
     505    def estimate_plot_inversion(self, alpha, nfunc, d_max, q_min=None, q_max=None, bck=False): 
    501506        self.alpha = alpha 
    502507        self.nfunc = nfunc 
     
    504509        self.q_min = q_min 
    505510        self.q_max = q_max 
     511        self.has_bck = bck 
    506512         
    507513        try: 
     
    525531        pr.x = self.current_plottable.x 
    526532        pr.y = self.current_plottable.y 
     533        pr.has_bck = self.has_bck 
    527534         
    528535        # Fill in errors if none were provided 
     
    540547 
    541548           
    542     def setup_file_inversion(self, alpha, nfunc, d_max, path, q_min=None, q_max=None): 
     549    def setup_file_inversion(self, alpha, nfunc, d_max, path, q_min=None, q_max=None, bck=False): 
    543550        self.alpha = alpha 
    544551        self.nfunc = nfunc 
     
    546553        self.q_min = q_min 
    547554        self.q_max = q_max 
     555        self.has_bck = bck 
    548556         
    549557        try: 
     
    553561            wx.PostEvent(self.parent, StatusEvent(status=sys.exc_value)) 
    554562           
    555     def estimate_file_inversion(self, alpha, nfunc, d_max, path, q_min=None, q_max=None): 
     563    def estimate_file_inversion(self, alpha, nfunc, d_max, path, q_min=None, q_max=None, bck=False): 
    556564        self.alpha = alpha 
    557565        self.nfunc = nfunc 
     
    559567        self.q_min = q_min 
    560568        self.q_max = q_max 
     569        self.has_bck = bck 
    561570         
    562571        try: 
     
    586595            pr.y = y 
    587596            pr.err = err 
     597            pr.has_bck = self.has_bck 
    588598             
    589599            self.pr = pr 
Note: See TracChangeset for help on using the changeset viewer.