Package reflectometry :: Package model1d :: Package adaptor :: Module matDatasetDataPanel

Source Code for Module reflectometry.model1d.adaptor.matDatasetDataPanel

  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   
32 -class MatDatasetDataPanel(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(MatDatasetDataPanel, 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 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(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
82 - def _bindBeforeContextMenu(self):
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
107 - def CanShowContextMenu(self):
108 return self.dataset is not None
109 110
111 - def On_clearXmlMenu(self, event):
112 self.ClearData()
113 114
115 - def On_loadXmlMenu(self, event):
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
133 - def On_saveXmlMenu(self, event):
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
147 - def On_previousMenu(self, event):
148 self.SetPreviousData()
149 150
151 - def On_nextMenu(self, event):
152 self.SetNextData()
153 154
155 - def On_addMenu(self, event):
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
170 - def On_removeMenu(self, event):
171 self.RemoveData()
172 173
174 - def On_orgViewMenu(self, event):
175 self.SetOriginalScale() 176 self.UpdateViewer()
177 178
179 - def On_matchResMenu(self, event):
180 self.SetMatchedScaleErrorbar() 181 self.UpdateViewer()
182 183
184 - def On_matchNoResMenu(self, event):
185 self.SetMatchedScale() 186 self.UpdateViewer()
187 188
189 - def ProcessUpdateUIEvent(self, event):
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
198 - def SetMatchedScaleErrorbar(self):
199 self.dataset.autoMatch(False) 200 self._fireEvent()
201 202
203 - def SetMatchedScale(self):
204 self.dataset.autoMatch(True) 205 self._fireEvent()
206 207
208 - def SetOriginalScale(self):
209 self.dataset.setOriginalScale() 210 self._fireEvent()
211 212 213
214 - def _getDataFileSuffix(self):
215 return "All files (*.*)|*.*|Data files (*.dat)|*.dat|" \ 216 "Text files (*.txt)|*.txt|Refl files (*.refl*)|*.refl*"
217 218
219 - def _getData(self):
220 return ReflData()
221 222
223 - def _getDataset(self):
224 return ReflDataset()
225 226
227 - def _updateViewer(self, showAll=True):
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 #print "ReflDatasetDataPanelP.py ", viewdata 249 250 self.SetLegends(legends) 251 self.SetData(viewdata)
252