1 import wx
2 import numpy
3 import traceback
4
5 from reflectometry.model1d.theoryview.matPanelNCNR import PlotPanelBlackRed as PlotPanelF
6
8
9 - def __init__(self,
10 parent,
11 id=-1,
12 pos=wx.DefaultPosition,
13 size=(200, 150)
14 ):
17
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:
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
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
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
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:
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
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:
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