1 import os
2 import sys
3 import wx, traceback
4
5 from reflectometry.model1d.theoryview.plotChisqPanel import PlotPanelP
6 from park.parkAui.common.fittingDatasetDataPanel import FittingDatasetDataPanel
7 from park.parkAui.common.parkEvent import wxEVT_PARK_DATASET, EVT_PARK_DATASET
8 from reflData import ReflData
9 from reflDataset import ReflDataset
10
11
12 TITLE = 'Reflectometry Data'
13 X_LABEL = 'Q value'
14 Y_LABEL = 'Reflectivity'
15 MENU_TITLE = u'Dataset management'
16
17 [
18 wxID_DATASET_LOAD_XML,
19 wxID_DATASET_SAVE_XML,
20 wxID_DATASET_CLEAR_XML,
21 wxID_DATASET_ADD,
22 wxID_DATASET_REMOVE,
23 wxID_DATASET_PREVIOUS,
24 wxID_DATASET_NEXT,
25 wxID_DATASET_ORG_VIEW,
26 wxID_DATASET_MATCH_RES,
27 wxID_DATASET_MATCH_NORES,
28 ] = [wx.NewId() for i in range(10)]
29
30
31
33 """
34 A panel to view the data.
35 """
36 - def __init__(self,
37 parent,
38 id=-1,
39 pos = wx.DefaultPosition,
40 size = (200, 150)
41 ):
50
51
53 """ create popup menu for the tree. """
54 menu.SetTitle(MENU_TITLE)
55
56
57 menu.Append(id=wxID_DATASET_CLEAR_XML, text=u'&Clear Dataset')
58
59
60 menu.Append(id=wxID_DATASET_ADD, text=u'&Add Data ...')
61
62
63
64
65
66
67
68
69 menu.AppendSeparator()
70
71
73 self.Bind(wx.EVT_MENU, self.On_loadXmlMenu, id=wxID_DATASET_LOAD_XML)
74 self.Bind(wx.EVT_MENU, self.On_saveXmlMenu, id=wxID_DATASET_SAVE_XML)
75 self.Bind(wx.EVT_MENU, self.On_clearXmlMenu, id=wxID_DATASET_CLEAR_XML)
76 self.Bind(wx.EVT_MENU, self.On_addMenu, id=wxID_DATASET_ADD)
77 self.Bind(wx.EVT_MENU, self.On_removeMenu, id=wxID_DATASET_REMOVE)
78 self.Bind(wx.EVT_MENU, self.On_previousMenu, id=wxID_DATASET_PREVIOUS)
79 self.Bind(wx.EVT_MENU, self.On_nextMenu, id=wxID_DATASET_NEXT)
80 self.Bind(wx.EVT_MENU, self.On_orgViewMenu, id=wxID_DATASET_ORG_VIEW)
81 self.Bind(wx.EVT_MENU, self.On_matchResMenu, id=wxID_DATASET_MATCH_RES)
82
83 self.Bind(wx.EVT_UPDATE_UI, self.ProcessUpdateUIEvent,
84 id=wxID_DATASET_REMOVE
85 )
86 self.Bind(wx.EVT_UPDATE_UI, self.ProcessUpdateUIEvent,
87 id=wxID_DATASET_PREVIOUS
88 )
89 self.Bind(wx.EVT_UPDATE_UI, self.ProcessUpdateUIEvent,
90 id=wxID_DATASET_NEXT
91 )
92 self.Bind(wx.EVT_MENU, self.On_matchNoResMenu,
93 id=wxID_DATASET_MATCH_NORES
94 )
95
96
98 return self.dataset is not None
99
100
103
104
106
107 fdiag = wx.FileDialog(self, message="Add dataset from xml file",
108 wildcard = "xml file (*.xml)|*.xml|Any file(*.*)|*.*",
109 style=wx.OPEN)
110
111 fname = ''
112 if (fdiag.ShowModal()==wx.ID_OK):
113 dir0 = fdiag.GetDirectory()
114 fname = fdiag.GetFilename()
115 fdiag.Destroy()
116
117 if fname == '':
118 return
119
120 self.LoadXmlFile(s.path.join(dir0,fname))
121
122
124 fdiag = wx.FileDialog(self, message="Save dataset to xml file",
125 wildcard = "xml file (*.xml)|*.xml|Any file(*.*)|*.*",
126 style=wx.SAVE)
127
128 fname = ''
129 if (fdiag.ShowModal()==wx.ID_OK):
130 dir0 = fdiag.GetDirectory()
131 fname = fdiag.GetFilename()
132 fdiag.Destroy()
133
134 self.SaveXmlFile(os.path.join(dir0,fname))
135
136
138 self.SetPreviousData()
139
140
143
144
146 fdiag = wx.FileDialog(self, message="Add a data file",
147 wildcard = self._getDataFileSuffix(),
148 style=wx.OPEN)
149
150 fname = ''
151 if (fdiag.ShowModal()==wx.ID_OK):
152 dir0 = fdiag.GetDirectory()
153 fname = fdiag.GetFilename()
154 fdiag.Destroy()
155
156 if fname != '':
157 self.AddData(os.path.join(dir0,fname))
158
159
162
163
167
168
172
173
177
178
180 """ Process the Update UI event. """
181 id = event.GetId()
182
183 if id == wxID_DATASET_PREVIOUS: event.Enable(self.HasPreviousData())
184 elif id == wxID_DATASET_NEXT: event.Enable(self.HasNextData())
185 elif id == wxID_DATASET_REMOVE: event.Enable(self.HasValidData())
186
187
189 self.dataset.autoMatch(False)
190 self._fireEvent()
191
192
194 self.dataset.autoMatch(True)
195 self._fireEvent()
196
197
201
202
203
205 return "All files (*.*)|*.*|Data files (*.dat)|*.dat|" \
206 "Text files (*.txt)|*.txt|Refl files (*.refl*)|*.refl*"
207
208
211
212
215
216
218 """ Update the viewer"""
219 viewdata = []
220 legends = []
221
222 for qdata in self.dataset.getXmlData():
223 rd = qdata.getXmlReductionData().getXmlDataArray()
224 viewdata.append(rd[0].getData())
225 viewdata.append(rd[2].getData())
226 if len(rd) == 16:
227 viewdata.append(rd[4].getData())
228 viewdata.append(rd[6].getData())
229 viewdata.append(rd[8].getData())
230 viewdata.append(rd[10].getData())
231 viewdata.append(rd[12].getData())
232 viewdata.append(rd[14].getData())
233
234
235 _legend = os.path.split( qdata.getSource() )[1]
236
237 legends.append( _legend )
238
239
240 self.SetLegends(legends)
241 self.SetData(viewdata)
242