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)
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