kvkarandashev / bmapqml

Machine learning for target property optimization.
MIT License
0 stars 0 forks source link

Missing read_xyz_file() function in bmapqml/chemexp/utils.py #3

Closed janweinreich closed 2 years ago

janweinreich commented 2 years ago

function read_xyz_file() not defined in bmapqml/chemexp/utils.py, should simply be a copy of chemexp/utils?


def read_xyz_file(xyz_input, additional_attributes=["charge"]):
    atomic_symbols = []
    add_attr_dict={}
    for add_attr in additional_attributes:
        add_attr_dict={add_attr : None, **add_attr_dict}

    try:
        lines=[check_byte(l) for l in xyz_input.readlines()]
    except AttributeError:
        with open(xyz_input, "r") as input_file:
            lines=input_file.readlines()
    num_atoms=int(lines[0])
    xyz_coordinates=np.zeros((num_atoms, 3))
    nuclear_charges=np.zeros((num_atoms,), dtype=int)

    lsplit=lines[1].split()
    for l in lsplit:
        for add_attr in additional_attributes:
            add_attr_eq=add_attr+"="
            if add_attr_eq == l[:len(add_attr_eq)]:
                add_attr_dict[add_attr]=int(l.split("=")[1])

    for atom_id, atom_line in enumerate(lines[2:num_atoms+2]):
        lsplit=atom_line.split()
        atomic_symbol = lsplit[0]
        atomic_symbols.append(atomic_symbol)
        nuclear_charges[atom_id]=NUCLEAR_CHARGE[canonical_atomtype(atomic_symbol)]
        for i in range(3):
            xyz_coordinates[atom_id, i]=float(lsplit[i+1])

    return nuclear_charges, atomic_symbols, xyz_coordinates, add_attr_dict
kvkarandashev commented 2 years ago

That's a consequence of combining several different codes into one in a hectic way; I have committed a fixed version of the code and added a usage example in examples/chemxpl/rdkit_tools.