Beispiel #1
0
def _helper_float(f_content: TextIO) -> dict:
    """Compute the float type values."""
    float_label = {
        'charge': ['<Net Charge>', '</Net Charge>'],
        'energy':
        ['<Energy = T + Vne + Vee + Vnn>', '</Energy = T + Vne + Vee + Vnn>'],
        'virial_ratio': ['<Virial Ratio (-V/T)>', '</Virial Ratio (-V/T)>'],
        'nuclear_viral': [
            '<Nuclear Virial of Energy-Gradient-Based '
            'Forces on Nuclei, W>',
            '</Nuclear Virial of Energy-Gradient-Based '
            'Forces on Nuclei, W>'
        ],
        'full_virial_ratio': [
            '<Full Virial Ratio, -(V - W)/T>',
            '</Full Virial Ratio, -(V - W)/T>'
        ]
    }
    dict_float = {}
    for key, val in float_label.items():
        if f_content.find(val[0]) > 0:
            float_info = f_content[f_content.find(val[0]) + len(val[0]) +
                                   1:f_content.find(val[1])]
            dict_float[key] = np.array(float_info, dtype=float)
        # case for when string not find in the file
        elif f_content.find(val[0]) == -1:
            dict_float[key] = np.array(None)

    return dict_float
Beispiel #2
0
def _helper_mo(f_content: TextIO, num_primitives: int) \
        -> Tuple[List, np.ndarray]:
    str_idx1 = f_content.find('<Molecular Orbital Primitive Coefficients>')
    str_idx2 = f_content.find('</Molecular Orbital Primitive Coefficients>')
    mo = f_content[str_idx1 + 1 + len('<Molecular Orbital Primitive '
                                      'Coefficients>'):str_idx2]
    mo_count = [
        int(i)
        for i in re.findall(r'<MO Number>\n(.*?)\n</MO Number>', mo, re.S)
    ]
    # raw-primitive expansion coefficients for MO
    coefficient_all = re.findall(r'[-+]?\d+.\d+[E,e][+-]\d+',
                                 mo,
                                 flags=re.MULTILINE)
    mo_coefficients = np.array(coefficient_all,
                               dtype=np.float).reshape(-1, num_primitives)
    mo_coefficients = np.transpose(mo_coefficients)
    return np.array(mo_count, np.int), mo_coefficients