Changeset 406


Ignore:
Timestamp:
Nov 2, 2011 1:11:04 PM (10 years ago)
Author:
vondreele
Message:

implement background subtraction during image integration
implement copy for instrument parms & background
continue constraint GUI development
make sure proper updates in refinement/seq refinement

Location:
trunk
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASII.py

    r404 r406  
    502502                            Data['fullIntegrate'] = False
    503503                            Data['setRings'] = False
     504                            Data['background image'] = ['',1.0]                           
    504505                        Data['setDefault'] = False
    505506                        Data['range'] = [(Imin,Imax),[Imin,Imax]]
     
    564565        if not G2gd.GetPatternTreeItemId(self,self.root,'Constraints'):
    565566            sub = self.PatternTree.AppendItem(parent=self.root,text='Constraints')
    566             self.PatternTree.SetItemPyData(sub,{})
     567            self.PatternTree.SetItemPyData(sub,{'Hist':[],'HAP':[],'Phase':[]})
    567568        if not G2gd.GetPatternTreeItemId(self,self.root,'Restraints'):
    568569            sub = self.PatternTree.AppendItem(parent=self.root,text='Restraints')
     
    643644                dataGridSizer.Add(scale,0,wx.LEFT,10)
    644645                dataGridSizer.Add(name,0,wx.RIGHT,10)
    645             dataGridSizer.Add(wx.StaticText(panel,-1,'Sum result name: '+dataType),0, \
    646                 wx.LEFT|wx.TOP|wx.ALIGN_CENTER_VERTICAL,10)
    647             self.name = wx.TextCtrl(panel,-1,self.data[-1],size=wx.Size(200,20),style=wx.TE_PROCESS_ENTER)
    648             self.name.Bind(wx.EVT_TEXT_ENTER,self.OnNameChange)
    649             self.name.Bind(wx.EVT_KILL_FOCUS,self.OnNameChange)
    650             dataGridSizer.Add(self.name,0,wx.RIGHT|wx.TOP,10)
     646            if dataType:
     647                dataGridSizer.Add(wx.StaticText(panel,-1,'Sum result name: '+dataType),0, \
     648                    wx.LEFT|wx.TOP|wx.ALIGN_CENTER_VERTICAL,10)
     649                self.name = wx.TextCtrl(panel,-1,self.data[-1],size=wx.Size(200,20),style=wx.TE_PROCESS_ENTER)
     650                self.name.Bind(wx.EVT_TEXT_ENTER,self.OnNameChange)
     651                self.name.Bind(wx.EVT_KILL_FOCUS,self.OnNameChange)
     652                dataGridSizer.Add(self.name,0,wx.RIGHT|wx.TOP,10)
    651653            mainSizer.Add(dataGridSizer,0,wx.EXPAND)
    652654            OkBtn = wx.Button(panel,-1,"Ok")
     
    15331535
    15341536    def OnSeqRefine(self,event):
    1535         self.OnFileSave(event)
    15361537        Id = G2gd.GetPatternTreeItemId(self,self.root,'Sequental results')
    1537         print Id
    15381538        if not Id:
    15391539            Id = self.PatternTree.AppendItem(self.root,text='Sequental results')
    1540             print Id
    15411540            self.PatternTree.SetItemPyData(Id,{})           
     1541        self.OnFileSave(event)
    15421542        dlg = wx.ProgressDialog('Residual for histogram 0','Powder profile Rwp =',101.0,
    15431543            style = wx.PD_ELAPSED_TIME|wx.PD_AUTO_HIDE|wx.PD_CAN_ABORT)
  • trunk/GSASIIgrid.py

    r404 r406  
    4343] = [wx.NewId() for _init_coll_PAWLEY_Items in range(4)]
    4444
    45 [ wxID_INSTPRMRESET,wxID_CHANGEWAVETYPE,
    46 ] = [wx.NewId() for _init_coll_INST_Items in range(2)]
     45[ wxID_INSTPRMRESET,wxID_CHANGEWAVETYPE,wxID_INSTCOPY,
     46] = [wx.NewId() for _init_coll_INST_Items in range(3)]
    4747
    4848[ wxID_INDXRELOAD,
     
    5454[  wxID_INDEXPEAKS, wxID_REFINECELL, wxID_COPYCELL, wxID_MAKENEWPHASE,
    5555] = [wx.NewId() for _init_coll_INDEX_Items in range(4)]
     56
     57[ wxID_BACKCOPY,
     58] = [wx.NewId() for _init_coll_Back_Items in range(1)]
    5659
    5760[ wxID_SAMPLECOPY,
     
    9699
    97100    def _init_coll_PawleyMenu(self,parent):
    98         parent.Append(menu=self.PawleyEdit,title='Pawley Reflections Operations')
     101        parent.Append(menu=self.PawleyEdit,title='Operations')
    99102     
    100103    def _init_coll_IndPeaksMenu(self,parent):
    101         parent.Append(menu=self.IndPeaksEdit,title='Index Peaks Operations')
     104        parent.Append(menu=self.IndPeaksEdit,title='Operations')
    102105                   
    103106    def _init_coll_ImageMenu(self,parent):
    104         parent.Append(menu=self.ImageEdit, title='Image Operations')
     107        parent.Append(menu=self.ImageEdit, title='Operations')
     108       
     109    def _init_coll_BackMenu(self,parent):
     110        parent.Append(menu=self.BackEdit, title='File')
    105111       
    106112    def _init_coll_InstMenu(self,parent):
    107         parent.Append(menu=self.InstEdit, title='Inst. Parm. Operations')
     113        parent.Append(menu=self.InstEdit, title='Operations')
    108114       
    109115    def _init_coll_MaskMenu(self,parent):
    110         parent.Append(menu=self.MaskEdit, title='Mask Operations')
     116        parent.Append(menu=self.MaskEdit, title='Operations')
    111117       
    112118    def _init_coll_SampleMenu(self,parent):
    113         parent.Append(menu=self.SampleEdit, title='Edit')
     119        parent.Append(menu=self.SampleEdit, title='File')
    114120       
    115121    def _init_coll_PeakMenu(self,parent):
     
    159165        parent.Append(id=wxID_SAMPLECOPY, kind=wx.ITEM_NORMAL,text='Copy',
    160166            help='Copy refinable sample parameters to other histograms')
     167                   
     168    def _init_coll_Back_Items(self,parent):
     169        parent.Append(id=wxID_BACKCOPY, kind=wx.ITEM_NORMAL,text='Copy',
     170            help='Copy background parameters to other histograms')
    161171                   
    162172    def _init_coll_Data_Items(self,parent):
     
    242252        parent.Append(help='Reset instrument profile parameters to default',
    243253            id=wxID_INSTPRMRESET, kind=wx.ITEM_NORMAL,text='Reset profile')
     254        parent.Append(help='Copy instrument profile parameters to other histograms',
     255            id=wxID_INSTCOPY, kind=wx.ITEM_NORMAL,text='Copy')       
    244256        parent.Append(help='Change radiation type (Ka12 - synch)',
    245257            id=wxID_CHANGEWAVETYPE, kind=wx.ITEM_NORMAL,text='Change radiation')
     
    296308        self.ImageMenu = wx.MenuBar()
    297309        self.MaskMenu = wx.MenuBar()
     310        self.BackMenu = wx.MenuBar()
    298311        self.InstMenu = wx.MenuBar()
    299312        self.SampleMenu = wx.MenuBar()
     
    312325        self.ImageEdit = wx.Menu(title='')
    313326        self.MaskEdit = wx.Menu(title='')
     327        self.BackEdit = wx.Menu(title='')
    314328        self.InstEdit = wx.Menu(title='')
    315329        self.SampleEdit = wx.Menu(title='')
     
    337351        self._init_coll_MaskMenu(self.MaskMenu)
    338352        self._init_coll_Mask_Items(self.MaskEdit)
     353        self._init_coll_BackMenu(self.BackMenu)
     354        self._init_coll_Back_Items(self.BackEdit)
    339355        self._init_coll_InstMenu(self.InstMenu)
    340356        self._init_coll_Inst_Items(self.InstEdit)
     
    743759               
    744760def UpdateConstraints(self,data):
     761    if not data:
     762        data.update({'Hist':[],'HAP':[],'Phase':[]})       #empty dict - fill it
    745763    Histograms,Phases = self.GetUsedHistogramsAndPhasesfromTree()
    746764    Natoms,phaseVary,phaseDict,pawleyLookup,FFtable = G2str.GetPhaseData(Phases,Print=False)       
    747765    hapVary,hapDict,controlDict = G2str.GetHistogramPhaseData(Phases,Histograms,Print=False)
    748766    histVary,histDict,controlDict = G2str.GetHistogramData(Histograms,Print=False)
     767    Indx = {}
     768    self.Page = 0
    749769   
    750770    def FindEquivVarb(name,nameList):
     
    766786        dlg.Destroy()
    767787        if len(varbs) > 1:
    768             return map(list,zip(varbs,[1.0 for i in range(len(varbs))]))
     788            return map(list,zip([1.0 for i in range(len(varbs))],varbs))
    769789        else:
    770             return [[FrstVarb,0.0],]
     790            return [[0.0,FrstVarb],]        #setup for "fix" of variable
    771791   
    772792    def OnAddConstraint(event):
     
    781801        for histogram in Histograms:
    782802            hlegend += '\n :h: = :'+str(Histograms[histogram]['hId'])+': for '+histogram
    783         page = self.dataDisplay.GetSelection()
     803        page = self.Page
    784804        if 'Histogram ' in self.dataDisplay.GetPageText(page):
    785805            dlg = wx.SingleChoiceDialog(self,'Select 1st variable:'+hlegend,'Histogram variables:',histVary)
     
    789809                moreVarb = FindEquivVarb(FrstVarb,histVary)
    790810                constr = SelectVarbs(FrstVarb,moreVarb,hlegend)
     811                constr += [0.0,True]        #constant & refine flag
     812                data['Hist'].append(constr)
    791813            dlg.Destroy()
     814            UpdateHistConstr()
    792815        elif '/Phase' in self.dataDisplay.GetPageText(page):
    793816            legend = 'Select 1st variable: \n '
     
    798821                moreVarb = FindEquivVarb(FrstVarb,hapVary)
    799822                constr = SelectVarbs(FrstVarb,moreVarb,phlegend)
     823                constr += [0.0,True]        #constant & refine flag
     824                data['HAP'].append(constr)
    800825            dlg.Destroy()
     826            UpdateHAPConstr()
    801827        elif 'Phase' in self.dataDisplay.GetPageText(page):
     828            #maybe get atom name in phaseVary items?
     829            for phase in Phases:
     830                Phase = Phases[phase]
     831                Atoms = Phase['Atoms']
    802832            dlg = wx.SingleChoiceDialog(self,'Select 1st variable:'+plegend,'Phase variables:',phaseVary)
    803833            if dlg.ShowModal() == wx.ID_OK:
     
    805835                FrstVarb = phaseVary[sel]
    806836                moreVarb = FindEquivVarb(FrstVarb,phaseVary)
    807                 constr = SelectVarbs(FrstVarb,moreVarb,plegend)
     837                constr = SelectVarbs(FrstVarb,moreVarb,plegend+'\nIf none selected then '+FrstVarb+' is held fixed')
     838                constr += [0.0,True]        #constant & refine flag
     839                data['Phase'].append(constr)
    808840            dlg.Destroy()
    809         if constr:
    810             constr += [0.0,True]
     841            UpdatePhaseConstr()
     842           
     843    def ConstSizer(name,pageDisplay):
     844        constSizer = wx.FlexGridSizer(1,4,0,0)
     845        for Id,item in enumerate(data[name]):
     846            if len(item) < 4:
     847                constSizer.Add((5,0),0)
     848                eqString = ' FIXED   '+item[0][1]
     849                constSizer.Add((5,0),0)
     850            else:
     851                constEdit = wx.Button(pageDisplay,-1,'Edit',style=wx.BU_EXACTFIT)
     852                constEdit.Bind(wx.EVT_BUTTON,OnConstEdit)
     853                Indx[constEdit.GetId()] = [Id,name]
     854                constSizer.Add(constEdit)           
     855                constRef = wx.CheckBox(pageDisplay,-1,label=' Refine?')
     856                constRef.SetValue(item[-1])
     857                constRef.Bind(wx.EVT_CHECKBOX,OnConstRef)
     858                Indx[constRef.GetId()] = item
     859                constSizer.Add(constRef,0,wx.ALIGN_CENTER_VERTICAL)
     860                eqString = ''
     861                for term in item[:-2]:
     862                    eqString += '%+.3f*%s '%(term[0],term[1])
     863                eqString += ' = %.3f'%(item[-2])
     864            constSizer.Add(wx.StaticText(pageDisplay,-1,eqString),0,wx.ALIGN_CENTER_VERTICAL)
     865            constDel = wx.Button(pageDisplay,-1,'Delete',style=wx.BU_EXACTFIT)
     866            constDel.Bind(wx.EVT_BUTTON,OnConstDel)
     867            Indx[constDel.GetId()] = [Id,name]
     868            constSizer.Add(constDel)
     869        return constSizer
    811870               
    812            
     871    def OnConstRef(event):
     872        Obj = event.GetEventObject()
     873        Indx[Obj.GetId()][-1] = Obj.GetValue()
     874       
     875    def OnConstDel(event):
     876        Obj = event.GetEventObject()
     877        Id,name = Indx[Obj.GetId()]
     878        del(data[name][Id])
     879        OnPageChanged(event)       
     880       
     881    def OnConstEdit(event):
     882        Obj = event.GetEventObject()
     883        Id,name = Indx[Obj.GetId()]
     884        const = data[name][Id][-2]
     885        items = data[name][Id][:-2]+[[const,'= constant'],[]]
     886        print items
     887        dlg = self.SumDialog(self,'Constraint','Enter value for each term in constraint','',items)
     888        try:
     889            if dlg.ShowModal() == wx.ID_OK:
     890                result = dlg.GetData()
     891                print result
     892                data[name][Id][:-2] = result[:-1]
     893                data[name][Id][-2] = result[-2][0]
     894        finally:
     895            dlg.Destroy()           
     896        OnPageChanged(event)       
    813897             
    814898   
    815899    def UpdateHAPConstr():
    816900        HAPConstr.DestroyChildren()
    817         dataDisplay = wx.Panel(HAPConstr)
     901        pageDisplay = wx.Panel(HAPConstr)
    818902        mainSizer = wx.BoxSizer(wx.VERTICAL)
    819903        mainSizer.Add((5,5),0)
    820         mainSizer.Add(wx.StaticText(dataDisplay,-1,'Histogram/Phase constraints:'),0,wx.ALIGN_CENTER_VERTICAL)
    821         mainSizer.Add((5,5),0)
    822        
    823 
    824 
    825         dataDisplay.SetSizer(mainSizer)
     904        mainSizer.Add(ConstSizer('HAP',pageDisplay))
     905        pageDisplay.SetSizer(mainSizer)
    826906        Size = mainSizer.Fit(self.dataFrame)
    827907        Size[1] += 26                           #compensate for status bar
    828         dataDisplay.SetSize(Size)
     908        pageDisplay.SetSize(Size)
    829909        self.dataFrame.setSizePosLeft(Size)
    830910       
    831911    def UpdateHistConstr():
    832912        HistConstr.DestroyChildren()
    833         dataDisplay = wx.Panel(HistConstr)
     913        pageDisplay = wx.Panel(HistConstr)
    834914        mainSizer = wx.BoxSizer(wx.VERTICAL)
    835         mainSizer.Add((5,5),0)
    836         mainSizer.Add(wx.StaticText(dataDisplay,-1,'Histogram constraints:'),0,wx.ALIGN_CENTER_VERTICAL)
    837         mainSizer.Add((5,5),0)
    838 
    839 
    840         dataDisplay.SetSizer(mainSizer)
     915        mainSizer.Add((5,5),0)       
     916        mainSizer.Add(ConstSizer('Hist',pageDisplay))
     917        pageDisplay.SetSizer(mainSizer)
    841918        Size = mainSizer.Fit(self.dataFrame)
    842919        Size[1] += 26                           #compensate for status bar
    843         dataDisplay.SetSize(Size)
     920        pageDisplay.SetSize(Size)
    844921        self.dataFrame.setSizePosLeft(Size)
    845922       
    846923    def UpdatePhaseConstr():
    847924        PhaseConstr.DestroyChildren()
    848         dataDisplay = wx.Panel(PhaseConstr)
     925        pageDisplay = wx.Panel(PhaseConstr)
    849926        mainSizer = wx.BoxSizer(wx.VERTICAL)
    850         mainSizer.Add((5,5),0)
    851         mainSizer.Add(wx.StaticText(dataDisplay,-1,'Phase constraints:'),0,wx.ALIGN_CENTER_VERTICAL)
    852         mainSizer.Add((5,5),0)
    853 
    854 
    855         dataDisplay.SetSizer(mainSizer)
     927        mainSizer.Add((5,5),0)       
     928        mainSizer.Add(ConstSizer('Phase',pageDisplay))
     929        pageDisplay.SetSizer(mainSizer)
    856930        Size = mainSizer.Fit(self.dataFrame)
    857931        Size[1] += 26                           #compensate for status bar
    858         dataDisplay.SetSize(Size)
     932        pageDisplay.SetSize(Size)
    859933        self.dataFrame.setSizePosLeft(Size)
    860934   
    861935    def OnPageChanged(event):
    862936        page = event.GetSelection()
     937        self.Page = page
    863938        text = self.dataDisplay.GetPageText(page)
    864939        if text == 'Histogram/Phase constraints':
    865             self.dataFrame.SetMenuBar(self.dataFrame.ConstraintMenu)
    866940            UpdateHAPConstr()
    867941        elif text == 'Histogram constraints':
    868942            UpdateHistConstr()
    869             self.dataFrame.SetMenuBar(self.dataFrame.ConstraintMenu)
    870943        elif text == 'Phase constraints':
    871944            UpdatePhaseConstr()
    872             self.dataFrame.SetMenuBar(self.dataFrame.ConstraintMenu)
    873         event.Skip()
    874945
    875946    if self.dataDisplay:
     
    878949    self.dataFrame.SetLabel('Constraints')
    879950    self.dataFrame.CreateStatusBar()
     951    self.dataFrame.SetMenuBar(self.dataFrame.ConstraintMenu)
    880952    self.dataFrame.Bind(wx.EVT_MENU, OnAddConstraint, id=wxID_CONSTRAINTADD)
    881953    self.dataDisplay = GSNoteBook(parent=self.dataFrame,size=self.dataFrame.GetClientSize())
  • trunk/GSASIIimgGUI.py

    r399 r406  
    209209        data['LRazimuth'] = [Lazm,Razm]
    210210        G2plt.PlotExposedImage(self,event=event)
    211            
     211       
     212    def OnBackImage(event):
     213        data['background image'][0] = backImage.GetValue()
     214       
     215    def OnBackMult(event):
     216        try:
     217            mult = float(backMult.GetValue())
     218            data['background image'][1] = mult
     219        except ValueError:
     220            pass
     221        backMult.SetValue("%.3f" % (data['background image'][1]))          #reset in case of error         
     222                           
    212223    def OnClearCalib(event):
    213224        data['ring'] = []
     
    227238       
    228239    def OnIntegrate(event):
    229         self.Integrate = G2img.ImageIntegrate(self.ImageZ,data,masks)
     240       
     241        if data['background image'][0]:
     242            backImg = data['background image'][0]
     243            backScale = data['background image'][1]
     244            id = G2gd.GetPatternTreeItemId(self, self.root, backImg)
     245            Npix,imagefile = self.PatternTree.GetItemPyData(id)
     246            backImage = G2IO.GetImageData(self,imagefile,True)*backScale
     247            self.Integrate = G2img.ImageIntegrate(self.ImageZ+backImage,data,masks)
     248        else:
     249            self.Integrate = G2img.ImageIntegrate(self.ImageZ,data,masks)
    230250        G2plt.PlotIntegration(self,newPlot=True)
    231251        G2IO.SaveIntegration(self,self.PickId,data)
     
    262282                            Id = G2gd.GetPatternTreeItemId(self,id, 'Image Controls')
    263283                            Data = self.PatternTree.GetItemPyData(Id)
     284                            backImage = []
     285                            if Data['background image'][0]:
     286                                backImg = Data['background image'][0]
     287                                backScale = Data['background image'][1]
     288                                id = G2gd.GetPatternTreeItemId(self, self.root, backImg)
     289                                Npix,imagefile = self.PatternTree.GetItemPyData(id)
     290                                backImage = G2IO.GetImageData(self,imagefile,True)*backScale
    264291                            try:
    265292                                Masks = self.PatternTree.GetItemPyData(
     
    269296                                Masks = {'Points':[],'Rings':[],'Arcs':[],'Polygons':[],'Thresholds':[(Imin,Imax),[Imin,Imax]]}
    270297                                self.PatternTree.SetItemPyData(
    271                                     G2gd.GetPatternTreeItemId(self,self.Image, 'Masks'),Masks)                               
    272                             self.Integrate = G2img.ImageIntegrate(image,Data,Masks)
     298                                    G2gd.GetPatternTreeItemId(self,self.Image, 'Masks'),Masks)
     299                            if len(backImage):                               
     300                                self.Integrate = G2img.ImageIntegrate(image+backImage,Data,Masks)
     301                            else:
     302                                self.Integrate = G2img.ImageIntegrate(image,Data,Masks)
    273303#                            G2plt.PlotIntegration(self,newPlot=True,event=event)
    274304                            G2IO.SaveIntegration(self,Id,Data)
     
    379409    if 'azmthOff' not in data:
    380410        data['azmthOff'] = 0.0
     411    if 'background image' not in data:
     412        data['background image'] = ['',1.0]
    381413    #end fix
    382414   
     
    561593    setDefault.Bind(wx.EVT_CHECKBOX, OnSetDefault)
    562594    setDefault.SetValue(data['setDefault'])
     595    dataSizer.Add((5,5),0)
     596   
     597    dataSizer.Add(wx.StaticText(self.dataDisplay,-1,' Background image'),0,wx.ALIGN_CENTER_VERTICAL)
     598    Choices = ['',]+G2gd.GetPatternTreeDataNames(self,['IMG ',])
     599    backImage = wx.ComboBox(parent=self.dataDisplay,value=data['background image'][0],choices=Choices,
     600        style=wx.CB_READONLY|wx.CB_DROPDOWN)
     601    backImage.Bind(wx.EVT_COMBOBOX,OnBackImage)
     602    dataSizer.Add(backImage)
     603    dataSizer.Add(wx.StaticText(self.dataDisplay,-1,' multiplier'),0,wx.ALIGN_CENTER_VERTICAL)
     604    backMult =  wx.TextCtrl(parent=self.dataDisplay,value=("%.3f" % (data['background image'][1])),
     605        style=wx.TE_PROCESS_ENTER)
     606    backMult.Bind(wx.EVT_TEXT_ENTER,OnBackMult)
     607    backMult.Bind(wx.EVT_KILL_FOCUS,OnBackMult)
     608    dataSizer.Add(backMult,0,wx.ALIGN_CENTER_VERTICAL)
    563609
    564610    mainSizer.Add((5,5),0)       
  • trunk/GSASIIphsGUI.py

    r405 r406  
    20982098            copyDict = {}
    20992099            for name in copyNames:
    2100                 copyDict[name] = sourceDict[name]
     2100                copyDict[name] = copy.deepcopy(sourceDict[name])        #force copy
    21012101            keyList = ['All',]+UseList.keys()
    21022102            if UseList:
     
    21132113                            copyList = keyList[1:]
    21142114                        for item in copyList:
    2115                             UseList[item].update(copyDict)
     2115                            UseList[item].update(copy.deepcopy(copyDict))
    21162116                        UpdateDData()
    21172117                finally:
  • trunk/GSASIIpwdGUI.py

    r405 r406  
    1212import math
    1313import time
     14import copy
    1415import cPickle
    1516import GSASIIpath
     
    288289        Obj.SetValue('%10.4f'%(value))
    289290       
     291    def OnBackCopy(event):
     292        histList = ['All',]+G2gd.GetPatternTreeDataNames(self,['PWDR',])
     293        copyList = []
     294        dlg = wx.MultiChoiceDialog(self,
     295            'Copy parameters to which histograms?', 'Copy parameters',
     296            histList, wx.CHOICEDLG_STYLE)
     297        try:
     298            if dlg.ShowModal() == wx.ID_OK:
     299                result = dlg.GetSelections()
     300                for i in result:
     301                    copyList.append(histList[i])
     302                if 'All' in copyList:
     303                    copyList = histList[1:]
     304            for item in copyList:
     305                Id = G2gd.GetPatternTreeItemId(self,self.root,item)
     306                self.PatternTree.SetItemPyData(G2gd.GetPatternTreeItemId(self,Id,'Background'),
     307                    copy.copy(data))
     308        finally:
     309            dlg.Destroy()
     310       
     311       
    290312    if self.dataDisplay:
    291313        self.dataFrame.Clear()
    292314    self.dataDisplay = wx.Panel(self.dataFrame)
     315    self.dataFrame.SetMenuBar(self.dataFrame.BackMenu)
     316    self.dataFrame.SetLabel('Background')
     317    if not self.dataFrame.GetStatusBar():
     318        Status = self.dataFrame.CreateStatusBar()
     319    self.Bind(wx.EVT_MENU,OnBackCopy,id=G2gd.wxID_BACKCOPY)
    293320    BackId = G2gd.GetPatternTreeItemId(self,self.PatternId, 'Background')
    294321    Choices = ['chebyschev','cosine','lin interpolate','inv interpolate','log interpolate']
     
    404431        UpdateInstrumentGrid(self,data)
    405432       
     433    def OnInstCopy(event):
     434        histList = ['All',]+G2gd.GetPatternTreeDataNames(self,['PWDR',])
     435        copyList = []
     436        dlg = wx.MultiChoiceDialog(self,
     437            'Copy parameters to which histograms?', 'Copy parameters',
     438            histList, wx.CHOICEDLG_STYLE)
     439        try:
     440            if dlg.ShowModal() == wx.ID_OK:
     441                result = dlg.GetSelections()
     442                for i in result:
     443                    copyList.append(histList[i])
     444                if 'All' in copyList:
     445                    copyList = histList[1:]
     446            for item in copyList:
     447                Id = G2gd.GetPatternTreeItemId(self,self.root,item)
     448                instData = self.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(self,Id,'Instrument Parameters'))
     449                if len(data) == len(instData):                          #don't mix lam & lam1/lam2 parms!
     450                    for i,item in enumerate(data[1:]):                  #skip default values in tuple
     451                        instData[i+1][:-1] = copy.copy(item[:-1])       #skip azimuth at end
     452                else:
     453                    print item+' not copied - instrument parameters not commensurate'
     454        finally:
     455            dlg.Destroy()
     456       
    406457    def OnWaveChange(event):
    407458        if 'Lam' in insVal:           
     
    481532    ifHisto = IsHistogramInAnyPhase(self,histoName)
    482533    self.dataFrame.SetMenuBar(self.dataFrame.BlankMenu)
     534    self.dataFrame.SetLabel('Instrument Parameters')
    483535    self.dataDisplay = wx.Panel(self.dataFrame)
    484536    instSizer = wx.FlexGridSizer(2,6,5,5)
     
    488540        if not self.dataFrame.GetStatusBar():
    489541            Status = self.dataFrame.CreateStatusBar()
    490         self.Bind(wx.EVT_MENU, OnReset,id=G2gd.wxID_INSTPRMRESET)
    491         self.Bind(wx.EVT_MENU,OnWaveChange,id=G2gd.wxID_CHANGEWAVETYPE)
     542        self.Bind(wx.EVT_MENU,OnReset,id=G2gd.wxID_INSTPRMRESET)
     543        self.Bind(wx.EVT_MENU,OnInstCopy,id=G2gd.wxID_INSTCOPY)
     544        self.Bind(wx.EVT_MENU,OnWaveChange,id=G2gd.wxID_CHANGEWAVETYPE)       
    492545        typePick = wx.ComboBox(self.dataDisplay,value=insVal['Type'],
    493546            choices=['PXC','PNC','PNT'],style=wx.CB_READONLY|wx.CB_DROPDOWN)
     
    643696                Id = G2gd.GetPatternTreeItemId(self,self.root,item)
    644697                sampleData = self.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(self,Id,'Sample Parameters'))
    645                 sampleData.update(copyDict)
     698                sampleData.update(copy.deepcopy(copyDict))
    646699        finally:
    647700            dlg.Destroy()
     
    650703        self.dataFrame.Clear()
    651704    self.dataFrame.SetMenuBar(self.dataFrame.SampleMenu)
     705    self.dataFrame.SetLabel('Sample Parameters')
    652706    self.Bind(wx.EVT_MENU, OnSampleCopy, id=G2gd.wxID_SAMPLECOPY)
    653707    if not self.dataFrame.GetStatusBar():
     
    16481702                        olddata = self.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(self,id, 'PDF Controls'))
    16491703                        sample = olddata['Sample']
    1650                         olddata.update(data)
     1704                        olddata.update(copy.deepcopy(data))
    16511705                        olddata['Sample'] = sample
    16521706                        self.PatternTree.SetItemPyData(G2gd.GetPatternTreeItemId(self,id, 'PDF Controls'),olddata)
  • trunk/GSASIIstruct.py

    r404 r406  
    246246                if data[iphase][0] in Phases:
    247247                    phaseName = data[iphase][0]
    248                     data[iphase][1] = Phases[phaseName]
     248                    data[iphase][1].update(Phases[phaseName])
    249249        elif datum[0] == 'Covariance':
    250250            data[0][1] = CovData
     
    25712571        SetHistogramData(parmDict,sigDict,Histo,ifPrint)
    25722572        SeqResult[histogram] = covData
    2573         SetUsedHistogramsAndPhases(GPXfile,Histograms,Phases,covData,makeBack)
     2573        SetUsedHistogramsAndPhases(GPXfile,Histo,Phases,covData,makeBack)
    25742574        makeBack = False
    25752575    SetSeqResult(GPXfile,Histograms,SeqResult)
Note: See TracChangeset for help on using the changeset viewer.