Changeset 1265


Ignore:
Timestamp:
Mar 27, 2014 9:28:08 PM (8 years ago)
Author:
toby
Message:

reorg histogram copy routines to only offer appropriate histogram choices; add a global copy that does all sections

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASIIgrid.py

    r1263 r1265  
    6666] = [wx.NewId() for item in range(15)]
    6767
    68 [ wxID_PWDRADD, wxID_HKLFADD,wxID_PWDANALYSIS,wxID_DATADELETE,
    69 ] = [wx.NewId() for item in range(4)]
     68[ wxID_PWDRADD, wxID_HKLFADD, wxID_PWDANALYSIS, wxID_PWDCOPY, wxID_DATADELETE,
     69] = [wx.NewId() for item in range(5)]
    7070
    7171[ wxID_ATOMSEDITADD, wxID_ATOMSEDITINSERT, wxID_ATOMSEDITDELETE, wxID_ATOMSREFINE,
     
    14331433        Sizer = wx.BoxSizer(wx.VERTICAL)
    14341434        topSizer = wx.BoxSizer(wx.HORIZONTAL)
    1435         topSizer.Add(wx.StaticText(self,wx.ID_ANY,title,size=(-1,30)),1,wx.ALL|wx.EXPAND,1)
     1435        topSizer.Add(wx.StaticText(self,wx.ID_ANY,title,size=(-1,35)),1,wx.ALL|wx.EXPAND,1)
    14361436        if filterBox:
    14371437            self.timer = wx.Timer()
     
    24532453        self.PostfillDataMenu()
    24542454           
    2455         # PDR
    2456         self.ErrorMenu = wx.MenuBar()
    2457         self.PrefillDataMenu(self.ErrorMenu,helpType='PWD Analysis',helpLbl='Powder Fit Error Analysis')
     2455        # Powder
     2456        self.HistMenu = wx.MenuBar()
     2457        self.PrefillDataMenu(self.HistMenu,helpType='PWD Analysis',helpLbl='Powder Fit Error Analysis')
    24582458        self.ErrorAnal = wx.Menu(title='')
    2459         self.ErrorMenu.Append(menu=self.ErrorAnal,title='Analysis')
    2460         self.ErrorAnal.Append(id=wxID_PWDANALYSIS,kind=wx.ITEM_NORMAL,text='Analyze',
     2459        self.HistMenu.Append(menu=self.ErrorAnal,title='Commands')
     2460        self.ErrorAnal.Append(id=wxID_PWDANALYSIS,kind=wx.ITEM_NORMAL,text='Error Analysis',
     2461            help='Error analysis on powder pattern')
     2462        self.ErrorAnal.Append(id=wxID_PWDCOPY,kind=wx.ITEM_NORMAL,text='Copy params',
    24612463            help='Error analysis on powder pattern')
    24622464        self.PostfillDataMenu()
     
    36823684        data[0]['wtFactor'] = val
    36833685        wtval.SetValue('%.3f'%(val))
     3686
     3687    def onCopySelectedItems(event):
     3688        '''Respond to menu item to copy multiple sections from a histogram.
     3689        Need this here to pass on the G2frame object.
     3690        '''
     3691        G2pdG.CopySelectedHistItems(G2frame)
    36843692           
    36853693    data = G2frame.PatternTree.GetItemPyData(item)
     
    36973705    if G2frame.dataDisplay:
    36983706        G2frame.dataDisplay.Destroy()
    3699     SetDataMenuBar(G2frame,G2frame.dataFrame.ErrorMenu)
    3700     G2frame.dataFrame.Bind(wx.EVT_MENU,OnErrorAnalysis, id=wxID_PWDANALYSIS)
     3707    SetDataMenuBar(G2frame,G2frame.dataFrame.HistMenu)
     3708    G2frame.dataFrame.Bind(wx.EVT_MENU, OnErrorAnalysis, id=wxID_PWDANALYSIS)
     3709    G2frame.dataFrame.Bind(wx.EVT_MENU, onCopySelectedItems, id=wxID_PWDCOPY)
    37013710    G2frame.dataDisplay = wx.Panel(G2frame.dataFrame)
    37023711   
  • trunk/GSASIIpwdGUI.py

    r1263 r1265  
    100100    'Fills in default items for the SASD Substances dictionary'
    101101    return {'Substances':{'vacuum':{'Elements':{},'Volume':1.0,'Density':0.0,'Scatt density':0.0}}}
     102
     103def GetHistsLikeSelected(G2frame):
     104    '''Get the histograms that match the current selected one:
     105    The histogram prefix and data type (PXC etc.), the number of
     106    wavelengths and the instrument geometry (Debye-Scherrer etc.)
     107    must all match. The current histogram is not included in the list.
     108
     109    :param wx.Frame G2frame: pointer to main GSAS-II data tree
     110    '''
     111    histList = []
     112    inst,inst2 = G2frame.PatternTree.GetItemPyData(
     113        G2gd.GetPatternTreeItemId(
     114            G2frame,G2frame.PatternId, 'Instrument Parameters')
     115        )
     116    hType = inst['Type'][0]
     117    if 'Lam1' in inst:
     118        hLam = 2
     119    elif 'Lam' in inst:
     120        hLam = 1
     121    else:
     122        hLam = 0
     123    sample = G2frame.PatternTree.GetItemPyData(
     124        G2gd.GetPatternTreeItemId(
     125            G2frame,G2frame.PatternId, 'Sample Parameters')
     126        )
     127    hGeom = sample.get('Type')
     128    hstName = G2frame.PatternTree.GetItemText(G2frame.PatternId)
     129    hPrefix = hstName.split()[0]+' '
     130    # cycle through tree looking for items that match the above
     131    item, cookie = G2frame.PatternTree.GetFirstChild(G2frame.root)       
     132    while item:
     133        name = G2frame.PatternTree.GetItemText(item)
     134        if name.startswith(hPrefix) and name != hstName:
     135            cGeom,cType,cLam, = '?','?',-1
     136            subitem, subcookie = G2frame.PatternTree.GetFirstChild(item)
     137            while subitem:
     138                subname = G2frame.PatternTree.GetItemText(subitem)
     139                if subname == 'Sample Parameters':
     140                    sample = G2frame.PatternTree.GetItemPyData(subitem)
     141                    cGeom = sample.get('Type')
     142                elif subname == 'Instrument Parameters':
     143                    inst,inst2 = G2frame.PatternTree.GetItemPyData(subitem)
     144                    cType = inst['Type'][0]
     145                    if 'Lam1' in inst:
     146                        cLam = 2
     147                    elif 'Lam' in inst:
     148                        cLam = 1
     149                    else:
     150                        cLam = 0
     151                subitem, subcookie = G2frame.PatternTree.GetNextChild(item, subcookie)
     152            if cLam == hLam and cType == hType and cGeom == hGeom:
     153                if name not in histList: histList.append(name)
     154        item, cookie = G2frame.PatternTree.GetNextChild(G2frame.root, cookie)
     155    return histList
     156
     157def SetCopyNames(histName,dataType,addNames=[]):
     158    '''Determine the items in the sample parameters that should be copied,
     159    depending on the histogram type and the instrument type.
     160    '''
     161    copyNames = ['Scale',]
     162    histType = 'HKLF'
     163    if 'PWDR' in histName:
     164        histType = 'PWDR'
     165        if 'Debye' in dataType:
     166            copyNames += ['DisplaceX','DisplaceY','Absorption']
     167        else:       #Bragg-Brentano
     168            copyNames += ['Shift','Transparency','SurfRoughA','SurfRoughB']
     169    elif 'SASD' in histName:
     170        histType = 'SASD'
     171        copyNames += ['Materials','Thick',]
     172    if len(addNames):
     173        copyNames += addNames
     174    return histType,copyNames
     175
     176def CopySelectedHistItems(G2frame):
     177    '''Global copy: Copy items from current histogram to others.
     178    This is called from the menubar and is available only when the top histogram tree entry
     179    is selected.
     180    '''
     181    hst = G2frame.PatternTree.GetItemText(G2frame.PatternId)
     182    histList = GetHistsLikeSelected(G2frame)
     183    if not histList:
     184        G2frame.ErrorDialog('No match','No histograms match '+hst,G2frame.dataFrame)
     185        return
     186    choices = ['Limits','Background','Instrument Parameters','Sample Parameters']
     187    dlg = G2gd.G2MultiChoiceDialog(
     188        G2frame.dataFrame,
     189        'Copy which histogram sections from\n'+str(hst[5:]),
     190        'Select copy sections', choices, filterBox=False)
     191    dlg.SetSelections(range(len(choices)))
     192    if dlg.ShowModal() == wx.ID_OK:
     193        sections = dlg.GetSelections()
     194    else:
     195        sections = []
     196    if not sections: return
     197   
     198    dlg = G2gd.G2MultiChoiceDialog(
     199        G2frame.dataFrame,
     200        'Copy parameters from\n'+str(hst[5:])+' to...',
     201        'Copy parameters', histList)
     202    results = []
     203    try:
     204        if dlg.ShowModal() == wx.ID_OK:
     205            results = dlg.GetSelections()
     206    finally:
     207        dlg.Destroy()
     208    copyList = []
     209    for i in results:
     210        copyList.append(histList[i])
     211
     212    if 0 in sections: # Limits
     213        data = G2frame.PatternTree.GetItemPyData(
     214            G2gd.GetPatternTreeItemId(G2frame,G2frame.PatternId,'Limits'))
     215        for item in copyList:
     216            Id = G2gd.GetPatternTreeItemId(G2frame,G2frame.root,item)
     217            G2frame.PatternTree.SetItemPyData(
     218                G2gd.GetPatternTreeItemId(G2frame,Id,'Limits'),
     219                copy.deepcopy(data))
     220    if 1 in sections:  # Background
     221        data = G2frame.PatternTree.GetItemPyData(
     222            G2gd.GetPatternTreeItemId(G2frame,G2frame.PatternId,'Background'))
     223        for item in copyList:
     224            Id = G2gd.GetPatternTreeItemId(G2frame,G2frame.root,item)
     225            G2frame.PatternTree.SetItemPyData(
     226                G2gd.GetPatternTreeItemId(G2frame,Id,'Background'),
     227                copy.deepcopy(data))
     228    if 2 in sections:  # Instrument Parameters
     229        # for now all items in Inst. parms are copied
     230        data,data1 = G2frame.PatternTree.GetItemPyData(
     231            G2gd.GetPatternTreeItemId(
     232                G2frame,G2frame.PatternId,'Instrument Parameters'))
     233        for item in copyList:
     234            Id = G2gd.GetPatternTreeItemId(G2frame,G2frame.root,item)
     235            G2frame.PatternTree.GetItemPyData(
     236                G2gd.GetPatternTreeItemId(G2frame,Id,'Instrument Parameters')
     237                )[0].update(copy.deepcopy(data))
     238            G2frame.PatternTree.GetItemPyData(
     239                G2gd.GetPatternTreeItemId(G2frame,Id,'Instrument Parameters')
     240                )[1].update(copy.deepcopy(data1))
     241    if 3 in sections:  # Sample Parameters
     242        data = G2frame.PatternTree.GetItemPyData(
     243            G2gd.GetPatternTreeItemId(
     244                G2frame,G2frame.PatternId,'Sample Parameters'))
     245        # selects items to be copied
     246        histType,copyNames = SetCopyNames(hst,data['Type'],
     247            addNames = ['Omega','Chi','Phi','Gonio. radius','InstrName'])
     248        copyDict = {parm:data[parm] for parm in copyNames}
     249        for item in copyList:
     250            Id = G2gd.GetPatternTreeItemId(G2frame,G2frame.root,item)
     251            G2frame.PatternTree.GetItemPyData(
     252                G2gd.GetPatternTreeItemId(G2frame,Id,'Sample Parameters')
     253                ).update(copy.deepcopy(copyDict))
    102254                         
    103255################################################################################
     
    387539            for term in backDict['peaksList']:
    388540                PKflags.append(term[1::2])           
    389         histList = ['All',]+G2gd.GetPatternTreeDataNames(G2frame,['PWDR',])
     541        hst = G2frame.PatternTree.GetItemText(G2frame.PatternId)
     542        histList = GetHistsLikeSelected(G2frame)
     543        if not histList:
     544            G2frame.ErrorDialog('No match','No histograms match '+hst,G2frame.dataFrame)
     545            return
     546        dlg = G2gd.G2MultiChoiceDialog(
     547            G2frame.dataFrame,
     548            'Copy bkg ref. flags from\n'+str(hst[5:])+' to...',
     549            'Copy flags', histList)
    390550        copyList = []
    391         dlg = wx.MultiChoiceDialog(G2frame,
    392             'Copy refinement flags to which histograms?', 'Copy flags',
    393             histList, wx.CHOICEDLG_STYLE)
    394551        try:
    395552            if dlg.ShowModal() == wx.ID_OK:
    396                 result = dlg.GetSelections()
    397                 for i in result:
     553                for i in dlg.GetSelections():
    398554                    copyList.append(histList[i])
    399                 if 'All' in copyList:
    400                     copyList = histList[1:]
    401             for item in copyList:
    402                 Id = G2gd.GetPatternTreeItemId(G2frame,G2frame.root,item)
    403                 backData = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,Id,'Background'))
    404                 backData[0][1] = copy.copy(flag)
    405                 bkDict = backData[-1]
    406                 if bkDict['nDebye'] == backDict['nDebye']:
    407                     for i,term in enumerate(bkDict['debyeTerms']):
    408                         term[1::2] = copy.copy(DBflags[i])
    409                 if bkDict['nPeaks'] == backDict['nPeaks']:
    410                     for i,term in enumerate(bkDict['peaksList']):
    411                         term[1::2] = copy.copy(PKflags[i])                   
    412555        finally:
    413556            dlg.Destroy()
     557        for item in copyList:
     558            Id = G2gd.GetPatternTreeItemId(G2frame,G2frame.root,item)
     559            backData = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,Id,'Background'))
     560            backData[0][1] = copy.copy(flag)
     561            bkDict = backData[-1]
     562            if bkDict['nDebye'] == backDict['nDebye']:
     563                for i,term in enumerate(bkDict['debyeTerms']):
     564                    term[1::2] = copy.copy(DBflags[i])
     565            if bkDict['nPeaks'] == backDict['nPeaks']:
     566                for i,term in enumerate(bkDict['peaksList']):
     567                    term[1::2] = copy.copy(PKflags[i])                   
    414568           
    415569    def OnBackCopy(event):
    416         histList = ['All',]+G2gd.GetPatternTreeDataNames(G2frame,['PWDR',])
     570        hst = G2frame.PatternTree.GetItemText(G2frame.PatternId)
     571        histList = GetHistsLikeSelected(G2frame)
     572        if not histList:
     573            G2frame.ErrorDialog('No match','No histograms match '+hst,G2frame.dataFrame)
     574            return
    417575        copyList = []
    418         dlg = wx.MultiChoiceDialog(G2frame,
    419             'Copy parameters to which histograms?', 'Copy parameters',
    420             histList, wx.CHOICEDLG_STYLE)
     576        dlg = G2gd.G2MultiChoiceDialog(
     577            G2frame.dataFrame,
     578            'Copy bkg params from\n'+str(hst[5:])+' to...',
     579            'Copy parameters', histList)
    421580        try:
    422581            if dlg.ShowModal() == wx.ID_OK:
    423                 result = dlg.GetSelections()
    424                 for i in result:
     582                for i in dlg.GetSelections():
    425583                    copyList.append(histList[i])
    426                 if 'All' in copyList:
    427                     copyList = histList[1:]
    428             for item in copyList:
    429                 Id = G2gd.GetPatternTreeItemId(G2frame,G2frame.root,item)
    430                 G2frame.PatternTree.SetItemPyData(G2gd.GetPatternTreeItemId(G2frame,Id,'Background'),
    431                     copy.copy(data))
    432584        finally:
    433585            dlg.Destroy()
     586        for item in copyList:
     587            Id = G2gd.GetPatternTreeItemId(G2frame,G2frame.root,item)
     588            G2frame.PatternTree.SetItemPyData(
     589                G2gd.GetPatternTreeItemId(G2frame,Id,'Background'),copy.copy(data))
    434590       
    435591    def BackSizer():
     
    672828       
    673829    def OnLimitCopy(event):
    674         histList = ['All',]+G2gd.GetPatternTreeDataNames(G2frame,['PWDR','SASD',])
     830        hst = G2frame.PatternTree.GetItemText(G2frame.PatternId)
     831        histList = GetHistsLikeSelected(G2frame)
     832        if not histList:
     833            G2frame.ErrorDialog('No match','No histograms match '+hst,G2frame.dataFrame)
     834            return
    675835        copyList = []
    676         dlg = wx.MultiChoiceDialog(G2frame,
    677             'Copy limits to which histograms?', 'Copy limits',
    678             histList, wx.CHOICEDLG_STYLE)
     836        dlg = G2gd.G2MultiChoiceDialog(
     837            G2frame.dataFrame,
     838            'Copy limits from\n'+str(hst[5:])+' to...',
     839            'Copy limits', histList)
    679840        try:
    680841            if dlg.ShowModal() == wx.ID_OK:
    681                 result = dlg.GetSelections()
    682                 for i in result:
    683                     copyList.append(histList[i])
    684                 if 'All' in copyList:
    685                     copyList = histList[1:]
    686             for item in copyList:
    687                 Id = G2gd.GetPatternTreeItemId(G2frame,G2frame.root,item)
    688                 G2frame.PatternTree.SetItemPyData(G2gd.GetPatternTreeItemId(G2frame,Id,'Limits'),
    689                     copy.copy(data))
     842                for i in dlg.GetSelections():
     843                    item = histList[i]
     844                    Id = G2gd.GetPatternTreeItemId(G2frame,G2frame.root,item)
     845                    G2frame.PatternTree.SetItemPyData(
     846                        G2gd.GetPatternTreeItemId(G2frame,Id,'Limits'),copy.copy(data))
    690847        finally:
    691848            dlg.Destroy()
     
    8441001       
    8451002    def OnInstFlagCopy(event):
    846         histName = G2frame.PatternTree.GetItemText(G2frame.PatternId)
     1003        hst = G2frame.PatternTree.GetItemText(G2frame.PatternId)
     1004        histList = GetHistsLikeSelected(G2frame)
     1005        if not histList:
     1006            G2frame.ErrorDialog('No match','No histograms match '+hst,G2frame.dataFrame)
     1007            return
    8471008        keys = data.keys()
    8481009        flags = dict(zip(keys,[data[key][2] for key in keys]))
    8491010        instType = data['Type'][0]
    850         histList = ['All',]+G2gd.GetPatternTreeDataNames(G2frame,['PWDR',])
    8511011        copyList = []
    852         dlg = wx.MultiChoiceDialog(G2frame,
    853             'Copy refinement flags from\n'+histName, 'Copy refinement flags',
    854             histList, wx.CHOICEDLG_STYLE)
     1012        dlg = G2gd.G2MultiChoiceDialog(
     1013            G2frame.dataFrame,
     1014            'Copy inst ref. flags from\n'+hst[5:],
     1015            'Copy refinement flags', histList)
    8551016        try:
    8561017            if dlg.ShowModal() == wx.ID_OK:
    857                 result = dlg.GetSelections()
    858                 for i in result:
     1018                for i in dlg.GetSelections():
    8591019                    copyList.append(histList[i])
    860                 if 'All' in copyList:
    861                     copyList = histList[1:]
    862             for item in copyList:
    863                 Id = G2gd.GetPatternTreeItemId(G2frame,G2frame.root,item)
    864                 instData = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,Id,'Instrument Parameters'))[0]
    865                 if len(data) == len(instData) and instType == instData['Type'][0]:   #don't mix data types or lam & lam1/lam2 parms!
    866                     for item in instData:
    867                         instData[item][2] = copy.copy(flags[item])
    868                 else:
    869                     print item+' not copied - instrument parameters not commensurate'
    8701020        finally:
    8711021            dlg.Destroy()
     1022        for item in copyList:
     1023            Id = G2gd.GetPatternTreeItemId(G2frame,G2frame.root,item)
     1024            instData = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,Id,'Instrument Parameters'))[0]
     1025            if len(data) == len(instData) and instType == instData['Type'][0]:   #don't mix data types or lam & lam1/lam2 parms!
     1026                for item in instData:
     1027                    instData[item][2] = copy.copy(flags[item])
     1028            else:
     1029                print item+' not copied - instrument parameters not commensurate'
    8721030       
    8731031    def OnInstCopy(event):
    8741032        #need fix for dictionary
    875         histName = G2frame.PatternTree.GetItemText(G2frame.PatternId)
    876         histList = ['All',]+G2gd.GetPatternTreeDataNames(G2frame,['PWDR',])
     1033        hst = G2frame.PatternTree.GetItemText(G2frame.PatternId)
     1034        histList = GetHistsLikeSelected(G2frame)
     1035        if not histList:
     1036            G2frame.ErrorDialog('No match','No histograms match '+hst,G2frame.dataFrame)
     1037            return
    8771038        copyList = []
    8781039        instType = data['Type'][0]
    879         dlg = wx.MultiChoiceDialog(G2frame,
    880             'Copy parameters from\n'+histName, 'Copy parameters',
    881             histList, wx.CHOICEDLG_STYLE)
     1040        dlg = G2gd.G2MultiChoiceDialog(
     1041            G2frame.dataFrame,
     1042            'Copy inst params from\n'+hst,
     1043            'Copy parameters', histList)
    8821044        try:
    8831045            if dlg.ShowModal() == wx.ID_OK:
    884                 result = dlg.GetSelections()
    885                 for i in result:
     1046                for i in dlg.GetSelections():
    8861047                    copyList.append(histList[i])
    887                 if 'All' in copyList:
    888                     copyList = histList[1:]
    889             for item in copyList:
    890                 Id = G2gd.GetPatternTreeItemId(G2frame,G2frame.root,item)
    891                 instData = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,Id,'Instrument Parameters'))[0]
    892                 if len(data) == len(instData) and instType == instData['Type'][0]:  #don't mix data types or lam & lam1/lam2 parms!
    893                     instData.update(data)
    894                 else:
    895                     print item+' not copied - instrument parameters not commensurate'
    8961048        finally:
    8971049            dlg.Destroy()
     1050        for item in copyList:
     1051            Id = G2gd.GetPatternTreeItemId(G2frame,G2frame.root,item)
     1052            instData = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,Id,'Instrument Parameters'))[0]
     1053            if len(data) == len(instData) and instType == instData['Type'][0]:  #don't mix data types or lam & lam1/lam2 parms!
     1054                instData.update(data)
     1055            else:
     1056                print item+' not copied - instrument parameters not commensurate'
    8981057       
    8991058    def OnWaveChange(event):
     
    11371296    data tree item.
    11381297    '''
    1139                                                        
    1140     def SetCopyNames(histName,addNames=[]):
    1141         copyNames = ['Scale',]
    1142         dataType = data['Type']
    1143         histType = 'HKLF'
    1144         if 'PWDR' in histName:
    1145             histType = 'PWDR'
    1146             if 'Debye' in dataType:
    1147                 copyNames += ['DisplaceX','DisplaceY','Absorption']
    1148             else:       #Bragg-Brentano
    1149                 copyNames += ['Shift','Transparency','SurfRoughA','SurfRoughB']
    1150         elif 'SASD' in histName:
    1151             histType = 'SASD'
    1152             copyNames += ['Materials','Thick',]
    1153         if len(addNames):
    1154          copyNames += addNames
    1155         return histType,copyNames
    1156        
     1298
    11571299    def OnSampleSave(event):
    11581300        '''Respond to the Sample Parameters Operations/Save menu
     
    12351377       
    12361378    def OnSampleCopy(event):
    1237         histType,copyNames = SetCopyNames(histName,
     1379        histType,copyNames = SetCopyNames(histName,data['Type'],
    12381380            addNames = ['Omega','Chi','Phi','Gonio. radius','InstrName'])
    12391381        copyDict = {}
    12401382        for parm in copyNames:
    12411383            copyDict[parm] = data[parm]
    1242         histList = ['All '+histType,]
    1243         AllList = {}
    1244         item, cookie = G2frame.PatternTree.GetFirstChild(G2frame.root)
    1245         while item:
    1246             name = G2frame.PatternTree.GetItemText(item)
    1247             if histType in name and name != histName:
    1248                 allname = name.split(' Azm=')[0]
    1249                 if allname in AllList:
    1250                     AllList[allname] += 1
    1251                 else:
    1252                     AllList[allname] = 1
    1253                 histList.append(name)
    1254             item, cookie = G2frame.PatternTree.GetNextChild(G2frame.root, cookie)
    1255         if len(histList) == 1:      #nothing to copy to!
     1384        hst = G2frame.PatternTree.GetItemText(G2frame.PatternId)
     1385        histList = GetHistsLikeSelected(G2frame)
     1386        if not histList:
     1387            G2frame.ErrorDialog('No match','No histograms match '+hst,G2frame.dataFrame)
    12561388            return
    1257         nAll = 0
    1258         AllNames = AllList.keys()
    1259         AllNames.sort()
    1260         for allname in AllNames:
    1261             if AllList[allname] > 1:
    1262                 histList.insert(1+nAll,'All '+allname)
    1263                 nAll += 1
    1264         copyList = []
    1265         dlg = wx.MultiChoiceDialog(G2frame,'Copy parameters from\n'+histName,
    1266             'Copy parameters',histList,wx.CHOICEDLG_STYLE)
     1389        dlg = G2gd.G2MultiChoiceDialog(
     1390            G2frame.dataFrame,
     1391            'Copy sample params from\n'+str(hst[5:])+' to...',
     1392            'Copy sample parameters', histList)
    12671393        try:
    12681394            if dlg.ShowModal() == wx.ID_OK:
    12691395                result = dlg.GetSelections()
    12701396                for i in result:
    1271                     copyList.append(histList[i])
    1272                 for allname in AllList:
    1273                     if 'All '+allname in copyList:
    1274                         copyList = []
    1275                         for name in histList:
    1276                             if name.split(' Azm=')[0] == allname:
    1277                                 copyList.append(name)
    1278                         break       #only one All allowed
    1279                 if 'All '+histType in copyList:
    1280                     copyList = histList[1+nAll:]
    1281             for item in copyList:
    1282                 Id = G2gd.GetPatternTreeItemId(G2frame,G2frame.root,item)
    1283                 sampleData = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,Id,'Sample Parameters'))
    1284                 sampleData.update(copy.deepcopy(copyDict))
     1397                    item = histList[i]
     1398                    Id = G2gd.GetPatternTreeItemId(G2frame,G2frame.root,item)
     1399                    sampleData = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,Id,'Sample Parameters'))
     1400                    sampleData.update(copy.deepcopy(copyDict))
    12851401        finally:
    12861402            dlg.Destroy()
    12871403
    12881404    def OnSampleFlagCopy(event):
    1289         histType,copyNames = SetCopyNames(histName)
     1405        histType,copyNames = SetCopyNames(histName,data['Type'])
    12901406        flagDict = {}
    12911407        for parm in copyNames:
    12921408            flagDict[parm] = data[parm][1]
    1293         histList = ['All '+histType,]
    1294         item, cookie = G2frame.PatternTree.GetFirstChild(G2frame.root)
    1295         while item:
    1296             name = G2frame.PatternTree.GetItemText(item)
    1297             if histType in name and name != histName:
    1298                 histList.append(name)
    1299             item, cookie = G2frame.PatternTree.GetNextChild(G2frame.root, cookie)
    1300         if len(histList) == 1:      #nothing to copy to!
     1409        hst = G2frame.PatternTree.GetItemText(G2frame.PatternId)
     1410        histList = GetHistsLikeSelected(G2frame)
     1411        if not histList:
     1412            G2frame.ErrorDialog('No match','No histograms match '+hst,G2frame.dataFrame)
    13011413            return
    1302         copyList = []
    1303         dlg = wx.MultiChoiceDialog(G2frame,'Copy parameters from\n'+histName,
    1304             'Copy refinement flags',histList,wx.CHOICEDLG_STYLE)
     1414        dlg = G2gd.G2MultiChoiceDialog(
     1415            G2frame.dataFrame,
     1416            'Copy sample ref. flags from\n'+str(hst[5:])+' to...',
     1417            'Copy sample flags', histList)
    13051418        try:
    13061419            if dlg.ShowModal() == wx.ID_OK:
    13071420                result = dlg.GetSelections()
    13081421                for i in result:
    1309                     copyList.append(histList[i])
    1310                 if 'All '+histType in copyList:
    1311                     copyList = histList[1:]
    1312             for item in copyList:
    1313                 Id = G2gd.GetPatternTreeItemId(G2frame,G2frame.root,item)
    1314                 sampleData = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,Id,'Sample Parameters'))
    1315                 for name in copyNames:
    1316                     sampleData[name][1] = copy.copy(flagDict[name])
     1422                    item = histList[i]
     1423                    Id = G2gd.GetPatternTreeItemId(G2frame,G2frame.root,item)
     1424                    sampleData = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,Id,'Sample Parameters'))
     1425                    for name in copyNames:
     1426                        sampleData[name][1] = copy.copy(flagDict[name])
    13171427        finally:
    13181428            dlg.Destroy()
     
    22322342       
    22332343    def OnCopySubstance(event):
    2234         histList = ['All',]+G2gd.GetPatternTreeDataNames(G2frame,['SASD',])
     2344        hst = G2frame.PatternTree.GetItemText(G2frame.PatternId)
     2345        histList = GetHistsLikeSelected(G2frame)
     2346        if not histList:
     2347            G2frame.ErrorDialog('No match','No histograms match '+hst,G2frame.dataFrame)
     2348            return
    22352349        copyList = []
    2236         dlg = wx.MultiChoiceDialog(G2frame,
    2237             'Copy substances to which histograms?', 'Copy substances',
    2238             histList, wx.CHOICEDLG_STYLE)
     2350        dlg = G2gd.G2MultiChoiceDialog(
     2351            G2frame.dataFrame,
     2352            'Copy substances from\n'+hst[5:]+' to...',
     2353            'Copy substances', histList)
    22392354        try:
    22402355            if dlg.ShowModal() == wx.ID_OK:
    2241                 result = dlg.GetSelections()
    2242                 for i in result:
     2356                for i in dlg.GetSelections():
    22432357                    copyList.append(histList[i])
    2244                 if 'All' in copyList:
    2245                     copyList = histList[1:]
    2246             for item in copyList:
    2247                 Id = G2gd.GetPatternTreeItemId(G2frame,G2frame.root,item)
    2248                 G2frame.PatternTree.SetItemPyData(G2gd.GetPatternTreeItemId(G2frame,Id,'Substances'),
    2249                     copy.copy(data))
    22502358        finally:
    22512359            dlg.Destroy()       
     2360        for item in copyList:
     2361            Id = G2gd.GetPatternTreeItemId(G2frame,G2frame.root,item)
     2362            G2frame.PatternTree.SetItemPyData(G2gd.GetPatternTreeItemId(G2frame,Id,'Substances'),
     2363                copy.copy(data))
    22522364   
    22532365    def OnAddSubstance(event):
Note: See TracChangeset for help on using the changeset viewer.