渐渗片段思路整理

一、核心算法设计

  1. 滑动窗口机制

    • 固定窗口大小:
    • 窗口滑动规则:
      • 起始条件:从染色体第一个SNP开始,当前窗口首SNP必须匹配参考基因组(基因型为'0/0')
      • 终止条件:窗口最后一个位点必须匹配参考基因组(基因型为0/0)
      • 匹配比例:窗口内匹配参考基因组(达尔文棉)的SNP数量 > 5 × 匹配目标样本(泗棉3号)的数量
    • 窗口移动策略:
      • 满足条件时:跳跃式移动(跳过当前窗口,直接检查后续30个SNP)
      • 不满足条件时:步进式移动(每次移动1个SNP位置)
  2. sliding_window()

    • 核心匹配逻辑:
      for 窗口 in 染色体SNP序列:
         统计 matches_darwin = 当前样本'0/0'计数
         统计 matches_target = 与目标样本相同基因型计数
         if matches_darwin > 5*matches_target and 窗口末SNP=='0/0':
             记录候选区域
      
  3. 处理流程

    graph TD
    A[开始窗口位置i] --> B{检查位置i的基因型}
    B -->|0/0| C[分析整个30 SNP窗口]
    B -->|非0/0| D[滑动到i+1]
    C --> E[统计匹配参考基因组数量]
    C --> F[统计匹配目标样本数量]
    E --> G{满足条件1?}
    F --> G
    G -->|是| H{窗口末端基因型=0/0?}
    G -->|否| D
    H -->|是| I[记录区域并跳至i+30]
    H -->|否| D

二、v1.1 区域合并算法

二、v1.2区域合并算法

  1. 双层合并机制

    graph LR
    A[原始窗口] --> B[窗口合并] --> C[片段合并] --> D[最终结果]
    • 窗口合并阶段
      • 合并相邻窗口(默认间距≤500K)
      • 累加匹配计数
    • 片段合并阶段
      • 合并相邻片段(默认间距≤1M)
      • 过滤短片段(v1.2.2-500k是去掉小于500K、v1.2.2-5M是去掉小于5M)
  2. merge_regions()

    • 合并策略:
      按染色体位置排序区域
      遍历区域列表:
         若当前区域与上一区域间距≤合并阈值:
             扩展上一区域的end位置
             累加matches计数
         否则:
             创建新区域
      过滤长度<min_length的区域
      

三、结果输出

image.png
文章里“并获得每个窗口双亲同源 SNP 数目的比值,即达尔文氏棉亲本同源 SNP 数目:泗棉 3 号亲本同源 SNP 数目,将比值大于 25:5 的窗口定义为渐渗窗口”,
也就是30个snp窗口内,(与达尔文氏棉相同的位点)大于5倍的(与泗棉三号相同的位点),上图(28)大于(5倍的3)。