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

AF3 create_alignment_db_sharded脚本create_shard函数解读

AlphaFold3 create_alignment_db_sharded 脚本在源代码的scripts/alignment_db_scripts文件夹下。 该脚本中的 create_shard 函数的功能是将一部分链(shard_files)中的所有对齐文件写入一个 .db 文件,并返回这些链的索引信息(字节偏移+长度+文件名)供上层构建 super index。

源代码:

def create_shard(shard_files: list[Path], output_dir: Path, output_name: str, shard_num: int
) -> dict:"""Creates a single shard of the alignment database, and returns thecorresponding indices for the super index."""CHUNK_SIZE = 200shard_index = defaultdict(create_index_default_dict)  # e.g. {chain_name: {db: str, files: [(file_name, db_offset, file_length)]}, ...}chunk_iter = chunked_iterator(shard_files, CHUNK_SIZE)pbar_desc = f"Shard {shard_num}"output_path = output_dir / f"{output_name}_{shard_num}.db"db_offset = 0db_file = open(output_path, "wb")for files_chunk in tqdm(chunk_iter,total=ceil(len(shard_files) / CHUNK_SIZE),desc=pbar_desc,position=shard_num,leave=False,):# get processed files for one chunkchunk_data = process_chunk(files_chunk)# write to db and store info in indexfor chain_name, file_data in chunk_data.items():shard_index[chain_name]["db"] = output_path.namefor file_name, file_bytes in file_data:file_length = len(file_bytes)shard_index[chain_name]["files"].append((file_name, db_offset, file_length))db_file.write(file_bytes)db_offset += file_lengthdb_file.close()return shard_index

代码解读:

函数签名
def create_shard(shard_files: list[Path],         # 当前 shard 负责处理的链目录列表output_dir: Path,                # 输出 .db 文件的目录output_name: str,                # .db 文件名前缀(如 "alignment")shard_num: int                   # 当前 shard 的编号(用于命名)
) -> dict:                           # 返回:当前 shard 的 index 字典
初始化
CHUNK_SIZE = 200
shard_index = defaultdict(create_index_default_dict)
chunk_iter = chunked_iterator(shard_files, CHUNK_SIZE)
output_path = output_dir / f"{output_name}_{shard_num}.db"
db_offset = 0
db_file = open(output_path, "wb")
  • CHUNK_SIZE = 200:每次并发处理 200 个链目录,避免线程开销过大

  • shard_index:保存当前 shard 中的所有链名对应的索引信息

  • output_path:构造 .db 文件的路径,如 alignment_0.db

  • db_offset:记录当前 .db 文件的写入偏移位置(以字节为单位)

shard_index = defaultdict(create_index_default_dict)

这里你传入的是一个函数名 create_index_default_dict而不是函数调用结果(也就是不加 ())!

意图:

让 defaultdict 在访问一个不存在的 key 时,调用该函数来生成默认值。

说明
defaultdict(<function>)不是调用函数,而是传入一个函数对象
每次访问不存在的 key会自动执行 function(),作为该 key 的默认值
适合嵌套结构如 dict[str → dict[str, list]]
主循环:分批读取 + 写入
for files_chunk in tqdm(chunk_iter, ...):chunk_data = process_chunk(files_chunk)

调用 process_chunk():多线程读取这 200 个链目录下的所有文件,得到结构:

chunk_data = {"1abc_A": [("file1.a3m", b"..."), ("file2.sto", b"...")],"2xyz_B": [("file1.a3m", b"...")]
}
写入 .db 文件 + 更新索引
for chain_name, file_data in chunk_data.items():shard_index[chain_name]["db"] = output_path.namefor file_name, file_bytes in file_data:file_length = len(file_bytes)shard_index[chain_name]["files"].append((file_name, db_offset, file_length))db_file.write(file_bytes)db_offset += file_length

对于每个链:

  • shard_index[chain_name]["db"] 记录它在哪个 .db 文件中

  • 每个对齐文件都写入 .db 文件,顺序写入

  • 记录每个文件的 (file_name, 起始字节位置, 文件长度)

  • 更新 db_offset 以便下一个文件写入时知道正确的起点

完成处理后关闭文件并返回索引
db_file.close()
return shard_index

这个 shard_index 是供上层 super_index.update(shard_index) 使用的,格式类似:

