Changeset 2776
- Timestamp:
- Apr 11, 2017 10:39:15 AM (6 years ago)
- Location:
- trunk
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/GSASIIpwd.py
r2774 r2776 1946 1946 values.append(data[parm][0]) 1947 1947 bounds.append(Bounds[parm]) 1948 parmDict['nLayers'] = len(data['Layers']) 1948 parmDict['Layer Seq'] = np.array(['0',]+data['Layer Seq'].split()+[str(len(data['Layers'])-1),],dtype=int) 1949 parmDict['nLayers'] = len(parmDict['Layer Seq']) 1949 1950 for ilay,layer in enumerate(data['Layers']): 1950 1951 name = layer['Name'] … … 2009 2010 Nlayers = parmDict['nLayers'] 2010 2011 Res = parmDict['Res'] 2011 Gaus = np.zeros((9,len(Q)))2012 2012 depth = np.zeros(Nlayers) 2013 2013 rho = np.zeros(Nlayers) 2014 2014 irho = np.zeros(Nlayers) 2015 2015 sigma = np.zeros(Nlayers) 2016 for ilay in range(Nlayers):2017 cid = str( ilay)+';'2016 for ilay,lay in enumerate(parmDict['Layer Seq']): 2017 cid = str(lay)+';' 2018 2018 depth[ilay] = parmDict[cid+'Thick'] 2019 2019 sigma[ilay] = parmDict[cid+'Rough'] … … 2029 2029 Ic += (A**2+B**2)*Scale 2030 2030 return Ic 2031 2032 def Smear(f,w,z,dq): 2033 y = f(w,z) 2034 s = dq/ateln2 2035 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.137023 2042 return y 2031 2043 2032 2044 def estimateT0(takestep): … … 2143 2155 2144 2156 sq2 = np.sqrt(2.) 2145 Nlayers = len(data['Layers']) 2157 laySeq = ['0',]+data['Layer Seq'].split()+[str(len(data['Layers'])-1),] 2158 Nlayers = len(laySeq) 2159 laySeq = np.array(laySeq,dtype=int) 2146 2160 interfaces = np.zeros(Nlayers) 2147 2161 rho = np.zeros(Nlayers) 2148 irho = np.zeros(Nlayers)2149 2162 sigma = np.zeros(Nlayers) 2163 name = data['Layers'][0]['Name'] 2150 2164 thick = 0. 2151 for ilayer,layer in enumerate(data['Layers']): 2165 for ilay,lay in enumerate(laySeq): 2166 layer = data['Layers'][lay] 2152 2167 name = layer['Name'] 2153 if 'Thick' in layer: #skips first & last layers2168 if 'Thick' in layer: 2154 2169 thick += layer['Thick'][0] 2155 interfaces[ilayer] = layer['Thick'][0]+interfaces[ilayer-1] 2156 if 'Rough' in layer: #skips first layer 2157 sigma[ilayer] = max(0.001,layer['Rough'][0]) 2158 rho[ilayer] = Substances[name]['Scatt density']*layer['DenMul'][0] 2170 interfaces[ilay] = layer['Thick'][0]+interfaces[ilay-1] 2171 if 'Rough' in layer: 2172 sigma[ilay] = max(0.001,layer['Rough'][0]) 2173 if name != 'vacuum': 2174 rho[ilay] = Substances[name]['Scatt density']*layer['DenMul'][0] 2159 2175 if 'Mag SLD' in layer: 2160 rho[ilay er] += layer['Mag SLD'][0]2161 irho[ilayer] = Substances[name].get('XImag density',0.)*layer['DenMul'][0]2176 rho[ilay] += layer['Mag SLD'][0] 2177 name = data['Layers'][-1]['Name'] 2162 2178 x = np.linspace(-0.15*thick,1.15*thick,1000,endpoint=True) 2163 2179 xr = np.flipud(x) … … 2182 2198 Ic[:] = 0 2183 2199 Scale = data['Scale'][0] 2184 Nlayers = len(data['Layers']) 2200 laySeq = ['0',]+data['Layer Seq'].split()+[str(len(data['Layers'])-1),] 2201 Nlayers = len(laySeq) 2185 2202 depth = np.zeros(Nlayers) 2186 2203 rho = np.zeros(Nlayers) 2187 2204 irho = np.zeros(Nlayers) 2188 2205 sigma = np.zeros(Nlayers) 2189 for ilayer,layer in enumerate(data['Layers']): 2206 for ilay,lay in enumerate(np.array(laySeq,dtype=int)): 2207 layer = data['Layers'][lay] 2190 2208 name = layer['Name'] 2191 2209 if 'Thick' in layer: #skips first & last layers 2192 depth[ilay er] = layer['Thick'][0]2210 depth[ilay] = layer['Thick'][0] 2193 2211 if 'Rough' in layer: #skips first layer 2194 sigma[ilay er] = layer['Rough'][0]2212 sigma[ilay] = layer['Rough'][0] 2195 2213 if 'unit scatter' == name: 2196 rho[ilay er] = layer['DenMul'][0]2197 irho[ilay er] = layer['iDenMul'][0]2214 rho[ilay] = layer['DenMul'][0] 2215 irho[ilay] = layer['iDenMul'][0] 2198 2216 else: 2199 rho[ilay er] = Substances[name]['Scatt density']*layer['DenMul'][0]2200 irho[ilay er] = Substances[name].get('XImag density',0.)*layer['DenMul'][0]2217 rho[ilay] = Substances[name]['Scatt density']*layer['DenMul'][0] 2218 irho[ilay] = Substances[name].get('XImag density',0.)*layer['DenMul'][0] 2201 2219 if 'Mag SLD' in layer: 2202 rho[ilay er] += layer['Mag SLD'][0]2220 rho[ilay] += layer['Mag SLD'][0] 2203 2221 A,B = abeles(0.5*Q[iBeg:iFin],depth,rho,irho,sigma[1:]) #Q --> k, offset roughness for abeles 2204 2222 Ic[iBeg:iFin] = (A**2+B**2)*Scale+Ib[iBeg:iFin] -
trunk/GSASIIpwdGUI.py
r2774 r2776 4781 4781 disLabel = r'$Distance\ from\ top\ surface,\ \AA$' 4782 4782 if od['value_2']: 4783 nLines = len(model['Layers'])-1 4783 laySeq = model['Layer Seq'].split() 4784 nLines = len(laySeq)+1 4784 4785 linePos = np.zeros(nLines) 4785 for ilay,lay er in enumerate(model['Layers'][1:-1]):4786 linePos[ilay+1:] += layer.get('Thick',[0.,False])[0]4786 for ilay,lay in enumerate(np.fromstring(data['Layer Seq'],dtype=int,sep=' ')): 4787 linePos[ilay+1:] += model['Layers'][lay].get('Thick',[0.,False])[0] 4787 4788 if od['value_1']: 4788 4789 linePos = linePos[-1]-linePos … … 4796 4797 4797 4798 def ModelPlot(data,x,xr,y): 4798 nLines = len(data['Layers'])-1 4799 laySeq = data['Layer Seq'].split() 4800 nLines = len(laySeq)+1 4799 4801 linePos = np.zeros(nLines) 4800 for ilay,lay er in enumerate(data['Layers'][1:-1]):4801 linePos[ilay+1:] += layer.get('Thick',[0.,False])[0]4802 for ilay,lay in enumerate(np.fromstring(data['Layer Seq'],dtype=int,sep=' ')): 4803 linePos[ilay+1:] += data['Layers'][lay].get('Thick',[0.,False])[0] 4802 4804 if data['Zero'] == 'Top': 4803 4805 XY = [[x,y],] … … 4922 4924 Name = Obj.GetValue() 4923 4925 data['Layers'][item]['Name'] = Name 4924 data['Layers'][item]['Rough'] = [0.,False] 4925 data['Layers'][item]['Thick'] = [1.,False] 4926 if 'Rough' not in data['Layers'][item]: 4927 data['Layers'][item]['Rough'] = [0.,False] 4928 if 'Thick' not in data['Layers'][item]: 4929 data['Layers'][item]['Thick'] = [10.,False] 4926 4930 if 'N' in Inst['Type'][0]: 4927 4931 data['Layers'][item]['Mag SLD'] = [0.,False] … … 4941 4945 ind = Indx[Obj.GetId()] 4942 4946 data['Layers'].insert(ind+1,{'Name':'vacuum','DenMul':[1.0,False],}) 4947 data['Layer Seq'] = ' '.join([str(i+1) for i in range(len(data['Layers'])-2)]) 4943 4948 G2pwd.REFDModelFxn(Profile,Inst,Limits,Substances,data) 4944 4949 G2plt.PlotPatterns(G2frame,plotType='REFD') … … 4949 4954 ind = Indx[Obj.GetId()] 4950 4955 del data['Layers'][ind] 4956 data['Layer Seq'] = ' '.join([str(i+1) for i in range(len(data['Layers'])-2)]) 4951 4957 G2pwd.REFDModelFxn(Profile,Inst,Limits,Substances,data) 4952 4958 G2plt.PlotPatterns(G2frame,plotType='REFD') … … 5069 5075 5070 5076 return layerSizer 5077 5078 def OnRepSeq(event): 5079 event.Skip() 5080 stack = repseq.GetValue() 5081 nstar = stack.count('*') 5082 if nstar: 5083 try: 5084 newstack = '' 5085 Istar = 0 5086 for star in range(nstar): 5087 Istar = stack.index('*',Istar+1) 5088 iB = stack[:Istar].rfind(' ') 5089 if iB == -1: 5090 mult = int(stack[:Istar]) 5091 else: 5092 mult = int(stack[iB:Istar]) 5093 pattern = stack[Istar+2:stack.index(')',Istar)]+' ' 5094 newstack += mult*pattern 5095 stack = newstack 5096 except ValueError: 5097 stack += ' Error in string' 5098 wx.MessageBox(stack,'Error',style=wx.ICON_EXCLAMATION) 5099 repseq.SetValue(data['Layer Seq']) 5100 return 5101 try: 5102 Slist = np.array(stack.split(),dtype=int) 5103 except ValueError: 5104 stack += ' Error in string' 5105 repseq.SetValue(data['Layer Seq']) 5106 wx.MessageBox(stack,'Error',style=wx.ICON_EXCLAMATION) 5107 return 5108 if len(Slist) < 1: 5109 stack += ' Error in sequence - too short!' 5110 Stest = np.arange(1,Nlayers-1) 5111 if not np.all(np.array([item in Stest for item in Slist])): 5112 stack += ' Error: invalid layer selection' 5113 elif not np.all(np.ediff1d(Slist)): 5114 stack += ' Error: Improbable sequence or bad string' 5115 if 'Error' in stack: 5116 repseq.SetValue(data['Layer Seq']) 5117 wx.MessageBox(stack,'Error',style=wx.ICON_EXCLAMATION) 5118 return 5119 else: 5120 data['Layer Seq'] = stack 5121 repseq.SetValue(stack) 5122 G2pwd.REFDModelFxn(Profile,Inst,Limits,Substances,data) 5123 x,xr,y = G2pwd.makeSLDprofile(data,Substances) 5124 ModelPlot(data,x,xr,y) 5125 G2plt.PlotPatterns(G2frame,plotType='REFD') 5071 5126 5072 5127 Substances = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,G2frame.PatternId, 'Substances'))['Substances'] … … 5094 5149 mainSizer.Add(wx.StaticText(G2frame.dataDisplay,label=' Global parameters:'),0,WACV) 5095 5150 mainSizer.Add(OverallSizer()) 5096 G2G.HorizontalLine(mainSizer,G2frame.dataDisplay) 5151 G2G.HorizontalLine(mainSizer,G2frame.dataDisplay) 5152 Nlayers = len(data['Layers']) 5153 if Nlayers > 2: 5154 if 'Layer Seq' not in data: 5155 data['Layer Seq'] = ' '.join([str(i+1) for i in range(Nlayers-2)]) 5156 lineSizer = wx.BoxSizer(wx.HORIZONTAL) 5157 lineSizer.Add(wx.StaticText(G2frame.dataDisplay,label=' Layer sequence: '),0,WACV) 5158 repseq = wx.TextCtrl(G2frame.dataDisplay,value = data['Layer Seq'],style=wx.TE_PROCESS_ENTER,size=(500,25)) 5159 repseq.Bind(wx.EVT_TEXT_ENTER,OnRepSeq) 5160 repseq.Bind(wx.EVT_KILL_FOCUS,OnRepSeq) 5161 lineSizer.Add(repseq,0,WACV) 5162 mainSizer.Add(lineSizer) 5163 Str = ' Use sequence nos. from:' 5164 for ilay,layer in enumerate(data['Layers'][1:-1]): 5165 Str += ' %d: %s'%(ilay+1,layer['Name']) 5166 mainSizer.Add(wx.StaticText(G2frame.dataDisplay,label=Str),0,WACV) 5167 mainSizer.Add(wx.StaticText(G2frame.dataDisplay,label=' NB: Repeat sequence by e.g. 6*(1 2) '),0,WACV) 5097 5168 G2G.HorizontalLine(mainSizer,G2frame.dataDisplay) 5098 5169 mainSizer.Add(wx.StaticText(G2frame.dataDisplay,label=' Layers: scatt. densities are 10%scm%s = 10%s%s%s'%(Pwr10,Pwrm2,Pwrm6,Angstr,Pwrm2)),0,WACV) … … 5104 5175 Size = mainSizer.Fit(G2frame.dataFrame) 5105 5176 Size[0] += 25 5177 Size[1] = min(700,Size[1]) 5106 5178 G2frame.dataFrame.setSizePosLeft(Size) 5107 5179 # x,xr,y = G2pwd.makeSLDprofile(data,Substances) -
trunk/Substances.py
r2763 r2776 40 40 'ZrO2':{'Elements':{'Zr':{'Num':1.},'O':{'Num':3,}},'Density':6.134,}, 41 41 'Y(0.16)Zr(0.84)O2':{'Elements':{'Y':{'Num':0.16},'Zr':{'Num':0.84},'O':{'Num':2.}},'Density':6.01,}, 42 'Ag':{'Elements':{'Ag':{'Num':1}},'Volume':17.066}, 43 'Al':{'Elements':{'Al':{'Num':1}},'Volume':16.582}, 44 'Au':{'Elements':{'Au':{'Num':1}},'Volume':16.953}, 45 'Co':{'Elements':{'Co':{'Num':1}},'Volume':11.0177}, 46 'FeF2':{'Elements':{'Fe':{'Num':1},'F':{'Num':2}},'Volume':36.352}, 47 'GaAs':{'Elements':{'Ga':{'Num':1},'As':{'Num':1}},'Volume':45.173}, 48 'LaAlO3':{'Elements':{'La':{'Num':1},'Al':{'Num':1},'O':{'Num':3}},'Volume':54.503}, 49 'LaFeO3':{'Elements':{'La':{'Num':1},'Al':{'Num':1},'O':{'Num':3}},'Volume':50.355}, 50 'LaMnO3':{'Elements':{'La':{'Num':1},'Mn':{'Num':1},'o':{'Num':3}},'Volume':58.413}, 51 'MgF2':{'Elements':{'Mg':{'Num':1},'F':{'Num':2}},'Volume':32.58}, 52 'MgO':{'Elements':{'Mg':{'Num':1},'O':{'Num':1}},'Volume':17.977}, 53 'MnF2':{'Elements':{'Mn':{'Num':1},'F':{'Num':2}},'Volume':38.56}, 54 'NiO':{'Elements':{'Ni':{'Num':1},'O':{'Num':1}},'Volume':18.22}, 55 'Pd':{'Elements':{'Pd':{'Num':1}},'Volume':14.738}, 56 'Pt':{'Elements':{'Pt':{'Num':1}},'Volume':15.14}, 57 'SrTiO3':{'Elements':{'Sr':{'Num':1},'Ti':{'Num':1},'O':{'Num':1}},'Volume':26.71}, 58 'V':{'Elements':{'V':{'Num':1}},'Volume':19.26}, 42 59 } 43 60 # they should not be duplicated in the UserSubstances.py file:
Note: See TracChangeset
for help on using the changeset viewer.