Changeset 2763
- Timestamp:
- Mar 29, 2017 1:57:33 PM (6 years ago)
- Location:
- trunk
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/GSASIIgrid.py
r2762 r2763 144 144 [ wxID_MODELCOPY,wxID_MODELFIT,wxID_MODELADD,wxID_ELEMENTADD,wxID_ELEMENTDELETE, 145 145 wxID_ADDSUBSTANCE,wxID_LOADSUBSTANCE,wxID_DELETESUBSTANCE,wxID_COPYSUBSTANCE, 146 wxID_MODELUNDO,wxID_MODELFITALL,wxID_MODELCOPYFLAGS,wxID_RELOADSUBSTANCES 147 ] = [wx.NewId() for item in range(13)] 146 wxID_MODELUNDO,wxID_MODELFITALL,wxID_MODELCOPYFLAGS,wxID_RELOADSUBSTANCES, 147 wxID_MODELPLOT, 148 ] = [wx.NewId() for item in range(14)] 148 149 149 150 [ wxID_SELECTPHASE,wxID_PWDHKLPLOT,wxID_PWD3DHKLPLOT,wxID_3DALLHKLPLOT,wxID_MERGEHKL, … … 2197 2198 self.REFDModelEdit.Append(id=wxID_MODELCOPY, kind=wx.ITEM_NORMAL,text='Copy', 2198 2199 help='Copy model parameters to other histograms') 2199 self.REFDModelEdit.Append(id=wxID_MODEL COPYFLAGS, kind=wx.ITEM_NORMAL,text='Copy flags',2200 help=' Copy model refinement flags to otherhistograms')2200 self.REFDModelEdit.Append(id=wxID_MODELPLOT, kind=wx.ITEM_NORMAL,text='Plot', 2201 help='Plot model SDL for selected histograms') 2201 2202 self.PostfillDataMenu() 2202 2203 -
trunk/GSASIIpwd.py
r2761 r2763 28 28 import scipy.stats as st 29 29 import scipy.optimize as so 30 import scipy.special as sp 30 31 31 32 import GSASIIpath … … 1931 1932 name = layer['Name'] 1932 1933 cid = str(ilay)+';' 1933 for parm in ['Thick','Rough','DenMul' ]:1934 for parm in ['Thick','Rough','DenMul','Mag SLD']: 1934 1935 parmDict[cid+parm] = layer.get(parm,[0.,False])[0] 1935 1936 if layer.get(parm,[0.,False])[1]: … … 1959 1960 line2 = ' Scattering density: Real %.5g'%(Substances[name]['Scatt density']*parmDict[cid+'DenMul']) 1960 1961 line2 += ' Imag %.5g'%(Substances[name].get('XImag density',0.)**parmDict[cid+'DenMul']) 1961 for parm in ['Thick','Rough','DenMul' ]:1962 for parm in ['Thick','Rough','DenMul','Mag SLD']: 1962 1963 if parm in layer: 1963 1964 layer[parm][0] = parmDict[cid+parm] … … 1991 1992 sigma[ilay] = parmDict[cid+'Rough'] 1992 1993 rho[ilay] = parmDict[cid+'rho']*parmDict[cid+'DenMul'] 1994 if cid+'Mag SLD' in parmDict: 1995 rho[ilay] += parmDict[cid+'Mag SLD'] 1993 1996 irho[ilay] = parmDict[cid+'irho']*parmDict[cid+'DenMul'] 1994 1997 A,B = abeles(0.5*Q,depth,rho,irho,sigma[1:]) #Q --> k, offset roughness for abeles … … 2003 2006 Ifin = np.searchsorted(Q,Qmax)+1 #include last point 2004 2007 Ic[:] = 0 2005 Bounds = {'Scale':[data['Scale'][0]*.85,data['Scale'][0]/.85],'FltBack':[None,None],'DenMul':[0.,None],'Thick':[1.,None],'Rough':[0.,None]} 2008 Bounds = {'Scale':[data['Scale'][0]*.85,data['Scale'][0]/.85],'FltBack':[None,None], 2009 'DenMul':[0.,None],'Thick':[1.,None],'Rough':[0.,None],'Mag SLD':[-10.,10.]} 2006 2010 parmDict,varyList,values,bounds = GetModelParms() 2007 2011 Msg = 'Failed to converge' … … 2056 2060 indx = Negs.nonzero() 2057 2061 name = varyList[indx[0][0]] 2058 if name != 'FltBack' :2062 if name != 'FltBack' and 'Mag SLD' not in name: 2059 2063 Msg += ' negative coefficient for '+name+'!' 2060 2064 raise ValueError … … 2074 2078 print Msg 2075 2079 return False,0,0,0,0,0,0,Msg 2080 2081 def makeSLDprofile(data,Substances): 2082 2083 sq2 = np.sqrt(2.) 2084 Nlayers = len(data['Layers']) 2085 interfaces = np.zeros(Nlayers) 2086 rho = np.zeros(Nlayers) 2087 irho = np.zeros(Nlayers) 2088 sigma = np.zeros(Nlayers) 2089 thick = 0. 2090 for ilayer,layer in enumerate(data['Layers']): 2091 name = layer['Name'] 2092 if 'Thick' in layer: #skips first & last layers 2093 thick += layer['Thick'][0] 2094 interfaces[ilayer] = layer['Thick'][0]+interfaces[ilayer-1] 2095 if 'Rough' in layer: #skips first layer 2096 sigma[ilayer] = max(0.001,layer['Rough'][0]) 2097 rho[ilayer] = Substances[name]['Scatt density']*layer['DenMul'][0] 2098 if 'Mag SLD' in layer: 2099 rho[ilayer] += layer['Mag SLD'][0] 2100 irho[ilayer] = Substances[name].get('XImag density',0.)*layer['DenMul'][0] 2101 x = np.linspace(-0.15*thick,1.15*thick,1000,endpoint=True) 2102 xr = np.flipud(x) 2103 interfaces[-1] = x[-1] 2104 y = np.ones_like(x)*rho[0] 2105 iBeg = 0 2106 for ilayer in range(Nlayers-1): 2107 delt = rho[ilayer+1]-rho[ilayer] 2108 iPos = np.searchsorted(x,interfaces[ilayer]) 2109 y[iBeg:] += (delt/2.)*sp.erfc((interfaces[ilayer]-x[iBeg:])/(sq2*sigma[ilayer+1])) 2110 iBeg = iPos 2111 return x,xr,y 2076 2112 2077 2113 def REFDModelFxn(Profile,Inst,Limits,Substances,data): … … 2097 2133 sigma[ilayer] = layer['Rough'][0] 2098 2134 rho[ilayer] = Substances[name]['Scatt density']*layer['DenMul'][0] 2135 if 'Mag SLD' in layer: 2136 rho[ilayer] += layer['Mag SLD'][0] 2099 2137 irho[ilayer] = Substances[name].get('XImag density',0.)*layer['DenMul'][0] 2100 2138 A,B = abeles(0.5*Q[iBeg:iFin],depth,rho,irho,sigma[1:]) #Q --> k, offset roughness for abeles -
trunk/GSASIIpwdGUI.py
r2762 r2763 1981 1981 insDef = dict(zip(instkeys,[data[key][0] for key in instkeys])) 1982 1982 insRef = {} 1983 elif 'R' in data['Type'][0]: #low angle data 1984 insVal = dict(zip(instkeys,[data[key][1] for key in instkeys])) 1985 insDef = dict(zip(instkeys,[data[key][0] for key in instkeys])) 1986 insRef = {} 1983 1987 RefObj = {} 1984 1988 waves = {'CuKa':[1.54051,1.54433],'TiKa':[2.74841,2.75207],'CrKa':[2.28962,2.29351], … … 2017 2021 #G2frame.Bind(wx.EVT_MENU,OnWaveChange,id=G2gd.wxID_CHANGEWAVETYPE) 2018 2022 G2frame.Bind(wx.EVT_MENU,OnCopy1Val,id=G2gd.wxID_INST1VAL) 2019 elif 'L' in insVal['Type'] : #SASD data menu commands2023 elif 'L' in insVal['Type'] or 'R' in insVal['Type']: #SASD data menu commands 2020 2024 G2gd.SetDataMenuBar(G2frame,G2frame.dataFrame.SASDInstMenu) 2021 2025 if not G2frame.dataFrame.GetStatusBar(): … … 2156 2160 2157 2161 def OnSetScale(event): 2162 if histName[:4] in ['REFD','PWDR']: 2163 Scale = data['Scale'][0] 2164 dlg = wx.MessageDialog(G2frame,'Rescale data by %.2f?'%(Scale),'Rescale data',wx.OK|wx.CANCEL) 2165 try: 2166 if dlg.ShowModal() == wx.ID_OK: 2167 pId = G2gd.GetPatternTreeItemId(G2frame,G2frame.root,histName) 2168 y,w = G2frame.PatternTree.GetItemPyData(pId)[1][1:3] 2169 y *= Scale 2170 w /= Scale**2 2171 data['Scale'][0] = 1.0 2172 finally: 2173 dlg.Destroy() 2174 G2plt.PlotPatterns(G2frame,plotType='SASD',newPlot=True) 2175 UpdateSampleGrid(G2frame,data) 2176 return 2177 #SASD rescaliing 2158 2178 histList = [] 2159 2179 item, cookie = G2frame.PatternTree.GetFirstChild(G2frame.root) … … 2352 2372 G2frame.Bind(wx.EVT_MENU, OnCopy1Val, id=G2gd.wxID_SAMPLE1VAL) 2353 2373 G2frame.Bind(wx.EVT_MENU, OnAllSampleLoad, id=G2gd.wxID_ALLSAMPLELOAD) 2354 if 'SASD' in histName:2374 if histName[:4] in ['SASD','REFD','PWDR']: 2355 2375 G2frame.dataFrame.SetScale.Enable(True) 2356 2376 if not G2frame.dataFrame.GetStatusBar(): … … 3786 3806 El = El.strip().capitalize() 3787 3807 Info = G2elem.GetAtomInfo(El) 3788 Info.update({'Num':1 })3808 Info.update({'Num':1.}) 3789 3809 data['Substances'][name]['Elements'][El] = Info 3790 3810 isotopes = Info['Isotopes'].keys() … … 3914 3934 0,WACV) 3915 3935 num = G2G.ValidatedTxtCtrl(G2frame.dataDisplay,data['Substances'][name]['Elements'][El],'Num', 3916 nDig=(10,2 ),typeHint=float,OnLeave=OnNum)3936 nDig=(10,2,'f'),typeHint=float,OnLeave=OnNum) 3917 3937 Indx[num.GetId()] = [name,El,'Num'] 3918 3938 elSizer.Add(num,0,WACV) … … 4697 4717 ''' 4698 4718 def OnCopyModel(event): 4699 print 'copy model' 4700 event.Skip() 4701 4702 def OnCopyFlags(event): 4703 print 'copy flags' 4704 event.Skip() 4719 hst = G2frame.PatternTree.GetItemText(G2frame.PatternId) 4720 histList = GetHistsLikeSelected(G2frame) 4721 if not histList: 4722 G2frame.ErrorDialog('No match','No histograms match '+hst,G2frame.dataFrame) 4723 return 4724 copyList = [] 4725 dlg = G2G.G2MultiChoiceDialog(G2frame.dataFrame,'Copy reflectivity models from\n'+str(hst[5:])+' to...', 4726 'Copy parameters', histList) 4727 try: 4728 if dlg.ShowModal() == wx.ID_OK: 4729 for i in dlg.GetSelections(): 4730 copyList.append(histList[i]) 4731 finally: 4732 dlg.Destroy() 4733 for item in copyList: 4734 Id = G2gd.GetPatternTreeItemId(G2frame,G2frame.root,item) 4735 G2frame.PatternTree.SetItemPyData( 4736 G2gd.GetPatternTreeItemId(G2frame,Id,'Models'),copy.copy(data)) 4705 4737 4706 4738 def OnFitModel(event): … … 4708 4740 SaveState() 4709 4741 G2pwd.REFDRefine(Profile,ProfDict,Inst,Limits,Substances,data) 4742 x,xr,y = G2pwd.makeSLDprofile(data,Substances) 4743 ModelPlot(data,x,xr,y) 4710 4744 G2plt.PlotPatterns(G2frame,plotType='REFD') 4711 4745 wx.CallLater(100,UpdateREFDModelsGrid,G2frame,data) 4746 4747 def OnModelPlot(event): 4748 hst = G2frame.PatternTree.GetItemText(G2frame.PatternId) 4749 histList = [hst,] 4750 histList += GetHistsLikeSelected(G2frame) 4751 if not histList: 4752 G2frame.ErrorDialog('No match','No histograms match '+hst,G2frame.dataFrame) 4753 return 4754 plotList = [] 4755 od = {'label_1':'Zero at substrate','value_1':False} 4756 dlg = G2G.G2MultiChoiceDialog(G2frame.dataFrame,'Plot reflectivity models for:', 4757 'Plot SLD models', histList,extraOpts=od) 4758 try: 4759 if dlg.ShowModal() == wx.ID_OK: 4760 for i in dlg.GetSelections(): 4761 plotList.append(histList[i]) 4762 finally: 4763 dlg.Destroy() 4764 XY = [] 4765 for item in plotList: 4766 mId = G2gd.GetPatternTreeItemId(G2frame,G2frame.root,item) 4767 model = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,mId,'Models')) 4768 Substances = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,mId,'Substances'))['Substances'] 4769 x,xr,y = G2pwd.makeSLDprofile(model,Substances) 4770 if od['value_1']: 4771 XY.append([xr,y]) 4772 disLabel = r'$Distance\ from\ substrate,\ \AA$' 4773 else: 4774 XY.append([x,y]) 4775 disLabel = r'$Distance\ from\ top\ surface,\ \AA$' 4776 G2plt.PlotXY(G2frame,XY,labelX=disLabel,labelY=r'$SLD,\ 10^{10}cm^{-2}$',newPlot=True, 4777 Title='Scattering length density',lines=True,names=[]) 4712 4778 4713 4779 def OnFitModelAll(event): 4714 4780 print 'fit all model' 4715 4781 event.Skip() 4782 4783 def ModelPlot(data,x,xr,y): 4784 if data['Zero']: 4785 XY = [[x,y],] 4786 disLabel = r'$Distance\ from\ top\ surface,\ \AA$' 4787 else: 4788 XY = [[xr,y],] 4789 disLabel = r'$Distance\ from\ substrate,\ \AA$' 4790 G2plt.PlotXY(G2frame,XY,labelX=disLabel,labelY=r'$SLD,\ 10^{10}cm^{-2}$',newPlot=False, 4791 Title='Scattering length density',lines=True,names=[]) 4716 4792 4717 4793 def OnUnDo(event): … … 4721 4797 G2frame.dataFrame.REFDUndo.Enable(False) 4722 4798 G2pwd.REFDModelFxn(Profile,Inst,Limits,Substances,data) 4799 x,xr,y = G2pwd.makeSLDprofile(data,Substances) 4800 ModelPlot(data,x,xr,y) 4723 4801 G2plt.PlotPatterns(G2frame,plotType='REFD') 4724 4802 wx.CallLater(100,UpdateREFDModelsGrid,G2frame,data) … … 4786 4864 4787 4865 G2pwd.REFDModelFxn(Profile,Inst,Limits,Substances,data) 4866 x,xr,y = G2pwd.makeSLDprofile(data,Substances) 4867 ModelPlot(data,x,xr,y) 4788 4868 G2plt.PlotPatterns(G2frame,plotType='REFD') 4789 4869 … … 4815 4895 data['Layers'][item]['Rough'] = [0.,False] 4816 4896 data['Layers'][item]['Thick'] = [1.,False] 4897 if 'N' in Inst['Type'][0]: 4898 data['Layers'][item]['Mag SLD'] = [0.,False] 4817 4899 G2pwd.REFDModelFxn(Profile,Inst,Limits,Substances,data) 4818 4900 G2plt.PlotPatterns(G2frame,plotType='REFD') … … 4844 4926 return 4845 4927 G2pwd.REFDModelFxn(Profile,Inst,Limits,Substances,data) 4928 x,xr,y = G2pwd.makeSLDprofile(data,Substances) 4929 ModelPlot(data,x,xr,y) 4846 4930 G2plt.PlotPatterns(G2frame,plotType='REFD') 4847 4931 wx.CallLater(100,UpdateREFDModelsGrid,G2frame,data) 4848 4932 4933 Indx = {} 4849 4934 layerSizer = wx.BoxSizer(wx.VERTICAL) 4850 layerSizer.Add(wx.StaticText(G2frame.dataDisplay,label=' Top layer (superphase):'),0,WACV) 4851 toplayer = wx.BoxSizer(wx.HORIZONTAL) 4852 toplayer.Add(wx.StaticText(G2frame.dataDisplay,label=' Substance: '),0,WACV) 4853 topName = data['Layers'][0]['Name'] 4854 topSel = wx.ComboBox(G2frame.dataDisplay,value=topName, 4855 choices=Substances.keys(),style=wx.CB_READONLY|wx.CB_DROPDOWN) 4856 Indx = {topSel.GetId():0} 4857 topSel.Bind(wx.EVT_COMBOBOX,OnSelect) 4858 toplayer.Add(topSel,0,WACV) 4859 if topName != 'vacuum': 4860 toplayer.Add(wx.StaticText(G2frame.dataDisplay,label=' Den. Mult.: '),0,WACV) 4861 toplayer.Add(G2G.ValidatedTxtCtrl(G2frame.dataDisplay,data['Layers'][0]['DenMul'],0, 4862 nDig=(10,4),typeHint=float,OnLeave=Recalculate),0,WACV) 4863 varBox = wx.CheckBox(G2frame.dataDisplay,label='Refine?') 4864 Indx[varBox.GetId()] = [0,'DenMul'] 4865 varBox.SetValue(data['Layers'][0]['DenMul'][1]) 4866 varBox.Bind(wx.EVT_CHECKBOX, OnCheckBox) 4867 toplayer.Add(varBox,0,WACV) 4868 toplayer.Add(wx.StaticText(G2frame.dataDisplay, 4869 label=' Real scat. den.: %.4g'%(data['Layers'][0]['DenMul'][0]*Substances[topName]['Scatt density'])),0,WACV) 4870 if topName != 'unit scatter': 4871 toplayer.Add(wx.StaticText(G2frame.dataDisplay, 4872 label=' Imag scat. den.: %.4g'%(data['Layers'][0]['DenMul'][0]*Substances[topName]['XImag density'])),0,WACV) 4873 else: 4874 toplayer.Add(wx.StaticText(G2frame.dataDisplay,label=', air or gas'),0,WACV) 4875 layerSizer.Add(toplayer) 4876 insert = wx.Button(G2frame.dataDisplay,label='Insert') 4877 Indx[insert.GetId()] = 0 4878 insert.Bind(wx.EVT_BUTTON,OnInsertLayer) 4879 layerSizer.Add(insert) 4880 G2G.HorizontalLine(layerSizer,G2frame.dataDisplay) 4881 4882 for ilay,layer in enumerate(data['Layers'][1:-1]): 4883 layerSizer.Add(wx.StaticText(G2frame.dataDisplay,label=' Layer no. %d'%(ilay+1)),0,WACV) 4935 4936 for ilay,layer in enumerate(data['Layers']): 4937 if not ilay: 4938 layerSizer.Add(wx.StaticText(G2frame.dataDisplay,label=' Top layer (superphase):'),0,WACV) 4939 elif ilay < len(data['Layers'])-1: 4940 layerSizer.Add(wx.StaticText(G2frame.dataDisplay,label=' Layer no. %d'%(ilay)),0,WACV) 4941 else: 4942 layerSizer.Add(wx.StaticText(G2frame.dataDisplay,label=' Bottom layer (substrate):'),0,WACV) 4884 4943 midlayer = wx.BoxSizer(wx.HORIZONTAL) 4885 4944 midlayer.Add(wx.StaticText(G2frame.dataDisplay,label=' Substance: '),0,WACV) 4886 midName = data['Layers'][ilay +1]['Name']4945 midName = data['Layers'][ilay]['Name'] 4887 4946 midSel = wx.ComboBox(G2frame.dataDisplay,value=midName, 4888 4947 choices=Substances.keys(),style=wx.CB_READONLY|wx.CB_DROPDOWN) 4889 Indx[midSel.GetId()] = ilay +14948 Indx[midSel.GetId()] = ilay 4890 4949 midSel.Bind(wx.EVT_COMBOBOX,OnSelect) 4891 4950 midlayer.Add(midSel,0,WACV) 4892 4951 if midName != 'vacuum': 4893 4952 midlayer.Add(wx.StaticText(G2frame.dataDisplay,label=' Den. Mult.: '),0,WACV) 4894 midlayer.Add(G2G.ValidatedTxtCtrl(G2frame.dataDisplay,data['Layers'][ilay +1]['DenMul'],0,4953 midlayer.Add(G2G.ValidatedTxtCtrl(G2frame.dataDisplay,data['Layers'][ilay]['DenMul'],0, 4895 4954 nDig=(10,4),typeHint=float,OnLeave=Recalculate),0,WACV) 4896 4955 varBox = wx.CheckBox(G2frame.dataDisplay,label='Refine?') 4897 Indx[varBox.GetId()] = [ilay +1,'DenMul']4898 varBox.SetValue(data['Layers'][ilay +1]['DenMul'][1])4956 Indx[varBox.GetId()] = [ilay,'DenMul'] 4957 varBox.SetValue(data['Layers'][ilay]['DenMul'][1]) 4899 4958 varBox.Bind(wx.EVT_CHECKBOX, OnCheckBox) 4900 4959 midlayer.Add(varBox,0,WACV) 4960 realScatt = data['Layers'][ilay]['DenMul'][0]*Substances[midName]['Scatt density'] 4901 4961 midlayer.Add(wx.StaticText(G2frame.dataDisplay, 4902 label=' Real scat. den.: %.4g'%( data['Layers'][ilay+1]['DenMul'][0]*Substances[midName]['Scatt density'])),0,WACV)4962 label=' Real scat. den.: %.4g'%(realScatt)),0,WACV) 4903 4963 if midName != 'unit scatter': 4904 4964 midlayer.Add(wx.StaticText(G2frame.dataDisplay, 4905 label=' Imag scat. den.: %.4g'%(data['Layers'][ilay +1]['DenMul'][0]*Substances[midName]['XImag density'])),0,WACV)4965 label=' Imag scat. den.: %.4g'%(data['Layers'][ilay]['DenMul'][0]*Substances[midName]['XImag density'])),0,WACV) 4906 4966 else: 4907 4967 midlayer.Add(wx.StaticText(G2frame.dataDisplay,label=', air or gas'),0,WACV) 4908 4968 layerSizer.Add(midlayer) 4909 4969 if midName != 'vacuum': 4910 names = {'Rough':'Upper surface Roughness, '+Angstr,'Thick':'Layer Thickness, '+Angstr} 4911 parmsline = wx.BoxSizer(wx.HORIZONTAL) 4912 for parm in ['Rough','Thick']: 4913 parmsline.Add(wx.StaticText(G2frame.dataDisplay,label=' %s: '%(names[parm])),0,WACV) 4914 parmsline.Add(G2G.ValidatedTxtCtrl(G2frame.dataDisplay,data['Layers'][ilay+1][parm],0, 4915 nDig=(10,2),typeHint=float,OnLeave=Recalculate),0,WACV) 4970 if 'N' in Inst['Type'][0] and midName not in ['vacuum','unit scatter']: 4971 magLayer = wx.BoxSizer(wx.HORIZONTAL) 4972 magLayer.Add(wx.StaticText(G2frame.dataDisplay,label=' Magnetic SLD: '),0,WACV) 4973 magLayer.Add(G2G.ValidatedTxtCtrl(G2frame.dataDisplay,data['Layers'][ilay]['Mag SLD'],0, 4974 nDig=(10,4),typeHint=float,OnLeave=Recalculate),0,WACV) 4916 4975 varBox = wx.CheckBox(G2frame.dataDisplay,label='Refine?') 4917 Indx[varBox.GetId()] = [ilay +1,parm]4918 varBox.SetValue(data['Layers'][ilay +1][parm][1])4976 Indx[varBox.GetId()] = [ilay,'Mag SLD'] 4977 varBox.SetValue(data['Layers'][ilay]['Mag SLD'][1]) 4919 4978 varBox.Bind(wx.EVT_CHECKBOX, OnCheckBox) 4920 parmsline.Add(varBox,0,WACV) 4921 4922 layerSizer.Add(parmsline) 4923 newlayer = wx.BoxSizer(wx.HORIZONTAL) 4924 insert = wx.Button(G2frame.dataDisplay,label='Insert') 4925 Indx[insert.GetId()] = ilay+1 4926 insert.Bind(wx.EVT_BUTTON,OnInsertLayer) 4927 newlayer.Add(insert) 4928 delet = wx.Button(G2frame.dataDisplay,label='Delete') 4929 Indx[delet.GetId()] = ilay+1 4930 delet.Bind(wx.EVT_BUTTON,OnDeleteLayer) 4931 newlayer.Add(delet) 4932 layerSizer.Add(newlayer) 4933 G2G.HorizontalLine(layerSizer,G2frame.dataDisplay) 4934 4935 layerSizer.Add(wx.StaticText(G2frame.dataDisplay,label=' Bottom layer (substrate):'),0,WACV) 4936 bottomlayer = wx.BoxSizer(wx.HORIZONTAL) 4937 bottomlayer.Add(wx.StaticText(G2frame.dataDisplay,label=' Substance: '),0,WACV) 4938 bottomName = data['Layers'][-1]['Name'] 4939 bottomSel = wx.ComboBox(G2frame.dataDisplay,value=bottomName, 4940 choices=Substances.keys(),style=wx.CB_READONLY|wx.CB_DROPDOWN) 4941 Indx[bottomSel.GetId()] = len(data['Layers'])-1 4942 bottomSel.Bind(wx.EVT_COMBOBOX,OnSelect) 4943 bottomlayer.Add(bottomSel,0,WACV) 4944 if bottomName != 'vacuum': 4945 bottomlayer.Add(wx.StaticText(G2frame.dataDisplay,label=' Den. Mult.: '),0,WACV) 4946 bottomlayer.Add(G2G.ValidatedTxtCtrl(G2frame.dataDisplay,data['Layers'][-1]['DenMul'],0, 4947 nDig=(10,4),typeHint=float,OnLeave=Recalculate),0,WACV) 4948 varBox = wx.CheckBox(G2frame.dataDisplay,label='Refine?') 4949 Indx[varBox.GetId()] = [-1,'DenMul'] 4950 varBox.SetValue(data['Layers'][-1]['DenMul'][1]) 4951 varBox.Bind(wx.EVT_CHECKBOX, OnCheckBox) 4952 bottomlayer.Add(varBox,0,WACV) 4953 bottomlayer.Add(wx.StaticText(G2frame.dataDisplay, 4954 label=' Real scat. den.: %.4g'%(data['Layers'][-1]['DenMul'][0]*Substances[bottomName]['Scatt density'])),0,WACV) 4955 if bottomName != 'unit scatter': 4956 bottomlayer.Add(wx.StaticText(G2frame.dataDisplay, 4957 label=' Imag scat. den.: %.4g'%(data['Layers'][-1]['DenMul'][0]*Substances[bottomName]['XImag density'])),0,WACV) 4958 else: 4959 bottomlayer.Add(wx.StaticText(G2frame.dataDisplay,label=', air or gas'),0,WACV) 4960 layerSizer.Add(bottomlayer) 4961 if bottomName != 'vacuum': 4962 parmsline = wx.BoxSizer(wx.HORIZONTAL) 4963 parmsline.Add(wx.StaticText(G2frame.dataDisplay,label=' Upper surface Roughness, %s: '%(Angstr)),0,WACV) 4964 parmsline.Add(G2G.ValidatedTxtCtrl(G2frame.dataDisplay,data['Layers'][-1]['Rough'],0, 4965 nDig=(10,2),typeHint=float,OnLeave=Recalculate),0,WACV) 4966 varBox = wx.CheckBox(G2frame.dataDisplay,label='Refine?') 4967 Indx[varBox.GetId()] = [-1,'Rough'] 4968 varBox.SetValue(data['Layers'][-1]['Rough'][1]) 4969 varBox.Bind(wx.EVT_CHECKBOX, OnCheckBox) 4970 parmsline.Add(varBox,0,WACV) 4971 layerSizer.Add(parmsline) 4979 magLayer.Add(varBox,0,WACV) 4980 magLayer.Add(wx.StaticText(G2frame.dataDisplay, 4981 label=' Real+mag scat. den.: %.4g'%(realScatt+data['Layers'][ilay]['Mag SLD'][0])),0,WACV) 4982 layerSizer.Add(magLayer) 4983 if ilay: 4984 names = {'Rough':'Upper surface Roughness, '+Angstr,'Thick':'Layer Thickness, '+Angstr} 4985 parmsline = wx.BoxSizer(wx.HORIZONTAL) 4986 parms= ['Rough','Thick'] 4987 if ilay == len(data['Layers'])-1: 4988 parms = ['Rough',] 4989 for parm in parms: 4990 parmsline.Add(wx.StaticText(G2frame.dataDisplay,label=' %s: '%(names[parm])),0,WACV) 4991 parmsline.Add(G2G.ValidatedTxtCtrl(G2frame.dataDisplay,data['Layers'][ilay][parm],0, 4992 nDig=(10,2),typeHint=float,OnLeave=Recalculate),0,WACV) 4993 varBox = wx.CheckBox(G2frame.dataDisplay,label='Refine?') 4994 Indx[varBox.GetId()] = [ilay,parm] 4995 varBox.SetValue(data['Layers'][ilay][parm][1]) 4996 varBox.Bind(wx.EVT_CHECKBOX, OnCheckBox) 4997 parmsline.Add(varBox,0,WACV) 4998 layerSizer.Add(parmsline) 4999 if ilay < len(data['Layers'])-1: 5000 newlayer = wx.BoxSizer(wx.HORIZONTAL) 5001 insert = wx.Button(G2frame.dataDisplay,label='Insert') 5002 Indx[insert.GetId()] = ilay 5003 insert.Bind(wx.EVT_BUTTON,OnInsertLayer) 5004 newlayer.Add(insert) 5005 delet = wx.Button(G2frame.dataDisplay,label='Delete') 5006 Indx[delet.GetId()] = ilay 5007 delet.Bind(wx.EVT_BUTTON,OnDeleteLayer) 5008 newlayer.Add(delet) 5009 layerSizer.Add(newlayer) 5010 G2G.HorizontalLine(layerSizer,G2frame.dataDisplay) 5011 4972 5012 return layerSizer 4973 5013 … … 4975 5015 ProfDict,Profile,Name = G2frame.PatternTree.GetItemPyData(G2frame.PatternId)[:3] 4976 5016 Limits = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,G2frame.PatternId, 'Limits')) 4977 Inst = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,G2frame.PatternId, 'Instrument Parameters')) 5017 Inst = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,G2frame.PatternId, 'Instrument Parameters'))[0] 4978 5018 if G2frame.dataDisplay: 4979 5019 G2frame.dataFrame.DestroyChildren() # is this a ScrolledWindow? If so, bad! … … 4984 5024 G2frame.dataDisplay = wxscroll.ScrolledPanel(G2frame.dataFrame) 4985 5025 G2frame.dataFrame.Bind(wx.EVT_MENU, OnCopyModel, id=G2gd.wxID_MODELCOPY) 4986 G2frame.dataFrame.Bind(wx.EVT_MENU, On CopyFlags, id=G2gd.wxID_MODELCOPYFLAGS)5026 G2frame.dataFrame.Bind(wx.EVT_MENU, OnModelPlot, id=G2gd.wxID_MODELPLOT) 4987 5027 G2frame.dataFrame.Bind(wx.EVT_MENU, OnFitModel, id=G2gd.wxID_MODELFIT) 4988 5028 G2frame.dataFrame.Bind(wx.EVT_MENU, OnFitModelAll, id=G2gd.wxID_MODELFITALL) -
trunk/Substances.py
r2761 r2763 8 8 Each entry in ''Substances'' consists of:: 9 9 10 'key':{'Elements':{element:{'Num': number in formula},...},'Density':value, 'Volume':,value}10 'key':{'Elements':{element:{'Num':float number in formula},...},'Density':value, 'Volume':,value} 11 11 12 12 Density & Volume are optional, if one missing it is calculated from the other; if both … … 16 16 """ 17 17 Substances = { 18 'Alumina':{'Elements':{'Al':{'Num':2 },'O':{'Num':3}},'Density':3.986,},19 'Water':{'Elements':{'O':{'Num':1 },'H':{'Num':2}},'Density':1.0},20 'Silicon':{'Elements':{'Si':{'Num':8 }},'Volume':160.209},21 'a-Quartz':{'Elements':{'Si':{'Num':3 },'O':{'Num':6}},'Volume':113.057},22 'Ethanol':{'Elements':{'C':{'Num':2 },'O':{'Num':1},'H':{'Num':6}},},23 'Polyethylene':{'Elements':{'C':{'Num':1 },'H':{'Num':2}},'Density':0.93,},24 'Polystyrene':{'Elements':{'C':{'Num':1 },'H':{'Num':1}},'Density':1.060,},25 'Teflon':{'Elements':{'C':{'Num':1 },'F':{'Num':2}},'Density':2.25,},26 'Mylar':{'Elements':{'C':{'Num':5 },'H':{'Num':4},'O':{'Num':2}},'Density':1.38,},27 'Iron':{'Elements':{'Fe':{'Num':4 }},'Density':7.87,},28 'FeO-wustite':{'Elements':{'Fe':{'Num':4 },'O':{'Num':4}},'Volume':79.285},29 'Fe2O3-hematite':{'Elements':{'Fe':{'Num':12 },'O':{'Num':18}},'Volume':301.689},30 'Fe3O4-magnetite':{'Elements':{'Fe':{'Num':24 },'O':{'Num':32}},'Volume':591.921},31 'Zirconium':{'Elements':{'Zr':{'Num':2 }},'Density':6.51,},32 'Carbon':{'Elements':{'C':{'Num':1 }},'Density':2.27,},33 'Titanium':{'Elements':{'Ti':{'Num':1 }},'Density':4.51,},34 'TiO2-rutile':{'Elements':{'Ti':{'Num':2 },'O':{'Num':4}},'Volume':62.452},35 'Chromium':{'Elements':{'Cr':{'Num':1 }},'Density':7.19,},36 'Nickel':{'Elements':{'Ni':{'Num':4 }},'Density':8.90,},37 'Copper':{'Elements':{'Cu':{'Num':4 }},'Density':8.96,},38 'Hydroxyapatite':{'Elements':{'Ca':{'Num':5 },'P':{'Num':3},'O':{'Num':13},'H':{'Num':1}},'Density':3.986,},39 'Cr2O3':{'Elements':{'Cr':{'Num':2 },'O':{'Num':3}},'Density':5.206,},40 'ZrO2':{'Elements':{'Zr':{'Num':1 },'O':{'Num':3}},'Density':6.134,},41 'Y(0.16)Zr(0.84)O2':{'Elements':{'Y':{'Num':0.16},'Zr':{'Num':0.84},'O':{'Num':2 }},'Density':6.01,},18 'Alumina':{'Elements':{'Al':{'Num':2.},'O':{'Num':3.}},'Density':3.986,}, 19 'Water':{'Elements':{'O':{'Num':1.},'H':{'Num':2.}},'Density':1.0}, 20 'Silicon':{'Elements':{'Si':{'Num':8.}},'Volume':160.209}, 21 'a-Quartz':{'Elements':{'Si':{'Num':3.},'O':{'Num':6.}},'Volume':113.057}, 22 'Ethanol':{'Elements':{'C':{'Num':2.},'O':{'Num':1},'H':{'Num':6.}},}, 23 'Polyethylene':{'Elements':{'C':{'Num':1.},'H':{'Num':2.}},'Density':0.93,}, 24 'Polystyrene':{'Elements':{'C':{'Num':1.},'H':{'Num':1.}},'Density':1.060,}, 25 'Teflon':{'Elements':{'C':{'Num':1.},'F':{'Num':2.}},'Density':2.25,}, 26 'Mylar':{'Elements':{'C':{'Num':5.},'H':{'Num':4.},'O':{'Num':2.}},'Density':1.38,}, 27 'Iron':{'Elements':{'Fe':{'Num':4.}},'Density':7.87,}, 28 'FeO-wustite':{'Elements':{'Fe':{'Num':4.},'O':{'Num':4.}},'Volume':79.285}, 29 'Fe2O3-hematite':{'Elements':{'Fe':{'Num':12.},'O':{'Num':18.}},'Volume':301.689}, 30 'Fe3O4-magnetite':{'Elements':{'Fe':{'Num':24.},'O':{'Num':32.}},'Volume':591.921}, 31 'Zirconium':{'Elements':{'Zr':{'Num':2.}},'Density':6.51,}, 32 'Carbon':{'Elements':{'C':{'Num':1.}},'Density':2.27,}, 33 'Titanium':{'Elements':{'Ti':{'Num':1.}},'Density':4.51,}, 34 'TiO2-rutile':{'Elements':{'Ti':{'Num':2.},'O':{'Num':4.}},'Volume':62.452}, 35 'Chromium':{'Elements':{'Cr':{'Num':1.}},'Density':7.19,}, 36 'Nickel':{'Elements':{'Ni':{'Num':4.}},'Density':8.90,}, 37 'Copper':{'Elements':{'Cu':{'Num':4.}},'Density':8.96,}, 38 'Hydroxyapatite':{'Elements':{'Ca':{'Num':5.},'P':{'Num':3.},'O':{'Num':13.},'H':{'Num':1.}},'Density':3.986,}, 39 'Cr2O3':{'Elements':{'Cr':{'Num':2.},'O':{'Num':3.}},'Density':5.206,}, 40 'ZrO2':{'Elements':{'Zr':{'Num':1.},'O':{'Num':3,}},'Density':6.134,}, 41 'Y(0.16)Zr(0.84)O2':{'Elements':{'Y':{'Num':0.16},'Zr':{'Num':0.84},'O':{'Num':2.}},'Density':6.01,}, 42 42 } 43 43 # they should not be duplicated in the UserSubstances.py file:
Note: See TracChangeset
for help on using the changeset viewer.