Package reflectometry :: Package model1d :: Package adaptor :: Module reflFittingResidual

Source Code for Module reflectometry.model1d.adaptor.reflFittingResidual

  1  import os 
  2  import wx 
  3  import wx.aui 
  4  import numpy 
  5   
  6  from park.parkAui.common.fittingResidual   import FittingResidual 
  7  from park.parkAui.common.auiPanel          import AuiPanel 
  8  from reflectometry.model1d.theoryview.plotResidualPanel import PlotPanelR as \ 
  9                                                                 PlotPanelR2 
 10   
 11   
 12  RESIDUAL_X_LABEL = 'x value' 
 13  RESIDUAL_Y_LABEL = 'Residual' 
 14  RESIDUAL_TITLE   = 'Residual' 
 15   
16 -def getFileName(fullfilename):
17 """ Return the filename from the fullfilename. """ 18 return os.path.split(fullfilename)[1]
19 20
21 -class ReflFittingResidual(FittingResidual):
22 """ The base class for the fitting residual. """
23 - def __init__(self, 24 parent, 25 id=-1, 26 pos=wx.DefaultPosition, 27 size=(400, 300) 28 ):
29 super(ReflFittingResidual, self).__init__(parent,id,pos=pos,size=size) 30 self.model = None 31 self._updateFlag = False
32 33
34 - def _IsUpdateOnModel(self):
35 return self._updateFlag
36 37
38 - def _setUpdateFlag(self, show=False):
39 self._updateFlag = show
40 41
42 - def Update4Dataset(self):
43 """ Update the view when the dataset is changed. """ 44 print 'update residual for dataset @ fittingResidual' 45 self.Enable(self.model is not None) 46 47 if self.model is None: 48 self.Clear() 49 return 50 dataset = self.model.getXmlDataset() 51 if dataset is None: 52 self.Clear() 53 return 54 55 self.panel.SetResidualIndex(dataset.getResidualIndex()) 56 self.panel.SetExperimentData( 57 self.model.getXmlDataset().getXmlReductionData())
58 59
60 - def Update4Model(self):
61 """ Update the view when the model is changed. """ 62 print 'update residual for model @ fittingResidual' 63 self.Enable(self.model is not None) 64 65 if self.model is None: 66 self.Clear() 67 return 68 69 self.panel.SetTheoryData( 70 self.model.getXmlTheoryData() )
71
72 - def RefreshViewer(self): #FZW
73 """ Update the the residual panel. """ 74 self.RefreshModelView()
75 76
77 - def RefreshModelView(self): #FZW
78 """ Update the view when the dataset and model are changed. """ 79 self.Enable(self.model is not None) 80 81 if self.model is None: 82 self.Clear() 83 return 84 85 dataset = self.model.getXmlDataset() 86 if dataset is None: 87 self.Clear() 88 return 89 90 legends = [] 91 for qdata in dataset.getXmlData(): 92 legends.append(getFileName(qdata.getSource())) 93 94 95 viewdata = [] 96 expData = dataset.getXmlReductionData() 97 if expData == None: 98 return 99 100 if self.model.getXmlTheoryData() is None: 101 theoryData = None 102 else: 103 theoryData = self.model.getXmlTheoryData().getXmlDataArray() 104 105 106 exp0 = expData.getDataArrayList() 107 _lenData = len( exp0 )/4 108 if _lenData == 1: # Nonmagnetic case 109 viewdata.append( exp0[0] ) 110 viewdata.append( exp0[2] ) 111 viewdata.append( exp0[3] ) 112 113 if theoryData is None: 114 viewdata.append( numpy.ones( len( exp0[0] ), 'd') ) 115 else: 116 if theoryData[0].getData() == None: 117 viewdata.append( numpy.ones( len( exp0[0] ), 'd') ) 118 else: 119 viewdata.append( theoryData[0].getData() ) 120 else: 121 for x in xrange( _lenData ): 122 viewdata.append( exp0[0+x*4] ) 123 viewdata.append( exp0[2+x*4] ) 124 viewdata.append( exp0[3+x*4] ) 125 126 if theoryData is None: 127 viewdata.append( numpy.zeros( len( exp0[0+x*4] ), 'd') ) 128 else: 129 if theoryData[x].getData() == None: 130 viewdata.append( numpy.zeros( len( exp0[0+x*4] ), 'd') ) 131 else: 132 viewdata.append( theoryData[x].getData() ) 133 134 135 if legends != []: 136 self.panel.SetLegends(legends) 137 138 self.panel.SetData(viewdata) 139 140 141
142 - def UpdateModelView(self):
143 """ Update the view when the dataset and model are changed. """ 144 self.Enable(self.model is not None) 145 146 if self.model is None: 147 self.Clear() 148 return 149 150 dataset = self.model.getXmlDataset() 151 if dataset is None: 152 self.Clear() 153 return 154 155 legends = [] 156 for qdata in dataset.getXmlData(): 157 legends.append(getFileName(qdata.getSource())) 158 159 160 viewdata = [] 161 expData = dataset.getXmlReductionData() 162 if expData == None: 163 return 164 165 if self.model.getXmlTheoryData() is None: 166 theoryData = None 167 else: 168 theoryData = self.model.getXmlTheoryData().getXmlDataArray() 169 170 171 exp0 = expData.getDataArrayList() 172 _lenData = len( exp0 )/4 173 if _lenData == 1: # Nonmagnetic case 174 viewdata.append( exp0[0] ) 175 viewdata.append( exp0[2] ) 176 viewdata.append( exp0[3] ) 177 178 if theoryData is None: 179 viewdata.append( numpy.ones( len( exp0[0] ), 'd') ) 180 else: 181 if theoryData[0].getData() == None: 182 viewdata.append( numpy.ones( len( exp0[0] ), 'd') ) 183 else: 184 viewdata.append( theoryData[0].getData() ) 185 else: 186 for x in xrange( _lenData ): 187 viewdata.append( exp0[0+x*4] ) 188 viewdata.append( exp0[2+x*4] ) 189 viewdata.append( exp0[3+x*4] ) 190 191 if theoryData is None: 192 viewdata.append( numpy.zeros( len( exp0[0+x*4] ), 'd') ) 193 else: 194 if theoryData[x].getData() == None: 195 viewdata.append( numpy.zeros(len( exp0[0+x*4] ), 'd') ) 196 else: 197 viewdata.append( theoryData[x].getData() ) 198 199 200 if legends != []: 201 #self.panel.SetEnableLegend(True) 202 self.panel.SetLegends(legends) 203 204 self.panel.SetData(viewdata)
205 206 207
208 - def _getResidualPanel(self):
209 """ Return the residual viewer. """ 210 panel = PlotPanelR2(self) 211 panel.SetXLabel(RESIDUAL_X_LABEL) 212 panel.SetYLabel(RESIDUAL_Y_LABEL) 213 panel.SetTitle(RESIDUAL_TITLE) 214 return panel
215