Пример #1
0
def do_fit(self, which, firstshell=False, fittest='baseline'):

    if which == 'testrun':
        folder = self.testrun
    elif which == 'baseline':
        folder = self.baseline
    else:
        folder = realpath(join(self.folder, fittest, which))
    #endif

    data = read_xdi(join(self.path, 'NiO.chik'), _larch=self._larch)
    if hasattr(data, 'wavenumber'):
        data.k = data.wavenumber

    gds = Group(amp=Parameter(1, vary=True, _larch=self._larch),
                enot=Parameter(1e-7, vary=True, _larch=self._larch),
                sso=Parameter(0.003, vary=True, _larch=self._larch),
                _larch=self._larch)

    if firstshell:
        gds.delr = Parameter(1e-7, vary=True, _larch=self._larch)
        dr1param = 'delr'
    else:
        gds.alpha = Parameter(1e-7, vary=True, _larch=self._larch)
        gds.ssni = Parameter(0.003, vary=True, _larch=self._larch)
        gds.sso2 = Parameter(0.003, vary=True, _larch=self._larch)
        #gds.sso3   = Parameter(0.003,  vary=True, _larch=self._larch)
        gds.ssni2 = Parameter(0.003, vary=True, _larch=self._larch)
        #gds.ssni3  = Parameter(0.003,  vary=True, _larch=self._larch)
        #gds.ssni4  = Parameter(0.003,  vary=True, _larch=self._larch)
        dr1param = 'alpha*reff'

    paths = list()
    paths.append(
        feffpath(
            realpath(join(folder, "feff0001.dat")),  # 1st shell O SS
            s02='amp',
            e0='enot',
            sigma2='sso',
            deltar=dr1param,
            _larch=self._larch))
    if not firstshell:
        paths.append(
            feffpath(
                realpath(join(folder, "feff0002.dat")),  # 2nd shell Ni SS
                s02='amp',
                e0='enot',
                sigma2='ssni',
                deltar='alpha*reff',
                _larch=self._larch))
        paths.append(
            feffpath(
                realpath(join(folder, "feff0003.dat")),  # O-O triangle
                s02='amp',
                e0='enot',
                sigma2='1.5*sso',
                deltar='alpha*reff',
                _larch=self._larch))
        paths.append(
            feffpath(
                realpath(join(folder, "feff0004.dat")),  # O-Ni triangle
                s02='amp',
                e0='enot',
                sigma2='sso+ssni/2',
                deltar='alpha*reff',
                _larch=self._larch))
        paths.append(
            feffpath(
                realpath(join(folder, "feff0005.dat")),  # 3rd shell O SS
                s02='amp',
                e0='enot',
                sigma2='sso2',
                deltar='alpha*reff',
                _larch=self._larch))
        paths.append(
            feffpath(
                realpath(join(folder, "feff0006.dat")),  # 4th shell Ni SS
                s02='amp',
                e0='enot',
                sigma2='ssni2',
                deltar='alpha*reff',
                _larch=self._larch))
        paths.append(
            feffpath(
                realpath(join(folder,
                              "feff0007.dat")),  # O-O non-forward linear
                s02='amp',
                e0='enot',
                sigma2='sso*2',
                deltar='alpha*reff',
                _larch=self._larch))
        paths.append(
            feffpath(
                realpath(join(folder,
                              "feff0008.dat")),  # O-Ni forward scattering
                s02='amp',
                e0='enot',
                sigma2='ssni2',
                deltar='alpha*reff',
                _larch=self._larch))
        paths.append(
            feffpath(
                realpath(join(folder,
                              "feff0009.dat")),  # O-O forward through absorber
                s02='amp',
                e0='enot',
                sigma2='sso*2',
                deltar='alpha*reff',
                _larch=self._larch))
        paths.append(
            feffpath(
                realpath(join(folder,
                              "feff0011.dat")),  # O-Ni-O double forward
                s02='amp',
                e0='enot',
                sigma2='ssni2',
                deltar='alpha*reff',
                _larch=self._larch))
        paths.append(
            feffpath(
                realpath(
                    join(folder, "feff0010.dat")
                ),  # O-O rattle (the order of 10 and 11 is different in Demeter's pathfinder!)
                s02='amp',
                e0='enot',
                sigma2='sso*4',
                deltar='alpha*reff',
                _larch=self._larch))

    rx = 4.2
    if firstshell: rx = 1.95

    trans = feffit_transform(kmin=3,
                             kmax=15.938,
                             kw=(2, 1, 3),
                             dk=1,
                             window='hanning',
                             rmin=1.0,
                             rmax=rx,
                             _larch=self._larch)
    dset = feffit_dataset(data=data,
                          pathlist=paths,
                          transform=trans,
                          _larch=self._larch)
    fit = feffit(gds, dset, _larch=self._larch)

    if self.doplot:
        offset = 0.6 * max(dset.data.chir_mag)
        _newplot(dset.data.r,
                 dset.data.chir_mag + offset,
                 xmax=8,
                 xlabel=r'$R \rm\,(\AA)$',
                 label='data',
                 ylabel=r'$|\chi(R)| \rm\,(\AA^{-3})$',
                 title='Fit to ' + self.folder,
                 show_legend=True,
                 _larch=self._larch)
        _plot(dset.model.r,
              dset.model.chir_mag + offset,
              label='fit',
              _larch=self._larch)
        _plot(dset.data.r, dset.data.chir_re, label='data', _larch=self._larch)
        _plot(dset.model.r,
              dset.model.chir_re,
              label='fit',
              _larch=self._larch)
    #end if

    if self.verbose:
        print feffit_report(fit, _larch=self._larch)
    #end if

    shells = ''
    if firstshell: shells = '_1st'

    write_ascii(join(self.folder, fittest, "fit_" + which + shells + ".k"),
                dset.data.k,
                dset.data.chi,
                dset.model.chi,
                labels="r data_mag fit_mag data_re fit_re",
                _larch=self._larch)
    write_ascii(join(self.folder, fittest, "fit_" + which + shells + ".r"),
                dset.data.r,
                dset.data.chir_mag,
                dset.model.chir_mag,
                dset.data.chir_re,
                dset.model.chir_re,
                labels="r data_mag fit_mag data_re fit_re",
                _larch=self._larch)

    renderer = pystache.Renderer()
    with open(join(self.folder, fittest, 'fit_' + which + shells + '.gp'),
              'w') as inp:
        inp.write(
            renderer.render_path(
                'plot.mustache',  # gnuplot mustache file
                {
                    'material': 'NiO',
                    'model': which,
                    'fittest': fittest,
                    'shells': shells,
                    'kmin': 3,
                    'kmax': 15.938,
                    'rmin': 1.0,
                    'rmax': rx,
                    'offset': 1,
                }))

    return fit
