Changeset 443
- Timestamp:
- Dec 16, 2011 1:15:09 PM (11 years ago)
- Location:
- trunk
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/GSASII.py
r441 r443 730 730 if scale: 731 731 Comments.append("%10.3f %s" % (scale,' * '+name)) 732 x,y,w,yc,yb,yd = data 732 x,y,w,yc,yb,yd = data #numpy arrays! 733 733 v = 1./w 734 734 if lenX: … … 771 771 if Id: 772 772 Sample = G2pdG.SetDefaultSample() 773 self.PatternTree.SetItemPyData(Id,[[''],[Xsum,Ysum,Wsum,YCsum,YBsum,YDsum]]) 773 self.PatternTree.SetItemPyData(Id,[[''],[np.array(Xsum),np.array(Ysum),np.array(Wsum), 774 np.array(YCsum),np.array(YBsum),np.array(YDsum)]]) 774 775 self.PatternTree.SetItemPyData(self.PatternTree.AppendItem(Id,text='Comments'),Comments) 775 776 self.PatternTree.SetItemPyData(self.PatternTree.AppendItem(Id,text='Limits'),[tuple(Xminmax),Xminmax]) -
trunk/GSASIIgrid.py
r438 r443 1648 1648 self.PickId = item 1649 1649 data = self.PatternTree.GetItemPyData(item) 1650 G2pdG.UpdateBackground Grid(self,data)1650 G2pdG.UpdateBackground(self,data) 1651 1651 G2plt.PlotPatterns(self) 1652 1652 elif self.PatternTree.GetItemText(item) == 'Limits': -
trunk/GSASIIphsGUI.py
r440 r443 2207 2207 try: 2208 2208 size = float(Obj.GetValue()) 2209 if pid < 3 and size <= 0.0 1: #10A lower limit!2209 if pid < 3 and size <= 0.001: #10A lower limit! 2210 2210 raise ValueError 2211 2211 UseList[hist]['Size'][4][pid] = size … … 2216 2216 try: 2217 2217 size = float(Obj.GetValue()) 2218 if size <= 0.0 1: #10A lower limit!2218 if size <= 0.001: #10A lower limit! 2219 2219 raise ValueError 2220 2220 UseList[hist]['Size'][1][pid] = size -
trunk/GSASIIpwd.py
r432 r443 647 647 bakInt = si.interp1d(bakPos,bakVals,'linear') 648 648 yb = bakInt(xdata) 649 iD = 0 650 try: 651 wave = parmDict[pfx+'Lam'] 652 except KeyError: 653 wave = parmDict[pfx+'Lam1'] 654 q = 4.0*np.pi*npsind(xdata/2.0)/wave 655 SQ = (q/(4*np.pi))**2 656 FF = G2elem.GetFormFactorCoeff('Si')[0] 657 ff = np.array(G2elem.ScatFac(FF,SQ)[0])**2 658 while True: 659 try: 660 dbA = parmDict[pfx+'DebyeA:'+str(iD)] 661 dbR = parmDict[pfx+'DebyeR:'+str(iD)] 662 dbU = parmDict[pfx+'DebyeU:'+str(iD)] 663 yb += ff*dbA*np.sin(q*dbR)*np.exp(-dbU*q**2)/(q*dbR) 664 iD += 1 665 except KeyError: 666 break 649 667 return yb 650 668 … … 658 676 break 659 677 dydb = np.zeros(shape=(nBak,len(xdata))) 678 dyddb = np.zeros(shape=(3*parmDict[pfx+'nDebye'],len(xdata))) 660 679 661 680 if bakType in ['chebyschev','cosine']: … … 692 711 np.where(xdata<bakPos[i+1],(bakPos[i+1]-xdata)/(bakPos[i+1]-bakPos[i]),0.), 693 712 np.where(xdata>bakPos[i-1],(xdata-bakPos[i-1])/(bakPos[i]-bakPos[i-1]),0.)) 694 return dydb 713 iD = 0 714 try: 715 wave = parmDict[pfx+'Lam'] 716 except KeyError: 717 wave = parmDict[pfx+'Lam1'] 718 q = 4.0*np.pi*npsind(xdata/2.0)/wave 719 SQ = (q/(4*np.pi))**2 720 FF = G2elem.GetFormFactorCoeff('Si')[0] 721 ff = np.array(G2elem.ScatFac(FF,SQ)[0]) 722 while True: 723 try: 724 dbA = parmDict[pfx+'DebyeA:'+str(iD)] 725 dbR = parmDict[pfx+'DebyeR:'+str(iD)] 726 dbU = parmDict[pfx+'DebyeU:'+str(iD)] 727 sqr = np.sin(q*dbR)/(q*dbR) 728 cqr = np.cos(q*dbR) 729 temp = np.exp(-dbU*q**2) 730 dyddb[3*iD] = ff*sqr*temp 731 dyddb[3*iD+1] = ff*dbA*temp*(cqr-sqr)/dbR 732 dyddb[3*iD+2] = -ff*dbA*sqr*temp*q**2 733 iD += 1 734 except KeyError: 735 break 736 return dydb,dyddb 695 737 696 738 #use old fortran routine … … 790 832 # needs to return np.array([dMdx1,dMdx2,...]) in same order as varylist = backVary,insVary,peakVary order 791 833 dMdv = np.zeros(shape=(len(varyList),len(xdata))) 834 dMdb,dMddb = getBackgroundDerv('',parmDict,bakType,xdata) 792 835 if 'Back:0' in varyList: #background derivs are in front if present 793 dMdb = getBackgroundDerv('',parmDict,bakType,xdata)794 836 dMdv[0:len(dMdb)] = dMdb 795 837 names = ['DebyeA','DebyeR','DebyeU'] 838 for name in varyList: 839 if 'Debye' in name: 840 ih,parm,id = name.split(':') 841 ip = names.index(parm) 842 dMdv[varyList.index(name)] = dMddb[3*int(id)+ip] 796 843 dx = xdata[1]-xdata[0] 797 844 U = parmDict['U'] … … 901 948 902 949 def SetBackgroundParms(Background): 903 bakType,bakFlag = Background[:2] 904 backVals = Background[3:] 950 if len(Background) == 1: # fix up old backgrounds 951 BackGround.append({'nDebye':0,'debyeTerms':[]}) 952 bakType,bakFlag = Background[0][:2] 953 backVals = Background[0][3:] 905 954 backNames = ['Back:'+str(i) for i in range(len(backVals))] 906 if bakFlag: #returns backNames as varyList = backNames 907 return bakType,dict(zip(backNames,backVals)),backNames 908 else: #no background varied; varyList = [] 909 return bakType,dict(zip(backNames,backVals)),[] 955 Debye = Background[1] 956 backDict = dict(zip(backNames,backVals)) 957 backVary = [] 958 if bakFlag: 959 backVary = backNames 960 backDict['nDebye'] = Debye['nDebye'] 961 debyeDict = {} 962 debyeList = [] 963 for i in range(Debye['nDebye']): 964 debyeNames = ['DebyeA:'+str(i),'DebyeR:'+str(i),'DebyeU:'+str(i)] 965 debyeDict.update(dict(zip(debyeNames,Debye['debyeTerms'][i][::2]))) 966 debyeList += zip(debyeNames,Debye['debyeTerms'][i][1::2]) 967 debyeVary = [] 968 for item in debyeList: 969 if item[1]: 970 debyeVary.append(item[0]) 971 backDict.update(debyeDict) 972 backVary += debyeVary 973 return bakType,backDict,backVary 910 974 911 975 def GetBackgroundParms(parmList,Background): … … 914 978 try: 915 979 bakName = 'Back:'+str(iBak) 916 Background[ iBak+3] = parmList[bakName]980 Background[0][iBak+3] = parmList[bakName] 917 981 iBak += 1 982 except KeyError: 983 break 984 iDb = 0 985 while True: 986 names = ['DebyeA:','DebyeR:','DebyeU:'] 987 try: 988 for i,name in enumerate(names): 989 val = parmList[name+str(iDb)] 990 Background[1]['debyeTerms'][iDb][2*i] = val 991 iDb += 1 918 992 except KeyError: 919 993 break 920 994 921 995 def BackgroundPrint(Background,sigDict): 922 if Background[ 1]:923 print 'Background coefficients for',Background[0] ,'function'996 if Background[0][1]: 997 print 'Background coefficients for',Background[0][0],'function' 924 998 ptfmt = "%12.5f" 925 999 ptstr = 'values:' 926 1000 sigstr = 'esds :' 927 for i,back in enumerate(Background[ 3:]):1001 for i,back in enumerate(Background[0][3:]): 928 1002 ptstr += ptfmt % (back) 929 1003 sigstr += ptfmt % (sigDict['Back:'+str(i)]) … … 932 1006 else: 933 1007 print 'Background not refined' 934 1008 if Background[1]['nDebye']: 1009 parms = ['DebyeA','DebyeR','DebyeU'] 1010 print 'Debye diffuse scattering coefficients' 1011 ptfmt = "%12.5f" 1012 names = 'names :' 1013 ptstr = 'values:' 1014 sigstr = 'esds :' 1015 for item in sigDict: 1016 if 'Debye' in item: 1017 names += '%12s'%(item) 1018 sigstr += ptfmt%(sigDict[item]) 1019 parm,id = item.split(':') 1020 ip = parms.index(parm) 1021 ptstr += ptfmt%(Background[1]['debyeTerms'][int(id)][2*ip]) 1022 print names 1023 print ptstr 1024 print sigstr 1025 935 1026 def SetInstParms(Inst): 936 1027 insVals,insFlags,insNames = Inst[1:4] -
trunk/GSASIIpwdGUI.py
r440 r443 68 68 if self.dataDisplay.GetName() == item: 69 69 if item == 'Background': 70 UpdateBackground Grid(self,self.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(self,PatternId, item)))70 UpdateBackground(self,self.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(self,PatternId, item))) 71 71 elif item == 'Instrument Parameters': 72 72 UpdateInstrumentGrid(self,self.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(self,PatternId, item))) … … 113 113 self.ErrorDialog('No peaks!','Nothing to fit!') 114 114 return 115 background = self.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(self,PatternId, 'Background')) [0]115 background = self.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(self,PatternId, 'Background')) 116 116 limits = self.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(self,PatternId, 'Limits'))[1] 117 117 inst = self.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(self,PatternId, 'Instrument Parameters')) … … 256 256 self.dataFrame.setSizePosLeft([535,350]) 257 257 258 def UpdateBackgroundGrid(self,data): 258 def UpdateBackground(self,data): 259 if len(data) < 2: #add Debye diffuse scattering here 260 data.append({'nDebye':0,'debyeTerms':[]}) 259 261 ValObj = {} 260 261 def OnNewType(event): 262 data[0][0] = bakType.GetValue() 263 264 def OnBakRef(event): 265 data[0][1] = bakRef.GetValue() 266 267 def OnBakTerms(event): 268 data[0][2] = int(bakTerms.GetValue()) 269 M = len(data[0]) 270 N = data[0][2]+3 271 item = data[0] 272 if N > M: #add terms 273 for i in range(M,N): 274 item.append(0.0) 275 elif N < M: #delete terms 276 for i in range(N,M): 277 del(item[-1]) 278 self.PatternTree.SetItemPyData(BackId,data) 279 UpdateBackgroundGrid(self,data) 280 281 def OnBakVal(event): 282 Obj = event.GetEventObject() 283 item = ValObj[Obj.GetId()][0] 284 try: 285 value = float(Obj.GetValue()) 286 except ValueError: 287 value = data[0][item] 288 data[0][item] = value 289 Obj.SetValue('%10.4f'%(value)) 290 262 291 263 def OnBackCopy(event): 292 264 histList = ['All',]+G2gd.GetPatternTreeDataNames(self,['PWDR',]) … … 309 281 dlg.Destroy() 310 282 311 283 def BackSizer(): 284 285 def OnNewType(event): 286 data[0][0] = bakType.GetValue() 287 288 def OnBakRef(event): 289 data[0][1] = bakRef.GetValue() 290 291 def OnBakTerms(event): 292 data[0][2] = int(bakTerms.GetValue()) 293 M = len(data[0]) 294 N = data[0][2]+3 295 item = data[0] 296 if N > M: #add terms 297 for i in range(M,N): 298 item.append(0.0) 299 elif N < M: #delete terms 300 for i in range(N,M): 301 del(item[-1]) 302 self.PatternTree.SetItemPyData(BackId,data) 303 UpdateBackground(self,data) 304 305 def OnBakVal(event): 306 Obj = event.GetEventObject() 307 item = ValObj[Obj.GetId()][0] 308 try: 309 value = float(Obj.GetValue()) 310 except ValueError: 311 value = data[0][item] 312 data[0][item] = value 313 Obj.SetValue('%10.4f'%(value)) 314 315 backSizer = wx.BoxSizer(wx.VERTICAL) 316 topSizer = wx.BoxSizer(wx.HORIZONTAL) 317 topSizer.Add(wx.StaticText(self.dataDisplay,-1,' Background function: '),0,wx.ALIGN_CENTER_VERTICAL) 318 bakType = wx.ComboBox(self.dataDisplay,value=data[0][0], 319 choices=Choices,style=wx.CB_READONLY|wx.CB_DROPDOWN) 320 bakType.Bind(wx.EVT_COMBOBOX, OnNewType) 321 topSizer.Add(bakType) 322 topSizer.Add((5,0),0) 323 bakRef = wx.CheckBox(self.dataDisplay,label=' Refine?') 324 bakRef.SetValue(bool(data[0][1])) 325 bakRef.Bind(wx.EVT_CHECKBOX, OnBakRef) 326 topSizer.Add(bakRef,0,wx.ALIGN_CENTER_VERTICAL) 327 topSizer.Add(wx.StaticText(self.dataDisplay,-1,' No. coeff.: '),0,wx.ALIGN_CENTER_VERTICAL) 328 bakTerms = wx.ComboBox(self.dataDisplay,-1,value=str(data[0][2]),choices=[str(i+1) for i in range(36)], 329 style=wx.CB_READONLY|wx.CB_DROPDOWN) 330 bakTerms.Bind(wx.EVT_COMBOBOX,OnBakTerms) 331 topSizer.Add(bakTerms,0,wx.ALIGN_CENTER_VERTICAL) 332 topSizer.Add((5,0),0) 333 backSizer.Add(topSizer) 334 backSizer.Add(wx.StaticText(self.dataDisplay,-1,' Background coefficients:'),0,wx.ALIGN_CENTER_VERTICAL) 335 bakSizer = wx.FlexGridSizer(1,5,5,5) 336 for i,value in enumerate(data[0][3:]): 337 bakVal = wx.TextCtrl(self.dataDisplay,wx.ID_ANY,'%10.4f'%(value),style=wx.TE_PROCESS_ENTER) 338 bakSizer.Add(bakVal,0,wx.ALIGN_CENTER_VERTICAL) 339 ValObj[bakVal.GetId()] = [i+3] 340 bakVal.Bind(wx.EVT_TEXT_ENTER,OnBakVal) 341 bakVal.Bind(wx.EVT_KILL_FOCUS,OnBakVal) 342 backSizer.Add(bakSizer) 343 return backSizer 344 345 def DebyeSizer(): 346 347 def OnDebTerms(event): 348 data[1]['nDebye'] = int(debTerms.GetValue()) 349 M = len(data[1]['debyeTerms']) 350 N = data[1]['nDebye'] 351 if N > M: #add terms 352 for i in range(M,N): 353 data[1]['debyeTerms'].append([1.0,False,1.0,False,0.010,False]) 354 elif N < M: #delete terms 355 for i in range(N,M): 356 del(data[1]['debyeTerms'][-1]) 357 UpdateBackground(self,data) 358 359 def KeyEditPeakGrid(event): 360 colList = debyeGrid.GetSelectedCols() 361 if event.GetKeyCode() == wx.WXK_RETURN: 362 event.Skip(True) 363 elif event.GetKeyCode() == wx.WXK_CONTROL: 364 event.Skip(True) 365 elif event.GetKeyCode() == wx.WXK_SHIFT: 366 event.Skip(True) 367 elif colList: 368 debyeGrid.ClearSelection() 369 key = event.GetKeyCode() 370 for col in colList: 371 if debyeTable.GetTypeName(0,col) == wg.GRID_VALUE_BOOL: 372 if key == 89: #'Y' 373 for row in range(debyeGrid.GetNumberRows()): data[1]['debyeTerms'][row][col]=True 374 elif key == 78: #'N' 375 for row in range(debyeGrid.GetNumberRows()): data[1]['debyeTerms'][row][col]=False 376 377 debSizer = wx.BoxSizer(wx.VERTICAL) 378 topSizer = wx.BoxSizer(wx.HORIZONTAL) 379 topSizer.Add(wx.StaticText(self.dataDisplay,-1,' Debye scattering: '),0,wx.ALIGN_CENTER_VERTICAL) 380 topSizer.Add(wx.StaticText(self.dataDisplay,-1,' No. coeff.: '),0,wx.ALIGN_CENTER_VERTICAL) 381 debTerms = wx.ComboBox(self.dataDisplay,-1,value=str(data[1]['nDebye']),choices=[str(i) for i in range(12)], 382 style=wx.CB_READONLY|wx.CB_DROPDOWN) 383 debTerms.Bind(wx.EVT_COMBOBOX,OnDebTerms) 384 topSizer.Add(debTerms,0,wx.ALIGN_CENTER_VERTICAL) 385 topSizer.Add((5,0),0) 386 debSizer.Add(topSizer) 387 if data[1]['nDebye']: 388 debSizer.Add(wx.StaticText(self.dataDisplay,-1,' Debye diffuse terms:'),0,wx.ALIGN_CENTER_VERTICAL) 389 rowLabels = [] 390 for i in range(len(data[1]['debyeTerms'])): rowLabels.append(str(i)) 391 colLabels = ['A','refine','R','refine','U','refine'] 392 Types = [wg.GRID_VALUE_FLOAT+':10,2',wg.GRID_VALUE_BOOL, 393 wg.GRID_VALUE_FLOAT+':10,3',wg.GRID_VALUE_BOOL, 394 wg.GRID_VALUE_FLOAT+':10,5',wg.GRID_VALUE_BOOL] 395 debyeTable = G2gd.Table(data[1]['debyeTerms'],rowLabels=rowLabels,colLabels=colLabels,types=Types) 396 debyeGrid = G2gd.GSGrid(parent=self.dataDisplay) 397 debyeGrid.SetTable(debyeTable, True) 398 debyeGrid.Bind(wx.EVT_KEY_DOWN, KeyEditPeakGrid) 399 debyeGrid.AutoSizeColumns(False) 400 debSizer.Add(debyeGrid) 401 return debSizer 402 312 403 if self.dataDisplay: 313 404 self.dataFrame.Clear() … … 321 412 Choices = ['chebyschev','cosine','lin interpolate','inv interpolate','log interpolate'] 322 413 mainSizer = wx.BoxSizer(wx.VERTICAL) 323 topSizer = wx.BoxSizer(wx.HORIZONTAL) 324 topSizer.Add(wx.StaticText(self.dataDisplay,-1,' Background function: '),0,wx.ALIGN_CENTER_VERTICAL) 325 bakType = wx.ComboBox(self.dataDisplay,value=data[0][0], 326 choices=Choices,style=wx.CB_READONLY|wx.CB_DROPDOWN) 327 bakType.Bind(wx.EVT_COMBOBOX, OnNewType) 328 topSizer.Add(bakType) 329 topSizer.Add((5,0),0) 330 bakRef = wx.CheckBox(self.dataDisplay,label=' Refine?') 331 bakRef.SetValue(bool(data[0][1])) 332 bakRef.Bind(wx.EVT_CHECKBOX, OnBakRef) 333 topSizer.Add(bakRef,0,wx.ALIGN_CENTER_VERTICAL) 334 topSizer.Add(wx.StaticText(self.dataDisplay,-1,' No. coeff.: '),0,wx.ALIGN_CENTER_VERTICAL) 335 bakTerms = wx.ComboBox(self.dataDisplay,-1,value=str(data[0][2]),choices=[str(i+1) for i in range(36)], 336 style=wx.CB_READONLY|wx.CB_DROPDOWN) 337 bakTerms.Bind(wx.EVT_COMBOBOX,OnBakTerms) 338 topSizer.Add(bakTerms,0,wx.ALIGN_CENTER_VERTICAL) 339 topSizer.Add((5,0),0) 340 mainSizer.Add(topSizer) 341 mainSizer.Add(wx.StaticText(self.dataDisplay,-1,' Background coefficients:'),0,wx.ALIGN_CENTER_VERTICAL) 342 bakSizer = wx.FlexGridSizer(1,5,5,5) 343 for i,value in enumerate(data[0][3:]): 344 bakVal = wx.TextCtrl(self.dataDisplay,wx.ID_ANY,'%10.4f'%(value),style=wx.TE_PROCESS_ENTER) 345 bakSizer.Add(bakVal,0,wx.ALIGN_CENTER_VERTICAL) 346 ValObj[bakVal.GetId()] = [i+3] 347 bakVal.Bind(wx.EVT_TEXT_ENTER,OnBakVal) 348 bakVal.Bind(wx.EVT_KILL_FOCUS,OnBakVal) 349 mainSizer.Add(bakSizer) 414 mainSizer.Add(BackSizer()) 415 mainSizer.Add((0,5),0) 416 mainSizer.Add(DebyeSizer()) 350 417 mainSizer.Layout() 351 418 self.dataDisplay.SetSizer(mainSizer) -
trunk/GSASIIstruct.py
r441 r443 1259 1259 hapData[item][1][0] = parmDict[pfx+item+':i'] 1260 1260 if item == 'Size': 1261 hapData[item][1][0] = min(10.,max(0.0 1,hapData[item][1][0]))1261 hapData[item][1][0] = min(10.,max(0.001,hapData[item][1][0])) 1262 1262 if pfx+item+':i' in sigDict: 1263 1263 SizeMuStrSig[item][0][0] = sigDict[pfx+item+':i'] … … 1265 1265 hapData[item][1][1] = parmDict[pfx+item+':a'] 1266 1266 if item == 'Size': 1267 hapData[item][1][1] = min(10.,max(0.0 1,hapData[item][1][1]))1267 hapData[item][1][1] = min(10.,max(0.001,hapData[item][1][1])) 1268 1268 if pfx+item+':a' in sigDict: 1269 1269 SizeMuStrSig[item][0][1] = sigDict[pfx+item+':a'] … … 1287 1287 1288 1288 def GetBackgroundParms(hId,Background): 1289 bakType,bakFlag = Background[:2] 1290 backVals = Background[3:] 1289 Back = Background[0] 1290 Debye = Background[1] 1291 bakType,bakFlag = Back[:2] 1292 backVals = Back[3:] 1291 1293 backNames = [':'+str(hId)+':Back:'+str(i) for i in range(len(backVals))] 1292 if bakFlag: #returns backNames as varyList = backNames 1293 return bakType,dict(zip(backNames,backVals)),backNames 1294 else: #no background varied; varyList = [] 1295 return bakType,dict(zip(backNames,backVals)),[] 1294 backDict = dict(zip(backNames,backVals)) 1295 backVary = [] 1296 if bakFlag: 1297 backVary = backNames 1298 backDict[':'+str(hId)+':nDebye'] = Debye['nDebye'] 1299 debyeDict = {} 1300 debyeList = [] 1301 for i in range(Debye['nDebye']): 1302 debyeNames = [':'+str(hId)+':DebyeA:'+str(i),':'+str(hId)+':DebyeR:'+str(i),':'+str(hId)+':DebyeU:'+str(i)] 1303 debyeDict.update(dict(zip(debyeNames,Debye['debyeTerms'][i][::2]))) 1304 debyeList += zip(debyeNames,Debye['debyeTerms'][i][1::2]) 1305 debyeVary = [] 1306 for item in debyeList: 1307 if item[1]: 1308 debyeVary.append(item[0]) 1309 backDict.update(debyeDict) 1310 backVary += debyeVary 1311 return bakType,backDict,backVary 1296 1312 1297 1313 def GetInstParms(hId,Inst): … … 1306 1322 if flag: 1307 1323 insVary.append(insName) 1308 instDict[pfx+'X'] = max(instDict[pfx+'X'],0.0 1)1309 instDict[pfx+'Y'] = max(instDict[pfx+'Y'],0.0 1)1324 instDict[pfx+'X'] = max(instDict[pfx+'X'],0.001) 1325 instDict[pfx+'Y'] = max(instDict[pfx+'Y'],0.001) 1310 1326 instDict[pfx+'SH/L'] = max(instDict[pfx+'SH/L'],0.0005) 1311 1327 return dataType,instDict,insVary … … 1330 1346 1331 1347 def PrintBackground(Background): 1332 print '\n Background function: ',Background[0],' Refine?',bool(Background[1]) 1348 Back = Background[0] 1349 Debye = Background[1] 1350 print '\n Background function: ',Back[0],' Refine?',bool(Back[1]) 1333 1351 line = ' Coefficients: ' 1334 for i,back in enumerate(Back ground[3:]):1352 for i,back in enumerate(Back[3:]): 1335 1353 line += '%10.3f'%(back) 1336 1354 if i and not i%10: 1337 1355 line += '\n'+15*' ' 1338 print line 1356 print line 1357 if Debye['nDebye']: 1358 print '\n Debye diffuse scattering coefficients' 1359 parms = ['DebyeA','DebyeR','DebyeU'] 1360 line = ' names :' 1361 for parm in parms: 1362 line += '%16s'%(parm) 1363 print line 1364 for j,term in enumerate(Debye['debyeTerms']): 1365 line = ' term'+'%2d'%(j)+':' 1366 for i in range(3): 1367 line += '%10.4f %5s'%(term[2*i],bool(term[2*i+1])) 1368 print line 1339 1369 1340 1370 def PrintInstParms(Inst): … … 1388 1418 controlDict[pfx+'Limits'] = Histogram['Limits'][1] 1389 1419 1390 Background = Histogram['Background'] [0]1420 Background = Histogram['Background'] 1391 1421 Type,bakDict,bakVary = GetBackgroundParms(hId,Background) 1392 1422 controlDict[pfx+'bakType'] = Type … … 1427 1457 1428 1458 def SetBackgroundParms(pfx,Background,parmDict,sigDict): 1429 lenBack = len(Background[3:]) 1430 backSig = [0 for i in range(lenBack)] 1459 Back = Background[0] 1460 Debye = Background[1] 1461 lenBack = len(Back[3:]) 1462 backSig = [0 for i in range(lenBack+3*Debye['nDebye'])] 1431 1463 for i in range(lenBack): 1432 Back ground[3+i] = parmDict[pfx+'Back:'+str(i)]1464 Back[3+i] = parmDict[pfx+'Back:'+str(i)] 1433 1465 if pfx+'Back:'+str(i) in sigDict: 1434 1466 backSig[i] = sigDict[pfx+'Back:'+str(i)] 1467 if Debye['nDebye']: 1468 for i in range(Debye['nDebye']): 1469 names = [pfx+'DebyeA:'+str(i),pfx+'DebyeR:'+str(i),pfx+'DebyeU:'+str(i)] 1470 for j,name in enumerate(names): 1471 Debye['debyeTerms'][i][2*j] = parmDict[name] 1472 if name in sigDict: 1473 backSig[lenBack+3*i+j] = sigDict[name] 1435 1474 return backSig 1436 1475 … … 1461 1500 1462 1501 def PrintBackgroundSig(Background,backSig): 1463 print '\n Background function: ',Background[0] 1502 Back = Background[0] 1503 Debye = Background[1] 1504 lenBack = len(Back[3:]) 1505 print '\n Background function: ',Back[0] 1464 1506 valstr = ' value : ' 1465 1507 sigstr = ' sig : ' 1466 for i,back in enumerate(Back ground[3:]):1508 for i,back in enumerate(Back[3:]): 1467 1509 valstr += '%10.4f'%(back) 1468 if Back ground[1]:1510 if Back[1]: 1469 1511 sigstr += '%10.4f'%(backSig[i]) 1470 1512 else: … … 1472 1514 print valstr 1473 1515 print sigstr 1516 if Debye['nDebye']: 1517 ifAny = False 1518 ptfmt = "%12.5f" 1519 names = ' names :' 1520 ptstr = ' values:' 1521 sigstr = ' esds :' 1522 for item in sigDict: 1523 if 'Debye' in item: 1524 ifAny = True 1525 names += '%12s'%(item) 1526 ptstr += ptfmt%(parmDict[item]) 1527 sigstr += ptfmt%(sigDict[item]) 1528 if ifAny: 1529 print '\n Debye diffuse scattering coefficients' 1530 print names 1531 print ptstr 1532 print sigstr 1474 1533 1475 1534 def PrintInstParmsSig(Inst,instSig): … … 1522 1581 hId = Histogram['hId'] 1523 1582 pfx = ':'+str(hId)+':' 1524 Background = Histogram['Background'] [0]1583 Background = Histogram['Background'] 1525 1584 backSig = SetBackgroundParms(pfx,Background,parmDict,sigDict) 1526 1585 … … 1956 2015 #microstrain derivatives 1957 2016 if calcControls[phfx+'MustrainType'] == 'isotropic': 1958 gamDict[phfx+'Mustrain: 0'] = 0.018*tanth/np.pi2017 gamDict[phfx+'Mustrain:i'] = 0.018*tanth/np.pi 1959 2018 elif calcControls[phfx+'MustrainType'] == 'uniaxial': 1960 2019 H = np.array(refl[:3]) 1961 2020 P = np.array(calcControls[phfx+'MustrainAxis']) 1962 2021 cosP,sinP = G2lat.CosSinAngle(H,P,G) 1963 Si = parmDict[phfx+'Mustrain: 0']1964 Sa = parmDict[phfx+'Mustrain: 1']2022 Si = parmDict[phfx+'Mustrain:i'] 2023 Sa = parmDict[phfx+'Mustrain:a'] 1965 2024 gami = 0.018*Si*Sa*tanth/np.pi 1966 2025 sqtrm = np.sqrt((Si*cosP)**2+(Sa*sinP)**2) 1967 2026 gam = gami/sqtrm 1968 gamDict[phfx+'Mustrain: 0'] = gam/Si-gami*Si*cosP**2/sqtrm**31969 gamDict[phfx+'Mustrain: 1'] = gam/Sa-gami*Sa*sinP**2/sqtrm**32027 gamDict[phfx+'Mustrain:i'] = gam/Si-gami*Si*cosP**2/sqtrm**3 2028 gamDict[phfx+'Mustrain:a'] = gam/Sa-gami*Sa*sinP**2/sqtrm**3 1970 2029 else: #generalized - P.W. Stephens model 1971 2030 pwrs = calcControls[phfx+'MuPwrs'] … … 2267 2326 bakType = calcControls[hfx+'bakType'] 2268 2327 dMdv = np.zeros(shape=(len(varylist),len(x))) 2328 dMdb,dMddb = G2pwd.getBackgroundDerv(hfx,parmDict,bakType,x) 2269 2329 if hfx+'Back:0' in varylist: # for now assume that Back:x vars to not appear in constraints 2270 dMdb = G2pwd.getBackgroundDerv(hfx,parmDict,bakType,x)2271 2330 bBpos =varylist.index(hfx+'Back:0') 2272 2331 dMdv[bBpos:bBpos+len(dMdb)] = dMdb 2273 2332 names = [hfx+'DebyeA',hfx+'DebyeR',hfx+'DebyeU'] 2333 for name in varylist: 2334 if 'Debye' in name: 2335 id = int(name.split(':')[-1]) 2336 parm = name[:int(name.rindex(':'))] 2337 ip = names.index(parm) 2338 dMdv[varylist.index(name)] = dMddb[3*id+ip] 2274 2339 if 'C' in calcControls[hfx+'histType']: 2275 2340 dx = x[1]-x[0] … … 2416 2481 G2mv.Dict2Map(parmdict,varylist) 2417 2482 Histograms,Phases = HistoPhases 2483 nvar = len(varylist) 2418 2484 dMdv = np.empty(0) 2419 2485 for histogram in Histograms: … … 2585 2651 sigDict = dict(zip(varyList,sig)) 2586 2652 newCellDict = GetNewCellParms(parmDict,varyList) 2587 print newCellDict2588 2653 newAtomDict = ApplyXYZshifts(parmDict,varyList) 2589 2654 covData = {'variables':result[0],'varyList':varyList,'sig':sig,
Note: See TracChangeset
for help on using the changeset viewer.