Changeset 49
- Timestamp:
- Apr 20, 2010 1:10:20 PM (13 years ago)
- Location:
- trunk
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/GSASII.py
r48 r49 236 236 self.Image = 0 237 237 self.Img = 0 238 self.TA = 0 238 239 self.Pwdr = False 239 240 self.imageDefault = {} … … 251 252 pltPage = self.G2plotNB.nb.GetPage(pltNum) 252 253 pltPlot = pltPage.figure.gca() 253 pltPage.xylim = [pltPlot.get_xlim(),pltPlot.get_ylim()] 254 pltPage.views = copy.deepcopy(pltPage.toolbar._views) 254 # pltPage.xylim = [pltPlot.get_xlim(),pltPlot.get_ylim()] 255 # print pltPage.xylim 256 # pltPage.views = copy.deepcopy(pltPage.toolbar._views) 255 257 item = event.GetItem() 256 258 G2gd.MovePatternTreeToGrid(self,item) … … 411 413 Data['LRazimuth'] = [-135,-45] 412 414 Data['outChannels'] = 2500 415 Data['outAzimuths'] = 1 413 416 Data['fullIntegrate'] = False 414 417 Data['setRings'] = False … … 773 776 def OnFileOpenMenu(self, event): 774 777 result = '' 778 Id = 0 775 779 if self.PatternTree.GetChildrenCount(self.root,False): 776 780 if self.dataFrame: … … 796 800 self.PatternTree.Expand(self.root) 797 801 self.HKL = [] 802 item, cookie = self.PatternTree.GetFirstChild(self.root) 803 while item and not Id: 804 name = self.PatternTree.GetItemText(item) 805 if 'PWDR' in name or 'SXTL' in name or 'IMG' in name: 806 Id = item 807 item, cookie = self.PatternTree.GetNextChild(self.root, cookie) 808 if Id: 809 self.PatternTree.SelectItem(Id) 798 810 finally: 799 811 dlg.Destroy() -
trunk/GSASIIIO.py
r44 r49 513 513 print 'Read APS PE-detector tiff file: ',filename 514 514 File = open(filename,'Ur') 515 Meta = open(filename+'.metadata','Ur') 515 dataType = 5 516 try: 517 Meta = open(filename+'.metadata','Ur') 518 head = Meta.readlines() 519 for line in head: 520 line = line.strip() 521 if 'dataType' in line: 522 dataType = int(line.split('=')[1]) 523 Meta.close() 524 except IOError: 525 print 'no metadata file found - will try to read file anyway' 526 head = 'no metadata file found' 516 527 tag = File.read(3) 517 528 if tag != 'II*': 518 529 lines = ['not a APS PE-detector tiff file',] 519 530 return lines,0,0 520 head = Meta.readlines()521 dataType = 0522 for line in head:523 line = line.strip()524 if 'dataType' in line:525 dataType = int(line.split('=')[1])526 531 size = st.unpack('<i',File.read(4))[0] 527 532 image = np.zeros(shape=(size,size),dtype=np.int32) -
trunk/GSASIIcomp.py
r48 r49 42 42 acosd = lambda x: 180.*math.acos(x)/math.pi 43 43 rdsq2d = lambda x,p: round(1.0/math.sqrt(x),p) 44 #numpy versions 45 npsind = lambda x: np.sin(x*np.pi/180.) 46 npasind = lambda x: 180.*np.arcsin(x)/math.pi 47 npcosd = lambda x: np.cos(x*math.pi/180.) 48 nptand = lambda x: np.tan(x*math.pi/180.) 49 npatand = lambda x: 180.*np.arctan(x)/np.pi 50 npatan2d = lambda y,x: 180.*np.arctan2(y,x)/np.pi 44 51 45 52 def sec2HMS(sec): … … 504 511 cs = cosd(Angle) 505 512 ss = sind(Angle) 506 M = np.array(([1 ,0,0],[0,cs,-ss],[0,ss,cs]))513 M = np.array(([1.,0.,0.],[0.,cs,-ss],[0.,ss,cs]),dtype=np.float32) 507 514 return np.roll(np.roll(M,Axis,axis=0),Axis,axis=1) 508 515 … … 1209 1216 Err,parms = FitCircle(ring) 1210 1217 Err /= len(ring) 1211 print 'circle error:','%8f'%(Err)1218 # print 'circle error:','%8f'%(Err) 1212 1219 if Err > 20000.: 1213 1220 eparms = FitEllipse(ring) … … 1274 1281 from scipy.optimize import leastsq 1275 1282 def ellipseCalc(B,xyd,wave): 1276 sind = lambda x: np.sin(x*math.pi/180.)1277 asind = lambda x: 180.*np.arcsin(x)/math.pi1278 cosd = lambda x: np.cos(x*math.pi/180.)1279 tand = lambda x: np.tan(x*math.pi/180.)1280 1283 x = xyd[0] 1281 1284 y = xyd[1] 1282 1285 dsp = xyd[2] 1283 1286 dist,x0,y0,phi,tilt = B 1284 tth = 2.0* asind(wave/(2.*dsp))1285 ttth = tand(tth)1287 tth = 2.0*npasind(wave/(2.*dsp)) 1288 ttth = nptand(tth) 1286 1289 radius = dist*ttth 1287 stth = sind(tth)1288 cosb = cosd(tilt)1289 R1 = dist*stth* cosd(tth)*cosb/(cosb**2-stth**2)1290 stth = npsind(tth) 1291 cosb = npcosd(tilt) 1292 R1 = dist*stth*npcosd(tth)*cosb/(cosb**2-stth**2) 1290 1293 R0 = np.sqrt(R1*radius*cosb) 1291 zdis = R1*ttth* tand(tilt)1292 X = x-x0+zdis* sind(phi)1293 Y = y-y0-zdis* cosd(phi)1294 XR = X* cosd(phi)-Y*sind(phi)1295 YR = X* sind(phi)+Y*cosd(phi)1294 zdis = R1*ttth*nptand(tilt) 1295 X = x-x0+zdis*npsind(phi) 1296 Y = y-y0-zdis*npcosd(phi) 1297 XR = X*npcosd(phi)-Y*npsind(phi) 1298 YR = X*npsind(phi)+Y*npcosd(phi) 1296 1299 return (XR/R0)**2+(YR/R1)**2-1 1297 1300 result = leastsq(ellipseCalc,p0,args=(rings.T,wave)) 1298 1301 return result[0] 1299 1300 1302 1301 1303 def ImageLocalMax(image,w,Xpix,Ypix): … … 1400 1402 1401 1403 def GetTthDspAzm(x,y,data): 1402 #make numpy array compliant1403 atand = lambda x: 180.*np.arctan(x)/np.pi1404 sind = lambda x: np.sin(x*np.pi/180.)1405 atan2d = lambda y,x: 180.*np.arctan2(y,x)/np.pi1406 1404 wave = data['wavelength'] 1407 1405 dist = data['distance'] … … 1409 1407 tilt = data['tilt'] 1410 1408 phi = data['rotation'] 1411 dx = x-cent[0]1412 dy = y-cent[1]1413 X = np.array(([dx,dy, 0]))1414 X = np. sum(X*makeMat(-phi,2),axis=1)1415 X = np.sum(X*makeMat(-tilt,0),axis=1)1416 tth = atand(np.sqrt(dx**2+dy**2-X[2]**2)/(dist-X[2]))1417 dsp = wave/(2.* sind(tth/2.))1418 azm = atan2d(dy,dx)1419 return tth, dsp,azm1409 dx = np.array(x-cent[0],dtype=np.float32) 1410 dy = np.array(y-cent[1],dtype=np.float32) 1411 X = np.array(([dx,dy,np.zeros_like(dx)]),dtype=np.float32).T 1412 X = np.dot(X,makeMat(phi,2)) 1413 Z = np.dot(X,makeMat(tilt,0)).T[2] 1414 tth = npatand(np.sqrt(dx**2+dy**2-Z**2)/(dist-Z)) 1415 dsp = wave/(2.*npsind(tth/2.)) 1416 azm = npatan2d(dy,dx) 1417 return tth,azm,dsp 1420 1418 1421 1419 def GetTth(x,y,data): 1422 1420 return GetTthDspAzm(x,y,data)[0] 1423 1421 1422 def GetTthAzm(x,y,data): 1423 return GetTthDspAzm(x,y,data)[0:2] 1424 1424 1425 def GetDsp(x,y,data): 1425 return GetTthDspAzm(x,y,data)[ 1]1426 return GetTthDspAzm(x,y,data)[2] 1426 1427 1427 1428 def ImageCompress(image,scale): … … 1596 1597 ellipse = GetEllipse(H[3],data) 1597 1598 data['ellipses'].append(copy.deepcopy(ellipse+('b',))) 1598 G2plt.PlotImage(self) 1599 1599 G2plt.PlotImage(self) 1600 1600 return True 1601 1602 def ImageIntegrate(self,data): 1603 print 'image integrate' 1604 pixelSize = data['pixelSize'] 1605 scalex = pixelSize[0]/1000. 1606 scaley = pixelSize[1]/1000. 1607 LUtth = data['IOtth'] 1608 if data['fullIntegrate']: 1609 LRazm = [0,360] 1610 else: 1611 LRazm = data['LRazimuth'] 1612 numAzms = data['outAzimuths'] 1613 numChans = data['outChannels'] 1614 outGrid = np.zeros(shape=(numAzms,numChans)) 1615 outNum = np.zeros(shape=(numAzms,numChans)) 1616 imageN = len(self.ImageZ) 1617 t0 = time.time() 1618 print 'Create ',imageN,' X ',imageN,' 2-theta,azimuth map' 1619 tax,tay = np.mgrid[0:imageN,0:imageN] 1620 tax = np.asfarray(tax) 1621 tay = np.asfarray(tay) 1622 tax *= scalex 1623 tay *= scaley 1624 t1 = time.time() 1625 print "Elapsed time:","%8.3f"%(t1-t0), "s" 1626 print 'Fill map with 2-theta/azimuth values' 1627 self.TA = np.reshape(GetTthAzm(tay,tax,data),(2,imageN,imageN)) 1628 t2 = time.time() 1629 print "Elapsed time:","%8.3f"%(t2-t1), "s" 1630 G2plt.PlotTRImage(self) 1631 print 'Form 1-D histograms for ',numAzms,' azimuthal angles' 1632 print 'Integration limits:',LUtth,LRazm 1633 NST = np.histogram2d(self.TA[1].flatten(),self.TA[0].flatten(), \ 1634 bins=(numChans,numAzms),range=[LUtth,LRazm]) 1635 HST = np.histogram2d(self.TA[1].flatten(),self.TA[0].flatten(),normed=True, \ 1636 bins=(numChans,numAzms),weights=self.ImageZ.flatten(),range=[LUtth,LRazm]) 1637 t3 = time.time() 1638 print "Elapsed time:","%8.3f"%(t3-t2), "s" 1639 print NST[0] 1640 print HST[0] 1641 print HST[1] 1642 print HST[2] 1643 1601 1644 1602 1645 def test(): -
trunk/GSASIIgrid.py
r48 r49 20 20 ] = [wx.NewId() for _init_coll_Atom_Items in range(2)] 21 21 22 [ wxID_IMCALIBRATE, wxID_IMINTEGRATE, wxID_IMCLEARCALIB, 23 ] = [wx.NewId() for _init_coll_IMAGE_Items in range( 3)]22 [ wxID_IMCALIBRATE, wxID_IMINTEGRATE, wxID_IMCLEARCALIB, wxID_IMREFRESHTA, 23 ] = [wx.NewId() for _init_coll_IMAGE_Items in range(4)] 24 24 25 25 [ wxID_UNDO,wxID_PEAKFIT,wxID_AUTOPEAKFIT, … … 54 54 parent.Append(help='',id=wxID_IMCLEARCALIB, kind=wx.ITEM_NORMAL,text='Clear calibration') 55 55 parent.Append(help='',id=wxID_IMINTEGRATE, kind=wx.ITEM_NORMAL,text='Integrate') 56 parent.Append(help='',id=wxID_IMREFRESHTA, kind=wx.ITEM_NORMAL,text='Refresh transformed image') 57 56 58 57 59 def _init_coll_Peak_Items(self,parent): … … 1133 1135 try: 1134 1136 numChans = int(outChan.GetValue()) 1137 if numChans < 1: 1138 raise ValueError 1135 1139 data['outChannels'] = numChans 1136 1140 except ValueError: … … 1138 1142 outChan.SetValue(str(data['outChannels'])) #reset in case of error 1139 1143 1144 def OnNumOutAzms(event): 1145 try: 1146 numAzms = int(outAzim.GetValue()) 1147 if numAzms < 1: 1148 raise ValueError 1149 data['outAzimuths'] = numAzms 1150 except ValueError: 1151 pass 1152 outAzim.SetValue(str(data['outAzimuths'])) #reset in case of error 1153 1140 1154 def OnWavelength(event): 1141 1155 try: 1142 1156 wave = float(waveSel.GetValue()) 1157 if wave < .01: 1158 raise ValueError 1143 1159 data['wavelength'] = wave 1144 1160 except ValueError: … … 1194 1210 Lazm = int(self.Lazim.GetValue()) 1195 1211 Razm = int(self.Razim.GetValue()) 1196 # if Lazm > Razm:1197 # G2cmp.SwapXY(Lazm,Razm)1198 1212 data['LRazimuth'] = [Lazm,Razm] 1199 1213 G2plt.PlotImage(self) … … 1237 1251 1238 1252 def OnIntegrate(event): 1239 print 'image integrate' 1253 G2cmp.ImageIntegrate(self,data) 1254 1255 def OnRefreshTA(event): 1256 G2plt.PlotTRImage(self) 1240 1257 1241 1258 colorList = [m for m in mpl.cm.datad.keys() if not m.endswith("_r")] … … 1248 1265 self.dataFrame.Bind(wx.EVT_MENU, OnClearCalib, id=wxID_IMCLEARCALIB) 1249 1266 self.dataFrame.Bind(wx.EVT_MENU, OnIntegrate, id=wxID_IMINTEGRATE) 1267 self.dataFrame.Bind(wx.EVT_MENU, OnRefreshTA, id=wxID_IMREFRESHTA) 1250 1268 self.dataDisplay = wx.Panel(self.dataFrame) 1251 1269 mainSizer = wx.BoxSizer(wx.VERTICAL) … … 1284 1302 comboSizer.Add(wx.StaticText(parent=self.dataDisplay,label=' Pixel search range '),0, 1285 1303 wx.ALIGN_CENTER_VERTICAL) 1286 pixLimit = wx.ComboBox(parent=self.dataDisplay,value=str(data['pixLimit']),choices=[' 5','10','15','20'],1304 pixLimit = wx.ComboBox(parent=self.dataDisplay,value=str(data['pixLimit']),choices=['1','2','5','10','15','20'], 1287 1305 style=wx.CB_READONLY|wx.CB_DROPDOWN) 1288 1306 pixLimit.Bind(wx.EVT_COMBOBOX, OnPixLimit) … … 1314 1332 dataSizer.Add(wx.StaticText(parent=self.dataDisplay,label=' Inner/Outer 2-theta'),0, 1315 1333 wx.ALIGN_CENTER_VERTICAL) 1316 if 'IOtth' not in data: #temporary fix 1334 1335 #temporary fixes 1336 if 'IOtth' not in data: 1317 1337 del data['IOradii'] 1318 1338 data['IOtth'] = [2.0,5.0] 1339 if 'outAzimuths' not in data: 1340 data['outAzimuths'] = 1 1341 1319 1342 IOtth = data['IOtth'] 1320 1343 littleSizer = wx.BoxSizer(wx.HORIZONTAL) … … 1355 1378 dataSizer.Add(distSel,0,wx.ALIGN_CENTER_VERTICAL) 1356 1379 1357 dataSizer.Add(wx.StaticText(parent=self.dataDisplay,label=' No. bins'),0,1380 dataSizer.Add(wx.StaticText(parent=self.dataDisplay,label=' No. 2-theta/azimuth bins'),0, 1358 1381 wx.ALIGN_CENTER_VERTICAL) 1382 littleSizer = wx.BoxSizer(wx.HORIZONTAL) 1359 1383 outChan = wx.TextCtrl(parent=self.dataDisplay,value=str(data['outChannels']),style=wx.TE_PROCESS_ENTER) 1360 1384 outChan.Bind(wx.EVT_TEXT_ENTER,OnNumOutChans) 1361 dataSizer.Add(outChan,0,wx.ALIGN_CENTER_VERTICAL) 1385 littleSizer.Add(outChan,0,wx.ALIGN_CENTER_VERTICAL) 1386 outAzim = wx.TextCtrl(parent=self.dataDisplay,value=str(data['outAzimuths']),style=wx.TE_PROCESS_ENTER) 1387 outAzim.Bind(wx.EVT_TEXT_ENTER,OnNumOutAzms) 1388 littleSizer.Add(outAzim,0,wx.ALIGN_CENTER_VERTICAL) 1389 dataSizer.Add(littleSizer,0,) 1362 1390 1363 1391 dataSizer.Add(wx.StaticText(parent=self.dataDisplay,label=' Tilt angle'),0, … … 1802 1830 elif 'PKS' in self.PatternTree.GetItemText(item): 1803 1831 G2plt.PlotPowderLines(self) 1804 elif 'PWDR' in self.PatternTree.GetItemText(item): 1805 G2plt.PlotPatterns(self )1832 elif 'PWDR' in self.PatternTree.GetItemText(item): 1833 G2plt.PlotPatterns(self,True) 1806 1834 elif 'SXTL' in self.PatternTree.GetItemText(item): 1807 1835 self.Sngl = item -
trunk/GSASIIplot.py
r48 r49 38 38 def __init__(self,parent,id=-1): 39 39 wx.Panel.__init__(self,parent,id=id) 40 self.nb = wx.aui.AuiNotebook(self) #style=wx.AUI_NB_DEFAULT_STYLE ^ wx.AUI_NB_CLOSE_ON_ACTIVE_TAB) 40 #so one can't delete a plot page!! 41 self.nb = wx.aui.AuiNotebook(self, \ 42 style=wx.aui.AUI_NB_DEFAULT_STYLE ^ wx.aui.AUI_NB_CLOSE_ON_ACTIVE_TAB) 41 43 sizer = wx.BoxSizer() 42 44 sizer.Add(self.nb,1,wx.EXPAND) … … 198 200 if (0 <= xpix <= size) and (0 <= ypix <= size): 199 201 imgPage.canvas.SetToolTipString('%6d'%(self.ImageZ[ypix][xpix])) 200 tth, dsp,azm= G2cmp.GetTthDspAzm(xpos,ypos,Data)202 tth,azm,dsp = G2cmp.GetTthDspAzm(xpos,ypos,Data) 201 203 Q = 2.*math.pi/dsp 202 204 self.G2plotNB.status.SetFields(\ … … 257 259 rings.remove(ring) 258 260 else: 259 tth, dsp,azm= G2cmp.GetTthDspAzm(xpos,ypos,Data)261 tth,azm,dsp = G2cmp.GetTthDspAzm(xpos,ypos,Data) 260 262 if 'Line2D' in str(self.itemPicked): 261 263 if 'line1' in str(self.itemPicked): … … 326 328 imgPlot.set_ylabel('Image y-axis, mm',fontsize=12) 327 329 A = G2cmp.ImageCompress(self.ImageZ,imScale) 328 self.Img = imgPlot.imshow(self.ImageZ[::imScale,::imScale], \ 329 aspect='equal',cmap=acolor, \ 330 interpolation='nearest',vmin=Imin,vmax=Imax, \ 331 extent=[0,Xmax,Xmax,0]) 330 self.Img = imgPlot.imshow(A,aspect='equal',cmap=acolor, \ 331 interpolation='nearest',vmin=Imin,vmax=Imax,extent=[0,Xmax,Xmax,0]) 332 332 imgPlot.plot(xcent,ycent,'x') 333 333 if Data['showLines']: … … 461 461 pkwPage.canvas.draw() 462 462 463 def PlotPatterns(self ):463 def PlotPatterns(self,newPlot=False): 464 464 465 465 def OnPick(event): … … 471 471 xpos = pick.get_xdata() 472 472 ypos = pick.get_ydata() 473 ind = event.ind 473 474 view = pdrPage.toolbar._views.forward() 474 i nd0 = np.searchsorted(xye[0],view[0][0])475 ind = event.ind+ind0475 if view and 'line2' in str(pick): #apply offset only for picked powder pattern points 476 ind += np.searchsorted(xye[0],view[0][0]) 476 477 xy = zip(xpos[ind],ypos[ind])[0] 477 xm = mouse.xdata478 478 if self.PatternTree.GetItemText(PickId) == 'Peak List': 479 479 if ind.all() != [0]: #picked a data point … … 489 489 data.append(XY) 490 490 G2gd.UpdatePeakGrid(self,data) 491 PlotPatterns(self) 491 492 else: #picked a peak list line 492 493 self.itemPicked = pick … … 501 502 self.PatternTree.SetItemPyData(LimitId,data) 502 503 G2gd.UpdateLimitsGrid(self,data) 504 PlotPatterns(self) 503 505 else: #picked a limit line 504 506 self.itemPicked = pick 505 PlotPatterns(self)506 507 507 508 def OnPlotKeyPress(event): … … 511 512 else: 512 513 self.Weight = True 513 self.PlotPatterns()514 514 print 'plot weighting:',self.Weight 515 if self.PatternTree.GetChildrenCount(self.root,False) > 1: 516 if event.key == 'u' and self.Offset < 100.: 517 self.Offset += 1. 518 self.PlotPatterns() 519 elif event.key == 'd' and self.Offset > 0.: 520 self.Offset -= 1. 521 self.PlotPatterns() 522 elif event.key == 'c': 523 print 'contouring' 524 if self.Contour: 525 self.Contour = False 526 else: 527 self.Contour = True 528 PlotPatterns(self) 515 elif event.key == 'u' and self.Offset < 100.: 516 self.Offset += 1. 517 elif event.key == 'd' and self.Offset > 0.: 518 self.Offset -= 1. 519 elif event.key == 'c': 520 print 'contouring' 521 if self.Contour: 522 self.Contour = False 523 else: 524 self.Contour = True 529 525 else: 530 event.Skip() 526 event.Skip(True) 527 PlotPatterns(self) 531 528 532 529 def OnMotion(event): … … 534 531 if xpos: #avoid out of frame mouse position 535 532 ypos = event.ydata 533 wave = self.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(self,PatternId, 'Instrument Parameters'))[0][1] 534 dsp = 0.0 535 if abs(xpos) > 0.: 536 dsp = wave/(2.*sind(abs(xpos)/2.0)) 536 537 pdrPage.canvas.SetCursor(wx.CROSS_CURSOR) 537 self.G2plotNB.status.SetFields(['2-theta =%9.3f Intensity =%9.1f'%(xpos,ypos),])538 self.G2plotNB.status.SetFields(['2-theta =%9.3f d =%9.5f Intensity =%9.1f'%(xpos,dsp,ypos),]) 538 539 if self.itemPicked: 539 540 pdrPage.canvas.SetToolTipString('%9.3f'%(xpos)) … … 549 550 LimitId = G2gd.GetPatternTreeItemId(self,self.PatternId, 'Limits') 550 551 data = self.PatternTree.GetItemPyData(LimitId) 552 print 'limits',xpos 551 553 data[1][lineNo] = xpos 552 554 self.PatternTree.SetItemPyData(LimitId,data) … … 556 558 PeakId = G2gd.GetPatternTreeItemId(self,self.PatternId, 'Peak List') 557 559 data = self.PatternTree.GetItemPyData(PeakId) 560 print 'peaks',xpos 558 561 data[lineNo-2][0] = xpos 559 562 self.PatternTree.SetItemPyData(PeakId,data) … … 562 565 self.itemPicked = None 563 566 567 xylim = [] 564 568 try: 565 569 plotNum = self.G2plotNB.plotList.index('Powder Patterns') 566 570 pdrPage = self.G2plotNB.nb.GetPage(plotNum) 571 if not newPlot: 572 pdrPlot = pdrPage.figure.gca() #get previous powder plot & get limits 573 xylim = pdrPlot.get_xlim(),pdrPlot.get_ylim() 567 574 pdrPage.figure.clf() 568 pdrPlot = pdrPage.figure.gca() 569 pdrPage.toolbar._views = copy.deepcopy(pdrPage.views) 575 pdrPlot = pdrPage.figure.gca() #get a fresh plot after clf() 570 576 except ValueError,error: 577 newPlot = True 571 578 pdrPlot = self.G2plotNB.add('Powder Patterns').gca() 572 579 plotNum = self.G2plotNB.plotList.index('Powder Patterns') … … 576 583 pdrPage.canvas.mpl_connect('pick_event', OnPick) 577 584 pdrPage.canvas.mpl_connect('button_release_event', OnRelease) 578 pdrPage.xylim = 0579 585 580 586 pdrPage.SetFocus() … … 583 589 PatternId = self.PatternId 584 590 colors=['b','g','r','c','m','k'] 585 Ymax = 1.0586 591 PlotList = [] 587 592 Lines = [] … … 593 598 PlotList.append(Pattern) 594 599 item, cookie = self.PatternTree.GetNextChild(self.root, cookie) 595 xlim = [0.,180.] 596 xmin = 0. 597 xmax = 180. 598 ylim = [0.,1.0e12] 600 Ymax = 1.0 599 601 for Pattern in PlotList: 600 602 xye = Pattern[1] 601 if pdrPage.xylim:602 xlim,ylim = pdrPage.xylim603 else:604 xlim = [xye[0][np.argmin(xye[0])],xye[0][np.argmax(xye[0])]]605 ylim = [xye[1][np.argmin(xye[1])],xye[1][np.argmax(xye[1])]]606 603 Ymax = max(Ymax,max(xye[1])) 607 604 offset = self.Offset*Ymax/100.0 … … 621 618 LimitId = G2gd.GetPatternTreeItemId(self,PatternId, 'Limits') 622 619 N = PlotList.index(Pattern) 623 X ,Y = xye[0:2]624 Y +=offset*N620 X = xye[0] 621 Y = xye[1]+offset*N 625 622 if LimitId: 626 623 limits = self.PatternTree.GetItemPyData(LimitId) 627 Lines.append(pdrPlot.axvline(limits[1][0],color='g',dashes=(5,5),picker=3 ))628 Lines.append(pdrPlot.axvline(limits[1][1],color='r',dashes=(5,5),picker=3 ))624 Lines.append(pdrPlot.axvline(limits[1][0],color='g',dashes=(5,5),picker=3.)) 625 Lines.append(pdrPlot.axvline(limits[1][1],color='r',dashes=(5,5),picker=3.)) 629 626 if self.Contour: 630 627 ContourY.append(N) … … 641 638 W2 = np.sqrt(xye[2]) 642 639 D *= W2 643 pdrPlot.plot(X,Y,colors[N%6]+'+',picker=3 )640 pdrPlot.plot(X,Y,colors[N%6]+'+',picker=3.,clip_on=False) 644 641 pdrPlot.plot(X,Z,colors[(N+1)%6],picker=False) 645 642 pdrPlot.plot(X,W,colors[(N+2)%6],picker=False) … … 652 649 data = self.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(self,PatternId, 'Peak List')) 653 650 for item in data: 654 Lines.append(pdrPlot.axvline(item[0],color=colors[N%6],picker=2 ))651 Lines.append(pdrPlot.axvline(item[0],color=colors[N%6],picker=2.)) 655 652 if self.PatternTree.GetItemText(PickId) == 'Limits': 656 653 tip = 'On data point: Lower limit - L MB; Upper limit - R MB. On limit: MB down to move' … … 658 655 data = self.LimitsTable.GetData() 659 656 else: 660 pdrPlot.plot( xye[0],Y,colors[N%6],picker=False)657 pdrPlot.plot(X,Y,colors[N%6],picker=False) 661 658 if PickId and self.PatternTree.GetItemText(PickId) in ['Index Peak List','Unit Cells List']: 662 659 peaks = self.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(self,PatternId, 'Index Peak List')) … … 666 663 pdrPlot.axvline(hkl[5],color='r',dashes=(5,5)) 667 664 if self.Contour: 668 pdrPlot.contourf(ContourX,ContourY,ContourZ) 669 pdrPlot.set_ylim(0,Nseq-1) 670 self.Lines = Lines 671 view = pdrPage.toolbar._views.forward() 672 if view: 673 pdrPlot.set_xlim(view[0][:2]) 674 pdrPlot.set_ylim(view[0][2:]) 665 acolor = mpl.cm.get_cmap('Paired') 666 pdrPlot.contourf(ContourX,ContourY,ContourZ,cmap=acolor) 667 # pdrPlot.set_ylim(0,Nseq-1) 668 else: 669 self.Lines = Lines 670 if not newPlot: 671 pdrPage.toolbar.push_current() 672 pdrPlot.set_xlim(xylim[0]) 673 pdrPlot.set_ylim(xylim[1]) 674 xylim = [] 675 pdrPage.toolbar.push_current() 676 pdrPage.toolbar.draw() 677 else: 678 pdrPage.canvas.draw() 679 680 675 681 self.Pwdr = True 676 pdrPage.canvas.draw()677 682 678 683 def PlotPowderLines(self): … … 712 717 pksPlot.set_xlim(xlim) 713 718 pksPage.canvas.draw() 714 719 720 721 def PlotTRImage(self): 722 723 def OnMotion(event): 724 trimgPage.canvas.SetToolTipString('') 725 trimgPage.canvas.SetCursor(wx.CROSS_CURSOR) 726 azm = event.xdata 727 tth = event.ydata 728 if azm and tth: 729 self.G2plotNB.status.SetFields(\ 730 ['Detector 2-th =%9.2fdeg, azm = %7.2fdeg'%(tth,azm),]) 731 732 def OnPick(event): 733 if self.PatternTree.GetItemText(self.PickId) != 'Image Controls': 734 return 735 if self.itemPicked is not None: return 736 pick = event.artist 737 self.itemPicked = pick 738 739 def OnRelease(event): 740 if self.PatternTree.GetItemText(self.PickId) != 'Image Controls': 741 return 742 Data = self.PatternTree.GetItemPyData(self.PickId) 743 if self.itemPicked: 744 xpos = event.xdata 745 if xpos: #avoid out of frame mouse position 746 ypos = event.ydata 747 if 'Line2D' in str(self.itemPicked): 748 if 'line0' in str(self.itemPicked): 749 Data['IOtth'][0] = ypos 750 elif 'line1' in str(self.itemPicked): 751 Data['IOtth'][1] = ypos 752 elif 'line2' in str(self.itemPicked) and not Data['fullIntegrate']: 753 Data['LRazimuth'][0] = int(xpos) 754 elif 'line3' in str(self.itemPicked) and not Data['fullIntegrate']: 755 Data['LRazimuth'][1] = int(xpos) 756 757 if Data['LRazimuth'][1] < Data['LRazimuth'][0]: 758 Data['LRazimuth'][1] += 360 759 if Data['IOtth'][0] > Data['IOtth'][1]: 760 Data['IOtth'] = G2cmp.SwapXY(Data['IOtth'][0],Data['IOtth'][1]) 761 762 self.InnerTth.SetValue("%8.2f" % (Data['IOtth'][0])) 763 self.OuterTth.SetValue("%8.2f" % (Data['IOtth'][1])) 764 self.Lazim.SetValue("%6d" % (Data['LRazimuth'][0])) 765 self.Razim.SetValue("%6d" % (Data['LRazimuth'][1])) 766 else: 767 print event.xdata,event.ydata,event.button 768 PlotTRImage(self) 769 self.itemPicked = None 770 771 try: 772 plotNum = self.G2plotNB.plotList.index('2D Transformed Powder Image') 773 trimgPage = self.G2plotNB.nb.GetPage(plotNum) 774 trimgPage.figure.clf() 775 trimgPlot = trimgPage.figure.gca() 776 if trimgPage.views: 777 trimgPage.toolbar._views = copy.deepcopy(trimgPage.views) 778 view = trimgPage.toolbar._views.forward() 779 780 except ValueError,error: 781 trimgPlot = self.G2plotNB.add('2D Transformed Powder Image').gca() 782 plotNum = self.G2plotNB.plotList.index('2D Transformed Powder Image') 783 trimgPage = self.G2plotNB.nb.GetPage(plotNum) 784 trimgPage.canvas.mpl_connect('motion_notify_event', OnMotion) 785 trimgPage.canvas.mpl_connect('pick_event', OnPick) 786 trimgPage.canvas.mpl_connect('button_release_event', OnRelease) 787 trimgPage.views = False 788 view = False 789 trimgPage.SetFocus() 790 791 data = self.PatternTree.GetItemPyData(self.PickId) 792 image = self.ImageZ 793 Iz = len(image) 794 Imin,Imax = data['range'][1] 795 step = (Imax-Imin)/5. 796 V = np.arange(Imin,Imax,step) 797 acolor = mpl.cm.get_cmap('Paired') 798 trimgPlot.set_xlabel('azimuth',fontsize=12) 799 trimgPlot.set_ylabel('2-theta',fontsize=12) 800 trimgPlot.contour(self.TA[1],self.TA[0],image,V,cmap=acolor) 801 if data['showLines']: 802 IOtth = data['IOtth'] 803 LRAzim = data['LRazimuth'] #NB: integers 804 trimgPlot.plot([LRAzim[0],LRAzim[1]],[IOtth[0],IOtth[0]],picker=True) 805 trimgPlot.plot([LRAzim[0],LRAzim[1]],[IOtth[1],IOtth[1]],picker=True) 806 trimgPlot.plot([LRAzim[0],LRAzim[0]],[IOtth[0],IOtth[1]],picker=True) 807 trimgPlot.plot([LRAzim[1],LRAzim[1]],[IOtth[0],IOtth[1]],picker=True) 808 trimgPage.canvas.draw() 809 810
Note: See TracChangeset
for help on using the changeset viewer.