Changeset 5504 for trunk/GSASIIpwdGUI.py
- Timestamp:
- Feb 26, 2023 10:06:15 AM (2 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
TabularUnified trunk/GSASIIpwdGUI.py ¶
r5502 r5504 2344 2344 insVal.update({key:data[key][1] for key in instkeys}) 2345 2345 insRef.update({key:data[key][2] for key in instkeys}) 2346 wx.CallAfter(UpdateInstrumentGrid,G2frame,data) 2347 2348 def OnInstMult(event): 2349 'If checked or unchecked, redisplay window' 2346 2350 wx.CallAfter(UpdateInstrumentGrid,G2frame,data) 2347 2351 … … 2641 2645 G2frame.dataWindow.SetSizer(mainSizer) 2642 2646 # end of MakeParameterWindow 2647 2648 plotYsel = {} # selected Y items 2649 def MakeMultiParameterWindow(selected=None): 2650 '''Displays the Instrument parameters for multiple histograms 2651 in the dataWindow panel 2652 ''' 2653 plotIndex = {'plotX':0} # index for param name => plotTbl index 2654 # plotX is selected X axis 2655 plotTbl = [] # table of values for each param 2656 plotLabel = [] # table of values for each param 2657 def onSelectHists(event): 2658 'select histograms to show' 2659 dlg = G2G.G2MultiChoiceDialog(G2frame, 2660 'Select histograms to show of type '+data['Type'][1], 2661 'Select histograms',hlist) 2662 dlg.CenterOnParent() 2663 try: 2664 if dlg.ShowModal() == wx.ID_OK: 2665 selected = dlg.GetSelections() 2666 else: 2667 return 2668 finally: 2669 dlg.Destroy() 2670 wx.CallAfter(MakeMultiParameterWindow,selected) 2671 return 2672 def onSelectX(event): 2673 'respond to change in plotting x axis; save and plot (if y selected)' 2674 plotIndex['plotX'] = event.GetEventObject().rbindex 2675 onPrmPlot(event) 2676 2677 def onPrmPlot(event): 2678 '''Callback after a change to X or Y plot contents 2679 plots multiple instrument param values vs selected X value. 2680 If no Y values are selected, any previous plot is deleted. 2681 ''' 2682 xvals = plotTbl[plotIndex['plotX']] 2683 xlbl = plotLabel[plotIndex['plotX']] 2684 XY = [] 2685 keys = '' 2686 for k in plotYsel: 2687 if k == 'plotX': continue 2688 if not plotYsel[k]: continue 2689 yvals = plotTbl[plotIndex[k]] 2690 if keys: keys += ', ' 2691 keys += plotLabel[plotIndex[k]] 2692 XY.append((xvals,yvals)) 2693 if not XY: 2694 G2frame.G2plotNB.Delete('Parameter values') 2695 return 2696 G2plt.PlotXY(G2frame,XY,labelX=xlbl,labelY=keys,Title='Parameter values',newPlot=True) 2697 2698 # gather histograms matching the currently selected histogram 2699 histoList,histIdList = G2frame.GetHistogramNamesID(['PWDR',]) 2700 hlist = GetHistsLikeSelected(G2frame) 2701 if selected is None and len(hlist) > 10: # on initial call this is none 2702 onSelectHists(None) # lots of histograms, give user a chance to choose 2703 return 2704 elif selected is None: # select all, not so many 2705 selected = range(len(hlist)) 2706 lbl = 'Instrument parameters for all matching histograms' 2707 else: 2708 lbl = 'Instrument parameters for selected histograms' 2709 wx.BeginBusyCursor() 2710 h = G2frame.GPXtree.GetItemText(G2frame.PatternId) 2711 histnames = [h] 2712 histdict = {h:data} 2713 histnum = {h:G2frame.GPXtree.GetItemPyData(G2frame.PatternId)[0]['hId']} 2714 for i in selected: 2715 h = hlist[i] 2716 if h not in histoList: # unexpected 2717 print('hist from GetHistsLikeSelected not in GetHistogramNamesID',h) 2718 continue 2719 hid = histIdList[h] 2720 inst,inst2 = G2frame.GPXtree.GetItemPyData(G2gd.GetGPXtreeItemId(G2frame,hid, 'Instrument Parameters')) 2721 histnames.append(h) 2722 histdict[h] = inst 2723 histnum[h] = G2frame.GPXtree.GetItemPyData(hid)[0]['hId'] 2724 2725 # start posting info into window 2726 G2frame.dataWindow.ClearData() 2727 mainSizer = wx.BoxSizer(wx.VERTICAL) 2728 topSizer = wx.BoxSizer(wx.HORIZONTAL) 2729 topSizer.Add(wx.StaticText(G2frame.dataWindow,wx.ID_ANY,lbl)) 2730 if hlist: 2731 btn = wx.Button(G2frame.dataWindow, wx.ID_ANY,'Select\nHistograms') 2732 topSizer.Add(btn,0,wx.LEFT|wx.RIGHT,15) 2733 btn.Bind(wx.EVT_BUTTON,onSelectHists) 2734 topSizer.Add((20,-1)) 2735 topSizer.Add(G2G.HelpButton(G2frame.dataWindow,helpIndex=G2frame.dataWindow.helpKey)) 2736 mainSizer.Add(topSizer) 2737 2738 # create table w/headers 2739 sdlg = G2frame.dataWindow 2740 fgs = wx.FlexGridSizer(0,len(histnames)+3,0,0) 2741 fgs.Add(wx.StaticText(sdlg,wx.ID_ANY,'plot\nas X'),0,wx.LEFT|wx.RIGHT,1) 2742 fgs.Add(wx.StaticText(sdlg,wx.ID_ANY,'plot\nas Y'),0,wx.LEFT|wx.RIGHT,1) 2743 fgs.Add(wx.StaticText(sdlg,wx.ID_ANY,'Histogram '),0,WACV|wx.LEFT,14) 2744 for i,h in enumerate(histnames): 2745 if len(h[:5].strip()) > 20: 2746 fgs.Add(G2G.ScrolledStaticText(sdlg,label=h[5:], 2747 dots=False,lbllen=20) 2748 ,0,WACV|wx.LEFT|wx.RIGHT,5) 2749 else: 2750 fgs.Add(wx.StaticText(sdlg,wx.ID_ANY,h[5:]),0,WACV|wx.LEFT|wx.RIGHT,5) 2751 2752 firstRadio = wx.RB_GROUP 2753 # put non-editable values at top of table (plot as x but not y) 2754 keylist = ['num'] 2755 lbllist = ['#'] 2756 if 'T' in data['Type'][1]: 2757 keylist += ['2-theta'] 2758 lbllist += ['2-theta'] 2759 for key,lbl in zip(keylist,lbllist): 2760 rb = wx.RadioButton(sdlg,wx.ID_ANY,'',style=firstRadio) 2761 rb.rbindex = len(plotTbl) 2762 rb.Bind(wx.EVT_RADIOBUTTON,onSelectX) 2763 plotLabel.append(lbl) 2764 fgs.Add(rb,0,wx.ALIGN_CENTER|WACV) 2765 if firstRadio: 2766 rb.SetValue(True) 2767 firstRadio = 0 2768 fgs.Add((-1,-1)) # skip y checkbutton 2769 fgs.Add(wx.StaticText(sdlg,wx.ID_ANY,lbl),0,WACV|wx.LEFT,14) 2770 plotvals = [] 2771 for h in histnames: 2772 if key == 'num': 2773 val = histnum[h] 2774 else: 2775 val = histdict[h][key][1] 2776 fgs.Add(wx.StaticText(sdlg,wx.ID_ANY,str(val)), 2777 0,wx.ALIGN_CENTER|WACV,0) 2778 plotvals.append(val) 2779 plotTbl.append(plotvals) 2780 2781 # determine what items will be shown based on histogram type 2782 Items = [] 2783 if 'C' in data['Type'][1]: #constant wavelength 2784 if 'Lam1' in data: 2785 Items = ['Lam1','Lam2','I(L2)/I(L1)'] 2786 else: 2787 Items = ['Lam','Zero','Polariz.'] 2788 Items += ['U','V','W','X','Y','Z','SH/L','Azimuth'] 2789 elif 'B' in data['Type'][1]: 2790 Items = ['Azimuth','Lam','Zero','Polariz.','U','V','W','X','Y','Z','alpha-0','alpha-1','beta-0','beta-1'] 2791 elif 'E' in data['Type'][1]: 2792 Items = ['2-theta','XE','YE','ZE','A','B','C'] 2793 elif 'T' in data['Type'][1]: # TOF 2794 Items = ['difC','difA','difB','Zero','alpha','beta-0','beta-1','beta-q','sig-0','sig-1','sig-2','sig-q','X','Y','Z'] 2795 # display the items in the table 2796 for k in Items: 2797 plotYsel[k] = plotYsel.get(k,False) 2798 #if not l: l = k 2799 l = k 2800 rb = wx.RadioButton(sdlg,wx.ID_ANY,'',style=firstRadio) 2801 rb.rbindex = len(plotTbl) 2802 rb.Bind(wx.EVT_RADIOBUTTON,onSelectX) 2803 plotLabel.append(l) 2804 fgs.Add(rb,0,wx.ALIGN_CENTER|WACV) 2805 if firstRadio: 2806 rb.SetValue(True) 2807 firstRadio = 0 2808 fgs.Add(G2G.G2CheckBox(sdlg,'',plotYsel,k,OnChange=onPrmPlot),0,wx.ALIGN_CENTER|WACV) 2809 plotIndex[k] = rb.rbindex 2810 fgs.Add(wx.StaticText(sdlg,wx.ID_ANY,l),0,WACV|wx.LEFT,14) 2811 plotvals = [] 2812 for h in histnames: 2813 miniSizer = wx.BoxSizer(wx.HORIZONTAL) 2814 itemVal = G2G.ValidatedTxtCtrl(sdlg,histdict[h][k],1,nDig=(10,4),typeHint=float) 2815 plotvals.append(histdict[h][k][1]) 2816 miniSizer.Add(itemVal) 2817 miniSizer.Add((2,-1)) 2818 miniSizer.Add(G2G.G2CheckBox(sdlg,'',histdict[h][k],2),0,WACV|wx.RIGHT,15) 2819 fgs.Add(miniSizer,0,wx.ALIGN_CENTER) 2820 plotTbl.append(plotvals) 2821 2822 mainSizer.Add(fgs) 2823 G2frame.dataWindow.SetDataSize() 2824 G2frame.dataWindow.SetSizer(mainSizer) 2825 G2frame.dataWindow.SendSizeEvent() 2826 wx.EndBusyCursor() 2827 # end of MakeMultiParameterWindow 2643 2828 2644 2829 # beginning of UpdateInstrumentGrid code … … 2711 2896 G2frame.Bind(wx.EVT_MENU,OnInstFlagCopy,id=G2G.wxID_INSTFLAGCOPY) 2712 2897 G2frame.Bind(wx.EVT_MENU,OnCopy1Val,id=G2G.wxID_INST1VAL) 2898 G2frame.Bind(wx.EVT_MENU,OnInstMult,id=G2G.wxID_INSTSHOWMULT) 2713 2899 elif 'L' in insVal['Type'] or 'R' in insVal['Type']: #SASD & REFD data menu commands 2714 2900 G2gd.SetDataMenuBar(G2frame,G2frame.dataWindow.SASDInstMenu) 2715 2901 G2frame.Bind(wx.EVT_MENU,OnInstCopy,id=G2G.wxID_SASDINSTCOPY) 2716 MakeParameterWindow() 2902 menuitem = G2frame.dataWindow.InstMenu.FindItemById(G2G.wxID_INSTSHOWMULT) 2903 if menuitem.IsChecked(): 2904 MakeMultiParameterWindow() 2905 else: 2906 MakeParameterWindow() 2717 2907 G2frame.dataWindow.SendSizeEvent() 2718 2908
Note: See TracChangeset
for help on using the changeset viewer.