Changeset 63
- Timestamp:
- May 13, 2010 9:17:31 AM (13 years ago)
- Location:
- trunk
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/GSASII.py
r62 r63 18 18 19 19 # print versions 20 print "Available python module versions for pyGSASII:"20 print "Available python module versions for GSASII:" 21 21 print "python: ",sys.version[:5] 22 22 print "wxpython: ",wx.__version__ … … 72 72 def _init_coll_File_Items(self, parent): 73 73 parent.Append(help='Open a gsasii project file (*.gpx)', id=wxID_GSASIIFILEOPEN, 74 kind=wx.ITEM_NORMAL,text='Open project ')74 kind=wx.ITEM_NORMAL,text='Open project...') 75 75 parent.Append(help='SAve project to old file', id=wxID_GSASIIFILESAVE, 76 76 kind=wx.ITEM_NORMAL,text='Save project') 77 77 parent.Append(help='Save project to new file', id=wxID_GSASIIFILESAVEAS, 78 kind=wx.ITEM_NORMAL,text='Save As')78 kind=wx.ITEM_NORMAL,text='Save As...') 79 79 parent.Append(help='Close project, saving is optional', id=wxID_GSASIIFILECLOSE, 80 80 kind=wx.ITEM_NORMAL,text='Close project') … … 89 89 def _init_coll_Data_Items(self,parent): 90 90 parent.Append(help='', id=wxID_GSASIIPWDRREAD, kind=wx.ITEM_NORMAL, 91 text='Read powder data ')91 text='Read powder data...') 92 92 parent.Append(help='',id=wxID_GSASIIIMGREAD, kind=wx.ITEM_NORMAL, 93 text='Read image data ')93 text='Read image data...') 94 94 parent.Append(help='',id=wxID_GSASIIREADPEAKS, kind=wx.ITEM_NORMAL, 95 text='Read Powder Pattern Peaks ')95 text='Read Powder Pattern Peaks...') 96 96 parent.Append(help='', id=wxID_GSASIISNGLREAD, kind=wx.ITEM_NORMAL, 97 text='Read single crystal data ')97 text='Read single crystal data...') 98 98 parent.Append(help='', id=wxID_GSASIIPWDSUM, kind=wx.ITEM_NORMAL, 99 99 text='Sum powder data') … … 124 124 def _init_coll_Import_Items(self,parent): 125 125 self.ImportPhase = parent.Append(help='Import phase data from GSAS EXP file', 126 id=wxID_GSASIIIMPORTPHASE, kind=wx.ITEM_NORMAL,text='Import GSAS EXP Phase ')126 id=wxID_GSASIIIMPORTPHASE, kind=wx.ITEM_NORMAL,text='Import GSAS EXP Phase...') 127 127 self.ImportPDB = parent.Append(help='Import phase data from PDB file', 128 id=wxID_GSASIIIMPORTPDB, kind=wx.ITEM_NORMAL,text='Import PDB Phase ')128 id=wxID_GSASIIIMPORTPDB, kind=wx.ITEM_NORMAL,text='Import PDB Phase...') 129 129 self.ImportPattern = parent.Append(help='',id=wxID_GSASIIIMPORTPATTERN, kind=wx.ITEM_NORMAL, 130 text='Import Powder Pattern ')130 text='Import Powder Pattern...') 131 131 self.ImportHKL = parent.Append(help='',id=wxID_GSASIIIMPORTHKL, kind=wx.ITEM_NORMAL, 132 text='Import HKLs ')132 text='Import HKLs...') 133 133 self.ImportCIF = parent.Append(help='',id=wxID_GSASIIIMPORTCIF, kind=wx.ITEM_NORMAL, 134 text='Import CIF ')134 text='Import CIF...') 135 135 self.Bind(wx.EVT_MENU, self.OnImportPhase, id=wxID_GSASIIIMPORTPHASE) 136 136 self.Bind(wx.EVT_MENU, self.OnImportPDB, id=wxID_GSASIIIMPORTPDB) … … 141 141 def _init_coll_Export_Items(self,parent): 142 142 self.ExportPattern = parent.Append(help='Select PWDR item to enable',id=wxID_GSASIIEXPORTPATTERN, kind=wx.ITEM_NORMAL, 143 text='Export Powder Pattern ')143 text='Export Powder Pattern...') 144 144 self.ExportPeakList = parent.Append(help='',id=wxID_GSASIIEXPORTPEAKLIST, kind=wx.ITEM_NORMAL, 145 text='Export All Peak Lists ')145 text='Export All Peak Lists...') 146 146 self.ExportHKL = parent.Append(help='',id=wxID_GSASIIEXPORTHKL, kind=wx.ITEM_NORMAL, 147 text='Export HKLs ')147 text='Export HKLs...') 148 148 self.ExportPhase = parent.Append(help='',id=wxID_GSASIIEXPORTPHASE, kind=wx.ITEM_NORMAL, 149 text='Export Phase ')149 text='Export Phase...') 150 150 self.ExportCIF = parent.Append(help='',id=wxID_GSASIIEXPORTCIF, kind=wx.ITEM_NORMAL, 151 text='Export CIF ')151 text='Export CIF...') 152 152 self.ExportPattern.Enable(False) 153 153 self.ExportPeakList.Enable(True) … … 237 237 self.Image = 0 238 238 self.oldImagefile = '' 239 self.Img = 0240 239 self.Integrate = 0 241 240 self.Pwdr = False … … 393 392 Data['pixLimit'] = 20 394 393 Data['ellipses'] = [] 395 Data['masks'] = []396 394 Data['calibrant'] = '' 397 395 else: … … 405 403 Data['pixLimit'] = 20 406 404 Data['ellipses'] = [] 407 Data['masks'] = []408 405 Data['calibrant'] = '' 409 406 Data['IOtth'] = [2.0,5.0] … … 416 413 Data['range'] = [(Imin,Imax),[Imin,Imax]] 417 414 self.PatternTree.SetItemPyData(self.PatternTree.AppendItem(Id,text='Image Controls'),Data) 415 Masks = {'Points':[],'Rings':[],'Arcs':[],'Polygons':[],'Thresholds':[(Imin,Imax),[Imin,Imax]]} 416 self.PatternTree.SetItemPyData(self.PatternTree.AppendItem(Id,text='Masks'),Masks) 418 417 self.PatternTree.SetItemPyData(Id,[Size,imagefile]) 419 418 self.PickId = Id … … 469 468 self.PatternTree.SetItemPyData(sub,[0]) 470 469 470 class CopyDialog(wx.Dialog): 471 def __init__(self,parent,title,text,data): 472 wx.Dialog.__init__(self,parent,-1,title, 473 pos=wx.DefaultPosition,style=wx.DEFAULT_DIALOG_STYLE) 474 self.data = data 475 panel = wx.Panel(self) 476 mainSizer = wx.BoxSizer(wx.VERTICAL) 477 topLabl = wx.StaticText(panel,-1,text) 478 mainSizer.Add((10,10),1) 479 mainSizer.Add(topLabl,0,wx.ALIGN_CENTER_VERTICAL|wx.LEFT,10) 480 mainSizer.Add((10,10),1) 481 dataGridSizer = wx.FlexGridSizer(rows=len(data),cols=1,hgap=2,vgap=2) 482 for id,item in enumerate(self.data[:-1]): 483 ckbox = wx.CheckBox(panel,id,item[1]) 484 ckbox.Bind(wx.EVT_CHECKBOX,self.OnCopyChange) 485 dataGridSizer.Add(ckbox,0,wx.LEFT,10) 486 mainSizer.Add(dataGridSizer,0,wx.EXPAND) 487 OkBtn = wx.Button(panel,-1,"Ok") 488 OkBtn.Bind(wx.EVT_BUTTON, self.OnOk) 489 cancelBtn = wx.Button(panel,-1,"Cancel") 490 cancelBtn.Bind(wx.EVT_BUTTON, self.OnCancel) 491 btnSizer = wx.BoxSizer(wx.HORIZONTAL) 492 btnSizer.Add((20,20),1) 493 btnSizer.Add(OkBtn) 494 btnSizer.Add((20,20),1) 495 btnSizer.Add(cancelBtn) 496 btnSizer.Add((20,20),1) 497 498 mainSizer.Add(btnSizer,0,wx.EXPAND|wx.BOTTOM|wx.TOP, 10) 499 panel.SetSizer(mainSizer) 500 panel.Fit() 501 self.Fit() 502 503 def OnCopyChange(self,event): 504 id = event.GetId() 505 self.data[id][0] = self.FindWindowById(id).GetValue() 506 507 def OnOk(self,event): 508 parent = self.GetParent() 509 parent.Raise() 510 self.SetReturnCode(wx.ID_OK) 511 self.MakeModal(False) 512 self.Destroy() 513 514 def OnCancel(self,event): 515 parent = self.GetParent() 516 parent.Raise() 517 self.SetReturnCode(wx.ID_CANCEL) 518 self.MakeModal(False) 519 self.Destroy() 520 521 def GetData(self): 522 return self.data 523 471 524 class SumDialog(wx.Dialog): 472 525 def __init__(self,parent,title,text,type,data): … … 710 763 Data['pixLimit'] = 20 711 764 Data['ellipses'] = [] 712 Data['masks'] = []713 765 Data['calibrant'] = '' 714 766 self.PatternTree.SetItemPyData(self.PatternTree.AppendItem(Id,text='Image Controls'),Data) -
trunk/GSASIIIO.py
r62 r63 649 649 if Data['setDefault']: 650 650 self.imageDefault = Data 651 #temporary fix to add masks 652 if not G2gd.GetPatternTreeItemId(self,Id, 'Masks'): 653 Imin,Imax = Data['range'][0] 654 Masks = {'Points':[],'Rings':[],'Arcs':[],'Polygons':[],'Thresholds':[(Imin,Imax),[Imin,Imax]]} 655 self.PatternTree.SetItemPyData(self.PatternTree.AppendItem(Id,text='Masks'),Masks) 656 #end of temporary fix 651 657 652 658 file.close() … … 689 695 wx.EndBusyCursor() 690 696 print 'project save successful' 691 697 698 def SaveIntegration(self,PickId,data): 699 azms = self.Integrate[1] 700 X = self.Integrate[2].flatten()[:-1] 701 Xminmax = [X[0],X[-1]] 702 N = len(X) 703 Id = self.PatternTree.GetItemParent(PickId) 704 name = self.PatternTree.GetItemText(Id) 705 name = name.replace('IMG ','PWDR ') 706 Comments = self.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(self,Id, 'Comments')) 707 names = ['Type','Lam','Zero','Polariz.','U','V','W','X','Y','SH/L','Azimuth'] 708 codes = [0 for i in range(11)] 709 parms = ['PXC',data['wavelength'],0.0,0.0,1.0,-1.0,0.3,0.0,1.0,0.0,0.0] 710 Azms = [(azms[i+1]+azms[i])/2. for i in range(len(azms)-1)] 711 for i,azm in enumerate(Azms): 712 name += " Azm= %.2f"%(azm) 713 item, cookie = self.PatternTree.GetFirstChild(self.root) 714 Id = 0 715 while item: 716 Name = self.PatternTree.GetItemText(item) 717 if name in Name: 718 Id = item 719 item, cookie = self.PatternTree.GetNextChild(self.root, cookie) 720 parms[10] = azm 721 Y = self.Integrate[0][i].flatten() 722 W = np.sqrt(Y) 723 if Id: 724 self.PatternTree.SetItemPyData(G2gd.GetPatternTreeItemId(self,Id, 'Comments'),Comments) 725 self.PatternTree.SetItemPyData(G2gd.GetPatternTreeItemId(self,Id,'Limits'),[tuple(Xminmax),Xminmax]) 726 self.PatternTree.SetItemPyData(G2gd.GetPatternTreeItemId(self,Id,'Background'),[['chebyschev',1,3,1.0,0.0,0.0]]) 727 self.PatternTree.SetItemPyData(G2gd.GetPatternTreeItemId(self,Id,'Instrument Parameters'),[tuple(parms),parms,codes,names]) 728 self.PatternTree.SetItemPyData(G2gd.GetPatternTreeItemId(self,Id,'Peak List'),[]) 729 self.PatternTree.SetItemPyData(G2gd.GetPatternTreeItemId(self,Id,'Index Peak List'),[]) 730 self.PatternTree.SetItemPyData(G2gd.GetPatternTreeItemId(self,Id,'Unit Cells List'),[]) 731 else: 732 Id = self.PatternTree.AppendItem(parent=self.root,text=name) 733 self.PatternTree.SetItemPyData(self.PatternTree.AppendItem(Id,text='Comments'),Comments) 734 self.PatternTree.SetItemPyData(self.PatternTree.AppendItem(Id,text='Limits'),[tuple(Xminmax),Xminmax]) 735 self.PatternTree.SetItemPyData(self.PatternTree.AppendItem(Id,text='Background'),[['chebyschev',1,3,1.0,0.0,0.0]]) 736 self.PatternTree.SetItemPyData(self.PatternTree.AppendItem(Id,text='Instrument Parameters'),[tuple(parms),parms,codes,names]) 737 self.PatternTree.SetItemPyData(self.PatternTree.AppendItem(Id,text='Peak List'),[]) 738 self.PatternTree.SetItemPyData(self.PatternTree.AppendItem(Id,text='Index Peak List'),[]) 739 self.PatternTree.SetItemPyData(self.PatternTree.AppendItem(Id,text='Unit Cells List'),[]) 740 self.PatternTree.SetItemPyData(Id,[[''],[np.array(X),np.array(Y),np.array(W),np.zeros(N),np.zeros(N),np.zeros(N)]]) 741 self.PatternTree.SelectItem(Id) 742 self.PatternTree.Expand(Id) 743 self.PatternId = Id 744 692 745 def powderFxyeSave(self,powderfile): 693 746 file = open(powderfile,'w') -
trunk/GSASIIcomp.py
r62 r63 1326 1326 w2 = w*2 1327 1327 size = len(image) 1328 if (w < Xpix < size-w) and (w < Ypix < size-w) and image[Ypix,Xpix]: 1329 Z = image[Ypix-w:Ypix+w,Xpix-w:Xpix+w] 1328 xpix = int(Xpix) #get reference corner of pixel chosen 1329 ypix = int(Ypix) 1330 if (w < xpix < size-w) and (w < ypix < size-w) and image[ypix,xpix]: 1331 Z = image[ypix-w:ypix+w,xpix-w:xpix+w] 1330 1332 Zmax = np.argmax(Z) 1331 1333 Zmin = np.argmin(Z) 1332 Xpix += Zmax%w2-w1333 Ypix += Zmax/w2-w1334 return Xpix,Ypix,np.ravel(Z)[Zmax],np.ravel(Z)[Zmin]1334 xpix += Zmax%w2-w 1335 ypix += Zmax/w2-w 1336 return xpix,ypix,np.ravel(Z)[Zmax],np.ravel(Z)[Zmin] 1335 1337 else: 1336 1338 return 0,0,0,0 … … 1348 1350 X,Y,I,J = ImageLocalMax(image,pix,X,Y) 1349 1351 if I and J and I/J > reject: 1352 X += .5 #set to center of pixel 1353 Y += .5 1350 1354 X /= scalex #convert to mm 1351 1355 Y /= scaley … … 1635 1639 return True 1636 1640 1637 def ImageIntegrate(self,data): 1638 import matplotlib as mpl 1639 import numpy.ma as ma 1640 print 'image integrate' 1641 def Make2ThetaAzimuthMap(data,imageN): 1642 #transforms 2D image from x,y space to 2-theta,azimuth space based on detector orientation 1641 1643 pixelSize = data['pixelSize'] 1642 1644 scalex = pixelSize[0]/1000. 1643 1645 scaley = pixelSize[1]/1000. 1646 tax,tay = np.mgrid[0.5:imageN+.5,0.5:imageN+.5] #bin centers not corners 1647 tax = np.asfarray(tax*scalex,dtype=np.float32) 1648 tay = np.asfarray(tay*scaley,dtype=np.float32) 1649 return GetTthAzm(tay,tax,data) #2-theta & azimuth arrays 1650 1651 def Fill2ThetaAzimuthMap(data,TA,image): 1652 import numpy.ma as ma 1644 1653 LUtth = data['IOtth'] 1645 1654 if data['fullIntegrate']: … … 1647 1656 else: 1648 1657 LRazm = data['LRazimuth'] 1649 numAzms = data['outAzimuths'] 1650 numChans = data['outChannels'] 1651 imageN = len(self.ImageZ) 1652 t0 = time.time() 1653 print 'Create ',imageN,' X ',imageN,' 2-theta,azimuth map' 1654 tax,tay = np.mgrid[0:imageN,0:imageN] 1655 tax = np.asfarray(tax*scalex,dtype=np.float32) 1656 tay = np.asfarray(tay*scaley,dtype=np.float32) 1657 t1 = time.time() 1658 print "Elapsed time:","%8.3f"%(t1-t0), "s" 1659 print 'Fill map with 2-theta/azimuth values' 1660 TA = GetTthAzm(tay,tax,data) #2-theta & azimuth arrays 1661 del tax,tay 1658 imageN = len(image) 1662 1659 TA = np.reshape(TA,(2,imageN,imageN)) 1663 1660 TA = np.dstack((ma.getdata(TA[1]),ma.getdata(TA[0]))) #azimuth, 2-theta 1664 t2 = time.time()1665 1661 tax,tay = np.dsplit(TA,2) #azimuth, 2-theta 1666 1662 tax = ma.masked_outside(tax.flatten(),LRazm[0],LRazm[1]) 1667 1663 tay = ma.masked_outside(tay.flatten(),LUtth[0],LUtth[1]) 1668 1664 tam = ma.getmask(tax)+ma.getmask(tay) 1669 taz = ma.masked_where(tam,self.ImageZ.flatten()) 1670 G2plt.PlotTRImage(self,np.reshape(tax,(imageN,imageN)), 1671 np.reshape(tay,(imageN,imageN)),np.reshape(taz,(imageN,imageN)),newPlot=True) 1672 del TA 1673 print "Elapsed time:","%8.3f"%(t2-t1), "s" 1674 print 'Form 1-D histograms for ',numAzms,' azimuthal angles' 1675 print 'Integration limits:',LUtth,LRazm 1665 taz = ma.masked_where(tam,image.flatten()) 1666 return tax,tay,taz,tam 1667 1668 def Bin2ThetaAzimuthMap(data,tax,tay,taz): 1669 import numpy.ma as ma 1670 LUtth = data['IOtth'] 1671 if data['fullIntegrate']: 1672 LRazm = [-180,180] 1673 else: 1674 LRazm = data['LRazimuth'] 1675 numAzms = data['outAzimuths'] 1676 numChans = data['outChannels'] 1676 1677 NST = np.histogram2d(tax,tay,normed=False,bins=(numAzms,numChans),range=[LRazm,LUtth]) 1677 1678 HST = np.histogram2d(tax,tay,normed=False,bins=(numAzms,numChans),range=[LRazm,LUtth],weights=taz) 1678 del tax,tay,taz 1679 t3 = time.time() 1680 print "Elapsed time:","%8.3f"%(t3-t2), "s" 1681 self.Integrate = [HST[0]/NST[0],HST[1],HST[2]] 1682 del NST,HST 1683 G2plt.PlotIntegration(self,newPlot=True) 1684 1685 1679 return NST,HST 1680 1681 def ImageIntegrate(self,data): 1682 dlg = wx.ProgressDialog("Elapsed time","2D image integration",5, 1683 style = wx.PD_ELAPSED_TIME|wx.PD_AUTO_HIDE) 1684 try: 1685 print 'Begin image integration' 1686 print 'Create 2-theta,azimuth map' 1687 t0 = time.time() 1688 dlg.Update(0) 1689 imageN = len(self.ImageZ) 1690 TA = Make2ThetaAzimuthMap(data,imageN) #2-theta & azimuth arrays 1691 dlg.Update(1) 1692 print 'Fill map with 2-theta/azimuth values' 1693 tax,tay,taz,tam = Fill2ThetaAzimuthMap(data,TA,self.ImageZ) 1694 del TA 1695 dlg.Update(2) 1696 print 'Bin image by 2-theta/azimuth intervals' 1697 NST,HST = Bin2ThetaAzimuthMap(data,tax,tay,taz) 1698 del tax,tay,taz 1699 dlg.Update(3) 1700 print 'Form normalized 1D pattern(s)' 1701 self.Integrate = [HST[0]/NST[0],HST[1],HST[2]] 1702 del NST,HST 1703 dlg.Update(4) 1704 t1 = time.time() 1705 print 'Integration complete' 1706 print "Elapsed time:","%8.3f"%(t1-t0), "s" 1707 finally: 1708 dlg.Destroy() 1709 1686 1710 def test(): 1687 1711 cell = [5,5,5,90,90,90] -
trunk/GSASIIgrid.py
r62 r63 10 10 import GSASIIElem as G2elem 11 11 import GSASIIplot as G2plt 12 import GSASIIIO as G2IO 12 13 13 14 # trig functions in degrees … … 20 21 ] = [wx.NewId() for _init_coll_Atom_Items in range(2)] 21 22 22 [ wxID_IMCALIBRATE, wxID_IMINTEGRATE, wxID_IMCLEARCALIB, wxID_SAVEINTG 23 ] = [wx.NewId() for _init_coll_IMAGE_Items in range(4)] 23 [ wxID_IMCALIBRATE, wxID_IMINTEGRATE, wxID_IMCLEARCALIB, wxID_SAVEINTG, 24 wxID_IMCOPYCONTROLS, wxID_INTEGRATEALL, 25 ] = [wx.NewId() for _init_coll_IMAGE_Items in range(6)] 26 27 [ wxID_MASKCOPY, 28 ] = [wx.NewId() for _init_coll_MASK_Items in range(1)] 24 29 25 30 [ wxID_UNDO,wxID_PEAKFIT,wxID_AUTOPEAKFIT, … … 38 43 def _init_coll_ImageMenu(self,parent): 39 44 parent.Append(menu=self.ImageEdit, title='Image Operations') 45 46 def _init_coll_MaskMenu(self,parent): 47 parent.Append(menu=self.MaskEdit, title='Mask Operations') 40 48 41 49 def _init_coll_PeakMenu(self,parent): … … 51 59 52 60 def _init_coll_Image_Items(self,parent): 53 parent.Append(help='Calibrate detector by fitting to calibrant lines', \61 parent.Append(help='Calibrate detector by fitting to calibrant lines', 54 62 id=wxID_IMCALIBRATE, kind=wx.ITEM_NORMAL,text='Calibrate') 55 parent.Append(help='Clear calibration data points and rings',id=wxID_IMCLEARCALIB, \63 parent.Append(help='Clear calibration data points and rings',id=wxID_IMCLEARCALIB, 56 64 kind=wx.ITEM_NORMAL,text='Clear calibration') 57 parent.Append(help='',id=wxID_IMINTEGRATE, kind=wx.ITEM_NORMAL,text='Integrate') 58 parent.Append(help='Save integration results as a series of 1-D powder patterns', \ 65 parent.Append(help='Integrate selected image',id=wxID_IMINTEGRATE, 66 kind=wx.ITEM_NORMAL,text='Integrate') 67 parent.Append(help='Integrate all images selected from list',id=wxID_INTEGRATEALL, 68 kind=wx.ITEM_NORMAL,text='Integrate all') 69 parent.Append(help='Save integration results as a series of 1-D powder patterns', 59 70 id=wxID_SAVEINTG, kind=wx.ITEM_NORMAL,text='Save Integration') 71 parent.Append(help='Copy image controls to other images', 72 id=wxID_IMCOPYCONTROLS, kind=wx.ITEM_NORMAL,text='Copy Controls') 60 73 74 def _init_coll_Mask_Items(self,parent): 75 parent.Append(help='Copy mask to other images', 76 id=wxID_MASKCOPY, kind=wx.ITEM_NORMAL,text='Copy mask') 77 61 78 def _init_coll_Peak_Items(self,parent): 62 self.UnDo = parent.Append(help='Undo last least squares refinement', \79 self.UnDo = parent.Append(help='Undo last least squares refinement', 63 80 id=wxID_UNDO, kind=wx.ITEM_NORMAL,text='UnDo') 64 self.PeakFit = parent.Append(id=wxID_PEAKFIT, kind=wx.ITEM_NORMAL,text='PeakFit', \81 self.PeakFit = parent.Append(id=wxID_PEAKFIT, kind=wx.ITEM_NORMAL,text='PeakFit', 65 82 help='Do single cycle of peak fitting least-squares refinement' ) 66 self.AutoPeakFit = parent.Append(id=wxID_AUTOPEAKFIT, kind=wx.ITEM_NORMAL, \83 self.AutoPeakFit = parent.Append(id=wxID_AUTOPEAKFIT, kind=wx.ITEM_NORMAL, 67 84 text='AutoPeakFit',help='Do peak fitting least-squares to convergence' ) 68 85 … … 70 87 self.IndexPeaks = parent.Append(help='', id=wxID_INDEXPEAKS, kind=wx.ITEM_NORMAL, 71 88 text='Index Cell') 72 self.CopyCell = parent.Append( id=wxID_COPYCELL, kind=wx.ITEM_NORMAL,text='Copy Cell', \89 self.CopyCell = parent.Append( id=wxID_COPYCELL, kind=wx.ITEM_NORMAL,text='Copy Cell', 73 90 help='Copy selected unit cell from indexing to cell refinement fields') 74 self.RefineCell = parent.Append( id=wxID_REFINECELL, kind=wx.ITEM_NORMAL, \91 self.RefineCell = parent.Append( id=wxID_REFINECELL, kind=wx.ITEM_NORMAL, 75 92 text='Refine Cell',help='Refine unit cell parameters from indexed peaks') 76 93 … … 80 97 self.AtomsMenu = wx.MenuBar() 81 98 self.ImageMenu = wx.MenuBar() 99 self.MaskMenu = wx.MenuBar() 82 100 self.PeakMenu = wx.MenuBar() 83 101 self.IndexMenu = wx.MenuBar() 84 102 self.AtomEdit = wx.Menu(title='') 85 103 self.ImageEdit = wx.Menu(title='') 104 self.MaskEdit = wx.Menu(title='') 86 105 self.PeakEdit = wx.Menu(title='') 87 106 self.IndexEdit = wx.Menu(title='') … … 90 109 self._init_coll_ImageMenu(self.ImageMenu) 91 110 self._init_coll_Image_Items(self.ImageEdit) 111 self._init_coll_MaskMenu(self.MaskMenu) 112 self._init_coll_Mask_Items(self.MaskEdit) 92 113 self._init_coll_PeakMenu(self.PeakMenu) 93 114 self._init_coll_Peak_Items(self.PeakEdit) … … 275 296 self.data[row][col] = value 276 297 innerSetValue(row, col, value) 277 278 298 279 299 def UpdateNotebook(self,data): … … 1134 1154 1135 1155 def OnMaxSlider(event): 1136 imax = int(maxSel.GetValue()) 1137 delt = data['range'][0][1]-data['range'][0][0] 1138 data['range'][1][1] = max(data['range'][1][0]+1,int((imax/100.)*delt)+data['range'][0][0]) 1156 logDeltZero = math.log(data['range'][0][1]-data['range'][0][0]) 1157 imax = int(maxSel.GetValue())*logDeltZero/100. 1158 data['range'][1][1] = math.exp(imax)+data['range'][0][0] 1159 data['range'][1][0] = min(data['range'][1][1]-1,data['range'][1][0]) 1139 1160 G2plt.PlotExposedImage(self) 1140 1161 1141 1162 def OnMinSlider(event): 1142 imin = int(minSel.GetValue())1143 delt = data['range'][1][1]-data['range'][0][0]1144 data['range'][1][0] = min(data['range'][1][1]-1,i nt((imin/100.)*delt)+data['range'][0][0])1163 DeltOne = data['range'][1][1]-data['range'][0][0] 1164 imin = int(minSel.GetValue())*DeltOne/100. 1165 data['range'][1][0] = min(data['range'][1][1]-1,imin+data['range'][0][0]) 1145 1166 G2plt.PlotExposedImage(self) 1146 1167 … … 1244 1265 data['ellipses'] = [] 1245 1266 self.dataFrame.ImageEdit.Enable(id=wxID_IMCLEARCALIB,enable=False) 1246 G2plt.Plot Image(self)1267 G2plt.PlotExposedImage(self) 1247 1268 1248 1269 def OnCalibrate(event): … … 1272 1293 def OnIntegrate(event): 1273 1294 G2cmp.ImageIntegrate(self,data) 1274 self.dataFrame.ImageEdit.Enable(id=wxID_SAVEINTG,enable=True) 1295 G2plt.PlotIntegration(self,newPlot=True) 1296 self.dataFrame.ImageEdit.Enable(id=wxID_SAVEINTG,enable=True) 1297 1298 def OnIntegrateAll(event): 1299 print 'integrate all' 1275 1300 1276 1301 def OnSaveIntegrate(event): 1277 import numpy as np1278 1302 print 'save integration' 1279 azms = self.Integrate[1] 1280 X = self.Integrate[2].flatten()[:-1] 1281 Xminmax = [X[0],X[-1]] 1282 N = len(X) 1283 Id = self.PatternTree.GetItemParent(self.PickId) 1284 name = self.PatternTree.GetItemText(Id) 1285 Comments = self.PatternTree.GetItemPyData(GetPatternTreeItemId(self,Id, 'Comments')) 1286 name = name.replace('IMG ','PWDR ') 1287 names = ['Type','Lam','Zero','Polariz.','U','V','W','X','Y','SH/L','Azimuth'] 1288 codes = [0 for i in range(11)] 1289 parms = ['PXC',data['wavelength'],0.0,0.0,1.0,-1.0,0.3,0.0,1.0,0.0,0.0] 1290 Azms = [(azms[i+1]+azms[i])/2. for i in range(len(azms)-1)] 1291 for i,azm in enumerate(Azms): 1292 Id = self.PatternTree.AppendItem(parent=self.root,text=name+"Azm= %.2f"%(azm)) 1293 parms[10] = azm 1294 Y = self.Integrate[0][i].flatten() 1295 W = np.sqrt(Y) 1296 self.PatternTree.SetItemPyData(Id,[[''],[np.array(X),np.array(Y),np.array(W),np.zeros(N),np.zeros(N),np.zeros(N)]]) 1297 self.PatternTree.SetItemPyData(self.PatternTree.AppendItem(Id,text='Comments'),Comments) 1298 self.PatternTree.SetItemPyData(self.PatternTree.AppendItem(Id,text='Limits'),[tuple(Xminmax),Xminmax]) 1299 self.PatternTree.SetItemPyData(self.PatternTree.AppendItem(Id,text='Background'),[['chebyschev',1,3,1.0,0.0,0.0]]) 1300 self.PatternTree.SetItemPyData(self.PatternTree.AppendItem(Id,text='Instrument Parameters'),[tuple(parms),parms,codes,names]) 1301 self.PatternTree.SetItemPyData(self.PatternTree.AppendItem(Id,text='Peak List'),[]) 1302 self.PatternTree.SetItemPyData(self.PatternTree.AppendItem(Id,text='Index Peak List'),[]) 1303 self.PatternTree.SetItemPyData(self.PatternTree.AppendItem(Id,text='Unit Cells List'),[]) 1304 self.PatternTree.SelectItem(Id) 1305 self.PatternTree.Expand(Id) 1306 self.PatternId = Id 1303 G2IO.SaveIntegration(self,self.PickId,data) 1307 1304 1308 1305 def OnCopyControls(event): 1306 TextList = [] 1307 Names = [] 1308 if self.PatternTree.GetCount(): 1309 id, cookie = self.PatternTree.GetFirstChild(self.root) 1310 while id: 1311 name = self.PatternTree.GetItemText(id) 1312 Names.append(name) 1313 if 'IMG' in name: 1314 if id == self.Image: 1315 Source = name 1316 Data = self.PatternTree.GetItemPyData(GetPatternTreeItemId(self,id, 'Image Controls')) 1317 Data['showLines'] = True 1318 Data['ring'] = [] 1319 Data['rings'] = [] 1320 Data['cutoff'] = 10 1321 Data['pixLimit'] = 20 1322 Data['ellipses'] = [] 1323 Data['calibrant'] = '' 1324 Data['setDefault'] = False 1325 else: 1326 TextList.append([False,name,id]) 1327 id, cookie = self.PatternTree.GetNextChild(self.root, cookie) 1328 if not len(TextList): 1329 self.ErrorDialog('Nothing to copy controls to','There must be more than one "IMG" pattern') 1330 return 1331 dlg = self.CopyDialog(self,'Copy image controls','Copy controls from '+Source+' to:',TextList) 1332 try: 1333 if dlg.ShowModal() == wx.ID_OK: 1334 result = dlg.GetData() 1335 for i,item in enumerate(result[:-1]): 1336 ifcopy,name,id = item 1337 if ifcopy: 1338 oldData = self.PatternTree.GetItemPyData(GetPatternTreeItemId(self,id, 'Image Controls')) 1339 Data['range'] = oldData['range'] 1340 self.PatternTree.SetItemPyData(GetPatternTreeItemId(self,id, 'Image Controls'),Data) 1341 finally: 1342 dlg.Destroy() 1343 1309 1344 colorList = [m for m in mpl.cm.datad.keys() if not m.endswith("_r")] 1310 1345 calList = [m for m in calFile.Calibrants.keys()] … … 1319 1354 self.dataFrame.ImageEdit.Enable(id=wxID_IMCLEARCALIB,enable=False) 1320 1355 self.dataFrame.Bind(wx.EVT_MENU, OnIntegrate, id=wxID_IMINTEGRATE) 1356 self.dataFrame.Bind(wx.EVT_MENU, OnIntegrateAll, id=wxID_INTEGRATEALL) 1321 1357 self.dataFrame.Bind(wx.EVT_MENU, OnSaveIntegrate, id=wxID_SAVEINTG) 1358 self.dataFrame.Bind(wx.EVT_MENU, OnCopyControls, id=wxID_IMCOPYCONTROLS) 1322 1359 self.dataFrame.ImageEdit.Enable(id=wxID_SAVEINTG,enable=False) 1323 1360 self.dataDisplay = wx.Panel(self.dataFrame) … … 1327 1364 maxSizer = wx.FlexGridSizer(2,2,0,5) 1328 1365 maxSizer.AddGrowableCol(1,1) 1366 logDeltZero = math.log(data['range'][0][1]-data['range'][0][0]) 1367 DeltOne = data['range'][1][1]-data['range'][0][0] 1368 logDeltOne = math.log(DeltOne) 1329 1369 maxSizer.Add(wx.StaticText(parent=self.dataDisplay,label=' Max intensity'),0, 1330 1370 wx.ALIGN_CENTER_VERTICAL|wx.EXPAND) 1331 1371 maxSel = wx.Slider(parent=self.dataDisplay,style=wx.SL_HORIZONTAL, 1332 value=int(100* data['range'][1][1]/(data['range'][0][1]-data['range'][0][0])))1372 value=int(100*logDeltOne/logDeltZero)) 1333 1373 maxSizer.Add(maxSel,1,wx.EXPAND|wx.RIGHT) 1334 1374 maxSel.Bind(wx.EVT_SLIDER, OnMaxSlider) … … 1336 1376 wx.ALIGN_CENTER_VERTICAL|wx.EXPAND) 1337 1377 minSel = wx.Slider(parent=self.dataDisplay,style=wx.SL_HORIZONTAL, 1338 value=int(100*data['range'][1][0]/ (data['range'][1][1]-data['range'][0][0])))1378 value=int(100*data['range'][1][0]/DeltOne)) 1339 1379 maxSizer.Add(minSel,1,wx.EXPAND|wx.RIGHT) 1340 1380 minSel.Bind(wx.EVT_SLIDER, OnMinSlider) … … 1388 1428 wx.ALIGN_CENTER_VERTICAL) 1389 1429 1390 #temporary fixes1391 if 'IOtth' not in data:1392 del data['IOradii']1393 data['IOtth'] = [2.0,5.0]1394 if 'outAzimuths' not in data:1395 data['outAzimuths'] = 11396 1397 1430 IOtth = data['IOtth'] 1398 1431 littleSizer = wx.BoxSizer(wx.HORIZONTAL) … … 1411 1444 waveSel = wx.TextCtrl(parent=self.dataDisplay,value=("%6.5f" % (data['wavelength'])), 1412 1445 style=wx.TE_PROCESS_ENTER) 1413 waveSel.Bind(wx.EVT_TEXT ,OnWavelength)1446 waveSel.Bind(wx.EVT_TEXT_ENTER,OnWavelength) 1414 1447 dataSizer.Add(waveSel,0,wx.ALIGN_CENTER_VERTICAL) 1415 1448 … … 1437 1470 littleSizer = wx.BoxSizer(wx.HORIZONTAL) 1438 1471 outChan = wx.TextCtrl(parent=self.dataDisplay,value=str(data['outChannels']),style=wx.TE_PROCESS_ENTER) 1439 outChan.Bind(wx.EVT_TEXT ,OnNumOutChans)1472 outChan.Bind(wx.EVT_TEXT_ENTER,OnNumOutChans) 1440 1473 littleSizer.Add(outChan,0,wx.ALIGN_CENTER_VERTICAL) 1441 1474 outAzim = wx.TextCtrl(parent=self.dataDisplay,value=str(data['outAzimuths']),style=wx.TE_PROCESS_ENTER) 1442 outAzim.Bind(wx.EVT_TEXT ,OnNumOutAzms)1475 outAzim.Bind(wx.EVT_TEXT_ENTER,OnNumOutAzms) 1443 1476 littleSizer.Add(outAzim,0,wx.ALIGN_CENTER_VERTICAL) 1444 1477 dataSizer.Add(littleSizer,0,) … … 1476 1509 self.dataDisplay.SetSize(mainSizer.Fit(self.dataFrame)) 1477 1510 self.dataFrame.setSizePosLeft(mainSizer.Fit(self.dataFrame)) 1511 1512 def UpdateMasks(self,data): 1513 1514 def OnThreshold(event): 1515 lower = max(int(self.lowerThreshold.GetValue()),thresh[0][0]) 1516 upper = min(int(self.upperThreshold.GetValue()),thresh[0][1]) 1517 data['Thresholds'][1] = [lower,upper] 1518 self.lowerThreshold.SetValue("%8d" % (lower)) 1519 self.upperThreshold.SetValue("%8d" % (upper)) 1520 G2plt.PlotExposedImage(self) 1521 1522 def OnCopyMask(event): 1523 TextList = [] 1524 Names = [] 1525 if self.PatternTree.GetCount(): 1526 id, cookie = self.PatternTree.GetFirstChild(self.root) 1527 while id: 1528 name = self.PatternTree.GetItemText(id) 1529 Names.append(name) 1530 if 'IMG' in name: 1531 if id == self.Image: 1532 Source = name 1533 mask = self.PatternTree.GetItemPyData(GetPatternTreeItemId(self,id, 'Masks')) 1534 else: 1535 TextList.append([False,name,id]) 1536 id, cookie = self.PatternTree.GetNextChild(self.root, cookie) 1537 if not len(TextList): 1538 self.ErrorDialog('Nothing to copy mask to','There must be more than one "IMG" pattern') 1539 return 1540 dlg = self.CopyDialog(self,'Copy mask information','Copy mask from '+Source+' to:',TextList) 1541 try: 1542 if dlg.ShowModal() == wx.ID_OK: 1543 result = dlg.GetData() 1544 for i,item in enumerate(result[:-1]): 1545 ifcopy,name,id = item 1546 if ifcopy: 1547 self.PatternTree.SetItemPyData(GetPatternTreeItemId(self,id, 'Masks'),mask) 1548 finally: 1549 dlg.Destroy() 1550 1551 if self.dataDisplay: 1552 self.dataDisplay.Destroy() 1553 self.dataFrame.SetMenuBar(self.dataFrame.MaskMenu) 1554 self.dataFrame.Bind(wx.EVT_MENU, OnCopyMask, id=wxID_MASKCOPY) 1555 if not self.dataFrame.GetStatusBar(): 1556 Status = self.dataFrame.CreateStatusBar() 1557 self.dataDisplay = wx.Panel(self.dataFrame) 1558 mainSizer = wx.BoxSizer(wx.VERTICAL) 1559 mainSizer.Add((5,10),0) 1560 1561 thresh = data['Thresholds'] 1562 littleSizer = wx.FlexGridSizer(2,3,0,5) 1563 littleSizer.Add(wx.StaticText(parent=self.dataDisplay,label=' Lower/Upper limits '),0, 1564 wx.ALIGN_CENTER_VERTICAL) 1565 littleSizer.Add(wx.TextCtrl(parent=self.dataDisplay, 1566 value=("%8d" % (thresh[0][0])),style=wx.TE_READONLY),0,wx.ALIGN_CENTER_VERTICAL) 1567 littleSizer.Add(wx.TextCtrl(parent=self.dataDisplay, 1568 value=("%8d" % (thresh[0][1])),style=wx.wx.TE_READONLY),0,wx.ALIGN_CENTER_VERTICAL) 1569 1570 littleSizer.Add(wx.StaticText(parent=self.dataDisplay,label=' Lower/Upper thresholds '),0, 1571 wx.ALIGN_CENTER_VERTICAL) 1572 self.lowerThreshold = wx.TextCtrl(parent=self.dataDisplay, 1573 value=("%8d" % (thresh[1][0])),style=wx.TE_PROCESS_ENTER) 1574 self.lowerThreshold.Bind(wx.EVT_TEXT_ENTER,OnThreshold) 1575 littleSizer.Add(self.lowerThreshold,0,wx.ALIGN_CENTER_VERTICAL) 1576 self.upperThreshold = wx.TextCtrl(parent=self.dataDisplay, 1577 value=("%8d" % (thresh[1][1])),style=wx.TE_PROCESS_ENTER) 1578 self.upperThreshold.Bind(wx.EVT_TEXT_ENTER,OnThreshold) 1579 littleSizer.Add(self.upperThreshold,0,wx.ALIGN_CENTER_VERTICAL) 1580 mainSizer.Add(littleSizer,0,) 1581 1582 1583 1584 mainSizer.Layout() 1585 self.dataDisplay.SetSizer(mainSizer) 1586 self.dataDisplay.SetSize(mainSizer.Fit(self.dataFrame)) 1587 self.dataFrame.setSizePosLeft(mainSizer.Fit(self.dataFrame)) 1478 1588 1479 1589 def UpdatePhaseData(self,item,data,oldPage): … … 1880 1990 elif 'IMG' in self.PatternTree.GetItemText(item): 1881 1991 self.Image = item 1882 self.Img = 01883 1992 G2plt.PlotImage(self,newPlot=True) 1884 1993 elif 'PKS' in self.PatternTree.GetItemText(item): … … 1906 2015 data = self.PatternTree.GetItemPyData(item) 1907 2016 UpdateImageControls(self,data) 2017 G2plt.PlotImage(self) 2018 elif self.PatternTree.GetItemText(item) == 'Masks': 2019 self.dataFrame.SetTitle('Masks') 2020 self.PickId = item 2021 self.Image = self.PatternTree.GetItemParent(item) 2022 data = self.PatternTree.GetItemPyData(item) 2023 UpdateMasks(self,data) 1908 2024 G2plt.PlotImage(self) 1909 2025 elif self.PatternTree.GetItemText(item) == 'HKL Plot Controls': -
trunk/GSASIIplot.py
r62 r63 244 244 else: 245 245 self.Contour = True 246 else:247 event.Skip(True)248 246 PlotPatterns(self) 249 247 … … 389 387 if self.Contour: 390 388 acolor = mpl.cm.get_cmap('Paired') 391 Plot. contourf(ContourX,ContourY,ContourZ,cmap=acolor)392 Plot.set_ylim(0,Nseq-1)389 Plot.imshow(ContourZ,cmap=acolor,vmin=0,vmax=Ymax,interpolation='nearest', 390 extent=[ContourX[0],ContourX[-1],ContourY[0],ContourY[-1]],aspect='auto') 393 391 newPlot = True 394 392 else: … … 403 401 else: 404 402 Page.canvas.draw() 405 406 407 403 self.Pwdr = True 408 404 … … 524 520 Plot.legend(loc='best') 525 521 Page.canvas.draw() 522 523 def PlotExposedImage(self,newPlot=False): 524 plotNo = self.G2plotNB.nb.GetSelection() 525 if self.G2plotNB.nb.GetPageText(plotNo) == '2D Powder Image': 526 PlotImage(self,newPlot) 527 elif self.G2plotNB.nb.GetPageText(plotNo) == '2D Integration': 528 PlotIntegration(self,newPlot) 526 529 527 530 def PlotImage(self,newPlot=False): … … 602 605 xpos,ypos,I,J = G2cmp.ImageLocalMax(self.ImageZ,20,Xpix,Ypix) 603 606 if I and J: 604 xpos /= scalex 607 xpos += .5 #shift to pixel center 608 ypos += .5 609 xpos /= scalex #convert to mm 605 610 ypos /= scaley 606 611 Data['ring'].append([xpos,ypos]) … … 667 672 self.ImageZ = G2IO.GetImageData(imagefile,imageOnly=True) 668 673 self.oldImagefile = imagefile 669 Data = self.PatternTree.GetItemPyData( \674 Data = self.PatternTree.GetItemPyData( 670 675 G2gd.GetPatternTreeItemId(self,self.Image, 'Image Controls')) 676 try: 677 Masks = self.PatternTree.GetItemPyData( 678 G2gd.GetPatternTreeItemId(self,self.Image, 'Masks')) 679 except TypeError: #missing Masks 680 Masks = {} 671 681 imScale = 1 672 682 if len(self.ImageZ) > 1024: … … 684 694 Plot.set_xlabel('Image x-axis, mm',fontsize=12) 685 695 Plot.set_ylabel('Image y-axis, mm',fontsize=12) 696 #need "applyMask" routine here 686 697 A = G2cmp.ImageCompress(self.ImageZ,imScale) 687 self.Img = Plot.imshow(A,aspect='equal',cmap=acolor, \698 Img = Plot.imshow(A,aspect='equal',cmap=acolor, 688 699 interpolation='nearest',vmin=Imin,vmax=Imax,extent=[0,Xmax,Xmax,0]) 689 700 … … 728 739 Plot.add_artist(Ellipse([cent[0],cent[1]],2*width,2*height,phi,ec=col,fc='none')) 729 740 Plot.text(cent[0],cent[1],'+',color=col,ha='center',va='center') 730 colorBar = Page.figure.colorbar( self.Img)741 colorBar = Page.figure.colorbar(Img) 731 742 Plot.set_xlim(xlim) 732 743 Plot.set_ylim(ylim) … … 740 751 else: 741 752 Page.canvas.draw() 753 754 def PlotIntegration(self,newPlot=False): 742 755 756 def OnMotion(event): 757 Page.canvas.SetToolTipString('') 758 Page.canvas.SetCursor(wx.CROSS_CURSOR) 759 azm = event.ydata 760 tth = event.xdata 761 if azm and tth: 762 self.G2plotNB.status.SetFields(\ 763 ['Detector 2-th =%9.3fdeg, azm = %7.2fdeg'%(tth,azm),]) 764 765 try: 766 plotNum = self.G2plotNB.plotList.index('2D Integration') 767 Page = self.G2plotNB.nb.GetPage(plotNum) 768 if not newPlot: 769 Plot = Page.figure.gca() #get previous plot & get limits 770 xylim = Plot.get_xlim(),Plot.get_ylim() 771 Page.figure.clf() 772 Plot = Page.figure.gca() #get a fresh plot after clf() 773 774 except ValueError,error: 775 Plot = self.G2plotNB.add('2D Integration').gca() 776 plotNum = self.G2plotNB.plotList.index('2D Integration') 777 Page = self.G2plotNB.nb.GetPage(plotNum) 778 Page.canvas.mpl_connect('motion_notify_event', OnMotion) 779 Page.views = False 780 view = False 781 Page.SetFocus() 782 783 Data = self.PatternTree.GetItemPyData( 784 G2gd.GetPatternTreeItemId(self,self.Image, 'Image Controls')) 785 image = self.Integrate[0] 786 xsc = self.Integrate[1] 787 ysc = self.Integrate[2] 788 Imin,Imax = Data['range'][1] 789 acolor = mpl.cm.get_cmap(Data['color']) 790 Plot.set_title(self.PatternTree.GetItemText(self.Image)[4:]) 791 Plot.set_ylabel('azimuth',fontsize=12) 792 Plot.set_xlabel('2-theta',fontsize=12) 793 Img = Plot.imshow(image,cmap=acolor,vmin=Imin,vmax=Imax,interpolation='nearest', \ 794 extent=[ysc[0],ysc[-1],xsc[-1],xsc[0]],aspect='auto') 795 colorBar = Page.figure.colorbar(Img) 796 if Data['setRings']: 797 rings = np.concatenate((Data['rings']),axis=0) 798 for xring,yring,dsp in rings: 799 x,y = G2cmp.GetTthAzm(xring,yring,Data) 800 Plot.plot(x,y,'r+') 801 if Data['ellipses']: 802 for ellipse in Data['ellipses']: 803 ring = np.array(G2cmp.makeIdealRing(ellipse[:3])) #skip color 804 x,y = np.hsplit(ring,2) 805 tth,azm = G2cmp.GetTthAzm(x,y,Data) 806 Plot.plot(tth,azm,'b,') 807 if not newPlot: 808 Page.toolbar.push_current() 809 Plot.set_xlim(xylim[0]) 810 Plot.set_ylim(xylim[1]) 811 xylim = [] 812 Page.toolbar.push_current() 813 Page.toolbar.draw() 814 else: 815 Page.canvas.draw() 816 817 743 818 def PlotTRImage(self,tax,tay,taz,newPlot=False): 819 #a test plot routine - not normally used 744 820 745 821 def OnMotion(event): … … 770 846 Page.SetFocus() 771 847 772 Data = self.PatternTree.GetItemPyData( \848 Data = self.PatternTree.GetItemPyData( 773 849 G2gd.GetPatternTreeItemId(self,self.Image, 'Image Controls')) 774 850 Imin,Imax = Data['range'][1] … … 776 852 V = np.arange(Imin,Imax,step) 777 853 acolor = mpl.cm.get_cmap(Data['color']) 854 Plot.set_title(self.PatternTree.GetItemText(self.Image)[4:]) 778 855 Plot.set_xlabel('azimuth',fontsize=12) 779 856 Plot.set_ylabel('2-theta',fontsize=12) … … 795 872 x,y = G2cmp.GetTthAzm(xring,yring,Data) 796 873 Plot.plot(y,x,'r+') 874 if Data['ellipses']: 797 875 for ellipse in Data['ellipses']: 798 876 ring = np.array(G2cmp.makeIdealRing(ellipse[:3])) #skip color … … 810 888 Page.canvas.draw() 811 889 812 def PlotExposedImage(self,newPlot=False): 813 plotNo = self.G2plotNB.nb.GetSelection() 814 if self.G2plotNB.nb.GetPageText(plotNo) == '2D Powder Image': 815 PlotImage(self,newPlot) 816 elif self.G2plotNB.nb.GetPageText(plotNo) == '2D Integration': 817 PlotIntegration(self,newPlot) 818 819 def PlotIntegration(self,newPlot=False): 820 821 def OnMotion(event): 822 Page.canvas.SetToolTipString('') 823 Page.canvas.SetCursor(wx.CROSS_CURSOR) 824 azm = event.ydata 825 tth = event.xdata 826 if azm and tth: 827 self.G2plotNB.status.SetFields(\ 828 ['Detector 2-th =%9.3fdeg, azm = %7.2fdeg'%(tth,azm),]) 829 830 try: 831 plotNum = self.G2plotNB.plotList.index('2D Integration') 832 Page = self.G2plotNB.nb.GetPage(plotNum) 833 if not newPlot: 834 Plot = Page.figure.gca() #get previous plot & get limits 835 xylim = Plot.get_xlim(),Plot.get_ylim() 836 Page.figure.clf() 837 Plot = Page.figure.gca() #get a fresh plot after clf() 838 839 except ValueError,error: 840 Plot = self.G2plotNB.add('2D Integration').gca() 841 plotNum = self.G2plotNB.plotList.index('2D Integration') 842 Page = self.G2plotNB.nb.GetPage(plotNum) 843 Page.canvas.mpl_connect('motion_notify_event', OnMotion) 844 Page.views = False 845 view = False 846 Page.SetFocus() 847 848 Data = self.PatternTree.GetItemPyData( \ 849 G2gd.GetPatternTreeItemId(self,self.Image, 'Image Controls')) 850 image = self.Integrate[0] 851 xsc = self.Integrate[1] 852 ysc = self.Integrate[2] 853 Imin,Imax = Data['range'][1] 854 acolor = mpl.cm.get_cmap(Data['color']) 855 Plot.set_ylabel('azimuth',fontsize=12) 856 Plot.set_xlabel('2-theta',fontsize=12) 857 Plot.imshow(image,cmap=acolor,vmin=Imin,vmax=Imax,interpolation='nearest', \ 858 extent=[ysc[0],ysc[-1],xsc[-1],xsc[0]],aspect='auto') 859 if Data['setRings']: 860 rings = np.concatenate((Data['rings']),axis=0) 861 for xring,yring,dsp in rings: 862 x,y = G2cmp.GetTthAzm(xring,yring,Data) 863 Plot.plot(x,y,'r+') 864 for ellipse in Data['ellipses']: 865 ring = np.array(G2cmp.makeIdealRing(ellipse[:3])) #skip color 866 x,y = np.hsplit(ring,2) 867 tth,azm = G2cmp.GetTthAzm(x,y,Data) 868 Plot.plot(tth,azm,'b,') 869 if not newPlot: 870 Page.toolbar.push_current() 871 Plot.set_xlim(xylim[0]) 872 Plot.set_ylim(xylim[1]) 873 xylim = [] 874 Page.toolbar.push_current() 875 Page.toolbar.draw() 876 else: 877 Page.canvas.draw() 878 890
Note: See TracChangeset
for help on using the changeset viewer.