示例#1
0
  def testSimilarityMap(self):
    # Morgan2 BV
    refWeights = [0.5, 0.5, 0.5, -0.5, 0.5, 0.5]
    weights = sm.GetAtomicWeightsForFingerprint(self.mol1, self.mol2, lambda m, i: sm.GetMorganFingerprint(m, i, radius=2, fpType='bv'))
    for w,r in zip(weights, refWeights): self.assertEqual(w, r)

    fig, maxWeight = sm.GetSimilarityMapForFingerprint(self.mol1, self.mol2, lambda m, i: sm.GetMorganFingerprint(m, i, radius=2, fpType='bv'))
    self.assertEqual(maxWeight, 0.5)
    
    weights, maxWeight = sm.GetStandardizedWeights(weights)
    self.assertEqual(maxWeight, 0.5)
    refWeights = [1.0, 1.0, 1.0, -1.0, 1.0, 1.0]
    for w,r in zip(weights, refWeights): self.assertEqual(w, r)

    weights = sm.GetAtomicWeightsForFingerprint(self.mol1, self.mol2, lambda m, i: sm.GetMorganFingerprint(m, i, fpType='count'))
    self.assertTrue(weights[3] < 0)
    weights = sm.GetAtomicWeightsForFingerprint(self.mol1, self.mol2, lambda m, i: sm.GetMorganFingerprint(m, i, fpType='bv', useFeatures=True))
    self.assertTrue(weights[3] < 0)

    # hashed AP BV
    refWeights = [0.09523, 0.17366, 0.17366, -0.23809, 0.17366, 0.17366]
    weights = sm.GetAtomicWeightsForFingerprint(self.mol1, self.mol2, lambda m, i: sm.GetAPFingerprint(m, i, fpType='bv', nBits=1024))
    for w,r in zip(weights, refWeights): self.assertAlmostEqual(w, r, 4)

    weights = sm.GetAtomicWeightsForFingerprint(self.mol1, self.mol2, lambda m, i: sm.GetAPFingerprint(m, i, fpType='normal'))
    self.assertTrue(weights[3] < 0)
    weights = sm.GetAtomicWeightsForFingerprint(self.mol1, self.mol2, lambda m, i: sm.GetAPFingerprint(m, i, fpType='hashed'))
    self.assertTrue(weights[3] < 0)
    
    # hashed TT BV
    refWeights = [0.5, 0.5, -0.16666, -0.5, -0.16666, 0.5]
    weights = sm.GetAtomicWeightsForFingerprint(self.mol1, self.mol2, lambda m, i: sm.GetTTFingerprint(m, i, fpType='bv', nBits=1024, nBitsPerEntry=1))
    for w,r in zip(weights, refWeights): self.assertAlmostEqual(w, r, 4)

    weights = sm.GetAtomicWeightsForFingerprint(self.mol1, self.mol2, lambda m, i: sm.GetTTFingerprint(m, i, fpType='normal'))
    self.assertTrue(weights[3] < 0)
    weights = sm.GetAtomicWeightsForFingerprint(self.mol1, self.mol2, lambda m, i: sm.GetTTFingerprint(m, i, fpType='hashed'))
    self.assertTrue(weights[3] < 0)

    # RDK fingerprint BV
    refWeights = [0.42105, 0.42105, 0.42105, -0.32895, 0.42105, 0.42105]
    weights = sm.GetAtomicWeightsForFingerprint(self.mol1, self.mol2, lambda m, i: sm.GetRDKFingerprint(m, i, nBits=1024, nBitsPerHash=1))
    for w,r in zip(weights, refWeights): self.assertAlmostEqual(w, r, 4)
