Changeset 2585 for trunk/GSASIIimgGUI.py


Ignore:
Timestamp:
Dec 15, 2016 5:59:12 PM (5 years ago)
Author:
toby
Message:

Remove reset of range from GetImageZ; Add slider to masks; add auto-set buttons

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASIIimgGUI.py

    r2584 r2585  
    4949################################################################################
    5050
    51 def GetImageZ(G2frame,data,newRange=True):
     51def GetImageZ(G2frame,data,newRange=False):
    5252    '''Gets image & applies dark, background & flat background corrections
    5353    :param wx.Frame G2frame: main GSAS-II frame
     
    102102    sumImg -= int(data.get('Flat Bkg',0))
    103103    Imax = np.max(sumImg)
    104     if newRange:
     104    if 'range' not in data or newRange:
    105105        data['range'] = [(0,Imax),[0,Imax]]
    106106    return sumImg
     
    516516            maxSel.SetValue(int(100*sqrtDeltOne/sqrtDeltZero))
    517517            minSel.SetValue(int(100*(data['range'][1][0]/DeltOne)))
    518             wx.CallAfter(G2plt.PlotExposedImage,G2frame,event=tc.event)
     518            #wx.CallAfter(G2plt.PlotExposedImage,G2frame,event=tc.event)
     519            new,plotNum,Page,Plot,lim = G2frame.G2plotNB.FindPlotTab('2D Powder Image','mpl',newImage=False)
     520            Page.ImgObj.set_clim([data['range'][1][0],data['range'][1][1]])
     521            Page.canvas.draw_idle()
    519522           
    520523        def OnMinVal(invalid,value,tc):
    521524            minSel.SetValue(int(100*(data['range'][1][0]-max(0.0,data['range'][0][0]))/DeltOne))
    522             wx.CallAfter(G2plt.PlotExposedImage,G2frame,event=tc.event)
     525            #wx.CallAfter(G2plt.PlotExposedImage,G2frame,event=tc.event)
     526            new,plotNum,Page,Plot,lim = G2frame.G2plotNB.FindPlotTab('2D Powder Image','mpl',newImage=False)
     527            Page.ImgObj.set_clim([data['range'][1][0],data['range'][1][1]])
     528            Page.canvas.draw_idle()
    523529           
    524530        G2frame.prevMaxValue = None   
     
    554560            Page.ImgObj.set_clim([data['range'][1][0],data['range'][1][1]])
    555561            Page.canvas.draw_idle()
     562        def OnAutoSet(event):
     563            '''Responds to a button labeled 95%, etc; Sets the Imax and Imin values
     564            for the image so that 95% (etc.) of pixels are inside the color map limits.
     565            An equal number of pixels are dropped at the minimum and maximum levels.
     566            '''
     567            val = int(event.GetEventObject().GetLabel()[:-1])  # get value from button
     568            margin = (100-val)/2.
     569            new,plotNum,Page,Plot,lim = G2frame.G2plotNB.FindPlotTab('2D Powder Image','mpl',newImage=False)
     570            data['range'][1][0] = int(np.percentile(Page.ImgObj.get_array().compressed(),margin))
     571            data['range'][1][1] = int(np.percentile(Page.ImgObj.get_array().compressed(),100-margin))
     572            DeltOne = data['range'][1][1]-max(0.0,data['range'][0][0])
     573            sqrtDeltOne = math.sqrt(DeltOne)
     574            maxSel.SetValue(int(100*sqrtDeltOne/sqrtDeltZero))
     575            minSel.SetValue(int(100*(data['range'][1][0]/DeltOne)))
     576            maxVal.SetValue(int(data['range'][1][1]))
     577            minVal.SetValue(int(data['range'][1][0]))
     578            Page.ImgObj.set_clim([data['range'][1][0],data['range'][1][1]])
     579            Page.canvas.draw_idle()
    556580           
    557         maxSizer = wx.FlexGridSizer(0,3,0,5)
     581        maxSizer = wx.FlexGridSizer(0,4,0,5)
    558582        maxSizer.AddGrowableCol(1,1)
    559583        maxSizer.SetFlexibleDirection(wx.HORIZONTAL)
     
    566590        maxSizer.Add(maxSel,1,wx.EXPAND)
    567591        maxSel.Bind(wx.EVT_SLIDER, OnMaxSlider)
    568         maxVal = G2G.ValidatedTxtCtrl(G2frame.dataDisplay,data['range'][1],1,min=data['range'][1][0]+1,
    569             max=data['range'][1][1]-1,typeHint=int,OnLeave=OnMaxVal)
     592        maxVal = G2G.ValidatedTxtCtrl(G2frame.dataDisplay,data['range'][1],1,min=data['range'][0][0]+1,
     593            max=data['range'][0][1]-1,typeHint=int,OnLeave=OnMaxVal)
    570594        maxSizer.Add(maxVal,0,WACV)   
     595        b99 = wx.Button(G2frame.dataDisplay,-1,'99%',style=wx.BU_EXACTFIT)
     596        b99.Bind(wx.EVT_BUTTON,OnAutoSet)
     597        maxSizer.Add(b99,0,WACV)   
    571598        maxSizer.Add(wx.StaticText(parent=G2frame.dataDisplay,label=' Min intensity'),0,WACV)
    572599        minSel = wx.Slider(parent=G2frame.dataDisplay,style=wx.SL_HORIZONTAL,
     
    577604            max=data['range'][0][1],typeHint=int,OnLeave=OnMinVal)
    578605        maxSizer.Add(minVal,0,WACV)
     606        b95 = wx.Button(G2frame.dataDisplay,-1,'95%',style=wx.BU_EXACTFIT)
     607        b95.Bind(wx.EVT_BUTTON,OnAutoSet)
     608        maxSizer.Add(b95,0,WACV)
    579609        return maxSizer
    580610       
     
    12601290    frame = data['Frames']             #3+ x,y pairs
    12611291    Arcs = data['Arcs']                 #radius, start/end azimuth, thickness
    1262    
     1292
     1293    ######################################################################
     1294    CId = G2gd.GetPatternTreeItemId(G2frame,G2frame.Image,'Image Controls')
     1295    controlData = G2frame.PatternTree.GetItemPyData(CId)
     1296    def OnMaxVal(invalid,value,tc):
     1297        DeltOne = controlData['range'][1][1]-max(0.0,controlData['range'][0][0])
     1298        sqrtDeltOne = math.sqrt(DeltOne)
     1299        maxSel.SetValue(int(100*sqrtDeltOne/sqrtDeltZero))
     1300        minSel.SetValue(int(100*(controlData['range'][1][0]/DeltOne)))
     1301        #wx.CallAfter(G2plt.PlotExposedImage,G2frame,event=tc.event)
     1302        new,plotNum,Page,Plot,lim = G2frame.G2plotNB.FindPlotTab('2D Powder Image','mpl',newImage=False)
     1303        Page.ImgObj.set_clim([controlData['range'][1][0],controlData['range'][1][1]])
     1304        Page.canvas.draw_idle()
     1305           
     1306    def OnMinVal(invalid,value,tc):
     1307        minSel.SetValue(int(100*(controlData['range'][1][0]-max(0.0,controlData['range'][0][0]))/DeltOne))
     1308        #wx.CallAfter(G2plt.PlotExposedImage,G2frame,event=tc.event)
     1309        new,plotNum,Page,Plot,lim = G2frame.G2plotNB.FindPlotTab('2D Powder Image','mpl',newImage=False)
     1310        Page.ImgObj.set_clim([controlData['range'][1][0],controlData['range'][1][1]])
     1311        Page.canvas.draw_idle()
     1312
     1313    G2frame.prevMaxValue = None   
     1314    def OnMaxSlider(event):
     1315        if G2frame.prevMaxValue == maxSel.GetValue(): # if this val has been processed, no need to repeat
     1316            return
     1317        G2frame.prevMaxValue = maxSel.GetValue()
     1318        sqrtDeltZero = math.sqrt(controlData['range'][0][1])
     1319        imax = int(maxSel.GetValue())*sqrtDeltZero/100.
     1320        controlData['range'][1][1] = imax**2
     1321        controlData['range'][1][0] = max(0.0,min(controlData['range'][1][1]-1,controlData['range'][1][0]))
     1322        DeltOne = max(1.0,controlData['range'][1][1]-controlData['range'][1][0])
     1323        minSel.SetValue(int(100*(controlData['range'][1][0]/DeltOne)))
     1324        maxVal.SetValue(int(controlData['range'][1][1]))
     1325        #wx.CallAfter(G2plt.PlotExposedImage,G2frame,event=event)  # replace with code below for more speed
     1326        new,plotNum,Page,Plot,lim = G2frame.G2plotNB.FindPlotTab('2D Powder Image','mpl',newImage=False)
     1327        Page.ImgObj.set_clim([controlData['range'][1][0],controlData['range'][1][1]])
     1328        Page.canvas.draw_idle()
     1329
     1330    G2frame.prevMinValue = None   
     1331    def OnMinSlider(event):
     1332        if G2frame.prevMinValue == minSel.GetValue(): # if this val has been processed, no need to repeat
     1333            return
     1334        G2frame.prevMinValue = minSel.GetValue()
     1335        DeltOne = controlData['range'][1][1]-controlData['range'][1][0]
     1336        imin = int(minSel.GetValue())*DeltOne/100.
     1337        controlData['range'][1][0] = max(0.0,min(controlData['range'][1][1]-1,imin))
     1338        minVal.SetValue(int(controlData['range'][1][0]))
     1339        #wx.CallAfter(G2plt.PlotExposedImage,G2frame,event=event) # replace with code below for more speed
     1340        new,plotNum,Page,Plot,lim = G2frame.G2plotNB.FindPlotTab('2D Powder Image','mpl',newImage=False)
     1341        Page.ImgObj.set_clim([controlData['range'][1][0],controlData['range'][1][1]])
     1342        Page.canvas.draw_idle()
     1343    def OnAutoSet(event):
     1344        '''Responds to a button labeled 95%, etc; Sets the Imax and Imin values
     1345        for the image so that 95% (etc.) of pixels are inside the color map limits.
     1346        An equal number of pixels are dropped at the minimum and maximum levels.
     1347        '''
     1348        val = int(event.GetEventObject().GetLabel()[:-1])  # get value from button
     1349        margin = (100-val)/2.
     1350        new,plotNum,Page,Plot,lim = G2frame.G2plotNB.FindPlotTab('2D Powder Image','mpl',newImage=False)
     1351        controlData['range'][1][0] = int(np.percentile(Page.ImgObj.get_array().compressed(),margin))
     1352        controlData['range'][1][1] = int(np.percentile(Page.ImgObj.get_array().compressed(),100-margin))
     1353        DeltOne = controlData['range'][1][1]-max(0.0,controlData['range'][0][0])
     1354        sqrtDeltOne = math.sqrt(DeltOne)
     1355        maxSel.SetValue(int(100*sqrtDeltOne/sqrtDeltZero))
     1356        minSel.SetValue(int(100*(controlData['range'][1][0]/DeltOne)))
     1357        maxVal.SetValue(int(controlData['range'][1][1]))
     1358        minVal.SetValue(int(controlData['range'][1][0]))
     1359        Page.ImgObj.set_clim([controlData['range'][1][0],controlData['range'][1][1]])
     1360        Page.canvas.draw_idle()
     1361       
     1362    maxSizer = wx.FlexGridSizer(0,4,0,5)
     1363    maxSizer.AddGrowableCol(1,1)
     1364    maxSizer.SetFlexibleDirection(wx.HORIZONTAL)
     1365    sqrtDeltZero = max(1.0,math.sqrt(controlData['range'][0][1]-max(0.0,controlData['range'][0][0])))
     1366    DeltOne = max(1.0,controlData['range'][1][1]-max(0.0,controlData['range'][0][0]))
     1367    sqrtDeltOne = math.sqrt(DeltOne)
     1368    maxSizer.Add(wx.StaticText(parent=G2frame.dataDisplay,label=' Max intensity'),0,WACV)
     1369    maxSel = wx.Slider(parent=G2frame.dataDisplay,style=wx.SL_HORIZONTAL,
     1370        value=int(100*sqrtDeltOne/sqrtDeltZero),size=[300,-1])
     1371    maxSizer.Add(maxSel,1,wx.EXPAND)
     1372    maxSel.Bind(wx.EVT_SLIDER, OnMaxSlider)
     1373    maxVal = G2G.ValidatedTxtCtrl(G2frame.dataDisplay,controlData['range'][1],1,min=controlData['range'][0][0]+1,
     1374        max=controlData['range'][0][1]-1,typeHint=int,OnLeave=OnMaxVal)
     1375    maxSizer.Add(maxVal,0,WACV)
     1376    b99 = wx.Button(G2frame.dataDisplay,-1,'99%',style=wx.BU_EXACTFIT)
     1377    b99.Bind(wx.EVT_BUTTON,OnAutoSet)
     1378    maxSizer.Add(b99,0,WACV)   
     1379    maxSizer.Add(wx.StaticText(parent=G2frame.dataDisplay,label=' Min intensity'),0,WACV)
     1380    minSel = wx.Slider(parent=G2frame.dataDisplay,style=wx.SL_HORIZONTAL,
     1381        value=int(100*(controlData['range'][1][0]-max(0.0,controlData['range'][0][0]))/DeltOne))
     1382    maxSizer.Add(minSel,1,wx.EXPAND)
     1383    minSel.Bind(wx.EVT_SLIDER, OnMinSlider)
     1384    minVal = G2G.ValidatedTxtCtrl(G2frame.dataDisplay,controlData['range'][1],0,
     1385        max=controlData['range'][0][1],typeHint=int,OnLeave=OnMinVal)
     1386    maxSizer.Add(minVal,0,WACV)
     1387    b95 = wx.Button(G2frame.dataDisplay,-1,'95%',style=wx.BU_EXACTFIT)
     1388    b95.Bind(wx.EVT_BUTTON,OnAutoSet)
     1389    maxSizer.Add(b95,0,WACV)
     1390    mainSizer.Add(maxSizer,0,wx.ALIGN_LEFT|wx.EXPAND)
     1391
    12631392    littleSizer = wx.FlexGridSizer(0,3,0,5)
    12641393    littleSizer.Add(wx.StaticText(parent=G2frame.dataDisplay,label=' Lower/Upper limits '),0,WACV)
Note: See TracChangeset for help on using the changeset viewer.