Changeset 1496
- Timestamp:
- Sep 14, 2014 7:48:39 PM (8 years ago)
- Location:
- trunk
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/GSASIIgrid.py
r1481 r1496 117 117 118 118 [ wxID_UNDO,wxID_LSQPEAKFIT,wxID_LSQONECYCLE,wxID_RESETSIGGAM,wxID_CLEARPEAKS,wxID_AUTOSEARCH, 119 ] = [wx.NewId() for item in range(6)] 119 wxID_PEAKSCOPY, wxID_SEQPEAKFIT, 120 ] = [wx.NewId() for item in range(8)] 120 121 121 122 [ wxID_INDXRELOAD, wxID_INDEXPEAKS, wxID_REFINECELL, wxID_COPYCELL, wxID_MAKENEWPHASE, … … 2920 2921 self.AutoSearch = self.PeakEdit.Append(help='Automatic peak search', 2921 2922 id=wxID_AUTOSEARCH, kind=wx.ITEM_NORMAL,text='Auto search') 2923 self.PeakCopy = self.PeakEdit.Append(help='Copy peaks to other histograms', 2924 id=wxID_PEAKSCOPY, kind=wx.ITEM_NORMAL,text='Peak copy') 2922 2925 self.UnDo = self.PeakEdit.Append(help='Undo last least squares refinement', 2923 2926 id=wxID_UNDO, kind=wx.ITEM_NORMAL,text='UnDo') 2924 self.PeakFit = self.PeakEdit.Append(id=wxID_LSQPEAKFIT, kind=wx.ITEM_NORMAL,text='LSQ PeakFit', 2925 help='Peak fitting via least-squares' ) 2926 self.PFOneCycle = self.PeakEdit.Append(id=wxID_LSQONECYCLE, kind=wx.ITEM_NORMAL,text='LSQ one cycle', 2927 help='One cycle of Peak fitting via least-squares' ) 2927 self.PeakFit = self.PeakEdit.Append(id=wxID_LSQPEAKFIT, kind=wx.ITEM_NORMAL,text='Peakfit', 2928 help='Peak fitting' ) 2929 self.PFOneCycle = self.PeakEdit.Append(id=wxID_LSQONECYCLE, kind=wx.ITEM_NORMAL,text='Peakfit one cycle', 2930 help='One cycle of Peak fitting' ) 2931 self.SeqPeakFit = self.PeakEdit.Append(id=wxID_SEQPEAKFIT, kind=wx.ITEM_NORMAL,text='Seq PeakFit', 2932 help='Sequential Peak fitting for all histograms' ) 2933 wxID_PEAKSCOPY 2928 2934 self.PeakEdit.Append(id=wxID_RESETSIGGAM, kind=wx.ITEM_NORMAL, 2929 2935 text='Reset sig and gam',help='Reset sigma and gamma to global fit' ) -
trunk/GSASIImapvars.py
r1489 r1496 1172 1172 # if e: print 'error=',e 1173 1173 # if w: print 'error=',w 1174 # varyList = ['0::A0', '0::AUiso:0', '0::Afrac:1', '0::Afrac:2', '0::Afrac:3', '0::Afrac:4', '0::dAx:5', '0::dAy:5', '0::dAz:5', '0::AUiso:5', ':0:Back :0', ':0:Back:1', ':0:Back:2', ':0:Back:3', ':0:Back:4', ':0:Back:5', ':0:Back:6', ':0:Back:7', ':0:Back:8', ':0:Back:9', ':0:Back:10', ':0:Back:11', ':0:U', ':0:V', ':0:W', ':0:X', ':0:Y', ':0:Scale', ':0:DisplaceX', ':0:DisplaceY']1174 # varyList = ['0::A0', '0::AUiso:0', '0::Afrac:1', '0::Afrac:2', '0::Afrac:3', '0::Afrac:4', '0::dAx:5', '0::dAy:5', '0::dAz:5', '0::AUiso:5', ':0:Back;0', ':0:Back;1', ':0:Back;2', ':0:Back;3', ':0:Back;4', ':0:Back;5', ':0:Back;6', ':0:Back;7', ':0:Back;8', ':0:Back;9', ':0:Back;10', ':0:Back;11', ':0:U', ':0:V', ':0:W', ':0:X', ':0:Y', ':0:Scale', ':0:DisplaceX', ':0:DisplaceY'] 1175 1175 # constrDict = [ 1176 1176 # {'0::Afrac:4': 24.0, '0::Afrac:1': 16.0, '0::Afrac:3': 24.0, '0::Afrac:2': 16.0}, -
trunk/GSASIIobj.py
r1456 r1496 1320 1320 'e([12][12])' : 'strain tensor e\1', # strain vars e11, e22, e12 1321 1321 'Dcalc': 'Calc. d-spacing', 1322 'Back$': 'background parameter', 1323 'pos$': 'peak position', 1324 'int$': 'peak intensity', 1322 1325 }.items(): 1323 1326 VarDesc[key] = value -
trunk/GSASIIpwd.py
r1493 r1496 526 526 cw = np.append(cw,cw[-1]) 527 527 while True: 528 key = pfx+'Back :'+str(nBak)528 key = pfx+'Back;'+str(nBak) 529 529 if key in parmDict: 530 530 nBak += 1 … … 534 534 dt = xdata[-1]-xdata[0] 535 535 for iBak in range(nBak): 536 key = pfx+'Back :'+str(iBak)536 key = pfx+'Back;'+str(iBak) 537 537 if bakType == 'chebyschev': 538 538 yb += parmDict[key]*(2.*(xdata-xdata[0])/dt-1.)**iBak … … 541 541 elif bakType in ['lin interpolate','inv interpolate','log interpolate',]: 542 542 if nBak == 1: 543 yb = np.ones_like(xdata)*parmDict[pfx+'Back :0']543 yb = np.ones_like(xdata)*parmDict[pfx+'Back;0'] 544 544 elif nBak == 2: 545 545 dX = xdata[-1]-xdata[0] 546 546 T2 = (xdata-xdata[0])/dX 547 547 T1 = 1.0-T2 548 yb = parmDict[pfx+'Back :0']*T1+parmDict[pfx+'Back:1']*T2548 yb = parmDict[pfx+'Back;0']*T1+parmDict[pfx+'Back;1']*T2 549 549 else: 550 550 if bakType == 'lin interpolate': … … 558 558 bakVals = np.zeros(nBak) 559 559 for i in range(nBak): 560 bakVals[i] = parmDict[pfx+'Back :'+str(i)]560 bakVals[i] = parmDict[pfx+'Back;'+str(i)] 561 561 bakInt = si.interp1d(bakPos,bakVals,'linear') 562 562 yb = bakInt(xdata) … … 575 575 while True: 576 576 try: 577 dbA = parmDict[pfx+'DebyeA :'+str(iD)]578 dbR = parmDict[pfx+'DebyeR :'+str(iD)]579 dbU = parmDict[pfx+'DebyeU :'+str(iD)]577 dbA = parmDict[pfx+'DebyeA;'+str(iD)] 578 dbR = parmDict[pfx+'DebyeR;'+str(iD)] 579 dbU = parmDict[pfx+'DebyeU;'+str(iD)] 580 580 yb += ff*dbA*np.sin(q*dbR)*np.exp(-dbU*q**2)/(q*dbR) 581 581 iD += 1 … … 618 618 nBak = 0 619 619 while True: 620 key = hfx+'Back :'+str(nBak)620 key = hfx+'Back;'+str(nBak) 621 621 if key in parmDict: 622 622 nBak += 1 … … 678 678 if hfx+'difC' in parmDict: 679 679 q = 2*np.pi*parmDict[hfx+'difC']/xdata 680 dbA = parmDict[hfx+'DebyeA :'+str(iD)]681 dbR = parmDict[hfx+'DebyeR :'+str(iD)]682 dbU = parmDict[hfx+'DebyeU :'+str(iD)]680 dbA = parmDict[hfx+'DebyeA;'+str(iD)] 681 dbR = parmDict[hfx+'DebyeR;'+str(iD)] 682 dbU = parmDict[hfx+'DebyeU;'+str(iD)] 683 683 sqr = np.sin(q*dbR)/(q*dbR) 684 684 cqr = np.cos(q*dbR) … … 918 918 dMdv = np.zeros(shape=(len(varyList),len(xdata))) 919 919 dMdb,dMddb,dMdpk = getBackgroundDerv('',parmDict,bakType,dataType,xdata) 920 if 'Back :0' in varyList: #background derivs are in front if present920 if 'Back;0' in varyList: #background derivs are in front if present 921 921 dMdv[0:len(dMdb)] = dMdb 922 922 names = ['DebyeA','DebyeR','DebyeU'] … … 1123 1123 bakType,bakFlag = Background[0][:2] 1124 1124 backVals = Background[0][3:] 1125 backNames = ['Back :'+str(i) for i in range(len(backVals))]1125 backNames = ['Back;'+str(i) for i in range(len(backVals))] 1126 1126 Debye = Background[1] #also has background peaks stuff 1127 1127 backDict = dict(zip(backNames,backVals)) … … 1255 1255 while True: 1256 1256 try: 1257 bakName = 'Back :'+str(iBak)1257 bakName = 'Back;'+str(iBak) 1258 1258 Background[0][iBak+3] = parmList[bakName] 1259 1259 iBak += 1 … … 1289 1289 for i,back in enumerate(Background[0][3:]): 1290 1290 ptstr += ptfmt % (back) 1291 sigstr += ptfmt % (sigDict['Back :'+str(i)])1291 sigstr += ptfmt % (sigDict['Back;'+str(i)]) 1292 1292 print ptstr 1293 1293 print sigstr … … 1505 1505 begin = time.time() 1506 1506 values = np.array(Dict2Values(parmDict, varyList)) 1507 Rvals = {} 1507 1508 if FitPgm == 'LSQ': 1508 1509 try: … … 1515 1516 chisq = np.sum(result[2]['fvec']**2) 1516 1517 Values2Dict(parmDict, varyList, result[0]) 1517 R wp= np.sqrt(chisq/np.sum(w[xBeg:xFin]*y[xBeg:xFin]**2))*100. #to %1518 GOF= chisq/(xFin-xBeg-len(varyList)) #reduced chi^21518 Rvals['Rwp'] = np.sqrt(chisq/np.sum(w[xBeg:xFin]*y[xBeg:xFin]**2))*100. #to % 1519 Rvals['GOF'] = chisq/(xFin-xBeg-len(varyList)) #reduced chi^2 1519 1520 print 'Number of function calls:',result[2]['nfev'],' Number of observations: ',xFin-xBeg,' Number of parameters: ',len(varyList) 1520 1521 print 'fitpeak time = %8.3fs, %8.3fs/cycle'%(runtime,runtime/ncyc) 1521 print 'Rwp = %7.2f%%, chi**2 = %12.6g, reduced chi**2 = %6.2f'%(R wp,chisq,GOF)1522 print 'Rwp = %7.2f%%, chi**2 = %12.6g, reduced chi**2 = %6.2f'%(Rvals['Rwp'],chisq,Rvals['GOF']) 1522 1523 try: 1523 sig = np.sqrt(np.diag(result[1])* GOF)1524 sig = np.sqrt(np.diag(result[1])*Rvals['GOF']) 1524 1525 if np.any(np.isnan(sig)): 1525 1526 print '*** Least squares aborted - some invalid esds possible ***' … … 1547 1548 GetPeaksParms(Inst,parmDict,Peaks,varyList) 1548 1549 PeaksPrint(dataType,parmDict,sigDict,varyList) 1549 return sigDict 1550 return sigDict,result,sig,Rvals,varyList,parmDict 1550 1551 1551 1552 def calcIncident(Iparm,xdata): -
trunk/GSASIIpwdGUI.py
r1493 r1496 330 330 data['peaks'].append(G2mth.setPeakparms(inst,inst2,pos,mag)) 331 331 UpdatePeakGrid(G2frame,data) 332 G2plt.PlotPatterns(G2frame,plotType='PWDR') 332 G2plt.PlotPatterns(G2frame,plotType='PWDR') 333 334 def OnCopyPeaks(event): 335 hst = G2frame.PatternTree.GetItemText(G2frame.PatternId) 336 histList = GetHistsLikeSelected(G2frame) 337 if not histList: 338 G2frame.ErrorDialog('No match','No histograms match '+hst,G2frame.dataFrame) 339 return 340 copyList = [] 341 dlg = G2gd.G2MultiChoiceDialog( 342 G2frame.dataFrame, 343 'Copy peak list from\n'+str(hst[5:])+' to...', 344 'Copy peaks', histList) 345 try: 346 if dlg.ShowModal() == wx.ID_OK: 347 for i in dlg.GetSelections(): 348 copyList.append(histList[i]) 349 finally: 350 dlg.Destroy() 351 for item in copyList: 352 Id = G2gd.GetPatternTreeItemId(G2frame,G2frame.root,item) 353 G2frame.PatternTree.SetItemPyData( 354 G2gd.GetPatternTreeItemId(G2frame,Id,'Peak List'),copy.copy(data)) 333 355 334 356 def OnUnDo(event): … … 368 390 def OnOneCycle(event): 369 391 OnPeakFit('LSQ',oneCycle=True) 392 393 def OnSeqPeakFit(event): 394 hst = G2frame.PatternTree.GetItemText(G2frame.PatternId) 395 histList = GetHistsLikeSelected(G2frame) 396 if not histList: 397 G2frame.ErrorDialog('No match','No histograms match '+hst,G2frame.dataFrame) 398 return 399 sel = [] 400 dlg = G2gd.G2MultiChoiceDialog(G2frame.dataFrame, 'Sequential peak fits', 401 'Select dataset to include',histList) 402 dlg.SetSelections(sel) 403 names = [] 404 if dlg.ShowModal() == wx.ID_OK: 405 for sel in dlg.GetSelections(): 406 names.append(histList[sel]) 407 dlg.Destroy() 408 SeqResult = {'histNames':names} 409 dlg.Destroy() 410 dlg = wx.ProgressDialog('Sequential peak fit','Data set name = '+names[0],len(names), 411 style = wx.PD_ELAPSED_TIME|wx.PD_AUTO_HIDE|wx.PD_REMAINING_TIME|wx.PD_CAN_ABORT) 412 controls = {'deriv type':'analytic','min dM/M':0.0001,} 413 print 'Peak Fitting with '+controls['deriv type']+' derivatives:' 414 oneCycle = False 415 FitPgm = 'LSQ' 416 try: 417 for i,name in enumerate(names): 418 print ' Sequential fit for ',name 419 GoOn = dlg.Update(i,newmsg='Data set name = '+name)[0] 420 if not GoOn: 421 break 422 PatternId = G2gd.GetPatternTreeItemId(G2frame,G2frame.root,name) 423 peaks = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,PatternId, 'Peak List')) 424 background = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,PatternId, 'Background')) 425 limits = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,PatternId, 'Limits'))[1] 426 inst,inst2 = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,PatternId, 'Instrument Parameters')) 427 data = G2frame.PatternTree.GetItemPyData(PatternId)[1] 428 wx.BeginBusyCursor() 429 dlg2 = wx.ProgressDialog('Residual','Peak fit Rwp = ',101.0, 430 style = wx.PD_ELAPSED_TIME|wx.PD_AUTO_HIDE|wx.PD_REMAINING_TIME|wx.PD_CAN_ABORT) 431 screenSize = wx.ClientDisplayRect() 432 Size = dlg.GetSize() 433 dlg2.SetPosition(wx.Point(screenSize[2]-Size[0]-305,screenSize[1]+5)) 434 try: 435 peaks['sigDict'],result,sig,Rvals,varyList,parmDict = G2pwd.DoPeakFit(FitPgm,peaks['peaks'], 436 background,limits,inst,inst2,data,oneCycle,controls,dlg2) 437 finally: 438 dlg2.Destroy() 439 G2frame.PatternTree.SetItemPyData(G2gd.GetPatternTreeItemId(G2frame,PatternId, 'Peak List'),peaks) 440 SeqResult[name] = {'variables':result[0],'varyList':varyList,'sig':sig,'Rvals':Rvals, 441 'covMatrix':np.eye(len(result[0])),'title':name,'parmDict':parmDict} 442 else: 443 dlg.Destroy() 444 print ' ***** Sequential peak fit successful *****' 445 finally: 446 wx.EndBusyCursor() 447 Id = G2gd.GetPatternTreeItemId(G2frame,G2frame.root,'Sequential results') 448 if Id: 449 G2frame.PatternTree.SetItemPyData(Id,SeqResult) 450 else: 451 Id = G2frame.PatternTree.AppendItem(parent=G2frame.root,text='Sequential results') 452 G2frame.PatternTree.SetItemPyData(Id,SeqResult) 453 G2frame.PatternTree.SelectItem(Id) 370 454 371 455 def OnClearPeaks(event): … … 402 486 dlg.SetPosition(wx.Point(screenSize[2]-Size[0]-305,screenSize[1]+5)) 403 487 try: 404 peaks['sigDict'] = G2pwd.DoPeakFit(FitPgm,peaks['peaks'],background,limits,inst,inst2,data,oneCycle,controls,dlg) 488 peaks['sigDict'] = G2pwd.DoPeakFit(FitPgm,peaks['peaks'],background,limits,inst,inst2,data,oneCycle,controls,dlg)[0] 405 489 finally: 406 490 wx.EndBusyCursor() … … 502 586 Status.SetStatusText('Global refine: select refine column & press Y or N') 503 587 G2frame.Bind(wx.EVT_MENU, OnAutoSearch, id=G2gd.wxID_AUTOSEARCH) 588 G2frame.Bind(wx.EVT_MENU, OnCopyPeaks, id=G2gd.wxID_PEAKSCOPY) 504 589 G2frame.Bind(wx.EVT_MENU, OnUnDo, id=G2gd.wxID_UNDO) 505 590 G2frame.Bind(wx.EVT_MENU, OnLSQPeakFit, id=G2gd.wxID_LSQPEAKFIT) 506 591 G2frame.Bind(wx.EVT_MENU, OnOneCycle, id=G2gd.wxID_LSQONECYCLE) 592 G2frame.Bind(wx.EVT_MENU, OnSeqPeakFit, id=G2gd.wxID_SEQPEAKFIT) 507 593 G2frame.Bind(wx.EVT_MENU, OnClearPeaks, id=G2gd.wxID_CLEARPEAKS) 508 594 G2frame.Bind(wx.EVT_MENU, OnResetSigGam, id=G2gd.wxID_RESETSIGGAM) 509 595 if data['peaks']: 510 596 G2frame.dataFrame.AutoSearch.Enable(False) 597 G2frame.dataFrame.PeakCopy.Enable(True) 511 598 G2frame.dataFrame.PeakFit.Enable(True) 512 599 G2frame.dataFrame.PFOneCycle.Enable(True) 600 G2frame.dataFrame.SeqPeakFit.Enable(True) 513 601 else: 514 602 G2frame.dataFrame.PeakFit.Enable(False) 603 G2frame.dataFrame.PeakCopy.Enable(False) 515 604 G2frame.dataFrame.PFOneCycle.Enable(False) 516 605 G2frame.dataFrame.AutoSearch.Enable(True) 606 G2frame.dataFrame.SeqPeakFit.Enable(False) 517 607 G2frame.PickTable = [] 518 608 rowLabels = [] -
trunk/GSASIIstrIO.py
r1490 r1496 2200 2200 bakType,bakFlag = Back[:2] 2201 2201 backVals = Back[3:] 2202 backNames = [':'+str(hId)+':Back :'+str(i) for i in range(len(backVals))]2202 backNames = [':'+str(hId)+':Back;'+str(i) for i in range(len(backVals))] 2203 2203 backDict = dict(zip(backNames,backVals)) 2204 2204 backVary = [] … … 2210 2210 debyeList = [] 2211 2211 for i in range(DebyePeaks['nDebye']): 2212 debyeNames = [':'+str(hId)+':DebyeA :'+str(i),':'+str(hId)+':DebyeR:'+str(i),':'+str(hId)+':DebyeU:'+str(i)]2212 debyeNames = [':'+str(hId)+':DebyeA;'+str(i),':'+str(hId)+':DebyeR;'+str(i),':'+str(hId)+':DebyeU;'+str(i)] 2213 2213 debyeDict.update(dict(zip(debyeNames,DebyePeaks['debyeTerms'][i][::2]))) 2214 2214 debyeList += zip(debyeNames,DebyePeaks['debyeTerms'][i][1::2]) … … 2434 2434 backSig = [0 for i in range(lenBack+3*DebyePeaks['nDebye']+4*DebyePeaks['nPeaks'])] 2435 2435 for i in range(lenBack): 2436 Back[3+i] = parmDict[pfx+'Back :'+str(i)]2437 if pfx+'Back :'+str(i) in sigDict:2438 backSig[i] = sigDict[pfx+'Back :'+str(i)]2436 Back[3+i] = parmDict[pfx+'Back;'+str(i)] 2437 if pfx+'Back;'+str(i) in sigDict: 2438 backSig[i] = sigDict[pfx+'Back;'+str(i)] 2439 2439 if DebyePeaks['nDebye']: 2440 2440 for i in range(DebyePeaks['nDebye']): -
trunk/GSASIIstrMath.py
r1495 r1496 1744 1744 dMdv = np.zeros(shape=(len(varylist),len(x))) 1745 1745 dMdb,dMddb,dMdpk = G2pwd.getBackgroundDerv(hfx,parmDict,bakType,calcControls[hfx+'histType'],x) 1746 if hfx+'Back :0' in varylist: # for now assume that Back:x vars to not appear in constraints1747 bBpos =varylist.index(hfx+'Back :0')1746 if hfx+'Back;0' in varylist: # for now assume that Back;x vars to not appear in constraints 1747 bBpos =varylist.index(hfx+'Back;0') 1748 1748 dMdv[bBpos:bBpos+len(dMdb)] = dMdb 1749 1749 names = [hfx+'DebyeA',hfx+'DebyeR',hfx+'DebyeU'] 1750 1750 for name in varylist: 1751 1751 if 'Debye' in name: 1752 id = int(name.split(' :')[-1])1753 parm = name[:int(name.rindex(' :'))]1752 id = int(name.split(';')[-1]) 1753 parm = name[:int(name.rindex(';'))] 1754 1754 ip = names.index(parm) 1755 1755 dMdv[varylist.index(name)] = dMddb[3*id+ip] -
trunk/exports/G2export_CIF.py
r1261 r1496 278 278 l = " " 279 279 for i,v in enumerate(fxn[3:]): 280 name = '%sBack :%d'%(hfx,i)280 name = '%sBack;%d'%(hfx,i) 281 281 sig = self.sigDict.get(name,-0.009) 282 282 if len(l) > 60: … … 287 287 if bkgdict['nDebye']: 288 288 txt += '\n Background Debye function parameters: A, R, U:' 289 names = ['A :','R:','U:']289 names = ['A;','R;','U;'] 290 290 for i in range(bkgdict['nDebye']): 291 291 txt += '\n ' … … 296 296 if bkgdict['nPeaks']: 297 297 txt += '\n Background peak parameters: pos, int, sig, gam:' 298 names = ['pos :','int:','sig:','gam:']298 names = ['pos;','int;','sig;','gam;'] 299 299 for i in range(bkgdict['nPeaks']): 300 300 txt += '\n '
Note: See TracChangeset
for help on using the changeset viewer.