Changeset 1456


Ignore:
Timestamp:
Aug 4, 2014 2:29:15 PM (9 years ago)
Author:
vondreele
Message:

consolidate HKLF parts of dervRefine & HessRefine? into new routine dervHKLF

Location:
trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASIIobj.py

    r1453 r1456  
    12711271        'Mustrain;.*' : 'Microstrain coef.',
    12721272        'Size;.*' : 'Crystallite size value',
    1273         'eA' : 'Cubic mustrain value',
    1274         'Ep' : 'Primary extinction',
    1275         'Es' : 'Secondary type II extinction',
    1276         'Eg' : 'Secondary type I extinction',
     1273        'eA$' : 'Cubic mustrain value',
     1274        'Ep$' : 'Primary extinction',
     1275        'Es$' : 'Secondary type II extinction',
     1276        'Eg$' : 'Secondary type I extinction',
    12771277        #Histogram vars (:h:<var>)
    12781278        'Absorption' : 'Absorption coef.',
  • trunk/GSASIIstrMath.py

    r1455 r1456  
    14011401            wave = parmDict[hfx+'Lam']
    14021402    else:
    1403         print 'TOF Undefined at present'
    1404         raise ValueError
     1403        print 'TOF Undefined at present - might be nothing need be done here'
    14051404    for phase in Histogram['Reflection Lists']:
    14061405        refDict = Histogram['Reflection Lists'][phase]
     
    17211720    G2mv.Dict2Deriv(varylist,depDerivDict,dMdv)
    17221721    return dMdv
     1722   
     1723def dervHKLF(Histogram,Phase,calcControls,varylist,parmDict,rigidbodyDict):
     1724    '''Loop over reflections ina HKLF histogram and compute derivatives of the fitting
     1725    model (M) with respect to all parameters.  Independent and dependant dM/dp arrays
     1726    are returned to either dervRefine or HessRefine.
     1727
     1728    :returns:
     1729    '''
     1730    nobs = Histogram['Residuals']['Nobs']
     1731    hId = Histogram['hId']
     1732    hfx = ':%d:'%(hId)
     1733    pfx = '%d::'%(Phase['pId'])
     1734    phfx = '%d:%d:'%(Phase['pId'],hId)
     1735    SGData = Phase['General']['SGData']
     1736    A = [parmDict[pfx+'A%d'%(i)] for i in range(6)]
     1737    G,g = G2lat.A2Gmat(A)       #recip & real metric tensors
     1738    refDict = Histogram['Data']
     1739    dFdvDict = StructureFactorDerv(refDict,G,hfx,pfx,SGData,calcControls,parmDict)
     1740    ApplyRBModelDervs(dFdvDict,parmDict,rigidbodyDict,Phase)
     1741    dMdvh = np.zeros((len(varylist),len(refDict['RefList'])))
     1742    dependentVars = G2mv.GetDependentVars()
     1743    depDerivDict = {}
     1744    for j in dependentVars:
     1745        depDerivDict[j] = np.zeros(shape=(len(refDict['RefList'])))
     1746    wdf = np.zeros(len(refDict['RefList']))
     1747    if calcControls['F**2']:
     1748        for iref,ref in enumerate(refDict['RefList']):
     1749            if ref[6] > 0:
     1750                dervCor,dervDict = SCExtinction(ref,phfx,hfx,pfx,calcControls,parmDict,varylist) #puts correction in refl[11]
     1751                w = 1.0/ref[6]
     1752                if w*ref[5] >= calcControls['minF/sig']:
     1753                    wdf[iref] = w*(ref[5]-ref[7])
     1754                    for j,var in enumerate(varylist):
     1755                        if var in dFdvDict:
     1756                            dMdvh[j][iref] = w*dFdvDict[var][iref]*dervCor*parmDict[phfx+'Scale']
     1757                    for var in dependentVars:
     1758                        if var in dFdvDict:
     1759                            depDerivDict[var][iref] = w*dFdvDict[var][iref]*dervCor*parmDict[phfx+'Scale']
     1760                    if phfx+'Scale' in varylist:
     1761                        dMdvh[varylist.index(phfx+'Scale')][iref] = w*ref[9]*dervCor
     1762                    elif phfx+'Scale' in dependentVars:
     1763                        depDerivDict[phfx+'Scale'][iref] = w*ref[9]*dervCor
     1764                    for item in ['Ep','Es','Eg']:
     1765                        if phfx+item in varylist and dervDict:
     1766                            dMdvh[varylist.index(phfx+item)][iref] = w*dervDict[phfx+item]/dervCor
     1767                        elif phfx+item in dependentVars and dervDict:
     1768                            depDerivDict[phfx+item][iref] = w*dervDict[phfx+item]/dervCor
     1769                    for item in ['BabA','BabU']:
     1770                        if phfx+item in varylist:
     1771                            dMdvh[varylist.index(phfx+item)][iref] = w*dFdvDict[pfx+item][iref]*parmDict[phfx+'Scale']*dervCor
     1772                        elif phfx+item in dependentVars:
     1773                            depDerivDict[phfx+item][iref] = w*dFdvDict[pfx+item][iref]*parmDict[phfx+'Scale']*dervCor
     1774    else:
     1775        for iref,ref in enumerate(refDict['RefList']):
     1776            if ref[5] > 0.:
     1777                dervCor,dervDict = SCExtinction(ref,phfx,hfx,pfx,calcControls,parmDict,varylist) #puts correction in refl[11]
     1778                Fo = np.sqrt(ref[5])
     1779                Fc = np.sqrt(ref[7])
     1780                w = 1.0/ref[6]
     1781                if 2.0*Fo*w*Fo >= calcControls['minF/sig']:
     1782                    wdf[iref] = 2.0*Fo*w*(Fo-Fc)
     1783                    for j,var in enumerate(varylist):
     1784                        if var in dFdvDict:
     1785                            dMdvh[j][iref] = w*dFdvDict[var][iref]*dervCor*parmDict[phfx+'Scale']
     1786                    for var in dependentVars:
     1787                        if var in dFdvDict:
     1788                            depDerivDict[var][iref] = w*dFdvDict[var][iref]*dervCor*parmDict[phfx+'Scale']
     1789                    if phfx+'Scale' in varylist:
     1790                        dMdvh[varylist.index(phfx+'Scale')][iref] = w*ref[9]*dervCor
     1791                    elif phfx+'Scale' in dependentVars:
     1792                        depDerivDict[phfx+'Scale'][iref] = w*ref[9]*dervCor                           
     1793                    for item in ['Ep','Es','Eg']:
     1794                        if phfx+item in varylist and dervDict:
     1795                            dMdvh[varylist.index(phfx+item)][iref] = w*dervDict[phfx+item]/dervCor  #correct
     1796                        elif phfx+item in dependentVars and dervDict:
     1797                            depDerivDict[phfx+item][iref] = w*dervDict[phfx+item]/dervCor
     1798                    for item in ['BabA','BabU']:
     1799                        if phfx+item in varylist:
     1800                            dMdvh[varylist.index(phfx+item)][iref] = w*dFdvDict[pfx+item][iref]*parmDict[phfx+'Scale']*dervCor
     1801                        elif phfx+item in dependentVars:
     1802                            depDerivDict[phfx+item][iref] = w*dFdvDict[pfx+item][iref]*parmDict[phfx+'Scale']*dervCor
     1803    return dMdvh,depDerivDict,wdf
     1804   
    17231805
    17241806def dervRefine(values,HistoPhases,parmDict,varylist,calcControls,pawleyLookup,dlg):
     
    17551837        elif 'HKLF' in histogram[:4]:
    17561838            Histogram = Histograms[histogram]
    1757             nobs = Histogram['Residuals']['Nobs']
    17581839            phase = Histogram['Reflection Lists']
    17591840            Phase = Phases[phase]
    1760             hId = Histogram['hId']
    1761             hfx = ':%d:'%(hId)
     1841            dMdvh,depDerivDict,wdf = dervHKLF(Histogram,Phase,calcControls,varylist,parmDict,rigidbodyDict)
     1842            hfx = ':%d:'%(Histogram['hId'])
    17621843            wtFactor = calcControls[hfx+'wtFactor']
    1763             pfx = '%d::'%(Phase['pId'])
    1764             phfx = '%d:%d:'%(Phase['pId'],hId)
    1765             SGData = Phase['General']['SGData']
    1766             A = [parmDict[pfx+'A%d'%(i)] for i in range(6)]
    1767             G,g = G2lat.A2Gmat(A)       #recip & real metric tensors
    1768             refDict = Histogram['Data']
    1769             dFdvDict = StructureFactorDerv(refDict,G,hfx,pfx,SGData,calcControls,parmDict)
    1770             ApplyRBModelDervs(dFdvDict,parmDict,rigidbodyDict,Phase)
    1771             dMdvh = np.zeros((len(varylist),len(refDict['RefList'])))
    1772             dependentVars = G2mv.GetDependentVars()
    1773             depDerivDict = {}
    1774             for j in dependentVars:
    1775                 depDerivDict[j] = np.zeros(shape=(len(refDict['RefList'])))
    1776             if calcControls['F**2']:
    1777                 for iref,ref in enumerate(refDict['RefList']):
    1778                     if ref[6] > 0:
    1779                         dervCor,dervDict = SCExtinction(ref,phfx,hfx,pfx,calcControls,parmDict,varylist) #puts correction in refl[11]
    1780                         w = 1.0/ref[6]
    1781                         if w*ref[5] >= calcControls['minF/sig']:
    1782                             for j,var in enumerate(varylist):
    1783                                 if var in dFdvDict:
    1784                                     dMdvh[j][iref] = w*dFdvDict[var][iref]*dervCor*parmDict[phfx+'Scale']
    1785                             for var in dependentVars:
    1786                                 if var in dFdvDict:
    1787                                     depDerivDict[var][iref] = w*dFdvDict[var][iref]*dervCor*parmDict[phfx+'Scale']
    1788                             if phfx+'Scale' in varylist:
    1789                                 dMdvh[varylist.index(phfx+'Scale')][iref] = w*ref[9]*dervCor
    1790                             elif phfx+'Scale' in dependentVars:
    1791                                 depDerivDict[phfx+'Scale'][iref] = w*ref[9]*dervCor
    1792                             for item in ['Ep','Es','Eg']:
    1793                                 if phfx+item in varylist and dervDict:
    1794                                     dMdvh[varylist.index(phfx+item)][iref] = w*dervDict[phfx+item]/dervCor
    1795                                 elif phfx+item in dependentVars and dervDict:
    1796                                     depDerivDict[phfx+item][iref] = w*dervDict[phfx+item]/dervCor
    1797                             for item in ['BabA','BabU']:
    1798                                 if phfx+item in varylist:
    1799                                     dMdvh[varylist.index(phfx+item)][iref] = w*dFdvDict[pfx+item][iref]*parmDict[phfx+'Scale']*dervCor
    1800                                 elif phfx+item in dependentVars:
    1801                                     depDerivDict[phfx+item][iref] = w*dFdvDict[pfx+item][iref]*parmDict[phfx+'Scale']*dervCor
    1802             else:
    1803                 for iref,ref in enumerate(refDict['RefList']):
    1804                     if ref[5] > 0.:
    1805                         dervCor,dervDict = SCExtinction(ref,phfx,hfx,pfx,calcControls,parmDict,varylist) #puts correction in refl[11]
    1806                         Fo = np.sqrt(ref[5])
    1807                         Fc = np.sqrt(ref[7])
    1808                         w = 1.0/ref[6]
    1809                         if 2.0*Fo*w*Fo >= calcControls['minF/sig']:
    1810                             for j,var in enumerate(varylist):
    1811                                 if var in dFdvDict:
    1812                                     dMdvh[j][iref] = w*dFdvDict[var][iref]*dervCor*parmDict[phfx+'Scale']
    1813                             for var in dependentVars:
    1814                                 if var in dFdvDict:
    1815                                     depDerivDict[var][iref] = w*dFdvDict[var][iref]*dervCor*parmDict[phfx+'Scale']
    1816                             if phfx+'Scale' in varylist:
    1817                                 dMdvh[varylist.index(phfx+'Scale')][iref] = w*ref[9]*dervCor
    1818                             elif phfx+'Scale' in dependentVars:
    1819                                 depDerivDict[phfx+'Scale'][iref] = w*ref[9]*dervCor                           
    1820                             for item in ['Ep','Es','Eg']:
    1821                                 if phfx+item in varylist and dervDict:
    1822                                     dMdvh[varylist.index(phfx+item)][iref] = w*dervDict[phfx+item]/dervCor  #correct
    1823                                 elif phfx+item in dependentVars and dervDict:
    1824                                     depDerivDict[phfx+item][iref] = w*dervDict[phfx+item]/dervCor
    1825                             for item in ['BabA','BabU']:
    1826                                 if phfx+item in varylist:
    1827                                     dMdvh[varylist.index(phfx+item)][iref] = w*dFdvDict[pfx+item][iref]*parmDict[phfx+'Scale']*dervCor
    1828                                 elif phfx+item in dependentVars:
    1829                                     depDerivDict[phfx+item][iref] = w*dFdvDict[pfx+item][iref]*parmDict[phfx+'Scale']*dervCor
    18301844            # now process derivatives in constraints
    18311845            G2mv.Dict2Deriv(varylist,depDerivDict,dMdvh)
     
    18921906        elif 'HKLF' in histogram[:4]:
    18931907            Histogram = Histograms[histogram]
    1894             nobs = Histogram['Residuals']['Nobs']
    18951908            phase = Histogram['Reflection Lists']
    18961909            Phase = Phases[phase]
     1910            dMdvh,depDerivDict,wdf = dervHKLF(Histogram,Phase,calcControls,varylist,parmDict,rigidbodyDict)
    18971911            hId = Histogram['hId']
    1898             hfx = ':%d:'%(hId)
     1912            hfx = ':%d:'%(Histogram['hId'])
    18991913            wtFactor = calcControls[hfx+'wtFactor']
    1900             pfx = '%d::'%(Phase['pId'])
    1901             phfx = '%d:%d:'%(Phase['pId'],hId)
    1902             SGData = Phase['General']['SGData']
    1903             A = [parmDict[pfx+'A%d'%(i)] for i in range(6)]
    1904             G,g = G2lat.A2Gmat(A)       #recip & real metric tensors
    1905             refDict = Histogram['Data']
    1906             time0 = time.time()
    1907             dFdvDict = StructureFactorDerv(refDict,G,hfx,pfx,SGData,calcControls,parmDict)
    1908 #            print 'sf-deriv time: %.3f'%(time.time()-time0)
    1909             ApplyRBModelDervs(dFdvDict,parmDict,rigidbodyDict,Phase)
    1910             dMdvh = np.zeros((len(varylist),len(refDict['RefList'])))
    1911             dependentVars = G2mv.GetDependentVars()
    1912             depDerivDict = {}
    1913             for j in dependentVars:
    1914                 depDerivDict[j] = np.zeros(shape=(len(refDict['RefList'])))
    1915             wdf = np.zeros(len(refDict['RefList']))
    1916             time0 = time.time()
    1917             if calcControls['F**2']:
    1918                 for iref,ref in enumerate(refDict['RefList']):
    1919                     if ref[6] > 0:
    1920                         dervCor,dervDict = SCExtinction(ref,phfx,hfx,pfx,calcControls,parmDict,varylist) #puts correction in refl[11]
    1921                         w =  1.0/ref[6]
    1922                         if w*ref[5] >= calcControls['minF/sig']:
    1923                             wdf[iref] = w*(ref[5]-ref[7])
    1924                             for j,var in enumerate(varylist):
    1925                                 if var in dFdvDict:
    1926                                     dMdvh[j][iref] = w*dFdvDict[var][iref]*parmDict[phfx+'Scale']*dervCor
    1927                             for var in dependentVars:
    1928                                 if var in dFdvDict:
    1929                                     depDerivDict[var][iref] = w*dFdvDict[var][iref]*parmDict[phfx+'Scale']*dervCor
    1930                             if phfx+'Scale' in varylist:
    1931                                 dMdvh[varylist.index(phfx+'Scale')][iref] = w*ref[9]*dervCor
    1932                             elif phfx+'Scale' in dependentVars:
    1933                                 depDerivDict[phfx+'Scale'][iref] = w*ref[9]*dervCor
    1934                             for item in ['Ep','Es','Eg']:
    1935                                 if phfx+item in varylist and dervDict:
    1936                                     dMdvh[varylist.index(phfx+item)][iref] = w*dervDict[phfx+item]/dervCor
    1937                                 elif phfx+item in dependentVars and dervDict:
    1938                                     depDerivDict[phfx+item][iref] = w*dervDict[phfx+item]/dervCor
    1939                             for item in ['BabA','BabU']:
    1940                                 if phfx+item in varylist:
    1941                                     dMdvh[varylist.index(phfx+item)][iref] = w*dFdvDict[pfx+item][iref]*parmDict[phfx+'Scale']*dervCor
    1942                                 elif phfx+item in dependentVars:
    1943                                     depDerivDict[phfx+item][iref] = w*dFdvDict[pfx+item][iref]*parmDict[phfx+'Scale']*dervCor
    1944             else:
    1945                 for iref,ref in enumerate(refDict['RefList']):
    1946                     if ref[5] > 0.:
    1947                         dervCor,dervDict = SCExtinction(ref,phfx,hfx,pfx,calcControls,parmDict,varylist) #puts correction in refl[11]
    1948                         Fo = np.sqrt(ref[5])
    1949                         Fc = np.sqrt(ref[7])
    1950                         w = 1.0/ref[6]
    1951                         if 2.0*Fo*w*Fo >= calcControls['minF/sig']:
    1952                             wdf[iref] = 2.0*Fo*w*(Fo-Fc)
    1953                             for j,var in enumerate(varylist):
    1954                                 if var in dFdvDict:
    1955                                     dMdvh[j][iref] = w*dFdvDict[var][iref]*parmDict[phfx+'Scale']*dervCor
    1956                             for var in dependentVars:
    1957                                 if var in dFdvDict:
    1958                                     depDerivDict[var][iref] = w*dFdvDict[var][iref]*parmDict[phfx+'Scale']*dervCor
    1959                             if phfx+'Scale' in varylist:
    1960                                 dMdvh[varylist.index(phfx+'Scale')][iref] = w*ref[9]*dervCor
    1961                             elif phfx+'Scale' in dependentVars:
    1962                                 depDerivDict[phfx+'Scale'][iref] = w*ref[9]*dervCor                         
    1963                             for item in ['Ep','Es','Eg']:
    1964                                 if phfx+item in varylist and dervDict:
    1965                                    dMdvh[varylist.index(phfx+item)][iref] = w*dervDict[phfx+item]/dervCor
    1966                                 elif phfx+item in dependentVars and dervDict:
    1967                                     depDerivDict[phfx+item][iref] = w*dervDict[phfx+item]/dervCor
    1968                             for item in ['BabA','BabU']:
    1969                                 if phfx+item in varylist:
    1970                                     dMdvh[varylist.index(phfx+item)][iref] = w*dFdvDict[pfx+item][iref]*parmDict[phfx+'Scale']*dervCor
    1971                                 elif phfx+item in dependentVars:
    1972                                     depDerivDict[phfx+item][iref] = w*dFdvDict[pfx+item][iref]*parmDict[phfx+'Scale']*dervCor
    19731914            # now process derivatives in constraints
    19741915            G2mv.Dict2Deriv(varylist,depDerivDict,dMdvh)
     
    20782019                        ref[8] = ref[5]/(parmDict[phfx+'Scale']*ref[11])
    20792020                        if w*ref[5] >= calcControls['minF/sig']:
    2080                             sumFo2 += ref[5]
    20812021                            Fo = np.sqrt(ref[5])
    20822022                            sumFo += Fo
  • trunk/testDeriv.py

    r1454 r1456  
    5050    def _init_ctrls(self, parent):
    5151        wx.Frame.__init__(self, name='testDeriv', parent=parent,
    52             size=wx.Size(460, 250),style=wx.DEFAULT_FRAME_STYLE, title='Test Jacobian Derivatives')
     52            size=wx.Size(750, 250),style=wx.DEFAULT_FRAME_STYLE, title='Test Jacobian Derivatives')
    5353        self.testDerivMenu = wx.MenuBar()
    5454        self.File = wx.Menu(title='')
     
    142142        self.testDerivPanel.SetSizer(mainSizer)   
    143143        Size = mainSizer.Fit(self.testDerivPanel)
    144         Size[0] = 700
     144        Size[0] = 750
    145145        Size[1] = max(Size[1],290) + 35
    146146        self.testDerivPanel.SetScrollbars(10,10,Size[0]/10-4,Size[1]/10-1)
     
    163163            hplot.plot(dMdV[self.varylist.index(name)],'b',label='analytic deriv')
    164164            if name in self.varylist:
     165                print 'parameter:',name,self.values[self.varylist.index(name)],delt
    165166                self.values[self.varylist.index(name)] -= delt
    166167                M0 = G2stMth.errRefine(self.values,self.HistoPhases,self.parmDict,
Note: See TracChangeset for help on using the changeset viewer.