Changeset 2755 for trunk/GSASIIpwdGUI.py
- Timestamp:
- Mar 20, 2017 9:53:00 AM (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/GSASIIpwdGUI.py
r2754 r2755 45 45 WACV = wx.ALIGN_CENTER_VERTICAL 46 46 GkDelta = unichr(0x0394) 47 Pwr10 = unichr(0x0b9)+unichr(0x 0b0)48 Pwr20 = unichr(0x0b2)+unichr(0x 0b0)47 Pwr10 = unichr(0x0b9)+unichr(0x2070) 48 Pwr20 = unichr(0x0b2)+unichr(0x2070) 49 49 Pwrm1 = unichr(0x207b)+unichr(0x0b9) 50 50 Pwrm2 = unichr(0x207b)+unichr(0x0b2) 51 Pwrm4 = unichr(0x207b)+unichr(0x2074) #really -d but looks like -4 as a superscript 51 Pwrm6 = unichr(0x207b)+unichr(0x2076) 52 Pwrm4 = unichr(0x207b)+unichr(0x2074) 53 Angstr = unichr(0x00c5) 52 54 # trig functions in degrees 53 55 sind = lambda x: math.sin(x*math.pi/180.) … … 213 215 Defined as follows for each layer: 214 216 Name: name of substance 215 Thick: thickness of layer in Angstroms 216 Rough: upper surface roughness for layer 217 Penetration: mixing of layer substance into layer above 217 Thick: thickness of layer in Angstroms (not present for top & bottom layers) 218 Rough: upper surface roughness for layer (not present for toplayer) 219 Penetration: mixing of layer substance into layer above-is this needed? 218 220 DenMul: multiplier for layer scattering density (default = 1.0) 219 221 Top layer defaults to vacuum (or air/any gas); can be substituted for some other substance 220 222 Bottom layer default: infinitely thisck Silicon; can be substituted for some other substance 221 223 ''' 222 return {'Layers':[{'Name':'vacuum','DenMul':[1.0,False],}, 223 {'Name':'vacuum','Thick':[1.e6,False],'Rough':[0.,False],'Penetration':[0.,False],'DenMul':[1.0,False]},], 224 'Zero':'Top','DualFitFile':'','FltBack':[0.0,False],'DualFltBack':[0.0,False], 225 'Scale':[1.0,False],'DualScale':[1.0,False],'Minimizer':'LMLS','Resolution':[0.,'Const dq/q'],'Recomb':0.5,'Toler':0.001} 224 return {'Layers':[{'Name':'vacuum','DenMul':[1.0,False],}, #top layer 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', #globals 227 'Minimizer':'LMLS','Resolution':[0.,'Const dq/q'],'Recomb':0.5,'Toler':0.001, #minimizer controls 228 'DualFitFiles':['',],'DualFltBacks':[[0.0,False],],'DualScales':[[1.0,False],]} #optional stuff for multidat fits? 226 229 227 230 def SetDefaultSubstances(): 228 231 'Fills in default items for the SASD Substances dictionary' 229 return {'Substances':{'vacuum':{'Elements':{},'Volume':1.0,'Density':0.0,'Scatt density':0.0}}} 232 return {'Substances':{'vacuum':{'Elements':{},'Volume':1.0,'Density':0.0,'Scatt density':0.0,'XImag density':0.0}, 233 'unit scatter':{'Elements':None,'Volume':None,'Density':None,'Scatt density':1.0,'XImag density':0.0}}} 230 234 231 235 def GetFileList(G2frame,fileType): … … 3625 3629 import Substances as substFile 3626 3630 3627 def OnLoadSubstance(event): 3628 names = substFile.Substances.keys() 3629 names.sort() 3630 dlg = wx.SingleChoiceDialog(G2frame, 'Which substance?', 'Select substance', names, wx.CHOICEDLG_STYLE) 3631 try: 3632 if dlg.ShowModal() == wx.ID_OK: 3633 name = names[dlg.GetSelection()] 3634 else: 3635 return 3636 finally: 3637 dlg.Destroy() 3638 data['Substances'][name] = {'Elements':{},'Volume':1.0,'Density':1.0, 3639 'Scatt density':0.0,'XAnom density':0.0,'XAbsorption':0.0} 3631 def LoadSubstance(name): 3632 3640 3633 subst = substFile.Substances[name] 3641 3634 ElList = subst['Elements'].keys() … … 3656 3649 data['Substances'][name]['Density'] = \ 3657 3650 G2mth.Vol2Den(data['Substances'][name]['Elements'],data['Substances'][name]['Volume']) 3658 data['Substances'][name]['Scatt density'] = \ 3659 G2mth.XScattDen(data['Substances'][name]['Elements'],data['Substances'][name]['Volume'])[0] 3660 contrst,absorb = G2mth.XScattDen(data['Substances'][name]['Elements'],data['Substances'][name]['Volume'],wave) 3661 data['Substances'][name]['XAnom density'] = contrst 3651 if 'X' in Inst['Type'][0]: 3652 data['Substances'][name]['Scatt density'] = \ 3653 G2mth.XScattDen(data['Substances'][name]['Elements'],data['Substances'][name]['Volume'])[0] 3654 recontrst,absorb,imcontrst = G2mth.XScattDen(data['Substances'][name]['Elements'],data['Substances'][name]['Volume'],wave) 3655 elif 'NC' in Inst['Type'][0]: 3656 isotopes = Info['Isotopes'].keys() 3657 isotopes.sort() 3658 data['Substances'][name]['Elements'][El]['Isotope'] = isotopes[-1] 3659 data['Substances'][name]['Scatt density'] = \ 3660 G2mth.NCScattDen(data['Substances'][name]['Elements'],data['Substances'][name]['Volume'])[0] 3661 recontrst,absorb,imcontrst = G2mth.NCScattDen(data['Substances'][name]['Elements'],data['Substances'][name]['Volume'],wave) 3662 data['Substances'][name]['XAnom density'] = recontrst 3662 3663 data['Substances'][name]['XAbsorption'] = absorb 3663 3664 data['Substances'][name]['XImag density'] = imcontrst 3665 3666 def OnReloadSubstances(event): 3667 3668 for name in data['Substances'].keys(): 3669 if name not in ['vacuum','unit scatter']: 3670 if 'X' in Inst['Type'][0]: 3671 data['Substances'][name]['Scatt density'] = \ 3672 G2mth.XScattDen(data['Substances'][name]['Elements'],data['Substances'][name]['Volume'])[0] 3673 recontrst,absorb,imcontrst = G2mth.XScattDen(data['Substances'][name]['Elements'],data['Substances'][name]['Volume'],wave) 3674 elif 'NC' in Inst['Type'][0]: 3675 data['Substances'][name]['Scatt density'] = \ 3676 G2mth.NCScattDen(data['Substances'][name]['Elements'],data['Substances'][name]['Volume'])[0] 3677 recontrst,absorb,imcontrst = G2mth.NCScattDen(data['Substances'][name]['Elements'],data['Substances'][name]['Volume'],wave) 3678 data['Substances'][name]['XAnom density'] = recontrst 3679 data['Substances'][name]['XAbsorption'] = absorb 3680 data['Substances'][name]['XImag density'] = imcontrst 3681 UpdateSubstanceGrid(G2frame,data) 3682 3683 def OnLoadSubstance(event): 3684 3685 names = substFile.Substances.keys() 3686 names.sort() 3687 dlg = wx.SingleChoiceDialog(G2frame, 'Which substance?', 'Select substance', names, wx.CHOICEDLG_STYLE) 3688 try: 3689 if dlg.ShowModal() == wx.ID_OK: 3690 name = names[dlg.GetSelection()] 3691 else: 3692 return 3693 finally: 3694 dlg.Destroy() 3695 3696 data['Substances'][name] = {'Elements':{},'Volume':1.0,'Density':1.0, 3697 'Scatt density':0.0,'Real density':0.0,'XAbsorption':0.0,'XImag density':0.0} 3698 LoadSubstance(name) 3664 3699 UpdateSubstanceGrid(G2frame,data) 3665 3700 … … 3687 3722 ndata = copy.deepcopy(data) 3688 3723 for name in ndata['Substances'].keys(): 3689 contrst,absorb = G2mth.XScattDen(ndata['Substances'][name]['Elements'],ndata['Substances'][name]['Volume'],wave) 3690 ndata['Substances'][name]['XAnom density'] = contrst 3691 ndata['Substances'][name]['XAbsorption'] = absorb 3724 if name not in ['vacuum','unit scatter']: 3725 if 'X' in Inst['Type'][0]: 3726 recontrst,absorb,imcontrst = G2mth.XScattDen(data['Substances'][name]['Elements'],data['Substances'][name]['Volume'],wave) 3727 elif 'NC' in Inst['Type'][0]: 3728 recontrst,absorb,imcontrst = G2mth.NCScattDen(data['Substances'][name]['Elements'],data['Substances'][name]['Volume'],wave) 3729 ndata['Substances'][name]['XAnom density'] = recontrst 3730 ndata['Substances'][name]['XAbsorption'] = absorb 3731 ndata['Substances'][name]['XImag density'] = imcontrst 3692 3732 G2frame.PatternTree.SetItemPyData(G2gd.GetPatternTreeItemId(G2frame,Id,'Substances'),ndata) 3693 3733 … … 3699 3739 data['Substances'][Name] = {'Elements':{},'Volume':1.0,'Density':1.0, 3700 3740 'Scatt density':0.0,'XAnom density':0.,'XAbsorption':0.} 3741 AddElement(Name) 3701 3742 dlg.Destroy() 3702 AddElement(Name)3703 3743 UpdateSubstanceGrid(G2frame,data) 3704 3744 … … 3706 3746 TextList = [] 3707 3747 for name in data['Substances']: 3708 if name != 'vacuum':3748 if name not in ['vacuum','unit scatter']: 3709 3749 TextList += [name,] 3710 3750 if not TextList: … … 3724 3764 TextList = [] 3725 3765 for name in data['Substances']: 3726 if name != 'vacuum':3766 if name not in ['vacuum','unit scatter']: 3727 3767 TextList += [name,] 3728 3768 if not TextList: … … 3732 3772 if dlg.ShowModal() == wx.ID_OK: 3733 3773 name = TextList[dlg.GetSelection()] 3774 AddElement(name) 3734 3775 else: 3735 3776 return 3736 3777 finally: 3737 3778 dlg.Destroy() 3738 AddElement(name)3739 3779 UpdateSubstanceGrid(G2frame,data) 3740 3780 … … 3748 3788 Info.update({'Num':1}) 3749 3789 data['Substances'][name]['Elements'][El] = Info 3790 isotopes = Info['Isotopes'].keys() 3791 isotopes.sort() 3792 data['Substances'][name]['Elements'][El]['Isotope'] = isotopes[-1] 3750 3793 data['Substances'][name]['Volume'] = G2mth.El2EstVol(data['Substances'][name]['Elements']) 3751 3794 data['Substances'][name]['Density'] = \ 3752 3795 G2mth.Vol2Den(data['Substances'][name]['Elements'],data['Substances'][name]['Volume']) 3753 data['Substances'][name]['Scatt density'] = \ 3754 G2mth.XScattDen(data['Substances'][name]['Elements'],data['Substances'][name]['Volume'])[0] 3755 contrst,absorb = G2mth.XScattDen(data['Substances'][name]['Elements'],data['Substances'][name]['Volume'],wave) 3756 data['Substances'][name]['XAnom density'] = contrst 3796 if 'X' in Inst['Type'][0]: 3797 data['Substances'][name]['Scatt density'] = \ 3798 G2mth.XScattDen(data['Substances'][name]['Elements'],data['Substances'][name]['Volume'])[0] 3799 recontrst,absorb,imcontrst = G2mth.XScattDen(data['Substances'][name]['Elements'],data['Substances'][name]['Volume'],wave) 3800 elif 'NC' in Inst['Type'][0]: 3801 data['Substances'][name]['Scatt density'] = \ 3802 G2mth.NCScattDen(data['Substances'][name]['Elements'],data['Substances'][name]['Volume'])[0] 3803 recontrst,absorb,imcontrst = G2mth.NCScattDen(data['Substances'][name]['Elements'],data['Substances'][name]['Volume'],wave) 3804 data['Substances'][name]['XAnom density'] = recontrst 3757 3805 data['Substances'][name]['XAbsorption'] = absorb 3806 data['Substances'][name]['XImag density'] = imcontrst 3758 3807 dlg.Destroy() 3759 3808 … … 3761 3810 TextList = [] 3762 3811 for name in data['Substances']: 3763 if name != 'vacuum':3812 if name not in ['vacuum','unit scatter']: 3764 3813 TextList += [name,] 3765 3814 if not TextList: … … 3782 3831 data['Substances'][name]['Density'] = \ 3783 3832 G2mth.Vol2Den(data['Substances'][name]['Elements'],data['Substances'][name]['Volume']) 3784 data['Substances'][name]['Scatt density'] = \ 3785 G2mth.XScattDen(data['Substances'][name]['Elements'],data['Substances'][name]['Volume'])[0] 3786 contrst,absorb = G2mth.XScattDen(data['Substances'][name]['Elements'],data['Substances'][name]['Volume'],wave) 3787 data['Substances'][name]['XAnom density'] = contrst 3833 if 'X' in Inst['Type'][0]: 3834 data['Substances'][name]['Scatt density'] = \ 3835 G2mth.XScattDen(data['Substances'][name]['Elements'],data['Substances'][name]['Volume'])[0] 3836 recontrst,absorb,imcontrst = G2mth.XScattDen(data['Substances'][name]['Elements'],data['Substances'][name]['Volume'],wave) 3837 elif 'NC' in Inst['Type'][0]: 3838 data['Substances'][name]['Scatt density'] = \ 3839 G2mth.NCScattDen(data['Substances'][name]['Elements'],data['Substances'][name]['Volume'])[0] 3840 recontrst,absorb,imcontrst = G2mth.NCScattDen(data['Substances'][name]['Elements'],data['Substances'][name]['Volume'],wave) 3841 data['Substances'][name]['XAnom density'] = recontrst 3788 3842 data['Substances'][name]['XAbsorption'] = absorb 3843 data['Substances'][name]['XImag density'] = imcontrst 3789 3844 UpdateSubstanceGrid(G2frame,data) 3790 3845 3791 3846 def SubstSizer(): 3792 3847 3793 def OnValueChange(event): 3794 event.Skip() 3848 def OnNum(invalid,value,tc): 3849 if invalid: return 3850 name,El,keyId = Indx[tc.GetId()] 3851 data['Substances'][name]['Volume'] = G2mth.El2EstVol(data['Substances'][name]['Elements']) 3852 data['Substances'][name]['Density'] = \ 3853 G2mth.Vol2Den(data['Substances'][name]['Elements'],data['Substances'][name]['Volume']) 3854 if 'X' in Inst['Type'][0]: 3855 recontrst,absorb,imcontrst = G2mth.XScattDen(data['Substances'][name]['Elements'],data['Substances'][name]['Volume'],wave) 3856 elif 'NC' in Inst['Type'][0]: 3857 recontrst,absorb,imcontrst = G2mth.NCScattDen(data['Substances'][name]['Elements'],data['Substances'][name]['Volume'],wave) 3858 data['Substances'][name]['XAnom density'] = recontrst 3859 data['Substances'][name]['XAbsorption'] = absorb 3860 data['Substances'][name]['XImag density'] = imcontrst 3861 wx.CallAfter(UpdateSubstanceGrid,G2frame,data) 3862 3863 def OnVolDen(invalid,value,tc): 3864 if invalid: return 3865 name,keyId = Indx[tc.GetId()] 3866 if keyId in 'Volume': 3867 data['Substances'][name]['Density'] = \ 3868 G2mth.Vol2Den(data['Substances'][name]['Elements'],value) 3869 elif keyId in 'Density': 3870 data['Substances'][name]['Volume'] = \ 3871 G2mth.Den2Vol(data['Substances'][name]['Elements'],value) 3872 if 'X' in Inst['Type'][0]: 3873 data['Substances'][name]['Scatt density'] = \ 3874 G2mth.XScattDen(data['Substances'][name]['Elements'],data['Substances'][name]['Volume'])[0] 3875 recontrst,absorb,imcontrst = G2mth.XScattDen(data['Substances'][name]['Elements'],data['Substances'][name]['Volume'],wave) 3876 elif 'NC' in Inst['Type'][0]: 3877 data['Substances'][name]['Scatt density'] = \ 3878 G2mth.NCScattDen(data['Substances'][name]['Elements'],data['Substances'][name]['Volume'])[0] 3879 recontrst,absorb,imcontrst = G2mth.NCScattDen(data['Substances'][name]['Elements'],data['Substances'][name]['Volume'],wave) 3880 data['Substances'][name]['XAnom density'] = recontrst 3881 data['Substances'][name]['XAbsorption'] = absorb 3882 data['Substances'][name]['XImag density'] = imcontrst 3883 wx.CallAfter(UpdateSubstanceGrid,G2frame,data) 3884 3885 def OnIsotope(event): 3795 3886 Obj = event.GetEventObject() 3796 if len(Indx[Obj.GetId()]) == 3: 3797 name,El,keyId = Indx[Obj.GetId()] 3798 try: 3799 value = max(0,float(Obj.GetValue())) 3800 except ValueError: 3801 value = 0 3802 Obj.SetValue('%.2f'%(value)) 3803 data['Substances'][name]['Elements'][El][keyId] = value 3804 data['Substances'][name]['Volume'] = G2mth.El2EstVol(data['Substances'][name]['Elements']) 3805 data['Substances'][name]['Density'] = \ 3806 G2mth.Vol2Den(data['Substances'][name]['Elements'],data['Substances'][name]['Volume']) 3807 else: 3808 name,keyId = Indx[Obj.GetId()] 3809 try: 3810 value = max(0,float(Obj.GetValue())) 3811 except ValueError: 3812 value = 1.0 3813 data['Substances'][name][keyId] = value 3814 if keyId in 'Volume': 3815 data['Substances'][name]['Density'] = \ 3816 G2mth.Vol2Den(data['Substances'][name]['Elements'],value) 3817 elif keyId in 'Density': 3818 data['Substances'][name]['Volume'] = \ 3819 G2mth.Den2Vol(data['Substances'][name]['Elements'],value) 3820 data['Substances'][name]['Scatt density'] = \ 3821 G2mth.XScattDen(data['Substances'][name]['Elements'],data['Substances'][name]['Volume'])[0] 3822 contrst,absorb = G2mth.XScattDen(data['Substances'][name]['Elements'],data['Substances'][name]['Volume'],wave) 3823 data['Substances'][name]['XAnom density'] = contrst 3887 El,name = Indx[Obj.GetId()] 3888 data['Substances'][name]['Elements'][El]['Isotope'] = Obj.GetValue() 3889 recontrst,absorb,imcontrst = G2mth.NCScattDen(data['Substances'][name]['Elements'],data['Substances'][name]['Volume'],wave) 3890 data['Substances'][name]['XAnom density'] = recontrst 3824 3891 data['Substances'][name]['XAbsorption'] = absorb 3892 data['Substances'][name]['XImag density'] = imcontrst 3825 3893 wx.CallAfter(UpdateSubstanceGrid,G2frame,data) 3826 3894 … … 3836 3904 substSizer.Add(wx.StaticText(parent=G2frame.dataDisplay,label=' Not applicable'), 3837 3905 0,WACV) 3906 elif name == 'unit scatter': 3907 substSizer.Add(wx.StaticText(G2frame.dataDisplay,label=' Scattering density,f: %.3f *10%scm%s'%(data['Substances'][name]['Scatt density'],Pwr10,Pwrm2)),0,WACV) 3838 3908 else: 3839 elSizer = wx.FlexGridSizer(0, 6,5,5)3909 elSizer = wx.FlexGridSizer(0,8,5,5) 3840 3910 Substance = data['Substances'][name] 3841 3911 Elems = Substance['Elements'] … … 3843 3913 elSizer.Add(wx.StaticText(parent=G2frame.dataDisplay,label=' '+El+': '), 3844 3914 0,WACV) 3845 # azmthOff = G2G.ValidatedTxtCtrl(G2frame.dataDisplay,data,'azmthOff',nDig=(10,2),typeHint=float,OnLeave=OnAzmthOff) 3846 num = wx.TextCtrl(G2frame.dataDisplay,value='%.2f'%(Elems[El]['Num']),style=wx.TE_PROCESS_ENTER)3915 num = G2G.ValidatedTxtCtrl(G2frame.dataDisplay,data['Substances'][name]['Elements'][El],'Num', 3916 nDig=(10,2),typeHint=float,OnLeave=OnNum) 3847 3917 Indx[num.GetId()] = [name,El,'Num'] 3848 num.Bind(wx.EVT_TEXT_ENTER,OnValueChange)3849 num.Bind(wx.EVT_KILL_FOCUS,OnValueChange)3850 3918 elSizer.Add(num,0,WACV) 3919 if 'N' in Inst['Type'][0]: 3920 elSizer.Add(wx.StaticText(G2frame.dataDisplay,label=' Isotope: '),0,WACV) 3921 isotopes = Elems[El]['Isotopes'].keys() 3922 isotope = wx.ComboBox(G2frame.dataDisplay,choices=isotopes,value=Elems[El].get('Isotope','Nat. Abund.'), 3923 style=wx.CB_READONLY|wx.CB_DROPDOWN) 3924 Indx[isotope.GetId()] = [El,name] 3925 isotope.Bind(wx.EVT_COMBOBOX,OnIsotope) 3926 elSizer.Add(isotope,0,WACV) 3851 3927 substSizer.Add(elSizer,0) 3852 3928 vdsSizer = wx.FlexGridSizer(0,4,5,5) 3853 3929 vdsSizer.Add(wx.StaticText(parent=G2frame.dataDisplay,label=' Volume: '), 3854 3930 0,WACV) 3855 # azmthOff = G2G.ValidatedTxtCtrl(G2frame.dataDisplay,data,'azmthOff',nDig=(10,2),typeHint=float,OnLeave=OnAzmthOff) 3856 vol = wx.TextCtrl(G2frame.dataDisplay,value='%.3f'%(Substance['Volume']),style=wx.TE_PROCESS_ENTER) 3931 vol = G2G.ValidatedTxtCtrl(G2frame.dataDisplay,data['Substances'][name],'Volume',nDig=(10,2),typeHint=float,OnLeave=OnVolDen) 3857 3932 Indx[vol.GetId()] = [name,'Volume'] 3858 vol.Bind(wx.EVT_TEXT_ENTER,OnValueChange)3859 vol.Bind(wx.EVT_KILL_FOCUS,OnValueChange)3860 3933 vdsSizer.Add(vol,0,WACV) 3861 3934 vdsSizer.Add(wx.StaticText(parent=G2frame.dataDisplay,label=' Density: '), 3862 3935 0,WACV) 3863 # azmthOff = G2G.ValidatedTxtCtrl(G2frame.dataDisplay,data,'azmthOff',nDig=(10,2),typeHint=float,OnLeave=OnAzmthOff) 3864 den = wx.TextCtrl(G2frame.dataDisplay,value='%.3f'%(Substance['Density']),style=wx.TE_PROCESS_ENTER) 3936 den = G2G.ValidatedTxtCtrl(G2frame.dataDisplay,data['Substances'][name],'Density',nDig=(10,2),typeHint=float,OnLeave=OnVolDen) 3865 3937 Indx[den.GetId()] = [name,'Density'] 3866 den.Bind(wx.EVT_TEXT_ENTER,OnValueChange)3867 den.Bind(wx.EVT_KILL_FOCUS,OnValueChange)3868 3938 vdsSizer.Add(den,0,WACV) 3869 3939 substSizer.Add(vdsSizer,0) 3870 substSizer.Add(wx.StaticText(G2frame.dataDisplay, 3871 label=' Scattering density : %.2f *10%scm%s'%(Substance['Scatt density'],Pwr10,Pwrm2)), 3872 0,WACV) 3873 substSizer.Add(wx.StaticText(G2frame.dataDisplay, #allow neutrons here into NAnom density & NAbsorption 3874 label=' Anomalous density : %.2f *10%scm%s'%(Substance['XAnom density'],Pwr10,Pwrm2)), 3875 0,WACV) 3876 substSizer.Add(wx.StaticText(G2frame.dataDisplay, 3877 label=' X-ray absorption : %.2f cm%s'%(Substance['XAbsorption'],Pwrm1)), 3878 0,WACV) 3940 denSizer = wx.FlexGridSizer(0,2,0,0) 3941 denSizer.Add(wx.StaticText(G2frame.dataDisplay,label=' Scattering density,f'),0,WACV) 3942 denSizer.Add(wx.StaticText(G2frame.dataDisplay,label=': %.3f *10%scm%s'%(Substance['Scatt density'],Pwr10,Pwrm2)),0,WACV) 3943 denSizer.Add(wx.StaticText(G2frame.dataDisplay,label=" Real density,f+f'"),0,WACV) 3944 denSizer.Add(wx.StaticText(G2frame.dataDisplay,label=': %.3f *10%scm%s'%(Substance['XAnom density'],Pwr10,Pwrm2)),0,WACV) 3945 denSizer.Add(wx.StaticText(G2frame.dataDisplay,label=' Imaginary density,f"'),0,WACV) 3946 denSizer.Add(wx.StaticText(G2frame.dataDisplay,label=': %.3g *10%scm%s'%(Substance['XImag density'],Pwr10,Pwrm2)),0,WACV) 3947 denSizer.Add(wx.StaticText(G2frame.dataDisplay,label=' Absorption'),0,WACV) 3948 denSizer.Add(wx.StaticText(G2frame.dataDisplay,label=': %.3g cm%s'%(Substance['XAbsorption'],Pwrm1)),0,WACV) 3949 substSizer.Add(denSizer) 3879 3950 return substSizer 3880 3951 … … 3889 3960 G2frame.dataFrame.SetLabel('Substances') 3890 3961 G2frame.dataFrame.Bind(wx.EVT_MENU, OnLoadSubstance, id=G2gd.wxID_LOADSUBSTANCE) 3962 G2frame.dataFrame.Bind(wx.EVT_MENU, OnReloadSubstances, id=G2gd.wxID_RELOADSUBSTANCES) 3891 3963 G2frame.dataFrame.Bind(wx.EVT_MENU, OnAddSubstance, id=G2gd.wxID_ADDSUBSTANCE) 3892 3964 G2frame.dataFrame.Bind(wx.EVT_MENU, OnCopySubstance, id=G2gd.wxID_COPYSUBSTANCE) … … 4624 4696 '''respond to selection of REFD Models data tree item. 4625 4697 ''' 4698 def OnCopyModel(event): 4699 print 'copy model' 4700 event.Skip() 4701 4702 def OnCopyFlags(event): 4703 print 'copy flags' 4704 event.Skip() 4705 4706 def OnFitModel(event): 4707 4708 print 'fit model' 4709 # SaveState() 4710 G2pwd.REFDModelFxn(Profile,ProfDict,Inst,Limits,Substances,data) 4711 G2plt.PlotPatterns(G2frame,plotType='REFD') 4712 event.Skip() 4713 4714 def OnFitModelAll(event): 4715 print 'fit all model' 4716 event.Skip() 4717 4718 def OnUnDo(event): 4719 DoUnDo() 4720 data = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame, 4721 G2frame.PatternId,'Models')) 4722 G2frame.dataFrame.RefdUndo.Enable(False) 4723 UpdateREFDModelsGrid(G2frame,data) 4724 G2pwd.REFDModelFxn(Profile,ProfDict,Inst,Limits,Substances,data) 4725 4726 def DoUnDo(): 4727 print 'Undo last refinement' 4728 file = open(G2frame.undosasd,'rb') 4729 PatternId = G2frame.PatternId 4730 G2frame.PatternTree.SetItemPyData(G2gd.GetPatternTreeItemId(G2frame,PatternId, 'Models'),cPickle.load(file)) 4731 print ' Models recovered' 4732 file.close() 4733 4734 def SaveState(): 4735 G2frame.undorefd = os.path.join(G2frame.dirname,'GSASIIrefd.save') 4736 file = open(G2frame.undorefd,'wb') 4737 PatternId = G2frame.PatternId 4738 for item in ['Models']: 4739 cPickle.dump(G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,PatternId,item)),file,1) 4740 file.close() 4741 G2frame.dataFrame.RefdUndo.Enable(True) 4626 4742 4627 4743 def ControlSizer(): … … 4666 4782 data['FltBack'][1] = backref.GetValue() 4667 4783 4784 def Recalculate(invalid,value,tc): 4785 if invalid: 4786 return 4787 G2pwd.REFDModelFxn(Profile,ProfDict,Inst,Limits,Substances,data) 4788 G2plt.PlotPatterns(G2frame,plotType='REFD') 4789 4668 4790 overall = wx.BoxSizer(wx.HORIZONTAL) 4669 4791 overall.Add(wx.StaticText(G2frame.dataDisplay,label=' Scale: '),0,WACV) 4670 overall.Add(G2G.ValidatedTxtCtrl(G2frame.dataDisplay,data['Scale'],0,nDig=(10,2),typeHint=float),0,WACV) 4792 overall.Add(G2G.ValidatedTxtCtrl(G2frame.dataDisplay,data['Scale'],0, 4793 nDig=(10,2),typeHint=float,OnLeave=Recalculate),0,WACV) 4671 4794 scaleref = wx.CheckBox(G2frame.dataDisplay,label=' Refine? ') 4672 4795 scaleref.SetValue(data['Scale'][1]) … … 4674 4797 overall.Add(scaleref,0,WACV) 4675 4798 overall.Add(wx.StaticText(G2frame.dataDisplay,label=' Flat bkg.: '),0,WACV) 4676 overall.Add(G2G.ValidatedTxtCtrl(G2frame.dataDisplay,data['FltBack'],0,nDig=(10,2),typeHint=float),0,WACV) 4799 overall.Add(G2G.ValidatedTxtCtrl(G2frame.dataDisplay,data['FltBack'],0, 4800 nDig=(10,2,'g'),typeHint=float,OnLeave=Recalculate),0,WACV) 4677 4801 backref = wx.CheckBox(G2frame.dataDisplay,label=' Refine? ') 4678 4802 backref.SetValue(data['FltBack'][1]) … … 4682 4806 4683 4807 def LayerSizer(): 4684 #'Layers':[{'Name':'vacuum','DenMul':[1.0,False],}, 4685 # {'Name':'vacuum','Thick':[1.e6,False],'Rough':[0.,False],'Penetration':[0.,False],'DenMul':[1.0,False]} 4808 #'Penetration':[0.,False]? 4809 4810 def OnSelect(event): 4811 Obj = event.GetEventObject() 4812 item = Indx[Obj.GetId()] 4813 Name = Obj.GetValue() 4814 data['Layers'][item]['Name'] = Name 4815 data['Layers'][item]['Rough'] = [0.,False] 4816 data['Layers'][item]['Thick'] = [1.,False] 4817 G2pwd.REFDModelFxn(Profile,ProfDict,Inst,Limits,Substances,data) 4818 G2plt.PlotPatterns(G2frame,plotType='REFD') 4819 wx.CallAfter(UpdateREFDModelsGrid,G2frame,data) 4820 4821 def OnCheckBox(event): 4822 Obj = event.GetEventObject() 4823 item,parm = Indx[Obj.GetId()] 4824 data['Layers'][item][parm][1] = Obj.GetValue() 4825 4826 def OnInsertLayer(event): 4827 Obj = event.GetEventObject() 4828 ind = Indx[Obj.GetId()] 4829 data['Layers'].insert(ind+1,{'Name':'vacuum','DenMul':[1.0,False],}) 4830 G2pwd.REFDModelFxn(Profile,ProfDict,Inst,Limits,Substances,data) 4831 G2plt.PlotPatterns(G2frame,plotType='REFD') 4832 wx.CallAfter(UpdateREFDModelsGrid,G2frame,data) 4833 4834 def OnDeleteLayer(event): 4835 Obj = event.GetEventObject() 4836 ind = Indx[Obj.GetId()] 4837 del data['Layers'][ind] 4838 G2pwd.REFDModelFxn(Profile,ProfDict,Inst,Limits,Substances,data) 4839 G2plt.PlotPatterns(G2frame,plotType='REFD') 4840 wx.CallAfter(UpdateREFDModelsGrid,G2frame,data) 4841 4842 def Recalculate(invalid,value,tc): 4843 if invalid: 4844 return 4845 G2pwd.REFDModelFxn(Profile,ProfDict,Inst,Limits,Substances,data) 4846 G2plt.PlotPatterns(G2frame,plotType='REFD') 4847 wx.CallAfter(UpdateREFDModelsGrid,G2frame,data) 4848 4686 4849 layerSizer = wx.BoxSizer(wx.VERTICAL) 4687 4688 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) 4884 midlayer = wx.BoxSizer(wx.HORIZONTAL) 4885 midlayer.Add(wx.StaticText(G2frame.dataDisplay,label=' Substance: '),0,WACV) 4886 midName = data['Layers'][ilay+1]['Name'] 4887 midSel = wx.ComboBox(G2frame.dataDisplay,value=midName, 4888 choices=Substances.keys(),style=wx.CB_READONLY|wx.CB_DROPDOWN) 4889 Indx[midSel.GetId()] = ilay+1 4890 midSel.Bind(wx.EVT_COMBOBOX,OnSelect) 4891 midlayer.Add(midSel,0,WACV) 4892 if midName != 'vacuum': 4893 midlayer.Add(wx.StaticText(G2frame.dataDisplay,label=' Den. Mult.: '),0,WACV) 4894 midlayer.Add(G2G.ValidatedTxtCtrl(G2frame.dataDisplay,data['Layers'][ilay+1]['DenMul'],0, 4895 nDig=(10,4),typeHint=float,OnLeave=Recalculate),0,WACV) 4896 varBox = wx.CheckBox(G2frame.dataDisplay,label='Refine?') 4897 Indx[varBox.GetId()] = [ilay+1,'DenMul'] 4898 varBox.SetValue(data['Layers'][ilay+1]['DenMul'][1]) 4899 varBox.Bind(wx.EVT_CHECKBOX, OnCheckBox) 4900 midlayer.Add(varBox,0,WACV) 4901 midlayer.Add(wx.StaticText(G2frame.dataDisplay, 4902 label=' Real scat. den.: %.4g'%(data['Layers'][ilay+1]['DenMul'][0]*Substances[midName]['Scatt density'])),0,WACV) 4903 if midName != 'unit scatter': 4904 midlayer.Add(wx.StaticText(G2frame.dataDisplay, 4905 label=' Imag scat. den.: %.4g'%(data['Layers'][ilay+1]['DenMul'][0]*Substances[midName]['XImag density'])),0,WACV) 4906 else: 4907 midlayer.Add(wx.StaticText(G2frame.dataDisplay,label=', air or gas'),0,WACV) 4908 layerSizer.Add(midlayer) 4909 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) 4916 varBox = wx.CheckBox(G2frame.dataDisplay,label='Refine?') 4917 Indx[varBox.GetId()] = [ilay+1,parm] 4918 varBox.SetValue(data['Layers'][ilay+1][parm][1]) 4919 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) 4689 4972 return layerSizer 4690 4691 4973 4692 Sample = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,G2frame.PatternId, 'Sample Parameters')) 4974 Substances = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,G2frame.PatternId, 'Substances'))['Substances'] 4975 ProfDict,Profile,Name = G2frame.PatternTree.GetItemPyData(G2frame.PatternId)[:3] 4693 4976 Limits = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,G2frame.PatternId, 'Limits')) 4694 4977 Inst = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,G2frame.PatternId, 'Instrument Parameters')) 4695 Substances = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,G2frame.PatternId, 'Substances'))4696 ProfDict,Profile,Name = G2frame.PatternTree.GetItemPyData(G2frame.PatternId)[:3]4697 4978 if G2frame.dataDisplay: 4698 4979 G2frame.dataFrame.DestroyChildren() # is this a ScrolledWindow? If so, bad! 4699 G2gd.SetDataMenuBar(G2frame,G2frame.dataFrame. ModelMenu)4980 G2gd.SetDataMenuBar(G2frame,G2frame.dataFrame.REFDModelMenu) 4700 4981 if not G2frame.dataFrame.GetStatusBar(): 4701 4982 G2frame.dataFrame.CreateStatusBar() 4702 4983 G2frame.dataFrame.SetLabel('Modelling') 4703 4984 G2frame.dataDisplay = wxscroll.ScrolledPanel(G2frame.dataFrame) 4985 G2frame.dataFrame.Bind(wx.EVT_MENU, OnCopyModel, id=G2gd.wxID_MODELCOPY) 4986 G2frame.dataFrame.Bind(wx.EVT_MENU, OnCopyFlags, id=G2gd.wxID_MODELCOPYFLAGS) 4987 G2frame.dataFrame.Bind(wx.EVT_MENU, OnFitModel, id=G2gd.wxID_MODELFIT) 4988 G2frame.dataFrame.Bind(wx.EVT_MENU, OnFitModelAll, id=G2gd.wxID_MODELFITALL) 4989 G2frame.dataFrame.Bind(wx.EVT_MENU, OnUnDo, id=G2gd.wxID_MODELUNDO) 4704 4990 mainSizer = wx.BoxSizer(wx.VERTICAL) 4705 4991 … … 4711 4997 mainSizer.Add(OverallSizer()) 4712 4998 G2G.HorizontalLine(mainSizer,G2frame.dataDisplay) 4713 mainSizer.Add(wx.StaticText(G2frame.dataDisplay,label=' Layers:'),0,WACV) 4999 G2G.HorizontalLine(mainSizer,G2frame.dataDisplay) 5000 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) 4714 5001 mainSizer.Add(LayerSizer()) 4715 5002 mainSizer.Layout()
Note: See TracChangeset
for help on using the changeset viewer.