Пример #2
0
def do_fit(self, which, firstshell=False, fittest='baseline'):

    if which == 'testrun':
        folder = self.testrun
    elif which == 'baseline':
        folder = self.baseline
    else:
        folder = realpath(join(self.folder, fittest, which))
    #endif

    data = read_xdi(join(self.path, 'NiO.chik'), _larch=self._larch)
    if hasattr(data, 'wavenumber'):
        data.k = data.wavenumber

    gds = Group(amp    = Parameter(1,      vary=True, _larch=self._larch),
                enot   = Parameter(1e-7,   vary=True, _larch=self._larch),
                sso    = Parameter(0.003,  vary=True, _larch=self._larch), _larch=self._larch  )

    if firstshell:
        gds.delr   = Parameter(1e-7,   vary=True, _larch=self._larch)
        dr1param   = 'delr'
    else:
        gds.alpha  = Parameter(1e-7,   vary=True, _larch=self._larch)
        gds.ssni   = Parameter(0.003,  vary=True, _larch=self._larch)
        gds.sso2   = Parameter(0.003,  vary=True, _larch=self._larch)
        #gds.sso3   = Parameter(0.003,  vary=True, _larch=self._larch)
        gds.ssni2  = Parameter(0.003,  vary=True, _larch=self._larch)
        #gds.ssni3  = Parameter(0.003,  vary=True, _larch=self._larch)
        #gds.ssni4  = Parameter(0.003,  vary=True, _larch=self._larch)
        dr1param   = 'alpha*reff'

    paths = list() 
    paths.append(feffpath(realpath(join(folder, "feff0001.dat")), # 1st shell O SS
                          s02    = 'amp',
                          e0     = 'enot',
                          sigma2 = 'sso',
                          deltar = dr1param, _larch=self._larch))
    if not firstshell:
        paths.append(feffpath(realpath(join(folder, "feff0002.dat")), # 2nd shell Ni SS
                              s02    = 'amp',
                              e0     = 'enot',
                              sigma2 = 'ssni',
                              deltar = 'alpha*reff', _larch=self._larch))
        paths.append(feffpath(realpath(join(folder, "feff0003.dat")), # O-O triangle
                              s02    = 'amp',
                              e0     = 'enot',
                              sigma2 = '1.5*sso',
                              deltar = 'alpha*reff', _larch=self._larch))
        paths.append(feffpath(realpath(join(folder, "feff0004.dat")), # O-Ni triangle
                              s02    = 'amp',
                              e0     = 'enot',
                              sigma2 = 'sso+ssni/2',
                              deltar = 'alpha*reff', _larch=self._larch))
        paths.append(feffpath(realpath(join(folder, "feff0005.dat")), # 3rd shell O SS
                              s02    = 'amp',
                              e0     = 'enot',
                              sigma2 = 'sso2',
                              deltar = 'alpha*reff', _larch=self._larch))
        paths.append(feffpath(realpath(join(folder, "feff0006.dat")), # 4th shell Ni SS
                              s02    = 'amp',
                              e0     = 'enot',
                              sigma2 = 'ssni2',
                              deltar = 'alpha*reff', _larch=self._larch))
        paths.append(feffpath(realpath(join(folder, "feff0007.dat")), # O-O non-forward linear
                              s02    = 'amp',
                              e0     = 'enot',
                              sigma2 = 'sso*2',
                              deltar = 'alpha*reff', _larch=self._larch))
        paths.append(feffpath(realpath(join(folder, "feff0008.dat")), # O-Ni forward scattering
                              s02    = 'amp',
                              e0     = 'enot',
                              sigma2 = 'ssni2',
                              deltar = 'alpha*reff', _larch=self._larch))
        paths.append(feffpath(realpath(join(folder, "feff0009.dat")), # O-O forward through absorber
                              s02    = 'amp',
                              e0     = 'enot',
                              sigma2 = 'sso*2',
                              deltar = 'alpha*reff', _larch=self._larch))
        paths.append(feffpath(realpath(join(folder, "feff0011.dat")), # O-Ni-O double forward
                              s02    = 'amp',
                              e0     = 'enot',
                              sigma2 = 'ssni2',
                              deltar = 'alpha*reff', _larch=self._larch))
        paths.append(feffpath(realpath(join(folder, "feff0010.dat")), # O-O rattle (the order of 10 and 11 is different in Demeter's pathfinder!)
                              s02    = 'amp',
                              e0     = 'enot',
                              sigma2 = 'sso*4',
                              deltar = 'alpha*reff', _larch=self._larch))

    rx  = 4.2
    if firstshell: rx  = 1.95

    trans = feffit_transform(kmin=3, kmax=15.938, kw=(2,1,3), dk=1, window='hanning', rmin=1.0, rmax=rx, _larch=self._larch)
    dset  = feffit_dataset(data=data, pathlist=paths, transform=trans, _larch=self._larch)
    fit   = feffit(gds, dset, _larch=self._larch)

    if self.doplot:
        offset = 0.6*max(dset.data.chir_mag)
        _newplot(dset.data.r,  dset.data.chir_mag+offset, xmax=8,
              xlabel=r'$R \rm\,(\AA)$', label='data',
              ylabel=r'$|\chi(R)| \rm\,(\AA^{-3})$',
              title='Fit to '+self.folder, show_legend=True, _larch=self._larch)
        _plot(dset.model.r, dset.model.chir_mag+offset, label='fit', _larch=self._larch)
        _plot(dset.data.r,  dset.data.chir_re, label='data', _larch=self._larch)
        _plot(dset.model.r, dset.model.chir_re, label='fit', _larch=self._larch)
    #end if
    
    if self.verbose:
        print feffit_report(fit, _larch=self._larch)
    #end if

    shells = ''
    if firstshell: shells='_1st'

    write_ascii(join(self.folder, fittest, "fit_"+which+shells+".k"), dset.data.k, dset.data.chi, dset.model.chi,
                labels="r data_mag fit_mag data_re fit_re", _larch=self._larch)
    write_ascii(join(self.folder, fittest, "fit_"+which+shells+".r"), dset.data.r, dset.data.chir_mag, dset.model.chir_mag,
                dset.data.chir_re, dset.model.chir_re, labels="r data_mag fit_mag data_re fit_re", _larch=self._larch)

    renderer = pystache.Renderer()
    with open(join(self.folder, fittest,'fit_'+which+shells+'.gp'), 'w') as inp:
        inp.write(renderer.render_path( 'plot.mustache', # gnuplot mustache file
                                        {'material': 'NiO',
                                         'model': which,
                                         'fittest': fittest,
                                         'shells': shells,
                                         'kmin': 3,
                                         'kmax': 15.938,
                                         'rmin': 1.0,
                                         'rmax': rx,
                                         'offset': 1,
                                     } ))

    return fit
