def morgan_fingerprint_vis(product_smiles, sim_smiles): mol = Chem.MolFromSmiles(sim_smiles) refmol = Chem.MolFromSmiles(product_smiles) fp1 = SimilarityMaps.GetMorganFingerprint(mol) fp2 = SimilarityMaps.GetMorganFingerprint(refmol) fig, maxweight = SimilarityMaps.GetSimilarityMapForFingerprint( refmol, mol, SimilarityMaps.GetMorganFingerprint) return DataStructs.FingerprintSimilarity(fp1, fp2)
def testSimilarityMapsMolDraw2D(self): # nothing really sensible to test here, just make sure things run mol = Chem.MolFromSmiles( 'COc1cccc2cc(C(=O)NCCCCN3CCN(c4cccc5nccnc54)CC3)oc21') refmol = Chem.MolFromSmiles( 'CCCN(CCCCN1CCN(c2ccccc2OC)CC1)Cc1ccc2ccccc2c1') d = Draw.MolDraw2DSVG(400, 400) d.ClearDrawing() _, maxWeight = sm.GetSimilarityMapForFingerprint( refmol, mol, lambda m, i: sm.GetMorganFingerprint(m, i, radius=2, fpType='bv'), draw2d=d) d.FinishDrawing() with open('similarityMap1_out.svg', 'w+') as outf: outf.write(d.GetDrawingText()) # Github #2904: make sure we can provide our own colormap as a list: colors = [(0, 1, 0, 0.5), (1, 1, 1), (0, 0, 1, 0.5)] d = Draw.MolDraw2DSVG(400, 400) d.ClearDrawing() _, maxWeight = sm.GetSimilarityMapForFingerprint( refmol, mol, lambda m, i: sm.GetMorganFingerprint(m, i, radius=2, fpType='bv'), draw2d=d, colorMap=colors) d.FinishDrawing() with open('similarityMap1_out2.svg', 'w+') as outf: outf.write(d.GetDrawingText()) # Github #2904: make sure we can provide our own colormap as a matplotlib colormap: try: from matplotlib import cm d = Draw.MolDraw2DSVG(400, 400) d.ClearDrawing() _, maxWeight = sm.GetSimilarityMapForFingerprint( refmol, mol, lambda m, i: sm.GetMorganFingerprint( m, i, radius=2, fpType='bv'), draw2d=d, colorMap=cm.PiYG) d.FinishDrawing() with open('similarityMap1_out3.svg', 'w+') as outf: outf.write(d.GetDrawingText()) except ImportError: pass
def _similarityMapSVG(ms, width=500, height=500, radius=2, fingerprint='morgan', format='svg'): if matplotlib is None: raise ValueError('matplotlib not useable') _call(ms, 'UpdatePropertyCache', strict=False) _apply(ms, ct._sssr) fn = None if fingerprint == 'morgan': fn = lambda x, i: SimilarityMaps.GetMorganFingerprint( x, i, radius=radius) elif fingerprint == 'tt': fn = SimilarityMaps.GetAPFingerprint elif fingerprint == 'ap': fn = SimilarityMaps.GetTTFingerprint SimilarityMaps.GetSimilarityMapForFingerprint(ms[0], ms[1], fn, size=(width, height)) sio = io.StringIO() pyplot.savefig(sio, format=format, bbox_inches='tight', dpi=100) return sio.getvalue()
def main(): # load data cells = load_1col(cell2idfile, 1) # load input data inputfile = sys.argv[1] inputdrug = load_1col(inputfile, 0)[0] outputdir = sys.argv[2] + "/" # build morgan fingerprint for the input drug d = Chem.MolFromSmiles(inputdrug) f = list( map( str, list(SimilarityMaps.GetMorganFingerprint(d, fpType='bv', radius=2)))) # print out new genotype input file with open(outputdir + "input_drug_fingerprint.txt", 'w') as fo: fo.write("%s\n" % ','.join(f)) fo.write("%s\n" % ','.join(f)) # generate new input cell2ind file with open(outputdir + "input_drug2id.txt", 'w') as fo: fo.write("0\t%s\n" % inputdrug) fo.write("1\tdummy_%s\n" % inputdrug) # generate new input data file for prediction with open(outputdir + "input.txt", 'w') as fo: for c in cells: fo.write("%s\t%s\t-1\n" % (c, inputdrug))
def get_circular_similarity(correct_ligand, mol_to_fix, type_fp='bv', use_features=False): type_fp = type_fp correct_ligand_fingerprint = SimilarityMaps.GetMorganFingerprint( correct_ligand, radius=1, nBits=4096, fpType=type_fp, useFeatures=use_features) mol_to_fix_fingerprint = SimilarityMaps.GetMorganFingerprint( mol_to_fix, radius=1, nBits=4096, fpType=type_fp, useFeatures=use_features) sim_func = DataStructs.FingerprintSimilarity temp_autoinducer_TanimotoSimilarty = sim_func( correct_ligand_fingerprint, mol_to_fix_fingerprint, metric=DataStructs.TanimotoSimilarity) test = 1 curr_metric = DataStructs.TanimotoSimilarity fig, maxweight = SimilarityMaps.GetSimilarityMapForFingerprint( correct_ligand, mol_to_fix, lambda m, idx: SimilarityMaps.GetMorganFingerprint( m, atomId=idx, radius=1, fpType='bv'), metric=curr_metric) # print(maxweight) # fig.suptitle('test title', fontsize=20) ax = fig.gca() # ax.title plt.title('test', fontsize=30) fig.set_size_inches(7, 7) fig.set_dpi(600) fig.savefig('test.png', bbox_inches='tight') test = 1
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)
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])
def draw_finger_print(smile_file): with open(smile_file, 'r') as f: for mol in f: refmol = Chem.MolFromSmiles( 'CCCN(CCCCN1CCN(c2ccccc2OC)CC1)Cc1ccc2ccccc2c1' ) # this is the template here ms = Chem.MolFromSmiles(mol) fp = SimilarityMaps.GetAPFingerprint(ms, fpType='normal') fp = SimilarityMaps.GetTTFingerprint(ms, fpType='normal') fp = SimilarityMaps.GetMorganFingerprint(ms, fpType='bv') fig, maxweight = SimilarityMaps.GetSimilarityMapForFingerprint( refmol, ms, SimilarityMaps.GetMorganFingerprint) fig.save('/home/nad/Desktop/navid22.png')
def _similarityMap(ms, width=100, height=100, radius=2, fingerprint = 'morgan'): if matplotlib is None: raise ValueError('matplotlib not useable') if fingerprint=='morgan': fn = lambda x,i:SimilarityMaps.GetMorganFingerprint(x,i,radius=radius) elif fingerprint=='tt': fn = SimilarityMaps.GetAPFingerprint elif fingerprint=='ap': fn = SimilarityMaps.GetTTFingerprint fig, maxv = SimilarityMaps.GetSimilarityMapForFingerprint(ms[0], ms[1], fn, size=(width, height)) sio = StringIO.StringIO() pyplot.savefig(sio, format='png', bbox_inches='tight', dpi=100) return sio.getvalue()
def testSimilarityMapsMolDraw2D(self): # nothing really sensible to test here, just make sure things run mol = Chem.MolFromSmiles( 'COc1cccc2cc(C(=O)NCCCCN3CCN(c4cccc5nccnc54)CC3)oc21') refmol = Chem.MolFromSmiles( 'CCCN(CCCCN1CCN(c2ccccc2OC)CC1)Cc1ccc2ccccc2c1') d = Draw.MolDraw2DSVG(400, 400) d.ClearDrawing() _, maxWeight = sm.GetSimilarityMapForFingerprint( refmol, mol, lambda m, i: sm.GetMorganFingerprint(m, i, radius=2, fpType='bv'), draw2d=d) d.FinishDrawing() with open('similarityMap1_out.svg', 'w+') as outf: outf.write(d.GetDrawingText())
def testGithub4763(self): mol = Chem.MolFromSmiles( 'COc1cccc2cc(C(=O)NCCCCN3CCN(c4cccc5nccnc54)CC3)oc21') refmol = Chem.MolFromSmiles( 'CCCN(CCCCN1CCN(c2ccccc2OC)CC1)Cc1ccc2ccccc2c1') d = Draw.MolDraw2DSVG(400, 400) d.ClearDrawing() _, maxWeight = sm.GetSimilarityMapForFingerprint( refmol, mol, lambda m, i: sm.GetMorganFingerprint(m, i, radius=2, fpType='bv'), draw2d=d, colorMap="coolwarm") d.FinishDrawing() svg = d.GetDrawingText() with open('github4763.svg', 'w+') as outf: outf.write(svg) self.assertFalse('fill:#FBFCFB7F' in svg) self.assertTrue('fill:#DDDCDB' in svg)
def fp_maps(results, query, fingerprint, fpradius, nbits, features, metric, out_file, multfile): if fingerprint == "ecfp" or fingerprint == "fcfp": fp_func = lambda m, idx: SimilarityMaps.GetMorganFingerprint( m, atomId=idx, radius=fpradius, fpType='bv', nBits=nbits, useFeatures=features) elif fingerprint == "rdkit": fp_func = lambda m, idx: SimilarityMaps.GetRDKFingerprint( m, atomId=idx, fpType="bv", nBits=nbits) elif fingerprint == "ap": fp_func = lambda m, idx: SimilarityMaps.GetAPFingerprint( m, atomId=idx, fpType="bv", nBits=nbits) else: fp_func = lambda m, idx: SimilarityMaps.GetTTFingerprint( m, atomId=idx, fpType="bv", nBits=nbits) if multfile: sim_map_mf(results, query, fp_func, metric, out_file) else: sim_map(results, query, fp_func, metric, out_file)
def _similarityMap(ms, params): if matplotlib is None: raise ValueError('matplotlib not useable') fp = params.get('fingerprint', 'morgan') if fp == 'morgan': rad = int(params.get('radius', 2)) fn = lambda x, i: SimilarityMaps.GetMorganFingerprint(x, i, radius=rad) elif fp == 'tt': fn = SimilarityMaps.GetAPFingerprint elif fp == 'ap': fn = SimilarityMaps.GetTTFingerprint w = int(params.get('w', 100)) h = int(params.get('h', 100)) fig, maxv = SimilarityMaps.GetSimilarityMapForFingerprint(ms[0], ms[1], fn, size=(w, h)) sio = StringIO.StringIO() pyplot.savefig(sio, format='png', bbox_inches='tight', dpi=100) return sio.getvalue()
def fpFunction(mol,atomId=-1): fp = SimilarityMaps.GetMorganFingerprint(mol, atomId=atomId, radius=radius, nBits=nBits) return fp
# 目标分子 # 指纹函数 # 相似性函数(默认是 Dice similarity) # 目标分子 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])
#name: Similarity Maps Using Fingerprints #description: Similarity Maps Using Fingerprints, RDKit based #help-url: /help/domains/chem/functions/sim-maps.md #language: python #tags: demo, chem, rdkit #input: string mol = COc1cccc2cc(C(=O)NCCCCN3CCN(c4cccc5nccnc54)CC3)oc21 {semType: Molecule} [Molecule, in SMILES format] #input: string refmol = CCCN(CCCCN1CCN(c2ccccc2OC)CC1)Cc1ccc2ccccc2c1 {semType: Molecule} [Reference molecule, in SMILES format] #input: int radius = 2 [Fingerprint function radius] #output: double maxweight [The maximum weight that was found when creating the map] #output: graphics simMap [Similarity Map] from rdkit import Chem from rdkit.Chem.Draw import SimilarityMaps mol = Chem.MolFromSmiles(mol) refmol = Chem.MolFromSmiles(refmol) from rdkit import DataStructs simMap, maxweight = SimilarityMaps.GetSimilarityMapForFingerprint( refmol, mol, lambda m, idx: SimilarityMaps.GetMorganFingerprint( m, atomId=idx, radius=radius, fpType='count'), metric=DataStructs.TanimotoSimilarity)
def getCircular(mol, nBits=1024): if nBits == 1024: return AllChem.GetMorganFingerprintAsBitVect(mol, 2, nBits=1024) else: return SimilarityMaps.GetMorganFingerprint(mol, fpType='bv')
def genFP(mol, Dummy=-1): fp = SimilarityMaps.GetMorganFingerprint(mol) fp_vect = np.zeros((1, )) DataStructs.ConvertToNumpyArray(fp, fp_vect) return fp_vect
def genFP(mol,Dummy=-1): # Helper function to convert to Morgan type fingerprint in Numpy Array fp = SimilarityMaps.GetMorganFingerprint(mol) fp_vect = np.zeros((1,)) DataStructs.ConvertToNumpyArray(fp, fp_vect) return fp_vect