Changeset 399 for trunk/GSASIIgrid.py


Ignore:
Timestamp:
Oct 25, 2011 4:53:33 PM (10 years ago)
Author:
vondreele
Message:

Implement sequential refinement
remove print "load" & "save" for each item in Tree
revise application of azimuth offset - azimuths are now all "true" with correction

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASIIgrid.py

    r397 r399  
    1111import time
    1212import cPickle
     13import numpy as np
    1314import GSASIIpath
    1415import GSASIIplot as G2plt
     
    461462            return self.rowLabels[row]
    462463       
     464    def GetColValues(self, col):
     465        data = []
     466        for row in range(self.GetNumberRows()):
     467            data.append(self.GetValue(row, col))
     468        return data
     469       
    463470    def GetRowValues(self, row):
    464471        data = []
     
    580587        data['shift factor'] = value
    581588        Factr.SetValue('%.5f'%(value))
     589       
     590    def OnSelectData(event):
     591        choices = ['All',]+GetPatternTreeDataNames(self,['PWDR',])
     592        if 'Seq Data' in data:
     593            sel = []
     594            for item in data['Seq Data']:
     595                sel.append(choices.index(item))
     596        names = []
     597        dlg = wx.MultiChoiceDialog(self,'Select data:','Sequential refinement',choices)
     598        dlg.SetSelections(sel)
     599        if dlg.ShowModal() == wx.ID_OK:
     600            sel = dlg.GetSelections()
     601            for i in sel: names.append(choices[i])
     602            if 'All' in names:
     603                names = choices[1:]
     604               
     605        dlg.Destroy()
     606        data['Seq Data'] = names
     607        reverseSel.Enable(True)
     608       
     609    def OnReverse(event):
     610        data['Reverse Seq'] = reverseSel.GetValue()
    582611       
    583612    if self.dataDisplay:
     
    610639    Factr.Bind(wx.EVT_KILL_FOCUS,OnFactor)
    611640    LSSizer.Add(Factr,0,wx.ALIGN_CENTER_VERTICAL)
    612        
    613641    mainSizer.Add(LSSizer)
    614642    mainSizer.Add((5,5),0)
     643   
     644    SeqSizer = wx.BoxSizer(wx.HORIZONTAL)
     645    SeqSizer.Add(wx.StaticText(self.dataDisplay,label=' Sequential Refinement Powder Data: '),0,wx.ALIGN_CENTER_VERTICAL)
     646    selSeqData = wx.Button(self.dataDisplay,-1,label=' Select data')
     647    selSeqData.Bind(wx.EVT_BUTTON,OnSelectData)
     648    SeqSizer.Add(selSeqData,0,wx.ALIGN_CENTER_VERTICAL)
     649    SeqSizer.Add((5,0),0)
     650    reverseSel = wx.CheckBox(self.dataDisplay,-1,label=' Reverse order?')
     651    reverseSel.Bind(wx.EVT_CHECKBOX,OnReverse)
     652    if 'Seq Data' not in data:
     653        reverseSel.Enable(False)
     654    if 'Reverse Seq' in data:
     655        reverseSel.SetValue(data['Reverse Seq'])
     656    SeqSizer.Add(reverseSel,0,wx.ALIGN_CENTER_VERTICAL)
     657   
     658   
     659    mainSizer.Add(SeqSizer)
     660    mainSizer.Add((5,5),0)
     661       
    615662    mainSizer.Add(wx.StaticText(self.dataDisplay,label=' Density Map Controls:'),0,wx.ALIGN_CENTER_VERTICAL)
    616663
     
    633680            self.dataDisplay.AppendText(line+'\n')
    634681           
     682def UpdateSeqResults(self,data):
     683    if not data:
     684        print 'No sequential refinement results'
     685        return
     686    histNames = data['histNames']
     687   
     688    def ColSelect(event):
     689        cols = self.dataDisplay.GetSelectedCols()
     690        plotData = []
     691        plotNames = []
     692        for col in cols:
     693            plotData.append(self.SeqTable.GetColValues(col))
     694            plotNames.append(self.SeqTable.GetColLabelValue(col))
     695        plotData = np.array(plotData)
     696        G2plt.PlotSeq(self,plotData,plotNames)
     697       
     698    if self.dataDisplay:
     699        self.dataDisplay.Destroy()
     700    self.dataFrame.SetMenuBar(self.dataFrame.BlankMenu)
     701    self.dataFrame.SetLabel('Sequental refinement results')
     702    self.dataFrame.CreateStatusBar()
     703    colLabels = data['varyList']
     704    Types = len(data['varyList'])*[wg.GRID_VALUE_FLOAT,]
     705    seqList = [list(data[name]['variables']) for name in histNames]
     706    self.SeqTable = Table(seqList,colLabels=colLabels,rowLabels=histNames,types=Types)
     707    self.dataDisplay = GSGrid(parent=self.dataFrame)
     708    self.dataDisplay.SetTable(self.SeqTable, True)
     709    self.dataDisplay.EnableEditing(False)
     710    self.dataDisplay.Bind(wg.EVT_GRID_LABEL_LEFT_DCLICK, ColSelect)
     711    self.dataDisplay.SetRowLabelSize(8*len(histNames[0]))       #pretty arbitrary 8
     712    self.dataDisplay.SetMargins(0,0)
     713    self.dataDisplay.AutoSizeColumns(True)
     714    self.dataFrame.setSizePosLeft([700,350])
     715               
    635716def UpdateConstraints(self,data):
    636717    Histograms,Phases = self.GetUsedHistogramsAndPhasesfromTree()
     
    9331014    self.dataDisplay.SetSize(mainSizer.Fit(self.dataFrame))
    9341015    self.dataFrame.setSizePosLeft(mainSizer.Fit(self.dataFrame))
    935        
     1016
     1017def GetPatternTreeDataNames(self,dataTypes):
     1018    names = []
     1019    item, cookie = self.PatternTree.GetFirstChild(self.root)       
     1020    while item:
     1021        name = self.PatternTree.GetItemText(item)
     1022        if name[:4] in dataTypes:
     1023            names.append(name)
     1024        item, cookie = self.PatternTree.GetNextChild(self.root, cookie)
     1025    return names
    9361026                         
    9371027def GetPatternTreeItemId(self, parentId, itemText):
     
    9971087                self.PatternTree.SetItemPyData(item,data)                             
    9981088            self.Refine.Enable(True)
     1089            self.SeqRefine.Enable(True)
    9991090            UpdateControls(self,data)
     1091        elif self.PatternTree.GetItemText(item) == 'Sequental results':
     1092            data = self.PatternTree.GetItemPyData(item)
     1093            UpdateSeqResults(self,data)           
    10001094        elif self.PatternTree.GetItemText(item) == 'Covariance':
    10011095            data = self.PatternTree.GetItemPyData(item)
Note: See TracChangeset for help on using the changeset viewer.