Changeset 335
- Timestamp:
- Jul 7, 2011 1:53:57 PM (12 years ago)
- Location:
- trunk
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/GSASII.py
r327 r335 253 253 self._init_ctrls(parent) 254 254 self.Bind(wx.EVT_CLOSE, self.ExitMain) 255 # various defaults 255 256 self.GSASprojectfile = '' 256 257 self.dirname = '' … … 270 271 self.Interpolate = 'nearest' 271 272 self.ContourColor = 'Paired' 273 self.Projection = 'equal area' 272 274 self.logPlot = False 273 275 self.qPlot = False -
trunk/GSASIIgrid.py
r311 r335 37 37 ] = [wx.NewId() for _init_coll_MASK_Items in range(3)] 38 38 39 [ wxID_PAWLEYLOAD, wxID_PAWLEYIMPORT, 40 ] = [wx.NewId() for _init_coll_PAWLEY_Items in range( 2)]39 [ wxID_PAWLEYLOAD, wxID_PAWLEYIMPORT, wxID_PAWLEYDELETE, 40 ] = [wx.NewId() for _init_coll_PAWLEY_Items in range(3)] 41 41 42 42 [ wxID_INSTPRMRESET, … … 150 150 parent.Append(id=wxID_PAWLEYIMPORT, kind=wx.ITEM_NORMAL,text='Pawley import', 151 151 help='Import Pawley reflection list') 152 parent.Append(id=wxID_PAWLEYDELETE, kind=wx.ITEM_NORMAL,text='Pawley delete', 153 help='Delete Pawley reflection list') 152 154 153 155 def _init_coll_IndPeaks_Items(self,parent): -
trunk/GSASIIphsGUI.py
r327 r335 209 209 self.dataDisplay.DeletePage(self.dataDisplay.FindPage('Draw Atoms')) 210 210 self.dataDisplay.AdvanceSelection() 211 if not self.dataDisplay.FindPage('Pawley /Lebailreflections'):212 self.dataDisplay.AddPage(G2gd.GSGrid(self.dataDisplay),'Pawley /LeBailreflections')211 if not self.dataDisplay.FindPage('Pawley reflections'): 212 self.dataDisplay.AddPage(G2gd.GSGrid(self.dataDisplay),'Pawley reflections') 213 213 else: 214 214 TypeTxt.SetValue(generalData['Type']) … … 350 350 nameSizer.Add(NameTxt,0,wx.ALIGN_CENTER_VERTICAL) 351 351 nameSizer.Add(wx.StaticText(dataDisplay,-1,' Phase type: '),0,wx.ALIGN_CENTER_VERTICAL) 352 TypeTxt = wx.ComboBox(dataDisplay,-1,value=generalData['Type'],choices=phaseTypes, 352 if len(data['Atoms']): 353 choices = phaseTypes[:-1] 354 else: 355 choices = phaseTypes 356 TypeTxt = wx.ComboBox(dataDisplay,-1,value=generalData['Type'],choices=choices, 353 357 style=wx.CB_READONLY|wx.CB_DROPDOWN) 354 358 TypeTxt.Bind(wx.EVT_COMBOBOX, OnPhaseType) … … 1856 1860 'SH Coeff':[False,{}],'SHShow':False,'PFhkl':[0,0,1], 1857 1861 'PFxyz':[0,0,1.],'PlotType':'Pole figure'} 1862 if 'SHShow' not in textureData: #another fix 1863 textureData.update({'SHShow':False,'PFhkl':[0,0,1],'PFxyz':[0,0,1.],'PlotType':'Pole figure'}) 1858 1864 try: #another fix! 1859 1865 x = textureData['PlotType'] … … 1896 1902 UpdateDData() 1897 1903 1904 def OnProjSel(event): 1905 self.Projection = projSel.GetValue() 1906 G2plt.PlotTexture(self,data,newPlot=False) 1907 1908 def OnColorSel(event): 1909 self.ContourColor = colorSel.GetValue() 1910 G2plt.PlotTexture(self,data,newPlot=False) 1911 1898 1912 def OnAngRef(event): 1899 1913 Obj = event.GetEventObject() … … 2112 2126 dataDisplay = wx.Panel(DData) 2113 2127 mainSizer = wx.BoxSizer(wx.VERTICAL) 2114 mainSizer.Add(wx.StaticText(dataDisplay,-1,'Spherical harmonics texture data for '+PhaseName+':'),0,wx.ALIGN_CENTER_VERTICAL) 2128 titleSizer = wx.BoxSizer(wx.HORIZONTAL) 2129 titleSizer.Add(wx.StaticText(dataDisplay,-1,'Spherical harmonics texture data for '+PhaseName+':'),0,wx.ALIGN_CENTER_VERTICAL) 2130 titleSizer.Add(wx.StaticText(dataDisplay,-1, 2131 ' Texture Index J = %7.3f'%(G2lat.textureIndex(textureData['SH Coeff'][1]))), 2132 0,wx.ALIGN_CENTER_VERTICAL) 2133 mainSizer.Add(titleSizer,0) 2115 2134 mainSizer.Add((0,5),0) 2116 2135 shSizer = wx.BoxSizer(wx.HORIZONTAL) … … 2136 2155 mainSizer.Add(shSizer,0,0) 2137 2156 mainSizer.Add((0,5),0) 2138 mainSizer.Add(wx.StaticText(dataDisplay,-1, 2139 'Texture Index J = %7.3f'%(G2lat.textureIndex(textureData['SH Coeff'][1]))), 2140 0,wx.ALIGN_CENTER_VERTICAL) 2157 PTSizer = wx.FlexGridSizer(2,4,5,5) 2158 PTSizer.Add(wx.StaticText(dataDisplay,-1,' Texture plot type: '),0,wx.ALIGN_CENTER_VERTICAL) 2159 choices = ['Axial pole distribution','Pole figure','Inverse pole figure'] 2160 pfType = wx.ComboBox(dataDisplay,-1,value=str(textureData['PlotType']),choices=choices, 2161 style=wx.CB_READONLY|wx.CB_DROPDOWN) 2162 pfType.Bind(wx.EVT_COMBOBOX,OnPfType) 2163 PTSizer.Add(pfType,0,wx.ALIGN_CENTER_VERTICAL) 2164 PTSizer.Add(wx.StaticText(dataDisplay,-1,' Projection type: '),0,wx.ALIGN_CENTER_VERTICAL) 2165 projSel = wx.ComboBox(dataDisplay,-1,value=self.Projection,choices=['equal area','stereographic'], 2166 style=wx.CB_READONLY|wx.CB_DROPDOWN) 2167 projSel.Bind(wx.EVT_COMBOBOX,OnProjSel) 2168 PTSizer.Add(projSel,0,wx.ALIGN_CENTER_VERTICAL) 2169 if textureData['PlotType'] in ['Pole figure','Axial pole distribution']: 2170 PTSizer.Add(wx.StaticText(dataDisplay,-1,' Pole figure HKL: '),0,wx.ALIGN_CENTER_VERTICAL) 2171 PH = textureData['PFhkl'] 2172 pfVal = wx.TextCtrl(dataDisplay,-1,'%d,%d,%d'%(PH[0],PH[1],PH[2]),style=wx.TE_PROCESS_ENTER) 2173 else: 2174 PTSizer.Add(wx.StaticText(dataDisplay,-1,' Inverse pole figure XYZ: '),0,wx.ALIGN_CENTER_VERTICAL) 2175 PX = textureData['PFxyz'] 2176 pfVal = wx.TextCtrl(dataDisplay,-1,'%3.1f,%3.1f,%3.1f'%(PX[0],PX[1],PX[2]),style=wx.TE_PROCESS_ENTER) 2177 pfVal.Bind(wx.EVT_TEXT_ENTER,OnPFValue) 2178 pfVal.Bind(wx.EVT_KILL_FOCUS,OnPFValue) 2179 PTSizer.Add(pfVal,0,wx.ALIGN_CENTER_VERTICAL) 2180 PTSizer.Add(wx.StaticText(dataDisplay,-1,' Color scheme'),0,wx.ALIGN_CENTER_VERTICAL) 2181 choice = [m for m in mpl.cm.datad.keys() if not m.endswith("_r")] 2182 choice.sort() 2183 colorSel = wx.ComboBox(dataDisplay,-1,value=self.ContourColor,choices=choice, 2184 style=wx.CB_READONLY|wx.CB_DROPDOWN) 2185 colorSel.Bind(wx.EVT_COMBOBOX,OnColorSel) 2186 PTSizer.Add(colorSel,0,wx.ALIGN_CENTER_VERTICAL) 2187 mainSizer.Add(PTSizer,0,wx.ALIGN_CENTER_VERTICAL) 2188 2141 2189 mainSizer.Add((0,5),0) 2142 2190 if textureData['SHShow']: … … 2156 2204 mainSizer.Add(ODFSizer,0,wx.ALIGN_CENTER_VERTICAL) 2157 2205 mainSizer.Add((0,5),0) 2158 PFSizer = wx.BoxSizer(wx.HORIZONTAL)2159 PFSizer.Add(wx.StaticText(dataDisplay,-1,'Texture plot type: '),0,wx.ALIGN_CENTER_VERTICAL)2160 choices = ['Axial pole distribution','Pole figure','Inverse pole figure']2161 pfType = wx.ComboBox(dataDisplay,-1,value=str(textureData['PlotType']),choices=choices,2162 style=wx.CB_READONLY|wx.CB_DROPDOWN)2163 pfType.Bind(wx.EVT_COMBOBOX,OnPfType)2164 PFSizer.Add(pfType,0,wx.ALIGN_CENTER_VERTICAL)2165 mainSizer.Add(PFSizer,0,wx.ALIGN_CENTER_VERTICAL)2166 if textureData['PlotType'] in ['Pole figure','Axial pole distribution']:2167 PFSizer.Add(wx.StaticText(dataDisplay,-1,' Display pole figure for HKL: '),0,wx.ALIGN_CENTER_VERTICAL)2168 PH = textureData['PFhkl']2169 pfVal = wx.TextCtrl(dataDisplay,-1,'%d,%d,%d'%(PH[0],PH[1],PH[2]),style=wx.TE_PROCESS_ENTER)2170 pfVal.Bind(wx.EVT_TEXT_ENTER,OnPFValue)2171 pfVal.Bind(wx.EVT_KILL_FOCUS,OnPFValue)2172 PFSizer.Add(pfVal,0,wx.ALIGN_CENTER_VERTICAL)2173 else:2174 PFSizer.Add(wx.StaticText(dataDisplay,-1,' Display inverse pole figure for XYZ: '),0,wx.ALIGN_CENTER_VERTICAL)2175 PX = textureData['PFxyz']2176 pfVal = wx.TextCtrl(dataDisplay,-1,'%3.1f,%3.1f,%3.1f'%(PX[0],PX[1],PX[2]),style=wx.TE_PROCESS_ENTER)2177 pfVal.Bind(wx.EVT_TEXT_ENTER,OnPFValue)2178 pfVal.Bind(wx.EVT_KILL_FOCUS,OnPFValue)2179 PFSizer.Add(pfVal,0,wx.ALIGN_CENTER_VERTICAL)2180 2206 mainSizer.Add((0,5),0) 2181 2207 mainSizer.Add(wx.StaticText(dataDisplay,-1,'Sample orientation angles: '),0,wx.ALIGN_CENTER_VERTICAL) … … 2547 2573 HKLd = G2lat.GenHLaue(dmin,Laue,SGLatt,SGUniq,A) 2548 2574 PawleyPeaks = [] 2549 for h,k,l,d in HKLd: 2550 ext,mul = G2spc.GenHKL([h,k,l],SGData)[:2] 2551 if not ext: 2552 th = asind(lam/(2.0*d)) 2553 H = gamFW(sig(th,GU,GV,GW),gam(th,LX,LY))/2.35482 2554 PawleyPeaks.append([h,k,l,mul,2*th,H,False,0,0]) 2575 wx.BeginBusyCursor() 2576 try: 2577 for h,k,l,d in HKLd: 2578 ext,mul = G2spc.GenHKL([h,k,l],SGData)[:2] 2579 if not ext: 2580 th = asind(lam/(2.0*d)) 2581 H = gamFW(sig(th,GU,GV,GW),gam(th,LX,LY))/2.35482 2582 PawleyPeaks.append([h,k,l,mul,2*th,H,False,0,0]) 2583 finally: 2584 wx.EndBusyCursor() 2555 2585 data['Pawley ref'] = PawleyPeaks 2556 2586 FillPawleyReflectionsGrid() … … 2579 2609 finally: 2580 2610 dlg.Destroy() 2611 2612 def OnPawleyDelete(event): 2613 dlg = wx.MessageDialog(self,'Do you really want to delete Pawley reflections?','Delete', 2614 wx.YES_NO | wx.ICON_QUESTION) 2615 try: 2616 result = dlg.ShowModal() 2617 finally: 2618 dlg.Destroy() 2619 if result == wx.ID_YES: 2620 data['Pawley ref'] = [] 2621 FillPawleyReflectionsGrid() 2581 2622 2582 2623 def OnPageChanged(event): … … 2624 2665 UpdateDrawAtoms() 2625 2666 G2plt.PlotStructure(self,data) 2626 elif text == 'Pawley /LeBailreflections':2667 elif text == 'Pawley reflections': 2627 2668 self.dataFrame.SetMenuBar(self.dataFrame.PawleyMenu) 2628 2669 self.dataFrame.Bind(wx.EVT_MENU, OnPawleyLoad, id=G2gd.wxID_PAWLEYLOAD) 2629 2670 self.dataFrame.Bind(wx.EVT_MENU, OnPawleyImport, id=G2gd.wxID_PAWLEYIMPORT) 2671 self.dataFrame.Bind(wx.EVT_MENU, OnPawleyDelete, id=G2gd.wxID_PAWLEYDELETE) 2630 2672 FillPawleyReflectionsGrid() 2631 2673 else: … … 2643 2685 self.dataDisplay.AddPage(DData,'Data') 2644 2686 PawleyRefl = G2gd.GSGrid(self.dataDisplay) 2645 self.dataDisplay.AddPage(PawleyRefl,'Pawley /LeBailreflections')2687 self.dataDisplay.AddPage(PawleyRefl,'Pawley reflections') 2646 2688 else: 2647 2689 DData = wx.ScrolledWindow(self.dataDisplay) -
trunk/GSASIIplot.py
r327 r335 49 49 npacosd = lambda x: 180.*np.arccos(x)/np.pi 50 50 npasind = lambda x: 180.*np.arcsin(x)/np.pi 51 npatand = lambda x: 180.*np.arctan(x)/np.pi 51 52 npatan2d = lambda x,y: 180.*np.arctan2(x,y)/np.pi 52 53 … … 1021 1022 instParms = self.PatternTree.GetItemPyData( \ 1022 1023 G2gd.GetPatternTreeItemId(self,PatternId, 'Instrument Parameters')) 1023 if instParms[0][0] == 'PXC':1024 if instParms[0][0] in ['PXC','PNC']: 1024 1025 lam = instParms[1][1] 1025 1026 if len(instParms[1]) == 13: … … 1088 1089 for peak in peaks: 1089 1090 X.append(4.0*math.pi*sind(peak[0]/2.0)/lam) 1090 s = 1.17741*math.sqrt(peak[4])*math.pi/18000. 1091 try: 1092 s = 1.17741*math.sqrt(peak[4])*math.pi/18000. 1093 except ValueError: 1094 s = 0.01 1091 1095 g = peak[6]*math.pi/18000. 1092 1096 G = gamFW(g,s) … … 1211 1215 SHCoef = SHData['SH Coeff'][1] 1212 1216 cell = generalData['Cell'][1:7] 1217 Amat,Bmat = G2lat.cell2AB(cell) 1218 sq2 = 1.0/math.sqrt(2.0) 1213 1219 1220 def rp2xyz(r,p): 1221 z = npcosd(r) 1222 xy = np.sqrt(1.-z**2) 1223 return xy*npsind(p),xy*npcosd(p),z 1224 1214 1225 def OnMotion(event): 1215 Page.canvas.SetToolTipString('')1226 SHData = data['General']['SH Texture'] 1216 1227 if event.xdata and event.ydata: #avoid out of frame errors 1217 if 'Pole figure' in SHData['PlotType']: 1218 xpos = event.xdata 1219 ypos = event.ydata 1220 Int = 0 1221 if xpos**2+ypos**2 < 1.0: 1222 r,p = 2.*npasind(np.sqrt(xpos**2+ypos**2)*0.707106782),npatan2d(ypos,xpos) 1228 xpos = event.xdata 1229 ypos = event.ydata 1230 if 'Inverse' in SHData['PlotType']: 1231 r = xpos**2+ypos**2 1232 if r <= 1.0: 1233 if 'equal' in self.Projection: 1234 r,p = 2.*npasind(np.sqrt(r)*sq2),npatan2d(ypos,xpos) 1235 else: 1236 r,p = 2.*npatand(np.sqrt(r)),npatan2d(ypos,xpos) 1237 ipf = G2lat.invpolfcal(IODFln,SGData,np.array([r,]),np.array([p,])) 1238 xyz = np.inner(Amat.T,np.array([rp2xyz(r,p)])) 1239 y,x,z = list(xyz/np.max(np.abs(xyz))) 1240 1241 self.G2plotNB.status.SetFields(['', 1242 'psi =%9.3f, beta =%9.3f, MRD =%9.3f xyz=%5.2f,%5.2f,%5.2f'%(r,p,ipf,x,y,z)]) 1243 1244 elif 'Axial' in SHData['PlotType']: 1245 pass 1246 1247 else: #ordinary pole figure 1248 z = xpos**2+ypos**2 1249 if z <= 1.0: 1250 z = np.sqrt(z) 1251 if 'equal' in self.Projection: 1252 r,p = 2.*npasind(z*sq2),npatan2d(ypos,xpos) 1253 else: 1254 r,p = 2.*npatand(z),npatan2d(ypos,xpos) 1223 1255 pf = G2lat.polfcal(ODFln,SamSym[textureData['Model']],np.array([r,]),np.array([p,])) 1224 1256 self.G2plotNB.status.SetFields(['','phi =%9.3f, gam =%9.3f, MRD =%9.3f'%(r,p,pf)]) 1225 1257 1226 1258 try: 1227 1259 plotNum = self.G2plotNB.plotList.index('Texture') … … 1236 1268 Page = self.G2plotNB.nb.GetPage(plotNum) 1237 1269 Page.canvas.mpl_connect('motion_notify_event', OnMotion) 1238 Page.SetFocus() 1239 1270 1271 Page.SetFocus() 1272 self.G2plotNB.status.SetFields(['','']) 1273 PH = np.array(SHData['PFhkl']) 1274 phi,beta = G2lat.CrsAng(PH,cell,SGData) 1275 ODFln = G2lat.Flnh(Start,SHCoef,phi,beta,SGData) 1276 PX = np.array(SHData['PFxyz']) 1277 gam = atan2d(PX[0],PX[1]) 1278 xy = math.sqrt(PX[0]**2+PX[1]**2) 1279 xyz = math.sqrt(PX[0]**2+PX[1]**2+PX[2]**2) 1280 psi = asind(xy/xyz) 1281 IODFln = G2lat.Glnh(Start,SHCoef,psi,gam,SamSym[textureData['Model']]) 1240 1282 if 'Axial' in SHData['PlotType']: 1241 PH = np.array(SHData['PFhkl'])1242 phi,beta = G2lat.CrsAng(PH,cell,SGData)1243 ODFln = G2lat.Flnh(Start,SHCoef,phi,beta,SGData)1244 1283 X = np.linspace(0,90.0,26) 1245 1284 Y = G2lat.polfcal(ODFln,SamSym[textureData['Model']],X,0.0) … … 1251 1290 1252 1291 else: 1292 npts = 201 1253 1293 if 'Inverse' in SHData['PlotType']: 1254 PX = np.array(SHData['PFxyz'])1255 gam = atan2d(PX[0],PX[1])1256 xy = math.sqrt(PX[0]**2+PX[1]**2)1257 xyz = math.sqrt(PX[0]**2+PX[1]**2+PX[2]**2)1258 psi = asind(xy/xyz)1259 npts = 2011260 ODFln = G2lat.Glnh(Start,SHCoef,psi,gam,SamSym[textureData['Model']])1261 1294 X,Y = np.meshgrid(np.linspace(1.,-1.,npts),np.linspace(-1.,1.,npts)) 1262 1295 R,P = np.sqrt(X**2+Y**2).flatten(),npatan2d(X,Y).flatten() 1263 R = np.where(R <= 1.,2.*npasind(R*0.70710678),0.0) 1296 if 'equal' in self.Projection: 1297 R = np.where(R <= 1.,2.*npasind(R*sq2),0.0) 1298 else: 1299 R = np.where(R <= 1.,2.*npatand(R),0.0) 1264 1300 Z = np.zeros_like(R) 1265 Z = G2lat.invpolfcal( ODFln,SGData,R,P)1301 Z = G2lat.invpolfcal(IODFln,SGData,R,P) 1266 1302 Z = np.reshape(Z,(npts,npts)) 1267 1303 CS = Plot.contour(Y,X,Z,aspect='equal') 1268 1304 Plot.clabel(CS,fontsize=9,inline=1) 1269 Img = Plot.imshow(Z.T,aspect='equal',cmap= 'binary',extent=[-1,1,-1,1])1305 Img = Plot.imshow(Z.T,aspect='equal',cmap=self.ContourColor,extent=[-1,1,-1,1]) 1270 1306 if newPlot: 1271 1307 # Page.figure.colorbar(Img) #colorbar fails - crashes gsasii 1272 1308 newPlot = False 1273 1309 Plot.set_title('Inverse pole figure for XYZ='+str(SHData['PFxyz'])) 1310 Plot.set_xlabel(self.Projection.capitalize()+' projection') 1274 1311 1275 1312 else: 1276 PH = np.array(SHData['PFhkl'])1277 phi,beta = G2lat.CrsAng(PH,cell,SGData)1278 npts = 2011279 ODFln = G2lat.Flnh(Start,SHCoef,phi,beta,SGData)1280 1313 X,Y = np.meshgrid(np.linspace(1.,-1.,npts),np.linspace(-1.,1.,npts)) 1281 1314 R,P = np.sqrt(X**2+Y**2).flatten(),npatan2d(X,Y).flatten() 1282 R = np.where(R <= 1.,2.*npasind(R*0.70710678),0.0) 1315 if 'equal' in self.Projection: 1316 R = np.where(R <= 1.,2.*npasind(R*sq2),0.0) 1317 else: 1318 R = np.where(R <= 1.,2.*npatand(R),0.0) 1283 1319 Z = np.zeros_like(R) 1284 1320 Z = G2lat.polfcal(ODFln,SamSym[textureData['Model']],R,P) … … 1286 1322 CS = Plot.contour(Y,X,Z,aspect='equal') 1287 1323 Plot.clabel(CS,fontsize=9,inline=1) 1288 Img = Plot.imshow(Z.T,aspect='equal',cmap= 'binary',extent=[-1,1,-1,1])1324 Img = Plot.imshow(Z.T,aspect='equal',cmap=self.ContourColor,extent=[-1,1,-1,1]) 1289 1325 if newPlot: 1290 1326 # Page.figure.colorbar(Img) #colorbar fails - crashes gsasii 1291 1327 newPlot = False 1292 1328 Plot.set_title('Pole figure for HKL='+str(SHData['PFhkl'])) 1329 Plot.set_xlabel(self.Projection.capitalize()+' projection') 1293 1330 Page.canvas.draw() 1294 1331 -
trunk/GSASIIpwd.py
r315 r335 760 760 dlg.Destroy() 761 761 runtime = time.time()-begin 762 print 'Number of function calls:',result[2]['nfev'],' Number of observations: ',xFin-xBeg,' Number of parameters: ',len(varyList)763 print "%s%8.3f%s " % ('fitpeak time =',runtime,'s')762 chisq = np.sum(result[2]['fvec']**2) 763 ncyc = int(result[2]['nfev']/len(varyList)) 764 764 ValuesIn(parmDict, varyList, result[0]) 765 chisq = np.sum(errPeakProfile(result[0],x[xBeg:xFin],y[xBeg:xFin],w[xBeg:xFin],parmDict,varyList,bakType,0)**2)766 765 Rwp = np.sqrt(chisq/np.sum(w[xBeg:xFin]*y[xBeg:xFin]**2))*100. #to % 767 766 GOF = chisq/(xFin-xBeg-len(varyList)) 768 print "%s%7.2f%s%12.6g%s%6.2f" % ('Rwp = ',Rwp,'%, chi**2 = ',chisq,' reduced chi**2 = ',GOF) 767 print 'Number of function calls:',result[2]['nfev'],' Number of observations: ',xFin-xBeg,' Number of parameters: ',len(varyList) 768 print 'fitpeak time = %8.3fs, %8.3fs/cycle'%(runtime,runtime/ncyc) 769 print 'Rwp = %7.2f%%, chi**2 = %12.6g, reduced chi**2 = %6.2f'%(Rwp,chisq,GOF) 769 770 try: 770 771 sig = np.sqrt(np.diag(result[1])*GOF) … … 773 774 break #refinement succeeded - finish up! 774 775 except ValueError: #result[1] is None on singular matrix 775 print ' Refinement failed - singular matrix'776 print '**** Refinement failed - singular matrix ****' 776 777 Ipvt = result[2]['ipvt'] 777 778 for i,ipvt in enumerate(Ipvt): -
trunk/GSASIIpwdGUI.py
r312 r335 29 29 cosd = lambda x: math.cos(x*math.pi/180.) 30 30 asind = lambda x: 180.*math.asin(x)/math.pi 31 32 def IsHistogramInAnyPhase(self,histoName): 33 phases = G2gd.GetPatternTreeItemId(self,self.root,'Phases') 34 if phases: 35 item, cookie = self.PatternTree.GetFirstChild(phases) 36 while item: 37 data = self.PatternTree.GetItemPyData(item) 38 histoList = data['Histograms'].keys() 39 if histoName in histoList: 40 return True 41 item, cookie = self.PatternTree.GetNextChild(phases, cookie) 42 return False 43 else: 44 return False 45 31 46 32 47 def UpdatePeakGrid(self, data): … … 342 357 self.dataFrame.setSizePosLeft([230,120]) 343 358 344 def UpdateInstrumentGrid(self, data): 345 if self.dataDisplay: 346 self.dataFrame.Clear() 347 Ka2 = False 348 if len(data[0]) == 13: 349 Ka2 = True 350 self.dataFrame.SetMenuBar(self.dataFrame.BlankMenu) 359 def UpdateInstrumentGrid(self,data): 360 if len(data) > 3: #powder data 361 insVal = dict(zip(data[3],data[1])) 362 insDef = dict(zip(data[3],data[0])) 363 insRef = dict(zip(data[3],data[2])) 364 if 'N' in insDef['Type']: 365 del(insDef['Polariz.']) 366 del(insVal['Polariz.']) 367 del(insRef['Polariz.']) 368 else: #single crystal data 369 insVal = dict(zip(data[2],data[1])) 370 insDef = dict(zip(data[2],data[0])) 371 insRef = {} 372 ValObj = {} 373 RefObj = {} 374 waves = {'CuKa':[1.54051,1.54433],'TiKa':[2.74841,2.75207],'CrKa':[2.28962,2.29351], 375 'FeKa':[1.93597,1.93991],'CoKa':[1.78892,1.79278],'MoKa':[0.70926,0.713543], 376 'AgKa':[0.559363,0.563775]} 377 378 def inst2data(inst,ref,data): 379 if len(data) > 3: 380 for i,item in enumerate(data[3]): 381 try: 382 data[1][i] = inst[item] 383 data[2][i] = ref[item] 384 except KeyError: 385 data[1][i] = 0 386 data[2][i] = 0 387 else: 388 for i,item in enumerate(data[2]): 389 data[1][i] = inst[item] 390 return data 391 392 def updateData(inst,ref): 393 return inst2data(inst,ref,self.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(self, 394 self.PatternId,'Instrument Parameters'))) 351 395 352 396 def RefreshInstrumentGrid(event,doAnyway=False): 353 397 if doAnyway or event.GetRow() == 1: 354 398 peaks = self.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(self,self.PatternId, 'Peak List')) 355 ins = data[1] 356 if 'P' in ins[0]: #update powder peak parameters 399 if 'P' in insVal['Type']: #update powder peak parameters 357 400 for peak in peaks: 358 if Ka2: 359 peak[4] = ins[6]*tand(peak[0]/2.0)**2+ins[7]*tand(peak[0]/2.0)+ins[8] 360 peak[6] = ins[9]/cosd(peak[0]/2.0)+ins[10]*tand(peak[0]/2.0) 361 else: 362 peak[4] = ins[4]*tand(peak[0]/2.0)**2+ins[5]*tand(peak[0]/2.0)+ins[6] 363 peak[6] = ins[7]/cosd(peak[0]/2.0)+ins[8]*tand(peak[0]/2.0) 401 peak[4] = insVal['U']*tand(peak[0]/2.0)**2+insVal['V']*tand(peak[0]/2.0)+insVal['W'] 402 peak[6] = insVal['X']/cosd(peak[0]/2.0)+insVal['Y']*tand(peak[0]/2.0) 364 403 365 404 def OnReset(event): 366 if Ka2: 367 data[1][6:12] = data[0][6:12] 368 else: 369 data[1][4:10] = data[0][4:10] 405 insVal.update(insDef) 406 data = updateData(insVal,insRef) 370 407 RefreshInstrumentGrid(event,doAnyway=True) #to get peaks updated 371 UpdateInstrumentGrid(self, data) 372 373 self.InstrumentTable = [] 374 if 'P' in data[1][0]: #powder data 408 UpdateInstrumentGrid(self,data) 409 410 def OnNewType(event): 411 insVal['Type'] = typePick.GetValue() 412 data = updateData(insVal,insRef) 413 UpdateInstrumentGrid(self,data) 414 415 def OnLamPick(event): 416 lamType = lamPick.GetValue() 417 insVal['Lam1'] = waves[lamType][0] 418 insVal['Lam2'] = waves[lamType][1] 419 data = updateData(insVal,insRef) 420 UpdateInstrumentGrid(self,data) 421 422 423 def OnRatValue(event): 424 try: 425 value = float(ratVal.GetValue()) 426 if value < 0: 427 raise ValueError 428 except ValueError: 429 value = insVal['I(L2)/I(L1)'] 430 insVal['I(L2)/I(L1)'] = value 431 ratVal.SetValue('%10.4f'%(value)) 432 data = updateData(insVal,insRef) 433 434 def OnRatRef(event): 435 insRef['I(L2)/I(L1)'] = ratRef.GetValue() 436 data = updateData(insVal,insRef) 437 438 def OnWaveValue(event): 439 try: 440 value = float(waveVal.GetValue()) 441 if value < 0: 442 raise ValueError 443 except ValueError: 444 value = insVal['Lam'] 445 insVal['Lam'] = value 446 waveVal.SetValue('%10.6f'%(value)) 447 data = updateData(insVal,insRef) 448 449 def OnWaveRef(event): 450 insRef['Lam'] = waveRef.GetValue() 451 data = updateData(insVal,insRef) 452 453 def OnItemValue(event): 454 Obj = event.GetEventObject() 455 item,fmt = ValObj[Obj.GetId()] 456 try: 457 value = float(Obj.GetValue()) 458 if value < 0: 459 raise ValueError 460 except ValueError: 461 value = insVal[item] 462 insVal[item] = value 463 Obj.SetValue(fmt%(value)) 464 data = updateData(insVal,insRef) 465 466 def OnItemRef(event): 467 Obj = event.GetEventObject() 468 item = RefObj[Obj.GetId()] 469 insRef[item] = Obj.GetValue() 470 data = updateData(insVal,insRef) 471 472 if self.dataDisplay: 473 self.dataFrame.Clear() 474 histoName = self.PatternTree.GetItemPyData(self.PatternId)[-1] 475 ifHisto = IsHistogramInAnyPhase(self,histoName) 476 self.dataFrame.SetMenuBar(self.dataFrame.BlankMenu) 477 self.dataDisplay = wx.Panel(self.dataFrame) 478 instSizer = wx.FlexGridSizer(2,6,5,5) 479 instSizer.Add(wx.StaticText(self.dataDisplay,-1,' Histogram Type:'),0,wx.ALIGN_CENTER_VERTICAL) 480 if 'P' in insVal['Type']: #powder data 375 481 self.dataFrame.SetMenuBar(self.dataFrame.InstMenu) 376 482 if not self.dataFrame.GetStatusBar(): 377 483 Status = self.dataFrame.CreateStatusBar() 378 484 self.Bind(wx.EVT_MENU, OnReset, id=G2gd.wxID_INSTPRMRESET) 379 if Ka2: 380 Types = [wg.GRID_VALUE_CHOICE+":PXC,PNC,PNT",wg.GRID_VALUE_FLOAT+':10,6',wg.GRID_VALUE_FLOAT+':10,6', #type, lam-1 & lam-2 381 wg.GRID_VALUE_FLOAT+':10,3',wg.GRID_VALUE_FLOAT+':10,3',wg.GRID_VALUE_FLOAT+':10,3', #zero, ratio, pola 382 wg.GRID_VALUE_FLOAT+':10,3',wg.GRID_VALUE_FLOAT+':10,3',wg.GRID_VALUE_FLOAT+':10,3', #u,v,w 383 wg.GRID_VALUE_FLOAT+':10,3',wg.GRID_VALUE_FLOAT+':10,3',wg.GRID_VALUE_FLOAT+':10,5',wg.GRID_VALUE_FLOAT+':10,2'] 384 else: 385 Types = [wg.GRID_VALUE_CHOICE+":PXC,PNC,PNT",wg.GRID_VALUE_FLOAT+':10,6', #type & lam-1 386 wg.GRID_VALUE_FLOAT+':10,3',wg.GRID_VALUE_FLOAT+':10,3', #zero, pola 387 wg.GRID_VALUE_FLOAT+':10,3',wg.GRID_VALUE_FLOAT+':10,3',wg.GRID_VALUE_FLOAT+':10,3', #u,v,w 388 wg.GRID_VALUE_FLOAT+':10,3',wg.GRID_VALUE_FLOAT+':10,3',wg.GRID_VALUE_FLOAT+':10,5',wg.GRID_VALUE_FLOAT+':10,2'] 389 colLabels = data[3] 390 rowLabels = ['default','changed','refine'] 391 self.InstrumentTable = G2gd.Table(data[:-1],rowLabels=rowLabels,colLabels=colLabels,types=Types) 392 self.dataFrame.SetLabel('Instrument Parameters') 393 gridPanel = wx.Panel(self.dataFrame) 394 self.dataDisplay = G2gd.GSGrid(gridPanel) 395 self.dataDisplay.SetTable(self.InstrumentTable, True) 396 self.dataDisplay.Bind(wg.EVT_GRID_CELL_CHANGE, RefreshInstrumentGrid) 397 self.dataDisplay.SetMargins(0,0) 398 self.dataDisplay.AutoSizeColumns(False) 399 beg = 4 400 if Ka2: beg = 6 401 for i in range(len(data[2])): 402 if i < beg or i == beg+6: 403 self.dataDisplay.SetCellRenderer(2,i,wg.GridCellStringRenderer()) 404 self.dataDisplay.SetCellValue(2,i,'') 405 self.dataDisplay.SetReadOnly(2,i,isReadOnly=True) 485 typePick = wx.ComboBox(self.dataDisplay,value=insVal['Type'], 486 choices=['PXC','PNC','PNT'],style=wx.CB_READONLY|wx.CB_DROPDOWN) 487 typePick.Bind(wx.EVT_COMBOBOX, OnNewType) 488 instSizer.Add(typePick,0,wx.ALIGN_CENTER_VERTICAL) 489 if 'C' in insVal['Type']: #constant wavelength 490 instSizer.Add(wx.StaticText(self.dataDisplay,-1,' Azimuth: %7.2f'%(insVal['Azimuth'])),0,wx.ALIGN_CENTER_VERTICAL) 491 if 'Lam1' in insVal: 492 instSizer.Add((5,5),0) 493 instSizer.Add((5,5),0) 494 instSizer.Add((5,5),0) 495 instSizer.Add(wx.StaticText(self.dataDisplay,-1,' Ka1/Ka2:'), 496 0,wx.ALIGN_CENTER_VERTICAL) 497 instSizer.Add(wx.StaticText(self.dataDisplay,-1,'%8.6f/%8.6f'%(insVal['Lam1'],insVal['Lam2'])), 498 0,wx.ALIGN_CENTER_VERTICAL) 499 waveSizer = wx.BoxSizer(wx.HORIZONTAL) 500 waveSizer.Add(wx.StaticText(self.dataDisplay,-1,'Select:'),0,wx.ALIGN_CENTER_VERTICAL) 501 choice = ['TiKa','CrKa','FeKa','CoKa','CuKa','MoKa','AgKa'] 502 lamPick = wx.ComboBox(self.dataDisplay,value=' ',choices=choice,style=wx.CB_READONLY|wx.CB_DROPDOWN) 503 lamPick.Bind(wx.EVT_COMBOBOX, OnLamPick) 504 waveSizer.Add(lamPick,0) 505 instSizer.Add(waveSizer,0) 506 instSizer.Add(wx.StaticText(self.dataDisplay,-1,' I(L2)/I(L1): (%10.4f)'%(insDef['I(L2)/I(L1)'])), 507 0,wx.ALIGN_CENTER_VERTICAL) 508 ratVal = wx.TextCtrl(self.dataDisplay,wx.ID_ANY,'%10.4f'%(insVal['I(L2)/I(L1)']),style=wx.TE_PROCESS_ENTER) 509 ratVal.Bind(wx.EVT_TEXT_ENTER,OnRatValue) 510 ratVal.Bind(wx.EVT_KILL_FOCUS,OnRatValue) 511 instSizer.Add(ratVal,0) 512 ratRef = wx.CheckBox(self.dataDisplay,label=' Refine?') 513 ratRef.SetValue(bool(insRef['I(L2)/I(L1)'])) 514 ratRef.Bind(wx.EVT_CHECKBOX, OnRatRef) 515 instSizer.Add(ratRef,0,wx.ALIGN_CENTER_VERTICAL) 516 406 517 else: 407 self.dataDisplay.SetCellRenderer(2,i,wg.GridCellBoolRenderer()) 408 self.dataDisplay.SetCellEditor(2,i,wg.GridCellBoolEditor()) 518 instSizer.Add(wx.StaticText(self.dataDisplay,-1,' Lam: (%10.6f)'%(insDef['Lam'])), 519 0,wx.ALIGN_CENTER_VERTICAL) 520 waveVal = wx.TextCtrl(self.dataDisplay,wx.ID_ANY,'%10.6f'%(insVal['Lam']),style=wx.TE_PROCESS_ENTER) 521 waveVal.Bind(wx.EVT_TEXT_ENTER,OnWaveValue) 522 waveVal.Bind(wx.EVT_KILL_FOCUS,OnWaveValue) 523 instSizer.Add(waveVal,0,wx.ALIGN_CENTER_VERTICAL) 524 if ifHisto: 525 waveRef = wx.CheckBox(self.dataDisplay,label=' Refine?') 526 waveRef.SetValue(bool(insRef['Lam'])) 527 waveRef.Bind(wx.EVT_CHECKBOX, OnWaveRef) 528 instSizer.Add(waveRef,0,wx.ALIGN_CENTER_VERTICAL) 529 else: 530 instSizer.Add((5,5),0) 531 for item in ['Zero','Polariz.']: 532 fmt = '%10.3f' 533 Fmt = ' %s: ('+fmt+')' 534 if item in insDef: 535 instSizer.Add(wx.StaticText(self.dataDisplay,-1,Fmt%(item,insDef[item])), 536 0,wx.ALIGN_CENTER_VERTICAL) 537 itemVal = wx.TextCtrl(self.dataDisplay,wx.ID_ANY,fmt%(insVal[item]),style=wx.TE_PROCESS_ENTER) 538 ValObj[itemVal.GetId()] = [item,fmt] 539 itemVal.Bind(wx.EVT_TEXT_ENTER,OnItemValue) 540 itemVal.Bind(wx.EVT_KILL_FOCUS,OnItemValue) 541 instSizer.Add(itemVal,0,wx.ALIGN_CENTER_VERTICAL) 542 if ifHisto: 543 itemRef = wx.CheckBox(self.dataDisplay,wx.ID_ANY,label=' Refine?') 544 itemRef.SetValue(bool(insRef[item])) 545 RefObj[itemRef.GetId()] = item 546 itemRef.Bind(wx.EVT_CHECKBOX, OnItemRef) 547 instSizer.Add(itemRef,0,wx.ALIGN_CENTER_VERTICAL) 548 else: 549 instSizer.Add((5,5),0) 550 else: #skip Polariz. for neutrons 551 instSizer.Add((5,5),0) 552 instSizer.Add((5,5),0) 553 instSizer.Add((5,5),0) 554 for item in ['U','V','W','X','Y','SH/L']: 555 fmt = '%10.3f' 556 if item == 'SH/L': 557 fmt = '%10.5f' 558 Fmt = ' %s: ('+fmt+')' 559 instSizer.Add(wx.StaticText(self.dataDisplay,-1,Fmt%(item,insDef[item])), 560 0,wx.ALIGN_CENTER_VERTICAL) 561 itemVal = wx.TextCtrl(self.dataDisplay,wx.ID_ANY,fmt%(insVal[item]),style=wx.TE_PROCESS_ENTER) 562 ValObj[itemVal.GetId()] = [item,fmt] 563 itemVal.Bind(wx.EVT_TEXT_ENTER,OnItemValue) 564 itemVal.Bind(wx.EVT_KILL_FOCUS,OnItemValue) 565 instSizer.Add(itemVal,0,wx.ALIGN_CENTER_VERTICAL) 566 itemRef = wx.CheckBox(self.dataDisplay,wx.ID_ANY,label=' Refine?') 567 itemRef.SetValue(bool(insRef[item])) 568 RefObj[itemRef.GetId()] = item 569 itemRef.Bind(wx.EVT_CHECKBOX, OnItemRef) 570 instSizer.Add(itemRef,0,wx.ALIGN_CENTER_VERTICAL) 571 else: #time of flight (neutrons) 572 pass #for now 573 574 575 409 576 else: #single crystal data 410 Types = [wg.GRID_VALUE_CHOICE+":SXC,SNC,SNT",wg.GRID_VALUE_FLOAT+':10,6'] 411 colLabels = data[2] 412 rowLabels = ['original','changed'] 413 self.InstrumentTable = G2gd.Table(data[:-1],rowLabels=rowLabels,colLabels=colLabels,types=Types) 414 self.dataFrame.SetLabel('Instrument Parameters') 415 gridPanel = wx.Panel(self.dataFrame) 416 self.dataDisplay = G2gd.GSGrid(gridPanel) 417 self.dataDisplay.SetTable(self.InstrumentTable, True) 418 self.dataDisplay.Bind(wg.EVT_GRID_CELL_CHANGE, RefreshInstrumentGrid) 419 self.dataDisplay.SetMargins(0,0) 420 self.dataDisplay.AutoSizeColumns(False) 577 typePick = wx.ComboBox(self.dataDisplay,value=insVal['Type'], 578 choices=['SXC','SNC','SNT'],style=wx.CB_READONLY|wx.CB_DROPDOWN) 579 typePick.Bind(wx.EVT_COMBOBOX, OnNewType) 580 instSizer.Add(typePick,0,wx.ALIGN_CENTER_VERTICAL) 581 if 'C' in insVal['Type']: #constant wavelength 582 instSizer.Add(wx.StaticText(self.dataDisplay,-1,' Lam: %10.6f'%(insDef['Lam'])), 583 0,wx.ALIGN_CENTER_VERTICAL) 584 else: #time of flight (neutrons) 585 pass #for now 586 421 587 mainSizer = wx.BoxSizer(wx.VERTICAL) 422 mainSizer.Add( self.dataDisplay,0)588 mainSizer.Add(instSizer,0) 423 589 mainSizer.Layout() 424 590 self.dataDisplay.SetSizer(mainSizer) … … 755 921 self.HKL = G2lat.GenHBravais(dmin,ibrav,A) 756 922 for hkl in self.HKL: 757 hkl.append(2.0*asind(wave/(2.*hkl[3])) )923 hkl.append(2.0*asind(wave/(2.*hkl[3]))+controls[1]) 758 924 if 'PKS' in self.PatternTree.GetItemText(self.PatternId): 759 925 G2plt.PlotPowderLines(self) … … 807 973 cellPrint(ibrav,Aref) 808 974 for hkl in self.HKL: 809 hkl.append(2.0*asind(inst[1]/(2.*hkl[3])) )975 hkl.append(2.0*asind(inst[1]/(2.*hkl[3]))+controls[1]) 810 976 if 'PKS' in self.PatternTree.GetItemText(self.PatternId): 811 977 G2plt.PlotPowderLines(self)
Note: See TracChangeset
for help on using the changeset viewer.