Changeset 1404


Ignore:
Timestamp:
Jul 2, 2014 3:32:53 PM (7 years ago)
Author:
toby
Message:

Add edit single value for Inst & Sample prms; new Select1Var dialog

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASIIgrid.py

    r1403 r1404  
    109109
    110110[ wxID_BACKCOPY,wxID_LIMITCOPY, wxID_SAMPLECOPY, wxID_SAMPLECOPYSOME, wxID_BACKFLAGCOPY, wxID_SAMPLEFLAGCOPY,
    111     wxID_SAMPLESAVE, wxID_SAMPLELOAD,wxID_ADDEXCLREGION,wxID_SETSCALE,
    112 ] = [wx.NewId() for item in range(10)]
     111    wxID_SAMPLESAVE, wxID_SAMPLELOAD,wxID_ADDEXCLREGION,wxID_SETSCALE,wxID_SAMPLE1VAL
     112] = [wx.NewId() for item in range(11)]
    113113
    114114[ wxID_INSTPRMRESET,wxID_CHANGEWAVETYPE,wxID_INSTCOPY, wxID_INSTFLAGCOPY, wxID_INSTLOAD,
    115     wxID_INSTSAVE, wxID_INSTONEVAL
     115    wxID_INSTSAVE, wxID_INST1VAL
    116116] = [wx.NewId() for item in range(7)]
    117117
     
    10191019        panel.SetAutoLayout(1)
    10201020        panel.SetupScrolling()
     1021        # patch for wx 2.9 on Mac
     1022        i,j= wx.__version__.split('.')[0:2]
     1023        if int(i)+int(j)/10. > 2.8 and 'wxOSX' in wx.PlatformInfo:
     1024            panel.SetMinSize((subSizer.GetSize()[0]+30,panel.GetSize()[1]))       
    10211025        mainSizer.Add(panel,1, wx.ALL|wx.EXPAND,1)
    10221026
     
    19351939
    19361940################################################################################
     1941def SelectEdit1Var(G2frame,array,labelLst,elemKeysLst,dspLst,refFlgElem):
     1942    '''Select a variable from a list, then edit it and select histograms
     1943    to copy it to.
     1944
     1945    :param wx.Frame G2frame: main GSAS-II frame
     1946    :param dict array: the array (dict or list) where values to be edited are kept
     1947    :param list labelLst: labels for each data item
     1948    :param list elemKeysLst: a list of lists of keys needed to be applied (see below)
     1949      to obtain the value of each parameter
     1950    :param list dspLst: list list of digits to be displayed (10,4) is 10 digits
     1951      with 4 decimal places. Can be None.
     1952    :param list refFlgElem: a list of lists of keys needed to be applied (see below)
     1953      to obtain the refine flag for each parameter or None if the parameter
     1954      does not have refine flag.
     1955
     1956    Example::
     1957      array = data
     1958      labelLst = ['v1','v2']
     1959      elemKeysLst = [['v1'], ['v2',0]]
     1960      refFlgElem = [None, ['v2',1]]
     1961
     1962     * The value for v1 will be in data['v1'] and this cannot be refined while,
     1963     * The value for v2 will be in data['v2'][0] and its refinement flag is data['v2'][1]
     1964    '''
     1965    def unkey(dct,keylist):
     1966        '''dive into a nested set of dicts/lists applying keys in keylist
     1967        consecutively
     1968        '''
     1969        d = dct
     1970        for k in keylist:
     1971            d = d[k]
     1972        return d
     1973
     1974    def OnChoice(event):
     1975        'Respond when a parameter is selected in the Choice box'
     1976        valSizer.DeleteWindows()
     1977        lbl = event.GetString()
     1978        copyopts['currentsel'] = lbl
     1979        i = labelLst.index(lbl)
     1980        OKbtn.Enable(True)
     1981        ch.SetLabel(lbl)
     1982        args = {}
     1983        if dspLst[i]:
     1984            args = {'nDig':dspLst[i]}
     1985        Val = ValidatedTxtCtrl(
     1986            dlg,
     1987            unkey(array,elemKeysLst[i][:-1]),
     1988            elemKeysLst[i][-1],
     1989            **args)
     1990        copyopts['startvalue'] = unkey(array,elemKeysLst[i])
     1991        #unkey(array,elemKeysLst[i][:-1])[elemKeysLst[i][-1]] =
     1992        valSizer.Add(Val,0,wx.LEFT,5)
     1993        dlg.SendSizeEvent()
     1994       
     1995    # SelectEdit1Var execution begins here
     1996    saveArray = copy.deepcopy(array) # keep original values
     1997    TreeItemType = G2frame.PatternTree.GetItemText(G2frame.PickId)
     1998    copyopts = {'InTable':False,"startvalue":None,'currentsel':None}       
     1999    hst = G2frame.PatternTree.GetItemText(G2frame.PatternId)
     2000    histList = G2pdG.GetHistsLikeSelected(G2frame)
     2001    if not histList:
     2002        G2frame.ErrorDialog('No match','No histograms match '+hst,G2frame.dataFrame)
     2003        return
     2004    dlg = wx.Dialog(G2frame.dataDisplay,wx.ID_ANY,'Set a parameter value',
     2005        style=wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER)
     2006    mainSizer = wx.BoxSizer(wx.VERTICAL)
     2007    mainSizer.Add((5,5))
     2008    subSizer = wx.BoxSizer(wx.HORIZONTAL)
     2009    subSizer.Add((-1,-1),1,wx.EXPAND)
     2010    subSizer.Add(wx.StaticText(dlg,wx.ID_ANY,'Select a parameter and set a new value'))
     2011    subSizer.Add((-1,-1),1,wx.EXPAND)
     2012    mainSizer.Add(subSizer,0,wx.EXPAND,0)
     2013    mainSizer.Add((0,10))
     2014
     2015    subSizer = wx.FlexGridSizer(0,2,5,0)
     2016    subSizer.Add(wx.StaticText(dlg,wx.ID_ANY,'Parameter: '))
     2017    ch = wx.Choice(dlg, wx.ID_ANY, choices = sorted(labelLst))
     2018    ch.SetSelection(-1)
     2019    ch.Bind(wx.EVT_CHOICE, OnChoice)
     2020    subSizer.Add(ch)
     2021    subSizer.Add(wx.StaticText(dlg,wx.ID_ANY,'Value: '))
     2022    valSizer = wx.BoxSizer(wx.HORIZONTAL)
     2023    subSizer.Add(valSizer)
     2024    mainSizer.Add(subSizer)
     2025
     2026    mainSizer.Add((-1,20))
     2027    subSizer = wx.BoxSizer(wx.HORIZONTAL)
     2028    subSizer.Add(G2CheckBox(dlg, 'Edit in table ', copyopts, 'InTable'))
     2029    mainSizer.Add(subSizer)
     2030
     2031    btnsizer = wx.StdDialogButtonSizer()
     2032    OKbtn = wx.Button(dlg, wx.ID_OK,'Continue')
     2033    OKbtn.Enable(False)
     2034    OKbtn.SetDefault()
     2035    OKbtn.Bind(wx.EVT_BUTTON,lambda event: dlg.EndModal(wx.ID_OK))
     2036    btnsizer.AddButton(OKbtn)
     2037    btn = wx.Button(dlg, wx.ID_CANCEL)
     2038    btnsizer.AddButton(btn)
     2039    btnsizer.Realize()
     2040    mainSizer.Add((-1,5),1,wx.EXPAND,1)
     2041    mainSizer.Add(btnsizer,0,wx.ALIGN_CENTER,0)
     2042    mainSizer.Add((-1,10))
     2043
     2044    dlg.SetSizer(mainSizer)
     2045    dlg.CenterOnParent()
     2046    if dlg.ShowModal() != wx.ID_OK:
     2047        array.update(saveArray)
     2048        dlg.Destroy()
     2049        return
     2050    dlg.Destroy()
     2051
     2052    copyList = []
     2053    lbl = copyopts['currentsel']
     2054    dlg = G2MultiChoiceDialog(
     2055        G2frame.dataFrame,
     2056        'Copy parameter '+lbl+' from\n'+hst,
     2057        'Copy parameters', histList)
     2058    dlg.CenterOnParent()
     2059    try:
     2060        if dlg.ShowModal() == wx.ID_OK:
     2061            for i in dlg.GetSelections():
     2062                copyList.append(histList[i])
     2063        else:
     2064            # reset the parameter since cancel was pressed
     2065            array.update(saveArray)
     2066            return
     2067    finally:
     2068        dlg.Destroy()
     2069
     2070    prelbl = [hst]
     2071    i = labelLst.index(lbl)
     2072    keyLst = elemKeysLst[i]
     2073    refkeys = refFlgElem[i]
     2074    dictlst = [unkey(array,keyLst[:-1])]
     2075    if refkeys is not None:
     2076        refdictlst = [unkey(array,refkeys[:-1])]
     2077    else:
     2078        refdictlst = None
     2079    Id = GetPatternTreeItemId(G2frame,G2frame.root,hst)
     2080    hstData = G2frame.PatternTree.GetItemPyData(GetPatternTreeItemId(G2frame,Id,'Instrument Parameters'))[0]
     2081    for h in copyList:
     2082        Id = GetPatternTreeItemId(G2frame,G2frame.root,h)
     2083        instData = G2frame.PatternTree.GetItemPyData(GetPatternTreeItemId(G2frame,Id,'Instrument Parameters'))[0]
     2084        if len(hstData) != len(instData) or hstData['Type'][0] != instData['Type'][0]:  #don't mix data types or lam & lam1/lam2 parms!
     2085            print h+' not copied - instrument parameters not commensurate'
     2086            continue
     2087        hData = G2frame.PatternTree.GetItemPyData(GetPatternTreeItemId(G2frame,Id,TreeItemType))
     2088        if TreeItemType == 'Instrument Parameters':
     2089            hData = hData[0]
     2090        #copy the value if it is changed or we will not edit in a table
     2091        valNow = unkey(array,keyLst)
     2092        if copyopts['startvalue'] != valNow or not copyopts['InTable']:
     2093            unkey(hData,keyLst[:-1])[keyLst[-1]] = valNow
     2094        prelbl += [h]
     2095        dictlst += [unkey(hData,keyLst[:-1])]
     2096        if refdictlst is not None:
     2097            refdictlst += [unkey(hData,refkeys[:-1])]
     2098    if refdictlst is None:
     2099        args = {}
     2100    else:
     2101        args = {'checkdictlst':refdictlst,
     2102                'checkelemlst':len(dictlst)*[refkeys[-1]],
     2103                'checklabel':'Refine?'}
     2104    if copyopts['InTable']:
     2105        dlg = ScrolledMultiEditor(
     2106            G2frame.dataDisplay,dictlst,
     2107            len(dictlst)*[keyLst[-1]],prelbl,
     2108            header='Editing parameter '+lbl,
     2109            CopyButton=True,**args)
     2110        dlg.CenterOnParent()
     2111        if dlg.ShowModal() != wx.ID_OK:
     2112            array.update(saveArray)
     2113        dlg.Destroy()
     2114
     2115################################################################################
    19372116class ShowLSParms(wx.Dialog):
    19382117    '''Create frame to show least-squares parameters
     
    26882867#        self.InstEdit.Append(help='Change radiation type (Ka12 - synch)',
    26892868#            id=wxID_CHANGEWAVETYPE, kind=wx.ITEM_NORMAL,text='Change radiation')
    2690         self.InstEdit.Append(id=wxID_INSTONEVAL, kind=wx.ITEM_NORMAL,text='Set one value',
     2869        self.InstEdit.Append(id=wxID_INST1VAL, kind=wx.ITEM_NORMAL,text='Set one value',
    26912870            help='Set one instrument parameter value across multiple histograms')
    26922871
     
    27102889        self.SampleEdit.Append(id=wxID_SAMPLEFLAGCOPY, kind=wx.ITEM_NORMAL,text='Copy flags',
    27112890            help='Copy sample parameter refinement flags to other histograms')
     2891        self.SampleEdit.Append(id=wxID_SAMPLE1VAL, kind=wx.ITEM_NORMAL,text='Set one value',
     2892            help='Set one sample parameter value across multiple histograms')
     2893
    27122894        self.PostfillDataMenu()
    27132895        self.SetScale.Enable(False)
     
    51555337    #      'phi':'',
    51565338    #      }
    5157     # Data2 = [True,False,False,True]
    51585339    # elemlst = sorted(Data1.keys())
    51595340    # prelbl = sorted(Data1.keys())
    51605341    # dictlst = len(elemlst)*[Data1,]
    5161     # Checkdictlst = len(elemlst)*[Data2,]
    5162     # Checkelemlst = range(len(Checkdictlst))
     5342    #Data2 = [True,False,False,True]
     5343    #Checkdictlst = len(Data2)*[Data2,]
     5344    #Checkelemlst = range(len(Checkdictlst))
    51635345    # print 'before',Data1,'\n',Data2
    51645346    # dlg = ScrolledMultiEditor(
     
    51735355    # print 'after',Data1,'\n',Data2
    51745356    # dlg.Destroy()
    5175     # Data3 = {
    5176     #      'Order':1.0,
    5177     #      'omega':1.1,
    5178     #      'chi':2.0,
    5179     #      'phi':2.3,
    5180     #      }
    5181     # dictlst = len(elemlst)*[Data3,]
    5182     # print 'before',Data3,'\n',Data2
    5183     # dlg = ScrolledMultiEditor(
    5184     #     frm,dictlst,elemlst,prelbl,
    5185     #     checkdictlst=Checkdictlst,checkelemlst=Checkelemlst,
    5186     #     checklabel="Refine?",
    5187     #     header="test",CopyButton=True)
    5188     # if dlg.ShowModal() == wx.ID_OK:
    5189     #     print "OK"
    5190     # else:
    5191     #     print "Cancel"
    5192     # print 'after',Data3,'\n',Data2
     5357    Data3 = {
     5358         'Order':1.0,
     5359         'omega':1.1,
     5360         'chi':2.0,
     5361         'phi':2.3,
     5362         'Order1':1.0,
     5363         'omega1':1.1,
     5364         'chi1':2.0,
     5365         'phi1':2.3,
     5366         'Order2':1.0,
     5367         'omega2':1.1,
     5368         'chi2':2.0,
     5369         'phi2':2.3,
     5370         }
     5371    elemlst = sorted(Data3.keys())
     5372    dictlst = len(elemlst)*[Data3,]
     5373    prelbl = elemlst[:]
     5374    prelbl[0]="this is a much longer label to stretch things out"
     5375    Data2 = len(elemlst)*[False,]
     5376    Data2[1] = Data2[3] = True
     5377    Checkdictlst = len(elemlst)*[Data2,]
     5378    Checkelemlst = range(len(Checkdictlst))
     5379    #print 'before',Data3,'\n',Data2
     5380    #print dictlst,"\n",elemlst
     5381    #print Checkdictlst,"\n",Checkelemlst
     5382    dlg = ScrolledMultiEditor(
     5383        frm,dictlst,elemlst,prelbl,
     5384        checkdictlst=Checkdictlst,checkelemlst=Checkelemlst,
     5385        checklabel="Refine?",
     5386        header="test",CopyButton=True)
     5387    if dlg.ShowModal() == wx.ID_OK:
     5388        print "OK"
     5389    else:
     5390        print "Cancel"
     5391    #print 'after',Data3,'\n',Data2
    51935392
    51945393    # Data2 = list(range(100))
  • trunk/GSASIIpwdGUI.py

    r1402 r1404  
    4141import GSASIIElem as G2elem
    4242import GSASIIsasd as G2sasd
     43import GSASIIexprGUI as G2exG
    4344VERY_LIGHT_GREY = wx.Colour(235,235,235)
    4445WACV = wx.ALIGN_CENTER_VERTICAL
     
    928929        return good
    929930       
    930     keys = keycheck(data.keys())
    931     if 'P' in data['Type'][0]:          #powder data
    932         insVal = dict(zip(keys,[data[key][1] for key in keys]))
    933         insDef = dict(zip(keys,[data[key][0] for key in keys]))
    934         insRef = dict(zip(keys,[data[key][2] for key in keys]))
    935         if 'NC' in data['Type'][0]:
    936             del(insDef['Polariz.'])
    937             del(insVal['Polariz.'])
    938             del(insRef['Polariz.'])
    939     elif 'S' in data['Type'][0]:                               #single crystal data
    940         insVal = dict(zip(keys,[data[key][1] for key in keys]))
    941         insDef = dict(zip(keys,[data[key][0] for key in keys]))
    942         insRef = {}
    943     elif 'L' in data['Type'][0]:                               #low angle data
    944         insVal = dict(zip(keys,[data[key][1] for key in keys]))
    945         insDef = dict(zip(keys,[data[key][0] for key in keys]))
    946         insRef = {}
    947     ValObj = {}
    948     RefObj = {}
    949     waves = {'CuKa':[1.54051,1.54433],'TiKa':[2.74841,2.75207],'CrKa':[2.28962,2.29351],
    950         'FeKa':[1.93597,1.93991],'CoKa':[1.78892,1.79278],'MoKa':[0.70926,0.713543],
    951         'AgKa':[0.559363,0.563775]}
    952     Inst2 = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,
    953             G2frame.PatternId,'Instrument Parameters'))[1]
    954        
    955931    def inst2data(inst,ref,data):
    956932        for item in data:
     
    10301006    def OnReset(event):
    10311007        insVal.update(insDef)
    1032         data = updateData(insVal,insRef)
     1008        updateData(insVal,insRef)
    10331009        RefreshInstrumentGrid(event,doAnyway=True)          #to get peaks updated
    10341010        UpdateInstrumentGrid(G2frame,data)
     
    10901066            else:
    10911067                print item+' not copied - instrument parameters not commensurate'
    1092        
    1093     def OnWaveChange(event):
    1094         if 'Lam' in insVal:
    1095             data['Lam1'] = [waves['CuKa'][0],waves['CuKa'][0],0]
    1096             data['Lam2'] = [waves['CuKa'][1],waves['CuKa'][1],0]
    1097             data['I(L2)/I(L1)'] = [0.5,0.5,0]
    1098             del(data['Lam'])
    1099         else:
    1100             data['Lam'] = [data['Lam1'][0],data['Lam1'][0],0]
    1101             del(data['Lam1'])
    1102         wx.CallAfter(UpdateInstrumentGrid,data)
    1103                
    1104     def OnLamPick(event):
    1105         lamType = lamPick.GetValue()
    1106         insVal['Lam1'] = waves[lamType][0]
    1107         insVal['Lam2'] = waves[lamType][1]
    1108         data = updateData(insVal,insRef)
    1109         UpdateInstrumentGrid(G2frame,data)
    1110                  
    1111     def OnRatValue(event):
    1112         try:
    1113             value = float(ratVal.GetValue())
    1114             if value < 0:
    1115                 raise ValueError
    1116         except ValueError:
    1117             value = insVal['I(L2)/I(L1)']
    1118         insVal['I(L2)/I(L1)'] = value
    1119         ratVal.SetValue('%10.4f'%(value))
    1120         data = updateData(insVal,insRef)
    1121        
    1122     def OnRatRef(event):
    1123         insRef['I(L2)/I(L1)'] = ratRef.GetValue()
    1124         data = updateData(insVal,insRef)
    1125        
    1126     def OnWaveValue(event):
    1127         try:
    1128             value = float(waveVal.GetValue())
    1129             if value < 0:
    1130                 raise ValueError
    1131         except ValueError:
    1132             value = insVal['Lam']
    1133         insVal['Lam'] = value
    1134         waveVal.SetValue('%10.6f'%(value))
    1135         data = updateData(insVal,insRef)
    1136        
    1137     def OnWaveRef(event):
    1138         insRef['Lam'] = waveRef.GetValue()
    1139         data = updateData(insVal,insRef)
    1140        
    1141     def OnItemValue(event):
    1142         Obj = event.GetEventObject()
    1143         item,fmt = ValObj[Obj.GetId()]
    1144         try:
    1145             value = float(Obj.GetValue())
    1146         except ValueError:
    1147             value = insVal[item]
    1148         insVal[item] = value
    1149         Obj.SetValue(fmt%(value))
    1150         data = updateData(insVal,insRef)
    1151         G2plt.PlotPeakWidths(G2frame)
     1068                         
     1069    def AfterChange(invalid,value,tc):
     1070        if invalid: return
     1071        updateData(insVal,insRef)
    11521072       
    11531073    def OnItemRef(event):
     
    11551075        item = RefObj[Obj.GetId()]
    11561076        insRef[item] = Obj.GetValue()
    1157         data = updateData(insVal,insRef)
     1077        updateData(insVal,insRef)
     1078
     1079    def OnCopy1Val(event):
     1080        '''Select one instrument parameter value to edit and copy to many histograms
     1081        optionally allow values to be edited in a table
     1082        '''
     1083        updateData(insVal,insRef)
     1084        G2gd.SelectEdit1Var(G2frame,data,labelLst,elemKeysLst,dspLst,refFlgElem)
     1085        insVal.update({key:data[key][1] for key in instkeys})
     1086        insRef.update({key:data[key][2] for key in instkeys})
     1087        wx.CallAfter(MakeParameterWindow)
     1088       
     1089    def lblWdef(lbl,dec,val):
     1090        'Label parameter showing the default value'
     1091        fmt = "%15."+str(dec)+"f"
     1092        return " " + lbl + " (" + (fmt % val).strip() + "): "
     1093
     1094    def RefineBox(item):
     1095        'Define a refine checkbox with binding'
     1096        wid = wx.CheckBox(G2frame.dataDisplay,label=' Refine?  ')
     1097        wid.SetValue(bool(insRef[item]))
     1098        RefObj[wid.GetId()] = item
     1099        wid.Bind(wx.EVT_CHECKBOX, OnItemRef)
     1100        return wid
     1101
     1102    def OnLamPick(event):
     1103        data['Source'][1] = lamType = event.GetEventObject().GetValue()
     1104        insVal['Lam1'] = waves[lamType][0]
     1105        insVal['Lam2'] = waves[lamType][1]
     1106        updateData(insVal,insRef)
     1107        i,j= wx.__version__.split('.')[0:2]
     1108        if int(i)+int(j)/10. > 2.8:
     1109            pass # repaint crashes wxpython 2.9
     1110            wx.CallLater(100, MakeParameterWindow)
     1111            #wx.CallAfter(MakeParameterWindow)
     1112        else:
     1113            wx.CallAfter(MakeParameterWindow)
     1114
     1115    def MakeParameterWindow():
     1116        'Displays the Instrument parameters in the datadisplay frame'
     1117        if G2frame.dataDisplay:
     1118            G2frame.dataFrame.Clear()
     1119        G2frame.dataFrame.SetLabel('Instrument Parameters')
     1120        G2frame.dataDisplay = wx.Panel(G2frame.dataFrame)
     1121        mainSizer = wx.BoxSizer(wx.VERTICAL)
     1122        instSizer = wx.FlexGridSizer(0,6,5,5)
     1123        subSizer = wx.BoxSizer(wx.HORIZONTAL)
     1124        subSizer.Add(wx.StaticText(G2frame.dataDisplay,-1,' Histogram Type: '+insVal['Type']),0,WACV)
     1125        mainSizer.Add(subSizer)
     1126        labelLst[:],elemKeysLst[:],dspLst[:],refFlgElem[:] = [],[],[],[]
     1127        if 'P' in insVal['Type']:                   #powder data
     1128            if 'C' in insVal['Type']:               #constant wavelength
     1129                labelLst.append('Azimuth angle')
     1130                elemKeysLst.append(['Azimuth',1])
     1131                dspLst.append([10,2])
     1132                refFlgElem.append(None)                   
     1133                if 'Lam1' in insVal:
     1134                    subSizer = wx.BoxSizer(wx.HORIZONTAL)
     1135                    subSizer.Add(wx.StaticText(G2frame.dataDisplay,-1,' Azimuth: '),0,WACV)
     1136                    txt = '%7.2f'%(insVal['Azimuth'])
     1137                    subSizer.Add(wx.StaticText(G2frame.dataDisplay,-1,txt.strip()),0,WACV)
     1138                    subSizer.Add(wx.StaticText(G2frame.dataDisplay,-1,'   Ka1/Ka2: '),0,WACV)
     1139                    txt = u'  %8.6f/%8.6f\xc5'%(insVal['Lam1'],insVal['Lam2'])
     1140                    subSizer.Add(wx.StaticText(G2frame.dataDisplay,-1,txt.strip()),0,WACV)
     1141                    waveSizer = wx.BoxSizer(wx.HORIZONTAL)
     1142                    waveSizer.Add(wx.StaticText(G2frame.dataDisplay,-1,'  Source type: '),0,WACV)
     1143                    # PATCH?: for now at least, Source is not saved anywhere before here
     1144                    if 'Source' not in data: data['Source'] = ['CuKa','?']
     1145                    choice = ['TiKa','CrKa','FeKa','CoKa','CuKa','MoKa','AgKa']
     1146                    lamPick = wx.ComboBox(G2frame.dataDisplay,value=data['Source'][1],choices=choice,style=wx.CB_READONLY|wx.CB_DROPDOWN)
     1147                    lamPick.Bind(wx.EVT_COMBOBOX, OnLamPick)
     1148                    waveSizer.Add(lamPick,0)
     1149                    subSizer.Add(waveSizer,0)
     1150                    mainSizer.Add(subSizer)
     1151                    instSizer.Add(wx.StaticText(
     1152                        G2frame.dataDisplay,-1,
     1153                        lblWdef('I(L2)/I(L1)',4,insDef['I(L2)/I(L1)'])),
     1154                        0,WACV)
     1155                    key = 'I(L2)/I(L1)'
     1156                    labelLst.append(key)
     1157                    elemKeysLst.append([key,1])
     1158                    dspLst.append([10,4])
     1159                    refFlgElem.append([key,2])                   
     1160                    ratVal = G2gd.ValidatedTxtCtrl(G2frame.dataDisplay,insVal,key,nDig=(10,4),typeHint=float,OnLeave=AfterChange)
     1161                    instSizer.Add(ratVal,0)
     1162                    instSizer.Add(RefineBox(key),0,WACV)
     1163                    instSizer.Add((5,5),0)
     1164                    instSizer.Add((5,5),0)
     1165                    instSizer.Add((5,5),0)               
     1166                else: # single wavelength
     1167                    instSizer.Add(wx.StaticText(G2frame.dataDisplay,-1,' Azimuth: '),0,WACV)
     1168                    txt = '%7.2f'%(insVal['Azimuth'])
     1169                    instSizer.Add(wx.StaticText(G2frame.dataDisplay,-1,txt.strip()),0,WACV)
     1170                    instSizer.Add((5,5),0)
     1171                    key = 'Lam'
     1172                    instSizer.Add(wx.StaticText(G2frame.dataDisplay,-1,u' Lam (\xc5): (%10.6f)'%(insDef[key])),
     1173                        0,WACV)
     1174                    waveVal = G2gd.ValidatedTxtCtrl(G2frame.dataDisplay,insVal,key,nDig=(10,6),typeHint=float,OnLeave=AfterChange)
     1175                    labelLst.append(u'Lam (\xc5)')
     1176                    elemKeysLst.append([key,1])
     1177                    dspLst.append([10,6])
     1178                    instSizer.Add(waveVal,0,WACV)
     1179                    if ifHisto:
     1180                        refFlgElem.append([key,2])                   
     1181                        instSizer.Add(RefineBox(key),0,WACV)
     1182                    else:
     1183                        refFlgElem.append(None)                   
     1184                        instSizer.Add((5,5),0)
     1185                for item in ['Zero','Polariz.']:
     1186                    if item in insDef:
     1187                        labelLst.append(item)
     1188                        elemKeysLst.append([item,1])
     1189                        dspLst.append([10,4])
     1190                        instSizer.Add(
     1191                            wx.StaticText(G2frame.dataDisplay,-1,lblWdef(item,4,insDef[item])),
     1192                            0,WACV)
     1193                        itemVal = G2gd.ValidatedTxtCtrl(G2frame.dataDisplay,insVal,item,nDig=(10,4),typeHint=float,OnLeave=AfterChange)
     1194                        instSizer.Add(itemVal,0,WACV)
     1195                        if ifHisto:
     1196                            refFlgElem.append([item,2])
     1197                            instSizer.Add(RefineBox(item),0,WACV)
     1198                        else:
     1199                            refFlgElem.append(None)                   
     1200                            instSizer.Add((5,5),0)
     1201                    else:                           #skip Polariz. for neutrons
     1202                        instSizer.Add((5,5),0)
     1203                        instSizer.Add((5,5),0)
     1204                        instSizer.Add((5,5),0)
     1205                for item in ['U','V','W','','X','Y','SH/L']:
     1206                    if item == '':
     1207                        instSizer.Add((5,5),0)
     1208                        instSizer.Add((5,5),0)
     1209                        instSizer.Add((5,5),0)
     1210                        continue
     1211                    nDig = (10,3)
     1212                    if item == 'SH/L':
     1213                        nDig = (10,5)
     1214                    labelLst.append(item)
     1215                    elemKeysLst.append([item,1])
     1216                    dspLst.append(nDig)
     1217                    refFlgElem.append([item,2])
     1218                    instSizer.Add(
     1219                        wx.StaticText(G2frame.dataDisplay,-1,lblWdef(item,nDig[1],insDef[item])),
     1220                        0,WACV)
     1221                    itemVal = G2gd.ValidatedTxtCtrl(G2frame.dataDisplay,insVal,item,nDig=nDig,typeHint=float,OnLeave=AfterChange)
     1222                    instSizer.Add(itemVal,0,WACV)
     1223                    instSizer.Add(RefineBox(item),0,WACV)
     1224            else:                                   #time of flight (neutrons)
     1225                subSizer = wx.BoxSizer(wx.HORIZONTAL)
     1226                subSizer.Add(wx.StaticText(G2frame.dataDisplay,-1,'  2-theta: '),0,WACV)
     1227                txt = '%7.2f'%(insVal['2-theta'])
     1228                subSizer.Add(wx.StaticText(G2frame.dataDisplay,-1,txt.strip()),0,WACV)
     1229                labelLst.append('2-theta')
     1230                elemKeysLst.append(['2-theta',1])
     1231                dspLst.append([10,2])
     1232                refFlgElem.append(None)                   
     1233                if 'Pdabc' in Inst2:
     1234                    Items = ['sig-0','sig-1','X','Y']
     1235                    subSizer.Add(wx.StaticText(G2frame.dataDisplay,-1,'  difC: '),0,WACV)
     1236                    txt = '%8.2f'%(insVal['difC'])
     1237                    subSizer.Add(wx.StaticText(G2frame.dataDisplay,-1,txt.strip()),0,WACV)
     1238                    labelLst.append('difC')
     1239                    elemKeysLst.append(['difC',1])
     1240                    dspLst.append([10,2])
     1241                    refFlgElem.append(None)
     1242                    subSizer.Add(wx.StaticText(G2frame.dataDisplay,-1,'  alpha, beta: fixed by table'),0,WACV)
     1243                else:
     1244                    Items = ['difC','difA','Zero','alpha','beta-0','beta-1','beta-q','sig-0','sig-1','sig-q','X','Y']
     1245                mainSizer.Add(subSizer)
     1246                for item in Items:
     1247                    nDig = (10,3)
     1248                    fmt = '%10.3f'
     1249                    if 'beta' in item:
     1250                        fmt = '%12.4g'
     1251                        nDig = (12,4)
     1252                    Fmt = ' %s: ('+fmt+')'
     1253                    instSizer.Add(
     1254                            wx.StaticText(G2frame.dataDisplay,-1,lblWdef(item,nDig[1],insDef[item])),
     1255                            0,WACV)
     1256                    itemVal = G2gd.ValidatedTxtCtrl(G2frame.dataDisplay,insVal,item,nDig=nDig,typeHint=float,OnLeave=AfterChange)
     1257                    instSizer.Add(itemVal,0,WACV)
     1258                    labelLst.append(item)
     1259                    elemKeysLst.append([item,1])
     1260                    dspLst.append(nDig)
     1261                    if not ifHisto and item in ['difC','difA','Zero',]:
     1262                        refFlgElem.append(None)
     1263                        instSizer.Add((5,5),0)
     1264                    else:
     1265                        refFlgElem.append([item,2])
     1266                        instSizer.Add(RefineBox(item),0,WACV)
     1267        elif 'S' in insVal['Type']:                       #single crystal data
     1268            if 'C' in insVal['Type']:               #constant wavelength
     1269                instSizer.Add(wx.StaticText(G2frame.dataDisplay,-1,u' Lam (\xc5): (%10.6f)'%(insDef['Lam'])),
     1270                    0,WACV)
     1271                waveVal = G2gd.ValidatedTxtCtrl(G2frame.dataDisplay,insVal,'Lam',nDig=6,typeHint=float,OnLeave=AfterChange)
     1272                instSizer.Add(waveVal,0,WACV)
     1273                labelLst.append(u'Lam (\xc5)')
     1274                elemKeysLst.append(['Lam',1])
     1275                dspLst.append([10,6])
     1276                refFlgElem.append(None)
     1277            else:                                   #time of flight (neutrons)
     1278                pass                                #for now
     1279        elif 'L' in insVal['Type']:
     1280            if 'C' in insVal['Type']:       
     1281                instSizer.Add(wx.StaticText(G2frame.dataDisplay,-1,u' Lam (\xc5): (%10.6f)'%(insDef['Lam'])),
     1282                    0,WACV)
     1283                waveVal = G2gd.ValidatedTxtCtrl(G2frame.dataDisplay,insVal,'Lam',nDig=6,typeHint=float,OnLeave=AfterChange)
     1284                instSizer.Add(waveVal,0,WACV)
     1285                labelLst.append(u'Lam (\xc5)')
     1286                elemKeysLst.append(['Lam',1])
     1287                dspLst.append([10,6])
     1288                refFlgElem.append(None)
     1289                instSizer.Add(wx.StaticText(G2frame.dataDisplay,-1,'  Azimuth: %7.2f'%(insVal['Azimuth'])),0,WACV)
     1290                labelLst.append('Azimuth angle')
     1291                elemKeysLst.append(['Azimuth',1])
     1292                dspLst.append([10,2])
     1293                refFlgElem.append(None)                   
     1294            else:                                   #time of flight (neutrons)
     1295                pass                                #for now
     1296
     1297        mainSizer.Add(instSizer,0)
     1298        mainSizer.Layout()   
     1299        G2frame.dataDisplay.SetSizer(mainSizer)
     1300        G2frame.dataFrame.setSizePosLeft(mainSizer.Fit(G2frame.dataFrame))
     1301        G2frame.dataFrame.SendSizeEvent()  # this causes a frame repaint, even if the size does not change!
     1302        # end of MakeParameterWindow
    11581303               
    1159     if G2frame.dataDisplay:
    1160         G2frame.dataFrame.Clear()
     1304    # beginning of UpdateInstrumentGrid code   
     1305    labelLst,elemKeysLst,dspLst,refFlgElem = [],[],[],[]
     1306    instkeys = keycheck(data.keys())
     1307    if 'P' in data['Type'][0]:          #powder data
     1308        insVal = dict(zip(instkeys,[data[key][1] for key in instkeys]))
     1309        insDef = dict(zip(instkeys,[data[key][0] for key in instkeys]))
     1310        insRef = dict(zip(instkeys,[data[key][2] for key in instkeys]))
     1311        if 'NC' in data['Type'][0]:
     1312            del(insDef['Polariz.'])
     1313            del(insVal['Polariz.'])
     1314            del(insRef['Polariz.'])
     1315    elif 'S' in data['Type'][0]:                               #single crystal data
     1316        insVal = dict(zip(instkeys,[data[key][1] for key in instkeys]))
     1317        insDef = dict(zip(instkeys,[data[key][0] for key in instkeys]))
     1318        insRef = {}
     1319    elif 'L' in data['Type'][0]:                               #low angle data
     1320        insVal = dict(zip(instkeys,[data[key][1] for key in instkeys]))
     1321        insDef = dict(zip(instkeys,[data[key][0] for key in instkeys]))
     1322        insRef = {}
     1323    ValObj = {}
     1324    RefObj = {}
     1325    waves = {'CuKa':[1.54051,1.54433],'TiKa':[2.74841,2.75207],'CrKa':[2.28962,2.29351],
     1326        'FeKa':[1.93597,1.93991],'CoKa':[1.78892,1.79278],'MoKa':[0.70926,0.713543],
     1327        'AgKa':[0.559363,0.563775]}
     1328    Inst2 = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,
     1329            G2frame.PatternId,'Instrument Parameters'))[1]       
    11611330    try:
    11621331        histoName = G2frame.PatternTree.GetItemPyData(G2frame.PatternId)[-1]
     
    11651334        ifhisto = False
    11661335    G2gd.SetDataMenuBar(G2frame)
    1167     G2frame.dataFrame.SetLabel('Instrument Parameters')
    1168     G2frame.dataDisplay = wx.Panel(G2frame.dataFrame)
    1169     topSizer = wx.FlexGridSizer(0,6,5,5)
    1170     instSizer = wx.FlexGridSizer(0,6,5,5)
    1171     topSizer.Add(wx.StaticText(G2frame.dataDisplay,-1,' Histogram Type: '+insVal['Type']),0,WACV)
    1172 #    topSizer.Add((5,5),0)
     1336    #patch
    11731337    if 'P' in insVal['Type']:                   #powder data
     1338        if 'C' in insVal['Type']:               #constant wavelength
     1339            if 'Azimuth' not in insVal:
     1340                insVal['Azimuth'] = 0.0
     1341                insDef['Azimuth'] = 0.0
     1342                insRef['Azimuth'] = False
     1343    #end of patch
     1344    if 'P' in insVal['Type']:                   #powder data menu commands
    11741345        G2gd.SetDataMenuBar(G2frame,G2frame.dataFrame.InstMenu)
    11751346        if not G2frame.dataFrame.GetStatusBar():
     
    11801351        G2frame.Bind(wx.EVT_MENU,OnInstCopy,id=G2gd.wxID_INSTCOPY)
    11811352        G2frame.Bind(wx.EVT_MENU,OnInstFlagCopy,id=G2gd.wxID_INSTFLAGCOPY)
    1182         G2frame.Bind(wx.EVT_MENU,OnWaveChange,id=G2gd.wxID_CHANGEWAVETYPE)       
    1183         if 'C' in insVal['Type']:               #constant wavelength
    1184             #patch
    1185             if 'Azimuth' not in insVal:
    1186                 insVal['Azimuth'] = 0.0
    1187                 insDef['Azimuth'] = 0.0
    1188                 insRef['Azimuth'] = False
    1189             #end of patch
    1190             topSizer.Add(wx.StaticText(G2frame.dataDisplay,-1,'  Azimuth: %7.2f'%(insVal['Azimuth'])),0,WACV)
    1191             if 'Lam1' in insVal:
    1192                 topSizer.Add(wx.StaticText(G2frame.dataDisplay,-1,'  Ka1/Ka2:'),
    1193                         0,WACV)
    1194                 topSizer.Add(wx.StaticText(G2frame.dataDisplay,-1,u'  %8.6f/%8.6f\xc5'%(insVal['Lam1'],insVal['Lam2'])),
    1195                         0,WACV)
    1196                 waveSizer = wx.BoxSizer(wx.HORIZONTAL)
    1197                 waveSizer.Add(wx.StaticText(G2frame.dataDisplay,-1,'  Select: '),0,WACV)
    1198                 choice = ['TiKa','CrKa','FeKa','CoKa','CuKa','MoKa','AgKa']
    1199                 lamPick = wx.ComboBox(G2frame.dataDisplay,value=' ',choices=choice,style=wx.CB_READONLY|wx.CB_DROPDOWN)
    1200                 lamPick.Bind(wx.EVT_COMBOBOX, OnLamPick)
    1201                 waveSizer.Add(lamPick,0)
    1202                 topSizer.Add(waveSizer,0)
    1203                 instSizer.Add(wx.StaticText(G2frame.dataDisplay,-1,' I(L2)/I(L1): (%10.4f)'%(insDef['I(L2)/I(L1)'])),
    1204                         0,WACV)
    1205                 ratVal = wx.TextCtrl(G2frame.dataDisplay,wx.ID_ANY,'%10.4f'%(insVal['I(L2)/I(L1)']),style=wx.TE_PROCESS_ENTER)
    1206                 ratVal.Bind(wx.EVT_TEXT_ENTER,OnRatValue)
    1207                 ratVal.Bind(wx.EVT_KILL_FOCUS,OnRatValue)
    1208                 instSizer.Add(ratVal,0)
    1209                 ratRef = wx.CheckBox(G2frame.dataDisplay,label=' Refine?')
    1210                 ratRef.SetValue(bool(insRef['I(L2)/I(L1)']))
    1211                 ratRef.Bind(wx.EVT_CHECKBOX, OnRatRef)
    1212                 instSizer.Add(ratRef,0,WACV)
    1213                
    1214             else:
    1215                 topSizer.Add(wx.StaticText(G2frame.dataDisplay,-1,u' Lam (\xc5): (%10.6f)'%(insDef['Lam'])),
    1216                     0,WACV)
    1217                 waveVal = wx.TextCtrl(G2frame.dataDisplay,wx.ID_ANY,'%10.6f'%(insVal['Lam']),style=wx.TE_PROCESS_ENTER)
    1218                 waveVal.Bind(wx.EVT_TEXT_ENTER,OnWaveValue)
    1219                 waveVal.Bind(wx.EVT_KILL_FOCUS,OnWaveValue)
    1220                 topSizer.Add(waveVal,0,WACV)
    1221                 if ifHisto:
    1222                     waveRef = wx.CheckBox(G2frame.dataDisplay,label=' Refine?')
    1223                     waveRef.SetValue(bool(insRef['Lam']))
    1224                     waveRef.Bind(wx.EVT_CHECKBOX, OnWaveRef)
    1225                     topSizer.Add(waveRef,0,WACV)
    1226             for item in ['Zero','Polariz.']:
    1227                 fmt = '%10.4f'
    1228                 Fmt = ' %s: ('+fmt+')'
    1229                 if item in insDef:
    1230                     instSizer.Add(wx.StaticText(G2frame.dataDisplay,-1,Fmt%(item,insDef[item])),
    1231                             0,WACV)
    1232                     itemVal = wx.TextCtrl(G2frame.dataDisplay,wx.ID_ANY,fmt%(insVal[item]),style=wx.TE_PROCESS_ENTER)
    1233                     ValObj[itemVal.GetId()] = [item,fmt]
    1234                     itemVal.Bind(wx.EVT_TEXT_ENTER,OnItemValue)
    1235                     itemVal.Bind(wx.EVT_KILL_FOCUS,OnItemValue)
    1236                     instSizer.Add(itemVal,0,WACV)
    1237                     if ifHisto:
    1238                         itemRef = wx.CheckBox(G2frame.dataDisplay,wx.ID_ANY,label=' Refine?')
    1239                         itemRef.SetValue(bool(insRef[item]))
    1240                         RefObj[itemRef.GetId()] = item
    1241                         itemRef.Bind(wx.EVT_CHECKBOX, OnItemRef)
    1242                         instSizer.Add(itemRef,0,WACV)
    1243                     else:
    1244                         instSizer.Add((5,5),0)
    1245                 else:                           #skip Polariz. for neutrons
    1246                     instSizer.Add((5,5),0)
    1247                     instSizer.Add((5,5),0)
    1248                     instSizer.Add((5,5),0)
    1249             for item in ['U','V','W','X','Y','SH/L']:
    1250                 fmt = '%10.3f'
    1251                 if item == 'SH/L':
    1252                     fmt = '%10.5f'
    1253                 Fmt = ' %s: ('+fmt+')'
    1254                 instSizer.Add(wx.StaticText(G2frame.dataDisplay,-1,Fmt%(item,insDef[item])),
    1255                         0,WACV)
    1256                 itemVal = wx.TextCtrl(G2frame.dataDisplay,wx.ID_ANY,fmt%(insVal[item]),style=wx.TE_PROCESS_ENTER)
    1257                 ValObj[itemVal.GetId()] = [item,fmt]
    1258                 itemVal.Bind(wx.EVT_TEXT_ENTER,OnItemValue)
    1259                 itemVal.Bind(wx.EVT_KILL_FOCUS,OnItemValue)
    1260                 instSizer.Add(itemVal,0,WACV)
    1261                 itemRef = wx.CheckBox(G2frame.dataDisplay,wx.ID_ANY,label=' Refine?')
    1262                 itemRef.SetValue(bool(insRef[item]))
    1263                 RefObj[itemRef.GetId()] = item
    1264                 itemRef.Bind(wx.EVT_CHECKBOX, OnItemRef)
    1265                 instSizer.Add(itemRef,0,WACV)
    1266         else:                                   #time of flight (neutrons)
    1267             topSizer.Add(wx.StaticText(G2frame.dataDisplay,-1,' Azimuth: %7.2f'%(insVal['Azimuth'])),0,WACV)
    1268             topSizer.Add(wx.StaticText(G2frame.dataDisplay,-1,' 2-theta: %7.2f'%(insVal['2-theta'])),0,WACV)
    1269             if 'Pdabc' in Inst2:
    1270                 Items = ['sig-0','sig-1','X','Y']
    1271                 topSizer.Add(wx.StaticText(G2frame.dataDisplay,-1,' difC: %8.2f'%(insVal['difC'])),0,WACV)
    1272                 topSizer.Add(wx.StaticText(G2frame.dataDisplay,-1,' alpha, beta: fixed by table'),0,WACV)
    1273             else:
    1274                 Items = ['difC','difA','Zero','alpha','beta-0','beta-1','beta-q','sig-0','sig-1','sig-q','X','Y']
    1275             for item in Items:
    1276                 fmt = '%10.3f'
    1277                 if 'beta' in item:
    1278                     fmt = '%12.4g'
    1279                 Fmt = ' %s: ('+fmt+')'
    1280                 instSizer.Add(wx.StaticText(G2frame.dataDisplay,-1,Fmt%(item,insDef[item])),
    1281                         0,WACV)
    1282                 itemVal = wx.TextCtrl(G2frame.dataDisplay,wx.ID_ANY,fmt%(insVal[item]),style=wx.TE_PROCESS_ENTER)
    1283                 ValObj[itemVal.GetId()] = [item,fmt]
    1284                 itemVal.Bind(wx.EVT_TEXT_ENTER,OnItemValue)
    1285                 itemVal.Bind(wx.EVT_KILL_FOCUS,OnItemValue)
    1286                 instSizer.Add(itemVal,0,WACV)
    1287                 if not ifHisto and item in ['difC','difA','Zero',]:
    1288                     instSizer.Add((5,5),0)
    1289                 else:
    1290                     itemRef = wx.CheckBox(G2frame.dataDisplay,wx.ID_ANY,label=' Refine?')
    1291                     itemRef.SetValue(bool(insRef[item]))
    1292                     RefObj[itemRef.GetId()] = item
    1293                     itemRef.Bind(wx.EVT_CHECKBOX, OnItemRef)
    1294                     instSizer.Add(itemRef,0,WACV)
    1295        
    1296     elif 'S' in insVal['Type']:                       #single crystal data
    1297         if 'C' in insVal['Type']:               #constant wavelength
    1298             instSizer.Add(wx.StaticText(G2frame.dataDisplay,-1,u' Lam (\xc5): (%10.6f)'%(insDef['Lam'])),
    1299                 0,WACV)
    1300             waveVal = wx.TextCtrl(G2frame.dataDisplay,wx.ID_ANY,'%10.6f'%(insVal['Lam']),style=wx.TE_PROCESS_ENTER)
    1301             waveVal.Bind(wx.EVT_TEXT_ENTER,OnWaveValue)
    1302             waveVal.Bind(wx.EVT_KILL_FOCUS,OnWaveValue)
    1303             instSizer.Add(waveVal,0,WACV)
    1304         else:                                   #time of flight (neutrons)
    1305             pass                                #for now
    1306     elif 'L' in insVal['Type']:
    1307         if 'C' in insVal['Type']:       
    1308             instSizer.Add(wx.StaticText(G2frame.dataDisplay,-1,u' Lam (\xc5): (%10.6f)'%(insDef['Lam'])),
    1309                 0,WACV)
    1310             waveVal = wx.TextCtrl(G2frame.dataDisplay,wx.ID_ANY,'%10.6f'%(insVal['Lam']),style=wx.TE_PROCESS_ENTER)
    1311             waveVal.Bind(wx.EVT_TEXT_ENTER,OnWaveValue)
    1312             waveVal.Bind(wx.EVT_KILL_FOCUS,OnWaveValue)
    1313             instSizer.Add(waveVal,0,WACV)
    1314             instSizer.Add(wx.StaticText(G2frame.dataDisplay,-1,'  Azimuth: %7.2f'%(insVal['Azimuth'])),0,WACV)
    1315         else:                                   #time of flight (neutrons)
    1316             pass                                #for now
    1317        
    1318     mainSizer = wx.BoxSizer(wx.VERTICAL)
    1319     mainSizer.Add(topSizer,0)
    1320     mainSizer.Add(instSizer,0)
    1321     mainSizer.Layout()   
    1322     G2frame.dataDisplay.SetSizer(mainSizer)
    1323     G2frame.dataFrame.setSizePosLeft(mainSizer.Fit(G2frame.dataFrame))
     1353        #G2frame.Bind(wx.EVT_MENU,OnWaveChange,id=G2gd.wxID_CHANGEWAVETYPE)       
     1354        G2frame.Bind(wx.EVT_MENU,OnCopy1Val,id=G2gd.wxID_INST1VAL)
     1355    MakeParameterWindow()
     1356       
    13241357   
    13251358################################################################################
     
    15581591        wx.CallAfter(UpdateSampleGrid,G2frame,data)
    15591592
     1593    def OnCopy1Val(event):
     1594        'Select one value to copy to many histograms and optionally allow values to be edited in a table'
     1595        G2gd.SelectEdit1Var(G2frame,data,labelLst,elemKeysLst,dspLst,refFlgElem)
     1596        wx.CallAfter(UpdateSampleGrid,G2frame,data)
     1597       
    15601598    ######## DEBUG #######################################################
    15611599    #import GSASIIpwdGUI
     
    15741612    G2frame.Bind(wx.EVT_MENU, OnSampleSave, id=G2gd.wxID_SAMPLESAVE)
    15751613    G2frame.Bind(wx.EVT_MENU, OnSampleLoad, id=G2gd.wxID_SAMPLELOAD)
     1614    G2frame.Bind(wx.EVT_MENU, OnCopy1Val, id=G2gd.wxID_SAMPLE1VAL)
    15761615    if 'SASD' in histName:
    15771616        G2frame.dataFrame.SetScale.Enable(True)
     
    16091648    if 'SlitLen' not in data and 'SASD' in histName:
    16101649        data['SlitLen'] = 0.0
     1650    data['InstrName'] = data.get('InstrName','')
    16111651#patch end
    1612    
     1652    labelLst,elemKeysLst,dspLst,refFlgElem = [],[],[],[]
    16131653    parms = SetupSampleLabels(histName,data.get('Type'))
    16141654    mainSizer = wx.BoxSizer(wx.VERTICAL)
     
    16221662                0,WACV)
    16231663    nameSizer.Add((-1,-1),1,wx.EXPAND,1)
    1624     instNameVal = wx.TextCtrl(G2frame.dataDisplay,wx.ID_ANY,data.get('InstrName',''),
     1664    instNameVal = wx.TextCtrl(G2frame.dataDisplay,wx.ID_ANY,data['InstrName'],
    16251665                              size=(200,-1),style=wx.TE_PROCESS_ENTER)       
    16261666    nameSizer.Add(instNameVal)
     
    16281668    mainSizer.Add(nameSizer,0,wx.EXPAND,1)
    16291669    mainSizer.Add((5,5),0)
     1670    labelLst.append('Instrument Name')
     1671    elemKeysLst.append(['InstrName'])
     1672    dspLst.append(None)
     1673    refFlgElem.append(None)
    16301674
    16311675    if 'PWDR' in histName:
     
    16431687    parmSizer = wx.FlexGridSizer(0,2,5,0)
    16441688    for key,lbl,nDig in parms:
     1689        labelLst.append(lbl.strip().strip(':').strip())
     1690        dspLst.append(nDig)
    16451691        if 'list' in str(type(data[key])):
    16461692            parmRef = G2gd.G2CheckBox(G2frame.dataDisplay,' '+lbl,data[key],1)
     
    16481694            parmVal = G2gd.ValidatedTxtCtrl(G2frame.dataDisplay,data[key],0,
    16491695                nDig=nDig,typeHint=float,OnLeave=AfterChange)
     1696            elemKeysLst.append([key,0])
     1697            refFlgElem.append([key,1])
    16501698        else:
    16511699            parmSizer.Add(wx.StaticText(G2frame.dataDisplay,label=' '+lbl),
     
    16531701            parmVal = G2gd.ValidatedTxtCtrl(G2frame.dataDisplay,data,key,
    16541702                typeHint=float,OnLeave=AfterChange)
     1703            elemKeysLst.append([key])
     1704            refFlgElem.append(None)
    16551705        parmSizer.Add(parmVal,1,wx.EXPAND)
    16561706    Info = {}
     
    16631713        parmVal = G2gd.ValidatedTxtCtrl(G2frame.dataDisplay,data,key,typeHint=float)
    16641714        parmSizer.Add(parmVal,1,wx.EXPAND)
     1715        labelLst.append(Controls[key])
     1716        dspLst.append(None)
     1717        elemKeysLst.append([key])
     1718        refFlgElem.append(None)
     1719       
    16651720    mainSizer.Add(parmSizer,1,wx.EXPAND)
    16661721    mainSizer.Add((0,5),0)   
Note: See TracChangeset for help on using the changeset viewer.