Ejemplo n.º 1
0
 def test_extract(self):
     f = 'qmc.s000.stat.h5'
     # Old format
     # base = 'Observables/BackPropagated/FullOneRDM/Average_0'
     dm = 2*extract_observable(f, ix=0)
     self.assertAlmostEqual(numpy.sum(dm.real), 499.49878268185375)
     self.assertAlmostEqual(numpy.sum(dm.imag), 1.2453436020111393)
Ejemplo n.º 2
0
def compute_one_body(filename, hcore, skip, group):
    energies = []
    # weights can be ignored if not using free projection.
    dm = extract_observable(filename, ix=group).reshape((-1, ) + hcore.shape)
    for d in dm[skip:]:
        e1b = numpy.einsum('ij,ij->', hcore, d)
        energies.append(e1b.real)
    av = numpy.mean(energies)
    err = scipy.stats.sem(energies)
    return av, err
Ejemplo n.º 3
0
def average_observable(filename,
                       name,
                       eqlb=1,
                       estimator='back_propagated',
                       ix=None,
                       skip=1):
    """Compute mean and error bar for AFQMC HDF5 observable.

    Parameters
    ----------
    filename : string
        QMCPACK output containing density matrix (*.h5 file).
    name : string
        Name of observable (see estimates.py for list).
    eqlb : int
        Number of blocks for equilibration. Default 1.
    estimator : string
        Estimator type to analyse. Options: back_propagated or mixed.
        Default: back_propagated.
    skip : int
        Number of blocks to skip in between measurements equilibration.
        Default 1 (use all data).
    ix : int
        Back propagation path length to average. Optional.
        Default: None (chooses longest path).

    Returns
    -------
    mean : :class:`numpy.ndarray`
        Averaged quantity.
    err : :class:`numpy.ndarray`
        Error bars for quantity.
    """
    md = get_metadata(filename)
    free_proj = md['FreeProjection']
    if free_proj:
        mean = None
        err = None
        print("# Error analysis for free projection not implemented.")
    else:
        data = extract_observable(filename,
                                  name=name,
                                  estimator=estimator,
                                  ix=ix)
        mean = numpy.mean(data[eqlb:len(data):skip], axis=0)
        err = scipy.stats.sem(data[eqlb:len(data):skip].real, axis=0)
    return mean, err
Ejemplo n.º 4
0
 def test_extract_single(self):
     f = 'qmc.s000.stat.h5'
     # base = 'Observables/BackPropagated/FullOneRDM/Average_3'
     dm = extract_observable(f, ix=3, sample=37)
     self.assertAlmostEqual(numpy.sum(dm).real, 5.00103256421043)