def testDrawRDKit(self): m = Chem.MolFromSmiles('c1ccccc1CC1CC1') bi = {} rdkfp = Chem.RDKFingerprint(m, maxPath=5, bitInfo=bi) self.assertTrue(1553 in bi) svg1 = Draw.DrawRDKitBit(m, 1553, bi) path = bi[1553][0] svg2 = Draw.DrawRDKitEnv(m, path) self.assertEqual(svg1, svg2) self.assertTrue("style='fill:#E5E533;" in svg1) self.assertFalse("style='fill:#CCCCCC;" in svg1) self.assertFalse("style='fill:#9999E5;" in svg1) with self.assertRaises(KeyError): Draw.DrawRDKitBit(m, 32, bi)
def draw_fragments(self, draw_tuple): image_list = [] for tup in draw_tuple: mol, bit_ID, fp = tup if self.draw_all: # one molecule can have multiple fragments for i in range(len(fp[bit_ID])): img = Draw.DrawRDKitBit(mol, bit_ID, fp, whichExample=i) image_list.append(img) else: img = Draw.DrawRDKitBit(mol, bit_ID, fp, whichExample=0) image_list.append(img) imgs = Image.fromarray(np.concatenate(image_list, axis=0)) return imgs
def testDrawRDKit(self): m = Chem.MolFromSmiles('c1ccccc1CC1CC1') bi = {} _ = Chem.RDKFingerprint(m, maxPath=5, bitInfo=bi) self.assertTrue(1553 in bi) svg1 = Draw.DrawRDKitBit(m, 1553, bi) path = bi[1553][0] svg2 = Draw.DrawRDKitEnv(m, path) self.assertEqual(svg1, svg2) self.assertTrue("style='fill:#E5E533;" in svg1) self.assertFalse("style='fill:#CCCCCC;" in svg1) self.assertFalse("style='fill:#9999E5;" in svg1) with self.assertRaises(KeyError): Draw.DrawRDKitBit(m, 32, bi) if hasattr(Draw, 'MolDraw2DCairo'): # Github #3796: make sure we aren't trying to generate metadata: png = Draw.DrawRDKitBit(m, 1553, bi, useSVG=False) self.assertIn(b'PNG', png) self.assertIsNone(Chem.MolFromPNGString(png))
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