示例#2
0
def draw_map():
    """ Creates similarity maps using the provided molecules (SMILES).
    
    """

    m1 = Chem.MolFromSmiles('c1ccccc1O')
    m2 = Chem.MolFromSmiles('c1ccccc1N')

    # Morgan Fingerprint (with normalization)
    # Can also be used with APFingerprint or TTFingerprint
    fig1, maxweight = SimilarityMaps.GetSimilarityMapForFingerprint(
        m1, m2, SimilarityMaps.GetMorganFingerprint)
    fig1.savefig('/path/to/similaritymap.png', bbox_inches='tight')

    # TT Fingerprint (with normalization)
    fig2, maxweight = SimilarityMaps.GetSimilarityMapForFingerprint(
        m1, m2, SimilarityMaps.GetTTFingerprint)
    fig2.savefig('/path/to/similaritymap.png', bbox_inches='tight')

    # Morgan Fingerprint (without normalization)
    weights = SimilarityMaps.GetAtomicWeightsForFingerprint(
        m1, m2, SimilarityMaps.GetMorganFingerprint)
    fig3 = SimilarityMaps.GetSimilarityMapFromWeights(m2,
                                                      weights,
                                                      size=(150, 150))
    fig3.savefig('/path/to/similaritymap.png', bbox_inches='tight')

    # the degree of partial charge by using atomic charge
    AllChem.ComputeGasteigerCharges(m1)
    charges = [
        float(atom.GetProp('_GasteigerCharge')) for atom in m1.GetAtoms()
    ]
    fig4 = SimilarityMaps.GetSimilarityMapFromWeights(m2,
                                                      charges,
                                                      size=(150, 150),
                                                      scale=10)
    fig4.savefig('/path/to/molcharge_similaritymap.png', bbox_inches='tight')
    def testSimilarityMapKWArgs(self):
        # Morgan2 BV
        m1 = Chem.MolFromSmiles('CC[C@](F)(Cl)c1ccccc1')
        m2 = Chem.MolFromSmiles('CC[C@@](F)(Cl)c1ccccc1')
        weights = sm.GetAtomicWeightsForFingerprint(
            m1, m2, lambda m, i: sm.GetAPFingerprint(
                m, atomId=i, includeChirality=False))
        for w in weights:
            self.assertAlmostEqual(w, 0.100, 4)
        weights = sm.GetAtomicWeightsForFingerprint(
            m1, m2, lambda m, i: sm.GetAPFingerprint(
                m, atomId=i, includeChirality=True))
        for i, w in enumerate(weights):
            if i != 2:
                self.assertAlmostEqual(w, 0.098, 3)
            else:
                self.assertAlmostEqual(w, -0.082, 3)

        weights = sm.GetAtomicWeightsForFingerprint(
            m1, m2, lambda m, i: sm.GetTTFingerprint(
                m, atomId=i, includeChirality=False))
        for w in weights:
            self.assertTrue(w > 0.0)
        weights = sm.GetAtomicWeightsForFingerprint(
            m1, m2, lambda m, i: sm.GetTTFingerprint(
                m, atomId=i, includeChirality=True))
        for i, w in enumerate(weights):
            if i > 4:
                self.assertTrue(w > 0.0)
            else:
                self.assertTrue(w < 0.0)

        weights = sm.GetAtomicWeightsForFingerprint(
            m1, m2, lambda m, i: sm.GetMorganFingerprint(
                m, radius=1, atomId=i, useChirality=False))
        weights2 = sm.GetAtomicWeightsForFingerprint(
            m1, m2, lambda m, i: sm.GetMorganFingerprint(
                m, radius=1, atomId=i, useChirality=True))
        # testing explicit values here seems silly, just check that the contribution of the
        # chiral center drops:
        self.assertTrue(weights[2] > weights2[2])
示例#4
0
targetmol = Chem.MolFromSmiles(
    'COc1cccc2cc(C(=O)NCCCCN3CCN(c4cccc5nccnc54)CC3)oc21')
# 参考分子
refmol = Chem.MolFromSmiles('CCCN(CCCCN1CCN(c2ccccc2OC)CC1)Cc1ccc2ccccc2c1')

d = Draw.MolDraw2DSVG(400, 400)
d.ClearDrawing()
target_mol_simi_fig, maxweight = SimilarityMaps.GetSimilarityMapForFingerprint(
    refmol,
    targetmol,
    lambda m, i: SimilarityMaps.GetMorganFingerprint(
        m, i, radius=2, fpType='bv'),
    draw2d=d
)
print(target_mol_simi_fig)  # Figure(250x250)
print(maxweight)  # 0.12255947497949138
d.FinishDrawing()
with open('/drug_development/studyRdkit/st_rdcit/img/mol28.svg', 'w+') as outf:
    outf.write(d.GetDrawingText())

# 原子颜色越绿,对相似性的贡献越大。

# 或者可以用以下方法
weights = SimilarityMaps.GetAtomicWeightsForFingerprint(
    refmol, mol, SimilarityMaps.GetMorganFingerprint)

print(['%.2f' % w for w in weights])
# ['0.11', '0.11', '0.08', '0.07', '-0.03', '0.07', '0.02']

target_mol_simi_fig = SimilarityMaps.GetSimilarityMapFromWeights(mol, weights)