コード例 #1
0
ファイル: molecular_graph.py プロジェクト: whoyouwith91/cigin
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
コード例 #2
0
 def calculateMol(self, m, smiles, internalParsing=False):
     return list(
         rd.GetMorganFingerprintAsBitVect(
             m,
             radius=self.radius,
             nBits=self.nbits,
             invariants=rd.GetFeatureInvariants(m)))
コード例 #3
0
 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
コード例 #4
0
ファイル: molecular_graph.py プロジェクト: zw9977129/CIGIN
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
コード例 #5
0
    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)
コード例 #6
0
 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)