def ConstructMolecularGraph(molecule): '''Constructs molecular graph from rdkit's molecule object ''' g = OrderedDict({}) h = OrderedDict({}) molecule = Chem.MolFromSmiles(molecule) stereo = Chem.FindMolChiralCenters(molecule) features = rdDesc.GetFeatureInvariants(molecule) chiral_centers = [0] * molecule.GetNumAtoms() for i in stereo: chiral_centers[i[0]] = i[1] for i in range(0, molecule.GetNumAtoms()): atom_i = molecule.GetAtomWithIdx(i) h[i] = torch.FloatTensor( atom_features(atom_i, chiral_centers[i], features[i]).astype(np.float64)).to(device) for j in range(0, molecule.GetNumAtoms()): e_ij = molecule.GetBondBetweenAtoms(i, j) if e_ij != None: e_ij = map(lambda x: 1 if x == True else 0, bond_features(e_ij).tolist()) # ADDED edge feat e_ij = torch.FloatTensor(list(e_ij)).to(device) atom_j = molecule.GetAtomWithIdx(j) if i not in g: g[i] = [] g[i].append((e_ij, j)) return g, h
def calculateMol(self, m, smiles, internalParsing=False): return list( rd.GetMorganFingerprintAsBitVect( m, radius=self.radius, nBits=self.nbits, invariants=rd.GetFeatureInvariants(m)))
def calculateMol(self, m, smiles, internalParsing=False): counts = list( rd.GetHashedMorganFingerprint( m, radius=self.radius, nBits=self.nbits, invariants=rd.GetFeatureInvariants(m))) counts = [clip(x, smiles) for x in counts] return counts
def get_graph_from_smile(molecule_smile): """ Method that constructs a molecular graph with nodes being the atoms and bonds being the edges. :param molecule_smile: SMILE sequence :return: DGL graph object, Node features and Edge features """ G = DGLGraph() molecule = Chem.MolFromSmiles(molecule_smile) features = rdDesc.GetFeatureInvariants(molecule) stereo = Chem.FindMolChiralCenters(molecule) chiral_centers = [0] * molecule.GetNumAtoms() for i in stereo: chiral_centers[i[0]] = i[1] G.add_nodes(molecule.GetNumAtoms()) node_features = [] edge_features = [] for i in range(molecule.GetNumAtoms()): atom_i = molecule.GetAtomWithIdx(i) atom_i_features = get_atom_features(atom_i, chiral_centers[i], features[i]) node_features.append(atom_i_features) for j in range(molecule.GetNumAtoms()): bond_ij = molecule.GetBondBetweenAtoms(i, j) if bond_ij is not None: G.add_edge(i, j) bond_features_ij = get_bond_features(bond_ij) edge_features.append(bond_features_ij) G.ndata['x'] = np.array(node_features) G.edata['w'] = np.array(edge_features) return G
def testMorganFingerprints(self): mol = Chem.MolFromSmiles('CC(F)(Cl)C(F)(Cl)C') fp = rdMD.GetMorganFingerprint(mol, 0) self.assertTrue(len(fp.GetNonzeroElements()) == 4) mol = Chem.MolFromSmiles('CC') fp = rdMD.GetMorganFingerprint(mol, 0) self.assertTrue(len(fp.GetNonzeroElements()) == 1) self.assertTrue(list(fp.GetNonzeroElements().values())[0] == 2) fp = rdMD.GetMorganFingerprint(mol, 0, useCounts=False) self.assertTrue(len(fp.GetNonzeroElements()) == 1) self.assertTrue(list(fp.GetNonzeroElements().values())[0] == 1) mol = Chem.MolFromSmiles('CC(F)(Cl)C(F)(Cl)C') fp = rdMD.GetHashedMorganFingerprint(mol, 0) self.assertTrue(len(fp.GetNonzeroElements()) == 4) fp = rdMD.GetMorganFingerprint(mol, 1) self.assertTrue(len(fp.GetNonzeroElements()) == 8) fp = rdMD.GetHashedMorganFingerprint(mol, 1) self.assertTrue(len(fp.GetNonzeroElements()) == 8) fp = rdMD.GetMorganFingerprint(mol, 2) self.assertTrue(len(fp.GetNonzeroElements()) == 9) mol = Chem.MolFromSmiles('CC(F)(Cl)[C@](F)(Cl)C') fp = rdMD.GetMorganFingerprint(mol, 0) self.assertTrue(len(fp.GetNonzeroElements()) == 4) fp = rdMD.GetMorganFingerprint(mol, 1) self.assertTrue(len(fp.GetNonzeroElements()) == 8) fp = rdMD.GetMorganFingerprint(mol, 2) self.assertTrue(len(fp.GetNonzeroElements()) == 9) fp = rdMD.GetMorganFingerprint(mol, 0, useChirality=True) self.assertTrue(len(fp.GetNonzeroElements()) == 4) fp = rdMD.GetMorganFingerprint(mol, 1, useChirality=True) self.assertTrue(len(fp.GetNonzeroElements()) == 9) fp = rdMD.GetMorganFingerprint(mol, 2, useChirality=True) self.assertTrue(len(fp.GetNonzeroElements()) == 10) mol = Chem.MolFromSmiles('CCCCC') fp = rdMD.GetMorganFingerprint(mol, 0, fromAtoms=(0, )) self.assertTrue(len(fp.GetNonzeroElements()) == 1) mol = Chem.MolFromSmiles('CC1CC1') vs1 = rdMD.GetConnectivityInvariants(mol) self.assertEqual(len(vs1), mol.GetNumAtoms()) fp1 = rdMD.GetMorganFingerprint(mol, 2, invariants=vs1) fp2 = rdMD.GetMorganFingerprint(mol, 2) self.assertEqual(fp1, fp2) vs2 = rdMD.GetConnectivityInvariants(mol, False) self.assertEqual(len(vs2), mol.GetNumAtoms()) self.assertNotEqual(vs1, vs2) fp1 = rdMD.GetMorganFingerprint(mol, 2, invariants=vs2) self.assertNotEqual(fp1, fp2) mol = Chem.MolFromSmiles('Cc1ccccc1') vs1 = rdMD.GetFeatureInvariants(mol) self.assertEqual(len(vs1), mol.GetNumAtoms()) self.assertEqual(vs1[0], 0) self.assertNotEqual(vs1[1], 0) self.assertEqual(vs1[1], vs1[2]) self.assertEqual(vs1[1], vs1[3]) self.assertEqual(vs1[1], vs1[4]) mol = Chem.MolFromSmiles('FCCCl') vs1 = rdMD.GetFeatureInvariants(mol) self.assertEqual(len(vs1), mol.GetNumAtoms()) self.assertEqual(vs1[1], 0) self.assertEqual(vs1[2], 0) self.assertNotEqual(vs1[0], 0) self.assertEqual(vs1[0], vs1[3]) fp1 = rdMD.GetMorganFingerprint(mol, 0, invariants=vs1) fp2 = rdMD.GetMorganFingerprint(mol, 0, useFeatures=True) self.assertEqual(fp1, fp2)
def calculateMol(self, m, smiles, internalParsing=False): return clip_sparse(rd.GetHashedMorganFingerprint( m, radius=self.radius, nBits=self.nbits, invariants=rd.GetFeatureInvariants(m)), self.nbits)