{"1abc_A": {"db": "alignment_0.db","files": [["file1.a3m", 0, 1024],["file2.sto", 1024, 512]]}
}
总结:函数作用图解
[shard_files: list of chain dirs]↓
[chunked (200 chains at a time)]↓
[每个 chunk -> 并发读取 (ThreadPoolExecutor)]↓
[每个文件的字节数据 -> 顺序写入到 .db 文件]↓
[记录 offset 和长度 → shard_index 字典]↓
[返回 shard_index 字典]

函数特点与优势

特点优势
Chunk 处理降低内存和线程并发压力
多线程读取加快文件加载速度
顺序写入.db 文件结构简单,适合大规模读取
索引记录精确每个链的每个文件都有 offset,方便快速查找
与 ProcessPoolExecutor 配合使用多个 shard 并行构建,CPU 利用率高

相关文章:

AF3 create_alignment_db_sharded脚本create_shard函数解读

AlphaFold3 create_alignment_db_sharded 脚本在源代码的scripts/alignment_db_scripts文件夹下。 该脚本中的 create_shard 函数的功能是将一部分链&#xff08;shard_files&#xff09;中的所有对齐文件写入一个 .db 文件&#xff0c;并返回这些链的索引信息&#xff08;字节…...

【Python语言基础】21、Python标准库

文章目录 1. 标准库1.1 标准库构成及特点1.2 常见分类和模块1.3 标准库使用 1. 标准库 Python 标准库就像是 Python 自带的 “百宝箱”&#xff0c;里面装了各种各样已经写好的工具&#xff0c;你在编程的时候可以直接拿来用&#xff0c;不用自己再费劲去编写。 什么是标准库 …...

数据库脱裤

假设你已经getshell 找到mysql账号密码。 网站要连接mysql&#xff0c;就需要把mysql的账号密码保存在一个php文件中&#xff0c;类似config.php、common.inc.php等&#xff0c;在shell中&#xff0c;读取这些文件&#xff0c;找到其中信息即可 下面是一些常见平台的配置文…...

信刻电子档案蓝光光盘刻录安全检测长期归档

信刻一直致力于为档案馆、各行业档案部门&#xff0c;提供跨网数据交换、电子档案数据磁光异质备份归档解决方案。所研制的电子档案光盘智能长期归档系统&#xff0c;满足国产环境下”刻、管、存、检、用”全生命周期管理应用需求&#xff0c;能够提供一份离线归档、一份近线存…...

vue3中,element-plus中el-input的v-model和value的用法示例

el-input的v-model&#xff0c;邦定响应式变量 <el-col :span"6"><el-form-item label"检验类别" prop"verifyType"><el-input v-model"applyAllInfo.applyBasicInfo.verifyTypeName" readonly /></el-form-item…...

文章记单词 | 第33篇(六级)

一&#xff0c;单词释义 poison [ˈpɔɪzn] n. 毒药&#xff1b;毒物&#xff1b;有害的思想&#xff08;或心情等&#xff09;&#xff1b;vt. 毒死&#xff1b;毒害&#xff1b;下毒&#xff1b;在… 中放毒&#xff1b;污染&#xff1b;adj. 有毒的justification [ˌdʒʌ…...

深度学习算法:从基础到实践

简介 深度学习作为人工智能领域的一个重要分支&#xff0c;近年来在多个领域取得了显著的成就。本文将从基础概念出发&#xff0c;探讨深度学习算法的核心原理&#xff0c;并介绍一些实际应用案例。 深度学习算法的核心概念 深度学习算法基于人工神经网络&#xff0c;通过构…...

L2-052 吉利矩阵分

L2-052 吉利矩阵 - 团体程序设计天梯赛-练习集 所有元素为非负整数&#xff0c;且各行各列的元素和都等于 7 的 33 方阵称为“吉利矩阵”&#xff0c;因为这样的矩阵一共有 666 种。 本题就请你统计一下&#xff0c;把 7 换成任何一个 [2,9] 区间内的正整数 L&#xff0c;把矩…...

计算机网络中各种物理量的单位总结

在计算机网络中&#xff0c;数据速率的单位容易混淆&#xff0c;以下是清晰总结&#xff1a; 一、基本单位区分 比特&#xff08;bit&#xff09;与字节&#xff08;Byte&#xff09; 小写 b 表示 比特&#xff08;bit&#xff09;&#xff0c;是数据传输的基本单位。 大写 B…...

