Package reflectometry :: Package model1d :: Package adaptor :: Module matDatasetViewerPanel

Source Code for Module reflectometry.model1d.adaptor.matDatasetViewerPanel

  1  import wx 
  2  import numpy 
  3  import traceback 
  4   
  5  from reflectometry.model1d.theoryview.matPanelNCNR import PlotPanelBlackRed as                                                           PlotPanelF 
  6   
7 -class MatDatasetViewerPanel(PlotPanelF):
8
9 - def __init__(self, 10 parent, 11 id=-1, 12 pos=wx.DefaultPosition, 13 size=(200, 150) 14 ):
15 super(MatDatasetViewerPanel, self).__init__(parent, id, pos, size) 16 self.exp0 = None
17
18 - def _calcChisq(self, 19 data, # ReductiondataList 20 calcR # TheoryData 21 ):
22 23 if calcR == None: return None 24 if data == None: return None 25 if calcR[0].getData() == None: return 26 27 _lenData = len( data )/4 28 if _lenData == 1: # Nonmagnetic case 29 30 try: 31 R = data[2].getData() 32 dR = data[3].getData() 33 except: 34 R = data[2] 35 dR = data[3] 36 37 if dR == None or len(dR)==0: 38 dy = R - calcR[0].getData() 39 else: 40 R0 = numpy.ones(len(dR))*1.0e-10 41 dR = numpy.choose( dR<1.0e-10, (dR,R0) ) 42 dy = (R - calcR[0].getData())/dR 43 44 if len(R) >=1: return numpy.dot(dy,dy)/len(R) 45 else: return numpy.dot(dy,dy) 46 47 else: 48 try: 49 R = [ data[2 ].getData(), data[6 ].getData(), 50 data[10].getData(), data[14].getData() ] 51 dR = [ data[3 ].getData(), data[7 ].getData(), 52 data[11].getData(), data[15].getData() ] 53 except: 54 R = [data[2], data[6], data[10], data[14]] 55 dR = [data[3], data[7], data[11], data[15]] 56 57 _sum = 0.0 58 for i in xrange(4): 59 #if i == 1 or i ==2: continue 60 R0 = numpy.ones(len(dR[i]))*1.0e-10 61 dRi = numpy.choose( dR[i]<1.0e-10, (dR[i],R0) ) 62 dy = (R[i] - calcR[i].getData() )/dRi 63 _sum += numpy.sum(dy*dy) 64 65 return _sum/ ( len(R[0]) + len(R[1]) + len(R[2]) + len(R[3]) )
66 67 68
69 - def SetModel(self, model):
70 71 if model is None: 72 self.Clear() 73 return 74 75 dataset = model.getXmlDataset() 76 if dataset is None or \ 77 dataset.getXmlReductionData() is None: 78 79 self.Clear() 80 return 81 82 #return multiple [Q, R, dR] for refl data 83 expData = dataset.getXmlData() 84 if (len(expData) <1): return 85 86 if model.getXmlTheoryData() is None: 87 theoryData = None 88 else: 89 theoryData = model.getXmlTheoryData().getXmlDataArray() 90 91 viewdata = [] 92 exp0 = expData[0].getXmlReductionData().getDataArrayList() 93 if len(exp0)<1: return 94 95 _lenData = len( exp0 )/4 96 if _lenData == 1: # Nonmagnetic case 97 viewdata.append( exp0[0] ) 98 viewdata.append( exp0[2] ) 99 viewdata.append( exp0[3] ) 100 101 _theory = numpy.zeros( len( exp0[0] ), 'd') 102 if theoryData is None: 103 viewdata.append( _theory ) 104 else: 105 if theoryData[0].getData() == None: 106 viewdata.append( _theory ) 107 else: 108 viewdata.append(theoryData[0].getData() ) 109 110 else: 111 for x in xrange( _lenData ): 112 viewdata.append( exp0[0+x*4] ) 113 viewdata.append( exp0[2+x*4] ) 114 viewdata.append( exp0[3+x*4] ) 115 116 _theory = numpy.zeros( len( exp0[0+x*4] ), 'd') 117 if theoryData is None: 118 viewdata.append( _theory ) 119 else: 120 if theoryData[x].getData() == None: 121 viewdata.append( _theory ) 122 else: 123 _theory = theoryData[x].getData() 124 viewdata.append( _theory ) 125 126 127 self.exp0 = exp0 128 try: 129 chisq = model.getXmlTheoryData().chisq 130 except: 131 chisq = self._calcChisq( self.exp0, theoryData ) 132 133 134 self.SetChisq( chisq ) 135 self.SetData(viewdata)
136 137 138
139 - def RefreshModel(self, model):
140 141 if model is None: 142 self.Clear() 143 return 144 145 if self._data == None: 146 return 147 148 if model.getXmlTheoryData() is None: 149 theoryData = None 150 return 151 else: 152 theoryData = model.getXmlTheoryData().getXmlDataArray() 153 154 _theorydata = [] 155 _lenData = len(theoryData) 156 if _lenData == 1: # Nonmagnetic case 157 _theorydata.append( theoryData[0].getData() ) 158 159 else: 160 for x in xrange( _lenData ): 161 _theorydata.append( theoryData[x].getData() ) 162 163 if self.exp0!= None: 164 try: 165 chisq = model.getXmlTheoryData().chisq 166 except: 167 chisq = self._calcChisq( self.exp0, theoryData ) 168 169 self.SetChisq( chisq ) 170 171 self.RefreshTheoryData(_theorydata)
172