///|
/// MHC 结合预测演示: 新抗原候选筛查(锚定规则框架).
fn main raise {
  println("=== MHC-I: HLA-A*02:01 九肽筛查 ===")
  let a0201 = @src.mhc_allele("HLA-A*02:01").unwrap()
  // 含经典流感表位 GILGFVFTL 的蛋白片段
  let protein1 = "MDSKGSCWGPSGDWEMMKVLDKLSEGKQGILGFVFTLTVPSERGVSILDSIRSLYNTVATL"
  let hits1 = @src.mhc_predict(protein1, a0201)
  let binders = @src.mhc_binders(hits1)
  println(
    "  蛋白 " +
    protein1.length().to_string() +
    "aa, 窗口 " +
    hits1.length().to_string() +
    " 个, 弱结合以上 " +
    binders.length().to_string() +
    " 个",
  )
  println("  Top 5 (锚匹配/得分/分级):")
  for h in hits1 {
    if h.binding_category() != "none" {
      println(
        "    " +
        h.peptide +
        " @" +
        h.start.to_string() +
        "  " +
        h.anchor_matches.to_string() +
        "/" +
        h.anchor_total.to_string() +
        "  " +
        h.score.to_string() +
        "  " +
        h.binding_category(),
      )
      if h.is_weak() {
        break
      }
    }
  }
  println("=== MHC-I: 小鼠 H-2Kb 八肽(OVA 表位) ===")
  let kb = @src.mhc_allele("H-2Kb").unwrap()
  let ova = "MQIERHVDGRTQIINFEKLTEWTSSNVMEERKIHQDDRHGLDLVQSLDLMKKLQQIV"
  let hits_kb = @src.mhc_predict(ova, kb)
  let top_kb = hits_kb[0]
  println(
    "  最优: " +
    top_kb.peptide +
    " @" +
    top_kb.start.to_string() +
    "  锚 " +
    top_kb.anchor_matches.to_string() +
    "/" +
    top_kb.anchor_total.to_string() +
    "  " +
    top_kb.binding_category(),
  )
  println("=== MHC-II: HLA-DRB1*01:01 核心 9-mer 扫描 ===")
  let dr = @src.mhc_allele("HLA-DRB1*01:01").unwrap()
  let protein2 = "MKTFVAAWTLKSAAVDQAKFIILCASTVAKFISAAWTLKSAAVDQAKFVAAWTLKSAAVD"
  let hits2 = @src.mhc_predict(protein2, dr)
  let uniq = @src.mhc_unique_epitopes(@src.mhc_binders(hits2))
  println(
    "  15-mer 窗口 " +
    hits2.length().to_string() +
    " 个, 去重后表位 " +
    uniq.length().to_string() +
    " 个(核心 9-mer 身份)",
  )
  for h in uniq {
    let core = h.peptide[h.core_start():h.core_start() + 9].to_owned()
    println(
      "    " +
      core +
      " (窗口 @" +
      h.start.to_string() +
      ", 框架 +" +
      h.core_start.to_string() +
      ")  " +
      h.score.to_string(),
    )
  }
  println("=== 内置等位基因 ===")
  println("  " + @src.mhc_allele_names().join(", "))
  println("")
  println(
    "注: 锚定规则筛查级工具, 精度低于 netMHCpan 神经网络方法(权重未公开无法移植);",
  )
  println("    候选集应交由实验或成熟工具验证.")
}