1 import os
2 import sys
3 import traceback
4 import wx
5
6 from reflectometry.model1d.profileview.plotReflPanel import ReflPanel
7 from reflectometry.model1d.profileview.plotInfoPanel import InfoPanel
8 from reflectometry.model1d.profileview.reflutils import decodeP
9 from reflectometry.model1d.model.bspline import BSpline
10 from reflectometry.model1d.model.tetheredPolymer import TetheredPolymer
11
12 from park.parkAui.common.fittingModelBuilder import FittingModelBuilder
13 from park.parkAui.common.parkEvent import MODEL_UPDATE, MODEL_ADD,MODEL_REMOVE,\
14 PARAMETER_SHOW, ParkParameterEvent, \
15 wxEVT_PARK_PARAMETER
16 from park import THEORY_TAG
17 from xmlProfile import XmlProfile, PROFILE_TAG
18
19 THEORY_NAME = 'reflectometry.model1d.adaptor.reflTheory.ReflTheory'
20
21
22
24
27
28
31
34
37
38
39 - def __init__(self,
40 parent,
41 id=-1,
42 pos = wx.DefaultPosition,
43 size = wx.DefaultSize,
44 style = wx.TAB_TRAVERSAL
45 ):
46 super(ReflModelBuilder, self).__init__(parent, id=id, pos=pos,
47 size=size, style=style)
48 self.parent = parent
49
50 self.modelPanel = ReflPanel(self)
51 self.infopanel = InfoPanel(self)
52 self._modelName = None
53 self._modelTitle = None
54
55 sizer = wx.BoxSizer( wx.VERTICAL )
56 sizer.Add(self.modelPanel, 1, border=1, flag=wx.LEFT|wx.TOP|wx.GROW )
57 self.SetSizer(sizer)
58
59
66
67
74
75
77 return self._modelName
78
79
81 self.modelPanel._setModel( )
82
83
85 if hasattr(self.model, 'title'):
86 return self.model.title
87
88 if self._modelTitle != None:
89 return self._modelTitle
90
91 if self._modelName != None:
92 return self._modelName
93
94
96 self._modelTitle = title
97 self.model.title = title
98
99
102
103
106
107
108
111
112
115
116
118
119 changed = False
120 if Pname == "depth":
121 if pm.depth != val:
122 pm.depth = val; changed = True
123 elif Pname == "rough":
124 if pm.rough != val:
125 pm.rough = val; changed = True
126 elif Pname == "rho":
127 if pm.rho != val:
128 pm.rho = val; changed = True
129 elif Pname == "mu":
130 if pm.mu != val:
131 pm.mu = val; changed = True
132 elif Pname == "phi":
133 if pm.phi != val:
134 pm.phi = val; changed = True
135 elif Pname == "theta":
136 if pm.theta != val:
137 pm.theta = val; changed = True
138 else:
139 pass
140
141 return changed
142
143
144
146
147 changed = True
148 if Pname == "rho":
149 _pm = decodeP(pm.rho)
150 try:
151 _pm._valList[idx] = val
152 pm.rho = _pm.build()
153 except:
154 pass
155
156 elif Pname == "mu":
157 _pm = decodeP( pm.mu )
158 _pm._valList[idx] = val
159 pm.mu = _pm.build()
160
161 elif Pname == "phi":
162 _pm = decodeP( pm.phi )
163 _pm._valList[idx] = val
164 pm.phi = _pm.build()
165
166 elif Pname == "theta":
167 _pm = decodeP( pm.theta )
168 _pm._valList[idx] = val
169 pm.theta = _pm.build()
170
171 else: changed = False
172
173 return changed
174
175
176
178 pm = self._getReflParameter(Lname)
179
180 _pars = Pname.split('_')
181 if len(_pars) == 1:
182 return self._updateScalarValue( pm, Pname, val)
183 else:
184 _tname=['polymerSLD', 'solventSLD', 'L0', 'phi0', 'power']
185 if _pars[-1].strip() in _tname:
186 for i in xrange(5):
187 if _pars[-1].strip() == _tname[i]:
188 idx = i
189 else:
190 idx = int( _pars[-1].strip() )
191
192 return self._updateFactoryValue(pm,
193 _pars[0],
194 idx,
195 val
196 )
197
198
200 return self.model.getChild( Lname )
201
202
204 try:
205 layerRho = self.modelPanel.model.Lrho
206 return [layerRho[0]._val, layerRho[-1]._val]
207 except:
208 return [-1, -1]
209
210
229
230
232
233 ( Lname, Pname ) = names
234
235 if self._updateParValue( Lname, Pname, Val ):
236
237
238 self._refreshProfile2Model()
239
240 names.insert(0, self.model.name)
241
242
243 self._fireParameterEvent( names, Val)
244
245
247 """ fire an event to show the specific attributes of the model"""
248 names.insert(0, self.model.name)
249 evt = ParkParameterEvent(wxEVT_PARK_PARAMETER ,
250 self.GetId(),
251 None,
252 names,
253 None,
254 self.model,
255 PARAMETER_SHOW
256 )
257 self.GetEventHandler().ProcessEvent(evt)
258
259
261 self._fireModelEvent(MODEL_UPDATE)
262