细胞力学仿真软件里的几何模型创建与编辑,是整个 CellPACK 流水线里最容易被低估的环节。我印象最深的一次经历:从文献补充材料里下载了一个哺乳动物细胞的网格文件,兴冲冲配置好成分清单,跑了一整夜 packing,第二天打开输出一看,所有分子都悬在细胞膜外面。排查了两天才意识到问题根本不在 packing 参数,而在几何——网格不水密、法线朝里,空间内外判定直接反了。这篇是系列的第 5 篇,专门把几何模型创建与编辑这件事拆开讲清楚:几何在 CellPACK 项目里扮演什么角色、从哪来、怎么编辑、怎么保证质量、怎么和 packing 参数联动。适合已经完成前面安装和组件配置、正准备把真实细胞形态放进仿真的读者,也适合被"分子全在外面"这类诡异结果折磨过的人。
1. 先搞清楚 CellPACK 里的"几何"到底指什么
1.1 几何是容器,不是分子本身
CellPACK 的核心工作方式,不是把每个原子的坐标硬编码进去,而是把细胞抽象成一组封闭的三维空间边界,再往这些边界构成的容器里填充分子实例。这里的"几何"指的就是容器本身——细胞膜、核膜、线粒体膜、内质网腔这些空间边界。项目配置里你设定的那些 ingredient(核糖体、RNA 聚合酶、细胞骨架蛋白、代谢酶等等),最终都会被 packing 算法放置到这个或那个几何内部。
用一句话概括:几何定义"哪里不能放",分子填充定义"哪里放了什么"。这两个问题是解耦的,但在实际工程里又互相牵扯。很多新手第一次用 CellPACK 时,会花大量时间调 ingredient 权重、比例、排斥半径,却忘了检查几何本身是否正确。结果就是无论怎么调 packing 参数,输出结果都诡异——因为分子根本放不进一个坏掉的容器里。
这里有一个现成的类比:几何相当于停车场的车位划线,分子相当于车辆。车位线画歪了、画反了,你再怎么安排进出顺序也停不出正常效果。所以每次有人问我"为什么 packing 结果不对",我第一句话永远是:先把你每个 compartment 的几何单独打开看一眼,再谈参数。
1.2 compartment 树状层级:母容器、子容器与共用边界
实际细胞不是单层球壳,而是一套嵌套结构:最外层是质膜,里面有细胞质基质,中间包裹着细胞核,细胞核外面还分布着线粒体、内质网、高尔基体等。CellPACK 用"子区间(compartment)"概念管理这套嵌套结构,组织方式是一棵树:母 compartment 是外边界,子 compartment 是内嵌在其内部的更小区间。
树状结构在每个 compartment 的配置中体现为父节点引用。比如"细胞核"的父节点是"细胞质"或"整个细胞","核仁"的父节点是"细胞核"。packing 的时候,算法先处理外层几何,再向内层填充,同时处理子 compartment 占用的空间——也就是说,子 compartment 内部的区域不会让母 compartment 的成分进入。这种设计让每个 compartment 可以独立配置分子组成,又不会在空间上互相污染。
这里有个特别容易踩的坑:子容器必须完全落在母容器的体积范围内,不能"伸出去"。我见过有人把线粒体几何从细胞膜里穿出去一小截,packing 结果在那一小截里塞满了线粒体蛋白,看起来就像蛋白长在细胞外面。处理这种问题,建议在提交 packing 之前先做一次"包含性测试",或者干脆在
