///|
/// foldx_lite_demo — FoldX 风格蛋白稳定性 ΔΔG 与饱和突变扫描演示:
/// 合成 α-螺旋链 -> 单点 ΔΔG -> 饱和突变扫描(最稳/最不稳/熵) ->
/// 突变文库排名 -> TSV/JSON.
///|
fn fxd_chain() -> @src.Chain {
let seq = [
"ALA", "GLY", "SER", "LEU", "ILE", "VAL", "PHE", "MET", "LEU", "SER", "ILE",
"VAL",
]
let residues : Array[@src.Residue] = Array(capacity=0)
for r = 0; r < seq.length(); r = r + 1 {
let angle = r.to_double() * 1.05
let x = 4.0 * @math.cos(angle)
let y = 4.0 * @math.sin(angle)
let z = r.to_double() * 2.1
let ca = @src.Atom::new(
name="CA",
coord=@src.Vector3::new(x, y, z),
resname=seq[r],
chainid='A',
resseq=r + 1,
element="C",
)
let res = @src.Residue::new(resname=seq[r], chainid='A', resseq=r + 1, atoms=[
ca,
])
residues.push(res)
}
@src.Chain::new(id='A', residues~)
}
///|
fn main {
let chain = fxd_chain()
println("1. 合成链: 12 残基 α-螺旋(Cα 模型, DOPE 统计势)")
// 2. 单点 ΔΔG
let e_wt = @src.foldx_energy(chain).unwrap()
let ddg_gly = @src.foldx_ddg(chain, 7, "GLY").unwrap()
let ddg_trp = @src.foldx_ddg(chain, 7, "TRP").unwrap()
println("2. 单点 ΔΔG(pos7 PHE):")
println(" wt 能量 = \{e_wt}")
println(" PHE->GLY ΔΔG = \{ddg_gly} (小侧链)")
println(" PHE->TRP ΔΔG = \{ddg_trp} (大侧链)")
// 3. 饱和突变扫描(核心位点 4/7/10)
let positions : Array[Int32] = [4, 7, 10]
let sites = @src.foldx_saturation_scan(chain, positions=Some(positions))
println("3. 饱和突变扫描(位点 4/7/10):")
for s in sites {
println(
" pos \{s.pos} \{s.wt}: best=\{s.best.mt}(\{s.best.ddg}), worst=\{s.worst.mt}(\{s.worst.ddg}), entropy=\{s.entropy}",
)
}
// 4. 汇总
let summary = @src.foldx_scan_summary(sites).unwrap()
println("4. 位点数=\{summary.n_sites}, 平均熵=\{summary.mean_entropy}")
println(@src.foldx_summary_line(summary))
// 5. 文库排名
let lib = @src.foldx_mutant_library(sites)
println("5. 突变文库(\{lib.length()} 条, 最稳前 3):")
let mut shown = 0
for m in lib {
if shown < 3 {
println(
" \{m.label} | ΔΔG=\{m.total_ddg} | fitness=\{m.mutations[0].fitness}",
)
shown = shown + 1
}
}
// 6. TSV/JSON
let tsv = @src.foldx_scan_tsv(sites)
let json = @src.foldx_scan_json(sites)
println("6. TSV \{tsv.length()} 字节, JSON \{json.length()} 字节")
println(
"演示完成: 链能量 -> 单点 ΔΔG -> 饱和扫描 -> 文库排名闭环",
)
}