- Timestamp:
- Apr 15, 2017 11:31:45 AM (8 years ago)
- Location:
- trunk
- Files:
-
- 1 added
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
TabularUnified trunk/GSASII.py ¶
r2778 r2783 2060 2060 Tmin = min(rd.reflectometrydata[0]) 2061 2061 Tmax = max(rd.reflectometrydata[0]) 2062 ifDQ = np.any(rd.reflectometrydata[5]) 2062 2063 valuesdict = { 2063 2064 'wtFactor':1.0, … … 2065 2066 'ranId':ran.randint(0,sys.maxint), 2066 2067 'Offset':[0.0,0.0], 2068 'ifDQ':ifDQ 2067 2069 } 2068 2070 rd.Sample['ranId'] = valuesdict['ranId'] # this should be removed someday -
TabularUnified trunk/GSASIIpwd.py ¶
r2777 r2783 61 61 npT2q = lambda tth,wave: 2.0*np.pi*npT2stl(tth,wave) #=2pi*d* 62 62 ateln2 = 8.0*math.log(2.0) 63 sateln2 = np.sqrt(ateln2) 63 64 nxs = np.newaxis 64 65 … … 1938 1939 values = [] 1939 1940 bounds = [] 1940 parmDict['Res'] = data['Resolution'][0]/(100.*np.sqrt(ateln2)) #% FWHM-->decimal sig 1941 parmDict['dQ type'] = data['dQ type'] 1942 parmDict['Res'] = data['Resolution'][0]/(100.*sateln2) #% FWHM-->decimal sig 1941 1943 for parm in ['Scale','FltBack']: 1942 1944 parmDict[parm] = data[parm][0] … … 1994 1996 print line2 1995 1997 1996 def calcREFD(values,Q,Io,wt, parmDict,varyList):1998 def calcREFD(values,Q,Io,wt,Qsig,parmDict,varyList): 1997 1999 parmDict.update(zip(varyList,values)) 1998 M = np.sqrt(wt)*(getREFD(Q, parmDict)-Io)2000 M = np.sqrt(wt)*(getREFD(Q,Qsig,parmDict)-Io) 1999 2001 return M 2000 2002 2001 def sumREFD(values,Q,Io,wt, parmDict,varyList):2003 def sumREFD(values,Q,Io,wt,Qsig,parmDict,varyList): 2002 2004 parmDict.update(zip(varyList,values)) 2003 M = np.sqrt(wt)*(getREFD(Q, parmDict)-Io)2005 M = np.sqrt(wt)*(getREFD(Q,Qsig,parmDict)-Io) 2004 2006 return np.sum(M**2) 2005 2007 2006 def getREFD(Q, parmDict):2008 def getREFD(Q,Qsig,parmDict): 2007 2009 Ic = np.ones_like(Q)*parmDict['FltBack'] 2008 2010 Scale = parmDict['Scale'] … … 2025 2027 if cid+'Mag SLD' in parmDict: 2026 2028 rho[ilay] += parmDict[cid+'Mag SLD'] 2027 A,B = abeles(0.5*Q,depth,rho,irho,sigma[1:]) #Q --> k, offset roughness for abeles 2028 Ic += (A**2+B**2)*Scale 2029 #TODO: smear Ic by instrument resolution Qsig 2029 if parmDict['dQ type'] == 'None': 2030 AB = abeles(0.5*Q,depth,rho,irho,sigma[1:]) #Q --> k, offset roughness for abeles 2031 elif 'const' in parmDict['dQ type']: 2032 AB = SmearAbeles(0.5*Q,Q*Res,depth,rho,irho,sigma[1:]) 2033 else: #dQ/Q in data 2034 AB = SmearAbeles(0.5*Q,Qsig,depth,rho,irho,sigma[1:]) 2035 Ic += AB*Scale 2030 2036 return Ic 2031 2032 def Smear(f,w,z,dq):2033 y = f(w,z)2034 s = dq/ateln22035 y += 0.1354*(f(w,z+2*s)+f(w,z-2*s))2036 y += 0.24935*(f(w,z-1.666667*s)+f(w,z+1.666667*s))2037 y += 0.4111*(f(w,z-1.333333*s)+f(w,z+1.333333*s))2038 y += 0.60653*(f(w,z-s) +f(w,z+s))2039 y += 0.80074*(f(w,z-0.6666667*s)+f(w,z+0.6666667*s))2040 y += 0.94596*(f(w,z-0.3333333*s)+f(w,z+0.3333333*s))2041 y *= 0.1370232042 return y2043 2037 2044 2038 def estimateT0(takestep): … … 2047 2041 for i in range(100): 2048 2042 x0 = takestep(values) 2049 M = sumREFD(x0,Q[Ibeg:Ifin],Io[Ibeg:Ifin],wtFactor*wt[Ibeg:Ifin], parmDict,varyList)2043 M = sumREFD(x0,Q[Ibeg:Ifin],Io[Ibeg:Ifin],wtFactor*wt[Ibeg:Ifin],Qsig[Ibeg:Ifin],parmDict,varyList) 2050 2044 Mmin = min(M,Mmin) 2051 2045 MMax = max(M,Mmax) … … 2069 2063 if data['Minimizer'] == 'LMLS': 2070 2064 result = so.leastsq(calcREFD,values,full_output=True,epsfcn=1.e-8, #ftol=Ftol, 2071 args=(Q[Ibeg:Ifin],Io[Ibeg:Ifin],wtFactor*wt[Ibeg:Ifin], parmDict,varyList))2065 args=(Q[Ibeg:Ifin],Io[Ibeg:Ifin],wtFactor*wt[Ibeg:Ifin],Qsig[Ibeg:Ifin],parmDict,varyList)) 2072 2066 parmDict.update(zip(varyList,result[0])) 2073 2067 chisq = np.sum(result[2]['fvec']**2) … … 2082 2076 result = so.basinhopping(sumREFD,values,take_step=take_step,disp=True,T=T0,stepsize=Bfac, 2083 2077 interval=20,niter=200,minimizer_kwargs={'method':'L-BFGS-B','bounds':bounds, 2084 'args':(Q[Ibeg:Ifin],Io[Ibeg:Ifin],wtFactor*wt[Ibeg:Ifin], parmDict,varyList)})2078 'args':(Q[Ibeg:Ifin],Io[Ibeg:Ifin],wtFactor*wt[Ibeg:Ifin],Qsig[Ibeg:Ifin],parmDict,varyList)}) 2085 2079 chisq = result.fun 2086 2080 ncalc = result.nfev … … 2089 2083 elif data['Minimizer'] == 'MC/SA Anneal': 2090 2084 xyrng = np.array(bounds).T 2091 result = G2mth.anneal(sumREFD, values, args=(Q[Ibeg:Ifin],Io[Ibeg:Ifin],wtFactor*wt[Ibeg:Ifin],parmDict,varyList), 2085 result = G2mth.anneal(sumREFD, values, 2086 args=(Q[Ibeg:Ifin],Io[Ibeg:Ifin],wtFactor*wt[Ibeg:Ifin],Qsig[Ibeg:Ifin],parmDict,varyList), 2092 2087 schedule='log', full_output=True,maxeval=None, maxaccept=None, maxiter=10,dwell=1000, 2093 2088 boltzmann=10.0, feps=1e-6,lower=xyrng[0], upper=xyrng[1], slope=0.9,ranStart=True, … … 2101 2096 elif data['Minimizer'] == 'L-BFGS-B': 2102 2097 result = so.minimize(sumREFD,values,method='L-BFGS-B',bounds=bounds, #ftol=Ftol, 2103 args=(Q[Ibeg:Ifin],Io[Ibeg:Ifin],wtFactor*wt[Ibeg:Ifin], parmDict,varyList))2098 args=(Q[Ibeg:Ifin],Io[Ibeg:Ifin],wtFactor*wt[Ibeg:Ifin],Qsig[Ibeg:Ifin],parmDict,varyList)) 2104 2099 parmDict.update(zip(varyList,result['x'])) 2105 2100 chisq = result.fun … … 2108 2103 covM = [] 2109 2104 else: #nothing varied 2110 M = calcREFD(values,Q[Ibeg:Ifin],Io[Ibeg:Ifin],wtFactor*wt[Ibeg:Ifin], parmDict,varyList)2105 M = calcREFD(values,Q[Ibeg:Ifin],Io[Ibeg:Ifin],wtFactor*wt[Ibeg:Ifin],Qsig[Ibeg:Ifin],parmDict,varyList) 2111 2106 chisq = np.sum(M**2) 2112 2107 ncalc = 0 … … 2118 2113 Rvals['Rwp'] = np.sqrt(chisq/np.sum(wt[Ibeg:Ifin]*Io[Ibeg:Ifin]**2))*100. #to % 2119 2114 Rvals['GOF'] = chisq/(Ifin-Ibeg-len(varyList)) #reduced chi^2 2120 Ic[Ibeg:Ifin] = getREFD(Q[Ibeg:Ifin], parmDict)2115 Ic[Ibeg:Ifin] = getREFD(Q[Ibeg:Ifin],Qsig[Ibeg:Ifin],parmDict) 2121 2116 Ib[Ibeg:Ifin] = parmDict['FltBack'] 2122 2117 try: … … 2219 2214 if 'Mag SLD' in layer: 2220 2215 rho[ilay] += layer['Mag SLD'][0] 2221 A,B = abeles(0.5*Q[iBeg:iFin],depth,rho,irho,sigma[1:]) #Q --> k, offset roughness for abeles 2222 Ic[iBeg:iFin] = (A**2+B**2)*Scale+Ib[iBeg:iFin] 2216 if data['dQ type'] == 'None': 2217 AB = abeles(0.5*Q[iBeg:iFin],depth,rho,irho,sigma[1:]) #Q --> k, offset roughness for abeles 2218 elif 'const' in data['dQ type']: 2219 res = data['Resolution'][0]/(100.*sateln2) 2220 AB = SmearAbeles(0.5*Q[iBeg:iFin],res*Q[iBeg:iFin],depth,rho,irho,sigma[1:]) 2221 else: #dQ/Q in data 2222 AB = SmearAbeles(0.5*Q[iBeg:iFin],Qsig[iBeg:iFin],depth,rho,irho,sigma[1:]) 2223 Ic[iBeg:iFin] = AB*Scale+Ib[iBeg:iFin] 2223 2224 2224 2225 def abeles(kz, depth, rho, irho=0, sigma=0): … … 2289 2290 2290 2291 r = B12/B11 2291 return np. real(r),np.imag(r)2292 return np.absolute(r)**2 2292 2293 2293 2294 if np.isscalar(kz): kz = np.asarray([kz], 'd') … … 2308 2309 return calc(kz, depth, rho, irho, sigma) 2309 2310 2311 def SmearAbeles(kz,dq, depth, rho, irho=0, sigma=0): 2312 y = abeles(kz, depth, rho, irho, sigma) 2313 s = dq/2. 2314 y += 0.1354*(abeles(kz+2*s, depth, rho, irho, sigma)+abeles(kz-2*s, depth, rho, irho, sigma)) 2315 y += 0.24935*(abeles(kz-5*s/3., depth, rho, irho, sigma)+abeles(kz+5*s/3., depth, rho, irho, sigma)) 2316 y += 0.4111*(abeles(kz-4*s/3., depth, rho, irho, sigma)+abeles(kz+4*s/3., depth, rho, irho, sigma)) 2317 y += 0.60653*(abeles(kz-s, depth, rho, irho, sigma) +abeles(kz+s, depth, rho, irho, sigma)) 2318 y += 0.80074*(abeles(kz-2*s/3., depth, rho, irho, sigma)+abeles(kz-2*s/3., depth, rho, irho, sigma)) 2319 y += 0.94596*(abeles(kz-s/3., depth, rho, irho, sigma)+abeles(kz-s/3., depth, rho, irho, sigma)) 2320 y *= 0.137023 2321 return y 2322 2310 2323 def makeRefdFFT(Limits,Profile): 2311 2324 print 'make fft' -
TabularUnified trunk/GSASIIpwdGUI.py ¶
r2782 r2783 224 224 return {'Layers':[{'Name':'vacuum','DenMul':[1.0,False],}, #top layer 225 225 {'Name':'vacuum','Rough':[0.,False],'Penetration':[0.,False],'DenMul':[1.0,False],}], #bottom layer 226 'Scale':[1.0,False],'FltBack':[0.0,False],'Zero':'Top', 227 'Minimizer':'LMLS','Resolution':[0.,'Const dq/q'],'Recomb':0.5,'Toler':0.5, #minimizer controls226 'Scale':[1.0,False],'FltBack':[0.0,False],'Zero':'Top','dQ type':'None', #globals 227 'Minimizer':'LMLS','Resolution':[0.,'Const dq/q'],'Recomb':0.5,'Toler':0.5, #minimizer controls 228 228 'DualFitFiles':['',],'DualFltBacks':[[0.0,False],],'DualScales':[[1.0,False],]} #optional stuff for multidat fits? 229 229 … … 4896 4896 XY = [[R[:2500],F[:2500]],] 4897 4897 G2plt.PlotXY(G2frame,XY,labelX='thickness',labelY='F(R)',newPlot=True, 4898 Title='Fourier transform',lines=True) 4898 Title='Fourier transform',lines=True) 4899 4900 def OndQSel(event): 4901 data['dQ type'] = dQSel.GetStringSelection() 4899 4902 4900 4903 controlSizer = wx.BoxSizer(wx.VERTICAL) 4901 4904 resol = wx.BoxSizer(wx.HORIZONTAL) 4902 resol.Add(wx.StaticText(G2frame.dataDisplay,label=' Instrument resolution (%'+GkDelta+'Q/Q): '),0,WACV) 4903 resol.Add(G2G.ValidatedTxtCtrl(G2frame.dataDisplay,data['Resolution'],0,nDig=(10,2),min=0.,max=0.2),0,WACV) 4904 resol.Add(wx.StaticText(G2frame.dataDisplay,label=' Zero position location: '),0,WACV) 4905 poslist = ['Top','Bottom'] 4906 refpos = wx.ComboBox(G2frame.dataDisplay,value=data['Zero'],choices=poslist, 4907 style=wx.CB_READONLY|wx.CB_DROPDOWN) 4908 refpos.Bind(wx.EVT_COMBOBOX, OnRefPos) 4909 resol.Add(refpos,0,WACV) 4905 choice = ['None','const '+GkDelta+'Q/Q',] 4906 if ProfDict['ifDQ']: 4907 choice += [GkDelta+'Q/Q in data'] 4908 dQSel = wx.RadioBox(G2frame.dataDisplay,wx.ID_ANY,'Instrument resolution type:',choices=choice, 4909 majorDimension=0,style=wx.RA_SPECIFY_COLS) 4910 dQSel.SetStringSelection(data['dQ type']) 4911 dQSel.Bind(wx.EVT_RADIOBOX,OndQSel) 4912 resol.Add(dQSel,0,WACV) 4913 resol.Add(wx.StaticText(G2frame.dataDisplay,label=' (FWHM %): '),0,WACV) 4914 resol.Add(G2G.ValidatedTxtCtrl(G2frame.dataDisplay,data['Resolution'],0,nDig=(10,3),min=0.,max=5.),0,WACV) 4910 4915 controlSizer.Add(resol,0,WACV) 4911 4916 minimiz = wx.BoxSizer(wx.HORIZONTAL) … … 4928 4933 sld.Bind(wx.EVT_CHECKBOX, OnSLDplot) 4929 4934 plotSizer.Add(sld,0,WACV) 4935 plotSizer.Add(wx.StaticText(G2frame.dataDisplay,label=' Zero position location: '),0,WACV) 4936 poslist = ['Top','Bottom'] 4937 refpos = wx.ComboBox(G2frame.dataDisplay,value=data['Zero'],choices=poslist, 4938 style=wx.CB_READONLY|wx.CB_DROPDOWN) 4939 refpos.Bind(wx.EVT_COMBOBOX, OnRefPos) 4940 plotSizer.Add(refpos,0,WACV) 4930 4941 # q4fft = wx.CheckBox(G2frame.dataDisplay,label='Plot fft?') 4931 4942 # q4fft.Bind(wx.EVT_CHECKBOX, OnQ4fftplot) … … 5180 5191 Substances = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,G2frame.PatternId, 'Substances'))['Substances'] 5181 5192 ProfDict,Profile,Name = G2frame.PatternTree.GetItemPyData(G2frame.PatternId)[:3] 5193 if 'ifDQ' not in ProfDict: 5194 ProfDict['ifDQ'] = np.any(Profile[5]) 5195 data['dQ type'] = 'None' 5182 5196 Limits = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,G2frame.PatternId, 'Limits')) 5183 5197 Inst = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,G2frame.PatternId, 'Instrument Parameters'))[0] -
TabularUnified trunk/imports/G2pwd_xye.py ¶
r2780 r2783 26 26 extensionlist=('.xye','.chi',), 27 27 strictExtension=False, 28 formatName = 'Topas xye &Fit2D chi',29 longFormatName = 'Topas .xye &Fit2D .chi powder data file'28 formatName = 'Topas xye or 2th Fit2D chi', 29 longFormatName = 'Topas .xye or 2th Fit2D .chi powder data file' 30 30 ) 31 31 … … 39 39 if '.chi' in filepointer.name: 40 40 self.Chi = True 41 if2theta = False 41 42 for i,S in enumerate(filepointer): 42 43 if not S: … … 46 47 if self.Chi: 47 48 if i < 4: 49 if '2-theta' in S.lower(): 50 if2theta = True 48 51 continue 49 52 else: 50 53 begin = False 51 54 else: 55 if2theta = True 52 56 if gotCcomment and S.find('*/') > -1: 53 57 begin = False … … 62 66 # valid line to read? 63 67 #vals = S.split() 68 if not if2theta: 69 self.errors = 'Not a 2-theta chi file' 70 return False 64 71 vals = S.replace(',',' ').replace(';',' ').split() 65 72 if len(vals) == 2 or len(vals) == 3:
Note: See TracChangeset
for help on using the changeset viewer.