当前位置: 首页 > news >正文

AF3 ProteinDataset类的_process方法解读

AlphaFold3 protein_dataset模块 ProteinDataset 类 _process 方法的主要功能是处理单个蛋白质流文件,并将其转换为 ProteinMPNN 所需的特征,最终保存为 pickle 文件。

源代码:

    def _process(
        self,
        filename,
        rewrite=False,
        max_length=None,
        min_cdr_length=None,
        classes_to_exclude=None,
    ):
        """Process a proteinflow file and save it as ProteinMPNN features."""
        input_file = os.path.join(self.dataset_folder, filename)
        no_extension_name = filename.split(".")[0]
        data_entry = ProteinEntry.from_pickle(input_file)
        if self.load_ligands:
            ligands = ProteinEntry.retrieve_ligands_from_pickle(input_file)
        if classes_to_exclude is not None:
            if data_entry.get_protein_class() in classes_to_exclude:
                return []
        chains = data_entry.get_chains()
        if self.entry_type == "biounit":
            chain_sets = [chains]
        elif self.entry_type == "chain":
            chain_sets = [[x] for x in chains]
        elif self.entry_type == "pair":
            if len(chains) == 1:
                return []
            chain_sets = list(combinations(chains, 2))
        else:
            raise RuntimeError(
                "Unknown entry type, please choose from ['biounit', 'chain', 'pair']"
            )
        output_names = []
        if self.cut_edges:
            data_entry.cut_missing_edges()
        for chains_i, chain_set in enumerate(chain_sets):
            output_file = os.path.join(
                self.features_folder, no_extension_name + f"_{chains_i}.pickle"
            )
            pass_set = False
            add_name = True
            if os.path.exists(output_file) and not rewrite:
                pass_set = True
                if max_length is not None:
                    if data_entry.get_length(chain_set) > max_length:
                        add_name = False
                if min_cdr_length is not None and data_entry.has_cdr():
                    cdr_length = data_entry.get_cdr_length(chain_set)
                    if not all(
                        [
                            length >= min_cdr_length
                            for length in cdr_length.values()
                            if length > 0
                        ]
                    ):
                        add_name = False
            else:
                if max_length is not None:
                    if data_entry.get_length(chains=chain_set) > max_length:
                        pass_set = True
                        add_name = False
                if min_cdr_length is not None and data_entry.has_cdr():
                    cdr_length = data_entry.get_cdr_length(chain_set)
                    if not all(
                        [
                            length >= min_cdr_length
                            for length in cdr_length.values()
                            if length > 0
                        ]
                    ):
                        pass_set = True
                        add_name = False

                if self.entry_type == "pair":
                    if not data_entry.is_valid_pair(*chain_set):
                        pass_set = True
                        add_name = False
            out = {}
            if add_name:
                cdr_chain_set = set()
                if data_entry.has_cdr():
                    out["cdr"] = torch.tensor(
                        data_entry.get_cdr(chain_set, encode=True)
                    )
                    chain_type_dict = data_entr

文章转载自:

http://WvMVu2IJ.mhnxs.cn
http://ELjXTaMh.mhnxs.cn
http://xx5WfdoF.mhnxs.cn
http://teUUZNKQ.mhnxs.cn
http://YUlYE4RM.mhnxs.cn
http://LEeoPAup.mhnxs.cn
http://WOxEypFG.mhnxs.cn
http://XtTgdVUG.mhnxs.cn
http://zusq6lzc.mhnxs.cn
http://OEDv5nFt.mhnxs.cn
http://V3Sn4J4r.mhnxs.cn
http://sKHuCvMd.mhnxs.cn
http://yhCkMnl1.mhnxs.cn
http://nXOhCd2F.mhnxs.cn
http://AtvXdLdL.mhnxs.cn
http://iZHawZKJ.mhnxs.cn
http://vXkGbc43.mhnxs.cn
http://MG0iRhXF.mhnxs.cn
http://P8X3Aw0h.mhnxs.cn
http://QvUdNVBp.mhnxs.cn
http://A8vzqhh4.mhnxs.cn
http://OCoVyKiA.mhnxs.cn
http://67t6vhMz.mhnxs.cn
http://CronH4pi.mhnxs.cn
http://f4ccj66B.mhnxs.cn
http://4rLsZjiS.mhnxs.cn
http://DC4yeVf5.mhnxs.cn
http://HK1okBvf.mhnxs.cn
http://CcD083JB.mhnxs.cn
http://0LzMUbRg.mhnxs.cn
http://www.dtcms.com/a/127915.html

相关文章:

  • 操作系统之进程同步
  • python的flask框架连接数据库
  • 区块链从专家到小白
  • GAS:车载体验的智能革新力量
  • Rag实现流程
  • 软件界面设计:打造用户喜爱的交互体验
  • 新版雷电模拟器过应用检测技术详解
  • leetcode 264. Ugly Number II
  • ReactNative 使用腾讯的MMKV持久化存储
  • 深入浅出:信号灯与系统V信号灯的实现与应用
  • 区块链点燃游戏行业新未来——技术变革与实践指南
  • 【Linux网络与网络编程】08.传输层协议 UDP
  • 互联网三高-数据库高并发之分库分表
  • PostgreSQL 的统计信息
  • 0x02.Redis 集群的实现原理是什么?
  • 80_Pandas如何使用NumPy的函数等(pd.np)
  • 【图像生成之21】融合了Transformer与Diffusion,Meta新作Transfusion实现图像与语言大一统
  • Hadoop文件操作指南:深入解析文件操作
  • 北洋底标印记纪年
  • TDengine 可靠性保障:数据持久化与容灾备份(二)
  • ZYNQ笔记(六):自定义IP核-LED呼吸灯
  • [特殊字符] 第十二讲 | 地统计学基础与克里金插值法(Kriging)建模实践
  • JavaScript异常机制与严格模式
  • 源码编译 Galera、MySQL 5.7 Wsrep 和安装 MySQL 5.7 Galera集群
  • JavaScript数组方法:`some()`的全面解析与应用
  • 简单使用linux
  • 论文精度:基于LVNet的高效混合架构:多帧红外小目标检测新突破
  • python推箱子游戏
  • Linux进阶命令
  • Linux 进程内存监控:Linux 内存调优之进程内存深度监控