使用blast+samtools view+featurecounts对qpcr的靶序列在高通量结果中定量

背景

我们在进行高通量测序后,会对筛选得到的差异基因进行qpcr验证。而在很多器官中,因为基因的特异性表达,有些外显子存在组织特异性。这就会导致qpcr的结果可能与高通量得到的结论不同。为了将qpcr与高通量的结果更好地结合,我们可以考虑将高通量结果中qpcr靶向的序列进行定量,这样可以更好地与qpcr的结果交互验证。

思路

1、使用blast确定primer比对到的序列,并获得靶序列在基因组/转录组上的区间(参考链接参考链接))
2、使用samtools view根据上一步获得的区间,将高通量数据中的靶序列的比对情况提取出来
3、使用featurecount对这部分bam文件进行重新定量

方法

1. 安装blast

#构建conda环境
conda create -n blast
conda activate blast

#安装
conda install blast

2. 构建数据库

#查看帮助文档
blastn  -help
makeblastdb -help
#构建比对库:小鼠的库构建得很快
nohup makeblastdb -in ~/my_genome_reference/mouse/mm10/Mus_musculus.GRCm38.dna.primary_assembly.fa -dbtype nucl -parse_seqids -out mouse_mm10 &

3. blast

test.fasta的内容

>Trp53_primer1
CTCTCCCCCGCAAAAGAAAAA
>Trp53_primer2
CGGAACATCTCGAAGCGTTTA
>P21_primer1
CCTGGTGATGTCCGACCTG
>P21_primer2
CCATGAGCGCATCGCAATC
>MLKL_primer1
AATTGTACTCTGGGAAATTGCCA
>MLKL_primer2
TCTCCAAGATTCCGTCCACAG
>Cdkn2a_primer1
CGCAGGTTCTTGGTCACTGT
>cdkn2a_primer2
TGTTCACGAAAGCCAGAGCG
>telomerase_primer1
CGGTTTGTTTGGGTTTGGGTTTGGGTTTGGGTTTGGGTT
>telomerase_primer2
GGCTTGCCTTACCCTTACCCTTACCCTTACCCTTACCCT
>36B4_primer1
ACTGGTCTAGGACCCGAGAAG
>36B4_primer2
TCAATGGTGCCTCTGGAGATT
>Sod1_primer1
AACCAGTTGTGTTGTCAGGAC
>Sod1_primer2
CCACCATGTTTCTTAGAGTGAGG
>Sod2_primer1
CAGACCTGCCTTACGACTATGG
>Sod2_primer2
CTCGGTGGCGTTGAGATTGTT

比对:

#比对
blastn -task blastn -query test.fasta -out test.output -db mouse_mm10 -outfmt 7  -num_threads 4 -evalue 100
-max_target_seqs 2
#注意!!evalue是用来衡量比对显著性的值,越小越显著,但是我们用的是基因组做的库,比对的primer可能是转录组,因此可能会有gap,所以为了尽可能有hit,可以将它挑的大一点,我们最后根据匹配的碱基数目去鉴定特异性
#task 选择blastn,默认为megablast,只能找到相似度90%以上的序列!
#max_target_seqs 用于调节最多匹配的核酸序列数目
#当然,最好使用RNA库在做一遍

注意:这里得-outfmt可以用特定的格式展示输出

-outfmt <String>
alignment view options:
0 = pairwise, #显示配对情况
1 = query-anchored showing identities,
2 = query-anchored no identities,
3 = flat query-anchored, show identities,
4 = flat query-anchored, no identities,
5 = XML Blast output,
6 = tabular,
7 = tabular with comment lines, #带有列名注释
8 = Text ASN.1,
9 = Binary ASN.1
10 = Comma-separated values

4. 整理比对结果

library(stringr)
library(dplyr)
library(plyr)
x<-read.table("test.output")


#这里的SOD1和MLKL的匹配序列太离谱了,我们先删除,之后手动检查后做