Пример #3
0
def do_fit(self, which, firstshell=False, fittest='baseline'):

    if which == 'testrun':
        folder = self.testrun
    elif which == 'baseline':
        folder = self.baseline
    else:
        folder = realpath(join(self.folder, fittest, which))
    #endif

    data = read_xdi(join(self.path, 'BaZrO3.chik'), _larch=self._larch)

    gds = Group(amp    = Parameter(0.95,    vary=True,  _larch=self._larch),
                enot   = Parameter(1e-7,    vary=True,  _larch=self._larch),
                sso    = Parameter(0.003,   vary=True,  _larch=self._larch),
                czr    = Parameter(0.,      vary=False, _larch=self._larch), _larch=self._larch  )

    if firstshell:
        gds.delr   = Parameter(1e-7,    vary=True,  _larch=self._larch)
        dr1param   = 'delr'
    else:
        gds.alpha  = Parameter(0.00001, vary=True,  _larch=self._larch)
        gds.ssba   = Parameter(0.003,   vary=True,  _larch=self._larch)
        gds.sszr   = Parameter(0.003,   vary=True,  _larch=self._larch)
        gds.eba    = Parameter(1e-7,    vary=True,  _larch=self._larch)
        gds.ezr    = Parameter(1e-7,    vary=True,  _larch=self._larch)
        #gds.eba    = Parameter(expr='enot',          _larch=self._larch)
        #gdsezr    = Parameter(expr='enot',         _larch=self._larch)
        gds.sso2   = Parameter(0.003,   vary=True,  _larch=self._larch)
        dr1param   = 'alpha*reff'

    paths = list()
    paths.append(feffpath(realpath(join(folder, "feff0001.dat")),
                          s02    = 'amp',
                          deltar = dr1param,
                          e0     = 'enot',
                          sigma2 = 'sso',
                          _larch=self._larch))
    if not firstshell:
        paths.append(feffpath(realpath(join(folder, "feff0002.dat")),
                              s02    = 'amp',
                              deltar = 'alpha*reff',
                              e0     = 'enot',
                              sigma2 = 'sso*1.5',
                              _larch=self._larch))
        paths.append(feffpath(realpath(join(folder, "feff0003.dat")),
                              s02    = 'amp',
                              deltar = 'alpha*reff',
                              e0     = 'eba',
                              sigma2 = 'ssba',
                              _larch=self._larch))
        paths.append(feffpath(realpath(join(folder, "feff0004.dat")),
                              s02    = 'amp',
                              deltar = 'alpha*reff',
                              e0     = 'ezr',
                              sigma2 = 'sszr',
                              third  = 'czr',
                              _larch=self._larch))
        paths.append(feffpath(realpath(join(folder, "feff0005.dat")),
                              s02    = 'amp',
                              deltar = 'alpha*reff',
                              e0     = 'enot',
                              sigma2 = 'sso*2',
                              _larch=self._larch))
        paths.append(feffpath(realpath(join(folder, "feff0006.dat")),
                              s02    = 'amp',
                              deltar = 'alpha*reff',
                              e0     = '(enot+ezr)/2',
                              sigma2 = 'sszr',
                              third  = 'czr',
                              _larch=self._larch))
        paths.append(feffpath(realpath(join(folder, "feff0007.dat")),
                              s02    = 'amp',
                              deltar = 'alpha*reff',
                              e0     = 'enot',
                              sigma2 = 'sso*2',
                              _larch=self._larch))
        paths.append(feffpath(realpath(join(folder, "feff0009.dat")),
                              s02    = 'amp',
                              deltar = 'alpha*reff',
                              e0     = '(2*enot+ezr)/3',
                              sigma2 = 'sszr',
                              third  = 'czr',
                              _larch=self._larch))
        paths.append(feffpath(realpath(join(folder, "feff0008.dat")),
                              s02    = 'amp',
                              deltar = 'alpha*reff',
                              e0     = 'enot',
                              sigma2 = 'sso*4',
                              _larch=self._larch))
        paths.append(feffpath(realpath(join(folder, "feff0011.dat")),
                              s02    = 'amp',
                              deltar = 'alpha*reff',
                              e0     = '(enot+eba)/2',
                              sigma2 = 'ssba+sso',
                              _larch=self._larch))
        paths.append(feffpath(realpath(join(folder, "feff0012.dat")),
                              s02    = 'amp',
                              deltar = 'alpha*reff',
                              e0     = 'enot',
                              sigma2 = 'sso2',
                              _larch=self._larch))
        paths.append(feffpath(realpath(join(folder, "feff0013.dat")),
                              s02    = 'amp',
                              deltar = 'alpha*reff',
                              e0     = 'enot',
                              sigma2 = 'sso+sso2',
                              _larch=self._larch))

    rx  = 4.5
    if firstshell: rx  = 1.95

    trans = feffit_transform(kmin=3, kmax=14.5, kw=(2,1,3), dk=1, window='hanning', rmin=1.2, rmax=rx, _larch=self._larch)
    dset  = feffit_dataset(data=data, pathlist=paths, transform=trans, _larch=self._larch)
    fit   = feffit(gds, dset, _larch=self._larch)

    if self.doplot:
        offset = max(dset.data.chir_mag)
        _newplot(dset.data.r,  dset.data.chir_mag+offset, xmax=8,
              xlabel=r'$R \rm\,(\AA)$', label='data',
              ylabel=r'$|\chi(R)| \rm\,(\AA^{-3})$',
              title='Fit to '+self.folder, show_legend=True, _larch=self._larch)
        _plot(dset.model.r, dset.model.chir_mag+offset, label='fit', _larch=self._larch)
        _plot(dset.data.r,  dset.data.chir_re, label='data', _larch=self._larch)
        _plot(dset.model.r, dset.model.chir_re, label='fit', _larch=self._larch)
    #end if
    
    if self.verbose:
        print feffit_report(fit, _larch=self._larch)
    #end if

    shells = ''
    if firstshell: shells='_1st'

    write_ascii(join(self.folder, fittest, "fit_"+which+shells+".k"), dset.data.k, dset.data.chi, dset.model.chi,
                labels="r data_mag fit_mag data_re fit_re", _larch=self._larch)
    write_ascii(join(self.folder, fittest, "fit_"+which+shells+".r"), dset.data.r, dset.data.chir_mag, dset.model.chir_mag,
                dset.data.chir_re, dset.model.chir_re, labels="r data_mag fit_mag data_re fit_re", _larch=self._larch)

    renderer = pystache.Renderer()
    with open(join(self.folder, fittest, 'fit_'+which+shells+'.gp'), 'w') as inp:
        inp.write(renderer.render_path( 'plot.mustache', # gnuplot mustache file
                                        {'material': 'BaZrO3',
                                         'model': which,
                                         'fittest': fittest,
                                         'shells': shells,
                                         'kmin': 3,
                                         'kmax': 14.5,
                                         'rmin': 1.2,
                                         'rmax': rx,
                                         'offset': 1,
                                     } ))

    return fit
