Changeset 447


Ignore:
Timestamp:
Dec 20, 2011 11:46:45 AM (10 years ago)
Author:
vondreele
Message:

Add another variation on background - individual peaks (not finished)
fix image calibration problem

Location:
trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASIIimage.py

    r397 r447  
    205205        xpix += Zmax%w2-w
    206206        ypix += Zmax/w2-w
    207         return xpix,ypix,np.ravel(Z)[Zmax],np.ravel(Z)[Zmin]
     207        return xpix,ypix,np.ravel(Z)[Zmax],max(0.0001,np.ravel(Z)[Zmin])   #avoid neg/zero minimum
    208208    else:
    209209        return 0,0,0,0     
  • trunk/GSASIIpwd.py

    r446 r447  
    953953        backVals = Background[0][3:]
    954954        backNames = ['Back:'+str(i) for i in range(len(backVals))]
    955         Debye = Background[1]
     955        Debye = Background[1]           #also has background peaks stuff
    956956        backDict = dict(zip(backNames,backVals))
    957957        backVary = []
    958958        if bakFlag:
    959959            backVary = backNames
     960
    960961        backDict['nDebye'] = Debye['nDebye']
    961962        debyeDict = {}
     
    970971                debyeVary.append(item[0])
    971972        backDict.update(debyeDict)
    972         backVary += debyeVary   
     973        backVary += debyeVary
     974   
     975        peaksDict = {}
     976        peaksList = []
     977        for i in range(Debye['nPeaks']):
     978            peaksNames = ['BkPkpos:'+str(i),'BkPkint:'+str(i),'BkPksig:'+str(i),'BkPkgam:'+str(i)]
     979            peaksDict.update(dict(zip(peaksNames,Debye['peaksList'][i][::2])))
     980            peaksList += zip(peaksNames,Debye['peaksList'][i][1::2])
     981        peaksVary = []
     982        for item in peaksList:
     983            if item[1]:
     984                peaksVary.append(item[0])
     985        backDict.update(peaksDict)
     986        backVary += peaksVary   
    973987        return bakType,backDict,backVary           
    974988       
     
    9891003                    val = parmList[name+str(iDb)]
    9901004                    Background[1]['debyeTerms'][iDb][2*i] = val
     1005                iDb += 1
     1006            except KeyError:
     1007                break
     1008        iDb = 0
     1009        while True:
     1010            names = ['BkPkpos:','BkPkint:','BkPksig:','BkPkgam:']
     1011            try:
     1012                for i,name in enumerate(names):
     1013                    val = parmList[name+str(iDb)]
     1014                    Background[1]['peaksList'][iDb][2*i] = val
    9911015                iDb += 1
    9921016            except KeyError:
     
    10201044                    ip = parms.index(parm)
    10211045                    ptstr += ptfmt%(Background[1]['debyeTerms'][int(id)][2*ip])
     1046            print names
     1047            print ptstr
     1048            print sigstr
     1049        if Background[1]['nPeaks']:
     1050            parms = ['BkPkpos','BkPkint','BkPksig','BkPkgam']
     1051            print 'Peaks in background coefficients'
     1052            ptfmt = "%12.5f"
     1053            names =   'names :'
     1054            ptstr =  'values:'
     1055            sigstr = 'esds  :'
     1056            for item in sigDict:
     1057                if 'BkPk' in item:
     1058                    names += '%12s'%(item)
     1059                    sigstr += ptfmt%(sigDict[item])
     1060                    parm,id = item.split(':')
     1061                    ip = parms.index(parm)
     1062                    ptstr += ptfmt%(Background[1]['peaksList'][int(id)][2*ip])
    10221063            print names
    10231064            print ptstr
  • trunk/GSASIIpwdGUI.py

    r443 r447  
    257257       
    258258def UpdateBackground(self,data):
    259     if len(data) < 2:       #add Debye diffuse scattering here
    260         data.append({'nDebye':0,'debyeTerms':[]})
     259    if len(data) < 2:       #add Debye diffuse & peaks scattering here
     260        data.append({'nDebye':0,'debyeTerms':[],'nPeaks':0,'peaksList':[]})
     261    if 'nPeaks' not in data[1]:
     262        data[1].update({'nPeaks':0,'peaksList':[]})
    261263    ValObj = {}
    262264           
     
    374376                        elif key == 78:  #'N'
    375377                            for row in range(debyeGrid.GetNumberRows()): data[1]['debyeTerms'][row][col]=False
     378
    376379       
    377380        debSizer = wx.BoxSizer(wx.VERTICAL)
     
    399402            debyeGrid.AutoSizeColumns(False)
    400403            debSizer.Add(debyeGrid)       
    401         return debSizer     
     404        return debSizer
     405     
     406    def PeaksSizer():
     407
     408        def OnPeaks(event):
     409            data[1]['nPeaks'] = int(peaks.GetValue())
     410            M = len(data[1]['peaksList'])
     411            N = data[1]['nPeaks']
     412            if N > M:       #add terms
     413                for i in range(M,N):
     414                    data[1]['peaksList'].append([1.0,False,1.0,False,0.10,False,0.10,False])
     415            elif N < M:     #delete terms
     416                for i in range(N,M):
     417                    del(data[1]['peaksList'][-1])
     418            UpdateBackground(self,data)
     419
     420        def KeyEditPeakGrid(event):
     421            colList = peaksGrid.GetSelectedCols()
     422            if event.GetKeyCode() == wx.WXK_RETURN:
     423                event.Skip(True)
     424            elif event.GetKeyCode() == wx.WXK_CONTROL:
     425                event.Skip(True)
     426            elif event.GetKeyCode() == wx.WXK_SHIFT:
     427                event.Skip(True)
     428            elif colList:
     429                peaksGrid.ClearSelection()
     430                key = event.GetKeyCode()
     431                for col in colList:
     432                    if peaksTable.GetTypeName(0,col) == wg.GRID_VALUE_BOOL:
     433                        if key == 89: #'Y'
     434                            for row in range(peaksGrid.GetNumberRows()): data[1]['peaksList'][row][col]=True
     435                        elif key == 78:  #'N'
     436                            for row in range(peaksGrid.GetNumberRows()): data[1]['peaksList'][row][col]=False
     437
     438        peaksSizer = wx.BoxSizer(wx.VERTICAL)
     439        topSizer = wx.BoxSizer(wx.HORIZONTAL)
     440        topSizer.Add(wx.StaticText(self.dataDisplay,-1,' Peaks in background: '),0,wx.ALIGN_CENTER_VERTICAL)
     441        topSizer.Add(wx.StaticText(self.dataDisplay,-1,' No. peaks: '),0,wx.ALIGN_CENTER_VERTICAL)
     442        peaks = wx.ComboBox(self.dataDisplay,-1,value=str(data[1]['nPeaks']),choices=[str(i) for i in range(12)],
     443            style=wx.CB_READONLY|wx.CB_DROPDOWN)
     444        peaks.Bind(wx.EVT_COMBOBOX,OnPeaks)
     445        topSizer.Add(peaks,0,wx.ALIGN_CENTER_VERTICAL)
     446        topSizer.Add((5,0),0)
     447        peaksSizer.Add(topSizer)
     448        if data[1]['nPeaks']:
     449            peaksSizer.Add(wx.StaticText(self.dataDisplay,-1,' Peak list:'),0,wx.ALIGN_CENTER_VERTICAL)       
     450            rowLabels = []
     451            for i in range(len(data[1]['peaksList'])): rowLabels.append(str(i))
     452            colLabels = ['pos','refine','int','refine','sig','refine','gam','refine']
     453            Types = [wg.GRID_VALUE_FLOAT+':10,2',wg.GRID_VALUE_BOOL,
     454            wg.GRID_VALUE_FLOAT+':10,3',wg.GRID_VALUE_BOOL,
     455            wg.GRID_VALUE_FLOAT+':10,3',wg.GRID_VALUE_BOOL,
     456            wg.GRID_VALUE_FLOAT+':10,5',wg.GRID_VALUE_BOOL]
     457            peaksTable = G2gd.Table(data[1]['peaksList'],rowLabels=rowLabels,colLabels=colLabels,types=Types)
     458            peaksGrid = G2gd.GSGrid(parent=self.dataDisplay)
     459            peaksGrid.SetTable(peaksTable, True)
     460            peaksGrid.Bind(wx.EVT_KEY_DOWN, KeyEditPeakGrid)
     461            peaksGrid.AutoSizeColumns(False)
     462            peaksSizer.Add(peaksGrid)       
     463        return peaksSizer
    402464               
    403465    if self.dataDisplay:
     
    415477    mainSizer.Add((0,5),0)
    416478    mainSizer.Add(DebyeSizer())
     479    mainSizer.Add((0,5),0)
     480    mainSizer.Add(PeaksSizer())
    417481    mainSizer.Layout()   
    418482    self.dataDisplay.SetSizer(mainSizer)
Note: See TracChangeset for help on using the changeset viewer.