Changeset 795 for trunk/GSASIIpwdGUI.py


Ignore:
Timestamp:
Nov 3, 2012 3:22:36 PM (13 years ago)
Author:
vondreele
Message:

implement TOF input, peak search & fitting
auto peak search
convert instrument parms to dictionary
add charge flip on max rho

File:
1 edited

Legend:

Unmodified
Added
Removed
  • TabularUnified trunk/GSASIIpwdGUI.py

    r794 r795  
    1313import wx.grid as wg
    1414import numpy as np
     15import numpy.ma as ma
    1516import math
    1617import time
     
    2021import GSASIIpath
    2122GSASIIpath.SetVersionNumber("$Revision$")
     23import GSASIImath as G2mth
    2224import GSASIIpwd as G2pwd
    2325import GSASIIIO as G2IO
     
    2931import GSASIIElemGUI as G2elemGUI
    3032import GSASIIElem as G2elem
    31 
    3233VERY_LIGHT_GREY = wx.Colour(235,235,235)
    33 
    3434# trig functions in degrees
    3535sind = lambda x: math.sin(x*math.pi/180.)
     
    5858        'Temperature':300.,'Pressure':1.0,'Humidity':0.0,
    5959        'Voltage':0.0,'Force':0.0,'Gonio. radius':200.0,
    60         'Omega':0.0,'Chi':0.0,'Phi':0.0}   
    61            
     60        'Omega':0.0,'Chi':0.0,'Phi':0.0}
     61                         
    6262################################################################################
    6363#####  Powder Peaks
     
    6767    if G2frame.dataDisplay:
    6868        G2frame.dataFrame.Clear()
     69       
     70    def OnAutoSearch(event):
     71        PatternId = G2frame.PatternId
     72        PickId = G2frame.PickId
     73        limits = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,PatternId, 'Limits'))[1]
     74        inst = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,PatternId, 'Instrument Parameters'))
     75        profile = G2frame.PatternTree.GetItemPyData(PatternId)[1]
     76        x0 = profile[0]
     77        iBeg = np.searchsorted(x0,limits[0])
     78        iFin = np.searchsorted(x0,limits[1])
     79        x = x0[iBeg:iFin]
     80        y0 = profile[1][iBeg:iFin]
     81        y1 = copy.copy(y0)
     82        ysig = np.std(y1)
     83        offset = [-1,1]
     84        ymask = ma.array(y0,mask=(y0<ysig))
     85        for off in offset:
     86            ymask = ma.array(ymask,mask=(ymask-np.roll(y0,off)<=0.))
     87        indx = ymask.nonzero()
     88        mags = ymask[indx]
     89        poss = x[indx]
     90        for pos,mag in zip(poss,mags):
     91            data.append(G2mth.setPeakparms(inst,pos,mag))
     92        UpdatePeakGrid(G2frame,data)
     93        G2plt.PlotPatterns(G2frame)       
    6994   
    7095    def OnUnDo(event):
     
    149174        PatternId = G2frame.PatternId
    150175        PickId = G2frame.PickId
     176        Inst = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,PatternId, 'Instrument Parameters'))
    151177        peaks = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,PatternId, 'Peak List'))
    152178        if not peaks:
    153179            G2frame.ErrorDialog('No peaks!','Nothing to do!')
    154180            return
    155         Inst = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,PatternId, 'Instrument Parameters'))
    156181        for peak in peaks:
    157182            if 'C' in Inst['Type'][0]:
     
    159184                peak[6] = Inst['X'][1]/cosd(peak[0]/2.0)+Inst['Y'][1]*tand(peak[0]/2.0)
    160185            else:
    161                 pass
     186                dsp = peak[0]/Inst['difC'][0]
     187                peak[4] = Inst['alpha'][0]*dsp
     188                peak[6] = Inst['beta-0'][0]+Inst['beta-1'][0]/dsp**4
     189                peak[8] = Inst['var-inst'][0]*dsp**2
     190                peak[10] = Inst['X'][0]*dsp**2+Inst['Y'][0]*dsp
    162191        UpdatePeakGrid(G2frame,peaks)
    163192               
     
    178207       for r in range(G2frame.dataDisplay.GetNumberRows()):
    179208           for c in range(G2frame.dataDisplay.GetNumberCols()):
    180                if G2frame.dataDisplay.GetColLabelValue(c) in ['position','intensity','sigma','gamma']:
     209               if G2frame.dataDisplay.GetColLabelValue(c) in ['position','intensity','alpha','beta','sigma','gamma']:
    181210                   if float(G2frame.dataDisplay.GetCellValue(r,c)) < 0.:
    182211                       G2frame.dataDisplay.SetCellBackgroundColour(r,c,wx.RED)
     
    239268    if not G2frame.dataFrame.GetStatusBar():
    240269        Status = G2frame.dataFrame.CreateStatusBar()
     270    G2frame.Bind(wx.EVT_MENU, OnAutoSearch, id=G2gd.wxID_AUTOSEARCH)
    241271    G2frame.Bind(wx.EVT_MENU, OnUnDo, id=G2gd.wxID_UNDO)
    242272    G2frame.Bind(wx.EVT_MENU, OnLSQPeakFit, id=G2gd.wxID_LSQPEAKFIT)
     
    250280    G2frame.PickTable = []
    251281    rowLabels = []
     282    PatternId = G2frame.PatternId
     283    Inst = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,PatternId, 'Instrument Parameters'))
    252284    for i in range(len(data)): rowLabels.append(str(i+1))
    253     colLabels = ['position','refine','intensity','refine','sigma','refine','gamma','refine']
    254     Types = [wg.GRID_VALUE_FLOAT+':10,4',wg.GRID_VALUE_BOOL,
    255         wg.GRID_VALUE_FLOAT+':10,1',wg.GRID_VALUE_BOOL,
    256         wg.GRID_VALUE_FLOAT+':10,5',wg.GRID_VALUE_BOOL,
    257         wg.GRID_VALUE_FLOAT+':10,5',wg.GRID_VALUE_BOOL]
     285    if 'C' in Inst['Type'][0]:
     286        colLabels = ['position','refine','intensity','refine','sigma','refine','gamma','refine']
     287        Types = [wg.GRID_VALUE_FLOAT+':10,4',wg.GRID_VALUE_BOOL,
     288            wg.GRID_VALUE_FLOAT+':10,1',wg.GRID_VALUE_BOOL,
     289            wg.GRID_VALUE_FLOAT+':10,5',wg.GRID_VALUE_BOOL,
     290            wg.GRID_VALUE_FLOAT+':10,5',wg.GRID_VALUE_BOOL]
     291    else:
     292        colLabels = ['position','refine','intensity','refine','alpha','refine',
     293            'beta','refine','sigma','refine','gamma','refine']
     294        Types = [wg.GRID_VALUE_FLOAT+':10,4',wg.GRID_VALUE_BOOL,
     295            wg.GRID_VALUE_FLOAT+':10,1',wg.GRID_VALUE_BOOL,
     296            wg.GRID_VALUE_FLOAT+':10,4',wg.GRID_VALUE_BOOL,
     297            wg.GRID_VALUE_FLOAT+':10,5',wg.GRID_VALUE_BOOL,
     298            wg.GRID_VALUE_FLOAT+':10,5',wg.GRID_VALUE_BOOL,
     299            wg.GRID_VALUE_FLOAT+':10,5',wg.GRID_VALUE_BOOL]
    258300    T = []
    259301    for peak in data:
     
    642684                    peak[6] = insVal['X']/cosd(peak[0]/2.0)+insVal['Y']*tand(peak[0]/2.0)
    643685            else:
    644                 pass
    645 #                for peak in peaks:
    646                    
     686                for peak in peaks:
     687                    dsp = peak[0]/insVal['difC']
     688                    peak[4] = insVal['alpha']*dsp
     689                    peak[6] = insVal['beta-0']+insVal['beta-1']/dsp**4
     690                    peak[8] = insVal['var-inst']*dsp**2
     691                    peak[10] = insVal['X']*dsp**2+insVal['Y']*dsp
    647692                   
    648693    def OnLoad(event):
     
    673718                    S = File.readline()               
    674719                File.close()
    675                 data = dict(zip(newItems,zip(newVals,newVals,len(newVals)*[False,])))
    676                 for item in data:
    677                     data[item] = list(data[item])
     720                inst = G2IO.makeInstDict(newItems,newVals,len(newVals)*[False,])
    678721                G2frame.PatternTree.SetItemPyData(G2gd.GetPatternTreeItemId(G2frame,G2frame.PatternId,'Instrument Parameters'),data)
    679722                RefreshInstrumentGrid(event,doAnyway=True)          #to get peaks updated
     
    940983        else:                                   #time of flight (neutrons)
    941984            instSizer.Add(wx.StaticText(G2frame.dataDisplay,-1,' Azimuth: %7.2f'%(insVal['Azimuth'])),0,wx.ALIGN_CENTER_VERTICAL)
     985            instSizer.Add(wx.StaticText(G2frame.dataDisplay,-1,' 2-theta: %7.2f'%(insVal['2-theta'])),0,wx.ALIGN_CENTER_VERTICAL)
     986            instSizer.Add((5,5),0)
     987            instSizer.Add((5,5),0)
    942988            for item in ['difC','difA','Zero','alpha','beta-0','beta-1','var-inst','X','Y']:
    943989                fmt = '%10.3f'
     
    952998                itemVal.Bind(wx.EVT_KILL_FOCUS,OnItemValue)
    953999                instSizer.Add(itemVal,0,wx.ALIGN_CENTER_VERTICAL)
    954                 itemRef = wx.CheckBox(G2frame.dataDisplay,wx.ID_ANY,label=' Refine?')
    955                 itemRef.SetValue(bool(insRef[item]))
    956                 RefObj[itemRef.GetId()] = item
    957                 itemRef.Bind(wx.EVT_CHECKBOX, OnItemRef)
    958                 instSizer.Add(itemRef,0,wx.ALIGN_CENTER_VERTICAL)
     1000                if not ifHisto and item in ['difC','difA','Zero',]:
     1001                    instSizer.Add((5,5),0)
     1002                else:
     1003                    itemRef = wx.CheckBox(G2frame.dataDisplay,wx.ID_ANY,label=' Refine?')
     1004                    itemRef.SetValue(bool(insRef[item]))
     1005                    RefObj[itemRef.GetId()] = item
     1006                    itemRef.Bind(wx.EVT_CHECKBOX, OnItemRef)
     1007                    instSizer.Add(itemRef,0,wx.ALIGN_CENTER_VERTICAL)
    9591008       
    9601009    else:                       #single crystal data
     
    12641313    IndexId = G2gd.GetPatternTreeItemId(G2frame,G2frame.PatternId, 'Index Peak List')
    12651314    Inst = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,G2frame.PatternId, 'Instrument Parameters'))
    1266     try:
    1267         wave = Inst['Lam'][1]
    1268     except KeyError:
    1269         wave = Inst['Lam1'][0]
     1315    wave = G2mth.getWave(Inst)
    12701316   
    12711317    def RefreshIndexPeaksGrid(event):
     
    13691415        'P 4/m m m','F m m m','I m m m','C m m m','P m m m','C 2/m','P 2/m','P -1']
    13701416    Inst = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,G2frame.PatternId, 'Instrument Parameters'))
    1371     if 'Lam' in Inst:
    1372         wave = Inst['Lam'][1]
    1373     else:
    1374         wave = Inst['Lam1'][0]
    1375        
     1417    wave = G2mth.getWave(Inst)
     1418   
    13761419    def SetLattice(controls):
    13771420        ibrav = bravaisSymb.index(controls[5])
Note: See TracChangeset for help on using the changeset viewer.