Пример #4
0
def do_fit(self, which, firstshell=False, fittest='baseline'):

    if which == 'testrun':
        folder = self.testrun
    elif which == 'baseline':
        folder = self.baseline
    else:
        folder = realpath(join(self.folder, fittest, which))
    #endif

    data = read_xdi(join(self.path, 'Copper.chik'), _larch=self._larch)

    gds = Group(amp    = Parameter(1,     vary=True,  _larch=self._larch),
                enot   = Parameter(1e-7,  vary=True,  _larch=self._larch),
                ss1    = Parameter(0.003, vary=True,  _larch=self._larch), _larch=self._larch  )

    if firstshell:
        gds.delr   = Parameter(1e-7,   vary=True, _larch=self._larch)
        dr1param   = 'delr'
    else:
        gds.thetad = Parameter(500,   vary=True,  _larch=self._larch)
        gds.temp   = Parameter(10,    vary=False, _larch=self._larch)
        gds.alpha  = Parameter(1e-7,  vary=True,  _larch=self._larch)
        dr1param   = 'alpha*reff'

    imax = 16
    if firstshell: imax = 2
    paths = list()
    for index in range(1,imax):
        nnnn = realpath(join(folder, "feff%4.4d.dat" % index))
        if not exists(nnnn):
            continue
        #end if
        if index > 1:
            sigsqr = 'sigma2_debye(temp, thetad)' 
        else:
            sigsqr = 'ss1'
        #end if
        paths.append(feffpath(nnnn,
                              s02    = 'amp',
                              e0     = 'enot',
                              sigma2 = sigsqr,
                              deltar = dr1param, _larch=self._larch))
    #end for

    rx  = 5.0
    if firstshell: rx  = 2.8

    trans = feffit_transform(kmin=3, kmax=15, kw=(2,1,3), dk=1, window='hanning', rmin=1, rmax=rx, _larch=self._larch)
    dset  = feffit_dataset(data=data, pathlist=paths, transform=trans, _larch=self._larch)
    fit   = feffit(gds, dset, _larch=self._larch)

    if self.doplot:
        offset = max(dset.data.chir_mag)
        _newplot(dset.data.r,  dset.data.chir_mag+offset, xmax=8,
              xlabel=r'$R \rm\,(\AA)$', label='data',
              ylabel=r'$|\chi(R)| \rm\,(\AA^{-3})$',
              title='Fit to '+self.folder, show_legend=True, _larch=self._larch)
        _plot(dset.model.r, dset.model.chir_mag+offset, label='fit', _larch=self._larch)
        _plot(dset.data.r,  dset.data.chir_re, label='data', _larch=self._larch)
        _plot(dset.model.r, dset.model.chir_re, label='fit', _larch=self._larch)
    #end if
    
    if self.verbose:
        print feffit_report(fit, _larch=self._larch)
    #end if

    shells = ''
    if firstshell: shells='_1st'

    write_ascii(join(self.folder, fittest, "fit_"+which+shells+".k"), dset.data.k, dset.data.chi, dset.model.chi,
                labels="r data_mag fit_mag data_re fit_re", _larch=self._larch)
    write_ascii(join(self.folder, fittest, "fit_"+which+shells+".r"), dset.data.r, dset.data.chir_mag, dset.model.chir_mag,
                dset.data.chir_re, dset.model.chir_re, labels="r data_mag fit_mag data_re fit_re", _larch=self._larch)

    renderer = pystache.Renderer()
    with open(join(self.folder, fittest, 'fit_'+which+shells+'.gp'), 'w') as inp:
        inp.write(renderer.render_path( 'plot.mustache', # gnuplot mustache file
                                        {'material': 'Copper',
                                         'model': which,
                                         'fittest': fittest,
                                         'shells': shells,
                                         'kmin': 3,
                                         'kmax': 15,
                                         'rmin': 1,
                                         'rmax': rx,
                                         'offset': 2,
                                     } ))

    return fit
