Changeset 406 for trunk/GSASIIgrid.py


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

File:
1 edited

Legend:

Unmodified
Added
Removed
  • 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())
Note: See TracChangeset for help on using the changeset viewer.