Changeset 1017
- Timestamp:
- Aug 6, 2013 9:10:46 PM (9 years ago)
- Location:
- trunk
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/GSASIIgrid.py
r1016 r1017 101 101 102 102 [ wxID_BACKCOPY,wxID_LIMITCOPY,wxID_SAMPLECOPY, wxID_BACKFLAGCOPY, wxID_SAMPLEFLAGCOPY, 103 wxID_SAMPLESAVE, wxID_SAMPLELOAD, 104 ] = [wx.NewId() for item in range( 7)]103 wxID_SAMPLESAVE, wxID_SAMPLELOAD,wxID_ADDEXCLREGION, 104 ] = [wx.NewId() for item in range(8)] 105 105 106 106 [ wxID_INSTPRMRESET,wxID_CHANGEWAVETYPE,wxID_INSTCOPY, wxID_INSTFLAGCOPY, wxID_INSTLOAD, … … 1666 1666 self.PrefillDataMenu(self.LimitMenu,helpType='Limits') 1667 1667 self.LimitEdit = wx.Menu(title='') 1668 self.LimitMenu.Append(menu=self.LimitEdit, title=' File')1668 self.LimitMenu.Append(menu=self.LimitEdit, title='Edit') 1669 1669 self.LimitEdit.Append(id=wxID_LIMITCOPY, kind=wx.ITEM_NORMAL,text='Copy', 1670 1670 help='Copy limits to other histograms') 1671 self.LimitEdit.Append(id=wxID_ADDEXCLREGION, kind=wx.ITEM_NORMAL,text='Add exclude', 1672 help='Add excluded region - select a point on plot; drag to adjust') 1671 1673 self.PostfillDataMenu() 1672 1674 -
trunk/GSASIIplot.py
r1005 r1017 398 398 # wx.CallAfter(OnPlotKeyPress,event) 399 399 # 400 global exclLines 400 401 def OnPlotKeyPress(event): 401 402 newPlot = False … … 573 574 if G2frame.qPlot: #qplot - convert back to 2-theta 574 575 xy[0] = 2.0*asind(xy[0]*wave/(4*math.pi)) 575 if mouse.button==1: 576 data[1][0] = min(xy[0],data[1][1]) 577 if mouse.button==3: 578 data[1][1] = max(xy[0],data[1][0]) 576 if G2frame.ifGetExclude: 577 excl = [0,0] 578 excl[0] = max(data[1][0],min(xy[0],data[1][1])) 579 excl[1] = excl[0]+0.1 580 data.append(excl) 581 G2frame.ifGetExclude = False 582 else: 583 if mouse.button==1: 584 data[1][0] = min(xy[0],data[1][1]) 585 if mouse.button==3: 586 data[1][1] = max(xy[0],data[1][0]) 579 587 G2frame.PatternTree.SetItemPyData(LimitId,data) 580 588 G2pdG.UpdateLimitsGrid(G2frame,data) 581 PlotPatterns(G2frame)589 wx.CallAfter(PlotPatterns,G2frame) 582 590 else: #picked a limit line 583 591 G2frame.itemPicked = pick … … 602 610 # print G2frame.itemPicked.get_xdata() 603 611 lineNo = lines.index(G2frame.itemPicked.get_xdata()[0]) 604 if lineNo in [0,1] :612 if lineNo in [0,1] or lineNo in exclLines: 605 613 LimitId = G2gd.GetPatternTreeItemId(G2frame,G2frame.PatternId, 'Limits') 606 614 data = G2frame.PatternTree.GetItemPyData(LimitId) 615 id = lineNo/2+1 616 id2 = lineNo%2 607 617 if G2frame.qPlot: 608 618 if 'C' in Parms['Type'][0]: 609 data[ 1][lineNo] = 2.0*asind(wave*xpos/(4*math.pi))619 data[id][id2] = 2.0*asind(wave*xpos/(4*math.pi)) 610 620 else: 611 data[ 1][lineNo] = 2*math.pi*Parms['difC'][1]/xpos621 data[id][id2] = 2*math.pi*Parms['difC'][1]/xpos 612 622 else: 613 data[ 1][lineNo] = xpos623 data[id][id2] = xpos 614 624 G2frame.PatternTree.SetItemPyData(LimitId,data) 615 625 if G2frame.PatternTree.GetItemText(G2frame.PickId) == 'Limits': … … 618 628 PeakId = G2gd.GetPatternTreeItemId(G2frame,G2frame.PatternId, 'Peak List') 619 629 data = G2frame.PatternTree.GetItemPyData(PeakId) 620 # print 'peaks',xpos621 630 if event.button == 3: 622 631 del data[lineNo-2] … … 679 688 colors=['b','g','r','c','m','k'] 680 689 Lines = [] 690 exclLines = [] 681 691 if G2frame.SinglePlot: 682 692 Pattern = G2frame.PatternTree.GetItemPyData(PatternId) … … 748 758 ifpicked = False 749 759 LimitId = 0 750 xye = np.array(Pattern[1])760 xye = ma.array(Pattern[1]) 751 761 if PickId: 752 762 ifpicked = Pattern[2] == G2frame.PatternTree.GetItemText(PatternId) 753 763 LimitId = G2gd.GetPatternTreeItemId(G2frame,PatternId, 'Limits') 764 limits = np.array(G2frame.PatternTree.GetItemPyData(LimitId)) 765 excls = limits[2:] 766 for excl in excls: 767 xye[0] = ma.masked_inside(xye[0],excl[0],excl[1]) 754 768 if G2frame.qPlot: 755 769 Id = G2gd.GetPatternTreeItemId(G2frame,G2frame.root, Pattern[2]) … … 771 785 limits = 2*np.pi*difC/limits 772 786 Lines.append(Plot.axvline(limits[1][0],color='g',dashes=(5,5),picker=3.)) 773 Lines.append(Plot.axvline(limits[1][1],color='r',dashes=(5,5),picker=3.)) 787 Lines.append(Plot.axvline(limits[1][1],color='r',dashes=(5,5),picker=3.)) 788 for i,item in enumerate(limits[2:]): 789 Lines.append(Plot.axvline(item[0],color='m',dashes=(5,5),picker=3.)) 790 Lines.append(Plot.axvline(item[1],color='m',dashes=(5,5),picker=3.)) 791 exclLines += [2*i+2,2*i+3] 774 792 if G2frame.Contour: 775 793 … … 782 800 else: 783 801 X += G2frame.Offset[1]*.005*N 802 Xum = ma.getdata(X) 784 803 if ifpicked: 785 804 Z = xye[3]+offset*N … … 801 820 else: 802 821 if G2frame.SubBack: 803 Plot.plot(X ,Y-W,colors[N%6]+'+',picker=3.,clip_on=False)822 Plot.plot(Xum,Y-W,colors[N%6]+'+',picker=3.,clip_on=False) 804 823 Plot.plot(X,Z-W,colors[(N+1)%6],picker=False) 805 824 else: 806 Plot.plot(X ,Y,colors[N%6]+'+',picker=3.,clip_on=False)825 Plot.plot(Xum,Y,colors[N%6]+'+',picker=3.,clip_on=False) 807 826 Plot.plot(X,Z,colors[(N+1)%6],picker=False) 808 827 Plot.plot(X,W,colors[(N+2)%6],picker=False) … … 1017 1036 else: 1018 1037 G2frame.Legend = True 1019 1020 1021 1038 PlotISFG(G2frame,newPlot=newPlot,type=type) 1022 1039 … … 1287 1304 limitID = G2gd.GetPatternTreeItemId(G2frame,PatternId, 'Limits') 1288 1305 if limitID: 1289 limits = G2frame.PatternTree.GetItemPyData(limitID) 1306 limits = G2frame.PatternTree.GetItemPyData(limitID)[:2] 1290 1307 else: 1291 1308 return -
trunk/GSASIIpwdGUI.py
r1008 r1017 611 611 '''respond to selection of PWDR Limits data tree item. 612 612 ''' 613 #Add excluded regions here614 613 if G2frame.dataDisplay: 615 614 G2frame.dataFrame.Clear() 616 615 616 def KeyEditPeakGrid(event): 617 row = G2frame.dataDisplay.GetSelectedRows()[0] 618 if row > 1: #can't delete limits! 619 G2frame.dataDisplay.ClearSelection() 620 if event.GetKeyCode() == wx.WXK_DELETE: 621 G2frame.dataDisplay.ClearGrid() 622 del(data[row]) 623 wx.CallAfter(UpdateLimitsGrid,G2frame,data) 624 G2plt.PlotPatterns(G2frame) 625 617 626 def RefreshLimitsGrid(event): 618 627 event.StopPropagation() … … 622 631 new[0] = max(old[0],new[0]) 623 632 new[1] = max(new[0],min(old[1],new[1])) 624 data = [old,new] 633 if len(data) > 2: 634 excl = data[2:] 635 for item in excl: 636 item[0] = max(old[0],item[0]) 637 item[1] = max(item[0],min(old[1],item[1])) 638 data = [old,new]+excl 639 G2frame.LimitsTable.SetData(data) 625 640 G2plt.PlotPatterns(G2frame) 626 641 … … 644 659 finally: 645 660 dlg.Destroy() 661 662 def OnAddExcl(event): 663 G2frame.ifGetExclude = True 664 print 'Add excluded region' 646 665 647 666 G2frame.LimitsTable = [] 648 667 colLabels = ['Tmin','Tmax'] 649 668 rowLabels = ['original','changed'] 669 for i in range(len(data)-2): 670 rowLabels.append('exclude') 650 671 Types = 2*[wg.GRID_VALUE_FLOAT+':10,3',] 651 672 G2frame.LimitsTable = G2gd.Table(data,rowLabels=rowLabels,colLabels=colLabels,types=Types) … … 655 676 Status = G2frame.dataFrame.CreateStatusBar() 656 677 G2frame.Bind(wx.EVT_MENU,OnLimitCopy,id=G2gd.wxID_LIMITCOPY) 678 G2frame.Bind(wx.EVT_MENU,OnAddExcl,id=G2gd.wxID_ADDEXCLREGION) 657 679 G2frame.dataDisplay = G2gd.GSGrid(parent=G2frame.dataFrame) 658 680 G2frame.dataDisplay.SetTable(G2frame.LimitsTable, True) 659 681 G2frame.dataDisplay.Bind(wg.EVT_GRID_CELL_CHANGE, RefreshLimitsGrid) 682 G2frame.dataDisplay.Bind(wx.EVT_KEY_DOWN, KeyEditPeakGrid) 660 683 G2frame.dataDisplay.SetMargins(0,0) 661 684 G2frame.dataDisplay.AutoSizeColumns(False) 662 G2frame.dataFrame.setSizePosLeft([230, 160])685 G2frame.dataFrame.setSizePosLeft([230,260]) 663 686 664 687 ################################################################################ … … 2039 2062 powName = 'PWDR'+dataFile[4:] 2040 2063 powId = G2gd.GetPatternTreeItemId(G2frame,G2frame.root, powName) 2041 fullLimits,limits = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,powId, 'Limits')) 2064 fullLimits,limits = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,powId, 'Limits'))[:2] 2042 2065 inst = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,powId, 'Instrument Parameters'))[0] 2043 2066 if 'Lam' in inst: -
trunk/GSASIIstrIO.py
r989 r1017 283 283 except ValueError: 284 284 PWDRdata['wtFactor'] = 1.0 #patch 285 PWDRdata['Data'] = datum[1][1] #powder data arrays286 PWDRdata[data[2][0]] = data[2][1] #Limits 285 PWDRdata['Data'] = ma.array(datum[1][1]) #masked powder data arrays 286 PWDRdata[data[2][0]] = data[2][1] #Limits & excluded regions (if any) 287 287 PWDRdata[data[3][0]] = data[3][1] #Background 288 288 PWDRdata[data[4][0]] = data[4][1] #Instrument parameters … … 440 440 histogram = Histograms[datum[0]] 441 441 # print 'found ',datum[0] 442 data[0][1][1] = histogram['Data']442 data[0][1][1] = list(histogram['Data']) 443 443 for datus in data[1:]: 444 444 # print ' read: ',datus[0] … … 474 474 try: 475 475 histogram = Histograms[datum[0]] 476 data[0][1][1] = histogram['Data']476 data[0][1][1] = list(histogram['Data']) 477 477 for datus in data[1:]: 478 478 if datus[0] in ['Background','Instrument Parameters','Sample Parameters','Reflection Lists']: … … 2272 2272 controlDict[pfx+'wtFactor'] = Histogram['wtFactor'] 2273 2273 controlDict[pfx+'Limits'] = Histogram['Limits'][1] 2274 controlDict[pfx+'Exclude'] = Histogram['Limits'][2:] 2275 for excl in controlDict[pfx+'Exclude']: 2276 Histogram['Data'][0] = ma.masked_inside(Histogram['Data'][0],excl[0],excl[1]) 2274 2277 2275 2278 Background = Histogram['Background'] … … 2303 2306 Limits = controlDict[pfx+'Limits'] 2304 2307 print >>pFile,' Instrument type: ',Sample['Type'] 2305 print >>pFile,' Histogram limits: %8.2f%s to %8.2f%s'%(Limits[0],units,Limits[1],units) 2308 print >>pFile,' Histogram limits: %8.2f%s to %8.2f%s'%(Limits[0],units,Limits[1],units) 2309 if len(controlDict[pfx+'Exclude']): 2310 excls = controlDict[pfx+'Exclude'] 2311 for excl in excls: 2312 print >>pFile,' Excluded region: %8.2f%s to %8.2f%s'%(excl[0],units,excl[1],units) 2306 2313 PrintSampleParms(Sample) 2307 2314 PrintInstParms(Inst) -
trunk/GSASIIstrMath.py
r990 r1017 1740 1740 dMdvh = getPowderProfileDerv(parmDict,x[xB:xF], 1741 1741 varylist,Histogram,Phases,rigidbodyDict,calcControls,pawleyLookup) 1742 Wt = np.sqrt(W[xB:xF])[np.newaxis,:]1742 Wt = ma.sqrt(W[xB:xF])[np.newaxis,:] 1743 1743 Dy = dy[xB:xF][np.newaxis,:] 1744 1744 dMdvh *= Wt … … 1878 1878 xB = np.searchsorted(x,Limits[0]) 1879 1879 xF = np.searchsorted(x,Limits[1]) 1880 Histogram['Nobs'] = xF-xB1880 Histogram['Nobs'] = ma.count(x[xB:xF]) 1881 1881 Nobs += Histogram['Nobs'] 1882 Histogram['sumwYo'] = np.sum(W[xB:xF]*y[xB:xF]**2)1882 Histogram['sumwYo'] = ma.sum(W[xB:xF]*y[xB:xF]**2) 1883 1883 SumwYo += Histogram['sumwYo'] 1884 1884 yc[xB:xF],yb[xB:xF] = getPowderProfile(parmDict,x[xB:xF], … … 1886 1886 yc[xB:xF] += yb[xB:xF] 1887 1887 yd[xB:xF] = y[xB:xF]-yc[xB:xF] 1888 Histogram['sumwYd'] = np.sum(np.sqrt(W[xB:xF])*(yd[xB:xF]))1889 wdy = - np.sqrt(W[xB:xF])*(yd[xB:xF])1890 Histogram['wR'] = min(100., np.sqrt(np.sum(wdy**2)/Histogram['sumwYo'])*100.)1888 Histogram['sumwYd'] = ma.sum(np.sqrt(W[xB:xF])*(yd[xB:xF])) 1889 wdy = -ma.sqrt(W[xB:xF])*(yd[xB:xF]) 1890 Histogram['wR'] = min(100.,ma.sqrt(ma.sum(wdy**2)/Histogram['sumwYo'])*100.) 1891 1891 if dlg: 1892 1892 dlg.Update(Histogram['wR'],newmsg='For histogram %d Rw=%8.3f%s'%(hId,Histogram['wR'],'%'))[0]
Note: See TracChangeset
for help on using the changeset viewer.