Closed ixxmu closed 2 years ago
测序类型:猪,转录组双端测序数据
问题:我们自己鉴定到一个全新的基因,人为命名为Novel_Genes,测序获得了它的序列(fa文件),但是NCBI和ENSEMBL等数据库并没有收录这个基因ID。如何从RNA-seq中获取其表达量?
分析思路:常规的转录组上游分析得到bam文件;然后将该Novel_Genes的fa转化为gtf文件,进行featureCount分析。
cat test.fa
conda和mamba下载
环境配制
# 建立conda环境
conda env create -n rnaseq python==3
# 激活conda环境
source activate rnaseq
# 安装软件
mamba install -y fastqc multiqc hisat2 samtools subread trim-galore
mamba install -y -c bioconda blast #用于blast
双端fastq测序数据下载:这里已经下载好了。fastq下载我们可以使用aspera加速下载,参考 91例免疫治疗队列(含生存)转录组上游分析实战
猪的基因组文件下载自Ensembl数据库:
#参考基因组
wget -c http://ftp.ensembl.org/pub/release-107/fasta/sus_scrofa/dna/Sus_scrofa.Sscrofa11.1.dna.toplevel.fa.gz
gunzip Sus_scrofa.Sscrofa11.1.dna.toplevel.fa.gz
#注释文件
wget -c http://ftp.ensembl.org/pub/release-107/gtf/sus_scrofa/Sus_scrofa.Sscrofa11.1.107.chr.gtf.gz
gunzip Sus_scrofa.Sscrofa11.1.107.chr.gtf.gz
mkdir index
cd index
# bowtie2构建索引
bowtie2-build --threads 10 ../Sus_scrofa.Sscrofa11.1.dna.toplevel.fa Sus_scrofa
会生成6个bt2文件
ls -lh *bt2
文件夹部署:
mkdir 1.fastq_data 2.blast 3.fastqc 4.clean 5.mapping 6.count
先Blast一下这个目的基因的序列,参考https://blog.csdn.net/hac_kill_you/article/details/121616212
cd 2.blast
# 将pig.fastq作为reference建立库,然后用test.fa比对
# 建立库 (将其中一条序列建库,作为reference)
makeblastdb -in ../Sus_scrofa.Sscrofa11.1.dna.toplevel.fa -dbtype nucl -out pig_db
# 比对 (test.fa作为query)
# -db 就是上一步建库的名字(-out的参数)
blastn -query ../test.fa -db pig_db -out result
查看blast的结果:
cat result
BLASTN 2.12.0+
Reference: Zheng Zhang, Scott Schwartz, Lukas Wagner, and Webb
Miller (2000), "A greedy algorithm for aligning DNA sequences", J
Comput Biol 2000; 7(1-2):203-14.
Database: ../Sus_scrofa.Sscrofa11.1.dna.toplevel.fa
613 sequences; 2,501,912,388 total letters
Query= Novel_Genes
Length=809
Score E
Sequences producing significant alignments: (Bits) Value
2 dna:chromosome chromosome:Sscrofa11.1:2:1:151935994:1 REF 1495 0.0
>2 dna:chromosome chromosome:Sscrofa11.1:2:1:151935994:1 REF
Length=151935994
Score = 1495 bits (809), Expect = 0.0
Identities = 809/809 (100%), Gaps = 0/809 (0%)
Strand=Plus/Minus
Query 1 CGCTCACTGACCCGCATCTGACACCTGATACCCAGCGGCCAGCAGAGGTGTGGCCCCATA 60
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Sbjct 6114196 CGCTCACTGACCCGCATCTGACACCTGATACCCAGCGGCCAGCAGAGGTGTGGCCCCATA 6114137
......
Query 781 AATGGCCGCAGAGTCCAGGCCAGCGTGAG 809
|||||||||||||||||||||||||||||
Sbjct 6113416 AATGGCCGCAGAGTCCAGGCCAGCGTGAG 6113388
由Blast的结果可知,此Novel_Genes在chr2:6113388-6114196区间,为反义链,全长809bp
制作此Novel_Genes的GTF文件
echo -e '2\tensembl\texon\6113388\6114196\t.\t-\t.\tgene_id "Novel_Genes"; transcript_id "Novel_Genes"; gene_name "Novel_Genes"; gene_biotype "lncRNA";' >Novel_Genes.gtf
将此gtf添加到Sus_scrofa.Sscrofa11.1.107.chr.gtf
#做一个备份
cp Sus_scrofa.Sscrofa11.1.107.chr.gtf self.add.Novel_Genes.gtf
#追加
cat Novel_Genes.gtf >>self.add.Novel_Genes.gtf
#check
cat self.add.Novel_Genes.gtf | tail
cd 3.fastqc
# 使用FastQC软件对单个fastq文件进行质量评估
ln -s ../1.fastq_data/*.fastq.gz ./
###生成的fastqc放到3.fastqc中,-t指定线程数 后台运行
nohup fastqc -t 5 -o ./ ./*.fastq.gz &
###使用MutliQC整合FastQC结果,将后缀为.html的文件进行multiqc处理
multiqc ./
cd ../4.clean/
###做一个软连接文件,将格式转换后的fq.gz文件链接至4.clean
ln -s ../1.fastq/*.fastq.gz ./
##########i=${i/_1.fastq.gz/}意思是除去“i”后面的“_1.fastq.gz”
for i in `ls *_1.fastq.gz`
do
i=${i/_1.fastq.gz/}
echo "trim_galore --phred33 -q 25 --cores 8 --length 36 -e 0.1 --stringency 3 --paired -o ./ ${i}_1.fastq.gz ${i}_2.fastq.gz"
done > trim_galore.command
# multiqc
nohup bash trim_galore.command 1>trim_galore.log 2>&1 &
#批量kill
#ps -ef | grep trim_galore | awk '{print $2}' | while read id;do kill $id;done
fastq_results质控:
###生成的fastqc放到~/sra/3.fastq_qc/中,-t指定线程数。
nohup fastqc -t 30 -o ./ ./*_trimmed.fq.gz & #单个单个文件进行操作
###使用MutliQC整合FastQC结果,将后缀为.html的文件进行multiqc处理
multiqc ./*.zip
这里是猪的双端测序数据,index下载及构建见开头部分。
cd ../5.mapping
ln -s ../4.clean/*.fastq.gz ./
## 比对到猪参考基因组,并用samtools的sort排一下序
cat > bowtie2_paried.command
index=~/tmp_data/pig_fastq/index/Sus_scrofa
for id in `ls *_1.fastq.gz`
do
file=$(basename $id)
sample=${file%%_1.fastq.gz}
bowtie2 -p 8 -x ${index} -1 ${sample}_1.fastq.gz -2 ${sample}_2.fastq.gz | samtools sort -O bam -@ 8 -o - >${sample}.bam
done
###运行脚本
nohup bash bowtie2_paried.command &
# 查看任务进度
ps -ef |grep bowtie2
#ps -ef | grep bowtie2 | awk '{print $2}' | while read id;do kill $id;done #批量Kill
期间有一个样本报错了:
Error: Read SRR429934.9367055 HIGAATCGTAGGTGG044/1 has more quality values than read characters.
(ERR): bowtie2-align died with signal 6 (ABRT) (core dumped)
[bam_sort_core] merging from 0 files and 10 in-memory blocks...我怀疑是样本没下载完整,我们check一下:
function check_gzip_file {
local file=$1
gzip -t $file && echo ok || echo bad
}
check_gzip_file SRR4299265_1.fastq.gz
check_gzip_file SRR4299265_2.fastq.gz
#其实一开始就应该check所有的文件
for id in `ls *.fastq.gz`
do
file=$(basename $id)
echo $file
check_gzip_file $file
done > check.log果然是有一个文件没有下载完整。这里只要重新下载跑上述流程即可:
ascp -v -QT -l 300m -P33001 -k1 \
-i ~/miniconda3/envs/download/etc/asperaweb_id_dsa.openssh \
era-fasp@fasp.sra.ebi.ac.uk:/vol1/fastq/SRR429/005/SRR4299265/SRR4299265_1.fastq.gz .
所有fastq文件转为bam文件后,构建index并质控查看比对成功率:
## 构建index
ls *bam |xargs -i samtools index {} -@ 10
## QC
ls *bam |while read id ;do (nohup samtools flagstat -@ 1 $id > $(basename $id ".bam").flagstat &);done
##查看比对成功率
grep "properly paired" *.flagstat
计数的软件有很多:htseq / featureCounts / bedtools / Deeptools / salmon
featureCount是subread套件的一个模块,最大的优点就是速度非常快,使用全部overlap的reads计数,灵活考虑多比对的reads的计数。
这里使用上述自定义构建的猪的gtf注释(含目的Novel_Genes):self.add.Novel_Genes.gtf
cd ../6.count
### 使用sort后的bam文件进行操作
ln -s ../5.mapping/*.bam ./
### reads计数,其中的-t,-g都是默认的。其中-g可以指定显示gtf文件中attributes那一列中的任意值。(例:gene_id,gene_name,transcript_id等)
### -T 45 四十五个线程;-p 双端测序;-t exon是要统计的feature的名称;-g gene_id是要统计的meta-feature的名称
nohup featureCounts -T 45 -p -t exon -g gene_id -a ../self.add.Novel_Genes.gtf -o ./all.id.txt *.bam &
### 简化结果,去除特征列,只保留基因计数的列
cat all.id.txt | cut -f1,7-1000 > counts.txt
# 查看任务进度
ps -ef | grep featureCounts
ps -ef | grep featureCounts | awk '{print $2}' | while read id;do kill $id;done #批量Kill
可以看到自定义的这个Novel_Genes基因的表达量在最后一列,其他标准基因都是ENSEMBL ID:
cat counts.txt | tail
一个小技巧,希望能够抛砖引玉~
- END -
https://mp.weixin.qq.com/s/dz3ImtuGdZEs27TTBda6VQ