Package reflectometry :: Package model1d :: Package adaptor :: Module reflDatasetViewerPanel

Source Code for Module reflectometry.model1d.adaptor.reflDatasetViewerPanel

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