1 import os
2 import sys
3 import wx, traceback
4
5 from reflectometry.model1d.theoryview.matChisqPanel 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 ):
49
50
51
53 """ create popup menu for the tree. """
54 menu.SetTitle(MENU_TITLE)
55 menu.Append(help='', id=wxID_DATASET_LOAD_XML, kind=wx.ITEM_NORMAL,
56 text=u'&Load Xml ...')
57 menu.Append(help='', id=wxID_DATASET_SAVE_XML, kind=wx.ITEM_NORMAL,
58 text=u'&Save Xml ...')
59 menu.Append(help='', id=wxID_DATASET_CLEAR_XML, kind=wx.ITEM_NORMAL,
60 text=u'&Clear Dataset')
61
62 menu.AppendSeparator()
63 menu.Append(help='', id=wxID_DATASET_ADD, kind=wx.ITEM_NORMAL,
64 text=u'&Add Data ...')
65 menu.Append(help='', id=wxID_DATASET_REMOVE, kind=wx.ITEM_NORMAL,
66 text=u'&Remove Data')
67 menu.Append(help='', id=wxID_DATASET_PREVIOUS, kind=wx.ITEM_NORMAL,
68 text=u'&Previous Data')
69 menu.Append(help='', id=wxID_DATASET_NEXT, kind=wx.ITEM_NORMAL,
70 text=u'&Next Data')
71
72 menu.AppendSeparator()
73 menu.Append(help='', id=wxID_DATASET_ORG_VIEW, kind=wx.ITEM_NORMAL,
74 text=u'&Original View')
75 menu.Append(help='', id=wxID_DATASET_MATCH_RES, kind=wx.ITEM_NORMAL,
76 text=u'&Match with Res')
77 menu.Append(help='', id=wxID_DATASET_MATCH_NORES,kind=wx.ITEM_NORMAL,
78 text=u'&Match without Res')
79 menu.AppendSeparator()
80
81
83 self.Bind(wx.EVT_MENU, self.On_loadXmlMenu, id=wxID_DATASET_LOAD_XML)
84 self.Bind(wx.EVT_MENU, self.On_saveXmlMenu, id=wxID_DATASET_SAVE_XML)
85 self.Bind(wx.EVT_MENU, self.On_clearXmlMenu, id=wxID_DATASET_CLEAR_XML)
86 self.Bind(wx.EVT_MENU, self.On_addMenu, id=wxID_DATASET_ADD)
87 self.Bind(wx.EVT_MENU, self.On_removeMenu, id=wxID_DATASET_REMOVE)
88 self.Bind(wx.EVT_MENU, self.On_previousMenu, id=wxID_DATASET_PREVIOUS)
89 self.Bind(wx.EVT_MENU, self.On_nextMenu, id=wxID_DATASET_NEXT)
90 self.Bind(wx.EVT_MENU, self.On_orgViewMenu, id=wxID_DATASET_ORG_VIEW)
91 self.Bind(wx.EVT_MENU, self.On_matchResMenu, id=wxID_DATASET_MATCH_RES)
92
93 self.Bind(wx.EVT_UPDATE_UI, self.ProcessUpdateUIEvent,
94 id=wxID_DATASET_REMOVE
95 )
96 self.Bind(wx.EVT_UPDATE_UI, self.ProcessUpdateUIEvent,
97 id=wxID_DATASET_PREVIOUS
98 )
99 self.Bind(wx.EVT_UPDATE_UI, self.ProcessUpdateUIEvent,
100 id=wxID_DATASET_NEXT
101 )
102 self.Bind(wx.EVT_MENU, self.On_matchNoResMenu,
103 id=wxID_DATASET_MATCH_NORES
104 )
105
106
108 return self.dataset is not None
109
110
113
114
116
117 fdiag = wx.FileDialog(self, message="Add dataset from xml file",
118 wildcard = "xml file (*.xml)|*.xml|Any file(*.*)|*.*",
119 style=wx.OPEN)
120
121 fname = ''
122 if (fdiag.ShowModal()==wx.ID_OK):
123 dir0 = fdiag.GetDirectory()
124 fname = fdiag.GetFilename()
125 fdiag.Destroy()
126
127 if fname == '':
128 return
129
130 self.LoadXmlFile(s.path.join(dir0,fname))
131
132
134 fdiag = wx.FileDialog(self, message="Save dataset to xml file",
135 wildcard = "xml file (*.xml)|*.xml|Any file(*.*)|*.*",
136 style=wx.SAVE)
137
138 fname = ''
139 if (fdiag.ShowModal()==wx.ID_OK):
140 dir0 = fdiag.GetDirectory()
141 fname = fdiag.GetFilename()
142 fdiag.Destroy()
143
144 self.SaveXmlFile(os.path.join(dir0,fname))
145
146
148 self.SetPreviousData()
149
150
153
154
156 fdiag = wx.FileDialog(self, message="Add a data file",
157 wildcard = self._getDataFileSuffix(),
158 style=wx.OPEN)
159
160 fname = ''
161 if (fdiag.ShowModal()==wx.ID_OK):
162 dir0 = fdiag.GetDirectory()
163 fname = fdiag.GetFilename()
164 fdiag.Destroy()
165
166 if fname != '':
167 self.AddData(os.path.join(dir0,fname))
168
169
172
173
177
178
182
183
187
188
190 """ Process the Update UI event. """
191 id = event.GetId()
192
193 if id == wxID_DATASET_PREVIOUS: event.Enable(self.HasPreviousData())
194 elif id == wxID_DATASET_NEXT: event.Enable(self.HasNextData())
195 elif id == wxID_DATASET_REMOVE: event.Enable(self.HasValidData())
196
197
199 self.dataset.autoMatch(False)
200 self._fireEvent()
201
202
204 self.dataset.autoMatch(True)
205 self._fireEvent()
206
207
211
212
213
215 return "All files (*.*)|*.*|Data files (*.dat)|*.dat|" \
216 "Text files (*.txt)|*.txt|Refl files (*.refl*)|*.refl*"
217
218
221
222
225
226
228 """ Update the viewer"""
229 viewdata = []
230 legends = []
231
232 for qdata in self.dataset.getXmlData():
233 rd = qdata.getXmlReductionData().getXmlDataArray()
234 viewdata.append(rd[0].getData())
235 viewdata.append(rd[2].getData())
236 if len(rd) == 16:
237 viewdata.append(rd[4].getData())
238 viewdata.append(rd[6].getData())
239 viewdata.append(rd[8].getData())
240 viewdata.append(rd[10].getData())
241 viewdata.append(rd[12].getData())
242 viewdata.append(rd[14].getData())
243
244
245 _legend = os.path.split( qdata.getSource() )[1]
246
247 legends.append( _legend )
248
249
250 self.SetLegends(legends)
251 self.SetData(viewdata)
252