Changeset 2592 for trunk/GSASIIimgGUI.py
- Timestamp:
- Dec 17, 2016 10:33:44 AM (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
TabularUnified trunk/GSASIIimgGUI.py ¶
r2590 r2592 510 510 511 511 def MaxSizer(): 512 513 def OnMaxVal(invalid,value,tc): 514 DeltOne = data['range'][1][1]-max(0.0,data['range'][0][0]) 515 sqrtDeltOne = math.sqrt(DeltOne) 516 maxSel.SetValue(int(100*sqrtDeltOne/sqrtDeltZero)) 517 minSel.SetValue(int(100*(data['range'][1][0]/DeltOne))) 518 #wx.CallAfter(G2plt.PlotExposedImage,G2frame,event=tc.event) 512 '''Defines a sizer with sliders and TextCtrl widgets for controlling the colormap 513 for the image, as well as callback routines. 514 ''' 515 def OnNewVal(invalid,value,tc): 516 '''Called when a Imax or Imin value is typed into a Validated TextCrtl (which puts 517 the value into the data['range'] nested list). 518 This adjusts the slider positions to match the current values 519 ''' 520 scaleSel.SetSelection(len(scaleChoices)-1) 521 r11 = min(max(Range[1][1],Range[1][0]+1),Range[0][1]) # keep values in range 522 if r11 != Range[1][1]: 523 Range[1][1] = r11 524 maxVal.SetValue(int(Range[1][1])) 525 r10 = max(min(Range[1][0],Range[1][1]-1),Range[0][0]) 526 if r10 != Range[1][0]: 527 Range[1][0] = r10 528 minVal.SetValue(int(Range[1][0])) 529 sqrtDeltZero = math.sqrt(max(1.0,Range[0][1]-max(0.0,Range[1][0])-1)) # sqrt(Imax0-Imin-1) 530 sqrtDeltOne = math.sqrt(max(1.0,Range[1][1]-max(0.0,Range[1][0])-1)) # sqrt(Imax-Imin-1) 531 sv1 = min(100,max(0,int(0.5+100.*sqrtDeltOne/sqrtDeltZero))) 532 maxSel.SetValue(sv1) 533 DeltOne = max(1.0,Range[1][1]-max(0.0,Range[0][0])-1) 534 sv0 = min(100,max(0,int(0.5+100.*(Range[1][0]-Range[0][0])/DeltOne))) 535 minSel.SetValue(sv0) 519 536 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() 522 523 def OnMinVal(invalid,value,tc): 524 minSel.SetValue(int(100*(data['range'][1][0]-max(0.0,data['range'][0][0]))/DeltOne)) 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() 537 Page.ImgObj.set_clim([Range[1][0],Range[1][1]]) 538 if mplOld: 539 Page.canvas.draw() 540 else: 541 Page.canvas.draw_idle() 529 542 530 543 G2frame.prevMaxValue = None 531 544 def OnMaxSlider(event): 532 if G2frame.prevMaxValue == maxSel.GetValue(): # if this val has been processed, no need to repeat 533 #print 'duplication' 534 return 535 G2frame.prevMaxValue = maxSel.GetValue() 536 sqrtDeltZero = math.sqrt(data['range'][0][1]) 537 imax = int(maxSel.GetValue())*sqrtDeltZero/100. 538 data['range'][1][1] = imax**2 539 data['range'][1][0] = max(0.0,min(data['range'][1][1]-1,data['range'][1][0])) 540 DeltOne = max(1.0,data['range'][1][1]-data['range'][1][0]) 541 minSel.SetValue(int(100*(data['range'][1][0]/DeltOne))) 542 maxVal.SetValue(int(data['range'][1][1])) 543 #wx.CallAfter(G2plt.PlotExposedImage,G2frame,event=event) # replace with code below for more speed 545 val = maxSel.GetValue() 546 if G2frame.prevMaxValue == val: return # if this val has been processed, no need to repeat 547 scaleSel.SetSelection(len(scaleChoices)-1) 548 G2frame.prevMaxValue = val 549 sqrtDeltZero = math.sqrt(max(1.0,Range[0][1]-max(0.0,Range[1][0])-1)) # sqrt(Imax0-Imin-1) 550 Range[1][1] = int(0.5 + (val * sqrtDeltZero / 100.)**2 + Range[1][0] + 1) 551 maxVal.SetValue(int(0.5+Range[1][1])) 552 DeltOne = max(1.0,Range[1][1]-max(0.0,Range[0][0])-1) 553 minSel.SetValue(int(0.5 + 100*(Range[1][0]/DeltOne))) 554 sv0 = min(100,max(0,int(0.5+100.*(Range[1][0]-Range[0][0])/DeltOne))) 555 minSel.SetValue(sv0) 544 556 new,plotNum,Page,Plot,lim = G2frame.G2plotNB.FindPlotTab('2D Powder Image','mpl',newImage=False) 545 Page.ImgObj.set_clim([data['range'][1][0],data['range'][1][1]]) 546 Page.canvas.draw_idle() 557 Page.ImgObj.set_clim([Range[1][0],Range[1][1]]) 558 if mplOld: 559 Page.canvas.draw() 560 else: 561 Page.canvas.draw_idle() 547 562 548 563 G2frame.prevMinValue = None 549 564 def OnMinSlider(event): 550 if G2frame.prevMinValue == minSel.GetValue(): # if this val has been processed, no need to repeat 551 #print 'duplication' 552 return 553 G2frame.prevMinValue = minSel.GetValue() 554 DeltOne = data['range'][1][1]-data['range'][1][0] 555 imin = int(minSel.GetValue())*DeltOne/100. 556 data['range'][1][0] = max(0.0,min(data['range'][1][1]-1,imin)) 557 minVal.SetValue(int(data['range'][1][0])) 558 #wx.CallAfter(G2plt.PlotExposedImage,G2frame,event=event) # replace with code below for more speed 565 val = minSel.GetValue() 566 scaleSel.SetSelection(len(scaleChoices)-1) 567 if G2frame.prevMinValue == val: return # if this val has been processed, no need to repeat 568 G2frame.prevMinValue = val 569 DeltOne = max(1.0,Range[1][1]-max(0.0,Range[0][0])-1) # Imax-Imin0-1 570 Range[1][0] = max(0,int(0.5 + val * DeltOne / 100 + Range[0][0])) 571 minVal.SetValue(int(Range[1][0])) 572 sqrtDeltZero = math.sqrt(max(1.0,Range[0][1]-max(0.0,Range[1][0])-1)) # sqrt(Imax0-Imin-1) 573 sqrtDeltOne = math.sqrt(max(1.0,Range[1][1]-max(0.0,Range[1][0])-1)) # sqrt(Imax-Imin-1) 574 sv1 = min(100,max(0,int(0.5+100.*sqrtDeltOne/sqrtDeltZero))) 575 maxSel.SetValue(sv1) 559 576 new,plotNum,Page,Plot,lim = G2frame.G2plotNB.FindPlotTab('2D Powder Image','mpl',newImage=False) 560 Page.ImgObj.set_clim([data['range'][1][0],data['range'][1][1]]) 561 Page.canvas.draw_idle() 577 Page.ImgObj.set_clim([Range[1][0],Range[1][1]]) 578 if mplOld: 579 Page.canvas.draw() 580 else: 581 Page.canvas.draw_idle() 582 562 583 def OnAutoSet(event): 563 584 '''Responds to a button labeled 95%, etc; Sets the Imax and Imin values … … 573 594 new,plotNum,Page,Plot,lim = G2frame.G2plotNB.FindPlotTab('2D Powder Image','mpl',newImage=False) 574 595 if margin == 0: 575 data['range'][1] = list(data['range'][0])596 Range[1] = list(Range[0]) 576 597 else: 577 data['range'][1][0] = int(np.percentile(Page.ImgObj.get_array().compressed(),margin)) 578 data['range'][1][1] = int(np.percentile(Page.ImgObj.get_array().compressed(),100-margin)) 579 DeltOne = data['range'][1][1]-max(0.0,data['range'][0][0]) 580 sqrtDeltOne = math.sqrt(DeltOne) 581 maxSel.SetValue(int(100*sqrtDeltOne/sqrtDeltZero)) 582 minSel.SetValue(int(100*(data['range'][1][0]/DeltOne))) 583 maxVal.SetValue(int(data['range'][1][1])) 584 minVal.SetValue(int(data['range'][1][0])) 585 Page.ImgObj.set_clim([data['range'][1][0],data['range'][1][1]]) 586 Page.canvas.draw_idle() 587 598 Range[1][0] = int(np.percentile(Page.ImgObj.get_array().compressed(),margin)) 599 Range[1][1] = int(np.percentile(Page.ImgObj.get_array().compressed(),100-margin)) 600 sqrtDeltZero = math.sqrt(max(1.0,Range[0][1]-max(0.0,Range[1][0])-1)) # sqrt(Imax0-Imin-1) 601 sqrtDeltOne = math.sqrt(max(1.0,Range[1][1]-max(0.0,Range[1][0])-1)) # sqrt(Imax-Imin-1) 602 sv1 = min(100,max(0,int(0.5+100.*sqrtDeltOne/sqrtDeltZero))) 603 maxSel.SetValue(sv1) 604 DeltOne = max(1.0,Range[1][1]-max(0.0,Range[0][0])-1) 605 sv0 = min(100,max(0,int(0.5+100.*(Range[1][0]-Range[0][0])/DeltOne))) 606 minSel.SetValue(sv0) 607 minVal.SetValue(int(Range[1][0])) 608 maxVal.SetValue(int(Range[1][1])) 609 new,plotNum,Page,Plot,lim = G2frame.G2plotNB.FindPlotTab('2D Powder Image','mpl',newImage=False) 610 Page.ImgObj.set_clim([Range[1][0],Range[1][1]]) 611 if mplOld: 612 Page.canvas.draw() 613 else: 614 Page.canvas.draw_idle() 615 616 mplv = mpl.__version__.split('.') 617 mplOld = mplv[0] == '1' and int(mplv[1]) < 4 # use draw_idle for newer matplotlib versions 618 # Plot color scaling uses limits as below: 619 # (Imin0, Imax0) => Range[0] = data['range'][0] # lowest to highest pixel intensity 620 # [Imin, Imax] => Range[1] = data['range'][1] # lowest to highest pixel intensity on cmap scale 588 621 maxSizer = wx.GridBagSizer(0,0) 589 sqrtDeltZero = max(1.0,math.sqrt(data['range'][0][1]-max(0.0,data['range'][0][0])))590 DeltOne = max(1.0,data['range'][1][1]-max(0.0,data['range'][0][0]))591 sqrtDeltOne = math.sqrt(DeltOne)592 622 r = c = 0 593 623 maxSizer.Add(wx.StaticText(parent=G2frame.dataDisplay,label=' Max intensity'),(r,c)) 594 624 c += 1 595 maxSel = wx.Slider(parent=G2frame.dataDisplay,style=wx.SL_HORIZONTAL, 596 value=int(100*sqrtDeltOne/sqrtDeltZero)) 625 # maxSel is a slider with 101 steps scaled from Imin+1 to Imax0 with sqrt scaling 626 # slider value = sv = 100 * sqrt((Imax-Imin-1)/(Imax0-Imin-1)) 627 # Imax = (sv * sqrt(Imax0-Imin-1) / 100)**2 + Imin + 1 628 sqrtDeltZero = math.sqrt(max(1.0,Range[0][1]-max(0.0,Range[1][0])-1)) # sqrt(Imax0-Imin-1) 629 sqrtDeltOne = math.sqrt(max(1.0,Range[1][1]-max(0.0,Range[1][0])-1)) # sqrt(Imax-Imin-1) 630 sv1 = min(100,max(0,int(0.5+100.*sqrtDeltOne/sqrtDeltZero))) 631 maxSel = wx.Slider(parent=G2frame.dataDisplay,style=wx.SL_HORIZONTAL,value=sv1,size=(300,-1)) 597 632 maxSizer.Add(maxSel,(r,c),flag=wx.EXPAND) 598 633 maxSizer.AddGrowableCol(c) 599 634 c += 1 600 635 maxSel.Bind(wx.EVT_SLIDER, OnMaxSlider) 601 maxVal = G2G.ValidatedTxtCtrl(G2frame.dataDisplay, data['range'][1],1,min=data['range'][0][0]+1,602 max= data['range'][0][1]-1,typeHint=int,OnLeave=OnMaxVal)636 maxVal = G2G.ValidatedTxtCtrl(G2frame.dataDisplay,Range[1],1,min=Range[0][0]+1, 637 max=Range[0][1],typeHint=int,OnLeave=OnNewVal) 603 638 maxSizer.Add(maxVal,(r,c)) 604 639 c += 1 605 scaleSel = wx.Choice(G2frame.dataDisplay,choices=("100%","99%","95%","90%","80%"),size=(-1,-1)) 606 if (data['range'][1][0] == data['range'][0][0] and 607 data['range'][1][1] == data['range'][0][1]): 640 scaleChoices = ("100%","99%","95%","90%","80%","?") 641 scaleSel = wx.Choice(G2frame.dataDisplay,choices=scaleChoices,size=(-1,-1)) 642 if (Range[1][0] == Range[0][0] and 643 Range[1][1] == Range[0][1]): 608 644 scaleSel.SetSelection(0) 609 645 else: 610 scaleSel.Set Label("?%")646 scaleSel.SetSelection(len(scaleChoices)-1) 611 647 scaleSel.Bind(wx.EVT_CHOICE,OnAutoSet) 612 648 maxSizer.Add(scaleSel,(r,c),(2,1),flag=wx.ALIGN_CENTER) … … 615 651 maxSizer.Add(wx.StaticText(parent=G2frame.dataDisplay,label=' Min intensity'),(r,c)) 616 652 c += 1 617 minSel = wx.Slider(parent=G2frame.dataDisplay,style=wx.SL_HORIZONTAL, 618 value=int(100*(data['range'][1][0]-max(0.0,data['range'][0][0]))/DeltOne)) 653 # minSel is a slider with 101 steps scaled from Imin0 to Imax-1 with linear scaling 654 # slider value = sv0 = 100 * (Imin-Imin0)/(Imax-Imin0-1) 655 # Imin = sv0 * (Imax-Imin0-1) / 100 + Imin0 656 DeltOne = max(1.0,Range[1][1]-max(0.0,Range[0][0])-1) # Imax-Imin0-1 657 sv0 = min(100,max(0,int(0.5+100.*(Range[1][0]-Range[0][0])/DeltOne))) 658 minSel = wx.Slider(parent=G2frame.dataDisplay,style=wx.SL_HORIZONTAL,value=sv0,size=(300,-1)) 619 659 maxSizer.Add(minSel,(r,c),flag=wx.EXPAND|wx.ALL) 620 660 c += 1 621 661 minSel.Bind(wx.EVT_SLIDER, OnMinSlider) 622 minVal = G2G.ValidatedTxtCtrl(G2frame.dataDisplay, data['range'][1],0,623 max= data['range'][0][1],typeHint=int,OnLeave=OnMinVal)662 minVal = G2G.ValidatedTxtCtrl(G2frame.dataDisplay,Range[1],0, 663 max=Range[0][1],typeHint=int,OnLeave=OnNewVal) 624 664 maxSizer.Add(minVal,(r,c)) 625 665 return maxSizer … … 1089 1129 mainSizer.Add(ComboSizer(),0,wx.ALIGN_LEFT) 1090 1130 mainSizer.Add((5,5),0) 1131 Range = data['range'] # allows code to be same in Masks 1091 1132 MaxSizer = MaxSizer() #keep this so it can be changed in BackSizer 1092 1133 mainSizer.Add(MaxSizer,0,wx.ALIGN_LEFT|wx.EXPAND|wx.ALL) … … 1262 1303 G2frame.MaskKey = 'f' 1263 1304 G2plt.OnStartMask(G2frame) 1305 1306 def MaxSizer(): 1307 '''Defines a sizer with sliders and TextCtrl widgets for controlling the colormap 1308 for the image, as well as callback routines. 1309 ''' 1310 def OnNewVal(invalid,value,tc): 1311 '''Called when a Imax or Imin value is typed into a Validated TextCrtl (which puts 1312 the value into the data['range'] nested list). 1313 This adjusts the slider positions to match the current values 1314 ''' 1315 scaleSel.SetSelection(len(scaleChoices)-1) 1316 r11 = min(max(Range[1][1],Range[1][0]+1),Range[0][1]) # keep values in range 1317 if r11 != Range[1][1]: 1318 Range[1][1] = r11 1319 maxVal.SetValue(int(Range[1][1])) 1320 r10 = max(min(Range[1][0],Range[1][1]-1),Range[0][0]) 1321 if r10 != Range[1][0]: 1322 Range[1][0] = r10 1323 minVal.SetValue(int(Range[1][0])) 1324 sqrtDeltZero = math.sqrt(max(1.0,Range[0][1]-max(0.0,Range[1][0])-1)) # sqrt(Imax0-Imin-1) 1325 sqrtDeltOne = math.sqrt(max(1.0,Range[1][1]-max(0.0,Range[1][0])-1)) # sqrt(Imax-Imin-1) 1326 sv1 = min(100,max(0,int(0.5+100.*sqrtDeltOne/sqrtDeltZero))) 1327 maxSel.SetValue(sv1) 1328 DeltOne = max(1.0,Range[1][1]-max(0.0,Range[0][0])-1) 1329 sv0 = min(100,max(0,int(0.5+100.*(Range[1][0]-Range[0][0])/DeltOne))) 1330 minSel.SetValue(sv0) 1331 new,plotNum,Page,Plot,lim = G2frame.G2plotNB.FindPlotTab('2D Powder Image','mpl',newImage=False) 1332 Page.ImgObj.set_clim([Range[1][0],Range[1][1]]) 1333 if mplOld: 1334 Page.canvas.draw() 1335 else: 1336 Page.canvas.draw_idle() 1337 1338 G2frame.prevMaxValue = None 1339 def OnMaxSlider(event): 1340 val = maxSel.GetValue() 1341 if G2frame.prevMaxValue == val: return # if this val has been processed, no need to repeat 1342 scaleSel.SetSelection(len(scaleChoices)-1) 1343 G2frame.prevMaxValue = val 1344 sqrtDeltZero = math.sqrt(max(1.0,Range[0][1]-max(0.0,Range[1][0])-1)) # sqrt(Imax0-Imin-1) 1345 Range[1][1] = int(0.5 + (val * sqrtDeltZero / 100.)**2 + Range[1][0] + 1) 1346 maxVal.SetValue(int(0.5+Range[1][1])) 1347 DeltOne = max(1.0,Range[1][1]-max(0.0,Range[0][0])-1) 1348 minSel.SetValue(int(0.5 + 100*(Range[1][0]/DeltOne))) 1349 sv0 = min(100,max(0,int(0.5+100.*(Range[1][0]-Range[0][0])/DeltOne))) 1350 minSel.SetValue(sv0) 1351 new,plotNum,Page,Plot,lim = G2frame.G2plotNB.FindPlotTab('2D Powder Image','mpl',newImage=False) 1352 Page.ImgObj.set_clim([Range[1][0],Range[1][1]]) 1353 if mplOld: 1354 Page.canvas.draw() 1355 else: 1356 Page.canvas.draw_idle() 1357 1358 G2frame.prevMinValue = None 1359 def OnMinSlider(event): 1360 val = minSel.GetValue() 1361 scaleSel.SetSelection(len(scaleChoices)-1) 1362 if G2frame.prevMinValue == val: return # if this val has been processed, no need to repeat 1363 G2frame.prevMinValue = val 1364 DeltOne = max(1.0,Range[1][1]-max(0.0,Range[0][0])-1) # Imax-Imin0-1 1365 Range[1][0] = max(0,int(0.5 + val * DeltOne / 100 + Range[0][0])) 1366 minVal.SetValue(int(Range[1][0])) 1367 sqrtDeltZero = math.sqrt(max(1.0,Range[0][1]-max(0.0,Range[1][0])-1)) # sqrt(Imax0-Imin-1) 1368 sqrtDeltOne = math.sqrt(max(1.0,Range[1][1]-max(0.0,Range[1][0])-1)) # sqrt(Imax-Imin-1) 1369 sv1 = min(100,max(0,int(0.5+100.*sqrtDeltOne/sqrtDeltZero))) 1370 maxSel.SetValue(sv1) 1371 new,plotNum,Page,Plot,lim = G2frame.G2plotNB.FindPlotTab('2D Powder Image','mpl',newImage=False) 1372 Page.ImgObj.set_clim([Range[1][0],Range[1][1]]) 1373 if mplOld: 1374 Page.canvas.draw() 1375 else: 1376 Page.canvas.draw_idle() 1377 1378 def OnAutoSet(event): 1379 '''Responds to a button labeled 95%, etc; Sets the Imax and Imin values 1380 for the image so that 95% (etc.) of pixels are inside the color map limits. 1381 An equal number of pixels are dropped at the minimum and maximum levels. 1382 ''' 1383 try: 1384 val = int(event.GetEventObject().GetStringSelection()[:-1]) 1385 margin = (100-val)/2. 1386 except: 1387 margin = 0 1388 event.GetEventObject().SetSelection(0) 1389 new,plotNum,Page,Plot,lim = G2frame.G2plotNB.FindPlotTab('2D Powder Image','mpl',newImage=False) 1390 if margin == 0: 1391 Range[1] = list(Range[0]) 1392 else: 1393 Range[1][0] = int(np.percentile(Page.ImgObj.get_array().compressed(),margin)) 1394 Range[1][1] = int(np.percentile(Page.ImgObj.get_array().compressed(),100-margin)) 1395 sqrtDeltZero = math.sqrt(max(1.0,Range[0][1]-max(0.0,Range[1][0])-1)) # sqrt(Imax0-Imin-1) 1396 sqrtDeltOne = math.sqrt(max(1.0,Range[1][1]-max(0.0,Range[1][0])-1)) # sqrt(Imax-Imin-1) 1397 sv1 = min(100,max(0,int(0.5+100.*sqrtDeltOne/sqrtDeltZero))) 1398 maxSel.SetValue(sv1) 1399 DeltOne = max(1.0,Range[1][1]-max(0.0,Range[0][0])-1) 1400 sv0 = min(100,max(0,int(0.5+100.*(Range[1][0]-Range[0][0])/DeltOne))) 1401 minSel.SetValue(sv0) 1402 minVal.SetValue(int(Range[1][0])) 1403 maxVal.SetValue(int(Range[1][1])) 1404 new,plotNum,Page,Plot,lim = G2frame.G2plotNB.FindPlotTab('2D Powder Image','mpl',newImage=False) 1405 Page.ImgObj.set_clim([Range[1][0],Range[1][1]]) 1406 if mplOld: 1407 Page.canvas.draw() 1408 else: 1409 Page.canvas.draw_idle() 1410 1411 mplv = mpl.__version__.split('.') 1412 mplOld = mplv[0] == '1' and int(mplv[1]) < 4 # use draw_idle for newer matplotlib versions 1413 # Plot color scaling uses limits as below: 1414 # (Imin0, Imax0) => Range[0] = data['range'][0] # lowest to highest pixel intensity 1415 # [Imin, Imax] => Range[1] = data['range'][1] # lowest to highest pixel intensity on cmap scale 1416 maxSizer = wx.GridBagSizer(0,0) 1417 r = c = 0 1418 maxSizer.Add(wx.StaticText(parent=G2frame.dataDisplay,label=' Max intensity'),(r,c)) 1419 c += 1 1420 # maxSel is a slider with 101 steps scaled from Imin+1 to Imax0 with sqrt scaling 1421 # slider value = sv = 100 * sqrt((Imax-Imin-1)/(Imax0-Imin-1)) 1422 # Imax = (sv * sqrt(Imax0-Imin-1) / 100)**2 + Imin + 1 1423 sqrtDeltZero = math.sqrt(max(1.0,Range[0][1]-max(0.0,Range[1][0])-1)) # sqrt(Imax0-Imin-1) 1424 sqrtDeltOne = math.sqrt(max(1.0,Range[1][1]-max(0.0,Range[1][0])-1)) # sqrt(Imax-Imin-1) 1425 sv1 = min(100,max(0,int(0.5+100.*sqrtDeltOne/sqrtDeltZero))) 1426 maxSel = wx.Slider(parent=G2frame.dataDisplay,style=wx.SL_HORIZONTAL,value=sv1,size=(300,-1)) 1427 maxSizer.Add(maxSel,(r,c),flag=wx.EXPAND) 1428 maxSizer.AddGrowableCol(c) 1429 c += 1 1430 maxSel.Bind(wx.EVT_SLIDER, OnMaxSlider) 1431 maxVal = G2G.ValidatedTxtCtrl(G2frame.dataDisplay,Range[1],1,min=Range[0][0]+1, 1432 max=Range[0][1],typeHint=int,OnLeave=OnNewVal) 1433 maxSizer.Add(maxVal,(r,c)) 1434 c += 1 1435 scaleChoices = ("100%","99%","95%","90%","80%","?") 1436 scaleSel = wx.Choice(G2frame.dataDisplay,choices=scaleChoices,size=(-1,-1)) 1437 if (Range[1][0] == Range[0][0] and 1438 Range[1][1] == Range[0][1]): 1439 scaleSel.SetSelection(0) 1440 else: 1441 scaleSel.SetSelection(len(scaleChoices)-1) 1442 scaleSel.Bind(wx.EVT_CHOICE,OnAutoSet) 1443 maxSizer.Add(scaleSel,(r,c),(2,1),flag=wx.ALIGN_CENTER) 1444 c = 0 1445 r = 1 1446 maxSizer.Add(wx.StaticText(parent=G2frame.dataDisplay,label=' Min intensity'),(r,c)) 1447 c += 1 1448 # minSel is a slider with 101 steps scaled from Imin0 to Imax-1 with linear scaling 1449 # slider value = sv0 = 100 * (Imin-Imin0)/(Imax-Imin0-1) 1450 # Imin = sv0 * (Imax-Imin0-1) / 100 + Imin0 1451 DeltOne = max(1.0,Range[1][1]-max(0.0,Range[0][0])-1) # Imax-Imin0-1 1452 sv0 = min(100,max(0,int(0.5+100.*(Range[1][0]-Range[0][0])/DeltOne))) 1453 minSel = wx.Slider(parent=G2frame.dataDisplay,style=wx.SL_HORIZONTAL,value=sv0,size=(300,-1)) 1454 maxSizer.Add(minSel,(r,c),flag=wx.EXPAND|wx.ALL) 1455 c += 1 1456 minSel.Bind(wx.EVT_SLIDER, OnMinSlider) 1457 minVal = G2G.ValidatedTxtCtrl(G2frame.dataDisplay,Range[1],0, 1458 max=Range[0][1],typeHint=int,OnLeave=OnNewVal) 1459 maxSizer.Add(minVal,(r,c)) 1460 return maxSizer 1264 1461 1265 1462 startScroll = None … … 1310 1507 CId = G2gd.GetPatternTreeItemId(G2frame,G2frame.Image,'Image Controls') 1311 1508 controlData = G2frame.PatternTree.GetItemPyData(CId) 1312 def OnMaxVal(invalid,value,tc): 1313 DeltOne = controlData['range'][1][1]-max(0.0,controlData['range'][0][0]) 1314 sqrtDeltOne = math.sqrt(DeltOne) 1315 maxSel.SetValue(int(100*sqrtDeltOne/sqrtDeltZero)) 1316 minSel.SetValue(int(100*(controlData['range'][1][0]/DeltOne))) 1317 #wx.CallAfter(G2plt.PlotExposedImage,G2frame,event=tc.event) 1318 new,plotNum,Page,Plot,lim = G2frame.G2plotNB.FindPlotTab('2D Powder Image','mpl',newImage=False) 1319 Page.ImgObj.set_clim([controlData['range'][1][0],controlData['range'][1][1]]) 1320 Page.canvas.draw_idle() 1321 1322 def OnMinVal(invalid,value,tc): 1323 minSel.SetValue(int(100*(controlData['range'][1][0]-max(0.0,controlData['range'][0][0]))/DeltOne)) 1324 #wx.CallAfter(G2plt.PlotExposedImage,G2frame,event=tc.event) 1325 new,plotNum,Page,Plot,lim = G2frame.G2plotNB.FindPlotTab('2D Powder Image','mpl',newImage=False) 1326 Page.ImgObj.set_clim([controlData['range'][1][0],controlData['range'][1][1]]) 1327 Page.canvas.draw_idle() 1328 1329 G2frame.prevMaxValue = None 1330 def OnMaxSlider(event): 1331 if G2frame.prevMaxValue == maxSel.GetValue(): # if this val has been processed, no need to repeat 1332 return 1333 G2frame.prevMaxValue = maxSel.GetValue() 1334 sqrtDeltZero = math.sqrt(controlData['range'][0][1]) 1335 imax = int(maxSel.GetValue())*sqrtDeltZero/100. 1336 controlData['range'][1][1] = imax**2 1337 controlData['range'][1][0] = max(0.0,min(controlData['range'][1][1]-1,controlData['range'][1][0])) 1338 DeltOne = max(1.0,controlData['range'][1][1]-controlData['range'][1][0]) 1339 minSel.SetValue(int(100*(controlData['range'][1][0]/DeltOne))) 1340 maxVal.SetValue(int(controlData['range'][1][1])) 1341 #wx.CallAfter(G2plt.PlotExposedImage,G2frame,event=event) # replace with code below for more speed 1342 new,plotNum,Page,Plot,lim = G2frame.G2plotNB.FindPlotTab('2D Powder Image','mpl',newImage=False) 1343 Page.ImgObj.set_clim([controlData['range'][1][0],controlData['range'][1][1]]) 1344 Page.canvas.draw_idle() 1345 1346 G2frame.prevMinValue = None 1347 def OnMinSlider(event): 1348 if G2frame.prevMinValue == minSel.GetValue(): # if this val has been processed, no need to repeat 1349 return 1350 G2frame.prevMinValue = minSel.GetValue() 1351 DeltOne = controlData['range'][1][1]-controlData['range'][1][0] 1352 imin = int(minSel.GetValue())*DeltOne/100. 1353 controlData['range'][1][0] = max(0.0,min(controlData['range'][1][1]-1,imin)) 1354 minVal.SetValue(int(controlData['range'][1][0])) 1355 #wx.CallAfter(G2plt.PlotExposedImage,G2frame,event=event) # replace with code below for more speed 1356 new,plotNum,Page,Plot,lim = G2frame.G2plotNB.FindPlotTab('2D Powder Image','mpl',newImage=False) 1357 Page.ImgObj.set_clim([controlData['range'][1][0],controlData['range'][1][1]]) 1358 Page.canvas.draw_idle() 1359 def OnAutoSet(event): 1360 '''Responds to a button labeled 95%, etc; Sets the Imax and Imin values 1361 for the image so that 95% (etc.) of pixels are inside the color map limits. 1362 An equal number of pixels are dropped at the minimum and maximum levels. 1363 ''' 1364 try: 1365 val = int(event.GetEventObject().GetStringSelection()[:-1]) 1366 margin = (100-val)/2. 1367 except: 1368 margin = 0 1369 event.GetEventObject().SetSelection(0) 1370 new,plotNum,Page,Plot,lim = G2frame.G2plotNB.FindPlotTab('2D Powder Image','mpl',newImage=False) 1371 if margin == 0: 1372 controlData['range'][1] = list(controlData['range'][0]) 1373 else: 1374 controlData['range'][1][0] = int(np.percentile(Page.ImgObj.get_array().compressed(),margin)) 1375 controlData['range'][1][1] = int(np.percentile(Page.ImgObj.get_array().compressed(),100-margin)) 1376 DeltOne = controlData['range'][1][1]-max(0.0,controlData['range'][0][0]) 1377 sqrtDeltOne = math.sqrt(DeltOne) 1378 maxSel.SetValue(int(100*sqrtDeltOne/sqrtDeltZero)) 1379 minSel.SetValue(int(100*(controlData['range'][1][0]/DeltOne))) 1380 maxVal.SetValue(int(controlData['range'][1][1])) 1381 minVal.SetValue(int(controlData['range'][1][0])) 1382 Page.ImgObj.set_clim([controlData['range'][1][0],controlData['range'][1][1]]) 1383 Page.canvas.draw_idle() 1384 1385 maxSizer = wx.GridBagSizer(0,0) 1386 sqrtDeltZero = max(1.0,math.sqrt(controlData['range'][0][1]-max(0.0,controlData['range'][0][0]))) 1387 DeltOne = max(1.0,controlData['range'][1][1]-max(0.0,controlData['range'][0][0])) 1388 sqrtDeltOne = math.sqrt(DeltOne) 1389 r = c = 0 1390 maxSizer.Add(wx.StaticText(parent=G2frame.dataDisplay,label=' Max intensity'),(r,c)) 1391 c += 1 1392 maxSel = wx.Slider(parent=G2frame.dataDisplay,style=wx.SL_HORIZONTAL, 1393 value=int(100*sqrtDeltOne/sqrtDeltZero),size=[300,-1]) 1394 maxSizer.Add(maxSel,(r,c),flag=wx.EXPAND) 1395 maxSizer.AddGrowableCol(c) 1396 c += 1 1397 maxSel.Bind(wx.EVT_SLIDER, OnMaxSlider) 1398 maxVal = G2G.ValidatedTxtCtrl(G2frame.dataDisplay,controlData['range'][1],1,min=controlData['range'][0][0]+1, 1399 max=controlData['range'][0][1]-1,typeHint=int,OnLeave=OnMaxVal) 1400 maxSizer.Add(maxVal,(r,c)) 1401 c += 1 1402 scaleSel = wx.Choice(G2frame.dataDisplay,choices=("100%","99%","95%","90%","80%"),size=(-1,-1)) 1403 if (controlData['range'][1][0] == controlData['range'][0][0] and 1404 controlData['range'][1][1] == controlData['range'][0][1]): 1405 scaleSel.SetSelection(0) 1406 else: 1407 scaleSel.SetLabelText("?%") 1408 scaleSel.Bind(wx.EVT_CHOICE,OnAutoSet) 1409 maxSizer.Add(scaleSel,(r,c),(2,1),flag=wx.ALIGN_CENTER) 1410 c = 0 1411 r = 1 1412 maxSizer.Add(wx.StaticText(parent=G2frame.dataDisplay,label=' Min intensity'),(r,c)) 1413 c += 1 1414 minSel = wx.Slider(parent=G2frame.dataDisplay,style=wx.SL_HORIZONTAL, 1415 value=int(100*(controlData['range'][1][0]-max(0.0,controlData['range'][0][0]))/DeltOne)) 1416 maxSizer.Add(minSel,(r,c),flag=wx.EXPAND|wx.ALL) 1417 c += 1 1418 minSel.Bind(wx.EVT_SLIDER, OnMinSlider) 1419 minVal = G2G.ValidatedTxtCtrl(G2frame.dataDisplay,controlData['range'][1],0, 1420 max=controlData['range'][0][1],typeHint=int,OnLeave=OnMinVal) 1421 maxSizer.Add(minVal,(r,c)) 1422 mainSizer.Add(maxSizer,0,wx.ALIGN_LEFT|wx.EXPAND) 1509 Range = controlData['range'] 1510 MaxSizer = MaxSizer() #keep this so it can be changed in BackSizer 1511 mainSizer.Add(MaxSizer,0,wx.ALIGN_LEFT|wx.EXPAND|wx.ALL) 1423 1512 1424 1513 littleSizer = wx.FlexGridSizer(0,3,0,5)
Note: See TracChangeset
for help on using the changeset viewer.