x<-x%>%ddply(.,.(V1),function(x){x%>%arrange(V11)%>%.[1,]})
x$gene=str_split(x$V1,"_",simplify = T)[,1]
x<-x%>%filter(!gene%in%c("MLKL","Sod1"))
x<-x%>%ddply(.,.(gene),function(x){start=x$V9;end=x$V10;start=min(c(start,end));end=max(c(start,end));data.frame(chr=x$V2,start=start,end=end)})
x<-x[!duplicated(x$gene),]
x<-data.frame(position=paste(x$chr,":",x$start,"-",x$end,sep = ""))
write.table(x,"product_position.txt",row.names = F,col.names = F,quote = F)

#配合samtools view的参数格式,可以直接这样打印出来
paste(x$position,collapse = " ")
#5:115561162-115561218 4:89294391-89294498 17:29098417-29098501 17:13008246-13008338 11:69589811-69590667

5. 将所有的bam文件提取子集并在该区间内定量

  1. 使用samtools提取子集

    mkdir qpcr_quantity&&cd qpcr_quantity
    #确定所有的bam文件的位置
    find ../ -name *bam >bamfile.list
    
    #提取子集 samtools view -h bamfile 染色体:start-end
    cat bamfile.list |while read id;do samtools view -h $id 5:115561162-115561218 4:89294391-89294498 17:29098417-29098501 17:13008246-13008338 11:69589811-69590667 >${id}.sub;done
    mv `find ../ -name *sub ` ./
    
  2. 使用featurecounts定量

featureCounts -T 10 -a ~/my_genome_reference/mouse/mm10/Mus_musculus.GRCm38.99.gtf -o read.count -p -B -C  -t exon -g gene_name *bam.sub

6. 使用R对readcount做简单统计

x<-read.table("../qpcr_quantity/read.count",header = T)
colnames(x)

all_rowsums<-x[,-c(1:6)]%>%rowSums()
x<-x[all_rowsums!=0,]
x<-x[,-c(2:6)]
x

因为做q的时候都要做内参的,这里在标准化的时候,可以以内参的count数为1,然后其它基因与内参作比较(类似于q的标准化方法)

7. 小结

该方法的缺点:最佳匹配不一定是目标序列

1、由于我使用的是基因组构建的比对库,其中不包含转录本的可变剪切信息,因此会导致某些引物比对质量很差,如该案例中#补充,MLKL的reverse primer只有13bp能比对上,后来通过igv发现,其1-13在exon9上,其余的序列分布在别的exon上,这样比对的结果是非常差的,因此后续要尝试用转录组建库

2、这种比对是把primer分别比对的,与primer blast还是有差别的,因此需要人工校验比对的结果,比如primer1在2号染色体上,primer2可能在2号和4号染色体上均有最佳比对。

3、这里提供两个下来refseq数据库的方法:从RefSeq数据库批量下载微生物基因组 - 知乎 (zhihu.com)下载refseq序列_马志远的生信笔记的博客-CSDN博客

4、登录到NCBI的FTP的方式:如何下载NCBI refseq? - 简书 (jianshu.com)

#人的下载方式

wget ftp://ftp.ncbi.nlm.nih.gov/genomes/all/annotation_releases/10090/109/GCF_000001635.27_GRCm39/GCF_000001635.27_GRCm39_genomic.fna.gz

wget ftp://ftp.ncbi.nlm.nih.gov/genomes/all/annotation_releases/10090/109/GCF_000001635.27_GRCm39/GCF_000001635.27_GRCm39_rna.fna.gz

wget ftp://ftp.ncbi.nlm.nih.gov/genomes/all/annotation_releases/10090/109/GCF_000001635.27_GRCm39/GCF_000001635.27_GRCm39_genomic.gff.gz

wget ftp://ftp.ncbi.nlm.nih.gov/genomes/all/annotation_releases/10090/109/GCF_000001635.27_GRCm39/GCF_000001635.27_GRCm39_genomic.gtf.gz

#鼠的下载方式

wget ftp://ftp.ncbi.nlm.nih.gov/genomes/all/annotation_releases/10090/109/GCF_000001635.27_GRCm39/GCF_000001635.27_GRCm39_genomic.fna.gz

wget ftp://ftp.ncbi.nlm.nih.gov/genomes/all/annotation_releases/10090/109/GCF_000001635.27_GRCm39/GCF_000001635.27_GRCm39_genomic.gff.gz

wget ftp://ftp.ncbi.nlm.nih.gov/genomes/all/annotation_releases/10090/109/GCF_000001635.27_GRCm39/GCF_000001635.27_GRCm39_genomic.gff.gz

wget ftp://ftp.ncbi.nlm.nih.gov/genomes/all/annotation_releases/10090/109/GCF_000001635.27_GRCm39/GCF_000001635.27_GRCm39_rna.fna.gz

wget ftp://ftp.ncbi.nlm.nih.gov/genomes/all/annotation_releases/10090/109/GCF_000001635.27_GRCm39/GCF_000001635.27_GRCm39_rna.gbff.gz


分割符

基于转录本的定量方法

背景

如上所述,我们是基于基因组进行qpcr靶序列的定量,但是这种方法有时候并不准确,因此我们需要从转录本水平进行数据重比对,然后定量,方法与基于基因组的方法基本吻合

实现方法

1、下载转录本数据

wget ftp://ftp.ncbi.nlm.nih.gov/genomes/all/annotation_releases/10090/109/GCF_000001635.27_GRCm39/GCF_000001635.27_GRCm39_rna.fna.gz

2、构建索引及比对

#注意这里使用的转录本数据,按理讲应该使用基于基因组的比对方法(因为hisat会考虑可变剪切,转录本水平不应该考虑这个。)但是为了方便,还是用hisat2哈!
#构建索引
hisat2-build -p 10 ../GCF_000001635.27_GRCm39_rna.fna refseq_grcm39

#比对
hisat2 -p $threads1 --dta -x $index_file -1 $fq1 -2 $fq2 | samtools sort -@ $threads2 -o qpcr_quantity/$id.sorted.bam -

#构建index
samtools index -@ $threads $bam

3、对qpcr引物进行blast,确定在转录本 上的位置(参考上文2,3,4步)

这里注意:在使用refseq库的时候,blast会默认把region的版本号去掉,如XM_030245923.2会变成XM_030245923,所以要与bam的header比较一下

4、从比对好的bam中把靶序列区域的比对情况提取出来(参考上文第5步(1))

5、基于第3步的结果,手动做一个靶区域的gtf,用于featurecounts(搜了很多,没有办法从fasta直接变成gtf)

#示例文件
# chr   gene start  end         region
# 1    NM_007475   36B4   503  559    NM_007475.5
# 2    NM_007669    P21   114  198    NM_007669.5
# 3    NM_009877 Cdkn2a   103  210    NM_009877.2
# 4    NM_011434   Sod1   179  295    NM_011434.2
# 5    NM_013671   Sod2   293  385    NM_013671.3
# 6 XM_030243820   MLKL  1267 1443 XM_030243820.2
# 7 XM_030245923  Trp53  1466 1529 XM_030245923.2
my_gtf<-data.frame(seqid=x$region,
                   source=".",
                   feature="exon",
                   start=x$start,
                   end=x$end,
                   score=".",
                   strand=".",
                   phase=".",
                   attributes=paste("gene_name"," ",'"',x$gene,'"',sep = ""))
#注意,一定是改成tab分割,不然计数的时候会报错
write.table(my_gtf,"../qpcr_quantity/my_gtf_qpcr_quantity.gtf",row.names = F,col.names = F,quote = F,sep = "\t")

6、featurecount定量

featureCounts -T 10 -a my_gtf_qpcr_quantity.gtf -o read.count -p -B -C  -t exon -g gene_name  -f -F GTF *bam.sub

7、查看定量的结果,并读入R做统计即可!

https://mytuchuangwhq2.oss-cn-qingdao.aliyuncs.com/image-20220422113235245.png

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,922评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,591评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,546评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,467评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,553评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,580评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,588评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,334评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,780评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,092评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,270评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,925评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,573评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,194评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,437评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,154评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,127评论 2 352

推荐阅读更多精彩内容