Changeset 443


Ignore:
Timestamp:
Dec 16, 2011 1:15:09 PM (11 years ago)
Author:
vondreele
Message:

make sum powder profiles numpy arrays
change name UpdateBackgroundGrid? to UpdateBackground?
min size is 1 nanometer = 10A
implement diffuse scattering model for background
iso/aniso Size & Mustrain are now Size:i/a instead of 0/1

Location:
trunk
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASII.py

    r441 r443  
    730730                        if scale:
    731731                            Comments.append("%10.3f %s" % (scale,' * '+name))
    732                             x,y,w,yc,yb,yd = data
     732                            x,y,w,yc,yb,yd = data   #numpy arrays!
    733733                            v = 1./w
    734734                            if lenX:
     
    771771                    if Id:
    772772                        Sample = G2pdG.SetDefaultSample()
    773                         self.PatternTree.SetItemPyData(Id,[[''],[Xsum,Ysum,Wsum,YCsum,YBsum,YDsum]])
     773                        self.PatternTree.SetItemPyData(Id,[[''],[np.array(Xsum),np.array(Ysum),np.array(Wsum),
     774                            np.array(YCsum),np.array(YBsum),np.array(YDsum)]])
    774775                        self.PatternTree.SetItemPyData(self.PatternTree.AppendItem(Id,text='Comments'),Comments)                   
    775776                        self.PatternTree.SetItemPyData(self.PatternTree.AppendItem(Id,text='Limits'),[tuple(Xminmax),Xminmax])
  • trunk/GSASIIgrid.py

    r438 r443  
    16481648        self.PickId = item
    16491649        data = self.PatternTree.GetItemPyData(item)
    1650         G2pdG.UpdateBackgroundGrid(self,data)
     1650        G2pdG.UpdateBackground(self,data)
    16511651        G2plt.PlotPatterns(self)
    16521652    elif self.PatternTree.GetItemText(item) == 'Limits':
  • trunk/GSASIIphsGUI.py

    r440 r443  
    22072207                try:
    22082208                    size = float(Obj.GetValue())
    2209                     if pid < 3 and size <= 0.01:            #10A lower limit!
     2209                    if pid < 3 and size <= 0.001:            #10A lower limit!
    22102210                        raise ValueError
    22112211                    UseList[hist]['Size'][4][pid] = size                   
     
    22162216                try:
    22172217                    size = float(Obj.GetValue())
    2218                     if size <= 0.01:            #10A lower limit!
     2218                    if size <= 0.001:            #10A lower limit!
    22192219                        raise ValueError
    22202220                    UseList[hist]['Size'][1][pid] = size
  • trunk/GSASIIpwd.py

    r432 r443  
    647647            bakInt = si.interp1d(bakPos,bakVals,'linear')
    648648            yb = bakInt(xdata)
     649    iD = 0       
     650    try:
     651        wave = parmDict[pfx+'Lam']
     652    except KeyError:
     653        wave = parmDict[pfx+'Lam1']
     654    q = 4.0*np.pi*npsind(xdata/2.0)/wave
     655    SQ = (q/(4*np.pi))**2
     656    FF = G2elem.GetFormFactorCoeff('Si')[0]
     657    ff = np.array(G2elem.ScatFac(FF,SQ)[0])**2
     658    while True:
     659        try:
     660            dbA = parmDict[pfx+'DebyeA:'+str(iD)]
     661            dbR = parmDict[pfx+'DebyeR:'+str(iD)]
     662            dbU = parmDict[pfx+'DebyeU:'+str(iD)]
     663            yb += ff*dbA*np.sin(q*dbR)*np.exp(-dbU*q**2)/(q*dbR)
     664            iD += 1       
     665        except KeyError:
     666            break   
    649667    return yb
    650668   
     
    658676            break
    659677    dydb = np.zeros(shape=(nBak,len(xdata)))
     678    dyddb = np.zeros(shape=(3*parmDict[pfx+'nDebye'],len(xdata)))
    660679
    661680    if bakType in ['chebyschev','cosine']:
     
    692711                        np.where(xdata<bakPos[i+1],(bakPos[i+1]-xdata)/(bakPos[i+1]-bakPos[i]),0.),
    693712                        np.where(xdata>bakPos[i-1],(xdata-bakPos[i-1])/(bakPos[i]-bakPos[i-1]),0.))
    694     return dydb
     713    iD = 0       
     714    try:
     715        wave = parmDict[pfx+'Lam']
     716    except KeyError:
     717        wave = parmDict[pfx+'Lam1']
     718    q = 4.0*np.pi*npsind(xdata/2.0)/wave
     719    SQ = (q/(4*np.pi))**2
     720    FF = G2elem.GetFormFactorCoeff('Si')[0]
     721    ff = np.array(G2elem.ScatFac(FF,SQ)[0])
     722    while True:
     723        try:
     724            dbA = parmDict[pfx+'DebyeA:'+str(iD)]
     725            dbR = parmDict[pfx+'DebyeR:'+str(iD)]
     726            dbU = parmDict[pfx+'DebyeU:'+str(iD)]
     727            sqr = np.sin(q*dbR)/(q*dbR)
     728            cqr = np.cos(q*dbR)
     729            temp = np.exp(-dbU*q**2)
     730            dyddb[3*iD] = ff*sqr*temp
     731            dyddb[3*iD+1] = ff*dbA*temp*(cqr-sqr)/dbR
     732            dyddb[3*iD+2] = -ff*dbA*sqr*temp*q**2
     733            iD += 1       
     734        except KeyError:
     735            break
     736    return dydb,dyddb
    695737
    696738#use old fortran routine
     
    790832# needs to return np.array([dMdx1,dMdx2,...]) in same order as varylist = backVary,insVary,peakVary order
    791833    dMdv = np.zeros(shape=(len(varyList),len(xdata)))
     834    dMdb,dMddb = getBackgroundDerv('',parmDict,bakType,xdata)
    792835    if 'Back:0' in varyList:            #background derivs are in front if present
    793         dMdb = getBackgroundDerv('',parmDict,bakType,xdata)
    794836        dMdv[0:len(dMdb)] = dMdb
    795        
     837    names = ['DebyeA','DebyeR','DebyeU']
     838    for name in varyList:
     839        if 'Debye' in name:
     840            ih,parm,id = name.split(':')
     841            ip = names.index(parm)
     842            dMdv[varyList.index(name)] = dMddb[3*int(id)+ip]
    796843    dx = xdata[1]-xdata[0]
    797844    U = parmDict['U']
     
    901948   
    902949    def SetBackgroundParms(Background):
    903         bakType,bakFlag = Background[:2]
    904         backVals = Background[3:]
     950        if len(Background) == 1:            # fix up old backgrounds
     951            BackGround.append({'nDebye':0,'debyeTerms':[]})
     952        bakType,bakFlag = Background[0][:2]
     953        backVals = Background[0][3:]
    905954        backNames = ['Back:'+str(i) for i in range(len(backVals))]
    906         if bakFlag: #returns backNames as varyList = backNames
    907             return bakType,dict(zip(backNames,backVals)),backNames
    908         else:       #no background varied; varyList = []
    909             return bakType,dict(zip(backNames,backVals)),[]
     955        Debye = Background[1]
     956        backDict = dict(zip(backNames,backVals))
     957        backVary = []
     958        if bakFlag:
     959            backVary = backNames
     960        backDict['nDebye'] = Debye['nDebye']
     961        debyeDict = {}
     962        debyeList = []
     963        for i in range(Debye['nDebye']):
     964            debyeNames = ['DebyeA:'+str(i),'DebyeR:'+str(i),'DebyeU:'+str(i)]
     965            debyeDict.update(dict(zip(debyeNames,Debye['debyeTerms'][i][::2])))
     966            debyeList += zip(debyeNames,Debye['debyeTerms'][i][1::2])
     967        debyeVary = []
     968        for item in debyeList:
     969            if item[1]:
     970                debyeVary.append(item[0])
     971        backDict.update(debyeDict)
     972        backVary += debyeVary   
     973        return bakType,backDict,backVary           
    910974       
    911975    def GetBackgroundParms(parmList,Background):
     
    914978            try:
    915979                bakName = 'Back:'+str(iBak)
    916                 Background[iBak+3] = parmList[bakName]
     980                Background[0][iBak+3] = parmList[bakName]
    917981                iBak += 1
     982            except KeyError:
     983                break
     984        iDb = 0
     985        while True:
     986            names = ['DebyeA:','DebyeR:','DebyeU:']
     987            try:
     988                for i,name in enumerate(names):
     989                    val = parmList[name+str(iDb)]
     990                    Background[1]['debyeTerms'][iDb][2*i] = val
     991                iDb += 1
    918992            except KeyError:
    919993                break
    920994               
    921995    def BackgroundPrint(Background,sigDict):
    922         if Background[1]:
    923             print 'Background coefficients for',Background[0],'function'
     996        if Background[0][1]:
     997            print 'Background coefficients for',Background[0][0],'function'
    924998            ptfmt = "%12.5f"
    925999            ptstr =  'values:'
    9261000            sigstr = 'esds  :'
    927             for i,back in enumerate(Background[3:]):
     1001            for i,back in enumerate(Background[0][3:]):
    9281002                ptstr += ptfmt % (back)
    9291003                sigstr += ptfmt % (sigDict['Back:'+str(i)])
     
    9321006        else:
    9331007            print 'Background not refined'
    934            
     1008        if Background[1]['nDebye']:
     1009            parms = ['DebyeA','DebyeR','DebyeU']
     1010            print 'Debye diffuse scattering coefficients'
     1011            ptfmt = "%12.5f"
     1012            names =   'names :'
     1013            ptstr =  'values:'
     1014            sigstr = 'esds  :'
     1015            for item in sigDict:
     1016                if 'Debye' in item:
     1017                    names += '%12s'%(item)
     1018                    sigstr += ptfmt%(sigDict[item])
     1019                    parm,id = item.split(':')
     1020                    ip = parms.index(parm)
     1021                    ptstr += ptfmt%(Background[1]['debyeTerms'][int(id)][2*ip])
     1022            print names
     1023            print ptstr
     1024            print sigstr
     1025                           
    9351026    def SetInstParms(Inst):
    9361027        insVals,insFlags,insNames = Inst[1:4]
  • trunk/GSASIIpwdGUI.py

    r440 r443  
    6868            if self.dataDisplay.GetName() == item:
    6969                if item == 'Background':
    70                     UpdateBackgroundGrid(self,self.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(self,PatternId, item)))
     70                    UpdateBackground(self,self.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(self,PatternId, item)))
    7171                elif item == 'Instrument Parameters':
    7272                    UpdateInstrumentGrid(self,self.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(self,PatternId, item)))
     
    113113            self.ErrorDialog('No peaks!','Nothing to fit!')
    114114            return
    115         background = self.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(self,PatternId, 'Background'))[0]
     115        background = self.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(self,PatternId, 'Background'))
    116116        limits = self.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(self,PatternId, 'Limits'))[1]
    117117        inst = self.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(self,PatternId, 'Instrument Parameters'))
     
    256256    self.dataFrame.setSizePosLeft([535,350])
    257257       
    258 def UpdateBackgroundGrid(self,data):
     258def UpdateBackground(self,data):
     259    if len(data) < 2:       #add Debye diffuse scattering here
     260        data.append({'nDebye':0,'debyeTerms':[]})
    259261    ValObj = {}
    260    
    261     def OnNewType(event):
    262         data[0][0] = bakType.GetValue()
    263        
    264     def OnBakRef(event):
    265         data[0][1] = bakRef.GetValue()
    266        
    267     def OnBakTerms(event):
    268         data[0][2] = int(bakTerms.GetValue())
    269         M = len(data[0])
    270         N = data[0][2]+3
    271         item = data[0]
    272         if N > M:       #add terms
    273             for i in range(M,N):
    274                 item.append(0.0)
    275         elif N < M:     #delete terms
    276             for i in range(N,M):
    277                 del(item[-1])
    278         self.PatternTree.SetItemPyData(BackId,data)
    279         UpdateBackgroundGrid(self,data)
    280        
    281     def OnBakVal(event):
    282         Obj = event.GetEventObject()
    283         item = ValObj[Obj.GetId()][0]
    284         try:
    285             value = float(Obj.GetValue())
    286         except ValueError:
    287             value = data[0][item]
    288         data[0][item] = value
    289         Obj.SetValue('%10.4f'%(value))
    290        
     262           
    291263    def OnBackCopy(event):
    292264        histList = ['All',]+G2gd.GetPatternTreeDataNames(self,['PWDR',])
     
    309281            dlg.Destroy()
    310282       
    311        
     283    def BackSizer():
     284       
     285        def OnNewType(event):
     286            data[0][0] = bakType.GetValue()
     287           
     288        def OnBakRef(event):
     289            data[0][1] = bakRef.GetValue()
     290           
     291        def OnBakTerms(event):
     292            data[0][2] = int(bakTerms.GetValue())
     293            M = len(data[0])
     294            N = data[0][2]+3
     295            item = data[0]
     296            if N > M:       #add terms
     297                for i in range(M,N):
     298                    item.append(0.0)
     299            elif N < M:     #delete terms
     300                for i in range(N,M):
     301                    del(item[-1])
     302            self.PatternTree.SetItemPyData(BackId,data)
     303            UpdateBackground(self,data)
     304           
     305        def OnBakVal(event):
     306            Obj = event.GetEventObject()
     307            item = ValObj[Obj.GetId()][0]
     308            try:
     309                value = float(Obj.GetValue())
     310            except ValueError:
     311                value = data[0][item]
     312            data[0][item] = value
     313            Obj.SetValue('%10.4f'%(value))
     314       
     315        backSizer = wx.BoxSizer(wx.VERTICAL)
     316        topSizer = wx.BoxSizer(wx.HORIZONTAL)
     317        topSizer.Add(wx.StaticText(self.dataDisplay,-1,' Background function: '),0,wx.ALIGN_CENTER_VERTICAL)
     318        bakType = wx.ComboBox(self.dataDisplay,value=data[0][0],
     319                choices=Choices,style=wx.CB_READONLY|wx.CB_DROPDOWN)
     320        bakType.Bind(wx.EVT_COMBOBOX, OnNewType)
     321        topSizer.Add(bakType)
     322        topSizer.Add((5,0),0)
     323        bakRef = wx.CheckBox(self.dataDisplay,label=' Refine?')
     324        bakRef.SetValue(bool(data[0][1]))
     325        bakRef.Bind(wx.EVT_CHECKBOX, OnBakRef)
     326        topSizer.Add(bakRef,0,wx.ALIGN_CENTER_VERTICAL)
     327        topSizer.Add(wx.StaticText(self.dataDisplay,-1,' No. coeff.: '),0,wx.ALIGN_CENTER_VERTICAL)
     328        bakTerms = wx.ComboBox(self.dataDisplay,-1,value=str(data[0][2]),choices=[str(i+1) for i in range(36)],
     329            style=wx.CB_READONLY|wx.CB_DROPDOWN)
     330        bakTerms.Bind(wx.EVT_COMBOBOX,OnBakTerms)
     331        topSizer.Add(bakTerms,0,wx.ALIGN_CENTER_VERTICAL)
     332        topSizer.Add((5,0),0)
     333        backSizer.Add(topSizer)
     334        backSizer.Add(wx.StaticText(self.dataDisplay,-1,' Background coefficients:'),0,wx.ALIGN_CENTER_VERTICAL)
     335        bakSizer = wx.FlexGridSizer(1,5,5,5)
     336        for i,value in enumerate(data[0][3:]):
     337            bakVal = wx.TextCtrl(self.dataDisplay,wx.ID_ANY,'%10.4f'%(value),style=wx.TE_PROCESS_ENTER)
     338            bakSizer.Add(bakVal,0,wx.ALIGN_CENTER_VERTICAL)
     339            ValObj[bakVal.GetId()] = [i+3]
     340            bakVal.Bind(wx.EVT_TEXT_ENTER,OnBakVal)
     341            bakVal.Bind(wx.EVT_KILL_FOCUS,OnBakVal)
     342        backSizer.Add(bakSizer)
     343        return backSizer
     344       
     345    def DebyeSizer():
     346       
     347        def OnDebTerms(event):
     348            data[1]['nDebye'] = int(debTerms.GetValue())
     349            M = len(data[1]['debyeTerms'])
     350            N = data[1]['nDebye']
     351            if N > M:       #add terms
     352                for i in range(M,N):
     353                    data[1]['debyeTerms'].append([1.0,False,1.0,False,0.010,False])
     354            elif N < M:     #delete terms
     355                for i in range(N,M):
     356                    del(data[1]['debyeTerms'][-1])
     357            UpdateBackground(self,data)
     358
     359        def KeyEditPeakGrid(event):
     360            colList = debyeGrid.GetSelectedCols()
     361            if event.GetKeyCode() == wx.WXK_RETURN:
     362                event.Skip(True)
     363            elif event.GetKeyCode() == wx.WXK_CONTROL:
     364                event.Skip(True)
     365            elif event.GetKeyCode() == wx.WXK_SHIFT:
     366                event.Skip(True)
     367            elif colList:
     368                debyeGrid.ClearSelection()
     369                key = event.GetKeyCode()
     370                for col in colList:
     371                    if debyeTable.GetTypeName(0,col) == wg.GRID_VALUE_BOOL:
     372                        if key == 89: #'Y'
     373                            for row in range(debyeGrid.GetNumberRows()): data[1]['debyeTerms'][row][col]=True
     374                        elif key == 78:  #'N'
     375                            for row in range(debyeGrid.GetNumberRows()): data[1]['debyeTerms'][row][col]=False
     376       
     377        debSizer = wx.BoxSizer(wx.VERTICAL)
     378        topSizer = wx.BoxSizer(wx.HORIZONTAL)
     379        topSizer.Add(wx.StaticText(self.dataDisplay,-1,' Debye scattering: '),0,wx.ALIGN_CENTER_VERTICAL)
     380        topSizer.Add(wx.StaticText(self.dataDisplay,-1,' No. coeff.: '),0,wx.ALIGN_CENTER_VERTICAL)
     381        debTerms = wx.ComboBox(self.dataDisplay,-1,value=str(data[1]['nDebye']),choices=[str(i) for i in range(12)],
     382            style=wx.CB_READONLY|wx.CB_DROPDOWN)
     383        debTerms.Bind(wx.EVT_COMBOBOX,OnDebTerms)
     384        topSizer.Add(debTerms,0,wx.ALIGN_CENTER_VERTICAL)
     385        topSizer.Add((5,0),0)
     386        debSizer.Add(topSizer)
     387        if data[1]['nDebye']:
     388            debSizer.Add(wx.StaticText(self.dataDisplay,-1,' Debye diffuse terms:'),0,wx.ALIGN_CENTER_VERTICAL)       
     389            rowLabels = []
     390            for i in range(len(data[1]['debyeTerms'])): rowLabels.append(str(i))
     391            colLabels = ['A','refine','R','refine','U','refine']
     392            Types = [wg.GRID_VALUE_FLOAT+':10,2',wg.GRID_VALUE_BOOL,
     393            wg.GRID_VALUE_FLOAT+':10,3',wg.GRID_VALUE_BOOL,
     394            wg.GRID_VALUE_FLOAT+':10,5',wg.GRID_VALUE_BOOL]
     395            debyeTable = G2gd.Table(data[1]['debyeTerms'],rowLabels=rowLabels,colLabels=colLabels,types=Types)
     396            debyeGrid = G2gd.GSGrid(parent=self.dataDisplay)
     397            debyeGrid.SetTable(debyeTable, True)
     398            debyeGrid.Bind(wx.EVT_KEY_DOWN, KeyEditPeakGrid)
     399            debyeGrid.AutoSizeColumns(False)
     400            debSizer.Add(debyeGrid)       
     401        return debSizer     
     402               
    312403    if self.dataDisplay:
    313404        self.dataFrame.Clear()
     
    321412    Choices = ['chebyschev','cosine','lin interpolate','inv interpolate','log interpolate']
    322413    mainSizer = wx.BoxSizer(wx.VERTICAL)
    323     topSizer = wx.BoxSizer(wx.HORIZONTAL)
    324     topSizer.Add(wx.StaticText(self.dataDisplay,-1,' Background function: '),0,wx.ALIGN_CENTER_VERTICAL)
    325     bakType = wx.ComboBox(self.dataDisplay,value=data[0][0],
    326             choices=Choices,style=wx.CB_READONLY|wx.CB_DROPDOWN)
    327     bakType.Bind(wx.EVT_COMBOBOX, OnNewType)
    328     topSizer.Add(bakType)
    329     topSizer.Add((5,0),0)
    330     bakRef = wx.CheckBox(self.dataDisplay,label=' Refine?')
    331     bakRef.SetValue(bool(data[0][1]))
    332     bakRef.Bind(wx.EVT_CHECKBOX, OnBakRef)
    333     topSizer.Add(bakRef,0,wx.ALIGN_CENTER_VERTICAL)
    334     topSizer.Add(wx.StaticText(self.dataDisplay,-1,' No. coeff.: '),0,wx.ALIGN_CENTER_VERTICAL)
    335     bakTerms = wx.ComboBox(self.dataDisplay,-1,value=str(data[0][2]),choices=[str(i+1) for i in range(36)],
    336         style=wx.CB_READONLY|wx.CB_DROPDOWN)
    337     bakTerms.Bind(wx.EVT_COMBOBOX,OnBakTerms)
    338     topSizer.Add(bakTerms,0,wx.ALIGN_CENTER_VERTICAL)
    339     topSizer.Add((5,0),0)
    340     mainSizer.Add(topSizer)
    341     mainSizer.Add(wx.StaticText(self.dataDisplay,-1,' Background coefficients:'),0,wx.ALIGN_CENTER_VERTICAL)
    342     bakSizer = wx.FlexGridSizer(1,5,5,5)
    343     for i,value in enumerate(data[0][3:]):
    344         bakVal = wx.TextCtrl(self.dataDisplay,wx.ID_ANY,'%10.4f'%(value),style=wx.TE_PROCESS_ENTER)
    345         bakSizer.Add(bakVal,0,wx.ALIGN_CENTER_VERTICAL)
    346         ValObj[bakVal.GetId()] = [i+3]
    347         bakVal.Bind(wx.EVT_TEXT_ENTER,OnBakVal)
    348         bakVal.Bind(wx.EVT_KILL_FOCUS,OnBakVal)       
    349     mainSizer.Add(bakSizer)
     414    mainSizer.Add(BackSizer())
     415    mainSizer.Add((0,5),0)
     416    mainSizer.Add(DebyeSizer())
    350417    mainSizer.Layout()   
    351418    self.dataDisplay.SetSizer(mainSizer)
  • trunk/GSASIIstruct.py

    r441 r443  
    12591259                    hapData[item][1][0] = parmDict[pfx+item+':i']
    12601260                    if item == 'Size':
    1261                         hapData[item][1][0] = min(10.,max(0.01,hapData[item][1][0]))
     1261                        hapData[item][1][0] = min(10.,max(0.001,hapData[item][1][0]))
    12621262                    if pfx+item+':i' in sigDict:
    12631263                        SizeMuStrSig[item][0][0] = sigDict[pfx+item+':i']
     
    12651265                        hapData[item][1][1] = parmDict[pfx+item+':a']
    12661266                        if item == 'Size':
    1267                             hapData[item][1][1] = min(10.,max(0.01,hapData[item][1][1]))                       
     1267                            hapData[item][1][1] = min(10.,max(0.001,hapData[item][1][1]))                       
    12681268                        if pfx+item+':a' in sigDict:
    12691269                            SizeMuStrSig[item][0][1] = sigDict[pfx+item+':a']
     
    12871287   
    12881288    def GetBackgroundParms(hId,Background):
    1289         bakType,bakFlag = Background[:2]
    1290         backVals = Background[3:]
     1289        Back = Background[0]
     1290        Debye = Background[1]
     1291        bakType,bakFlag = Back[:2]
     1292        backVals = Back[3:]
    12911293        backNames = [':'+str(hId)+':Back:'+str(i) for i in range(len(backVals))]
    1292         if bakFlag:                                 #returns backNames as varyList = backNames
    1293             return bakType,dict(zip(backNames,backVals)),backNames
    1294         else:                                       #no background varied; varyList = []
    1295             return bakType,dict(zip(backNames,backVals)),[]
     1294        backDict = dict(zip(backNames,backVals))
     1295        backVary = []
     1296        if bakFlag:
     1297            backVary = backNames
     1298        backDict[':'+str(hId)+':nDebye'] = Debye['nDebye']
     1299        debyeDict = {}
     1300        debyeList = []
     1301        for i in range(Debye['nDebye']):
     1302            debyeNames = [':'+str(hId)+':DebyeA:'+str(i),':'+str(hId)+':DebyeR:'+str(i),':'+str(hId)+':DebyeU:'+str(i)]
     1303            debyeDict.update(dict(zip(debyeNames,Debye['debyeTerms'][i][::2])))
     1304            debyeList += zip(debyeNames,Debye['debyeTerms'][i][1::2])
     1305        debyeVary = []
     1306        for item in debyeList:
     1307            if item[1]:
     1308                debyeVary.append(item[0])
     1309        backDict.update(debyeDict)
     1310        backVary += debyeVary   
     1311        return bakType,backDict,backVary           
    12961312       
    12971313    def GetInstParms(hId,Inst):
     
    13061322            if flag:
    13071323                insVary.append(insName)
    1308         instDict[pfx+'X'] = max(instDict[pfx+'X'],0.01)
    1309         instDict[pfx+'Y'] = max(instDict[pfx+'Y'],0.01)
     1324        instDict[pfx+'X'] = max(instDict[pfx+'X'],0.001)
     1325        instDict[pfx+'Y'] = max(instDict[pfx+'Y'],0.001)
    13101326        instDict[pfx+'SH/L'] = max(instDict[pfx+'SH/L'],0.0005)
    13111327        return dataType,instDict,insVary
     
    13301346       
    13311347    def PrintBackground(Background):
    1332         print '\n Background function: ',Background[0],' Refine?',bool(Background[1])
     1348        Back = Background[0]
     1349        Debye = Background[1]
     1350        print '\n Background function: ',Back[0],' Refine?',bool(Back[1])
    13331351        line = ' Coefficients: '
    1334         for i,back in enumerate(Background[3:]):
     1352        for i,back in enumerate(Back[3:]):
    13351353            line += '%10.3f'%(back)
    13361354            if i and not i%10:
    13371355                line += '\n'+15*' '
    1338         print line
     1356        print line
     1357        if Debye['nDebye']:
     1358            print '\n Debye diffuse scattering coefficients'
     1359            parms = ['DebyeA','DebyeR','DebyeU']
     1360            line = ' names :'
     1361            for parm in parms:
     1362                line += '%16s'%(parm)
     1363            print line
     1364            for j,term in enumerate(Debye['debyeTerms']):
     1365                line = ' term'+'%2d'%(j)+':'
     1366                for i in range(3):
     1367                    line += '%10.4f %5s'%(term[2*i],bool(term[2*i+1]))                   
     1368                print line
    13391369       
    13401370    def PrintInstParms(Inst):
     
    13881418        controlDict[pfx+'Limits'] = Histogram['Limits'][1]
    13891419       
    1390         Background = Histogram['Background'][0]
     1420        Background = Histogram['Background']
    13911421        Type,bakDict,bakVary = GetBackgroundParms(hId,Background)
    13921422        controlDict[pfx+'bakType'] = Type
     
    14271457   
    14281458    def SetBackgroundParms(pfx,Background,parmDict,sigDict):
    1429         lenBack = len(Background[3:])
    1430         backSig = [0 for i in range(lenBack)]
     1459        Back = Background[0]
     1460        Debye = Background[1]
     1461        lenBack = len(Back[3:])
     1462        backSig = [0 for i in range(lenBack+3*Debye['nDebye'])]
    14311463        for i in range(lenBack):
    1432             Background[3+i] = parmDict[pfx+'Back:'+str(i)]
     1464            Back[3+i] = parmDict[pfx+'Back:'+str(i)]
    14331465            if pfx+'Back:'+str(i) in sigDict:
    14341466                backSig[i] = sigDict[pfx+'Back:'+str(i)]
     1467        if Debye['nDebye']:
     1468            for i in range(Debye['nDebye']):
     1469                names = [pfx+'DebyeA:'+str(i),pfx+'DebyeR:'+str(i),pfx+'DebyeU:'+str(i)]
     1470                for j,name in enumerate(names):
     1471                    Debye['debyeTerms'][i][2*j] = parmDict[name]
     1472                    if name in sigDict:
     1473                        backSig[lenBack+3*i+j] = sigDict[name]           
    14351474        return backSig
    14361475       
     
    14611500       
    14621501    def PrintBackgroundSig(Background,backSig):
    1463         print '\n Background function: ',Background[0]
     1502        Back = Background[0]
     1503        Debye = Background[1]
     1504        lenBack = len(Back[3:])
     1505        print '\n Background function: ',Back[0]
    14641506        valstr = ' value : '
    14651507        sigstr = ' sig   : '
    1466         for i,back in enumerate(Background[3:]):
     1508        for i,back in enumerate(Back[3:]):
    14671509            valstr += '%10.4f'%(back)
    1468             if Background[1]:
     1510            if Back[1]:
    14691511                sigstr += '%10.4f'%(backSig[i])
    14701512            else:
     
    14721514        print valstr
    14731515        print sigstr
     1516        if Debye['nDebye']:
     1517            ifAny = False
     1518            ptfmt = "%12.5f"
     1519            names =  ' names :'
     1520            ptstr =  ' values:'
     1521            sigstr = ' esds  :'
     1522            for item in sigDict:
     1523                if 'Debye' in item:
     1524                    ifAny = True
     1525                    names += '%12s'%(item)
     1526                    ptstr += ptfmt%(parmDict[item])
     1527                    sigstr += ptfmt%(sigDict[item])
     1528            if ifAny:
     1529                print '\n Debye diffuse scattering coefficients'
     1530                print names
     1531                print ptstr
     1532                print sigstr
    14741533       
    14751534    def PrintInstParmsSig(Inst,instSig):
     
    15221581            hId = Histogram['hId']
    15231582            pfx = ':'+str(hId)+':'
    1524             Background = Histogram['Background'][0]
     1583            Background = Histogram['Background']
    15251584            backSig = SetBackgroundParms(pfx,Background,parmDict,sigDict)
    15261585           
     
    19562015    #microstrain derivatives               
    19572016    if calcControls[phfx+'MustrainType'] == 'isotropic':
    1958         gamDict[phfx+'Mustrain:0'] =  0.018*tanth/np.pi           
     2017        gamDict[phfx+'Mustrain:i'] =  0.018*tanth/np.pi           
    19592018    elif calcControls[phfx+'MustrainType'] == 'uniaxial':
    19602019        H = np.array(refl[:3])
    19612020        P = np.array(calcControls[phfx+'MustrainAxis'])
    19622021        cosP,sinP = G2lat.CosSinAngle(H,P,G)
    1963         Si = parmDict[phfx+'Mustrain:0']
    1964         Sa = parmDict[phfx+'Mustrain:1']
     2022        Si = parmDict[phfx+'Mustrain:i']
     2023        Sa = parmDict[phfx+'Mustrain:a']
    19652024        gami = 0.018*Si*Sa*tanth/np.pi
    19662025        sqtrm = np.sqrt((Si*cosP)**2+(Sa*sinP)**2)
    19672026        gam = gami/sqtrm
    1968         gamDict[phfx+'Mustrain:0'] = gam/Si-gami*Si*cosP**2/sqtrm**3
    1969         gamDict[phfx+'Mustrain:1'] = gam/Sa-gami*Sa*sinP**2/sqtrm**3
     2027        gamDict[phfx+'Mustrain:i'] = gam/Si-gami*Si*cosP**2/sqtrm**3
     2028        gamDict[phfx+'Mustrain:a'] = gam/Sa-gami*Sa*sinP**2/sqtrm**3
    19702029    else:       #generalized - P.W. Stephens model
    19712030        pwrs = calcControls[phfx+'MuPwrs']
     
    22672326    bakType = calcControls[hfx+'bakType']
    22682327    dMdv = np.zeros(shape=(len(varylist),len(x)))
     2328    dMdb,dMddb = G2pwd.getBackgroundDerv(hfx,parmDict,bakType,x)
    22692329    if hfx+'Back:0' in varylist: # for now assume that Back:x vars to not appear in constraints
    2270         dMdb = G2pwd.getBackgroundDerv(hfx,parmDict,bakType,x)
    22712330        bBpos =varylist.index(hfx+'Back:0')
    22722331        dMdv[bBpos:bBpos+len(dMdb)] = dMdb
    2273        
     2332    names = [hfx+'DebyeA',hfx+'DebyeR',hfx+'DebyeU']
     2333    for name in varylist:
     2334        if 'Debye' in name:
     2335            id = int(name.split(':')[-1])
     2336            parm = name[:int(name.rindex(':'))]
     2337            ip = names.index(parm)
     2338            dMdv[varylist.index(name)] = dMddb[3*id+ip]
    22742339    if 'C' in calcControls[hfx+'histType']:   
    22752340        dx = x[1]-x[0]
     
    24162481    G2mv.Dict2Map(parmdict,varylist)
    24172482    Histograms,Phases = HistoPhases
     2483    nvar = len(varylist)
    24182484    dMdv = np.empty(0)
    24192485    for histogram in Histograms:
     
    25852651    sigDict = dict(zip(varyList,sig))
    25862652    newCellDict = GetNewCellParms(parmDict,varyList)
    2587     print newCellDict
    25882653    newAtomDict = ApplyXYZshifts(parmDict,varyList)
    25892654    covData = {'variables':result[0],'varyList':varyList,'sig':sig,
Note: See TracChangeset for help on using the changeset viewer.