Changeset 2561
- Timestamp:
- Dec 6, 2016 10:43:26 AM (7 years ago)
- Location:
- trunk
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/GSASII.py
r2550 r2561 3455 3455 'Geometry':'Cylinder','Diam':1.0,'Pack':0.50,'Form Vol':10.0, 3456 3456 'DetType':'Image plate','ObliqCoeff':0.2,'Ruland':0.025,'QScaleLim':[0,100], 3457 'Lorch':True,'BackRatio':0.0 }3457 'Lorch':True,'BackRatio':0.0,'Rmax':100.} 3458 3458 self.PatternTree.SetItemPyData(self.PatternTree.AppendItem(Id,text='PDF Controls'),Data) 3459 3459 self.PatternTree.SetItemPyData(self.PatternTree.AppendItem(Id,text='I(Q)'+PWDRname),[]) -
trunk/GSASIIIO.py
r2555 r2561 968 968 def PDFSave(G2frame,exports): 969 969 'Save a PDF G(r) and F(Q), S(Q) in column formats' 970 import scipy.interpolate as scintp 970 971 for export in exports: 971 972 PickId = G2gd.GetPatternTreeItemId(G2frame, G2frame.root, export) … … 979 980 fqId = G2gd.GetPatternTreeItemId(G2frame, PickId, FQname) 980 981 grId = G2gd.GetPatternTreeItemId(G2frame, PickId, GRname) 981 sqdata = np.array(G2frame.PatternTree.GetItemPyData(sqId)[1][:2]).T 982 fqdata = np.array(G2frame.PatternTree.GetItemPyData(fqId)[1][:2]).T 983 grdata = np.array(G2frame.PatternTree.GetItemPyData(grId)[1][:2]).T 982 sqdata = np.array(G2frame.PatternTree.GetItemPyData(sqId)[1][:2]) 983 sqfxn = scintp.interp1d(sqdata[0],sqdata[1],kind='linear') 984 fqdata = np.array(G2frame.PatternTree.GetItemPyData(fqId)[1][:2]) 985 fqfxn = scintp.interp1d(fqdata[0],fqdata[1],kind='linear') 986 grdata = np.array(G2frame.PatternTree.GetItemPyData(grId)[1][:2]) 987 grfxn = scintp.interp1d(grdata[0],grdata[1],kind='linear') 984 988 sqfile = open(sqfilename,'w') 985 989 fqfile = open(sqfilename,'w') … … 989 993 grfile.write('#T G(R) %s\n'%(export)) 990 994 sqfile.write('#L Q S(Q)\n') 991 sqfile.write('#L Q F(Q)\n')995 fqfile.write('#L Q F(Q)\n') 992 996 grfile.write('#L R G(R)\n') 993 for q,sq in sqdata: 997 qnew = np.arange(sqdata[0][0],sqdata[0][-1],0.005) 998 rnew = np.arange(grdata[0][0],grdata[0][-1],0.010) 999 sqnew = zip(qnew,sqfxn(qnew)) 1000 for q,sq in sqnew: 994 1001 sqfile.write("%15.6g %15.6g\n" % (q,sq)) 995 1002 sqfile.close() 996 1003 print ' S(Q) saved to: ',sqfilename 997 for q,fq in fqdata: 1004 fqnew = zip(qnew,fqfxn(qnew)) 1005 for q,fq in fqnew: 998 1006 fqfile.write("%15.6g %15.6g\n" % (q,fq)) 999 1007 fqfile.close() 1000 1008 print ' F(Q) saved to: ',fqfilename 1001 for r,gr in grdata: 1009 grnew = zip(rnew,grfxn(rnew)) 1010 for r,gr in grnew: 1002 1011 grfile.write("%15.6g %15.6g\n" % (r,gr)) 1003 1012 grfile.close() -
trunk/GSASIIpwd.py
r2546 r2561 288 288 #subtract backgrounds - if any & use PWDR limits 289 289 # GSASIIpath.IPyBreak() 290 xydata['IofQ']= copy.deepcopy(xydata['Sample'])291 xydata['IofQ'][1] = np.array(xydata['IofQ'][1])[:,Ibeg:Ifin]290 IofQ = copy.deepcopy(xydata['Sample']) 291 IofQ[1] = np.array(IofQ[1])[:,Ibeg:Ifin] 292 292 if data['Sample Bkg.']['Name']: 293 xydata['IofQ'][1][1] += (xydata['Sample Bkg.'][1][1][Ibeg:Ifin]+293 IofQ[1][1] += (xydata['Sample Bkg.'][1][1][Ibeg:Ifin]+ 294 294 data['Sample Bkg.']['Add'])*data['Sample Bkg.']['Mult'] 295 295 if data['Container']['Name']: … … 298 298 xycontainer += (xydata['Container Bkg.'][1][1][Ibeg:Ifin]+ 299 299 data['Container Bkg.']['Add'])*data['Container Bkg.']['Mult'] 300 xydata['IofQ'][1][1] += xycontainer[Ibeg:Ifin]300 IofQ[1][1] += xycontainer[Ibeg:Ifin] 301 301 #get element data & absorption coeff. 302 302 ElList = data['ElList'] 303 303 Abs = G2lat.CellAbsorption(ElList,data['Form Vol']) 304 304 #Apply angle dependent corrections 305 Tth = xydata['IofQ'][1][0]305 Tth = IofQ[1][0] 306 306 MuR = Abs*data['Diam']/20.0 307 xydata['IofQ'][1][1] /= Absorb(data['Geometry'],MuR,Tth)307 IofQ[1][1] /= Absorb(data['Geometry'],MuR,Tth) 308 308 if 'X' in inst['Type'][0]: 309 xydata['IofQ'][1][1] /= Polarization(inst['Polariz.'][1],Tth,Azm=inst['Azimuth'][1])[0]309 IofQ[1][1] /= Polarization(inst['Polariz.'][1],Tth,Azm=inst['Azimuth'][1])[0] 310 310 if data['DetType'] == 'Image plate': 311 xydata['IofQ'][1][1] *= Oblique(data['ObliqCoeff'],Tth)312 XY = xydata['IofQ'][1]311 IofQ[1][1] *= Oblique(data['ObliqCoeff'],Tth) 312 XY = IofQ[1] 313 313 #convert to Q 314 # nQpoints = len(XY[0]) #points for Q interpolation 315 nQpoints = 5000 314 316 if 'C' in inst['Type'][0]: 315 317 wave = G2mth.getWave(inst) 316 318 minQ = npT2q(Tth[0],wave) 317 319 maxQ = npT2q(Tth[-1],wave) 318 Qpoints = np.linspace(0.,maxQ, len(XY[0]),endpoint=True)320 Qpoints = np.linspace(0.,maxQ,nQpoints,endpoint=True) 319 321 dq = Qpoints[1]-Qpoints[0] 320 322 XY[0] = npT2q(XY[0],wave) … … 323 325 minQ = 2.*np.pi*difC/Tth[-1] 324 326 maxQ = 2.*np.pi*difC/Tth[0] 325 Qpoints = np.linspace(0.,maxQ, len(XY[0]),endpoint=True)327 Qpoints = np.linspace(0.,maxQ,nQpoints,endpoint=True) 326 328 dq = Qpoints[1]-Qpoints[0] 327 329 XY[0] = 2.*np.pi*difC/XY[0] 328 Qdata = si.griddata(XY[0],XY[1],Qpoints,method='linear',fill_value=XY[1][0]) 330 Qdata = si.griddata(XY[0],XY[1],Qpoints,method='linear',fill_value=XY[1][0]) #interpolate I(Q) 329 331 Qdata -= np.min(Qdata)*data['BackRatio'] 330 332 … … 333 335 maxQ = np.searchsorted(Qpoints,qLimits[1]) 334 336 newdata = [] 335 xydata['IofQ'][1][0] = Qpoints 336 xydata['IofQ'][1][1] = Qdata 337 xydata['IofQ'] = [IofQ[0],[Qpoints,Qdata],IofQ[2]] 337 338 for item in xydata['IofQ'][1]: 338 339 newdata.append(item[:maxQ]) … … 359 360 xydata['GofR'] = copy.deepcopy(xydata['FofQ']) 360 361 nR = len(xydata['GofR'][1][1]) 361 xydata['GofR'][1][1] = -dq*np.imag(ft.fft(xydata['FofQ'][1][1],8*nR)[:nR]) 362 xydata['GofR'][1][0] = 0.25*np.pi*np.linspace(0,nR,nR)/qLimits[1] 362 # mul = 12 363 mul = int(round(2.*np.pi*nR/(data['Rmax']*qLimits[1]))) 364 xydata['GofR'][1][0] = 2.*np.pi*np.linspace(0,nR,nR)/(mul*qLimits[1]) 365 xydata['GofR'][1][1] = -dq*np.imag(ft.fft(xydata['FofQ'][1][1],mul*nR)[:nR]) 363 366 if data.get('noRing',True): 364 367 xydata['GofR'][1][1] = np.where(xydata['GofR'][1][0]<0.5,0.,xydata['GofR'][1][1]) -
trunk/GSASIIpwdGUI.py
r2560 r2561 4768 4768 if 'noRing' not in data: 4769 4769 data['noRing'] = False 4770 if 'Rmax' not in data: 4771 data['Rmax'] = 100. 4770 4772 4771 4773 def FillFileSizer(fileSizer,key): … … 5016 5018 wx.CallAfter(OnComputePDF,None) 5017 5019 5020 def OnRmax(event): 5021 event.Skip() 5022 try: 5023 value = float(rmax.GetValue()) 5024 if value > 200. or value < 10.: 5025 raise ValueError 5026 except ValueError: 5027 value = data['Rmax'] 5028 data['Rmax'] = value 5029 rmax.SetValue('%.1f'%(value)) 5030 wx.CallAfter(OnComputePDF,None) 5031 5018 5032 def OnResetQ(event): 5019 5033 resetQ.SetValue(False) … … 5157 5171 def OnComputePDF(event): 5158 5172 # print 'Calculating PDF:' 5173 if not data['ElList']: 5174 G2frame.ErrorDialog('PDF error','Chemical formula not defined') 5175 return 5159 5176 auxPlot = ComputePDF(data) 5160 5177 # print 'Done calculating PDF:' … … 5181 5198 if 'PDF' in Name.split()[0]: 5182 5199 Data = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,id,'PDF Controls')) 5200 if not Data['ElList']: 5201 G2frame.ErrorDialog('PDF error','Chemical formula not defined for \n'+Name) 5202 return 5183 5203 ComputePDF(Data) 5184 5204 id, cookie = G2frame.PatternTree.GetNextChild(G2frame.root, cookie) … … 5329 5349 5330 5350 sqBox = wx.BoxSizer(wx.HORIZONTAL) 5351 sqBox.Add(wx.StaticText(G2frame.dataDisplay,label=' Scaling q-range: '),0,WACV) 5352 SQmin = wx.TextCtrl(G2frame.dataDisplay,value='%.1f'%(data['QScaleLim'][0]),size=wx.Size(50,20)) 5353 SQmin.Bind(wx.EVT_KILL_FOCUS,OnSQmin) 5354 SQmin.Bind(wx.EVT_TEXT_ENTER,OnSQmin) 5355 sqBox.Add(SQmin,0,WACV) 5356 sqBox.Add(wx.StaticText(G2frame.dataDisplay,label=' to Qmax '),0,WACV) 5357 SQmax = wx.TextCtrl(G2frame.dataDisplay,value='%.1f'%(data['QScaleLim'][1]),size=wx.Size(50,20)) 5358 SQmax.Bind(wx.EVT_KILL_FOCUS,OnSQmax) 5359 SQmax.Bind(wx.EVT_TEXT_ENTER,OnSQmax) 5360 sqBox.Add(SQmax,0,WACV) 5361 resetQ = wx.CheckBox(parent=G2frame.dataDisplay,label='Reset?') 5362 sqBox.Add(resetQ,0,WACV) 5363 resetQ.Bind(wx.EVT_CHECKBOX, OnResetQ) 5364 sqBox.Add(wx.StaticText(G2frame.dataDisplay,label=' Rmax: '),0,WACV) 5365 rmax = wx.TextCtrl(G2frame.dataDisplay,value='%.1f'%(data['Rmax']),size=wx.Size(50,20)) 5366 rmax.Bind(wx.EVT_KILL_FOCUS,OnRmax) 5367 rmax.Bind(wx.EVT_TEXT_ENTER,OnRmax) 5368 sqBox.Add(rmax,0,WACV) 5331 5369 lorch = wx.CheckBox(parent=G2frame.dataDisplay,label='Lorch damping?') 5332 5370 lorch.SetValue(data['Lorch']) 5333 5371 lorch.Bind(wx.EVT_CHECKBOX, OnLorch) 5334 5372 sqBox.Add(lorch,0,WACV) 5335 sqBox.Add(wx.StaticText(G2frame.dataDisplay,label=' Scaling q-range: '),0,WACV)5336 SQmin = wx.TextCtrl(G2frame.dataDisplay,value='%.1f'%(data['QScaleLim'][0]),size=wx.Size(50,20))5337 SQmin.Bind(wx.EVT_TEXT_ENTER,OnSQmin)5338 SQmin.Bind(wx.EVT_KILL_FOCUS,OnSQmin)5339 sqBox.Add(SQmin,0)5340 sqBox.Add(wx.StaticText(G2frame.dataDisplay,label=' to Qmax '),0,WACV)5341 SQmax = wx.TextCtrl(G2frame.dataDisplay,value='%.1f'%(data['QScaleLim'][1]),size=wx.Size(50,20))5342 SQmax.Bind(wx.EVT_TEXT_ENTER,OnSQmax)5343 SQmax.Bind(wx.EVT_KILL_FOCUS,OnSQmax)5344 sqBox.Add(SQmax,0)5345 resetQ = wx.CheckBox(parent=G2frame.dataDisplay,label='Reset?')5346 sqBox.Add(resetQ,0)5347 resetQ.Bind(wx.EVT_CHECKBOX, OnResetQ)5348 5373 noRing = wx.CheckBox(parent=G2frame.dataDisplay,label='Suppress G(0) ringing?') 5349 5374 noRing.SetValue(data['noRing'])
Note: See TracChangeset
for help on using the changeset viewer.