Пример #5
0
def do_fit(self, which, firstshell=False, fittest='baseline'):

    if which == 'testrun':
        folder = self.testrun
    elif which == 'baseline':
        folder = self.baseline
    else:
        folder = realpath(join(self.folder, fittest, which))
    #endif

    data = read_xdi(join(self.path, 'Copper.chik'), _larch=self._larch)

    gds = Group(amp=Parameter(1, vary=True, _larch=self._larch),
                enot=Parameter(1e-7, vary=True, _larch=self._larch),
                ss1=Parameter(0.003, vary=True, _larch=self._larch),
                _larch=self._larch)

    if firstshell:
        gds.delr = Parameter(1e-7, vary=True, _larch=self._larch)
        dr1param = 'delr'
    else:
        gds.thetad = Parameter(500, vary=True, _larch=self._larch)
        gds.temp = Parameter(10, vary=False, _larch=self._larch)
        gds.alpha = Parameter(1e-7, vary=True, _larch=self._larch)
        dr1param = 'alpha*reff'

    imax = 16
    if firstshell: imax = 2
    paths = list()
    for index in range(1, imax):
        nnnn = realpath(join(folder, "feff%4.4d.dat" % index))
        if not exists(nnnn):
            continue
        #end if
        if index > 1:
            sigsqr = 'sigma2_debye(temp, thetad)'
        else:
            sigsqr = 'ss1'
        #end if
        paths.append(
            feffpath(nnnn,
                     s02='amp',
                     e0='enot',
                     sigma2=sigsqr,
                     deltar=dr1param,
                     _larch=self._larch))
    #end for

    rx = 5.0
    if firstshell: rx = 2.8

    trans = feffit_transform(kmin=3,
                             kmax=15,
                             kw=(2, 1, 3),
                             dk=1,
                             window='hanning',
                             rmin=1,
                             rmax=rx,
                             _larch=self._larch)
    dset = feffit_dataset(data=data,
                          pathlist=paths,
                          transform=trans,
                          _larch=self._larch)
    fit = feffit(gds, dset, _larch=self._larch)

    if self.doplot:
        offset = max(dset.data.chir_mag)
        _newplot(dset.data.r,
                 dset.data.chir_mag + offset,
                 xmax=8,
                 xlabel=r'$R \rm\,(\AA)$',
                 label='data',
                 ylabel=r'$|\chi(R)| \rm\,(\AA^{-3})$',
                 title='Fit to ' + self.folder,
                 show_legend=True,
                 _larch=self._larch)
        _plot(dset.model.r,
              dset.model.chir_mag + offset,
              label='fit',
              _larch=self._larch)
        _plot(dset.data.r, dset.data.chir_re, label='data', _larch=self._larch)
        _plot(dset.model.r,
              dset.model.chir_re,
              label='fit',
              _larch=self._larch)
    #end if

    if self.verbose:
        print feffit_report(fit, _larch=self._larch)
    #end if

    shells = ''
    if firstshell: shells = '_1st'

    write_ascii(join(self.folder, fittest, "fit_" + which + shells + ".k"),
                dset.data.k,
                dset.data.chi,
                dset.model.chi,
                labels="r data_mag fit_mag data_re fit_re",
                _larch=self._larch)
    write_ascii(join(self.folder, fittest, "fit_" + which + shells + ".r"),
                dset.data.r,
                dset.data.chir_mag,
                dset.model.chir_mag,
                dset.data.chir_re,
                dset.model.chir_re,
                labels="r data_mag fit_mag data_re fit_re",
                _larch=self._larch)

    renderer = pystache.Renderer()
    with open(join(self.folder, fittest, 'fit_' + which + shells + '.gp'),
              'w') as inp:
        inp.write(
            renderer.render_path(
                'plot.mustache',  # gnuplot mustache file
                {
                    'material': 'Copper',
                    'model': which,
                    'fittest': fittest,
                    'shells': shells,
                    'kmin': 3,
                    'kmax': 15,
                    'rmin': 1,
                    'rmax': rx,
                    'offset': 2,
                }))

    return fit
