def NCScattDen(Elements, vol, wave=0.0):
    """Estimate neutron scattering density from molecular formula & volume;
    ignores valence, but includes anomalous effects
    
    :param dict Elements: elements in molecular formula; 
        each element must contain 
        Num: number of atoms in formula
        Z: atomic number
    :param float vol: molecular volume in A^3
    :param float wave: optional wavelength in A
    
    :returns: float rho: scattering density in 10^10cm^-2; 
        if wave > 0 the includes f' contribution
    :returns: float mu: if wave>0 absorption coeff in cm^-1 ; otherwise 0
    :returns: float fpp: if wave>0 f" in 10^10cm^-2; otherwise 0
    
    """
    rho = 0
    mu = 0
    bpp = 0
    for El in Elements:
        isotope = Elements[El]['Isotope']
        b0 = Elements[El]['Isotopes'][isotope]['SL'][0]
        mu += Elements[El]['Isotopes'][isotope].get('SA', 0.0) * Elements[El][
            'Num']
        if wave and 'BW-LS' in Elements[El]['Isotopes'][isotope]:
            Re, Im, E0, gam, A, E1, B, E2 = Elements[El]['Isotopes'][isotope][
                'BW-LS'][1:]
            Emev = 81.80703 / wave ** 2
            T0 = Emev - E0
            T1 = Emev - E1
            T2 = Emev - E2
            D0 = T0 ** 2 + gam ** 2
            D1 = T1 ** 2 + gam ** 2
            D2 = T2 ** 2 + gam ** 2
            b0 += Re * (T0 / D0 + A * T1 / D1 + B * T2 / D2)
            bpp += Im * (1 / D0 + A / D1 + B / D2)
        else:
            bpp += Elements[El]['Isotopes'][isotope]['SL'][1]
        rho += Elements[El]['Num'] * b0
    if wave:
        mu *= wave
    return 100.0 * rho / vol, mu / vol, 100.0 * bpp / vol
