Changeset 5145
- Timestamp:
- Jan 17, 2022 5:29:52 PM (21 months ago)
- Location:
- trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/GSASIImapvars.py
r5142 r5145 2382 2382 if name not in varyList: continue # skip if independent var not varied 2383 2383 if multarr is None: 2384 if debug: print ('start dMdv for',name,dMdv[varyList.index(name)]) 2384 2385 for v,m in zip(varlist,invmultarr): 2385 if debug: print ('start dMdv',dMdv[varyList.index(name)]) 2386 if debug: print ('add derv',v,'/',m[0],'to derv',name,'add=',derivDict[v] / m[0]) 2386 if m[0] == 0: continue 2387 dMdv[varyList.index(name)] += derivDict[v]/ m[0] 2388 else: 2389 for v,m in zip(varlist,invmultarr[:,i]): 2387 2390 if m == 0: continue 2388 dMdv[varyList.index(name)] += derivDict[v] / m[0]2389 else:2390 for v,m in zip(varlist,multarr[i,:]):2391 if debug: print ('start dMdv',dMdv[varyList.index(name)])2392 if debug: print ('add derv',v,'*',m,'to derv',name,'add=',m * derivDict[v])2393 if m == 0 or name not in varyList: continue2394 2391 dMdv[varyList.index(name)] += m * derivDict[v] 2395 2392 -
trunk/testDeriv.py
r5114 r5145 24 24 import os 25 25 import platform 26 import copy 26 27 if '2' in platform.python_version_tuple()[0]: 27 28 import cPickle … … 45 46 46 47 try: 47 wx.NewId48 NewId = wx.NewIdRef 48 49 except AttributeError: 49 wx.NewId = wx.NewIdRef 50 51 def create(parent): 52 return testDeriv(parent) 53 50 NewId = wx.NewId 54 51 [wxID_FILEEXIT, wxID_FILEOPEN, wxID_MAKEPLOTS, wxID_CLEARSEL,wxID_SELECTALL, 55 ] = [ wx.NewId() for _init_coll_File_Items in range(5)]52 ] = [NewId() for _init_coll_File_Items in range(5)] 56 53 57 54 def FileDlgFixExt(dlg,file): #this is needed to fix a problem in linux wx.FileDialog … … 68 65 self.testDerivMenu = wx.MenuBar() 69 66 self.File = wx.Menu(title='') 70 self.File.Append(wxID_FILEOPEN,'Open testDeriv file ','Open testDeriv')71 self.File.Append(wxID_MAKEPLOTS,'Make plots ','Make derivative plots')72 self.File.Append(wxID_SELECTALL,'Select all ')73 self.File.Append(wxID_CLEARSEL,'Clear selections ')74 self.File.Append(wxID_FILEEXIT,'Exit ','Exit from testDeriv')67 self.File.Append(wxID_FILEOPEN,'Open testDeriv file\tCtrl+O','Open testDeriv') 68 self.File.Append(wxID_MAKEPLOTS,'Make plots\tCtrl+P','Make derivative plots') 69 self.File.Append(wxID_SELECTALL,'Select all\tCtrl+S') 70 self.File.Append(wxID_CLEARSEL,'Clear selections\tCtrl+C') 71 self.File.Append(wxID_FILEEXIT,'Exit\tALT+F4','Exit from testDeriv') 75 72 self.Bind(wx.EVT_MENU,self.OnTestRead, id=wxID_FILEOPEN) 76 73 self.Bind(wx.EVT_MENU,self.OnMakePlots,id=wxID_MAKEPLOTS) … … 80 77 self.testDerivMenu.Append(menu=self.File, title='File') 81 78 self.SetMenuBar(self.testDerivMenu) 82 self.testDerivPanel = wx.ScrolledWindow(self) 79 self.testDerivPanel = wx.ScrolledWindow(self) 83 80 self.plotNB = plot.PlotNotebook() 84 81 self.testFile = '' … … 98 95 self.testfile = [] 99 96 self.dataFrame = None 97 self.timingOn = False 100 98 101 99 def ExitMain(self, event): … … 149 147 self.delt[iname] = 0.1 150 148 file.close() 149 G2mv.InitVars() 151 150 msg = G2mv.EvaluateMultipliers(self.constrDict,self.parmDict) 152 151 if msg: … … 156 155 print(G2mv.VarRemapShow(self.varylist)) 157 156 print('Dependent Vary List:',self.depVarList) 158 157 G2mv.Map2Dict(self.parmDict,copy.copy(self.varylist)) # compute independent params, N.B. changes varylist 158 G2mv.Dict2Map(self.parmDict) # imposes constraints on dependent values 159 159 160 def UpdateControls(self,event): 160 161 161 def OnItemCk(event): 162 162 Obj = event.GetEventObject() … … 175 175 Obj.SetValue('%g'%(value)) 176 176 177 self.testDerivPanel.DestroyChildren() 177 if self.testDerivPanel.GetSizer(): 178 self.testDerivPanel.GetSizer().Clear(True) 178 179 ObjInd = {} 179 names = self.names180 180 use = self.use 181 181 delt = self.delt 182 topSizer = wx.BoxSizer(wx.VERTICAL) 183 self.timingVal = wx.CheckBox(self.testDerivPanel,label='Show Execution Profiling') 184 topSizer.Add(self.timingVal,0) 185 topSizer.Add((-1,10)) 182 186 mainSizer = wx.FlexGridSizer(0,8,5,5) 183 for id,[ck,name,d] in enumerate(zip(use, names,delt)):187 for id,[ck,name,d] in enumerate(zip(use,self.names,delt)): 184 188 useVal = wx.CheckBox(self.testDerivPanel,label=name) 185 189 useVal.SetValue(ck) … … 192 196 delVal.Bind(wx.EVT_KILL_FOCUS,OnDelValue) 193 197 mainSizer.Add(delVal,0) 194 self.testDerivPanel.SetSizer(mainSizer) 195 Size = mainSizer.GetMinSize() 196 self.testDerivPanel.SetScrollbars(10,10,Size[0]/10-4,Size[1]/10-1) 198 topSizer.Add(mainSizer,0) 199 self.testDerivPanel.SetSizer(topSizer) 200 Size = topSizer.GetMinSize() 201 self.testDerivPanel.SetScrollbars(10,10,int(Size[0]/10-4),int(Size[1]/10-1)) 197 202 Size[1] = min(200,Size[1]) 198 self.testDerivPanel.SetSize(Size) 203 Size[0] += 20 204 self.SetSize(Size) 199 205 200 206 def OnMakePlots(self,event): … … 202 208 def test1(): 203 209 fplot = self.plotNB.add('function test').gca() 204 pr = cProfile.Profile() 205 pr.enable() 210 if self.timingOn: 211 pr = cProfile.Profile() 212 pr.enable() 206 213 M = G2stMth.errRefine(self.values,self.HistoPhases, 207 214 self.parmDict,self.varylist,self.calcControls, 208 215 self.pawleyLookup,None) 209 pr.disable() 210 s = StringIO.StringIO() 211 sortby = 'tottime' 212 ps = pstats.Stats(pr, stream=s).strip_dirs().sort_stats(sortby) 213 print('Profiler of function calculation; top 50% of routines:') 214 ps.print_stats("GSASII",.5) 215 print(s.getvalue()) 216 if self.timingOn: 217 pr.disable() 218 s = StringIO.StringIO() 219 sortby = 'tottime' 220 ps = pstats.Stats(pr, stream=s).strip_dirs().sort_stats(sortby) 221 print('Profiler of function calculation; top 50% of routines:') 222 ps.print_stats("GSASII",.5) 223 print(s.getvalue()) 216 224 fplot.plot(M,'r',label='M') 217 225 fplot.legend(loc='best') … … 219 227 def test2(name,delt,doProfile): 220 228 Title = 'derivatives test for '+name 221 names = self.names229 ind = self.names.index(name) 222 230 hplot = self.plotNB.add(Title).gca() 223 if doProfile :231 if doProfile and self.timingOn: 224 232 pr = cProfile.Profile() 225 233 pr.enable() … … 229 237 self.pawleyLookup,None) 230 238 dMdV = G2stMth.dervRefine(self.values,self.HistoPhases,self.parmDict, 231 names,self.calcControls,self.pawleyLookup,None)232 if doProfile :239 self.names,self.calcControls,self.pawleyLookup,None) 240 if doProfile and self.timingOn: 233 241 pr.disable() 234 242 s = StringIO.StringIO() … … 238 246 print('Profiler of '+name+' derivative calculation; top 50% of routines:') 239 247 print(s.getvalue()) 240 M2 = dMdV[ names.index(name)]248 M2 = dMdV[ind] 241 249 hplot.plot(M2,'b',label='analytic deriv') 242 mmin = np.min(dMdV[ names.index(name)])243 mmax = np.max(dMdV[ names.index(name)])250 mmin = np.min(dMdV[ind]) 251 mmax = np.max(dMdV[ind]) 244 252 if name in self.varylist: 245 self.values[self.varylist.index(name)] -= delt 253 ind = self.varylist.index(name) 254 orig = copy.copy(self.parmDict) # save parmDict before changes 255 self.parmDict[name] = self.values[ind] = self.values[ind] - delt 256 G2mv.Dict2Map(self.parmDict) 257 first = True 258 for i in self.parmDict: 259 if orig[i] != self.parmDict[i] and i != name: 260 if first: 261 print('Propogated changes from this shift') 262 print(name,orig[name],self.parmDict[name],orig[name]-self.parmDict[name]) 263 print('are:') 264 first = False 265 print(i,orig[i],self.parmDict[i],orig[i]-self.parmDict[i]) 246 266 M0 = G2stMth.errRefine(self.values,self.HistoPhases,self.parmDict, 247 names,self.calcControls,self.pawleyLookup,None) 248 self.values[self.varylist.index(name)] += 2.*delt 267 self.names,self.calcControls,self.pawleyLookup,None) 268 self.parmDict[name] = self.values[ind] = self.values[ind] + 2.*delt 269 G2mv.Dict2Map(self.parmDict) 249 270 M1 = G2stMth.errRefine(self.values,self.HistoPhases,self.parmDict, 250 names,self.calcControls,self.pawleyLookup,None) 251 self.values[self.varylist.index(name)] -= delt 271 self.names,self.calcControls,self.pawleyLookup,None) 272 self.parmDict[name] = self.values[ind] = self.values[ind] - delt 273 G2mv.Dict2Map(self.parmDict) 252 274 elif name in self.depVarList: #in depVarList 253 275 if 'dA' in name: 254 276 name = name.replace('dA','A') 255 delt *= -1277 #delt *= -1 # why??? 256 278 self.parmDict[name] -= delt 279 G2mv.Dict2Map(self.parmDict) 257 280 M0 = G2stMth.errRefine(self.values,self.HistoPhases,self.parmDict, 258 names,self.calcControls,self.pawleyLookup,None)281 self.names,self.calcControls,self.pawleyLookup,None) 259 282 self.parmDict[name] += 2.*delt 283 G2mv.Dict2Map(self.parmDict) 260 284 M1 = G2stMth.errRefine(self.values,self.HistoPhases,self.parmDict, 261 names,self.calcControls,self.pawleyLookup,None)285 self.names,self.calcControls,self.pawleyLookup,None) 262 286 self.parmDict[name] -= delt 287 G2mv.Dict2Map(self.parmDict) 263 288 Mn = (M1-M0)/(2.*abs(delt)) 264 289 print('parameter:',name,self.parmDict[name],delt,mmin,mmax,np.sum(M0),np.sum(M1),np.sum(Mn)) … … 270 295 271 296 test1() 297 self.timingOn = self.timingVal.GetValue() 272 298 273 299 doProfile = True 274 for use,name,delt in zip(self.use,self. varylist+self.depVarList,self.delt):300 for use,name,delt in zip(self.use,self.names,self.delt): 275 301 if use: 276 302 test2(name,delt,doProfile) … … 279 305 self.plotNB.Show() 280 306 281 class testDerivmain(wx.App):282 def OnInit(self):283 self.main = testDeriv(None)284 self.main.Show()285 self.SetTopWindow(self.main)286 return True287 288 307 def main(): 289 308 'Starts main application to compute and plot derivatives' 290 application = testDerivmain(0) 309 application = wx.App(0) 310 application.main = testDeriv(None) 311 application.main.Show() 312 application.SetTopWindow(application.main) 291 313 application.MainLoop() 292 314
Note: See TracChangeset
for help on using the changeset viewer.