赶尾人一站式建树工具使用说明书
做一棵系统发育树,标准流程是「多序列比对 → 比对修剪 → 最大似然建树」三步,对应 MAFFT、trimAl、IQ-TREE 三套命令行软件。本页把这三步串成一条流水线:把测序文件拖进浏览器,点按钮(或一次「一键执行」),全部在服务器上跑完,结果直接在页面底部画出系统发育树 —— 不需要装软件,也不需要写命令。
1这个页面解决什么问题
- 痛点:一套建树环境(MAFFT + trimAl + IQ-TREE)装下来动辄几百 MB,命令参数也各有各的写法;把三条命令手动串起来、还要在不同软件间倒文件,是菌物鉴定里最耗时的一环。
- 本页的做法:上传序列 → 对齐 → 裁切 → 建树,四步都在同一个页面里完成。每一步的中间结果(对齐后的峰图、裁切区、建出的树)都直接画在页面上,可看、可改、可下载。
- 支持的数据:
.ab1(带四通道峰图,可目视判断质量、可手动裁切)、.seq/.fasta/.fa(纯文本序列);也可以直接填 GenBank Accession ID 从 NCBI 拉取,或用 Excel / CSV 批量导入多位点(一个位点一列,导入后自动建标签页)。 - 多片段:ITS、tef1、rpb2… 不同片段各自放一个标签页(标签页名就是片段名,默认按
its → lsu → tef1 → rpb1 → rpb2依次命名),独立跑流水线;建树时后端会把各片段拼成一条矩阵,并按自动生成的 NEXUS 分区文件让每个片段各用一套替换模型,一棵树同时用上全部片段(见第 7 节)。
2界面元素一览
页面右侧是一条固定的浮动操作栏,左侧是序列展示区。自上而下(绿色 = 常规的左键操作,红色 = 容易被忽略的隐藏入口):
操作栏的真实排布(配色一致,尺寸为示意)。
「一键执行」是窄长竖排按钮,三段渐变依次对应右侧三键;
「手机版右键」只在窄屏出现。
| 元素 | 作用 |
|---|---|
| + 加载序列 |
左键=打开系统文件选择器,一次可多选 .ab1 / .abi / .seq / .fasta / .fa,也可以直接选表格(.xlsx / .xls / .csv / .tsv —— 一个位点一列,导入后按列自动建标签页);还可以把文件拖拽到按钮上。右键 / 长按=打开「加载序列」窗口,三种来源任选:从 GenBank 获取(填 Accession ID,英文逗号分隔)、从 Excel 表批量导入(多位点,一个位点一列,导入后按列自动建标签页;格子里既可以填登录号,也可以直接贴序列)、手动填入序列(直接粘贴序列,可另起一个序列名)。 从「Nucleotide 检索」页点「去建树」跳转过来时,本窗口会自动打开并预填好 accession。 对齐之后本按钮禁用(变灰,提示「已对齐,无法加载新序列」)—— 已对齐的数据不应再插入新序列,否则比对失去意义。 |
| 一键执行 | 依次执行 对齐 → 裁切 → 建树,任一步失败即停止。它自己不动,只是把右侧三键按顺序替你点一遍 —— 按钮上自上而下的三段颜色(紫 / 橙 / 绿)就是按三键的顺序排的,不是进度条。已经对齐之后本按钮失效(变灰、提示「已对齐,一键执行已失效」),因为后两步要基于当前的对齐状态走,此时请直接点后面三个按钮。 |
| 🔗 Mafft对齐 | 左键=按上次的参数直接执行;右键 / 长按=打开「🔗 MAFFT 对齐参数」窗口,改完再执行。对齐之后本按钮变灰禁用(已对齐的数据不再重复对齐)。 |
| ✂️ trimAl裁切 | 左键=按上次的参数直接执行;右键 / 长按=打开「✂️ 裁切参数」窗口,窗口里比另两个多一个「手动裁剪」按钮,用于在峰图上自己框选要裁掉的列(见第 5 节)。必须先对齐才能裁切。 执行过裁切之后,按钮文字会变成「✂️ 手动裁切」,并自动进入手动裁剪模式,方便你接着微调裁切范围;此时它不再响应右键参数。 |
| 🌳 iqtree建树 | 左键=按当前的自动分区配置直接执行;右键 / 长按=打开「🌳 建树配置」窗口,里面可以改 IQ-TREE 命令、也可以直接编辑自动生成的 NEXUS 分区文件,还有一个「↺ 恢复默认 nex 与命令」把两者一起回退(见第 7 节)。结果在页面底部画出系统发育树。必须先对齐才能建树。 |
| 🧰 工具箱 | 恢复状态(三档回滚) / 去 GenBank 拿序列 / BLAST 并拿序列 / 拖动排序 / 修改碱基 / 寻找下一处问题 / 导出合并FASTA(见第 8 节;紧凑视图已挪到标签页最左边的「样式」下拉里)。进入拖动排序或修改碱基模式时,本按钮会变红并改文案为「✓ 完成拖动 / ✓ 完成修改」,再点一次退出。 |
| 手机版右键 | 手机 / 平板上没有鼠标右键,点它弹出同样的菜单(等价于在按钮上 右键 / 长按)。桌面宽度下不显示,窄屏(≤768px)才出现。 |
| 已对齐(灰) | 禁用态示意。执行过对齐之后,「+ 加载序列」「🔗 Mafft对齐」「一键执行」会一起褪成这个灰并不可点(页面上的文字仍是白色,底色变为浅灰),鼠标悬停会给出原因提示。 |
| 标签页栏(页面上沿) | 一页一组序列。不同片段放不同标签页,建树时按标签页顺序合并成多分区矩阵(每个标签页 = 一个分区)。 最左边是「样式」下拉:峰图 / 紧凑 / 表格 三种看法,只改"怎么摆"、不动数据(见第 4 节)。 标签页名 = 片段名,它会同时充当三样东西:上传给分析工具的文件名( its.fasta)、NEXUS 分区文件里的分区名、以及用哪套分区模型的依据。所以名字只允许「字母开头,后跟字母 / 数字 / 下划线 / 点 / 短横」(最多 32 位)——空格、逗号、中文会直接写坏命令与分区文件。新建标签页时按 its → lsu → tef1 → rpb1 → rpb2 的顺序自动取下一个还没被占用的名字;双击标签页(或第 6 个之后新建时自动弹出)打开命名菜单,里面是这五个预设按钮加一个自定义输入框。不允许重名(大小写也不区分: its 与 ITS 视为同一个名字)。 |
| 序列区块 | 每条序列一块:左上角是标本名输入框(可改,该名字就是树上的叶名),右上角是删除按钮,下方便是峰图 / 碱基行(见第 4 节)。 |
| 底部图例 + 按钮 | 图例:对齐插入的空位(黄色虚线框)、裁切掉的区域(灰色块);右侧「💾 导出合并FASTA」把当前标签页全部序列导成一个 FASTA 文件(表格样式下则是导出 xlsx / 单片段)。 上方还有一行统计:总序列数 / 平均碱基数 / 文件类型「峰图N/纯序列N」(峰图 = .ab1,纯序列 = .seq / .fasta / GenBank 下载)。序列的删除改为在每条序列右上角点 ×(表格样式里是格子上的 ×)。 |
同理,紧凑视图(工具箱 ②)也按行做同样的处理;只是它按行裁,滚到哪儿补到哪儿。
3四步流程
- 1上传:点「+ 加载序列」选择文件(或直接拖入页面)。建树至少要 4 条序列,且应当是同源片段(例如都是同一条 ITS 引物扩出来的)。
- 2对齐:点「🔗 Mafft对齐」。服务器跑 MAFFT,把长短不一的序列按同源位点排好,不足处在峰图上补出黄色虚线框的插入空位。
- 3裁切:点「✂️ trimAl裁切」。自动识别因比对而变得不可靠的列(大片空位、两端乱序区),把它们灰化——灰块覆盖的列不参与建树。
- 4建树:点「🌳 iqtree建树」。IQ-TREE 做最大似然建树 + UFBoot 自举检验,完成后页面底部直接画出系统发育树。
(第 2 至第 4 步也可以合并成一次「一键执行」。)三个执行按钮都还能 右键 / 长按 打开参数窗口,改完参数再跑,详见第 7 节。
- 对齐之后:「+ 加载序列」「🔗 Mafft对齐」「一键执行」三个按钮一起变灰 —— 比对已经定型,不应再插入序列或重复对齐。
- 裁切之后:「✂️ trimAl裁切」变成「✂️ 手动裁切」,方便继续微调。
- 想重来:工具箱 →「↺ 恢复状态」,按需要选一档回滚(想连「修改碱基」一起撤销就选「回滚至刚上传」),三个按钮随即恢复可用。
4看懂「序列区块」
每个序列区块就是把一条测序读长摊开画出来。下面是同一条序列在加载后、与对齐后的样子(取同一段,便于对比)。
- 1四通道荧光曲线:G 黑、A 绿、T 红、C 蓝。纵轴为荧光强度,量程按四通道全局最大值动态缩放,保证所有峰顶都入画。
- 2整十位刻度线 + 顶部序号:每 10 个碱基一条灰线与序号,用于定位与报数。
- 3底部碱基行:机器判定出的碱基,字符颜色对应通道色,整行可连续复制。
(纯文本序列 .seq / .fasta 没有峰图数据,区块里只显示碱基行,没有四通道曲线。)
点「🔗 Mafft对齐」之后,同一段序列会变成:
- 1插入空位高亮框:MAFFT 为了让同源位点对齐而补进的位置。该位在本序列没有碱基(碱基行是黄色
-),但在别的序列上可能有——这正是「对齐」的含义。 - 2重新编号的对齐刻度:插入空位后,原有的「每 10 碱基」编号不再对得上,刻度会按对齐后的列号重算(图中同一段序列的刻度从 110/120… 顺移到 120/130…)。
- 3连续的插入空位会把后面的曲线整体推开:图中 140 刻度附近是一段连续空位,它右侧的峰形因此相对图 1 明显右移。 这样处理之后,曲线、碱基字符、刻度三者始终逐列对齐 —— 手动裁剪、修改碱基都依赖这个对齐关系。
- 黄色 ⚠ 本页同名:当前标签页内有两条序列的标本名相同 —— 建树时同名叶会更难区分,建议改名。
- 绿色 + 片段名:例如 + RPB2、TEF1 —— 意思是这条标本在那些片段里也存在(多片段测同一批标本时很常见,属正常提示;鼠标悬停会写「存在 RPB2、TEF1 片段」)。
- 黄绿并存时以黄色优先。序列增删、改名、标签页增删后徽章会自动重算。
- 按碱基步进:滚动位置会被吸附到碱基位上,连你正在拖的那一条也一样(不会停在"半格"),所以松手前后都不会出现某一行比别人偏半格的情况。
- 每跨一个碱基就重新对齐一次:一旦可视区正中最近的那个碱基变了,所有行立即(150ms 内)平滑挪到新位置,起止同步。
- 红色竖线「对齐位置」:拖动期间,只在你正在拖的那一条上画一条红线标出当前以哪一列为基准,松手后 0.5 秒淡出。
- 滚轮 / 触控板的小幅横向滚动同样有效:不足一个碱基宽的位移会先攒着,攒够了就跳到下一个碱基位(不会"原地打转")。
换个样式看:峰图 / 紧凑 / 表格
标签页最左边的「样式」下拉决定序列怎么摆。三种样式读的是同一份数据,增删改在任何一种样式里做,切回来都对得上 —— 区别只在"摆法"和"能做的操作"。
| 样式 | 什么时候用 | 能做什么 / 限制 |
|---|---|---|
| 峰图 默认 |
核对测序质量、手动裁剪、修改碱基 | 四通道峰 + 碱基行;横向滚动条在标签页内逐列同步,方便一行行比对。手动裁剪、修改碱基在这里做最稳(紧凑里也能做,表格里不行)。 |
| 紧凑 | 几十条一起看对齐结果、找空位与裁切列 | 一列一格碱基、整块随页面滚动(内部不出纵向滚动条);黄格 = 空位 -,灰格 = 裁掉的列。按住黄格就能把空位拖到别处(不用先开任何模式);开「✎ 修改碱基」后双击方块改碱基;进入「✂️ 手动裁切」后从碱基格起横拖若干列即裁 —— 都不用切回峰图。 |
| 表格 | 多片段对照、查缺补漏 | 行 = 标本、列 = 片段(表头就是片段名),缺的格子留空。可拖动换行 / 换列、拖列宽、点格子上的 × 删序列、表底「+ 新增标本」加行,还能导出 xlsx 或打包 zip。不能改碱基。 |
- 紧凑样式怎么读:顶部每 10 位一条竖线 + 序号,竖线画在第 10 个方块的右边界上、序号写在竖线左侧(对齐位置一眼能对上,不会读成第 9 位)。
- 紧凑里挪空位 / 改碱基 / 裁切:按住黄格(
-)左右拖动就能把空位挪到别的位置(任何模式下都能拖),拖动时会有一条橙色虚线指示落点、源格高亮,松手即落位(每次只动这一行,不影响其它行);开「✎ 修改碱基」后双击某个方块弹出 A/T/C/G/N 改碱基;进入「✂️ 手动裁切」后,从碱基格开始横拖即裁掉这一段列(只点一下不拖动不算裁切)。
三者按按下的位置分工:落在黄格上是挪空位,落在碱基上是裁切(没进手动裁切时不动),所以「修改碱基」和「手动裁切」同时开着也不打架 —— 不必为挪空位先退出裁切。 - 对齐 / 裁切之后视图会自动跟上:不用手动重切样式,重建发生在同一批数据上。
- 表格里的同名:同一标本在各片段里名字相同时会自动排到同一行;同一片段里重名的会另起一行并按红字提示。
- 到底统计了什么:统计行里的「文件类型 峰图N/纯序列N」—— 峰图 = 带峰图的
.ab1,纯序列 =.seq/.fasta/ 从 GenBank 下载的序列(二者在后续流程里完全等价)。
(这一步只影响"看"的方式,不参与计算:对齐、裁切、建树用的始终是同一批序列。)
5裁切:去掉不可靠的列
比对之后,两端和空位扎堆的区段会变得不可靠,直接拿去建树会引入噪声。trimAl 默认用 -automated1 自动判断,把这些列裁掉。
下面这张图取同一条序列的比对首端——那里裁切最集中、最容易看清:
- 1灰块(裁切掉的区域):这些列会被排除在建树数据之外。灰块常落在比对的首尾或中段 —— 那些位置上序列普遍缺失、信号杂乱,trimAl 会把它们整段判为不可靠。 灰块内若同时出现黄色虚线框,说明该列既是插入空位、又被裁掉 —— 两种标记可以叠加。
- 2保留下来的碱基行:灰块右侧的列才真正送进 IQ-TREE。裁剪按列判定,所以除了连续的大段灰块,也可能出现零星的单列灰块。 若灰块占比过高,说明这段数据的可比对区段偏短,可考虑换一段更长的读长,或改用「手动裁剪」自己界定保留区。
手动裁剪
自动裁切有时过于激进或过保守,此时可以自己框选,两种入口:
- 裁切之前:右键(长按)「✂️ trimAl裁切」→ 在参数窗口点「手动裁剪」;
- 自动裁切之后:按钮已自动变成「✂️ 手动裁切」,直接点它即可进入手动裁剪模式。
然后在峰图上按住鼠标横向拖出一个框,松手即把该区间标记为裁切区(同样显示为灰块)。被手动裁剪的列同样不参与建树,但依然占列位。
6看懂「系统发育树」
建树成功后,页面底部会出现「🌳 系统发育树」区块 —— 这就是 IQ-TREE 的产出,直接画在页面上,无需跳转。
「🌳 看树」页里同样有一层保底:载入大树时若发现叶距过密,会把面板里的「纵向拉伸 Expansion」自动拉到刚好够(滑块会跟着动),之后你仍然可以自己再调松或调紧。
- 1节点置信度:枝端节点上方的红色数字,即 UFBoot 自举支持值(0–100)。越接近 100 越可靠;低于 70 的分支在解读时应当谨慎。
- 2比例尺:树图下方的比例尺给出枝长的尺度(默认 0.07,即图上一段 0.07 遗传距离有多长)。短枝不会被强制撑长,读树时以数字与相对长短为准。
树上方的控制条从左到右是:先在树上点选节点 → 点 重定根(以选中节点所在枝的中点作根)或 旋转(左右反转选中节点的子树顺序),改坏了点 ↺ 还原定根 就整棵树回到刚载入时的结构(重定根 / 旋转 / 排序一起撤销);排序 是「复选框 + 下拉」一对控件 —— 勾上 按节点排序 才排序、后面下拉选「递增 / 递减」(按外部节点数即叶数排,默认勾上 + 递增,初始就已生效;取消勾选则按树文件里的原始顺序显示);横向缩放 用右侧的拖动条(最左 = 0.1×,中间 0 位 = 1× 原样,最右 = 4×,只改横向):往左把树体压窄、长枝的树也能一屏看全,往右拉宽后树图区下方会出现横向滚动条;最右是「🌲 去树查看器」,把当前树 POST 到树查看器页面(/viewTree),在功能完整的页面上继续分析。
名字很长时不会把树挤没:树体的宽度是按预设的名字长度算的,名字再长也只占右侧那一列; 画布会按真实名长自动加宽,比窗口宽时树图区底部出现横向滚动条,向右滚就能看全名字。 名字不长时画布与窗口同宽,不会出现滚动条。
这一块用的是与「树查看器」同一套 FigTree 引擎(viewtree_mini.js + 引擎的 figtree/ 解析·布局·渲染文件),但只保留了上表这几个功能;补间动画、撤销、极坐标/辐射布局、枝长变换、着色/高亮等都不在这里。
控制条上还有一个树文件下拉:一次建树会回传两份树,.treefile(最大似然树)与 .contree(一致树,由 1000 棵自举树合并而来)。下拉切换后,页面上画的树、以及「🔀 通过枝长重排序列」「🌲 去树查看器」「⬇ 下载 .treefile」「💾 下载本页」都会跟着换成选中的那一份,不会一个用 treefile、另一个用 contree。
命令里没带自举(-B)时不会产生 .contree,此时下拉只列出一项、不予显示。
| 按钮 | 作用 |
|---|---|
| 重定根 / 旋转 / 排序 | 树上方控制条里的「重定根」「旋转」两颗按钮 + 排序的「复选框 + 下拉」,都只影响显示:重定根(以选中节点所在枝的中点作根)、旋转(反转选中节点的子树顺序)、排序(勾上「按节点排序」后按外部节点数递增 / 递减,默认勾上 + 递增;取消勾选 = 树文件原始顺序)。点选节点用鼠标在树上单击,选中的节点会有浅蓝光晕。 |
| ↺ 还原定根 / 横向缩放拖动条 | 还原定根:整棵树回到刚载入时的结构(撤销本区块里做过的重定根 / 旋转 / 排序)。横向缩放:拖动条只改枝长的横向比例(最左 = 0.1×,把树体横向压窄到 1/10;中间 0 位 = 1× 适配原样;最右 = 4×),右侧实时显示当前倍数 —— 枝太长、一屏看不全时往左压窄,短枝太挤时往右拉宽看清(拉宽后树图区下方出现横向滚动条,向右滚即可)。 |
| 🌲 去树查看器 | 在新标签页打开「树查看器」(/viewTree),携带当前 Newick 与标题;在那里可以切布局、改枝长变换、导出 PNG/SVG/PDF 等。如果树图被编辑过(重定根 / 旋转 / 排序),会同时带上两份:文本框里是原始树文件,画板上是你编辑后的树;在看树页点「还原定根」可回到原始文件那棵树。 |
| 🔀 按节点顺序重排序列 | 按当前树上看到的顺序(自上而下)重排页面上所有标签页的序列区块,让页面顺序与树的显示顺序一致,方便逐条核对。 顺序包含你刚才做的排序 / 旋转 / 重定根 —— 在看树区把顺序调好,再点这个按钮即可。执行后页面顶部会提示「已按节点顺序重排 N 个标签页(共 M 条序列)」;树里找不到同名叶子的序列会保持原相对顺序排到末尾并另行提示。 |
| ⬇ 下载 .treefile | 下载 Newick 格式的树文本。下载的文件名与内容都跟随上面的树下拉(选 .contree 时就是 tree.contree)。 |
| 🖼 下载为 PNG 图片 | 把页内绘制的树导出成 PNG 图片,用于报告或插图。 |
| 💾 下载本页 | 把当前整页状态保存成一个自包含的 HTML 文件(含峰图与已绘制的树),双击即可离线打开、可分享。见第 9 节注意事项。 保存页里的树仍然是可交互的:看树引擎与两份树的原始数据都随页面一起存下来了,所以「重定根 / 旋转 / 还原定根 / 排序 / 横向缩放 / 切换 .treefile ↔ .contree / 下载 .treefile / 下载 PNG / 按节点顺序重排序列」在离线页里照常可用。保存页里不挂「🧰 工具箱」,也没有任何需要后台的按钮(加载 / 对齐 / 裁切 / 建树);「🌲 去树查看器」保留 —— 它只是把当前树提交给线上看树页,点一下就会在新标签页打开(需联网);页脚的「💾 导出合并FASTA」也照常可用(纯前端读页面里的序列再下载)。 |
-p partitions.nex = 按分区模型建树(每个片段一套模型,由分区文件决定);-B 1000 = 1000 次 UFBoot 自举,给出节点支持值;-alrt 1000 = 1000 次 SH-aLRT 检验,与 UFBoot 一起显示在节点上(形如 87/100);-T AUTO = 自动选择线程数。命令里故意不写
-m:一旦出现 -m MFP(哪怕不带 +MERGE),分区文件里写好的模型就会被 ModelFinder 全部覆盖,等于白写。模型完全由 partitions.nex 决定,见第 7 节。
7参数配置(右键 / 长按)
三个执行按钮都支持右键(手机上长按,或用「手机版右键」按钮)打开参数窗口。左键 = 按当前配置直接跑,右键 = 先改参数再跑。
参数窗口里显示的默认命令来自服务端配置,与真正会执行的命令同源,不会出现「窗口里显示一套、实际跑另一套」的漂移。
| 按钮 | 参数窗口标题 | 默认命令 |
|---|---|---|
| 🔗 Mafft对齐 | MAFFT 对齐参数 | --auto --adjustdirection in.fa |
| ✂️ trimAl裁切 | 裁切参数(另有「手动裁剪」按钮) | -in in.fa -automated1 -colnumbering |
| 🌳 iqtree建树 | 建树配置(另有 NEXUS 分区文件编辑框) | -s {fragments} -p partitions.nex -B 1000 -alrt 1000 -T AUTO --prefix out |
{fragments}(或写in.fa):代表本次全部片段的输入文件。后端会把它替换成各片段在本次运行文件夹里的真实路径,用英文逗号连起来(its.fasta,lsu.fasta,…)。partitions.nex:代表下面那个 NEXUS 分区文件。后端把它解析成本次运行文件夹里的真实路径,并自动补上-p。out:代表输出前缀。建树的全部产物由后端按此前缀落在本次运行文件夹里。- 命令里还允许直接写片段文件名(如
its.fasta),后端会把它解析成该片段在本次运行文件夹里的路径。 - 因此命令里必须包含输入文件(
{fragments}/in.fa/某个片段名.fasta三者任一)与out,否则点「确定并执行」会提示缺少输入 / out 并中止。
NEXUS 分区文件(多片段联合建树的关键)
建树窗口的下半部分是一个可以就地编辑的 NEXUS 分区文件,由页面按当前标签页自动生成,不需要你手写:
#nexus begin sets; charset its = its.fasta: 1-650; charset lsu = lsu.fasta: 1-1200; charpartition mine = GTR+F+G4:its, GTR+F+I+G4:lsu; end;
charset一行一个片段:名字 = 标签页名,后面的列区间由页面按该片段当前的实际列数自动算出来。charpartition给每个片段指定替换模型。模型按片段类型(标签页名)给默认值:its→GTR+F+G4、lsu→GTR+F+I+G4、tef1/rpb1/rpb2→GTR+F+G4;不在这五类里的名字统一用GTR+F+G4兜底。
这些都只是「该位点的常规选择」,不是普适真理。想更数据驱动,可以把模型改成MFP+MERGE并把命令里的-m加回来,让 ModelFinder 逐分区自己挑(两者只能选一个,见上)。- ⚠️
charpartition要覆盖每一个charset:漏掉的那个片段不会参与建树。页面生成时不会漏;你若手工删掉某个模型,记得自己补上。 - ⚠️ 列区间要与片段实际列数一致:后端在开跑前会做一次校验(各
charset列数之和必须等于比对总列数),不一致会直接报错并停下来,不会带着错误的分区继续跑。 - 「↺ 恢复默认 nex 与命令」按钮把命令与分区文件一起回退到「按当前标签页自动生成」的样子,改坏了点它即可。
partitions.nex 里的分区边界,每个片段各自用一套替换模型、各自估计一个速率乘子,枝条长度则共享 —— 这就是 -p(edge-linked proportional)的标准做法,也是多基因建树最常用的形态。想让每个片段各自建树、再比较(多基因一致性因子 gCF 那一套),那是另一条流程,本页暂未提供。
partitions.nex 决定:命令里再写 -m MFP(哪怕只是 -m MFP 而不带 +MERGE)会把分区文件里的模型全部覆盖,你精心写的 charpartition 就白写了。要么完全交给分区文件(默认,命令里不写 -m),要么把模型那一栏改成自动选、同时把 -m 加回命令里,二者不要混。
参数窗口里还可以勾选「🔗 所有标签页使用相同参数」(默认勾选):取消后可为每个标签页分别指定命令,适合各片段用不同参数的场景。建树是一次跑一棵树,所有片段共用同一条命令;「片段级差异化」真正的落点在分区文件里的模型,以及 Mafft / trimAl 这两步(那两步本来就是每个标签页一个参数框)。
--adjustdirection 会让 MAFFT 自动检测并反向互补方向不一致的序列。若发生了这种情况,页面会提示
「⚠️N 条序列已自动进行反向互补,裁切时需注意处理!」—— 这意味着该序列的首尾方向与其它序列相反,后续裁切(尤其手动裁剪)时要留意它对应的列位置。
8工具箱
点「🧰 工具箱」弹出七项辅助功能(视图样式不在工具箱里:它是标签页最左边的「样式」下拉,见第 4 节):
| 功能 | 说明 |
|---|---|
| ↺ 恢复状态 | 点开后弹出三档回滚选择框(每一项都有悬停说明),按需要把当前标签页退回某个节点: ↩ 回滚至刚上传 —— 回到刚加载 / 上传时的序列:清除对齐与裁切标记、清空已执行的命令,并一并撤销「修改碱基」的改动。 ↩ 回滚至对齐前 —— 撤销对齐与裁切,但保留「修改碱基」的改动。 ↩ 回滚至裁切前 —— 只撤销裁切标记,对齐结果与碱基修改都保留。 后两档之所以不回退碱基:「修改碱基」是改正测序错误的人工成果,回滚对齐 / 裁切只该动软件产生的标记,不该顺手把人工修正也抹掉。三档都会重渲染序列块(顺带清掉插入空位与灰块),保留序列排列与标本名;执行前会弹确认框。回滚到「刚上传 / 对齐前」后阶段回到 0,三个执行按钮恢复可用。 |
| 🧬 去 GenBank 拿序列 | 在本页上盖一层内嵌的 Nucleotide 检索页(工具页里的 iframe),检索、字段筛选、翻页都在里面完成。在结果表左侧打勾选中记录后,底部弹出两颗按钮:先加入笔记(把勾选行放进检索页的笔记表,可以接着搜别的关键词、最后一起带回)与直接带回建树(按勾选记录取 FASTA,直接变成序列块,立刻可以建树)。 只在「添加序列」阶段可用 —— 序列一旦对齐,列数与顺序都已确定,再插新序列会让对齐失效;过了这个阶段点它会给出提示,要加序列请先「恢复状态 → 回滚至刚上传」。 带回的序列与用「+ 加载序列」读入的完全等价:同样可以拆峰、手动裁切、改碱基、参与建树。序列只在取数那一刻经本站向 NCBI 请求一次(走全站节流),不会在服务器留存。 |
| 🔬 BLAST 并拿序列 | 把每条序列块左侧的删除按钮暂时变成蓝色 blast 按钮(与「拖动排序」「修改碱基」共用同一个位置,三者互斥);点它把该块的序列送进 BLAST 页比对,.ab1 还会连峰图一起带过去。比对完在结果表里勾选记录,就能把结果直接带回本页变成新的序列块 —— 本质上是"先用本地序列去 NCBI 找近缘种,再拉回来一起建树"。 与「🧬 去 GenBank 拿序列」的区别:后者是你先搜关键词再挑;前者是拿手上这条序列去比对,按相似度挑。 |
| ⇕ 拖动排序 | 把每条序列左侧的删除按钮暂时变成拖动把手,按住上下拖动即可调整序列顺序(松手即生效)。再次点工具箱可退出该模式。 |
| ✎ 修改碱基 | 进入碱基编辑模式:单个碱基可拖动换位、双击改字母或删除;在碱基行或峰图区的空白处双击即可新增,新碱基落在你双击的那个 x 上 —— 所以可以直接对着某个没被识别出来的峰补一个碱基。适合修掉明显的 basecall 错误。 两条边界:「-」空位不可修改,它是对齐留下的占位标记、不是碱基,双击只会提示你(要挪位置请拖动它或它的黄色方块);对齐之后不能再增删,双击空白会提示你先用「恢复状态 → 回滚至对齐前」退回未对齐状态(对齐后改字母、拖动仍然可用,以免破坏比对列数)。 |
| 🔍 寻找下一处问题 | 按序列块的顺序扫一遍当前标签页,把重名、长度异常、平均质量偏低等问题块挑出来,并在页底浮出一条「↑ 上一个 / 🔍 寻找下一处 / ×」的工具条,点一下跳到下一处、顺手就能改。没有问题时点它会直接告诉你"没找到",不会乱跳。 |
| 💾 导出合并FASTA | 把当前标签页的所有序列导出成一个 FASTA 文件(每条 >序列名 + 每 60 列换行)。读的是页面上真实的序列区块,所以对齐后的空位 - 会保留,被手动裁剪掉的列不计入。与页底的「💾 导出合并FASTA」是同一功能,放这里是为了不用滚到底。序列很多、部分块被懒加载收起时也不会导出空记录 —— 导出前会先把每块内容补回来再读。 |
「拖动排序」与「修改碱基」进行中时,工具箱按钮会变红并改文案为「点此完成」,再次点击即退出该模式。
9运行机制与常见问题
运行机制
- 服务器端执行:与「拆峰」页不同,本页会把序列上传到服务器,由服务器调用 MAFFT / trimAl / IQ-TREE 可执行文件;页面顶部会出现全屏遮罩显示当前进度,完成后关闭。
- 三个阶段、三次请求:对齐、裁切、建树各对应一个接口(
/api/mafft、/api/trim、/api/build),依次发出、串行等待。任一阶段失败会弹窗提示原因,且流水线不继续。
「一键执行」就是替你把这三次请求按顺序发一遍;单独点三个按钮时,第 2、3 步会把页面上的序列重新上传(这样你手工改过的碱基 / 拖过的空位才会生效),而「一键执行」中途不给你编辑的机会,所以第 2、3 步改为只带第 1 步落盘时返回的时间戳定位表到服务器取文件,不再重复上传序列。 - 运行文件夹:一次建树会在服务器上新建一个以时间戳命名的文件夹
seq-files/<时间戳>/,里面放各片段的输入文件(its.fasta、lsu.fasta…)、partitions.nex,以及 IQ-TREE 的全部产物。IQ-TREE 的全部产物都落在这里(页面只回传两棵树与 NEXUS 文本,其余文件留在服务器上)。 - 定时清理:服务器会定期清理
seq-files/下超过保留期的中间文件与运行文件夹(默认 24 小时)。要长期保存的产物请及时用 zip 下载或自行归档。 - 建树耗时与超时:单片段 + 1000 次自举在普通机器上就是分钟级;多片段、序列多、模型复杂时会明显更久。服务器端建树的超时上限已放宽到 30 分钟(可配置)。等待期间页面会一直显示遮罩,不会假死。
- 页内出图:建树返回的 Newick 文本由前端还原真实叶名后,直接在本页绘制(与「树查看器」同一套算法),不跳转、不嵌 iframe。
- 单文件自包含:本页(以及「看树」页)的所有样式与脚本都写在页面里,没有任何外部 js/css 链接 —— 所以「另存为 / 下载本页」得到的 HTML 换台电脑、断网双击也能完整打开,看树部分仍然可交互,不会出现"页面在、树没了"或空白样式。
- 命名还原:为规避命令行对特殊字符的限制,后端处理时会把长标本名替换成短代号,返回前端时再逐一还原 —— 所以页面上看到的叶名始终是你的标本名。
- 特殊字符与引号:标本名里若含空格、逗号、分号、括号、方括号、撇号、井号、下划线,写进 Newick 时会按规范用单引号把整个名字包起来,名字内部的撇号写成两个(
hawk's-eye→'hawk''s-eye')。这不是出错:不加引号时,这些字符会被解析器当成树的结构(逗号 = 分叉、括号 = 子树、空格 = 名字结束、方括号 = 注释、下划线 = 空格),名字会被截断甚至整棵树读不出来。页面上显示的叶名、下载的.treefile、送往树查看器的内容三者始终一致,都是你的原名。
常见问题
| 现象 | 说明 / 处理 |
|---|---|
| 点裁切或建树,提示「必须先进行对齐!」 | 这两步依赖比对结果。请先执行「🔗 Mafft对齐」,或改用「一键执行」。 |
| 序列没有峰图,只有一排碱基 | 该文件是纯文本序列(.seq/.fasta),本身不含四通道数据。只有 .ab1 才有峰图。 |
| 页面卡顿、滚动发涩 | 带峰图的序列太多。建议控制单次加载数量,或分标签页分批处理;纯文本序列负担小得多。 |
| 弹窗「建树失败: ……」 | 后端返回了具体原因(如序列数不足、比对矩阵异常、模型无法估计等)。请按提示调整数据或参数后重试。 |
| 「一键执行」点不动了 | 已经对齐过,该按钮按设计失效(避免在已对齐的状态上重复对齐)。请直接用后面三个按钮。 |
| 「+ 加载序列」按钮变灰、提示「已对齐,无法加载新序列」 | 同理:对齐之后不允许再插入序列(否则新旧序列没法逐列比对)。若确实要补序列,先用工具箱「↺ 恢复状态 → 回滚至对齐前」清空对齐状态(该档保留「修改碱基」的改动),重新加载后再统一对齐。 |
| 提示「N 条序列已自动进行反向互补」 | MAFFT 检测到这些序列方向相反并已自动纠正。若后续要手动裁剪,请注意该序列的列方向。 |
下载的 .treefile 里名字被单引号包着,是不是坏了? | 不是。名字里含空格 / 逗号 / 括号 / 撇号 / 下划线等字符时,按 Newick 规范必须用单引号包起来(名字里的撇号写成两个),否则这些字符会被当成分叉、子树或名字结束,整棵树会被读坏。IQ-TREE、FigTree、iTOL、BioPython 等都能正常读回原名。 |
| 标签页改名时提示「已有同名标签页」 | 标签页不允许重名,且大小写不区分(its 与 ITS 算同一个)。改一个别的名字,或先把重名的那个标签页改名 / 删除。名字同时是服务器上的文件名与分区文件里的分区名,重名会导致两个片段互相覆盖,所以这里做了硬校验。 |
| 标签页名里不能写中文 / 空格 | 是的。名字会直接变成服务器上的文件路径(its.fasta)与 NEXUS 里的分区名,空格、逗号、中文会写坏命令与分区文件,因此限制为「字母开头 + 字母 / 数字 / 下划线 / 点 / 短横」。中文只影响标签页名,序列名(标本名)照旧可以随便写中文。 |
| 第 6 个标签页没有自动名字了 | 预设的五个片段名(its / lsu / tef1 / rpb1 / rpb2)用完后就轮到你自己起名:新建时会自动弹出命名框,必须填一个唯一的名字。类型不在五类里的片段会统一用默认分区模型(GTR+F+G4),你可以在建树窗口里按需改 NEXUS。 |
| 多片段建出来的树,各片段用的模型对吗? | 默认按「该位点的常规选择」给:ITS 用 GTR+F+G4、LSU 用 GTR+F+I+G4、tef1 / rpb1 / rpb2 用 GTR+F+G4。这只是起点,不保证对任何数据集都最优 —— 想要数据驱动,可在建树窗口把 charpartition 改成 MFP+MERGE、同时把 -m 加回命令(见第 7 节)。 |
| 提示「分区文件与序列数据对不上,已停止建树」 | NEXUS 里各 charset 的列数之和与该片段的实际列数不一致(通常是手工改了列区间,或标签页内容变过)。点建树窗口里的「↺ 恢复默认 nex 与命令」,回到按当前标签页自动生成的版本即可。 |
| 建树一直转,会不会卡死? | 多片段 + 1000 次 UFBoot 确实是分钟到十几分钟量级。服务器端超时上限是 30 分钟,等待期间遮罩会一直显示。若长时间无进展,可查看服务端控制台日志(会打印每一步的命令与耗时)。 |
| 为什么页面上只看到两个树文件,其它产物呢? | 页面只展示体积小的树文本(.treefile / .contree);报告、日志以及体积大的 .ufboot / .ckp.gz 等都留在服务器的运行文件夹里,不再打包下载(页面也不接收这些文件)。 |
| MAFFT 对齐要等多久?遮罩上的「已用 N 秒」是什么意思? | 那是真实等待时间,不是卡死。本机实测(8 条 ~700 bp 的 ITS):第一次约 1 分钟,同一批工具连着再跑约 15 秒 —— 差别来自 Windows 第一次加载 MAFFT 那一串运行库/可执行文件时被杀毒软件扫描,跟序列条数关系不大(2 条和 8 条几乎一样慢)。所以第一次慢是正常的,重复分析会明显变快。 遮罩上只显示一个计时,说的是"当前这一步已经跑了多久":跑命令时是「命令已运行 N 秒」、从 GenBank 下载时是「加载已用 N 秒」、读本地文件时是「解析已用 N 秒」、把结果画到页面上时是「渲染已用 N 秒」。 |
| 快速拖动时新出现的序列是空白的,是不是丢了? | 不是。为了控制内存,远处的序列块会被暂时清空、滚回视野时按数据重建;快速拖动时重建可能要几十毫秒才跟上,停一下就好。导出 FASTA、对齐、建树、复制序列都会先把块内容补回来再读,不受影响。 |
| 「下载本页」后重新打开,按钮不能用了 | 保存页是离线快照:加载 / 对齐 / 裁切 / 建树这些要后台的按钮不带上,「🧰 工具箱」也已整块去掉(要重排序列用「🔀 按节点顺序重排序列」)。 但看树是完整可用的——重定根 / 旋转 / 还原定根 / 排序 / 横向缩放 / 切换 treefile↔contree / 下载 .treefile / 下载 PNG / 按节点顺序重排序列 都不需要服务器,离线打开照常能点;标签页左侧的样式下拉(峰图 / 紧凑 / 表格)也在,页脚的「💾 导出合并FASTA」也能用(把保存页里的序列导成 FASTA)。「🌲 去树查看器」保留:点它会带着当前树在新标签页打开线上看树页,这条需要联网,离线时点了会打不开。 |
| 灰块看起来把整段都盖住了 | 可能是数据本身可比对区段很短(如序列彼此差异过大)。试着换一段更长的读长、检查是否混入了非同源序列,或用「手动裁剪」自行界定保留区。 |