Changeset 400


Ignore:
Timestamp:
Oct 27, 2011 10:26:50 AM (10 years ago)
Author:
vondreele
Message:

new default for Vcov contour plot - RdYlGn?
faster cleanup on changing/reloading projects
cleanup data delete
implement sample parameter copy
improve Vcov plotting routine
implement plot of vcov from seq refinements

Location:
trunk
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASII.py

    r399 r400  
    251251        self.PatternTree.Bind(wx.EVT_TREE_ITEM_EXPANDED,
    252252            self.OnPatternTreeItemExpanded, id=wxID_PATTERNTREE)
     253        self.PatternTree.Bind(wx.EVT_TREE_DELETE_ITEM,
     254            self.OnPatternTreeItemDelete, id=wxID_PATTERNTREE)
    253255        self.root = self.PatternTree.AddRoot('Loaded Data: ')
    254256       
     
    267269        self.dirname = ''
    268270        self.undofile = ''
     271        self.TreeItemDelete = False
    269272        self.Offset = [0.0,0.0]
    270273        self.Weight = False
     
    281284        self.Interpolate = 'nearest'
    282285        self.ContourColor = 'Paired'
     286        self.VcovColor = 'RdYlGn'
    283287        self.Projection = 'equal area'
    284288        self.logPlot = False
     
    312316                       
    313317    def OnPatternTreeSelChanged(self, event):
    314         pltNum = self.G2plotNB.nb.GetSelection()
    315         if pltNum >= 0:                         #to avoid the startup with no plot!
    316             pltPage = self.G2plotNB.nb.GetPage(pltNum)
    317             pltPlot = pltPage.figure
    318         item = event.GetItem()
    319         G2gd.MovePatternTreeToGrid(self,item)
     318        if self.TreeItemDelete:
     319            self.TreeItemDelete = False
     320        else:
     321            pltNum = self.G2plotNB.nb.GetSelection()
     322            if pltNum >= 0:                         #to avoid the startup with no plot!
     323                pltPage = self.G2plotNB.nb.GetPage(pltNum)
     324                pltPlot = pltPage.figure
     325            item = event.GetItem()
     326            G2gd.MovePatternTreeToGrid(self,item)
    320327       
    321328    def OnPatternTreeItemCollapsed(self, event):
     
    325332        event.Skip()
    326333       
    327     def OnPatternTreeDeleteItem(self, event):
    328         event.Skip()
     334    def OnPatternTreeItemDelete(self, event):
     335        self.TreeItemDelete = True
    329336
    330337    def OnPatternTreeItemActivated(self, event):
    331338        event.Skip()
    332        
     339               
    333340    def OnPwdrRead(self, event):
    334341        self.CheckNotebook()
     
    10061013            while item:
    10071014                name = self.PatternTree.GetItemText(item)
    1008                 if 'PWDR' in name or 'HKLF' in name or 'IMG' or 'PDF' in name:
     1015                if name not in ['Notebook','Controls','Covariance','Constraints','Restraints','Phases']:
    10091016                    if 'PWDR' in name: ifPWDR = True
    10101017                    if 'IMG' in name: ifIMG = True
     
    10541061                    self.PatternTree.DeleteChildren(self.root)
    10551062                    self.GSASprojectfile = ''
    1056                     self.PatternTree.DeleteChildren(self.root)
     1063#                    self.PatternTree.DeleteChildren(self.root)
    10571064                    if self.HKL: self.HKL = []
    10581065                    if self.G2plotNB.plotList:
     
    15271534        self.OnFileSave(event)
    15281535        Id = G2gd.GetPatternTreeItemId(self,self.root,'Sequental results')
     1536        print Id
    15291537        if not Id:
    15301538            Id = self.PatternTree.AppendItem(self.root,text='Sequental results')
     1539            print Id
    15311540            self.PatternTree.SetItemPyData(Id,{})           
    15321541        dlg = wx.ProgressDialog('Residual for histogram 0','Powder profile Rwp =',101.0,
  • trunk/GSASIIIO.py

    r399 r400  
    699699    File.seek(IFD)                                                  #get number of directory entries
    700700    NED = int(st.unpack(byteOrd+'h',File.read(2))[0])
    701     print IFD,NED
    702701    IFD = {}
    703702    for ied in range(NED):
  • trunk/GSASIIgrid.py

    r399 r400  
    5555] = [wx.NewId() for _init_coll_INDEX_Items in range(4)]
    5656
     57[ wxID_SAMPLECOPY,
     58] = [wx.NewId() for _init_coll_Sample_Items in range(1)]
     59
    5760[ wxID_CONSTRAINTADD,
    5861] = [wx.NewId() for _init_coll_Constraint_Items in range(1)]
     
    106109    def _init_coll_MaskMenu(self,parent):
    107110        parent.Append(menu=self.MaskEdit, title='Mask Operations')
     111       
     112    def _init_coll_SampleMenu(self,parent):
     113        parent.Append(menu=self.SampleEdit, title='Edit')
    108114       
    109115    def _init_coll_PeakMenu(self,parent):
     
    149155        parent.Append(id=wxID_RESTRAINTADD, kind=wx.ITEM_NORMAL,text='Add restraint',
    150156            help='restraint dummy menu item')
     157                   
     158    def _init_coll_Sample_Items(self,parent):
     159        parent.Append(id=wxID_SAMPLECOPY, kind=wx.ITEM_NORMAL,text='Copy',
     160            help='Copy refinable sample parameters to other histograms')
    151161                   
    152162    def _init_coll_Data_Items(self,parent):
     
    287297        self.MaskMenu = wx.MenuBar()
    288298        self.InstMenu = wx.MenuBar()
     299        self.SampleMenu = wx.MenuBar()
    289300        self.PeakMenu = wx.MenuBar()
    290301        self.IndPeaksMenu = wx.MenuBar()
     
    302313        self.MaskEdit = wx.Menu(title='')
    303314        self.InstEdit = wx.Menu(title='')
     315        self.SampleEdit = wx.Menu(title='')
    304316        self.PeakEdit = wx.Menu(title='')
    305317        self.IndPeaksEdit = wx.Menu(title='')
     
    327339        self._init_coll_InstMenu(self.InstMenu)
    328340        self._init_coll_Inst_Items(self.InstEdit)
     341        self._init_coll_SampleMenu(self.SampleMenu)
     342        self._init_coll_Sample_Items(self.SampleEdit)
    329343        self._init_coll_PeakMenu(self.PeakMenu)
    330344        self._init_coll_Peak_Items(self.PeakEdit)
     
    590604    def OnSelectData(event):
    591605        choices = ['All',]+GetPatternTreeDataNames(self,['PWDR',])
     606        sel = []
    592607        if 'Seq Data' in data:
    593             sel = []
    594608            for item in data['Seq Data']:
    595609                sel.append(choices.index(item))
     
    686700    histNames = data['histNames']
    687701   
    688     def ColSelect(event):
     702    def Select(event):
    689703        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        
     704        rows = self.dataDisplay.GetSelectedRows()
     705        if cols:
     706            plotData = []
     707            plotNames = []
     708            for col in cols:
     709                plotData.append(self.SeqTable.GetColValues(col))
     710                plotNames.append(self.SeqTable.GetColLabelValue(col))
     711            plotData = np.array(plotData)
     712            G2plt.PlotSeq(self,plotData,plotNames)
     713        elif rows:
     714            name = histNames[rows[0]]
     715            G2plt.PlotCovariance(self,Data=data[name])
     716               
    698717    if self.dataDisplay:
    699718        self.dataDisplay.Destroy()
     
    708727    self.dataDisplay.SetTable(self.SeqTable, True)
    709728    self.dataDisplay.EnableEditing(False)
    710     self.dataDisplay.Bind(wg.EVT_GRID_LABEL_LEFT_DCLICK, ColSelect)
     729    self.dataDisplay.Bind(wg.EVT_GRID_LABEL_LEFT_DCLICK, Select)
    711730    self.dataDisplay.SetRowLabelSize(8*len(histNames[0]))       #pretty arbitrary 8
    712731    self.dataDisplay.SetMargins(0,0)
  • trunk/GSASIIplot.py

    r399 r400  
    602602        ContourY = []
    603603        Nseq = 0
     604    if len(PlotList) < 2:
     605        self.Contour = False
    604606    for N,Pattern in enumerate(PlotList):
    605607        Parms = ParmList[N]
     
    13641366    Page.canvas.draw()
    13651367
    1366 def PlotCovariance(self):
    1367     Data = self.PatternTree.GetItemPyData(
    1368         G2gd.GetPatternTreeItemId(self,self.root, 'Covariance'))
     1368def PlotCovariance(self,Data={}):
     1369    if not Data:
     1370        Data = self.PatternTree.GetItemPyData(
     1371            G2gd.GetPatternTreeItemId(self,self.root, 'Covariance'))
    13691372    if not Data:
    13701373        print 'No covariance matrix available'
    13711374        return
    13721375    varyList = Data['varyList']
     1376    values = Data['variables']
    13731377    Xmax = len(varyList)
    13741378    covMatrix = Data['covMatrix']
     
    13761380    xvar = np.outer(sig,np.ones_like(sig))
    13771381    covArray = np.divide(np.divide(covMatrix,xvar),xvar.T)
     1382    title = ' for\n'+Data['title']
     1383    newAtomDict = Data['newAtomDict']
    13781384
    13791385    def OnPlotKeyPress(event):
     
    13851391            if dlg.ShowModal() == wx.ID_OK:
    13861392                sel = dlg.GetSelection()
    1387                 self.ContourColor = choice[sel]
     1393                self.VcovColor = choice[sel]
    13881394            else:
    1389                 self.ContourColor = 'Spectral'
     1395                self.VcovColor = 'RdYlGn'
    13901396            dlg.Destroy()
    13911397        PlotCovariance(self)
     
    13961402            ytics = np.where(ytics<len(varyList),ytics,-1)
    13971403            ylabs = [np.where(0<=i ,varyList[int(i)],' ') for i in ytics]
    1398 #            ylabs = [varyList[int(i)] for i in ytics[:-1]]
    13991404            imgAx.set_yticklabels(ylabs)
    14001405           
     
    14031408            ypos = int(event.ydata+.5)
    14041409            if -1 < xpos < len(varyList) and -1 < ypos < len(varyList):
    1405                 msg = '%s - %s: %5.3f'%(varyList[xpos],varyList[ypos],covArray[xpos][ypos])
     1410                if xpos == ypos:
     1411                    value = values[xpos]
     1412                    name = varyList[xpos]
     1413                    if varyList[xpos] in newAtomDict:
     1414                        name,value = newAtomDict[name]                       
     1415                    msg = '%s value = %.4g, esd = %.4g'%(name,value,sig[xpos])
     1416                else:
     1417                    msg = '%s - %s: %5.3f'%(varyList[xpos],varyList[ypos],covArray[xpos][ypos])
    14061418                Page.canvas.SetToolTipString(msg)
    14071419                self.G2plotNB.status.SetFields(['Key: s to change colors',msg])
     
    14221434    Page.SetFocus()
    14231435    self.G2plotNB.status.SetFields(['',''])   
    1424     acolor = mpl.cm.get_cmap(self.ContourColor)
     1436    acolor = mpl.cm.get_cmap(self.VcovColor)
    14251437    Img = Plot.imshow(covArray,aspect='equal',cmap=acolor,interpolation='nearest',origin='lower')
    14261438    imgAx = Img.get_axes()
     
    14291441    imgAx.set_yticklabels(ylabs)
    14301442    colorBar = Page.figure.colorbar(Img)
    1431     Plot.set_title('Variance-Covariance matrix from LS refinement')
     1443    Plot.set_title('V-Cov matrix'+title)
    14321444    Plot.set_xlabel('Variable number')
    14331445    Plot.set_ylabel('Variable name')
  • trunk/GSASIIpwdGUI.py

    r397 r400  
    605605   
    606606def UpdateSampleGrid(self,data):
     607   
     608    def OnSampleCopy(event):
     609        histName = self.PatternTree.GetItemText(self.PatternId)
     610        copyNames = ['Scale',]
     611        dataType = data['Type']
     612        histType = 'HKLF'
     613        if 'PWDR' in histName:          #else HKLF - only Scale
     614            histType = 'PWDR'
     615            if 'Debye' in dataType:
     616                copyNames += ['DisplaceX','DisplaceY','Absorption']
     617            else:       #Bragg-Brentano
     618                copyNames += ['Shift','Transparency']
     619        copyDict = {}
     620        for parm in copyNames:
     621            copyDict[parm] = data[parm]
     622        histList = ['All '+histType,]
     623        item, cookie = self.PatternTree.GetFirstChild(self.root)
     624        while item:
     625            name = self.PatternTree.GetItemText(item)
     626            if histType in name and name != histName:
     627                histList.append(name)
     628            item, cookie = self.PatternTree.GetNextChild(self.root, cookie)
     629        if len(histList) == 1:      #nothing to copy to!
     630            return
     631        copyList = []
     632        dlg = wx.MultiChoiceDialog(self,
     633            'Copy parameters to which histograms?', 'Copy parameters',
     634            histList, wx.CHOICEDLG_STYLE)
     635        try:
     636            if dlg.ShowModal() == wx.ID_OK:
     637                result = dlg.GetSelections()
     638                for i in result:
     639                    copyList.append(histList[i])
     640                if 'All '+histType in copyList:
     641                    copyList = histList[1:]
     642            for item in copyList:
     643                Id = G2gd.GetPatternTreeItemId(self,self.root,item)
     644                sampleData = self.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(self,Id,'Sample Parameters'))
     645                sampleData.update(copyDict)
     646        finally:
     647            dlg.Destroy()
     648
    607649    if self.dataDisplay:
    608650        self.dataFrame.Clear()
    609     self.dataFrame.SetMenuBar(self.dataFrame.BlankMenu)
     651    self.dataFrame.SetMenuBar(self.dataFrame.SampleMenu)
     652    self.Bind(wx.EVT_MENU, OnSampleCopy, id=G2gd.wxID_SAMPLECOPY)
    610653    if not self.dataFrame.GetStatusBar():
    611654        Status = self.dataFrame.CreateStatusBar()   
  • trunk/GSASIIstruct.py

    r399 r400  
    15881588def ApplyXYZshifts(parmDict,varyList):
    15891589    ''' takes atom x,y,z shift and applies it to corresponding atom x,y,z value
     1590        input:
     1591            parmDict - parameter dictionary
     1592            varyList - list of variables
     1593        returns:
     1594            newAtomDict - dictionary of new atomic coordinate names & values;
     1595                key is parameter shift name
    15901596    '''
     1597    newAtomDict = {}
    15911598    for item in parmDict:
    15921599        if 'dA' in item:
    15931600            parm = ''.join(item.split('d'))
    15941601            parmDict[parm] += parmDict[item]
     1602            newAtomDict[item] = [parm,parmDict[parm]]
     1603    return newAtomDict
    15951604   
    15961605def SHTXcal(refl,g,pfx,hfx,SGData,calcControls,parmDict):
     
    23422351        Values2Dict(parmDict, varyList, result[0])
    23432352        G2mv.Dict2Map(parmDict)
    2344         ApplyXYZshifts(parmDict,varyList)
     2353        newAtomDict = ApplyXYZshifts(parmDict,varyList)
    23452354       
    23462355        Rwp = np.sqrt(chisq/Histograms['sumwYo'])*100.      #to %
     
    23752384    GetFobsSq(Histograms,Phases,parmDict,calcControls)
    23762385    sigDict = dict(zip(varyList,sig))
    2377     covData = {'variables':result[0],'varyList':varyList,'covMatrix':covMatrix}
     2386    covData = {'variables':result[0],'varyList':varyList,'covMatrix':covMatrix,
     2387        'title':GPXfile,'newAtomDict':newAtomDict}
    23782388    SetPhaseData(parmDict,sigDict,Phases,covData)
    23792389    SetHistogramPhaseData(parmDict,sigDict,Phases,Histograms)
     
    24232433   
    24242434    for ihst,histogram in enumerate(histNames):
    2425         print ihst,histogram
    24262435        ifPrint = False
    24272436        if dlg:
     
    24872496            Values2Dict(parmDict, varyList, result[0])
    24882497            G2mv.Dict2Map(parmDict)
    2489             ApplyXYZshifts(parmDict,varyList)
     2498            newAtomDict = ApplyXYZshifts(parmDict,varyList)
    24902499           
    24912500            Rwp = np.sqrt(chisq/Histo['sumwYo'])*100.      #to %
     
    25142523        GetFobsSq(Histo,Phases,parmDict,calcControls)
    25152524        sigDict = dict(zip(varyList,sig))
    2516         covData = {'variables':result[0],'covMatrix':covMatrix}
     2525        covData = {'variables':result[0],'varyList':varyList,'covMatrix':covMatrix,
     2526            'title':histogram,'newAtomDict':newAtomDict}
    25172527        SetHistogramPhaseData(parmDict,sigDict,Phases,Histo,ifPrint)
    25182528        SetHistogramData(parmDict,sigDict,Histo,ifPrint)
Note: See TracChangeset for help on using the changeset viewer.