示例#1
0
    def testDrawMorgan(self):
        from rdkit.Chem import rdMolDescriptors
        m = Chem.MolFromSmiles('c1ccccc1CC1CC1')
        bi = {}
        fp = rdMolDescriptors.GetMorganFingerprintAsBitVect(m,
                                                            radius=2,
                                                            bitInfo=bi)
        self.assertTrue(872 in bi)

        svg1 = Draw.DrawMorganBit(m, 872, bi)
        aid, r = bi[872][0]
        svg2 = Draw.DrawMorganEnv(m, aid, r)
        self.assertEqual(svg1, svg2)
        self.assertTrue("style='fill:#CCCCCC;" in svg1)
        self.assertTrue("style='fill:#E5E533;" in svg1)
        self.assertTrue("style='fill:#9999E5;" in svg1)

        svg1 = Draw.DrawMorganBit(m, 872, bi, centerColor=None)
        aid, r = bi[872][0]
        svg2 = Draw.DrawMorganEnv(m, aid, r, centerColor=None)
        self.assertEqual(svg1, svg2)
        self.assertTrue("style='fill:#CCCCCC;" in svg1)
        self.assertTrue("style='fill:#E5E533;" in svg1)
        self.assertFalse("style='fill:#9999E5;" in svg1)
        with self.assertRaises(KeyError):
            Draw.DrawMorganBit(m, 32, bi)
示例#2
0
    def testDrawMorgan(self):
        m = Chem.MolFromSmiles('c1ccccc1CC1CC1')
        bi = {}
        _ = rdMolDescriptors.GetMorganFingerprintAsBitVect(m,
                                                           radius=2,
                                                           bitInfo=bi)
        self.assertTrue(872 in bi)

        svg1 = Draw.DrawMorganBit(m, 872, bi)
        aid, r = bi[872][0]
        svg2 = Draw.DrawMorganEnv(m, aid, r)
        self.assertEqual(svg1, svg2)
        self.assertTrue("style='fill:#CCCCCC;" in svg1)
        self.assertTrue("style='fill:#E5E533;" in svg1)
        self.assertTrue("style='fill:#9999E5;" in svg1)

        svg1 = Draw.DrawMorganBit(m, 872, bi, centerColor=None)
        aid, r = bi[872][0]
        svg2 = Draw.DrawMorganEnv(m, aid, r, centerColor=None)
        self.assertEqual(svg1, svg2)
        self.assertTrue("style='fill:#CCCCCC;" in svg1)
        self.assertTrue("style='fill:#E5E533;" in svg1)
        self.assertFalse("style='fill:#9999E5;" in svg1)
        with self.assertRaises(KeyError):
            Draw.DrawMorganBit(m, 32, bi)

        if hasattr(Draw, 'MolDraw2DCairo'):
            # Github #3796: make sure we aren't trying to generate metadata:
            png = Draw.DrawMorganBit(m, 872, bi, useSVG=False)
            self.assertIn(b'PNG', png)
            self.assertIsNone(Chem.MolFromPNGString(png))
示例#3
0
def draw_fp_bit(fp_func,base_path,mol,idx=None,**kwargs):
    info = {}
    Mol_add_atomSymbol(mol)
    fp = fp_func(mol,bitInfo=info,**kwargs)
    if not os.path.exists(base_path):
        os.mkdir(base_path)
    if idx is None:
        for key in info.keys():
            print("Bit {} : \n".format(key))
            sub_svg=Draw.DrawMorganBit(mol,key,info,useSVG=True)
            key = str(key)
            full_path  = join(base_path,key)
            Draw_from_svg(sub_svg,full_path)      
    else:
        sub_svg=Draw.DrawMorganBit(mol,idx,info,useSVG=True)
        Draw_from_svg(sub_svg,join(base_path,idx))
