예제 #1
0
파일: models.py 프로젝트: peverati/a2md
def a2md_from_mol(mol: Mol2):
    """
    returns the density model associated to a Mol2
    :param mol:
    :type mol: Mol2
    :return:
    :rtype: Molecule
    """
    an = mol.get_atomic_numbers()
    coords = mol.get_coordinates(units="au")
    charge = mol.get_absolute_charges()
    topology = mol.get_bonds()
    segments = mol.segment_idx
    topo_array = []
    for i in range(mol.get_number_atoms()):
        topo_array.append([])
    for i in range(mol.get_number_bonds()):
        begin = int(topology[i, 0])
        end = int(topology[i, 1])
        topo_array[begin - 1].append(end - 1)
        topo_array[end - 1].append(begin - 1)
    return Molecule(coordinates=coords,
                    atomic_numbers=an,
                    charge=charge,
                    topology=topo_array,
                    segments=segments)
예제 #2
0
def convert(mol : Mol2):
    G = nx.Graph()
    for i in range(mol.get_number_atoms()):
        G.add_node(i, **mol.get_atom(i))
    bonds = mol.get_bonds()
    bonds = bonds - 1
    for i in range(mol.get_number_bonds()):
        G.add_edge(bonds[i, 0], bonds[i, 1])

    bonds, angles, dihedrals = decompose_molecule_graph(G)
    dbonds = np.zeros(len(bonds), dtype='float64')
    dangles = np.zeros(len(angles), dtype='float64')
    ddihedrals = np.zeros(len(dihedrals), dtype='float64')

    for i in range(len(bonds)):
        atom1, atom2 = bonds[i].split("|")
        atom1 = int(atom1)
        atom2 = int(atom2)
        x1 = G.nodes[atom1]['coordinates']
        x2 = G.nodes[atom2]['coordinates']
        dbonds[i] = distance(x1, x2)

    for i in range(len(angles)):
        ends, center = angles[i].split(",")
        atom1, atom3 = ends.split("|")
        atom1 = int(atom1)
        atom3 = int(atom3)
        atom2 = int(center)
        x1 = G.nodes[atom1]['coordinates']
        x2 = G.nodes[atom2]['coordinates']
        x3 = G.nodes[atom3]['coordinates']
        dangles[i] = angle(x1, x2, x3)

    for i in range(len(dihedrals)):
        ends, center = dihedrals[i].split(",")
        atom1, atom4 = ends.split("|")
        atom2, atom3 = center.split("|")
        atom1 = int(atom1)
        atom3 = int(atom3)
        atom2 = int(atom2)
        atom4 = int(atom4)
        x1 = G.nodes[atom1]['coordinates']
        x2 = G.nodes[atom2]['coordinates']
        x3 = G.nodes[atom3]['coordinates']
        x4 = G.nodes[atom4]['coordinates']
        ddihedrals[i] = dihedral(x1, x2, x3, x4)

    return dbonds, dangles, ddihedrals