Solidity私有函数和私有变量区别,私有变量可以被访问吗

web3面试题 私有函数和私有变量区别&#xff0c;私有变量可以被访问吗 ChatGPT said: 在 Web3 开发&#xff0c;尤其是使用 Solidity 编写智能合约时&#xff0c;关于私有函数和私有变量的区别是常见的面试题。下面是详细解析&#xff1a; ✅ 私有函数&#xff08;Private Fu…...

解决JSON格式数据大小写问题,以及@JsonProperty 和@JSONField序列化的区别

1、JsonProperty注解方式 JsonProperty注解是annotation包下的一个注解&#xff0c;可以通过value属性定义注解修饰的属性名称&#xff0c;如果你用的是JsonProperty注解&#xff0c;那么你千万不要用JSONObject.toJSONString(实体)去转json&#xff0c;可能很多人在这里就蒙蔽…...

Python正则表达式有哪些常用匹配字符?

处理文本数据时&#xff0c;我们经常需要查找、提取或替换特定模式的字符串。这时候正则表达式就成了程序员最强大的武器之一。今天我们就来详细聊聊Python中那些最常用的正则表达式字符和它们的实际用法。 为什么要学正则表达式&#xff1f; 假设你遇到这些场景&#xff1a;…...

List、Set集合通过Stream流求和

目录 一、泛型为Integer、Long、Double、BigDecimal求和 二、泛型为实体类 对单个属性求和 对多个属性分别分组求和 并返回聚合后的对象 多字段乘积求和&#xff08;基本数据类型&#xff09; 多字段乘积求和&#xff08;BigDecimal&#xff09; 对对象中的多个字段求和…...

Linux:Makefile

编译器gcc 使用方式&#xff1a;gcc [ 选项 ] 要编译的⽂件 [ 选项 ] [ ⽬标⽂件 ] 编译分为以下几个步骤&#xff1a; 1.预处理(进⾏宏替换) 预处理功能主要包括宏定义,⽂件包含,条件编译,去注释等。 预处理指令是以#号开头的代码⾏。 实例: gcc –E hello.c –o hello…...

基于双闭环PID控制器的永磁同步电机控制系统匝间故障Simulink仿真

欢迎微♥关注“电击小子程高兴的MATLAB小屋”获取巨额优惠 1.模型简介 本仿真模型基于MATLAB/Simulink&#xff08;版本MATLAB 2013Rb&#xff09;软件。建议采用matlab2013 Rb及以上版本打开。&#xff08;若需要其他版本可联系代为转换&#xff0c;高于该版本的matlab均可正…...

硬件电路设计之51单片机(2)

声明&#xff1a;绘制原理图和PCB的软件为嘉立创EDA。根据B站尚硅谷嵌入式之原理图&PCB设计教程学习所作个人用笔记。 目录 一、原理图详解 1、TypeC接口 &#xff08;1&#xff09;TypeC接口介绍 &#xff08;2&#xff09;TypeC原理图 2、5V转3.3V 3、单片机电源开…...

从零开始学习PX4源码20(遥控器模式切换如何执行)

目录 文章目录 目录摘要1.用到的消息和主题2.遥控器切换模式代码流程摘要 本节主要学习PX4的手动遥控器切换模式,具体是如何实现的,具体改变了哪些变量,和模式管理有什么联系。 1.用到的消息和主题 1.行为请求消息:ActionRequest.msg ///时间信息 uint64 timestamp # t…...

SpringAI+DeepSeek大模型应用开发——1 AI概述

AI领域常用词汇 LLM&#xff08;LargeLanguage Model&#xff0c;大语言模型&#xff09; 能理解和生成自然语言的巨型AI模型&#xff0c;通过海量文本训练。例子&#xff1a;GPT-4、Claude、DeepSeek、文心一言、通义干问。 G&#xff08;Generative&#xff09;生成式: 根据上…...

经济指标学习(一)

系列文章目录 文章目录 系列文章目录1、市净率**一、定义与计算****二、核心意义****三、应用场景****四、局限性****五、分类与衍生指标****总结** 2、市销率**一、定义与计算****二、核心意义****三、优缺点分析****四、适用场景****五、与其他指标的对比****六、实际应用案例…...

