Changeset 3157
- Timestamp:
- Nov 21, 2017 1:52:20 PM (6 years ago)
- Location:
- trunk
- Files:
-
- 10 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/GSASIIIO.py
r3136 r3157 684 684 Comments = G2frame.GPXtree.GetItemPyData(G2gd.GetGPXtreeItemId(G2frame,Id, 'Comments')) 685 685 if 'PWDR' in name: 686 names = ['Type','Lam','Zero','Polariz.','U','V','W','X','Y',' SH/L','Azimuth']687 codes = [0 for i in range(1 1)]686 names = ['Type','Lam','Zero','Polariz.','U','V','W','X','Y','Z','SH/L','Azimuth'] 687 codes = [0 for i in range(12)] 688 688 elif 'SASD' in name: 689 689 names = ['Type','Lam','Zero','Azimuth'] -
trunk/GSASIIdataGUI.py
r3154 r3157 3010 3010 3011 3011 class SumDialog(wx.Dialog): 3012 '''Allows user to supply scale factor(s) when summing data - 3013 TODO: CAN WE PREVIEW RESULT HERE?''' 3014 #TODO: also add filter box for selection of items 3012 '''Allows user to supply scale factor(s) when summing data 3013 ''' 3015 3014 def __init__(self,parent,title,text,dataType,data,dataList): 3016 3015 wx.Dialog.__init__(self,parent,-1,title,size=(400,250), … … 3019 3018 style=wx.DEFAULT_FRAME_STYLE ^ wx.CLOSE_BOX) 3020 3019 self.G2plotNB = G2plt.G2PlotNoteBook(self.plotFrame,G2frame=self) 3020 self.text = text 3021 3021 self.data = data 3022 self.selectData = copy.copy(data[:-1]) 3023 self.selectVals = len(data)*[0.0,] 3022 3024 self.dataList = dataList 3025 self.filterlist = range(len(self.dataList)) # list of the choice numbers that have been filtered (list of int indices) 3023 3026 self.dataType = dataType 3027 self.filter = '' 3028 self.panel = None 3029 self.Draw() 3030 3031 def Draw(self): 3032 if self.panel: 3033 self.panel.DestroyChildren() #safe: wx.Panel 3034 self.panel.Destroy() 3024 3035 size = (450,350) 3025 panel = wxscroll.ScrolledPanel(self, wx.ID_ANY,size=size,3036 self.panel = wxscroll.ScrolledPanel(self, wx.ID_ANY,size=size, 3026 3037 style = wx.TAB_TRAVERSAL|wx.SUNKEN_BORDER) 3027 3038 mainSizer = wx.BoxSizer(wx.VERTICAL) 3028 topLabl = wx.StaticText(panel,-1,text) 3039 topSizer = wx.BoxSizer(wx.HORIZONTAL) 3040 topSizer.Add(wx.StaticText(self.panel,label=self.text+' Filter: '),0,WACV) 3041 self.filterBox = wx.TextCtrl(self.panel,value=self.filter,style=wx.TE_PROCESS_ENTER) 3042 self.filterBox.Bind(wx.EVT_TEXT_ENTER,self.Filter) 3043 topSizer.Add(self.filterBox,0,WACV) 3029 3044 mainSizer.Add((10,10),1) 3030 mainSizer.Add(top Labl,0,wx.ALIGN_CENTER_VERTICAL|wx.LEFT,10)3045 mainSizer.Add(topSizer,0,wx.ALIGN_CENTER_VERTICAL|wx.LEFT,10) 3031 3046 mainSizer.Add((10,10),1) 3032 3047 self.dataGridSizer = wx.FlexGridSizer(cols=2,hgap=2,vgap=2) 3033 for id,item in enumerate(self. data[:-1]):3034 name = wx.TextCtrl( panel,-1,item[1],size=wx.Size(300,20))3048 for id,item in enumerate(self.selectData): 3049 name = wx.TextCtrl(self.panel,-1,item,size=wx.Size(300,20)) 3035 3050 name.SetEditable(False) 3036 3051 # azmthOff = G2G.ValidatedTxtCtrl(G2frame.dataDisplay,data,'azmthOff',nDig=(10,2),typeHint=float,OnLeave=OnAzmthOff) 3037 scale = wx.TextCtrl( panel,id,'%.3f'%(item[0]),style=wx.TE_PROCESS_ENTER)3052 scale = wx.TextCtrl(self.panel,id,'%.3f'%(self.selectVals[id]),style=wx.TE_PROCESS_ENTER) 3038 3053 scale.Bind(wx.EVT_TEXT_ENTER,self.OnScaleChange) 3039 3054 scale.Bind(wx.EVT_KILL_FOCUS,self.OnScaleChange) … … 3041 3056 self.dataGridSizer.Add(name,0,wx.RIGHT,10) 3042 3057 if self.dataType: 3043 self.dataGridSizer.Add(wx.StaticText( panel,-1,'Sum result name: '+self.dataType),0, \3058 self.dataGridSizer.Add(wx.StaticText(self.panel,-1,'Sum result name: '+self.dataType),0, \ 3044 3059 wx.LEFT|wx.TOP|wx.ALIGN_CENTER_VERTICAL,10) 3045 self.name = wx.TextCtrl( panel,-1,self.data[-1],size=wx.Size(300,20),style=wx.TE_PROCESS_ENTER)3060 self.name = wx.TextCtrl(self.panel,-1,self.data[-1],size=wx.Size(300,20),style=wx.TE_PROCESS_ENTER) 3046 3061 self.name.Bind(wx.EVT_TEXT_ENTER,self.OnNameChange) 3047 3062 self.name.Bind(wx.EVT_KILL_FOCUS,self.OnNameChange) 3048 3063 self.dataGridSizer.Add(self.name,0,wx.RIGHT|wx.TOP,10) 3049 self.dataGridSizer.Add(wx.StaticText( panel,label='All scales value: '),0, \3064 self.dataGridSizer.Add(wx.StaticText(self.panel,label='All scales value: '),0, \ 3050 3065 wx.LEFT|wx.TOP|wx.ALIGN_CENTER_VERTICAL,10) 3051 3066 # azmthOff = G2G.ValidatedTxtCtrl(G2frame.dataDisplay,data,'azmthOff',nDig=(10,2),typeHint=float,OnLeave=OnAzmthOff) 3052 allScale = wx.TextCtrl( panel,value='',style=wx.TE_PROCESS_ENTER)3067 allScale = wx.TextCtrl(self.panel,value='',style=wx.TE_PROCESS_ENTER) 3053 3068 allScale.Bind(wx.EVT_TEXT_ENTER,self.OnAllScale) 3054 3069 allScale.Bind(wx.EVT_KILL_FOCUS,self.OnAllScale) 3055 3070 self.dataGridSizer.Add(allScale,0,WACV) 3056 3071 mainSizer.Add(self.dataGridSizer,0,wx.EXPAND) 3057 OkBtn = wx.Button(panel,-1,"Ok")3058 OkBtn.Bind(wx.EVT_BUTTON, self.OnOk)3059 cancelBtn = wx.Button( panel,-1,"Cancel")3072 self.OkBtn = wx.Button(self.panel,-1,"Ok") 3073 self.OkBtn.Bind(wx.EVT_BUTTON, self.OnOk) 3074 cancelBtn = wx.Button(self.panel,-1,"Cancel") 3060 3075 cancelBtn.Bind(wx.EVT_BUTTON, self.OnCancel) 3061 3076 btnSizer = wx.FlexGridSizer(0,3,10,20) 3062 3077 if self.dataType =='PWDR': 3063 TestBtn = wx.Button( panel,-1,"Test")3078 TestBtn = wx.Button(self.panel,-1,"Test") 3064 3079 TestBtn.Bind(wx.EVT_BUTTON, self.OnTest) 3065 3080 btnSizer.Add(TestBtn) 3066 btnSizer.Add( OkBtn)3081 btnSizer.Add(self.OkBtn) 3067 3082 btnSizer.Add(cancelBtn) 3068 3083 3069 panel.SetSizer(mainSizer)3070 panel.SetAutoLayout(1)3071 panel.SetupScrolling()3084 self.panel.SetSizer(mainSizer) 3085 self.panel.SetAutoLayout(1) 3086 self.panel.SetupScrolling() 3072 3087 mainSizer.Add((10,10),1) 3073 3088 mainSizer.Add(btnSizer,0,wx.CENTER) 3074 panel.SetSizer(mainSizer)3075 panel.Fit()3089 self.panel.SetSizer(mainSizer) 3090 self.panel.Fit() 3076 3091 self.Fit() 3092 3093 def Filter(self,event): 3094 '''Read text from filter control and select entries that match. 3095 ''' 3096 txt = self.filterBox.GetValue() 3097 if txt: 3098 txt = txt.lower() 3099 ChoiceList = [] 3100 ChoiceVals = [] 3101 for i,item in enumerate(self.selectData): 3102 if item.lower().find(txt) != -1: 3103 ChoiceList.append(item) 3104 ChoiceVals.append(self.selectVals[i]) 3105 self.selectData = ChoiceList 3106 self.selectVals = ChoiceVals 3107 else: 3108 self.selectData = copy.copy(self.data[:-1]) 3109 self.selectVals = len(self.data)*[0.0,] 3110 self.Draw() 3077 3111 3078 3112 def OnScaleChange(self,event): … … 3081 3115 value = self.FindWindowById(id).GetValue() 3082 3116 try: 3083 self. data[id][0] = float(value)3084 self.FindWindowById(id).SetValue('%.3f'%(self. data[id][0]))3117 self.selectVals[id] = float(value) 3118 self.FindWindowById(id).SetValue('%.3f'%(self.selectVals[id])) 3085 3119 except ValueError: 3086 3120 if value and '-' not in value[0]: … … 3095 3129 self.FindWindowById(id).SetValue('%.3f'%(scale)) 3096 3130 entries = self.dataGridSizer.GetChildren() 3097 for i,item in enumerate(self.data[:-1]): 3098 item[0] = scale 3099 entries[2*i].GetWindow().SetValue('%.3f'%(scale)) 3100 3131 for i,item in enumerate(self.selectVals): 3132 self.selectVals[i] = scale 3133 entries[2*i].GetWindow().SetValue('%.3f'%(self.selectVals[i])) 3101 3134 except ValueError: 3102 3135 print ('bad input - numbers only') 3103 3136 self.FindWindowById(id).SetValue('') 3104 3105 3137 3106 3138 def OnNameChange(self,event): … … 3115 3147 Ysum = [] 3116 3148 Vsum = [] 3117 result = self.data 3118 for i,item in enumerate(result[:-1]): 3119 scale,name = item 3120 data = self.dataList[i] 3149 for i,item in enumerate(self.selectData): 3150 name = item 3151 scale = self.selectVals[i] 3152 id = self.data.index(name) 3153 data = self.dataList[id] 3121 3154 if scale: 3122 3155 x,y,w,yc,yb,yd = data #numpy arrays! … … 3172 3205 def GetData(self): 3173 3206 if self.dataType == 'PWDR': 3174 return self. data,self.result3207 return self.selectData+[self.data[-1],],self.result 3175 3208 else: 3176 return self. data3209 return self.selectData+[self.data[-1],],self.selectVals 3177 3210 3178 3211 def OnPwdrSum(self,event): … … 3189 3222 Names.append(name) 3190 3223 if 'PWDR' in name: 3191 TextList.append( [0.0,name])3224 TextList.append(name) 3192 3225 DataList.append(self.GPXtree.GetItemPyData(item)[1]) # (x,y,w,yc,yb,yd) 3193 3226 if not Inst: … … 3256 3289 Names.append(name) 3257 3290 if 'IMG' in name: 3258 TextList.append( [0.0,name])3291 TextList.append(name) 3259 3292 DataList.append(self.GPXtree.GetImageLoc(item)) #Size,Image,Tag 3260 3293 IdList.append(item) … … 3269 3302 if dlg.ShowModal() == wx.ID_OK: 3270 3303 imSize = 0 3271 result = dlg.GetData()3304 result,scales = dlg.GetData() 3272 3305 First = True 3273 3306 Found = False 3274 for i, itemin enumerate(result[:-1]):3275 scale ,name = item3307 for i,name in enumerate(result[:-1]): 3308 scale = scales[i] 3276 3309 if scale: 3277 3310 Found = True -
trunk/GSASIIfiles.py
r3136 r3157 91 91 sfloat(s[20:30])/100.,sfloat(s[55:65]),sfloat(s[40:50])) #get lam1, lam2, zero, pola & ratio 92 92 if not v[1]: 93 names = ['Type','Lam','Zero','Polariz.','U','V','W','X','Y',' SH/L','Azimuth']93 names = ['Type','Lam','Zero','Polariz.','U','V','W','X','Y','Z','SH/L','Azimuth'] 94 94 v = (v[0],v[2],v[4]) 95 codes = [0,0,0,0 ]95 codes = [0,0,0,0,0] 96 96 rd.Sample.update({'Type':'Debye-Scherrer','Absorption':[0.,False],'DisplaceX':[0.,False],'DisplaceY':[0.,False]}) 97 97 else: 98 names = ['Type','Lam1','Lam2','Zero','I(L2)/I(L1)','Polariz.','U','V','W','X','Y',' SH/L','Azimuth']99 codes = [0,0,0,0,0,0 ]98 names = ['Type','Lam1','Lam2','Zero','I(L2)/I(L1)','Polariz.','U','V','W','X','Y','Z','SH/L','Azimuth'] 99 codes = [0,0,0,0,0,0,0] 100 100 rd.Sample.update({'Type':'Bragg-Brentano','Shift':[0.,False],'Transparency':[0.,False], 101 101 'SurfRoughA':[0.,False],'SurfRoughB':[0.,False]}) … … 108 108 v = Iparm['INS 1PRCF 2'].split() 109 109 if v1[0] == 3: 110 data.extend([float(v[0]),float(v[1]), float(v[2])+float(v[3],azm)]) #get LX, LY, S+H/L & azimuth110 data.extend([float(v[0]),float(v[1]),0.0,float(v[2])+float(v[3],azm)]) #get LX, LY, Z, S+H/L & azimuth 111 111 else: 112 data.extend([0.0,0.0,0.0 02,azm]) #OK defaults if fxn #3 not 1st in iprm file112 data.extend([0.0,0.0,0.0,0.002,azm]) #OK defaults if fxn #3 not 1st in iprm file 113 113 else: 114 114 v1 = Iparm['INS 1PRCF1 '].split() … … 118 118 v = Iparm['INS 1PRCF12'].split() 119 119 if v1[0] == 3: 120 data.extend([float(v[0]),float(v[1]), float(v[2])+float(v[3],azm)]) #get LX, LY, S+H/L & azimuth120 data.extend([float(v[0]),float(v[1]),0.0,float(v[2])+float(v[3],azm)]) #get LX, LY, Z, S+H/L & azimuth 121 121 else: 122 data.extend([0.0,0.0,0.0 02,azm]) #OK defaults if fxn #3 not 1st in iprm file122 data.extend([0.0,0.0,0.0,0.002,azm]) #OK defaults if fxn #3 not 1st in iprm file 123 123 codes.extend([0,0,0,0,0,0,0]) 124 124 Iparm1 = makeInstDict(names,data,codes) … … 128 128 elif 'T' in DataType: 129 129 names = ['Type','fltPath','2-theta','difC','difA', 'difB','Zero','alpha','beta-0','beta-1', 130 'beta-q','sig-0','sig-1','sig-2','sig-q', 'X','Y',' Azimuth',]131 codes = [0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0, ]130 'beta-q','sig-0','sig-1','sig-2','sig-q', 'X','Y','Z','Azimuth',] 131 codes = [0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,] 132 132 azm = 0. 133 133 if 'INS 1DETAZM' in Iparm: … … 153 153 data.extend([sfloat(s[1]),sfloat(s[2]),sfloat(s[3])]) #alpha, beta-0, beta-1 154 154 s = Iparm['INS 1PRCF 2'].split() 155 data.extend([0.0,0.0,sfloat(s[1]),sfloat(s[2]),0.0,0.0,0.0, azm]) #beta-q, sig-0, sig-1, sig-2, sig-q, X, Y155 data.extend([0.0,0.0,sfloat(s[1]),sfloat(s[2]),0.0,0.0,0.0,0.0,azm]) #beta-q, sig-0, sig-1, sig-2, sig-q, X, Y, Z 156 156 elif abs(pfType) in [3,4,5]: 157 157 data.extend([sfloat(s[0]),sfloat(s[1]),sfloat(s[2])]) #alpha, beta-0, beta-1 158 158 if abs(pfType) == 4: 159 data.extend([0.0,0.0,sfloat(s[3]),0.0,0.0,0.0,0.0, azm]) #beta-q, sig-0, sig-1, sig-2, sig-q, X, Y159 data.extend([0.0,0.0,sfloat(s[3]),0.0,0.0,0.0,0.0,0.0,azm]) #beta-q, sig-0, sig-1, sig-2, sig-q, X, Y, Z 160 160 else: 161 161 s = Iparm['INS 1PRCF 2'].split() 162 data.extend([0.0,0.0,sfloat(s[0]),sfloat(s[1]),0.0,0.0,0.0, azm]) #beta-q, sig-0, sig-1, sig-2, sig-q, X, Y162 data.extend([0.0,0.0,sfloat(s[0]),sfloat(s[1]),0.0,0.0,0.0,0.0,azm]) #beta-q, sig-0, sig-1, sig-2, sig-q, X, Y, Z 163 163 elif abs(pfType) == 2: 164 164 data.extend([sfloat(s[1]),0.0,1./sfloat(s[3])]) #alpha, beta-0, beta-1 165 data.extend([0.0,0.0,sfloat(s[1]),0.0,0.0,0.0,0.0, azm]) #beta-q, sig-0, sig-1, sig-2, sig-q, X, Y165 data.extend([0.0,0.0,sfloat(s[1]),0.0,0.0,0.0,0.0,0.0,azm]) #beta-q, sig-0, sig-1, sig-2, sig-q, X, Y, Z 166 166 else: 167 167 s = Iparm['INS 1PRCF1 '].split() … … 171 171 data.extend([sfloat(s[1]),sfloat(s[2]),sfloat(s[3])]) #alpha, beta-0, beta-1 172 172 s = Iparm['INS 1PRCF12'].split() 173 data.extend([0.0,0.0,sfloat(s[1]),sfloat(s[2]),0.0,0.0,0.0, azm]) #beta-q, sig-0, sig-1, sig-2, sig-q, X, Y173 data.extend([0.0,0.0,sfloat(s[1]),sfloat(s[2]),0.0,0.0,0.0,0.0,0.0,azm]) #beta-q, sig-0, sig-1, sig-2, sig-q, X, Y, Z 174 174 elif abs(pfType) in [3,4,5]: 175 175 data.extend([sfloat(s[0]),sfloat(s[1]),sfloat(s[2])]) #alpha, beta-0, beta-1 176 176 if abs(pfType) == 4: 177 data.extend([0.0,0.0,sfloat(s[3]),0.0,0.0,0.0,0.0, azm]) #beta-q, sig-0, sig-1, sig-2, sig-q, X, Y177 data.extend([0.0,0.0,sfloat(s[3]),0.0,0.0,0.0,0.0,0.0,azm]) #beta-q, sig-0, sig-1, sig-2, sig-q, X, Y, Z 178 178 else: 179 179 s = Iparm['INS 1PRCF12'].split() 180 data.extend([0.0,0.0,sfloat(s[0]),sfloat(s[1]),0.0,0.0,0.0, azm]) #beta-q, sig-0, sig-1, sig-2, sig-q, X, Y180 data.extend([0.0,0.0,sfloat(s[0]),sfloat(s[1]),0.0,0.0,0.0,0.0,azm]) #beta-q, sig-0, sig-1, sig-2, sig-q, X, Y, Z 181 181 Inst1 = makeInstDict(names,data,codes) 182 182 Inst1['Bank'] = [Bank,Bank,0] -
trunk/GSASIImath.py
r3136 r3157 3811 3811 '''get CW peak profile gamma 3812 3812 3813 :param dict ins: instrument parameters with at least 'X' & 'Y'3813 :param dict ins: instrument parameters with at least 'X', 'Y' & 'Z' 3814 3814 as values only 3815 3815 :param float pos: 2-theta of peak … … 3817 3817 3818 3818 ''' 3819 return ins['X']/cosd(pos/2.0)+ins['Y']*tand(pos/2.0) 3819 return ins['X']/cosd(pos/2.0)+ins['Y']*tand(pos/2.0)+ins['Z'] 3820 3820 3821 3821 def getCWgamDeriv(pos): 3822 '''get derivatives of CW peak profile gamma wrt X & Y3822 '''get derivatives of CW peak profile gamma wrt X, Y & Z 3823 3823 3824 3824 :param float pos: 2-theta of peak … … 3827 3827 3828 3828 ''' 3829 return 1./cosd(pos/2.0),tand(pos/2.0) 3829 return 1./cosd(pos/2.0),tand(pos/2.0),1.0 3830 3830 3831 3831 def getTOFsig(ins,dsp): … … 3839 3839 3840 3840 ''' 3841 return ins['sig-0']+ins['sig-1']*dsp**2+ins['sig-2']*dsp**4+ins['sig-q'] /dsp**23841 return ins['sig-0']+ins['sig-1']*dsp**2+ins['sig-2']*dsp**4+ins['sig-q']*dsp 3842 3842 3843 3843 def getTOFsigDeriv(dsp): … … 3849 3849 3850 3850 ''' 3851 return 1.0,dsp**2,dsp**4, 1./dsp**23851 return 1.0,dsp**2,dsp**4,dsp 3852 3852 3853 3853 def getTOFgamma(ins,dsp): 3854 3854 '''get TOF peak profile gamma 3855 3855 3856 :param dict ins: instrument parameters with at least 'X' & 'Y'3856 :param dict ins: instrument parameters with at least 'X', 'Y' & 'Z' 3857 3857 as values only 3858 3858 :param float dsp: d-spacing of peak … … 3861 3861 3862 3862 ''' 3863 return ins[' X']*dsp+ins['Y']*dsp**23863 return ins['Z']+ins['X']*dsp+ins['Y']*dsp**2 3864 3864 3865 3865 def getTOFgammaDeriv(dsp): 3866 '''get derivatives of TOF peak profile gamma wrt X & Y3866 '''get derivatives of TOF peak profile gamma wrt X, Y & Z 3867 3867 3868 3868 :param float dsp: d-spacing of peak … … 3871 3871 3872 3872 ''' 3873 return dsp,dsp**2 3873 return dsp,dsp**2,1.0 3874 3874 3875 3875 def getTOFbeta(ins,dsp): … … 3937 3937 ind = 1 3938 3938 ins = {} 3939 if 'C' in Parms['Type'][0]: #CW data - TOF later in an el if3940 for x in ['U','V','W','X','Y' ]:3939 if 'C' in Parms['Type'][0]: #CW data - TOF later in an else 3940 for x in ['U','V','W','X','Y','Z']: 3941 3941 ins[x] = Parms[x][ind] 3942 3942 if ifQ: #qplot - convert back to 2-theta … … 3952 3952 dsp = pos/Parms['difC'][1] 3953 3953 if 'Pdabc' in Parms2: 3954 for x in ['sig-0','sig-1','sig-2','sig-q','X','Y' ]:3954 for x in ['sig-0','sig-1','sig-2','sig-q','X','Y','Z']: 3955 3955 ins[x] = Parms[x][ind] 3956 3956 Pdabc = Parms2['Pdabc'].T … … 3958 3958 bet = np.interp(dsp,Pdabc[0],Pdabc[2]) 3959 3959 else: 3960 for x in ['alpha','beta-0','beta-1','beta-q','sig-0','sig-1','sig-2','sig-q','X','Y' ]:3960 for x in ['alpha','beta-0','beta-1','beta-q','sig-0','sig-1','sig-2','sig-q','X','Y','Z']: 3961 3961 ins[x] = Parms[x][ind] 3962 3962 alp = getTOFalpha(ins,dsp) -
trunk/GSASIIpwd.py
r3136 r3157 656 656 657 657 sig = lambda Th,U,V,W: np.sqrt(max(0.001,U*tand(Th)**2+V*tand(Th)+W)) 658 sigTOF = lambda dsp,S0,S1,S2,Sq: np.sqrt(S0+S1*dsp**2+S2*dsp**4+Sq /dsp**2)659 gam = lambda Th,X,Y : (X/cosd(Th)+Y*tand(Th))660 gamTOF = lambda dsp,X,Y :X*dsp+Y*dsp**2658 sigTOF = lambda dsp,S0,S1,S2,Sq: np.sqrt(S0+S1*dsp**2+S2*dsp**4+Sq*dsp) 659 gam = lambda Th,X,Y,Z: Z+X/cosd(Th)+Y*tand(Th) 660 gamTOF = lambda dsp,X,Y,Z: Z+X*dsp+Y*dsp**2 661 661 if 'C' in Inst['Type'][0]: 662 662 s = sig(pos/2.,Inst['U'][1],Inst['V'][1],Inst['W'][1]) 663 g = gam(pos/2.,Inst['X'][1],Inst['Y'][1] )663 g = gam(pos/2.,Inst['X'][1],Inst['Y'][1],Inst['Z'][1]) 664 664 return getgamFW(g,s)/100. #returns FWHM in deg 665 665 else: 666 666 dsp = pos/Inst['difC'][0] 667 667 s = sigTOF(dsp,Inst['sig-0'][1],Inst['sig-1'][1],Inst['sig-2'][1],Inst['sig-q'][1]) 668 g = gamTOF(dsp,Inst['X'][1],Inst['Y'][1] )668 g = gamTOF(dsp,Inst['X'][1],Inst['Y'][1],Inst['Z'][1]) 669 669 return getgamFW(g,s) 670 670 … … 1211 1211 if gamName in varyList: 1212 1212 gam = parmDict[gamName] 1213 dgdX = dgdY = 01213 dgdX = dgdY = dgdZ = 0 1214 1214 else: 1215 1215 gam = G2mth.getCWgam(parmDict,tth) 1216 dgdX,dgdY = G2mth.getCWgamDeriv(tth)1216 dgdX,dgdY,dgdZ = G2mth.getCWgamDeriv(tth) 1217 1217 gam = max(gam,0.001) #avoid neg gamma 1218 1218 Wd,fmin,fmax = getWidthsCW(pos,sig,gam,shl) … … 1257 1257 if 'Y' in varyList: 1258 1258 dMdv[varyList.index('Y')] += dgdY*dervDict['gam'] 1259 if 'Z' in varyList: 1260 dMdv[varyList.index('Z')] += dgdZ*dervDict['gam'] 1259 1261 if 'SH/L' in varyList: 1260 1262 dMdv[varyList.index('SH/L')] += dervDict['shl'] #problem here … … 1304 1306 if gamName in varyList: 1305 1307 gam = parmDict[gamName] 1306 dsdX = dsdY = 01308 dsdX = dsdY = dsdZ = 0 1307 1309 else: 1308 1310 gam = G2mth.getTOFgamma(parmDict,dsp) 1309 dsdX,dsdY = G2mth.getTOFgammaDeriv(dsp)1311 dsdX,dsdY,dsdZ = G2mth.getTOFgammaDeriv(dsp) 1310 1312 gam = max(gam,0.001) #avoid neg gamma 1311 1313 Wd,fmin,fmax = getWidthsTOF(pos,alp,bet,sig,gam) … … 1354 1356 dMdv[varyList.index('X')] += dsdX*dervDict['gam'] 1355 1357 if 'Y' in varyList: 1356 dMdv[varyList.index('Y')] += dsdY*dervDict['gam'] #problem here 1358 dMdv[varyList.index('Y')] += dsdY*dervDict['gam'] 1359 if 'Z' in varyList: 1360 dMdv[varyList.index('Z')] += dsdZ*dervDict['gam'] 1357 1361 iPeak += 1 1358 1362 except KeyError: #no more peaks to process … … 1623 1627 insNames.append(parm) 1624 1628 insVals.append(Inst[parm][1]) 1625 if parm in ['U','V','W','X','Y',' SH/L','I(L2)/I(L1)','alpha',1629 if parm in ['U','V','W','X','Y','Z','SH/L','I(L2)/I(L1)','alpha', 1626 1630 'beta-0','beta-1','beta-q','sig-0','sig-1','sig-2','sig-q',] and Inst[parm][2]: 1627 1631 insVary.append(parm) 1628 1632 instDict = dict(zip(insNames,insVals)) 1629 instDict['X'] = max(instDict['X'],0.01)1630 instDict['Y'] = max(instDict['Y'],0.01)1633 # instDict['X'] = max(instDict['X'],0.01) 1634 # instDict['Y'] = max(instDict['Y'],0.01) 1631 1635 if 'SH/L' in instDict: 1632 1636 instDict['SH/L'] = max(instDict['SH/L'],0.002) … … 1665 1669 sigstr = 'esds :' 1666 1670 for parm in Inst: 1667 if parm in ['U','V','W','X','Y',' SH/L','I(L2)/I(L1)','alpha',1671 if parm in ['U','V','W','X','Y','Z','SH/L','I(L2)/I(L1)','alpha', 1668 1672 'beta-0','beta-1','beta-q','sig-0','sig-1','sig-2','sig-q',]: 1669 1673 ptlbls += "%s" % (parm.center(12)) … … 2782 2786 'pos2':20.6426,'int2':1573.7,'sig2':1.0,'gam2':1.0, 2783 2787 'pos3':26.9568,'int3':925.1,'sig3':1.0,'gam3':1.0, 2784 'U':1.163,'V':-0.605,'W':0.093,'X':0.0,'Y':2.183,' SH/L':0.002,2788 'U':1.163,'V':-0.605,'W':0.093,'X':0.0,'Y':2.183,'Z':0.0,'SH/L':0.002, 2785 2789 'Back0':5.384,'Back1':-0.015,'Back2':.004, 2786 2790 } … … 2793 2797 'pos4':36.1119,'int4':115829.8,'sig4':1.0,'gam4':1.0, 2794 2798 'pos5':39.0122,'int5':6916.9,'sig5':1.0,'gam5':1.0, 2795 'U':22.75,'V':-17.596,'W':10.594,'X':1.577,'Y':5.778,' SH/L':0.002,2799 'U':22.75,'V':-17.596,'W':10.594,'X':1.577,'Y':5.778,'Z':0.0,'SH/L':0.002, 2796 2800 'Back0':36.897,'Back1':-0.508,'Back2':.006, 2797 2801 'Lam1':1.540500,'Lam2':1.544300,'I(L2)/I(L1)':0.5, … … 2800 2804 parmDict2 = { 2801 2805 'pos0':5.7,'int0':1000.0,'sig0':0.5,'gam0':0.5, 2802 'U':2.,'V':-2.,'W':5.,'X':0.5,'Y':0.5,' SH/L':0.02,2806 'U':2.,'V':-2.,'W':5.,'X':0.5,'Y':0.5,'Z':0.0,'SH/L':0.02, 2803 2807 'Back0':5.,'Back1':-0.02,'Back2':.004, 2804 2808 # 'Lam1':1.540500,'Lam2':1.544300,'I(L2)/I(L1)':0.5, … … 2853 2857 plotter = plot.PlotNotebook() 2854 2858 # test0() 2855 # for name in ['int0','pos0','sig0','gam0','U','V','W','X','Y',' SH/L','I(L2)/I(L1)']:2859 # for name in ['int0','pos0','sig0','gam0','U','V','W','X','Y','Z','SH/L','I(L2)/I(L1)']: 2856 2860 for name,shft in [['int0',0.1],['pos0',0.0001],['sig0',0.01],['gam0',0.00001], 2857 ['U',0.1],['V',0.01],['W',0.01],['X',0.0001],['Y',0.0001],[' SH/L',0.00005]]:2861 ['U',0.1],['V',0.01],['W',0.01],['X',0.0001],['Y',0.0001],['Z',0.0001],['SH/L',0.00005]]: 2858 2862 test2(name,shft) 2859 2863 for name,shft in [['pos',0.0001],['sig',0.01],['gam',0.0001],['shl',0.00005]]: -
trunk/GSASIIpwdGUI.py
r3155 r3157 972 972 insNames.append(parm) 973 973 insVals.append(Inst[parm][1]) 974 if parm in ['U','V','W','X','Y',' SH/L','I(L2)/I(L1)','alpha',974 if parm in ['U','V','W','X','Y','Z','SH/L','I(L2)/I(L1)','alpha', 975 975 'beta-0','beta-1','beta-q','sig-0','sig-1','sig-2','sig-q',] and Inst[parm][2]: 976 976 Inst[parm][2] = False … … 1418 1418 good = [] 1419 1419 for key in keys: 1420 if key in ['Type','Bank','U','V','W','X','Y',' SH/L','I(L2)/I(L1)','alpha',1420 if key in ['Type','Bank','U','V','W','X','Y','Z','SH/L','I(L2)/I(L1)','alpha', 1421 1421 'beta-0','beta-1','beta-q','sig-0','sig-1','sig-2','sig-q','Polariz.', 1422 1422 'Lam','Azimuth','2-theta','fltPath','difC','difA','difB','Zero','Lam1','Lam2']: … … 1795 1795 refFlgElem.append([item,2]) 1796 1796 instSizer.Add(RefineBox(item),0,WACV) 1797 for item in ['U','V','W','X','Y',' SH/L']:1797 for item in ['U','V','W','X','Y','Z','SH/L']: 1798 1798 nDig = (10,3) 1799 1799 if item == 'SH/L': … … 1824 1824 refFlgElem.append(None) 1825 1825 if 'Pdabc' in Inst2: 1826 Items = ['sig-0','sig-1','sig-2','sig-q','X','Y' ]1826 Items = ['sig-0','sig-1','sig-2','sig-q','X','Y','Z'] 1827 1827 subSizer.Add(wx.StaticText(G2frame.dataWindow,-1,' difC: '),0,WACV) 1828 1828 txt = '%8.2f'%(insVal['difC']) … … 1834 1834 subSizer.Add(wx.StaticText(G2frame.dataWindow,-1,' alpha, beta: fixed by table'),0,WACV) 1835 1835 else: 1836 Items = ['difC','difA','difB','Zero','alpha','beta-0','beta-1','beta-q','sig-0','sig-1','sig-2','sig-q','X','Y' ]1836 Items = ['difC','difA','difB','Zero','alpha','beta-0','beta-1','beta-q','sig-0','sig-1','sig-2','sig-q','X','Y','Z'] 1837 1837 mainSizer.Add((5,5),0) 1838 1838 mainSizer.Add(subSizer) … … 1930 1930 patched += 1 1931 1931 if patched: print (patched,' instrument parameters changed from tuples') 1932 if 'Z' not in data: 1933 data['Z'] = [0.0,0.0,False] 1932 1934 #end of patch 1933 1935 labelLst,elemKeysLst,dspLst,refFlgElem = [],[],[],[] -
trunk/GSASIIscriptable.py
r3136 r3157 1668 1668 insNames.append(parm) 1669 1669 insVals.append(Inst[parm][1]) 1670 if parm in ['U','V','W','X','Y',' SH/L','I(L2)/I(L1)','alpha',1670 if parm in ['U','V','W','X','Y','Z','SH/L','I(L2)/I(L1)','alpha', 1671 1671 'beta-0','beta-1','beta-q','sig-0','sig-1','sig-2','sig-q',] and Inst[parm][2]: 1672 1672 Inst[parm][2] = False -
trunk/GSASIIstrIO.py
r3136 r3157 2860 2860 return bakType,backDict,backVary 2861 2861 2862 def GetInstParms(hId,Inst): 2862 def GetInstParms(hId,Inst): 2863 #patch 2864 if 'Z' not in Inst: 2865 Inst['Z'] = [0.0,0.0,False] 2863 2866 dataType = Inst['Type'][0] 2864 2867 instDict = {} -
trunk/GSASIIstrMath.py
r3149 r3157 3073 3073 X = parmDict[hfx+'X'] 3074 3074 Y = parmDict[hfx+'Y'] 3075 Z = parmDict[hfx+'Z'] 3075 3076 tanPos = tand(refl[5+im]/2.0) 3076 3077 Ssig,Sgam = GetSampleSigGam(refl,im,wave,G,GB,SGData,hfx,phfx,calcControls,parmDict) 3077 3078 sig = U*tanPos**2+V*tanPos+W+Ssig #save peak sigma 3078 3079 sig = max(0.001,sig) 3079 gam = X/cosd(refl[5+im]/2.0)+Y*tanPos+Sgam #save peak gamma3080 gam = X/cosd(refl[5+im]/2.0)+Y*tanPos+Sgam+Z #save peak gamma 3080 3081 gam = max(0.001,gam) 3081 3082 return sig,gam … … 3083 3084 def GetReflSigGamTOF(refl,im,G,GB,phfx,calcControls,parmDict): 3084 3085 sig = parmDict[hfx+'sig-0']+parmDict[hfx+'sig-1']*refl[4+im]**2+ \ 3085 parmDict[hfx+'sig-2']*refl[4+im]**4+parmDict[hfx+'sig-q'] /refl[4+im]**23086 gam = parmDict[hfx+'X']*refl[4+im]+parmDict[hfx+'Y']*refl[4+im]**2 3086 parmDict[hfx+'sig-2']*refl[4+im]**4+parmDict[hfx+'sig-q']*refl[4+im] 3087 gam = parmDict[hfx+'X']*refl[4+im]+parmDict[hfx+'Y']*refl[4+im]**2+parmDict[hfx+'Z'] 3087 3088 Ssig,Sgam = GetSampleSigGam(refl,im,0.0,G,GB,SGData,hfx,phfx,calcControls,parmDict) 3088 3089 sig += Ssig … … 3794 3795 names = {hfx+'Scale':[dIdsh,'int'],hfx+'Polariz.':[dIdpola,'int'],phfx+'Scale':[dIdsp,'int'], 3795 3796 hfx+'U':[tanth**2,'sig'],hfx+'V':[tanth,'sig'],hfx+'W':[1.0,'sig'], 3796 hfx+'X':[1.0/costh,'gam'],hfx+'Y':[tanth,'gam'],hfx+' SH/L':[1.0,'shl'],3797 hfx+'X':[1.0/costh,'gam'],hfx+'Y':[tanth,'gam'],hfx+'Z':[1.0,'gam'],hfx+'SH/L':[1.0,'shl'], 3797 3798 hfx+'I(L2)/I(L1)':[1.0,'L1/L2'],hfx+'Zero':[dpdZ,'pos'],hfx+'Lam':[dpdw,'pos'], 3798 3799 hfx+'Shift':[dpdSh,'pos'],hfx+'Transparency':[dpdTr,'pos'],hfx+'DisplaceX':[dpdX,'pos'], … … 3807 3808 names = {hfx+'Scale':[dIdsh,'int'],phfx+'Scale':[dIdsp,'int'], 3808 3809 hfx+'difC':[dpdDC,'pos'],hfx+'difA':[dpdDA,'pos'],hfx+'difB':[dpdDB,'pos'], 3809 hfx+'Zero':[dpdZ,'pos'],hfx+'X':[refl[4+im],'gam'],hfx+'Y':[refl[4+im]**2,'gam'], 3810 hfx+'Zero':[dpdZ,'pos'],hfx+'X':[refl[4+im],'gam'],hfx+'Y':[refl[4+im]**2,'gam'],hfx+'Z':[1.0,'gam'], 3810 3811 hfx+'alpha':[1./refl[4+im],'alp'],hfx+'beta-0':[1.0,'bet'],hfx+'beta-1':[1./refl[4+im]**4,'bet'], 3811 3812 hfx+'beta-q':[1./refl[4+im]**2,'bet'],hfx+'sig-0':[1.0,'sig'],hfx+'sig-1':[refl[4+im]**2,'sig'], 3812 hfx+'sig-2':[refl[4+im]**4,'sig'],hfx+'sig-q':[ 1./refl[4+im]**2,'sig'],3813 hfx+'sig-2':[refl[4+im]**4,'sig'],hfx+'sig-q':[refl[4+im],'sig'], 3813 3814 hfx+'Absorption':[dFdAb,'int'],phfx+'Extinction':[dFdEx,'int'],} 3814 3815 for name in names: -
trunk/defaultIparms.py
r2659 r3157 42 42 'Type:PXC;Bank:1\n', 43 43 'Lam1:1.5405;Lam2:1.5443;Zero:0.0;Polariz.:0.7;Azimuth:0.0;I(L2)/I(L1):0.5\n', 44 'U:2.0;V:-2.0;W:5.0;X:0.0;Y:0.0; SH/L:0.002\n',44 'U:2.0;V:-2.0;W:5.0;X:0.0;Y:0.0;Z:0.0;SH/L:0.002\n', 45 45 ]) 46 46 … … 50 50 'Type:PXC;Bank:1\n', 51 51 'Lam:0.413263;Polariz.:0.99;Azimuth:0.0;Zero:0.0\n', 52 'U:1.163;V:-0.126;W:0.063;X:0.0;Y:0.0; SH/L:0.002\n',52 'U:1.163;V:-0.126;W:0.063;X:0.0;Y:0.0;Z:0.0;SH/L:0.002\n', 53 53 ]) 54 54 … … 59 59 'Lam:0.69968;Zero:0.0;Polariz.:0.99;Azimuth:0.0\n', 60 60 'U:5.9840407759;V:-1.28771353531;W:0.118521878603\n', 61 'X:-0.0977791308891;Y:4.40147397286; SH/L:0.0264356231583\n',61 'X:-0.0977791308891;Y:4.40147397286;Z:0.0;SH/L:0.0264356231583\n', 62 62 ]) 63 63 … … 68 68 'Lam:1.909;Zero:0.0;Polariz.:0.0;Azimuth:0.0\n', 69 69 'U:257.182710995;V:-640.525145369;W:569.378664828\n', 70 'X:0.0;Y:0.0; SH/L:0.002\n',70 'X:0.0;Y:0.0;Z:0.0;SH/L:0.002\n', 71 71 ]) 72 72 … … 80 80 'beta-0:0.0332763989665;beta-1:0.000964057827372;beta-q:0.0\n', 81 81 'sig-0:0.0;sig-1:15.1402867268;sig-2:0.0;sig-q:0.0\n', 82 'X:0.0;Y:0.0 \n',82 'X:0.0;Y:0.0;Z:0.0\n', 83 83 ]) 84 84 … … 92 92 'beta-0:0.03;beta-1:0.004;beta-q:0.0\n', 93 93 'sig-0:0.0;sig-1:80.0;sig-2:0.0;sig-q:0.0\n', 94 'X:0.0;Y:0.0 \n',94 'X:0.0;Y:0.0;Z:0.0\n', 95 95 ]) 96 96 … … 103 103 'beta-0:0.138077840635;beta-1:0.0029606795286;beta-q:0.0\n', 104 104 'sig-0:24.8202075678;sig-1:-82.07196132;sig-2:269.925504862;sig-q:0.0\n', 105 'X:-1.80259010604;Y:4.47209435997 \n',105 'X:-1.80259010604;Y:4.47209435997;Z:0.0\n', 106 106 ]) 107 107 … … 114 114 'beta-0:0.;beta-1:0.005;beta-q:0.0\n', 115 115 'sig-0:0.;sig-1:-50.;sig-2:0.;sig-q:0.0\n', 116 'X:0.;Y:0. \n',116 'X:0.;Y:0.;Z:0.\n', 117 117 ])
Note: See TracChangeset
for help on using the changeset viewer.