Changeset 1121


Ignore:
Timestamp:
Oct 23, 2013 3:14:27 PM (10 years ago)
Author:
vondreele
Message:

reload binwin2.7 & binwin64-2.7 after fix to polymask.for
fix integration problem for polygon masks
now have 'frame' mask - outside of frame is excluded from integration

Location:
trunk
Files:
14 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASII.py

    r1117 r1121  
    14091409        self.ifGetRing = False
    14101410        self.setPoly = False
     1411        self.setFrame = False
    14111412        arg = sys.argv
    14121413        if len(arg) > 1:
     
    15731574                        Data['range'] = [(Imin,Imax),[Imin,Imax]]
    15741575                        self.PatternTree.SetItemPyData(self.PatternTree.AppendItem(Id,text='Image Controls'),Data)
    1575                         Masks = {'Points':[],'Rings':[],'Arcs':[],'Polygons':[],'Thresholds':[(Imin,Imax),[Imin,Imax]]}
     1576                        Masks = {'Points':[],'Rings':[],'Arcs':[],'Polygons':[],'Frames':[],'Thresholds':[(Imin,Imax),[Imin,Imax]]}
    15761577                        self.PatternTree.SetItemPyData(self.PatternTree.AppendItem(Id,text='Masks'),Masks)
    15771578                        self.PatternTree.SetItemPyData(self.PatternTree.AppendItem(Id,text='Stress/Strain'),
     
    19961997                        Data['range'] = [(Imin,Imax),[Imin,Imax]]
    19971998                        self.PatternTree.SetItemPyData(self.PatternTree.AppendItem(Id,text='Image Controls'),Data)                                           
    1998                         Masks = {'Points':[],'Rings':[],'Arcs':[],'Polygons':[],'Thresholds':[(Imin,Imax),[Imin,Imax]]}
     1999                        Masks = {'Points':[],'Rings':[],'Arcs':[],'Polygons':[],'Frames':[],'Thresholds':[(Imin,Imax),[Imin,Imax]]}
    19992000                        self.PatternTree.SetItemPyData(self.PatternTree.AppendItem(Id,text='Masks'),Masks)
    20002001                        self.PatternTree.SetItemPyData(self.PatternTree.AppendItem(Id,text='Stress/Strain'),{})
  • trunk/GSASIIimage.py

    r1120 r1121  
    701701    nJ = jLim[1]-jLim[0]
    702702    #make position masks here
    703     spots = masks['Points']
     703    frame = masks['Frames']
     704    tam = ma.make_mask_none((nI,nJ))
     705    if frame:
     706        tamp = ma.make_mask_none((1024*1024))
     707        tamp = ma.make_mask(pm.polymask(nI*nJ,tax.flatten(),
     708            tay.flatten(),len(frame),frame,tamp)[:nI*nJ])-True  #switch to exclude around frame
     709        tam = ma.mask_or(tam.flatten(),tamp)
    704710    polygons = masks['Polygons']
    705     tam = ma.make_mask_none((nI,nJ))
    706711    for polygon in polygons:
    707712        if polygon:
    708             tamp = ma.make_mask_none((nI*nJ))
     713            tamp = ma.make_mask_none((1024*1024))
    709714            tamp = ma.make_mask(pm.polymask(nI*nJ,tax.flatten(),
    710                 tay.flatten(),len(polygon),polygon,tamp))
     715                tay.flatten(),len(polygon),polygon,tamp)[:nI*nJ])
    711716            tam = ma.mask_or(tam.flatten(),tamp)
    712717    if tam.shape: tam = np.reshape(tam,(nI,nJ))
     718    spots = masks['Points']
    713719    for X,Y,diam in spots:
    714720        tamp = ma.getmask(ma.masked_less((tax-X)**2+(tay-Y)**2,(diam/2.)**2))
     
    744750    import histogram2d as h2d
    745751    print 'Begin image integration'
    746     blkSize = 128               #this seems to be optimal
     752    blkSize = 128   #this seems to be optimal; will break in polymask if >1024
    747753    LUtth = data['IOtth']
    748754    LRazm = np.array(data['LRazimuth'],dtype=np.float64)
  • trunk/GSASIIimgGUI.py

    r1057 r1121  
    133133                            except TypeError:       #missing Masks
    134134                                Imin,Imax = Data['Range']
    135                                 Masks = {'Points':[],'Rings':[],'Arcs':[],'Polygons':[],'Thresholds':[(Imin,Imax),[Imin,Imax]]}
     135                                Masks = {'Points':[],'Rings':[],'Arcs':[],'Polygons':[],'Frames':[],'Thresholds':[(Imin,Imax),[Imin,Imax]]}
    136136                                G2frame.PatternTree.SetItemPyData(
    137137                                    G2gd.GetPatternTreeItemId(G2frame,G2frame.Image, 'Masks'),Masks)
     
    905905        G2plt.PlotExposedImage(G2frame,event=event)
    906906
     907    def OnDeleteFrame(event):
     908        data['Frames'] = []
     909        UpdateMasks(G2frame,data)
     910        G2plt.PlotExposedImage(G2frame,event=event)
     911
    907912    def OnCopyMask(event):
    908913        import copy
     
    950955                File = open(filename,'w')
    951956                save = {}
    952                 keys = ['Points','Rings','Arcs','Polygons','Thresholds']
     957                keys = ['Points','Rings','Arcs','Polygons','Frames','Thresholds']
    953958                for key in keys:
    954959                    File.write(key+':'+str(data[key])+'\n')
     
    972977                        continue
    973978                    [key,val] = S[:-1].split(':')
    974                     if key in ['Points','Rings','Arcs','Polygons','Thresholds']:
     979                    if key in ['Points','Rings','Arcs','Polygons','Frames','Thresholds']:
    975980                        save[key] = eval(val)
    976981                        if key == 'Thresholds':
     
    994999    if not G2frame.dataFrame.GetStatusBar():
    9951000        Status = G2frame.dataFrame.CreateStatusBar()
    996         Status.SetStatusText("To add mask: On 2D Powder Image, key a:arc, r:ring, s:spot, p:polygon")
     1001        Status.SetStatusText("To add mask: On 2D Powder Image, key a:arc, r:ring, s:spot, p:polygon, f:frame")
    9971002    G2frame.dataDisplay = wx.Panel(G2frame.dataFrame)
    9981003    mainSizer = wx.BoxSizer(wx.VERTICAL)
     
    10031008    rings = data['Rings']               #radius, thickness
    10041009    polygons = data['Polygons']         #3+ x,y pairs
     1010    if 'Frames' not in data:
     1011        data['Frames'] = []
     1012    frame = data['Frames']             #3+ x,y pairs
    10051013    arcs = data['Arcs']                 #radius, start/end azimuth, thickness
    10061014   
     
    11271135    polyIds = []
    11281136    delPolyId = []
     1137    delFrameId = []
    11291138    if polygons:
    11301139        littleSizer = wx.FlexGridSizer(len(polygons)+2,2,0,5)
     
    11441153                littleSizer.Add(polyDelete,0,wx.ALIGN_CENTER_VERTICAL)
    11451154        mainSizer.Add(littleSizer,0,)
     1155    if frame:
     1156        littleSizer = wx.FlexGridSizer(3,2,0,5)
     1157        littleSizer.Add(wx.StaticText(parent=G2frame.dataDisplay,label=' Frame mask:'),0,
     1158            wx.ALIGN_CENTER_VERTICAL)
     1159        littleSizer.Add((5,0),0)
     1160        frameList = []
     1161        for x,y in frame:
     1162            frameList.append("%.2f, %.2f"%(x,y))
     1163        frameText = wx.ComboBox(G2frame.dataDisplay,value=frameList[0],choices=frameList,style=wx.CB_READONLY)
     1164        littleSizer.Add(frameText,0,wx.ALIGN_CENTER_VERTICAL)
     1165        frameDelete = wx.CheckBox(parent=G2frame.dataDisplay,label='delete?')
     1166        frameDelete.Bind(wx.EVT_CHECKBOX,OnDeleteFrame)
     1167        delFrameId.append(frameDelete)
     1168        littleSizer.Add(frameDelete,0,wx.ALIGN_CENTER_VERTICAL)
     1169        mainSizer.Add(littleSizer,0,)
    11461170    mainSizer.Layout()   
    11471171    G2frame.dataDisplay.SetSizer(mainSizer)
    11481172    G2frame.dataDisplay.SetSize(mainSizer.Fit(G2frame.dataFrame))
    1149     G2frame.dataFrame.setSizePosLeft(mainSizer.Fit(G2frame.dataFrame))   
     1173    Size = mainSizer.Fit(G2frame.dataFrame)
     1174    Size[0] = 450
     1175    G2frame.dataFrame.setSizePosLeft(Size)   
    11501176
    11511177################################################################################
  • trunk/GSASIIplot.py

    r1107 r1121  
    21332133                tth,azm,dsp = G2img.GetTthAzmDsp(xpos,ypos,Data)
    21342134                Q = 2.*math.pi/dsp
    2135                 if G2frame.setPoly:
    2136                     G2frame.G2plotNB.status.SetFields(['','Polygon mask pick - LB next point, RB close polygon'])
     2135                if G2frame.setPoly or G2frame.setFrame:
     2136                    G2frame.G2plotNB.status.SetFields(['','Polygon/frame mask pick - LB next point, RB close polygon'])
    21372137                else:
    21382138                    G2frame.G2plotNB.status.SetFields(\
     
    21622162                Masks['Polygons'].append([])
    21632163                G2frame.G2plotNB.status.SetFields(['','Polygon mask active - LB pick next point, RB close polygon'])
     2164            elif event.key == 'f':
     2165                G2frame.setFrame = True
     2166                Masks['Frames'] = []
     2167                G2frame.G2plotNB.status.SetFields(['','Frame mask active - LB pick next point, RB close polygon'])
    21642168            G2imG.UpdateMasks(G2frame,Masks)
    21652169        elif PickName == 'Image Controls':
     
    22082212                    G2frame.G2plotNB.status.SetFields(['','New polygon point: %.1f,%.1f'%(xpos,ypos)])
    22092213                    polygon.append([xpos,ypos])
     2214                G2imG.UpdateMasks(G2frame,Masks)
     2215        elif G2frame.setFrame:
     2216            frame = Masks['Frames']
     2217            xpos,ypos = event.mouseevent.xdata,event.mouseevent.ydata
     2218            if xpos and ypos:                       #point inside image
     2219                if len(frame) > 2 and event.mouseevent.button == 3:
     2220                    x0,y0 = frame[0]
     2221                    frame.append([x0,y0])
     2222                    G2frame.setFrame = False
     2223                    G2frame.G2plotNB.status.SetFields(['','Frame closed - RB drag a vertex to change shape'])
     2224                else:
     2225                    G2frame.G2plotNB.status.SetFields(['','New frame point: %.1f,%.1f'%(xpos,ypos)])
     2226                    frame.append([xpos,ypos])
    22102227                G2imG.UpdateMasks(G2frame,Masks)
    22112228        else:
     
    23082325                        arcs = Masks['Arcs']
    23092326                        polygons = Masks['Polygons']
     2327                        frame = Masks['Frames']
    23102328                        for ring in G2frame.ringList:
    23112329                            if Obj == ring[0]:
     
    23342352                                    if np.allclose(np.array([xy]),oldPos,atol=1.0):
    23352353                                        polygons[pN][i] = xpos,ypos
     2354                        if frame:
     2355                            oldPos = np.array([G2frame.mousePicked.xdata,G2frame.mousePicked.ydata])
     2356                            for i,xy in enumerate(frame):
     2357                                if np.allclose(np.array([xy]),oldPos,atol=1.0):
     2358                                    frame[i] = xpos,ypos
    23362359                        G2imG.UpdateMasks(G2frame,Masks)
    23372360#                    else:                  #keep for future debugging
     
    23492372            Page.figure.clf()
    23502373            Plot = Page.figure.gca()          #get a fresh plot after clf()
    2351        
    23522374    except ValueError:
    23532375        Plot = G2frame.G2plotNB.addMpl('2D Powder Image').gca()
     
    24192441            Img = Plot.imshow(A,aspect='equal',cmap=acolor,
    24202442                interpolation='nearest',vmin=Imin,vmax=Imax,extent=[0,Xmax,Ymax,0])
    2421             if G2frame.setPoly:
     2443            if G2frame.setPoly or G2frame.setFrame:
    24222444                Img.set_picker(True)
    24232445   
     
    24872509        arcs = Masks['Arcs']
    24882510        polygons = Masks['Polygons']
     2511        if 'Frames' not in Masks:
     2512            Masks['Frames'] = []
     2513        frame = Masks['Frames']
    24892514        for x,y,d in spots:
    24902515            Plot.add_artist(Circle((x,y),radius=d/2,fc='none',ec='r',picker=3))
     
    25102535            G2frame.polyList.append([Plot.plot(x,y,'r+',picker=10),ipoly])
    25112536            Plot.plot(x,y,'r')           
     2537        G2frame.frameList = []
     2538        if frame:
     2539            x,y = np.hsplit(np.array(frame),2)
     2540            G2frame.frameList.append([Plot.plot(x,y,'g+',picker=10),0])
     2541            Plot.plot(x,y,'g')           
    25122542        if newImage:
    25132543            colorBar = Page.figure.colorbar(Img)
  • trunk/fsource/polymask.for

    r282 r1121  
    1010Cf2py depend(M) POLY
    1111Cf2py intent(in,out) MASK
    12 Cf2py depend(N) MASK
    1312
    1413      IMPLICIT NONE
     
    1615      REAL*4       X(0:N-1),Y(0:N-1)
    1716      REAL*8       POLY(0:M-1,0:1)
    18       LOGICAL*1    MASK(0:N-1)
     17      LOGICAL*1    MASK(0:1024*1024-1)
    1918
    2019      INTEGER*4    I,K
Note: See TracChangeset for help on using the changeset viewer.