Changeset 426 for trunk/GSASIIplot.py
- Timestamp:
- Nov 21, 2011 2:11:03 PM (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
TabularUnified trunk/GSASIIplot.py ¶
r423 r426 292 292 global HKL 293 293 294 def OnPick(event): 295 if self.itemPicked is not None: return 296 PatternId = self.PatternId 297 try: 298 Values,Names = self.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(self,self.PatternId, 'Instrument Parameters'))[1::2] 299 except TypeError: 300 return 301 Parms = dict(zip(Names,Values)) 302 try: 303 wave = Parms['Lam'] 304 except KeyError: 305 wave = Parms['Lam1'] 306 PickId = self.PickId 307 pick = event.artist 308 mouse = event.mouseevent 309 xpos = pick.get_xdata() 310 ypos = pick.get_ydata() 311 ind = event.ind 312 xy = list(zip(np.take(xpos,ind),np.take(ypos,ind))[0]) 313 if self.PatternTree.GetItemText(PickId) == 'Peak List': 314 if ind.all() != [0]: #picked a data point 315 if 'C' in Parms['Type']: #CW data - TOF later in an elif 316 ins = [Parms[x] for x in ['U','V','W','X','Y']] 317 if self.qPlot: #qplot - convert back to 2-theta 318 xy[0] = 2.0*asind(xy[0]*wave/(4*math.pi)) 319 sig = ins[0]*tand(xy[0]/2.0)**2+ins[1]*tand(xy[0]/2.0)+ins[2] 320 gam = ins[3]/cosd(xy[0]/2.0)+ins[4]*tand(xy[0]/2.0) 321 data = self.PatternTree.GetItemPyData(self.PickId) 322 XY = [xy[0],0, xy[1],1, sig,0, gam,0] #default refine intensity 1st 323 data.append(XY) 324 G2pdG.UpdatePeakGrid(self,data) 325 PlotPatterns(self) 326 else: #picked a peak list line 327 self.itemPicked = pick 328 elif self.PatternTree.GetItemText(PickId) == 'Limits': 329 if ind.all() != [0]: #picked a data point 330 LimitId = G2gd.GetPatternTreeItemId(self,PatternId, 'Limits') 331 data = self.PatternTree.GetItemPyData(LimitId) 332 if 'C' in Parms['Type']: #CW data - TOF later in an elif 333 if self.qPlot: #qplot - convert back to 2-theta 334 xy[0] = 2.0*asind(xy[0]*wave/(4*math.pi)) 335 if mouse.button==1: 336 data[1][0] = min(xy[0],data[1][1]) 337 if mouse.button==3: 338 data[1][1] = max(xy[0],data[1][0]) 339 self.PatternTree.SetItemPyData(LimitId,data) 340 G2pdG.UpdateLimitsGrid(self,data) 341 PlotPatterns(self) 342 else: #picked a limit line 343 self.itemPicked = pick 344 elif self.PatternTree.GetItemText(PickId) == 'Reflection Lists': 345 if ind.all() == [0]: #picked a limit line 346 self.itemPicked = pick 347 294 def OnKeyBox(event): 295 if self.G2plotNB.nb.GetSelection() == self.G2plotNB.plotList.index('Powder Patterns'): 296 event.key = cb.GetValue()[0] 297 cb.SetValue(' key press') 298 OnPlotKeyPress(event) 299 348 300 def OnPlotKeyPress(event): 349 301 newPlot = False … … 430 382 PlotPatterns(self,newPlot=newPlot) 431 383 432 def OnKeyBox(event):433 if self.G2plotNB.nb.GetSelection() == self.G2plotNB.plotList.index('Powder Patterns'):434 event.key = cb.GetValue()[0]435 cb.SetValue(' key press')436 OnPlotKeyPress(event)437 438 384 def OnMotion(event): 439 385 xpos = event.xdata … … 475 421 self.G2plotNB.status.SetStatusText('Select PWDR powder pattern first',1) 476 422 423 def OnPick(event): 424 if self.itemPicked is not None: return 425 PatternId = self.PatternId 426 try: 427 Values,Names = self.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(self,self.PatternId, 'Instrument Parameters'))[1::2] 428 except TypeError: 429 return 430 Parms = dict(zip(Names,Values)) 431 try: 432 wave = Parms['Lam'] 433 except KeyError: 434 wave = Parms['Lam1'] 435 PickId = self.PickId 436 pick = event.artist 437 mouse = event.mouseevent 438 xpos = pick.get_xdata() 439 ypos = pick.get_ydata() 440 ind = event.ind 441 xy = list(zip(np.take(xpos,ind),np.take(ypos,ind))[0]) 442 if self.PatternTree.GetItemText(PickId) == 'Peak List': 443 if ind.all() != [0]: #picked a data point 444 if 'C' in Parms['Type']: #CW data - TOF later in an elif 445 ins = [Parms[x] for x in ['U','V','W','X','Y']] 446 if self.qPlot: #qplot - convert back to 2-theta 447 xy[0] = 2.0*asind(xy[0]*wave/(4*math.pi)) 448 sig = ins[0]*tand(xy[0]/2.0)**2+ins[1]*tand(xy[0]/2.0)+ins[2] 449 gam = ins[3]/cosd(xy[0]/2.0)+ins[4]*tand(xy[0]/2.0) 450 data = self.PatternTree.GetItemPyData(self.PickId) 451 XY = [xy[0],0, xy[1],1, sig,0, gam,0] #default refine intensity 1st 452 data.append(XY) 453 G2pdG.UpdatePeakGrid(self,data) 454 PlotPatterns(self) 455 else: #picked a peak list line 456 self.itemPicked = pick 457 elif self.PatternTree.GetItemText(PickId) == 'Limits': 458 if ind.all() != [0]: #picked a data point 459 LimitId = G2gd.GetPatternTreeItemId(self,PatternId, 'Limits') 460 data = self.PatternTree.GetItemPyData(LimitId) 461 if 'C' in Parms['Type']: #CW data - TOF later in an elif 462 if self.qPlot: #qplot - convert back to 2-theta 463 xy[0] = 2.0*asind(xy[0]*wave/(4*math.pi)) 464 if mouse.button==1: 465 data[1][0] = min(xy[0],data[1][1]) 466 if mouse.button==3: 467 data[1][1] = max(xy[0],data[1][0]) 468 self.PatternTree.SetItemPyData(LimitId,data) 469 G2pdG.UpdateLimitsGrid(self,data) 470 PlotPatterns(self) 471 else: #picked a limit line 472 self.itemPicked = pick 473 elif self.PatternTree.GetItemText(PickId) == 'Reflection Lists': 474 self.itemPicked = pick 475 pick = str(pick) 476 477 477 def OnRelease(event): 478 478 if self.itemPicked is None: return … … 484 484 wave = Parms['Lam1'] 485 485 xpos = event.xdata 486 if xpos: #avoid out of frame mouse position 486 PickId = self.PickId 487 if self.PatternTree.GetItemText(PickId) in ['Peak List','Limits'] and xpos: 487 488 lines = [] 488 489 for line in self.Lines: lines.append(line.get_xdata()[0]) … … 491 492 LimitId = G2gd.GetPatternTreeItemId(self,self.PatternId, 'Limits') 492 493 data = self.PatternTree.GetItemPyData(LimitId) 493 # print 'limits',xpos494 494 if self.qPlot: 495 495 data[1][lineNo] = 2.0*asind(wave*xpos/(4*math.pi)) … … 512 512 self.PatternTree.SetItemPyData(PeakId,data) 513 513 G2pdG.UpdatePeakGrid(self,data) 514 elif self.PatternTree.GetItemText(PickId) == 'Reflection Lists' and xpos: 515 Phases = self.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(self,PatternId,'Reflection Lists')) 516 pick = str(self.itemPicked).split('(')[1].strip(')') 517 if 'Line' not in pick: #avoid data points, etc. 518 num = Phases.keys().index(pick) 519 if num: 520 self.refDelt = -(event.ydata-self.refOffset)/(num*Ymax) 521 else: #1st row of refl ticks 522 self.refOffset = event.ydata 514 523 PlotPatterns(self) 515 524 self.itemPicked = None … … 639 648 Z = xye[3]+offset*N 640 649 W = xye[4]+offset*N 641 D = xye[5]-Ymax* .02650 D = xye[5]-Ymax*self.delOffset 642 651 if self.Weight: 643 652 W2 = np.sqrt(xye[2]) 644 D *= W2-Ymax* .02653 D *= W2-Ymax*self.delOffset 645 654 if self.logPlot: 646 655 Plot.semilogy(X,Y,colors[N%6]+'+',picker=3.,clip_on=False,nonposy='mask') … … 694 703 Phases = self.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(self,PatternId,'Reflection Lists')) 695 704 for pId,phase in enumerate(Phases): 696 pId += 1697 705 peaks = Phases[phase] 698 for peak in peaks: 699 if self.qPlot: 700 Plot.plot(2*np.pi/peak[4],offset*N-pId*Ymax*.005,colors[pId%6]+'|',mew=1,ms=8,picker=2.) 701 else: 702 Plot.plot(peak[5],offset*N-pId*Ymax*.005,colors[pId%6]+'|',mew=1,ms=8,picker=2.) 706 peak = np.array([[peak[4],peak[5]] for peak in peaks]) 707 pos = self.refOffset-pId*Ymax*self.refDelt*np.ones_like(peak) 708 if self.qPlot: 709 Plot.plot(2*np.pi/peak.T[0],pos,colors[pId%6]+'|',mew=1,ms=8,picker=3.,label=phase) 710 else: 711 Plot.plot(peak.T[1],pos,colors[pId%6]+'|',mew=1,ms=8,picker=3.,label=phase) 712 handles,legends = Plot.get_legend_handles_labels() #got double entries in the legends for some reason 713 Plot.legend(handles[::2],legends[::2],title='Phases',loc='best') #skip every other one 703 714 704 715 if self.Contour: … … 1085 1096 Z = [] 1086 1097 W = [] 1087 # V = []1088 1098 sig = lambda Th,U,V,W: 1.17741*math.sqrt(U*tand(Th)**2+V*tand(Th)+W)*math.pi/18000. 1089 1099 gam = lambda Th,X,Y: (X/cosd(Th)+Y*tand(Th))*math.pi/18000. … … 1095 1105 g = gam(theta,LX,LY) 1096 1106 G = gamFW(g,s) 1097 # H = gamFW2(g,s)1098 1107 Y.append(s/tand(theta)) 1099 1108 Z.append(g/tand(theta)) 1100 1109 W.append(G/tand(theta)) 1101 # V.append(H/tand(theta))1102 1110 Plot.set_title('Instrument and sample peak widths') 1103 1111 Plot.set_ylabel(r'$\Delta q/q, \Delta d/d$',fontsize=14) … … 1106 1114 Plot.plot(X,Z,color='g',label='Lorentzian') 1107 1115 Plot.plot(X,W,color='b',label='G+L') 1108 # Plot.plot(X,V,color='k',label='G+L2')1109 1116 X = [] 1110 1117 Y = [] … … 1120 1127 g = peak[6]*math.pi/18000. 1121 1128 G = gamFW(g,s) 1122 # H = gamFW2(g,s)1123 1129 Y.append(s/tand(peak[0]/2.)) 1124 1130 Z.append(g/tand(peak[0]/2.)) 1125 1131 W.append(G/tand(peak[0]/2.)) 1126 # V.append(H/tand(peak[0]/2.))1127 1132 Plot.plot(X,Y,'+',color='r',label='G peak') 1128 1133 Plot.plot(X,Z,'+',color='g',label='L peak') 1129 1134 Plot.plot(X,W,'+',color='b',label='G+L peak') 1130 # Plot.plot(X,V,'+',color='k',label='G+L2 peak')1131 1135 Plot.legend(loc='best') 1132 1136 Page.canvas.draw()
Note: See TracChangeset
for help on using the changeset viewer.