Changeset 1515 for trunk/GSASIIpwdGUI.py


Ignore:
Timestamp:
Oct 3, 2014 10:38:49 AM (9 years ago)
Author:
vondreele
Message:

allow '#' comments in GSAS iparm files.
add class G2ColumnIDDialog for loading sample data for all histograms from a text file. This file has optional '#' comments followed by columns of data items each line begins with a file name that matches the file names for the histograms.
This class allows simple arithmetic modification of a column of data.
G2MultiChoiceDialog now allows selection of a block of items
Add 'Time' to Sample parameters - typically clock time
Further work on modulated structures
change default .gsa GSAS powder data extension to .gda - a lot more common.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASIIpwdGUI.py

    r1512 r1515  
    7777        'Scale':[1.0,True],'Type':'Debye-Scherrer','Absorption':[0.0,False],
    7878        'DisplaceX':[0.0,False],'DisplaceY':[0.0,False],'Diffuse':[],
    79         'Temperature':300.,'Pressure':0.1,
     79        'Temperature':300.,'Pressure':0.1,'Time':0.0,
    8080        'FreePrm1':0.,'FreePrm2':0.,'FreePrm3':0.,
    8181        'Gonio. radius':200.0,
     
    116116    parms.append(['Chi','Goniometer chi:',[10,3]])
    117117    parms.append(['Phi','Goniometer phi:',[10,3]])
     118    parms.append(['Time','Clock time (s)',[12,3]])
    118119    parms.append(['Temperature','Sample temperature (K): ',[10,3]])
    119120    parms.append(['Pressure','Sample pressure (MPa): ',[10,3]])
     
    409410        Reverse = False
    410411        CopyForward = False
    411         choice = ['Copy from prev.',]       #'Reverse sequence',
     412        choice = ['Reverse sequence','Copy from prev.',]
    412413        dlg = wx.MultiChoiceDialog(G2frame.dataFrame,'Sequential controls','Select controls',choice)
    413414        if dlg.ShowModal() == wx.ID_OK:
     
    426427        oneCycle = False
    427428        FitPgm = 'LSQ'
     429        prevVaryList = []
     430        if Reverse:
     431            names.reverse()
    428432        try:
    429433            for i,name in enumerate(names):
     
    434438                PatternId =  G2gd.GetPatternTreeItemId(G2frame,G2frame.root,name)
    435439                if i and CopyForward:
    436                     G2frame.PatternTree.SetItemPyData(G2gd.GetPatternTreeItemId(G2frame,PatternId, 'Peak List'),peaks)
     440                    G2frame.PatternTree.SetItemPyData(G2gd.GetPatternTreeItemId(G2frame,PatternId, 'Peak List'),copy.copy(peaks))
     441                    prevVaryList = varyList[:]
    437442                peaks = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,PatternId, 'Peak List'))
    438443                background = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,PatternId, 'Background'))
     
    447452                dlg2.SetPosition(wx.Point(screenSize[2]-Size[0]-305,screenSize[1]+5))
    448453                try:
    449                     peaks['sigDict'],result,sig,Rvals,varyList,parmDict = G2pwd.DoPeakFit(FitPgm,peaks['peaks'],
    450                         background,limits,inst,inst2,data,oneCycle,controls,dlg2)
     454                    peaks['sigDict'],result,sig,Rvals,varyList,parmDict,fullvaryList,badVary = G2pwd.DoPeakFit(FitPgm,peaks['peaks'],
     455                        background,limits,inst,inst2,data,prevVaryList,oneCycle,controls,dlg2)
    451456                finally:
    452457                    dlg2.Destroy()   
    453                 G2frame.PatternTree.SetItemPyData(G2gd.GetPatternTreeItemId(G2frame,PatternId, 'Peak List'),peaks)
     458                G2frame.PatternTree.SetItemPyData(G2gd.GetPatternTreeItemId(G2frame,PatternId, 'Peak List'),copy.copy(peaks))
    454459                SeqResult[name] = {'variables':result[0],'varyList':varyList,'sig':sig,'Rvals':Rvals,
    455                     'covMatrix':np.eye(len(result[0])),'title':name,'parmDict':parmDict}
     460                    'covMatrix':np.eye(len(result[0])),'title':name,'parmDict':parmDict,
     461                    'fullVary':fullvaryList,'badVary':badVary}
    456462            else:
    457463                dlg.Destroy()
     
    500506        dlg.SetPosition(wx.Point(screenSize[2]-Size[0]-305,screenSize[1]+5))
    501507        try:
    502             peaks['sigDict'] = G2pwd.DoPeakFit(FitPgm,peaks['peaks'],background,limits,inst,inst2,data,oneCycle,controls,dlg)[0]
     508            peaks['sigDict'] = G2pwd.DoPeakFit(FitPgm,peaks['peaks'],background,limits,inst,inst2,data,[],oneCycle,controls,dlg)[0]
    503509        finally:
    504510            wx.EndBusyCursor()   
    505         G2frame.PatternTree.SetItemPyData(G2gd.GetPatternTreeItemId(G2frame,PatternId, 'Peak List'),peaks)
    506         UpdatePeakGrid(G2frame,peaks)
     511        G2frame.PatternTree.SetItemPyData(G2gd.GetPatternTreeItemId(G2frame,PatternId, 'Peak List'),copy.copy(peaks))
     512        UpdatePeakGrid(G2frame,copy.copy(peaks))
    507513        G2plt.PlotPatterns(G2frame,plotType='PWDR')
    508514        print 'finished'
     
    15821588        finally:
    15831589            dlg.Destroy()
     1590           
     1591    def OnAllSampleLoad(event):
     1592        filename = ''
     1593        dlg = wx.FileDialog(G2frame, 'Choose multihistogram metadata text file', '.', '',
     1594            'metadata file (*.*)|*.*',wx.OPEN|wx.CHANGE_DIR)
     1595        try:
     1596            if dlg.ShowModal() == wx.ID_OK:
     1597                filename = dlg.GetPath()
     1598                File = open(filename,'r')
     1599                S = File.readline()
     1600                newItems = []
     1601                itemNames = []
     1602                Comments = []
     1603                while S:
     1604                    if S[0] == '#':
     1605                        Comments.append(S)
     1606                        S = File.readline()
     1607                        continue
     1608                    S.replace(',',' ')
     1609                    S.replace('\t',' ')
     1610                    Stuff = S[:-1].split(' ')
     1611                    itemNames.append(Stuff[0])
     1612                    newItems.append(Stuff[1:])
     1613                    S = File.readline()               
     1614                File.close()
     1615        finally:
     1616            dlg.Destroy()
     1617        if not filename:
     1618            G2frame.ErrorDialog('Nothing to do','No file selected')
     1619            return
     1620        dataDict = dict(zip(itemNames,newItems))
     1621        ifany = False
     1622        Controls = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,G2frame.root,'Controls'))
     1623        Names = [' ','Phi','Chi','Omega','Time','Temperature','Pressure']
     1624        freeNames = {}
     1625        for name in ['FreePrm1','FreePrm2','FreePrm3']:
     1626            freeNames[Controls[name]] = name
     1627            Names.append(Controls[name])
     1628        dlg = G2gd.G2ColumnIDDialog( G2frame,' Choose multihistogram metadata columns:',
     1629            'Select columns',Comments,Names,np.array(newItems).T)
     1630        try:
     1631            if dlg.ShowModal() == wx.ID_OK:
     1632                colNames,newData = dlg.GetSelection()
     1633                dataDict = dict(zip(itemNames,newData.T))
     1634                for item in colNames:
     1635                    if item != ' ':
     1636                        ifany = True
     1637        finally:
     1638            dlg.Destroy()
     1639        if not ifany:
     1640            G2frame.ErrorDialog('Nothing to do','No columns identified')
     1641            return
     1642        histList = [G2frame.PatternTree.GetItemText(G2frame.PatternId),]
     1643        histList += GetHistsLikeSelected(G2frame)
     1644        colIds = {}
     1645        for i,name in enumerate(colNames):
     1646            if name != ' ':
     1647                colIds[name] = i
     1648        for hist in histList:
     1649            name = hist.split()[1]  #this is file name
     1650            newItems = {}
     1651            for item in colIds:
     1652                key = freeNames.get(item,item)
     1653                newItems[key] = float(dataDict[name][colIds[item]])
     1654            Id = G2gd.GetPatternTreeItemId(G2frame,G2frame.root,hist)
     1655            sampleData = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,Id,'Sample Parameters'))
     1656            sampleData.update(newItems)       
     1657        UpdateSampleGrid(G2frame,data)       
    15841658   
    15851659    def OnSetScale(event):
     
    17811855    G2frame.Bind(wx.EVT_MENU, OnSampleLoad, id=G2gd.wxID_SAMPLELOAD)
    17821856    G2frame.Bind(wx.EVT_MENU, OnCopy1Val, id=G2gd.wxID_SAMPLE1VAL)
     1857    G2frame.Bind(wx.EVT_MENU, OnAllSampleLoad, id=G2gd.wxID_ALLSAMPLELOAD)
    17831858    if 'SASD' in histName:
    17841859        G2frame.dataFrame.SetScale.Enable(True)
     
    17971872    if type(data['Temperature']) is int:
    17981873        data['Temperature'] = float(data['Temperature'])
     1874    if 'Time' not in data:
     1875        data['Time'] = 0.0
    17991876    if 'FreePrm1' not in Controls:
    18001877        Controls['FreePrm1'] = 'Sample humidity (%)'
     
    18801957        parmSizer.Add(parmVal,1,wx.EXPAND)
    18811958    Info = {}
    1882 
    18831959       
    18841960    for key in ('FreePrm1','FreePrm2','FreePrm3'):
Note: See TracChangeset for help on using the changeset viewer.