Пример #6
0
def do_fit(self, which, firstshell=False, fittest='baseline'):

    if which == 'testrun':
        folder = self.testrun
    elif which == 'baseline':
        folder = self.baseline
    else:
        folder = realpath(join(self.folder, fittest, which))
    #endif

    data = read_xdi(join(self.path, 'FeS2.chik'), _larch=self._larch)

    gds = Group(amp=Parameter(1, vary=True, _larch=self._larch),
                enot=Parameter(1e-7, vary=True, _larch=self._larch),
                ss=Parameter(0.003, vary=True, _larch=self._larch),
                _larch=self._larch)

    if firstshell:
        gds.delr = Parameter(1e-7, vary=True, _larch=self._larch)
        dr1param = 'delr'
    else:
        gds.alpha = Parameter(1e-7, vary=True, _larch=self._larch)
        gds.ss2 = Parameter(0.003, vary=True, _larch=self._larch)
        gds.ss3 = Parameter(expr='ss2', _larch=self._larch)
        gds.ssfe = Parameter(0.003, vary=True, _larch=self._larch)
        dr1param = 'alpha*reff'

    paths = list()
    paths.append(
        feffpath(
            realpath(join(folder, "feff0001.dat")),  # 1st shell S SS
            s02='amp',
            e0='enot',
            sigma2='ss',
            deltar=dr1param,
            _larch=self._larch))
    if not firstshell:
        paths.append(
            feffpath(
                realpath(join(folder, "feff0002.dat")),  # 2nd shell S SS
                s02='amp',
                e0='enot',
                sigma2='ss2',
                deltar='alpha*reff',
                _larch=self._larch))
        paths.append(
            feffpath(
                realpath(join(folder, "feff0003.dat")),  # 3rd shell S SS
                s02='amp',
                e0='enot',
                sigma2='ss3',
                deltar='alpha*reff',
                _larch=self._larch))
        paths.append(
            feffpath(
                realpath(join(folder, "feff0004.dat")),  # 4th shell Fe SS
                s02='amp',
                e0='enot',
                sigma2='ssfe',
                deltar='alpha*reff',
                _larch=self._larch))
        paths.append(
            feffpath(
                realpath(join(folder, "feff0005.dat")),  # S-S triangle
                s02='amp',
                e0='enot',
                sigma2='ss*1.5',
                deltar='alpha*reff',
                _larch=self._larch))
        paths.append(
            feffpath(
                realpath(join(folder, "feff0006.dat")),  # S-Fe triangle
                s02='amp',
                e0='enot',
                sigma2='ss/2+ssfe',
                deltar='alpha*reff',
                _larch=self._larch))
        paths.append(
            feffpath(
                realpath(join(folder,
                              "feff0012.dat")),  # S-S non-forward linear
                s02='amp',
                e0='enot',
                sigma2='ss*2',
                deltar='alpha*reff',
                _larch=self._larch))
        paths.append(
            feffpath(
                realpath(join(folder,
                              "feff0013.dat")),  # S-S forward scattering
                s02='amp',
                e0='enot',
                sigma2='ss*2',
                deltar='alpha*reff',
                _larch=self._larch))
        paths.append(
            feffpath(
                realpath(join(folder, "feff0014.dat")),  # S-S rattle
                s02='amp',
                e0='enot',
                sigma2='ss*4',
                deltar='alpha*reff',
                _larch=self._larch))

    rx = 4.2
    if firstshell: rx = 2.3

    trans = feffit_transform(kmin=3,
                             kmax=12.956,
                             kw=(2, 1, 3),
                             dk=1,
                             window='hanning',
                             rmin=1.2,
                             rmax=rx,
                             _larch=self._larch)
    dset = feffit_dataset(data=data,
                          pathlist=paths,
                          transform=trans,
                          _larch=self._larch)
    fit = feffit(gds, dset, _larch=self._larch)

    if self.doplot:
        offset = 0.6 * max(dset.data.chir_mag)
        _newplot(dset.data.r,
                 dset.data.chir_mag + offset,
                 xmax=8,
                 xlabel=r'$R \rm\,(\AA)$',
                 label='data',
                 ylabel=r'$|\chi(R)| \rm\,(\AA^{-3})$',
                 title='Fit to ' + self.folder,
                 show_legend=True,
                 _larch=self._larch)
        _plot(dset.model.r,
              dset.model.chir_mag + offset,
              label='fit',
              _larch=self._larch)
        _plot(dset.data.r, dset.data.chir_re, label='data', _larch=self._larch)
        _plot(dset.model.r,
              dset.model.chir_re,
              label='fit',
              _larch=self._larch)
    #end if

    if self.verbose:
        print feffit_report(fit, _larch=self._larch)
    #end if

    shells = ''
    if firstshell: shells = '_1st'

    write_ascii(join(self.folder, fittest, "fit_" + which + shells + ".k"),
                dset.data.k,
                dset.data.chi,
                dset.model.chi,
                labels="r data_mag fit_mag data_re fit_re",
                _larch=self._larch)
    write_ascii(join(self.folder, fittest, "fit_" + which + shells + ".r"),
                dset.data.r,
                dset.data.chir_mag,
                dset.model.chir_mag,
                dset.data.chir_re,
                dset.model.chir_re,
                labels="r data_mag fit_mag data_re fit_re",
                _larch=self._larch)

    renderer = pystache.Renderer()
    with open(join(self.folder, fittest, 'fit_' + which + shells + '.gp'),
              'w') as inp:
        inp.write(
            renderer.render_path(
                'plot.mustache',  # gnuplot mustache file
                {
                    'material': 'FeS2',
                    'model': which,
                    'fittest': fittest,
                    'shells': shells,
                    'kmin': 3,
                    'kmax': 12.956,
                    'rmin': 1.2,
                    'rmax': rx,
                    'offset': 1,
                }))

    return fit