Changeset 2355
- Timestamp:
- Jun 30, 2016 8:36:29 AM (7 years ago)
- Location:
- trunk
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/GSASIIplot.py
r2336 r2355 4353 4353 Plot.plot([arcxI[ind],arcxO[ind]],[arcyI[ind],arcyO[ind]],color='k',dashes=(5,5)) 4354 4354 4355 if G2frame.PickId and G2frame.PatternTree.GetItemText(G2frame.PickId) in 'Image Controls':4355 if G2frame.PickId and G2frame.PatternTree.GetItemText(G2frame.PickId) in ['Image Controls',]: 4356 4356 for xring,yring in Data['ring']: 4357 4357 Plot.plot(xring,yring,'r+',picker=3) … … 4367 4367 Plot.add_artist(Ellipse([cent[0],cent[1]],2*width,2*height,phi,ec=col,fc='none')) 4368 4368 Plot.text(cent[0],cent[1],'+',color=col,ha='center',va='center') 4369 if G2frame.P atternTree.GetItemText(G2frame.PickId) in 'Stress/Strain':4369 if G2frame.PickId and G2frame.PatternTree.GetItemText(G2frame.PickId) in ['Stress/Strain',]: 4370 4370 for N,ring in enumerate(StrSta['d-zero']): 4371 4371 xring,yring = ring['ImxyObs'] -
trunk/GSASIIpwd.py
r2334 r2355 300 300 XY[0] = npT2q(XY[0],wave) 301 301 # Qdata = np.nan_to_num(si.griddata(XY[0],XY[1],Qpoints,method='linear')) #only OK for scipy 0.9! 302 T = si.interp1d(XY[0],XY[1],bounds_error=False,fill_value= 0.0) #OK for scipy 0.8302 T = si.interp1d(XY[0],XY[1],bounds_error=False,fill_value=XY[1][0]) #OK for scipy 0.8 303 303 Qdata = T(Qpoints) 304 Qdata -= np.min(Qdata)*data['BackRatio'] 304 305 305 306 qLimits = data['QScaleLim'] … … 313 314 xydata['IofQ'][1] = newdata 314 315 315 316 316 xydata['SofQ'] = copy.deepcopy(xydata['IofQ']) 317 317 FFSq,SqFF,CF = GetAsfMean(ElList,(xydata['SofQ'][1][0]/(4.0*np.pi))**2) #these are <f^2>,<f>^2,Cf … … 327 327 scale = len(xydata['SofQ'][1][1][minQ:maxQ])/np.sum(xydata['SofQ'][1][1][minQ:maxQ]) 328 328 xydata['SofQ'][1][1] *= scale 329 329 # if data.get('sinDamp',False): #not the right thing but leave as place holder 330 # sinDamp = np.sin(np.pi*xydata['SofQ'][1][0]/qLimits[1]) 331 # xydata['SofQ'][1][1] *= sinDamp 330 332 xydata['FofQ'] = copy.deepcopy(xydata['SofQ']) 331 333 xydata['FofQ'][1][1] = xydata['FofQ'][1][0]*(xydata['SofQ'][1][1]-1.0) 332 334 if data['Lorch']: 333 xydata['FofQ'][1][1] *= LorchWeight(Q) 334 335 xydata['FofQ'][1][1] *= LorchWeight(Q) 335 336 xydata['GofR'] = copy.deepcopy(xydata['FofQ']) 336 337 nR = len(xydata['GofR'][1][1]) 337 338 xydata['GofR'][1][1] = -dq*np.imag(ft.fft(xydata['FofQ'][1][1],4*nR)[:nR]) 338 339 xydata['GofR'][1][0] = 0.5*np.pi*np.linspace(0,nR,nR)/qLimits[1] 339 340 return auxPlot 341 342 def MakeRDF(RDFcontrols,background,inst,pwddata,xydata): 343 # GSASIIpath.IPyBreak() 344 auxPlot = [] 345 if 'C' in inst['Type'][0]: 346 Tth = pwddata[0] 347 hc = 12.397639 348 wave = G2mth.getWave(inst) 349 keV = hc/wave 350 minQ = npT2q(Tth[0],wave) 351 maxQ = npT2q(Tth[-1],wave) 340 352 353 354 elif 'T' in inst['Type'][0]: 355 TOF = pwddata[0] 356 difC = inst['difC'][1] 357 minQ = 2.*np.pi*difC/TOF[-1] 358 maxQ = 2.*np.pi*difC/TOF[0] 359 360 Qpoints = np.linspace(0.,maxQ,len(pwddata[0]),endpoint=True) 361 dq = Qpoints[1]-Qpoints[0] 362 T = si.interp1d(pwddata[0],pwddata[1],bounds_error=False,fill_value=0.0,kind=RDFcontrols['Smooth']) #OK for scipy 0.8 363 Qdata = T(Qpoints) 364 auxPlot.append([Qpoints,Qdata,'interp1d:'+RDFcontrols['Smooth']]) 341 365 return auxPlot 366 print 'make RDF' 342 367 343 368 ################################################################################ … … 1420 1445 ptstr += ptfmt % (back) 1421 1446 if Background[0][1]: 1422 sigstr += ptfmt % (sigDict['Back;'+str(i)]) 1447 prm = 'Back;'+str(i) 1448 if prm in sigDict: 1449 sigstr += ptfmt % (sigDict[prm]) 1450 else: 1451 sigstr += " "*12 1423 1452 if len(ptstr) > 75: 1424 1453 print ptstr … … 1441 1470 if name+str(term) in sigDict: 1442 1471 line += ptfmt%(sigDict[name+str(term)]) 1472 else: 1473 line += " "*12 1443 1474 print line 1444 1475 if Background[1]['nPeaks']: -
trunk/GSASIIpwdGUI.py
r2336 r2355 56 56 cosd = lambda x: math.cos(x*math.pi/180.) 57 57 asind = lambda x: 180.*math.asin(x)/math.pi 58 59 ################################################################################ 60 ###### class definitions 61 ################################################################################ 62 63 class RDFDialog(wx.Dialog): 64 def __init__(self,parent): 65 wx.Dialog.__init__(self,parent,-1,'Background radial distribution function', 66 pos=wx.DefaultPosition,style=wx.DEFAULT_DIALOG_STYLE) 67 self.panel = wx.Panel(self) #just a dummy - gets destroyed in Draw! 68 self.result = {'UseObsCalc':False,'maxR':10.0,'Smooth':'linear'} 69 70 self.Draw() 71 72 def Draw(self): 73 74 def OnUseOC(event): 75 self.result['UseObsCalc'] = not self.result['UseObsCalc'] 76 77 def OnSmCombo(event): 78 self.result['Smooth'] = smCombo.GetValue() 79 80 def OnMaxR(event): 81 try: 82 val = float(maxR.GetValue()) 83 if val <= 0.: 84 raise ValueError 85 except ValueError: 86 val = self.result['maxR'] 87 self.result['maxR'] = val 88 maxR.SetValue('%.1f'%(val)) 89 90 self.panel.Destroy() 91 self.panel = wx.Panel(self) 92 Ind = {} 93 mainSizer = wx.BoxSizer(wx.VERTICAL) 94 mainSizer.Add(wx.StaticText(self.panel,label='Background RDF controls:'),0,WACV) 95 useOC = wx.CheckBox(self.panel,label=' Use obs && calc intensities?') 96 useOC.SetValue(self.result['UseObsCalc']) 97 useOC.Bind(wx.EVT_CHECKBOX,OnUseOC) 98 mainSizer.Add(useOC,0,WACV) 99 dataSizer = wx.BoxSizer(wx.HORIZONTAL) 100 dataSizer.Add(wx.StaticText(self.panel,label=' Smoothing type: '),0,WACV) 101 smChoice = ['linear','nearest','zero','slinear',] 102 smCombo = wx.ComboBox(self.panel,value=self.result['Smooth'],choices=smChoice, 103 style=wx.CB_READONLY|wx.CB_DROPDOWN) 104 smCombo.Bind(wx.EVT_COMBOBOX, OnSmCombo) 105 dataSizer.Add(smCombo,0,WACV) 106 dataSizer.Add(wx.StaticText(self.panel,label=' Maximum radial dist.: '),0,WACV) 107 maxR = wx.TextCtrl(self.panel,value='%.1f'%(self.result['maxR']),style=wx.TE_PROCESS_ENTER) 108 maxR.Bind(wx.EVT_TEXT_ENTER,OnMaxR) 109 maxR.Bind(wx.EVT_KILL_FOCUS,OnMaxR) 110 dataSizer.Add(maxR,0,WACV) 111 mainSizer.Add(dataSizer,0,WACV) 112 113 OkBtn = wx.Button(self.panel,-1,"Ok") 114 OkBtn.Bind(wx.EVT_BUTTON, self.OnOk) 115 cancelBtn = wx.Button(self.panel,-1,"Cancel") 116 cancelBtn.Bind(wx.EVT_BUTTON, self.OnCancel) 117 btnSizer = wx.BoxSizer(wx.HORIZONTAL) 118 btnSizer.Add((20,20),1) 119 btnSizer.Add(OkBtn) 120 btnSizer.Add((20,20),1) 121 btnSizer.Add(cancelBtn) 122 btnSizer.Add((20,20),1) 123 124 mainSizer.Add(btnSizer,0,wx.EXPAND|wx.BOTTOM|wx.TOP, 10) 125 self.panel.SetSizer(mainSizer) 126 self.panel.Fit() 127 self.Fit() 128 129 def GetSelection(self): 130 return self.result 131 132 def OnOk(self,event): 133 parent = self.GetParent() 134 parent.Raise() 135 self.EndModal(wx.ID_OK) 136 137 def OnCancel(self,event): 138 parent = self.GetParent() 139 parent.Raise() 140 self.EndModal(wx.ID_CANCEL) 141 142 143 ################################################################################ 144 ##### Setup routines 145 ################################################################################ 58 146 59 147 def IsHistogramInAnyPhase(G2frame,histoName): … … 851 939 try: 852 940 G2pwd.DoPeakFit('LSQ',[],background,limits,inst,inst2, 853 941 np.array((xdata,ydata,W,Z,Z,Z)),bakVary,False,controls) 854 942 finally: 855 943 wx.EndBusyCursor() … … 882 970 Peaks['peaks'].append([peak[0],0,peak[2],0,peak[4],0,peak[6],0]) 883 971 G2frame.PatternTree.SetItemPyData(G2gd.GetPatternTreeItemId(G2frame,G2frame.PatternId, 'Peak List'),Peaks) 972 973 def OnMakeRDF(event): 974 dlg = RDFDialog(G2frame) 975 try: 976 if dlg.ShowModal() == wx.ID_OK: 977 RDFcontrols = dlg.GetSelection() 978 else: 979 return 980 finally: 981 dlg.Destroy() 982 xydata = {} 983 PatternId = G2frame.PatternId 984 background = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,PatternId, 'Background')) 985 limits = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,PatternId, 'Limits'))[1] 986 inst,inst2 = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,PatternId, 'Instrument Parameters')) 987 pwddata = G2frame.PatternTree.GetItemPyData(PatternId)[1] 988 auxPlot = G2pwd.MakeRDF(RDFcontrols,background,inst,pwddata,xydata) 989 # GSASIIpath.IPyBreak() 990 superMinusOne = unichr(0xaf)+unichr(0xb9) 991 for plot in auxPlot: 992 XY = np.array(plot[:2]) 993 G2plt.PlotXY(G2frame,[XY,],Title=plot[2],labelX=r'$Q,\AA$'+superMinusOne,labelY=r'$I(Q)$') 994 G2plt.PlotXY(G2frame,xydata,Title='D(r)') 995 884 996 885 997 def BackSizer(): … … 1076 1188 G2frame.Bind(wx.EVT_MENU,OnBackFlagCopy,id=G2gd.wxID_BACKFLAGCOPY) 1077 1189 G2frame.Bind(wx.EVT_MENU,OnPeaksMove,id=G2gd.wxID_PEAKSMOVE) 1190 G2frame.Bind(wx.EVT_MENU,OnMakeRDF,id=G2gd.wxID_MAKEBACKRDF) 1078 1191 G2frame.Bind(wx.EVT_MENU,OnBkgFit,id=G2frame.dataFrame.wxID_BackPts['Fit']) 1079 1192 G2frame.Bind(wx.EVT_MENU,OnBkgClear,id=G2frame.dataFrame.wxID_BackPts['Clear']) … … 4478 4591 azimuth = inst['Azimuth'][1] 4479 4592 itemDict = {} 4593 #patch 4594 if 'BackRatio' not in data: 4595 data['BackRatio'] = 0. 4480 4596 4481 4597 def FillFileSizer(fileSizer,key): … … 4635 4751 G2plt.PlotISFG(G2frame,newPlot=False) 4636 4752 4753 def OnBackVal(event): 4754 try: 4755 value = float(backVal.GetValue()) 4756 value = min(max(0.,value),1.0) 4757 except ValueError: 4758 value = data['BackRatio'] 4759 data['BackRatio'] = value 4760 backVal.SetValue('%.3f'%(value)) 4761 auxPlot = ComputePDF(data) 4762 G2plt.PlotISFG(G2frame,newPlot=False) 4763 4764 def OnBackSlider(event): 4765 value = int(backSldr.GetValue())/100. 4766 data['BackRatio'] = value 4767 backVal.SetValue('%.3f'%(data['BackRatio'])) 4768 auxPlot = ComputePDF(data) 4769 G2plt.PlotISFG(G2frame,newPlot=False) 4770 4637 4771 def OnRulandWdt(event): 4638 4772 try: … … 4658 4792 def OnLorch(event): 4659 4793 data['Lorch'] = lorch.GetValue() 4794 auxPlot = ComputePDF(data) 4795 G2plt.PlotISFG(G2frame,newPlot=False) 4796 4797 def OnSinDamp(event): 4798 data['sinDamp'] = sinDamp.GetValue() 4660 4799 auxPlot = ComputePDF(data) 4661 4800 G2plt.PlotISFG(G2frame,newPlot=False) … … 4944 5083 mainSizer.Add(sqBox,0) 4945 5084 5085 bkBox = wx.BoxSizer(wx.HORIZONTAL) 5086 bkBox.Add(wx.StaticText(G2frame.dataDisplay,label=' Background ratio: '),0,WACV) 5087 backSldr = wx.Slider(parent=G2frame.dataDisplay,style=wx.SL_HORIZONTAL, 5088 value=int(100*data['BackRatio'])) 5089 bkBox.Add(backSldr,1,wx.EXPAND) 5090 backSldr.Bind(wx.EVT_SLIDER, OnBackSlider) 5091 backVal = wx.TextCtrl(G2frame.dataDisplay,value='%.3f'%(data['BackRatio'])) 5092 backVal.Bind(wx.EVT_TEXT_ENTER,OnBackVal) 5093 backVal.Bind(wx.EVT_KILL_FOCUS,OnBackVal) 5094 bkBox.Add(backVal,0,WACV) 5095 mainSizer.Add(bkBox,0,wx.ALIGN_LEFT|wx.EXPAND) 5096 4946 5097 sqBox = wx.BoxSizer(wx.HORIZONTAL) 4947 5098 sqBox.Add(wx.StaticText(G2frame.dataDisplay,label=' Ruland width: '),0,WACV) … … 4961 5112 lorch.Bind(wx.EVT_CHECKBOX, OnLorch) 4962 5113 sqBox.Add(lorch,0,WACV) 5114 # this isn't the right thing but something is needed here - leave as place holder 5115 # sinDamp = wx.CheckBox(G2frame.dataDisplay,label='SinQ damping?') 5116 # sinDamp.SetValue(data['sinDamp']) 5117 # sinDamp.Bind(wx.EVT_CHECKBOX,OnSinDamp) 5118 # sqBox.Add(sinDamp,0,WACV) 4963 5119 sqBox.Add(wx.StaticText(G2frame.dataDisplay,label=' Scaling q-range: '),0,WACV) 4964 5120 SQmin = wx.TextCtrl(G2frame.dataDisplay,value='%.1f'%(data['QScaleLim'][0]))
Note: See TracChangeset
for help on using the changeset viewer.