示例#4
0
    def draw_fragment(self,
                      fragment_id: Union[str, int],
                      show_zscore: bool = True) -> str:
        """Draw a specified fragmnet.

        Args:
            fragment_id (Union[str, int]): User-defined fragment string, or position of the
                Morgan fingerprint bit to be drawn.
            show_zscore (bool, optional): Annotate drawing with zscore. Defaults to True.

        Returns:
            str: Molecule drawing SVG.
        """

        # images will be annotated with zscore
        legend = f"zscore = {self.zscores[fragment_id]:.2f}" if show_zscore else ""

        # handle drawing of user-defined fragments
        if self.user_frags:
            mol = Chem.MolFromSmarts(fragment_id)
            img = Draw.MolsToGridImage([mol],
                                       molsPerRow=1,
                                       subImgSize=(200, 200),
                                       legends=[legend])

        # handle drawing of auto-generated fragments
        mol = self._get_mol_with_frag(fragment_id)

        bit_info = {}
        if self.fp_type == "morgan":
            _ = rdMolDescriptors.GetMorganFingerprintAsBitVect(
                mol, radius=self.fp_rad, nBits=self.fp_bits, bitInfo=bit_info)

            img = Draw.DrawMorganBit(mol,
                                     fragment_id,
                                     bit_info,
                                     useSVG=True,
                                     legend=legend)

        if self.fp_type == "rdkit":
            _ = Chem.RDKFingerprint(
                mol,
                minPath=self.fp_rad,
                maxPath=self.fp_rad,
                fpSize=self.fp_bits,
                bitInfo=bit_info,
            )

            img = Draw.DrawRDKitBit(mol,
                                    fragment_id,
                                    bit_info,
                                    useSVG=True,
                                    legend=legend)
        return img
示例#5
0
def DrawBitFromSmiles(smiles, fp_choice, weboutput=True):

    fp_choice = int(fp_choice)

    mol = Chem.MolFromSmiles(smiles)

    bitInfo = {}
    fp = AllChem.GetMorganFingerprint(mol,
                                      3,
                                      bitInfo=bitInfo,
                                      useChirality=True)

    if fp_choice in bitInfo:

        svg = Draw.DrawMorganBit(mol, fp_choice, bitInfo, useSVG=True)

        if weboutput:
            svg = svg.replace("\n", "")

        return (svg)

    else:
        return (None)
示例#6
0
#     64: ((1, 1), (2, 1)), 74: ((3, 1),),
#     81: ((0, 0), (1, 0), (2, 0), (3, 0)), 100: ((5, 0),),
#     121: ((4, 2),), 122: ((4, 0),),
#     131: ((2, 2),), 172: ((4, 1),),
#     175: ((1, 2),), 179: ((0, 2),),
#     186: ((6, 1),), 192: ((3, 2),),
#     195: ((5, 1),), 214: ((0, 1),)
# }
# 对bit进行可视化
bits = list(bi.keys())
print(bits)
[19, 33, 64, 74, 81, 100, 121, 122, 131, 172, 175, 179, 186, 192, 195, 214]
bits = [19, 64, 81]
imgs = []
for bit in bits:
    mfp2_svg = Draw.DrawMorganBit(mol, bit, bi)
    imgs.append(mfp2_svg)


def displayingsinrow(imgs, col=4):
    plt.figure(figsize=(20, 20))
    columns = col
    for i, image in enumerate(imgs):
        ax = plt.subplot(len(imgs) / columns, columns, i)
        ax.set_axis_off()
        plt.imshow(image)


displayingsinrow(imgs)

bi_tuple = [(mol, bit, bi) for bit in list(bi.keys())]
示例#7
0
                    continue
                # remove 3D info for Draw Bits, may fail for Kekulize
                m = Chem.MolFromSmiles(Chem.MolToSmiles(m))
                if m is None:
                    continue
                info = {}
                fp = AllChem.GetMorganFingerprintAsBitVect(m,
                                                           2,
                                                           nBits=nBits,
                                                           bitInfo=info)
                if bit in set(fp.GetOnBits()):
                    bit_examples.append((m, bit, info))
                    example_count += 1
                    break
    # http://rdkit.blogspot.com/2018/10/using-new-fingerprint-bit-rendering-code.html
    examples_svg = [Draw.DrawMorganBit(*i) for i in bit_examples]
    # remove two '\n' at the start and end of svg
    examples_svg = [i.strip() for i in examples_svg]
    examples_svg = [i.replace('\n<svg', '<svg') for i in examples_svg]
    for list_, svg in zip(bits_examples, examples_svg):
        list_.append(svg)

svg_cols = [f'example_{i+1}' for i in range(4)]
for col, list_ in zip(svg_cols, bits_examples):
    df[col] = list_
df = df.sort_values(by='zinc_freq', ascending=False)
df = df.reset_index(drop=True)
df.index += 1
df['bit'] = [f'bit:<br>{i}' for i in df['bit']]
df['log2_FC'] = [f'log2(FC):<br>{i:.2f}' for i in df['log2_FC']]
for col in ['active_freq', 'decoy_freq', 'mean_freq', 'zinc_freq']: