项目目的
利用 CBE 的碱基编辑能将正常氨基酸密码子转换成终止密码子的性能,设计出针对人类、猪、小鼠的全部基因的 CBE-STOP 芯片。通过 TRAP 系统的细胞内测试,检测分析所有 gRNA 介导的 STOP 效率,最终建立人类、猪、小鼠的 CBE-STOP 的 gRNA 效率数据库,供做 base-editing 相关研究的科研人员使用。
算法
- 找出 human、pig、mouse 的所有已知基因及其全长序列,建立 3 个基因数据集(所有 protein coding gene,不包含非编码 RNA 基因),这里直接使用物种的 exon 序列即可;
- 提取所有基因的前 3 个 exon,如果只有 1-3 个 exon 的,保留所有 exon(需要过滤掉在 UTR 上的外显子,还需要过滤掉外显子长度小于 23bp 的);
- 找出前 3 个外显子中所有正义和反义链上的 gRNA(20 bp 序列).
- 做一定程度的过滤:
- 去除 23bp 中有 BsmBI(5‘-CGTCTC-3‘,5‘-GAGACG-3‘)酶切位点的 gRNA
- 去除 23bp 中有 4 个及以上连续 T 的 gRNA
- GC content(20bp)在 40%~90%之间
- 记录脱靶数目
- 在每条剩余的 gRNA(4-8)bp 序列上寻找 CGA,CAG,CAA,TGG(反向互补),并判断其是否为潜在的综止密码子
- 组装
具体实现步骤
step_1
过滤外显子,从 Ensembl 上获取所有编码基因的所有外显子序 eg:AllExonSeq.fa,外显子信息 eg:AllExonInfo.txt首先从信息文件入手,每个外显子去除 UTR 部分同时要保证序列长度是大于 23bp 的并且只保留前 3 个外显子并和序列merge在一起
首先,用 R 简单过滤信息表格较为方便
1 | library(readr) |
然后,用 python 脚本读取 fasta 序列,并利用 pandas 库和信息表整合
1 | import pandas as pd |
step_2
exon 序列小调
这里获取的序列如果是反向序列的话,就会造成后期寻找 gRNA 的不便,为此,我们先把所有的 exon 序列转换为统一的方向
1 | import pandas as pd |
接着,外显子序列数目巨大,很难放在一起寻找 gRNA,因此,我们先将该序列拆分,每分留 6000 条序列
1 | seqkit split2 allexoninzhengliantop3.fa -s 6000 -f |
事实证明,做这一步反而让后面的分析变得麻烦了
step_3
运行 FlashFry 软件发现所有的 gRNA 并打分,
首先,要在 ENSEMBL 上下载完整的 HG38 基因组并构建索引
1 | axel -n 50 ftp://ftp.ensembl.org/pub/release-100/fasta/homo_sapiens/dna/Homo_sapiens.GRCh38.dna_sm.primary_assembly.fa.gz |
然后,分别对 10 份序列设计 gRNA 并打分
1 | java -Xmx10g -jar /dellfsqd2/ST_LBI/USER/panxiaoguang/app/FlashFry/bin/flashfry \ |
step_4
对打分结果做初步过滤,主要包括GC 含量,BSMB1 位点,4 个以上连续 T
用 R 语言内置函数对数据表过滤很方便,这里额外获取了gRNA 的基因,正负链以及在基因组上的位置信息
1 | library(readr) |
step_5
最后一步过滤,要求在 gRNA4-8bp 空间内具有 stop 位点,这里采用 python 脚本去下载好的 ATG 开头的 CDS 基因集中反向 MAP,正反向 ** (这里的正反向不是基因的正反向,而是 gRNA 和 cds 方向的一致性,如果基因在正链上,那么 gRNA 正向设计的为顺,反向设计为逆;如果基因在负链上,那么 gRNA 正向设计的为逆,反向设计为顺) ** gRNA 要分别运算,最后获取可用的 gRNA 和其对应的 stop 位点。
为了加速最后一步过滤,分成三步完成,最核心的一步采用 pypy
step_1.py
1 | import pandas as pd |
step_2.py
1 | import re |
step_3.py
1 | import pandas as pd |
最后整合的 shell 为:
1 |
|
组装
1 | library(readr) |