Package reflectometry :: Package model1d :: Package adaptor :: Module reflDatasetDataPanel

Source Code for Module reflectometry.model1d.adaptor.reflDatasetDataPanel

  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   
32 -class ReflDatasetDataPanel(PlotPanelP, FittingDatasetDataPanel):
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 ):
42 super(ReflDatasetDataPanel, self).__init__(parent, id, pos, size) 43 self.Bind(wx.EVT_LEFT_DCLICK, self.OnLeftDClick) 44 self.Bind(wx.EVT_RIGHT_DOWN, self.OnRightDown) 45 self._removeMenu() 46 self.SetXLabel(X_LABEL) 47 self.SetYLabel(Y_LABEL) 48 self.SetTitle(TITLE) 49 self.SetLogScale(True)
50 51
52 - def _beforeContextMenu(self, menu):
53 """ create popup menu for the tree. """ 54 menu.SetTitle(MENU_TITLE) 55 #menu.Append(id=wxID_DATASET_LOAD_XML, text=u'&Load Xml ...') 56 #menu.Append(id=wxID_DATASET_SAVE_XML, text=u'&Save Xml ...') 57 menu.Append(id=wxID_DATASET_CLEAR_XML, text=u'&Clear Dataset') 58 59 #menu.AppendSeparator() 60 menu.Append(id=wxID_DATASET_ADD, text=u'&Add Data ...') 61 #menu.Append(id=wxID_DATASET_REMOVE, text=u'&Remove Data') 62 #menu.Append(id=wxID_DATASET_PREVIOUS, text=u'&Previous Data') 63 #menu.Append(id=wxID_DATASET_NEXT, text=u'&Next Data') 64 65 #menu.AppendSeparator() 66 #menu.Append(id=wxID_DATASET_ORG_VIEW, text=u'&Original View') 67 #menu.Append(id=wxID_DATASET_MATCH_RES, text=u'&Match with Res') 68 #menu.Append(id=wxID_DATASET_MATCH_NORES,text=u'&Match without Res') 69 menu.AppendSeparator()
70 71
72 - def _bindBeforeContextMenu(self):
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
97 - def CanShowContextMenu(self):
98 return self.dataset is not None
99 100
101 - def On_clearXmlMenu(self, event):
102 self.ClearData()
103 104
105 - def On_loadXmlMenu(self, event):
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
123 - def On_saveXmlMenu(self, event):
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
137 - def On_previousMenu(self, event):
138 self.SetPreviousData()
139 140
141 - def On_nextMenu(self, event):
142 self.SetNextData()
143 144
145 - def On_addMenu(self, event):
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
160 - def On_removeMenu(self, event):
161 self.RemoveData()
162 163
164 - def On_orgViewMenu(self, event):
165 self.SetOriginalScale() 166 self.UpdateViewer()
167 168
169 - def On_matchResMenu(self, event):
170 self.SetMatchedScaleErrorbar() 171 self.UpdateViewer()
172 173
174 - def On_matchNoResMenu(self, event):
175 self.SetMatchedScale() 176 self.UpdateViewer()
177 178
179 - def ProcessUpdateUIEvent(self, event):
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
188 - def SetMatchedScaleErrorbar(self):
189 self.dataset.autoMatch(False) 190 self._fireEvent()
191 192
193 - def SetMatchedScale(self):
194 self.dataset.autoMatch(True) 195 self._fireEvent()
196 197
198 - def SetOriginalScale(self):
199 self.dataset.setOriginalScale() 200 self._fireEvent()
201 202 203
204 - def _getDataFileSuffix(self):
205 return "All files (*.*)|*.*|Data files (*.dat)|*.dat|" \ 206 "Text files (*.txt)|*.txt|Refl files (*.refl*)|*.refl*"
207 208
209 - def _getData(self):
210 return ReflData()
211 212
213 - def _getDataset(self):
214 return ReflDataset()
215 216
217 - def _updateViewer(self, showAll=True):
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 #print "ReflDatasetDataPanelP.py ", viewdata 239 240 self.SetLegends(legends) 241 self.SetData(viewdata)
242