Ignore:
Timestamp:
Aug 22, 2016 7:34:56 AM (8 years ago)
Author:
lewis
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, ticket-1009, ticket-1094-headless, ticket-1242-2d-resolution, ticket-1243, ticket-1249, ticket885, unittest-saveload
Children:
caeb382
Parents:
93b145a
Message:

Show extrapolation parameters in GUI

Also change I_obs label to I_obs - Bg and correct Guinier equation in the
docs.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/sas/sasgui/perspectives/corfunc/corfunc_panel.py

    r93b145a rff11b21  
    6868        self.extracted_params = None 
    6969        self.transform_type = 'fourier' 
     70        self._extrapolation_outputs = {} 
    7071        # Dictionary for saving refs to text boxes used to display output data 
    7172        self._output_boxes = None 
     
    148149        if data is None: 
    149150            self._disable_inputs() 
     151            # Reset outputs 
    150152            self.set_extracted_params(reset=True) 
     153            self.set_extrapolation_params() 
    151154            self._data = None 
    152155            return 
     
    206209 
    207210        try: 
    208             self._extrapolated_data = self._calculator.compute_extrapolation() 
     211            params, self._extrapolated_data = self._calculator.compute_extrapolation() 
    209212        except: 
    210213            msg = "Error extrapolating data." 
     
    226229        self._extract_btn.Disable() 
    227230        self.set_extracted_params(reset=True) 
     231        self.set_extrapolation_params(params) 
    228232 
    229233    def compute_transform(self, event=None): 
     
    329333        self._calculator.background = bg 
    330334 
     335    def set_extrapolation_params(self, params=None): 
     336        if params is None: 
     337            # Reset outputs 
     338            for output in self._extrapolation_outputs.values(): 
     339                output.SetValue('-') 
     340            return 
     341        for key, value in params.iteritems(): 
     342            output = self._extrapolation_outputs[key] 
     343            rounded = self._round_sig_figs(value, 6) 
     344            output.SetValue(rounded) 
     345 
     346 
    331347    def set_extracted_params(self, params=None, reset=False): 
    332348        self.extracted_params = params 
     
    334350        if params is None: 
    335351            if not reset: error = True 
    336             for key in OUTPUT_STRINGS.keys(): 
    337                 self._output_boxes[key].SetValue('-') 
     352            for output in self._output_boxes.values(): 
     353                output.SetValue('-') 
    338354        else: 
    339355            if len(params) < len(OUTPUT_STRINGS): 
     
    347363            wx.PostEvent(self._manager.parent, StatusEvent( 
    348364                status=msg, info='error')) 
    349  
    350365 
    351366    def plot_qrange(self, active=None, leftdown=False): 
     
    449464        file_sizer = wx.GridBagSizer(5, 5) 
    450465 
     466        y = 0 
     467 
    451468        file_name_label = wx.StaticText(self, -1, "Name:") 
    452469        file_sizer.Add(file_name_label, (0, 0), (1, 1), 
     
    461478        databox_sizer.Add(file_sizer, wx.TOP, 15) 
    462479 
    463         vbox.Add(databox_sizer, (0, 0), (1, 1), 
     480        vbox.Add(databox_sizer, (y, 0), (1, 1), 
    464481            wx.LEFT | wx.RIGHT | wx.EXPAND | wx.ADJUST_MINSIZE | wx.TOP, 15) 
    465  
     482        y += 1 
    466483 
    467484        # Parameters 
     
    523540        q_sizer.Add(self._qmax2_input, (3,3), (1, 1), wx.LEFT, 5) 
    524541 
    525         background_label = wx.StaticText(self, -1, "Background:", size=(80,20)) 
    526         q_sizer.Add(background_label, (4,0), (1,1), wx.LEFT | wx.EXPAND, 5) 
    527  
    528         self._background_input = ModelTextCtrl(self, -1, size=(75,20), 
    529             style=wx.TE_PROCESS_ENTER, name='background_input', 
     542        qbox_sizer.Add(q_sizer, wx.TOP, 0) 
     543 
     544        vbox.Add(qbox_sizer, (y, 0), (1, 1), 
     545            wx.LEFT | wx.RIGHT | wx.EXPAND | wx.ADJUST_MINSIZE, 15) 
     546        y += 1 
     547 
     548        extrapolation_box = wx.StaticBox(self, -1, "Extrapolation Parameters") 
     549        extrapolation_sizer = wx.StaticBoxSizer(extrapolation_box, wx.VERTICAL) 
     550        params_sizer = wx.GridBagSizer(5, 5) 
     551 
     552        guinier_label = wx.StaticText(self, -1, "Guinier:") 
     553        params_sizer.Add(guinier_label, (0, 0), (1,1), 
     554            wx.ALL | wx.EXPAND | wx.ADJUST_MINSIZE, 5) 
     555 
     556        a_label = wx.StaticText(self, -1, "A: ") 
     557        params_sizer.Add(a_label, (1, 0), (1, 1), wx.LEFT | wx.EXPAND, 15) 
     558 
     559        a_output = OutputTextCtrl(self, wx.NewId(), 
     560            value="-", style=wx.ALIGN_CENTER_HORIZONTAL) 
     561        params_sizer.Add(a_output, (1, 1), (1, 1), wx.RIGHT | wx.EXPAND, 15) 
     562        self._extrapolation_outputs['A'] = a_output 
     563 
     564        b_label = wx.StaticText(self, -1, "B: ") 
     565        params_sizer.Add(b_label, (2, 0), (1, 1), wx.LEFT | wx.EXPAND, 15) 
     566 
     567        b_output = OutputTextCtrl(self, wx.NewId(), 
     568            value="-", style=wx.ALIGN_CENTER_HORIZONTAL) 
     569        params_sizer.Add(b_output, (2, 1), (1, 1), wx.RIGHT | wx.EXPAND, 15) 
     570        self._extrapolation_outputs['B'] = b_output 
     571 
     572        porod_label = wx.StaticText(self, -1, "Porod: ") 
     573        params_sizer.Add(porod_label, (0, 2), (1, 1), 
     574            wx.ALL | wx.EXPAND | wx.ADJUST_MINSIZE, 5) 
     575 
     576        k_label = wx.StaticText(self, -1, "K: ") 
     577        params_sizer.Add(k_label, (1, 2), (1, 1), wx.LEFT | wx.EXPAND, 15) 
     578 
     579        k_output = OutputTextCtrl(self, wx.NewId(), 
     580            value="-", style=wx.ALIGN_CENTER_HORIZONTAL) 
     581        params_sizer.Add(k_output, (1, 3), (1, 1), wx.RIGHT | wx.EXPAND, 15) 
     582        self._extrapolation_outputs['K'] = k_output 
     583 
     584        sigma_label = wx.StaticText(self, -1, u'\u03C3: ') 
     585        params_sizer.Add(sigma_label, (2, 2), (1, 1), wx.LEFT | wx.EXPAND, 15) 
     586 
     587        sigma_output = OutputTextCtrl(self, wx.NewId(), 
     588            value="-", style=wx.ALIGN_CENTER_HORIZONTAL) 
     589        params_sizer.Add(sigma_output, (2, 3), (1, 1), wx.RIGHT | wx.EXPAND, 15) 
     590        self._extrapolation_outputs['sigma'] = sigma_output 
     591 
     592        bg_label = wx.StaticText(self, -1, "Bg: ") 
     593        params_sizer.Add(bg_label, (3, 2), (1, 1), wx.LEFT | wx.EXPAND, 15) 
     594 
     595        self._background_input = ModelTextCtrl(self, -1, value="-", 
     596            style=wx.TE_PROCESS_ENTER | wx.TE_CENTRE, name='background_input', 
    530597            text_enter_callback=self._on_enter_input) 
    531598        self._background_input.SetToolTipString(("A background value to " 
    532599            "subtract from all intensity values")) 
    533         q_sizer.Add(self._background_input, (4,1), (1,1), 
    534             wx.RIGHT, 5) 
    535  
    536         background_button = wx.Button(self, wx.NewId(), "Calculate", 
    537             size=(75, 20)) 
     600        params_sizer.Add(self._background_input, (3, 3), (1, 1), wx.RIGHT | wx.EXPAND, 15) 
     601 
     602        background_button = wx.Button(self, wx.NewId(), "Calculate Bg", 
     603            size=(75, -1)) 
    538604        background_button.Bind(wx.EVT_BUTTON, self._compute_background) 
    539         q_sizer.Add(background_button, (4, 2), (1, 1), wx.RIGHT, 5) 
    540  
    541         qbox_sizer.Add(q_sizer, wx.TOP, 0) 
    542  
    543         vbox.Add(qbox_sizer, (1, 0), (1, 1), 
     605        params_sizer.Add(background_button, (4,3), (1, 1), wx.EXPAND | wx.RIGHT, 15) 
     606 
     607        extrapolation_sizer.Add(params_sizer) 
     608        vbox.Add(extrapolation_sizer, (y, 0), (1, 1), 
    544609            wx.LEFT | wx.RIGHT | wx.EXPAND | wx.ADJUST_MINSIZE, 15) 
     610        y += 1 
    545611 
    546612        # Transform type 
     
    561627 
    562628        transform_sizer.Add(radio_sizer, wx.TOP, 0) 
    563         vbox.Add(transform_sizer, (2, 0), (1, 1), 
     629        vbox.Add(transform_sizer, (y, 0), (1, 1), 
    564630            wx.LEFT | wx.RIGHT | wx.EXPAND | wx.ADJUST_MINSIZE, 15) 
     631        y += 1 
    565632 
    566633        # Output data 
     
    587654        outputbox_sizer.Add(output_sizer, wx.TOP, 0) 
    588655 
    589         vbox.Add(outputbox_sizer, (3, 0), (1, 1), 
     656        vbox.Add(outputbox_sizer, (y, 0), (1, 1), 
    590657            wx.LEFT | wx.RIGHT | wx.EXPAND | wx.ADJUST_MINSIZE, 15) 
     658        y += 1 
    591659 
    592660        # Controls 
     
    615683 
    616684        controlbox_sizer.Add(controls_sizer, wx.TOP | wx.EXPAND, 0) 
    617         vbox.Add(controlbox_sizer, (4, 0), (1, 1), 
     685        vbox.Add(controlbox_sizer, (y, 0), (1, 1), 
    618686            wx.LEFT | wx.RIGHT | wx.EXPAND | wx.ADJUST_MINSIZE, 15) 
    619687 
     
    654722            # Index of first significant digit 
    655723            significant_digit = -int(np.floor(np.log10(np.abs(x)))) 
    656             # Number of digits required for correct number of sig figs 
    657             digits = significant_digit + (sigfigs - 1) 
    658             rounded = np.round(x, decimals=digits) 
    659             rounded_str = "{1:.{0}f}".format(sigfigs -1  + significant_digit, 
    660                 rounded) 
     724 
     725            if np.abs(significant_digit > 4): 
     726                # Use scientific notation if x > 1e5 or x < 1e4 
     727                rounded_str = "{1:.{0}E}".format(sigfigs-1, x) 
     728            else: 
     729                # Format as a standard decimal 
     730                # Number of digits required for correct number of sig figs 
     731                digits = significant_digit + (sigfigs - 1) 
     732                rounded = np.round(x, decimals=digits) 
     733                rounded_str = "{1:.{0}f}".format(sigfigs -1  + significant_digit, 
     734                    rounded) 
    661735        except: 
    662736            # Method for finding significant_digit fails if x is 0 (since log10(0)=inf) 
Note: See TracChangeset for help on using the changeset viewer.