Package reflectometry :: Package model1d :: Package adaptor :: Module matFittingResidual

Source Code for Module reflectometry.model1d.adaptor.matFittingResidual

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