def buildOeBinaryMolCacheFromIndex(self, filePath, ccIdxD, quietFlag=False, fpTypeList=None, limitPerceptions=False, suppressHydrogens=False): """Build cache of OEGraphMol() objects from the input chemical component search index. Args: filePath (str): output cache file path ccIdxD (dict): search index dictionary quietFlag (bool, optional): suppress OE output. Defaults to False. fpTypeList (list, optional): list of fingerprint types. Defaults to None. limitPerceptions (bool, optional): suppress automatic chemical perceptions. Defaults to False. suppressHydrogens (bool, optional): suppress explicit hydrogen count. Defaults to False. Returns: (int, int, list): chem comp success count, error count, chem comp identifier failure list """ failIdList = [] ccCount = 0 errCount = 0 startTime = time.time() try: ofs = oechem.oemolostream() ofs.SetFormat(oechem.OEFormat_OEB) if ofs.open(filePath): oemf = OeMoleculeFactory() if quietFlag: oemf.setQuiet() for searchCcId, ccIdx in ccIdxD.items(): oemf.setDescriptor(ccIdx["smiles"], "oe-iso-smiles", searchCcId) ok = oemf.build(molBuildType="oe-iso-smiles", limitPerceptions=limitPerceptions) if ok and fpTypeList: fpOk = oemf.addFingerPrints(fpTypeList) if not fpOk: logger.info("Fingerprint generation fails for %r", searchCcId) if ok: if not suppressHydrogens: oemf.addExplicitHydrogens() oemf.setSimpleAtomNames() oeMol = oemf.getMol( suppressHydrogens=suppressHydrogens) oechem.OEWriteMolecule(ofs, oeMol) ccCount += 1 if not ok: # build failed incomplete component (e.g. missing atoms or bonds) errCount += 1 failIdList.append(searchCcId) else: logger.error("Unable to open cache database %s", filePath) errCount += 1 except Exception as e: logger.exception("Failing with %s", str(e)) # endTime = time.time() logger.info("Completed operation at %s (%.4f seconds)", time.strftime("%Y %m %d %H:%M:%S", time.localtime()), endTime - startTime) return ccCount, errCount, failIdList
def buildOeBinaryMolCache(self, filePath, ccObjD, molBuildType="model-xyz", quietFlag=False, fpTypeList=None, limitPerceptions=False, suppressHydrogens=False): """Build cache of OEMol() objects from the input chemical component definition list. Args: filePath (str): output cache file path ccObjD (dict): chemical component object dictionary molBuildType (str, optional): [description]. Defaults to "model-xyz". quietFlag (bool, optional): [description]. Defaults to False. fpTypeList (list, optional): fingerprint type list. Defaults to None. limitPerceptions (bool, optional): suppress automatic chemical perceptions. Defaults to False. suppressHydrogens (bool, optional): suppress explicit hydrogen count. Defaults to False. Returns: (int, int, list): chem comp success count, error count, chem comp identifier failure list """ ok = False startTime = time.time() failIdList = [] ccCount = 0 errCount = 0 try: ofs = oechem.oemolostream() ofs.SetFormat(oechem.OEFormat_OEB) if ofs.open(filePath): oemf = OeMoleculeFactory() if quietFlag: oemf.setQuiet() for ccId, ccObj in ccObjD.items(): tId = oemf.setChemCompDef(ccObj) if tId and tId == ccId: ok = oemf.build(molBuildType=molBuildType, limitPerceptions=limitPerceptions) if ok and fpTypeList: fpOk = oemf.addFingerPrints(fpTypeList) if not fpOk: logger.info( "Fingerprint generation fails for %r", ccId) if ok: oeMol = oemf.getMol( suppressHydrogens=suppressHydrogens) oechem.OEWriteMolecule(ofs, oeMol) ccCount += 1 if not ok or not tId: # build failed incomplete component (e.g. missing atoms or bonds) errCount += 1 failIdList.append(ccId) else: logger.error("Unable to open cache database %s", filePath) errCount += 1 except Exception as e: logger.exception("Failing with %s", str(e)) # endTime = time.time() logger.info("Completed operation at %s (%.4f seconds)", time.strftime("%Y %m %d %H:%M:%S", time.localtime()), endTime - startTime) return ccCount, errCount, failIdList