理解 results = model(source, stream=True) 的工作原理和优势

1. 核心概念解析 (1) streamTrue 的作用 生成器模式&#xff1a;当处理视频或图像序列时&#xff0c;streamTrue 会将结果包装成一个 生成器&#xff08;Generator&#xff09;&#xff0c;逐帧生成 Results 对象&#xff0c;而不是一次性返回所有结果。内存优化&#xff1a;…...

国内互联网大厂推出的分布式数据库 的详细对比,涵盖架构、性能、适用场景、核心技术等维度

以下是 国内互联网大厂推出的分布式数据库 的详细对比&#xff0c;涵盖架构、性能、适用场景、核心技术等维度&#xff1a; 一、主流分布式数据库列表 大厂数据库名称类型适用场景发布时间腾讯云TDSQL分布式HTAP金融、电商、游戏、政企2010年阿里云OceanBase分布式HTAP银行核…...

解释`new`关键字的执行过程,并手动实现一个`myNew`函数。

在 JavaScript 中&#xff0c;new 关键字用于创建一个用户定义的对象实例。它的执行过程分为以下步骤&#xff1a; new 关键字的执行过程 创建空对象&#xff1a; 创建一个新的空对象&#xff0c;其 [[Prototype]]&#xff08;即 __proto__&#xff09;指向构造函数的 prototy…...

Android 项目配置文件解释

Android 项目配置文件解释 目录 Android 项目配置文件解释1. `plugins` 块2. `android` 块3. `dependencies` 块为什么需要 JDK 和 Kotlin1. plugins 块 plugins {id com.android.applicationid org.jetbrains.kotlin.android }id com.android.application:应用 Android 应用…...

亚马逊热销变维权?5步搭建跨境产品的安全防火墙

“产品热卖&#xff0c;引来维权”——这已经悄然成为越来越多跨境卖家的“热销烦恼”。曾经拼品拼量&#xff0c;如今却要步步谨慎。商标侵权、专利投诉、图片盗用……这些问题一旦发生&#xff0c;轻则下架、账号被限&#xff0c;重则冻结资金甚至封店。 别让“热销”变“受…...

C语言——分支语句

在现实生活中&#xff0c;我们经常会遇到作出选择和判断的时候&#xff0c;在C语言中也同样要面临作出选择和判断的时候&#xff0c;所以今天&#xff0c;就让我们一起来了解一下&#xff0c;C语言是如何作出选择判断的。 目录 1.何为语句&#xff1f; 2.if语句 2.1 if语句的…...

绿盟二面面试题

5000篇网安资料库https://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247486065&idx2&snb30ade8200e842743339d428f414475e&chksmc0e4732df793fa3bf39a6eab17cc0ed0fca5f0e4c979ce64bd112762def9ee7cf0112a7e76af&scene21#wechat_redirect 1. 原理深度&…...

deepseek生成流程图

目录 Mermaid流程图需求询问框架交互显示流程图markdown在线网站 可能会出现的问题语法报错 在职场中&#xff0c;借助AI生成图表是提升效率的重要技能&#xff0c;本篇我们讲解如何使用deepseek生成流程图 Mermaid流程图 需求 学习太差劲了&#xff0c;我想要一个比较好的学…...

界面控件DevExpress WPF v25.1新功能预览 - 文档处理类功能升级

DevExpress WPF拥有120个控件和库&#xff0c;将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress WPF能创建有着强大互动功能的XAML基础应用程序&#xff0c;这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。 无论是Office办公软件…...

大塔集团乔迁开新局 企业赋能贯全程

2025年4月15 日&#xff0c;在佛山市佛山大道北175号&#xff0c;大塔集团乔迁开业盛大启幕&#xff0c;业界目光聚焦于此。 点睛仪式 揭牌仪式 彩绸飘扬、嘉宾云集&#xff0c;现场气氛热烈非凡&#xff0c;这一标志性时刻&#xff0c;宣告着大塔集团正式踏上全新发展征程。 …...

新闻业务--草稿箱

本人之前写的侧边栏渲染有点问题&#xff0c;超级管理员和其他的不兼容&#xff0c;所以修改了一下SideMenu&#xff1a; import React, { useState, useEffect } fromreact; import { Layout, Menu } from antd; import { useNavigate } fromreact-router-dom; import axios …...