.gen 文件定义

`.gen` 是 GenePad / Gene Editor 的完整项目文件,文件本质是 SQLite 3 数据库。 它比 `.gjson` 更完整,适合保存工程状态、测序图谱、比对条目、撤销历史和附件。

SQLite format 3 1-based inclusive BLOCK_SIZE = 10000 SCHEMA_VERSION = 5

Overview

读取原则

  • 无需自定义二进制 parser——用任意 SQLite 驱动打开 `.gen`,再按下方表结构查询。
  • `sequence_blocks` 需按 `block_index` 升序拼接,不能依赖数据库默认返回顺序。
  • `segments`、`qualifiers`、`components`、`alignment`、`references` 等字段是 JSON 字符串,需延迟解析。
  • `.gen` 不持久化 `restrictionSites`,通常由读取程序根据主序列重新检测。

Schema

核心表结构

project_meta项目元信息 key-value 表
字段类型说明
keyTEXT PRIMARY KEY元信息键
valueTEXT元信息值,布尔值也以字符串保存

布尔值以字符串 'true'/'false' 保存;未设置时键可能缺失(读为 undefined)。已知 key:name, description, isCircular, isDoubleStranded, isDamMethylated, isDcmMethylated, accession, organism, date, moleculeType, division, version, keywords, source, comments, references(JSON 数组字符串), typeOfDisplay, customName, fileName, isDirty。拓扑由 isCircular 表示,无独立 topology 列。

sequence_blocks主序列分块
字段类型说明
block_indexINTEGER PRIMARY KEY0-based block index
basesTEXT NOT NULL该块碱基字符串,通常最多 10,000 bases
SELECT bases FROM sequence_blocks ORDER BY block_index;

分块规则:每块 BLOCK_SIZE = 10000 bp。block_index = floor(position / 10000),即块 0 存 0–9999,块 1 存 10000–19999。block_index 本身是 0-based(与下方 feature 的 1-based 坐标不同)。无 start_pos 列,起始位置 = block_index × 10000。写入时全删全写(非增量更新)。

features序列注释
字段类型说明
idTEXT PRIMARY KEYfeature id
nameTEXT NOT NULLfeature 名称
typeTEXT NOT NULL如 gene, CDS, promoter
start_posINTEGER NOT NULL1-based inclusive start
end_posINTEGER NOT NULL1-based inclusive end
strandTEXT NOT NULLforward, reverse, none
colorTEXT颜色
labelTEXT显示标签
noteTEXT备注
frameINTEGER阅读框
visibleINTEGER DEFAULT 11 可见,0 隐藏
segmentsTEXTJSON:FeatureSegment[],多片段 feature 使用
qualifiersTEXTJSON:Record<string, string[]>
primers / primer_binding_sites引物与结合位点
关键字段说明
primersid, name, sequence, description, visible引物基本信息
primer_binding_sitesprimer_id, start_pos, end_pos, bound_strand, components, alignment结合位点;components / alignment 为 JSON
base_color_ranges碱基颜色范围
字段类型说明
idTEXT PRIMARY KEY颜色段 id
start_posINTEGER NOT NULL1-based inclusive start
end_posINTEGER NOT NULL1-based inclusive end
strandTEXT NOT NULLforward 或 reverse
colorTEXT NOT NULL颜色值
alignment_entries / chromatogram_data比对与测序图谱
关键字段说明
alignment_entriesid, name, sequence, visible, chromatogram_json比对条目;chromatogram_json 为 JSON
chromatogram_datatrace_a, trace_c, trace_g, trace_t, peak_locations主序列 chromatogram;BLOB 中保存 JSON 数组 bytes
attachments / undo_entries / edit_history工程状态
说明
attachments附件:id, name, mime_type, data
undo_entries撤销/重做栈(stack_typeundo/redo);undo 栈上限 200 条,超出删最旧;before_diff / after_diff 为 JSON
edit_history编辑审计日志,before_snapshot / after_snapshot 为 JSON

Mapping

与内存模型的对应

DNASequence 字段.gen 来源备注
sequencesequence_blocks按 block_index 拼接
featuresfeaturessegments / qualifiers 需要 JSON 解析
primersprimers + primer_binding_sites按 primer_id 关联
baseColorRangesbase_color_rangesstrand 仅 forward / reverse
alignmentEntriesalignment_entrieschromatogram_json 可选
chromatogramchromatogram_dataid 固定为 primary
accession, organism, date...project_meta全部为字符串值

Conventions

坐标与环形序列

feature / primer / base_color_ranges 的 start_pos / end_pos 均为 1-based inclusive。例如 start=1, end=10 表示第 1 到第 10 个碱基(共 10 个)。

环形序列跨越原点时 start > end:长度 = seqLength - start + end + 1(从 start 走到序列末尾,再从 1 绕回到 end)。多段 feature 还可用 segments JSON 数组,每段独立 {start, end, strand?, name?, color?}

注意:sequence_blocks.block_index 是 0-based,与上述 1-based 特征坐标是两套体系。

Quick Look

用 sqlite3 打开看一眼

# 打开 .gen(本质就是 SQLite)
sqlite3 example.gen

# 列出所有表
.tables

# 读取项目名 / 拓扑
SELECT key, value FROM project_meta WHERE key IN ('name','isCircular');

# 拼接完整序列(注意按 block_index 排序)
SELECT group_concat(bases, '') FROM (SELECT bases FROM sequence_blocks ORDER BY block_index);

# 查看前几个 feature
SELECT name, type, start_pos, end_pos, strand FROM features LIMIT 5;