source: sasview/src/sas/sasgui/perspectives/corfunc/corfunc_panel.py @ 3ec4b8f

ESS_GUIESS_GUI_DocsESS_GUI_batch_fittingESS_GUI_bumps_abstractionESS_GUI_iss1116ESS_GUI_iss879ESS_GUI_iss959ESS_GUI_openclESS_GUI_orderingESS_GUI_sync_sascalccostrafo411magnetic_scattrelease-4.1.1release-4.1.2release-4.2.2ticket-1009ticket-1094-headlessticket-1242-2d-resolutionticket-1243ticket-1249ticket885unittest-saveload
Last change on this file since 3ec4b8f was 3ec4b8f, checked in by lewis, 8 years ago

Add some comments

  • Property mode set to 100644
File size: 7.5 KB
Line 
1import wx
2import sys
3from wx.lib.scrolledpanel import ScrolledPanel
4from sas.sasgui.guiframe.panel_base import PanelBase
5from sas.sasgui.perspectives.invariant.invariant_widgets import OutputTextCtrl
6from sas.sasgui.perspectives.invariant.invariant_widgets import InvTextCtrl
7
8if sys.platform.count("win32") > 0:
9    _STATICBOX_WIDTH = 350
10    PANEL_WIDTH = 400
11    PANEL_HEIGHT = 700
12    FONT_VARIANT = 0
13else:
14    _STATICBOX_WIDTH = 390
15    PANEL_WIDTH = 430
16    PANEL_HEIGHT = 700
17    FONT_VARIANT = 1
18
19class CorfuncPanel(ScrolledPanel,PanelBase):
20    window_name = "Correlation Function"
21    window_caption = "Correlation Function"
22    CENTER_PANE = True
23
24    def __init__(self, parent, data=None, manager=None, *args, **kwds):
25        kwds["size"] = (PANEL_WIDTH, PANEL_HEIGHT)
26        kwds["style"] = wx.FULL_REPAINT_ON_RESIZE
27        ScrolledPanel.__init__(self, parent=parent, *args, **kwds)
28        PanelBase.__init__(self, parent)
29        self.SetupScrolling()
30        self.SetWindowVariant(variant=FONT_VARIANT)
31        self._manager = manager
32        self._data = data # The data to be analysed
33        self._data_name_box = None # Text box to show name of file
34        # Dictionary for saving IDs of text boxes used to display output data
35        self._output_ids = None
36        self.state = None
37        self.set_state()
38        self._do_layout()
39
40    def set_state(self, state=None, data=None):
41        # TODO: Implement state restoration
42        return False
43
44    def _set_data(self, data=None):
45        """
46        Update the GUI to reflect new data that has been loaded in
47
48        :param data: The data that has been loaded
49        """
50        self._data_name_box.SetValue(str(data.name))
51        if self._manager is not None:
52            self._manager.show_data(data=data, reset=True)
53        # TODO: Set values of lower and upper q appropriately when data is
54        # loaded in
55
56
57    def _do_layout(self):
58        """
59        Draw the window content
60        """
61        vbox = wx.GridBagSizer(0,0)
62
63        # I(q) data box
64        databox = wx.StaticBox(self, -1, "I(Q) Data Source")
65        databox_sizer = wx.StaticBoxSizer(databox, wx.VERTICAL)
66
67        file_sizer = wx.GridBagSizer(5, 5)
68
69        file_name_label = wx.StaticText(self, -1, "Name:")
70        file_sizer.Add(file_name_label, (0, 0), (1, 1),
71            wx.LEFT | wx.EXPAND | wx.ADJUST_MINSIZE, 15)
72
73        self._data_name_box = OutputTextCtrl(self, -1,
74            size=(300,20))
75        file_sizer.Add(self._data_name_box, (0, 1), (1, 1),
76            wx.CENTER | wx.ADJUST_MINSIZE, 15)
77
78        file_sizer.AddSpacer((1, 25), pos=(0,2))
79        databox_sizer.Add(file_sizer, wx.TOP, 15)
80
81        vbox.Add(databox_sizer, (0, 0), (1, 1),
82            wx.LEFT | wx.RIGHT | wx.EXPAND | wx.ADJUST_MINSIZE | wx.TOP, 15)
83
84
85        # Parameters
86        qbox = wx.StaticBox(self, -1, "Parameters")
87        qbox_sizer = wx.StaticBoxSizer(qbox, wx.VERTICAL)
88        qbox_sizer.SetMinSize((_STATICBOX_WIDTH, 75))
89
90        q_sizer = wx.GridBagSizer(5, 5)
91
92        # Explanation
93        explanation_txt = ("Corfunc will use all values in the lower range for"
94            " Guinier back extrapolation, and all values in the upper range "
95            "for Porod forward extrapolation.")
96        explanation_label = wx.StaticText(self, -1, explanation_txt,
97            size=(_STATICBOX_WIDTH, 60))
98
99        q_sizer.Add(explanation_label, (0,0), (1,4), wx.LEFT | wx.EXPAND, 5)
100
101        qrange_label = wx.StaticText(self, -1, "Q Range:", size=(50,20))
102        q_sizer.Add(qrange_label, (1,0), (1,1), wx.LEFT | wx.EXPAND, 5)
103
104        # Lower Q Range
105        qmin_label = wx.StaticText(self, -1, "Lower:", size=(50,20))
106        qmin_dash_label = wx.StaticText(self, -1, "-", size=(10,20),
107            style=wx.ALIGN_CENTER_HORIZONTAL)
108
109        qmin_lower = OutputTextCtrl(self, -1, size=(50, 20), value="0.0")
110        qmin_input = InvTextCtrl(self, -1, size=(50, 20),
111                        style=wx.TE_PROCESS_ENTER, name='qmin_input')
112        qmin_input.SetToolTipString(("Values with q < qmin will be used for "
113            "Guinier back extrapolation"))
114
115        q_sizer.Add(qmin_label, (2, 0), (1, 1), wx.LEFT | wx.EXPAND, 5)
116        q_sizer.Add(qmin_lower, (2, 1), (1, 1), wx.LEFT, 5)
117        q_sizer.Add(qmin_dash_label, (2, 2), (1, 1), wx.CENTER | wx.EXPAND, 5)
118        q_sizer.Add(qmin_input, (2, 3), (1, 1), wx.LEFT, 5)
119
120        # Upper Q range
121        qmax_tooltip = ("Values with qmax1 < q < qmax2 will be used for Porod"
122            " forward extrapolation")
123
124        qmax_label = wx.StaticText(self, -1, "Upper:", size=(50,20))
125        qmax_dash_label = wx.StaticText(self, -1, "-", size=(10,20),
126            style=wx.ALIGN_CENTER_HORIZONTAL)
127
128        qmax1_input = InvTextCtrl(self, -1, size=(50, 20),
129            style=wx.TE_PROCESS_ENTER, name="qmax1_input")
130        qmax1_input.SetToolTipString(qmax_tooltip)
131        qmax2_input = InvTextCtrl(self, -1, size=(50, 20),
132            style=wx.TE_PROCESS_ENTER, name="qmax2_input")
133        qmax2_input.SetToolTipString(qmax_tooltip)
134
135        q_sizer.Add(qmax_label, (3, 0), (1, 1), wx.LEFT | wx.EXPAND, 5)
136        q_sizer.Add(qmax1_input, (3, 1), (1, 1), wx.LEFT, 5)
137        q_sizer.Add(qmax_dash_label, (3, 2), (1, 1), wx.CENTER | wx.EXPAND, 5)
138        q_sizer.Add(qmax2_input, (3,3), (1, 1), wx.LEFT, 5)
139
140        qbox_sizer.Add(q_sizer, wx.TOP, 0)
141
142        vbox.Add(qbox_sizer, (1, 0), (1, 1),
143            wx.LEFT | wx.RIGHT | wx.EXPAND | wx.ADJUST_MINSIZE, 15)
144
145        # Output data
146        outputbox = wx.StaticBox(self, -1, "Output Measuments")
147        outputbox_sizer = wx.StaticBoxSizer(outputbox, wx.VERTICAL)
148
149        output_sizer = wx.GridBagSizer(5, 5)
150
151        label_strings = [
152            "Long Period (A): ",
153            "Average Hard Block Thickness (A): ",
154            "Average Interface Thickness (A): ",
155            "Average Core Thickness: ",
156            "PolyDispersity: ",
157            "Filling Fraction: "
158        ]
159        self._output_ids = dict()
160        for i in range(len(label_strings)):
161            # Create a label and a text box for each poperty
162            label = wx.StaticText(self, -1, label_strings[i])
163            output_box = OutputTextCtrl(self, wx.NewId(), size=(50, 20),
164                value="-", style=wx.ALIGN_CENTER_HORIZONTAL)
165            # Save the ID of each of the text boxes for accessing after the
166            # output data has been calculated
167            self._output_ids[label_strings[i]] = output_box.GetId()
168            output_sizer.Add(label, (i, 0), (1, 1), wx.LEFT | wx.EXPAND, 15)
169            output_sizer.Add(output_box, (i, 2), (1, 1),
170                wx.RIGHT | wx.EXPAND, 15)
171
172        outputbox_sizer.Add(output_sizer, wx.TOP, 0)
173
174        vbox.Add(outputbox_sizer, (2, 0), (1, 1),
175            wx.LEFT | wx.RIGHT | wx.EXPAND | wx.ADJUST_MINSIZE, 15)
176
177        # Controls
178        controlbox = wx.StaticBox(self, -1, "Controls")
179        controlbox_sizer = wx.StaticBoxSizer(controlbox, wx.VERTICAL)
180
181        controls_sizer = wx.BoxSizer(wx.VERTICAL)
182
183        extrapolate_btn = wx.Button(self, wx.NewId(), "Extrapolate")
184        transform_btn = wx.Button(self, wx.NewId(), "Transform")
185        compute_btn = wx.Button(self, wx.NewId(), "Compute Measuments")
186
187        controls_sizer.Add(extrapolate_btn, wx.CENTER | wx.EXPAND)
188        controls_sizer.Add(transform_btn, wx.CENTER | wx.EXPAND)
189        controls_sizer.Add(compute_btn, wx.CENTER | wx.EXPAND)
190
191        controlbox_sizer.Add(controls_sizer, wx.TOP | wx.EXPAND, 0)
192        vbox.Add(controlbox_sizer, (3, 0), (1, 1),
193            wx.LEFT | wx.RIGHT | wx.EXPAND | wx.ADJUST_MINSIZE, 15)
194
195        self.SetSizer(vbox)
Note: See TracBrowser for help on using the repository browser.