质量控制软件总结

常见的质量控制软件有:Trimmomatic    seqtk    SOAPnuke

1.Trimmomatic

之前这个软件也介绍过,只是当时是为了知道有这个软件而写,但是这回要把这个软件的细节搞明白。

以下是官方给出了一般操作:

Paired End:

java -jar trimmomatic-0.35.jar PE -phred33 input_forward.fq.gz input_reverse.fq.gz output_forward_paired.fq.gz output_forward_unpaired.fq.gz output_reverse_paired.fq.gz output_reverse_unpaired.fq.gz ILLUMINACLIP:TruSeq3-PE.fa:2:30:10 LEADING:3 TRAILING:3 SLIDINGWINDOW:4:15 MINLEN:36

参数解读:PE 代表数据为双端测序所得。-phred33代表数据质量格式为phred33,默认是Phred64(小心这个坑呦)。input_forward.fq.gz input_reverse.fq.gz output_forward _ pai red.fq.gz 这是两个输入文件,就是你的双端测序的fq1和fq2。

output_forward_paired.fq.gz output_forward_unpaired.fq.gz output_reverse_paired.fq.gz output_reverse_unpaired.fq .gz 是四个输出文件,可以简单认为两个paired文件为过滤好的,两个unpaired文件为要丢弃的文件。ILLUMINACLIP:TruSeq3-PE.fa:2:30:10 代表接头序列切除参数,TruSeq3-PE.fa是软件自带的一个文件,内容如下:

$ more TruSeq3-PE.fa
>PrefixPE/1
TACACTCTTTCCCTACACGACGCTCTTCCGATCT
>PrefixPE/2
GTGACTGGAGTTCAGACGTGTGCTCTTCCGATCT

而且自带文件不止这一个,还有很多。适用于不同情况的测序接头,但是很奇怪的是我做的项目数据是PE数据,接头在他自带的接头文件中却是SE接头:

$ more TruSeq3-SE.fa
>TruSeq3_IndexedAdapter
AGATCGGAAGAGCACACGTCTGAACTCCAGTCAC
>TruSeq3_UniversalAdapter
AGATCGGAAGAGCGTCGTGTAGGGAAAGAGTGTA

幸好软件支持自定义接头文件,只要你明白规则(接头名要搞好)就可以了:

‘Palindrome’ trimming is specifically designed for the case of ‘reading through’ a short fragment into the adapter sequence on the other end. In this approach, the appropriate adapter sequences are ‘in silico ligated’ onto the start of the reads, and the combined adapter+read sequences, forward and reverse are aligned. If they align in a manner which indicates ‘read-through’, the forward read is clipped and the reverse read dropped (since it contains no new data).

Naming of the sequences indicates how they should be used. For ‘Palindrome’ clipping, the sequence names should both start with ‘Prefix’, and end in ‘/1’ for the forward adapter and ‘/2’ for the reverse adapter. All other sequences are checked using ‘simple’ mode. Sequences with names ending in ‘/1’ or ‘/2’ will be checked only against the forward or reverse read. Sequences not ending in ‘/1’ or ‘/2’ will be checked against both the forward and reverse read. If you want to check for the reverse-complement of a specific sequence, you need to specifically include the reverse-complemented form of the sequence as well, with another name.

然后,2是比对时接头序列时所允许的最大错配数;30指的是要求PE的两条read同时和PE的adapter序列比对,匹配度加起来超30%,那么就认为这对PE的read含有adapter,并在对应的位置需要进行切除。10和前面的30不同,它指的是,我就什么也不管,反正只要这条read的某部分和adpater序列有超过10%的匹配率,那么就代表含有adapter了,需要进行去除。LEADING:3 代表read开头的碱基是否要被切除的质量阈值。SLIDINGWINDOW:4:15 代表滑动窗口长度的参数,SLIDINGWINDOW:5:20代表窗口长度为5,窗口中的平均质量值至少为20,否则会开始切除。MINLEN:36 代表read被切除后至少需要保留的长度,如果低于该长度,会被丢掉。

Single End:

java -jar trimmomatic-0.35.jar SE -phred33 input.fq.gz output.fq.gz ILLUMINACLIP:TruSeq3-SE:2:30:10 LEADING:3 TRAILING:3 SLIDINGWINDOW:4:15 MINLEN:36

单端测序数据只有一点不同就是不用要指定文件来存放被过滤掉的read信息的,后面直接就接Trimmer信息。

存在的问题:

不知道为什么,在使用这个软件进行质控之后,clean数据还是有大量的有接头文件。在使用Soapnuke之后就没有。

2.Soapnuke

基本操作:

SOAPnuke1.5.5 filter -f AGATCGGAAGAGCACACGTCTGAACTCCAGTCAC -r AGATCGGAAGAGCGTCGTGTAGGGAAAGAGTGTA -1 IEToleR1ABD16FAAPEI-202_1.fq.gz -2 EToleR1ABD16FAAPEI-202_2.fq.gz -C IEToleR1ABD16FAAPEI-202_1.clean.fq.gz -D IEToleR1ABD16FAAPEI-202_2.clean.fq.gz -o ../cleandata/ -l 5 -q 0.5 -n 0.03 -i -G -Q 2 -L 150 -5 1

参数解读:filter代表过滤普通序列。-f代表fq1的接头。-r代表fq2的接头。-1代表fq1。-2代表fq2。-C 代表clean fq1。-D 代表clean fq2。-o代表输出文件路径。-l代表判定低质量碱基的阈值,默认为5。-q 代表允许序列低质量比例,默认为50%,一旦高于就剔除。-n 代表N占序列的比例,默认0.05,一旦高于就会剔除序列。-i 代表去除index。-G 如果设置了就表示质量值体系选择为phred33 -Q 代表我们过滤后输出的read要选用哪种质量值体系输出,1代表phred64,2代表phred33,默认依然是phred33。-L 代表 fq1序列最长长度。-5 0代表数据名字为旧式的,如:(默认为0)

old fastq name: @FCD1PB1ACXX:4:1101:1799:2201#GAAGCACG/2

-5 1代表数据名字为新式的,如;

new fastq name: @HISEQ:310:C5MH9ANXX:1:1101:3517:2043 2:N:0:TCGGTCAC

这里有一份我使用这个软件进行过滤的结果:可以看出去除的序列基本上全是有接头的,低质量的很少,这里有个疑问就是,是软件过滤的问题,还是数据本来就不错有待后期再验证。

Item Total Percentage Counts(fq1) Percentage_2 Counts(fq2) Percentage_3
Total filtered reads (%) 760,442 100.00 380,221 100.00 380,221 100.00
Reads with adapter (%) 746,650 98.19 296,724 78.04 349,062 91.81
Reads with low quality (%) 0 0.00 0 0.00 0 0.00
Reads with low mean quality (%) 0 0.00 0 0.00 0 0.00
Reads with duplications (%) 0 0.00 0 0.00 0 0.00
Read with n rate exceed: (%) 13,792 1.81 1,349 0.35 6,465 1.70
Read with small insert size: (%) 0 0.00 0 0.00 0 0.00
Reads with PolyA (%) 0 0.00 0 0.00 0 0.00

3. seqtk

seqtk本来是用于处理FASTA或FASTQ格式序列的快速轻量级工具,涉及到转换,切割等一系列的小操作。只因为有个命令为:trimq 切割序列低质量的碱基才进入我们讨论的范围。

命令十分简单,使用Phred算法从两端修剪低质量:(无法切割带有接头的序列)

seqtk trimfq in.fq > out.fq

4.后话

在了解seqtk后,我又花了一天时间看了seqkit和csvkit的文档,他们所做的事就是我们日常的小操作,但是却能十分高效地工作。如果有兴趣的话,也可以研究他他们的源码学习一下,下一篇,我将介绍这款瑞士军刀。

关于数据质量处理的总结

自己挖的坑还得自己埋上,但是也值得,这个坑你迟早还会走到他面前。

都快毕业了接手了师姐的GWAS项目,师姐基础分析都已经做到了基因分型,本想着继续做GWAS的后续分析,却发现300个样本,基因型文件内容却参差不齐(多于和少于300个基因型的都有),而且是所有的文件都是这样……,没办法只能debug,写bug一时,改bug一年呦,经过我无数次地努力,花了2周的时间,我终于……放弃了这个流程,改用bwa+GATK那一套。(因为一般质控没啥问题,我就直接用了cleandata作为我的输入文件。

一切还算正常,但是到了BaseRecalibrator(检测碱基质量分数中的系统错误)时候又出错了,这一步还蛮关键的,能够去除很大一部分碱基(可能是SNP位点)的假阳性。错误如下:

ERROR MESSAGE: SAM/BAM file SAMFileReader appears to be using the wrong encoding for quality scores: we encountered an extremely high quality score of 78; please see the GATK --help documentation for options related to this error

我了个大艹,怎么所有文件的质量分数都有问题,赶快Google下,然后在后面加了命令参数         –fix_misencoded_quality_scores 或 -fixMisencodedQuals 解决了问题。原来我的输入文件是phred+64格式的,而现在普遍流行的是phred+33格式,GATK也不例外。这引起了我的探究欲望,这2种格式有何不同?为何新数据还有phred+64格式的老版本?

知识我另外再说,这个数据的问题在我重新找到一个样本原始数据进行过滤的时候解决了:原始数据是phred+33格式的,我过滤完也是phred+33格式,但是师姐的cleandata为毛就是phred+ 64格式,我想……可能是师姐并不知道质量格式的问题,就像我之前也不知道一样,所以在写过滤命令的时候没注意到参数设置的问题,或者是师姐知道质量格式的问题,但是那套流程太老了,需要phred+64格式的文件。

经过修改后流程顺利地跑了起来 。开心(^▽^),这也提醒我,在做分析的时候要懂得每一个常用命令、参数是什么意思,至于有了错误之后如何解决,还得拜托强大的Google。

下一篇我将总结下数据质控的软件细节。

About file’s merging

1.当key列都在文件第一列时:

import sys

def join_file(first_file,second_file,out_file):

with open(first_file,'r') as IN1, open(second_file,'r') as IN2, open(out_file,'w') as OUT:

f1 = { k:v for k,*v in [l1.split() for l1 in IN1 ]}
f2 = { k:v for k,*v in [l2.split() for l2 in IN2 ]}
joinf = {k : f1[k]+f2[k] for k in f2 if k in f1 }
for key,value in joinf.items():
    OUT.write(key+'\t'+'\t'.join(value)+'\n')

if (len(sys.argv)==4):
 join_file(sys.argv[1],sys.argv[2],sys.argv[3])
else:
 print("Usage: python first_file(min) second_file(max) out_file")

2.利用pandas读入Excel文件:

import pandas as pd
df1 = pd.read_excel('myxls.xlsx', sheet_name='Sheet1')
df2 = pd.read_excel('myxls2.xlsx', sheet_name='Sheet1')
outfile = pd.merge(df1, df2, how='left', left_on='ID',right_on='ID')
outfile.to_excel('outfile2.xls', index=False)

 

file I/O of python

with open('A.txt','r') as file :
    print(file.read())
    file2=file.read().upper()
with open('B.txt','w') as files:
    files.write(file2)
files.close()

##############################################################

with open('A.txt','r') as f :
    lines = (line for line in f) #mode1 
    lines = (line.strip() for line in f) #mode2
    line2 = []
    for i in lines:
        line2 += [i.upper()]
    yy = ''.join(line2)
    print(yy)

pythonIO

 

世界是谁在运行的?

首先,要了解世界的概念就要不断的减少个体的差异性,我们知道人生而不同,但是要在脑海中形成对世界的认识,就要减少对相同类不同个体的存在,然后逐渐逼近对世界的正确认识。

世界是人在运行的么?不是。人只是世界很小的一个产物,人的主观能动性使人类科技,社会发展,那么人已经拥有可以控制世界的能力了么?小点说,人类已经拥有可以控制地球的能力了么?没有。人类在不断的进步中,还是在顺应自然的变化。

世界是太阳运行的么?不是。太阳为地球所有的生物提供了生存的条件:能量,万物生长,在地球上形成自然环境。那么,太阳会消失么?会的,太阳不断地核聚变产生能量,也在不断的泯灭,终有一天,太阳不在发出光芒,如果人类没有最终造出太阳的替代品,那么地球也将会消失。那么世界不再运行了么?没有。太阳系在已知宇宙中小的就像沧海一粟,一块皮肤老了,掉了也无所谓。

世界是光运行的么?只能说,光是一个必要不充分条件。没有光,世界万物无法生长,世界没有生机,没有了活力,没有了发展的动力。然而,没有光世界还在运行,宇宙深处没有光线,只有天体,他们依然按照旋转规律不停地运动,如果你觉得没有光,怎么知道有天体在动,那你可以做个小小的实验:找一个不透光的长盒子,两端开口,把一个小球扔进去,那么一定会在另一端小球出来。你看见小球在里边的运动了么?没有。你知道小球在动么?知道。

世界根本没有事物在操纵运行,完全是按照无序的规律自我运行的么?不知道,最起码现在不知道。我们不能把一切无法了解的事物归于神。神是什么?在外人解释来说,神就是唯心主义,是精神。谁也没见过神,是神造人?还是人造神?…

英语前缀、后缀、词根表

一、英语常用前缀表
(说明:黑体字为英语前缀及其含义,斜杠/后面为构词举例)
a- 使,离,向/ awake使醒来,apart使分离
ac-,ad-,af-,ag-,al- 向,加强/ accord依照,affect影响
anti- 反,防止/ antitank反坦克的
auto- 自,自动/ automation自动化
be- 在,使/ beside在……旁,befall降临(于)
bi- 双/ bicycle自行车,bisexual两性的
co- 共同,互相/ cn- exist共存
com-,con- 共同,加强/ combine联合,confirm使加强
de- 离,加强,降/ detrain下火车,depicture描述
dif- 分开,否定/ differ差异,difficult困难
dis- 否,离,安全/ disallow不准,disroot根除,disarrange搞乱
e- ,ex- 出,否定,加强/ educe引出,estop阻止,expand扩展
en-,em- 在内,用于,使/ encage关入笼,embed使插入
in- ,im-,il- 无,向内,加强/ incorrect不正确,impulse冲动
inter- 在……间/ international国际的
kilo- 千/ kilometer千米
micro- 微/ microbe微生物
mini- 微小/ minibus小公共汽车
neg- 不,非/ neglect忽视,negate否定
non- 不,非/ nonparty非党派的
ob-,oc-,op- 越过,包围,逆反/ object目标,oppose反抗
out- 在外,除去/ outlaw逃亡者,outroot根除
over- 超出,反转/ overweight超重,overthrow推翻
per- 贯通,遍及/ perform完成,perfect完美的
post- 在后/ postwar战后的,porstern后门
pre- 在前/ preface前言
pro- 在前,拥护/ prologue序言,pro- American亲美的
re- 重复,相反/ recall回忆,react反应
se- 分离/ separate使分离,select选出
sub-,suc-,sug- 在下,次于/ subway地铁,succeed继承
sur- 超,外加/ surface表面,surtax附加税
tele- 远/ television电视
trans- 超过,透过/ translate翻译,transport运输
un- 否定/ unfair不公平的
up- 向上/ upset推翻,upstairs在楼上
uni- 单一/ united联合的,unit单位

二、英语常用后缀表
(说明:黑体字为英语后缀及其含义,斜杠/后面为构词举例)
-ability, —ibility 抽象名词/ stability稳定,sensibility敏感性
-able, —ible 能…的/ unable无能力的,terrible可怕的
-acy性质,状态/ illiteracy文盲,intricacy错综复杂
-age动作,状态,总称(构成名词)/ folwage泛滥,postage邮费
-al动作,行为,…的/ manual手册,central中心
-an人,籍贯,…的/ African非洲的,publican旅店主
-ance, —ancy行为,性质,状态/ distance距离,currency流通
-ant,ent人,…的/ assistant助手,excellent优秀的
-ary地点,人,事物/ library图书馆,military军事
-ate做,职位,…的/ doctorate博士学位,adequate足够的
-ation,-ition动作,性质,状态/ visitation访问,addition附加物
-craft 技巧,工艺/ aircraft飞机,handicraft手艺
-cy 形状,状态,职位/ secrecy秘密,fancy幻想
-dom 状态,领域/ freedom自由,kingdom王国
-ed 有…的/ cultured有教养的,puzzled迷惑的
-ence,-ency 行为,性质,状态/ difference差异,frequency频率
-er, —eer, —or人/ killer杀手,engineer工程师,doctor医生
-ern 地点,方位/ eastern东方的,cavern洞穴
-ese 人,语言,国籍/ Chinese中国人,Japanese日本人
-ess 女性,雌性/ actress女演员
-hood 状态,身份(构成名词)/ childhood童年,livelihood生计
-ic 学术,职业,……的/ music音乐,atomic原子的
-ice 人,抽象名词/ service服务,novice新手
-ics 学术(构成名词)/ physics物理学,optics光学
-ing 总称,抽象名词/ clothing衣服,building建筑,feeling感觉
-ion 物品,抽象名词/ cushion座垫,expression表达
-ism 主义,宗教/ Marxism马克思主义,Islamism伊斯兰教
-ist …者(构成名词)/ communist共产主义者,dentist牙医
-ive 人,物,…的/ native本地人,attractive有吸引力的
-less 无…的/ homeless无家可归的,fearless无畏的
-logy 学(构成名词)/ zoology动物学,biology生物学
-ly …的,…地/ daily每日的,quickly迅速地
-ment 状况,物,组织/ development发展,department部门
-ness 抽象名词/ darkness黑暗,kindness和蔼
-ous 有…的(构成形容词)/ famous著名的,dangerous危险的
-ship 状况,事物(构成名词)/ friendship友谊,leadership领导能力
-sion, —tion 动作,性质,状态/ expansion扩展,description描述
-th 状况,第…/ youth青春,health健康,fifth第五
-ty状况,…十/ specialty专业,safety安全,fifty五十
-ure 状况,物(构成名词)/ pleasure快乐,picture图画
-y 状况,学术,小…的/ harmony和谐,botany植物学,baby婴儿
三、英语常用词根表
(说明:黑体字为英语词根及其含义,斜杠/后面为构词举例)
ag,act做/ agent代理人, actor演员
art 技艺/ article文章
bas 低的/ basic基本的
bio 生命,生物/ biology生物学
ced,ceed,cess走/ recede退却,proceed前进,success成功
cid,cis 切/ decide决定,incise切开
cit 唤起/ excite使兴奋
clud,clus关闭/ include包含,conclusive最终的
cord 心/ concord和睦
cred,credit 相信/ credible可信的,discredit怀疑
cult 耕作/ agriculture农业
dic,dict 说/ indicate指出,dictator独裁者
doc,doct 教/ document文件,doctor博士
duc,duct 引导/ reduce减少,product产品
fac,fact,fect 做/ facile易做的,factory工厂,infect传染
fam 名声/ famous著名
fer 带来,产生/ difference不同的,suffer经受
fin 末尾/ final最后的,finish结束
form 形成,组成/ reform改革,inform通知
fort,forc 强/ effort努力,force力量
geo 大地/ geography地理学
grad,gress 脚步/ graduate毕业,progress进步
gram 字符/ program节目单,telegram电报
ide 外观,形式/ idea想法,ideal理想的
ject 投掷/ object目标,subject主题
leg,lig,lect 挑选/ elegant雅致的,eligible合格的,select选择
log,logue 说话/ apologize道歉,dialogue对话
mand,mend 命令/ demand要求,command命令
min 较小,较少/ minute分钟,minority少数民族
mit,miss 送,发/ submit呈交,dismiss解雇
mot,mov,mob 运动/ remote遥远的,remove迁移,mobile移动的
nat 出生/ native天生的,nature自然界
nunci,nounc 讲述/ pronounce发音,enunciate宣布
ord,ordin 次序/ order秩序,ordinary平常的
part 部分/ apart分离,department部门
pend,pens 悬挂,支付/ depend依靠,expensive昂贵的
pet,petit 寻求,追求/ compete比赛,competitor竞争对手
pos,posit 放置/ deposit储蓄,propose提出
port 运送/ import进口,report报告
reg,rect 划直线,治理/ regular正规的,correct正确的
sci 知晓/ science科学,scientist科学家
sent,sens 感觉/ sentence句子,nonsense废话
serv 奴仆/ servant仆人,service服务
sid,sess 坐/ president主席,possess占有
spec,spect 看/ respect尊敬,special特别的
st,stat 站立/ stay停留,station车站
tain,ten,tent,tin 持有/ contain容纳,content满意,continue继续
un 单一/ unit单位,united联合的
ven,vent 发生,来临/ event事件,convent召集
vis,vid,view 看见/ visit参观,evidence证据,review复习

使用Kmer估计基因组大小

1. GCE 简介

GCE(Genome Characteristics Estimation) 是华大基因用于基因组评估的软件,其参考文献为:Estimation of genomic characteristics by analyzing k-mer frequency in de novo genome projects。下载地址:ftp://ftp.genomics.org.cn/pub/gce

GCE 软件包中主要包含 kmer_freq_hash 和 gce 两支程序。前者用于进行 kmer 的频数统计,后者在前者的结果上进行基因组大小的准确估算。

2. GCE 下载和安装

$ wget ftp://ftp.genomics.org.cn/pub/gce/gce-1.0.0.tar.gz
$ tar zxf gce-1.0.0.tar.gz -C /opt/biosoft

3. kmer_freq_hash 的使用

kmer_freq_hash 的常用例子:

$ /opt/biosoft/gce-1.0.0/kmerfreq/kmer_freq_hash/kmer_freq_hash \
  -k 21 -l reads.list -a 10 -d 10 -t 24 -i 50000000 -o 0 -p species &> kmer_freq.log

kmer_freq_hash 的常用参数:

-k <17>
    设置 kmer 的大小。该值为 9~27,默认值为 17 。
-l string
    list文本文件,其中每行为一个fastq文件的路径。
-t int
    使用的线程数,默认为 1 。
-i int
    初始的 hash 表大小,默认为 1048576。该值最好设置为 (kmer 的种类数 / 0.75)/ 线程数。如果基因组大小为 100M,测序了 40M 个 reads,reads 的长度为 100bp,测序错误率为 1%,kmer的大小为 21,则kmer的种类数为100M+40M*100*1%*21=940M,若使用24线程,则该参数设置为 i=940M/0.75/24=52222222。
-p string
    设置输出文件的前缀。
-o int
    是否输出 k-mer 序列。1: yes, 0: no,默认为 1 。推荐选 0 以节约运行时间。
-q int
    设置fastq文件的phred格式,默认为 64。该值可以为 33 或 63。
-c double
    设置k-mer最小的精度,该值位于 0~0.99,或为 -1。 -1 表示不对 kmer进行过滤。设置较高的精度,可以用于过滤低质量 kmer。精度是由 phred 格式的碱基质量计算得来的。
-r int
    设置获取 k-mer 使用到的 reads 长度。默认使用 reads 的全长。
-a int
    忽略read前面该长度的碱基。
-d int
    忽略read后面该长度的碱基。
-g int
    设置使用该数目的碱基来获取 k-mers,默认是使用所有的碱基来获取 k-mer。

kmer_freq_hash 的主要结果文件为 species.freq.stat。该文件有 2 列:第1列是kmer重复的次数,第二列是kmer的种类数。该文件有255行,第225行表示kmer重复次数>=255的kmer的总的种类数。该文件作为 gce 的输入文件。
kmer_freq_hash 的输出到屏幕上的信息结果保存到文件 kmer_freq.log 文件中。该文件中有粗略估计基因组的大小。其中的 Kmer_individual_num 数据作为 gce 的输入参数。

4. gce 的使用

gce 的常用例子:

$ /opt/biosoft/gce-1.0.0/gce \
  -f species.freq.stat -c 85 -g 4112118028 -m 1 -D 8 -b 1 > species.table 2> species.log

gce 的常用参数:

-f string
    kmer depth frequency file
-c int
    kmer depth frequency 的主峰对应的 depth。gce 会在该值附近找主峰。
-g int
    总共的 kmer 数。一定要设定该值,否则 gce 会直接使用 -f 指定的文件计算 kmer 的总数。由于默认下该文件中最大的 depth 为 255,因此,软件自己计算的值比真实的值偏小。同时注意该值包含低覆盖度的 kmer。
-M int
    支持最大的 depth 值,默认为 256 。
-m int
    估算模型的选择,离散型(0),连续型(1)。默认为 0,对真实数据推荐选择 1 。
-D int
    precision of expect value,默认为 1。如果选择了 -m 1,推荐设置该值为 8。
-H int
    使用杂合模式(1),不使用杂合模式(0)。默认值为 0。只有明显存在杂合峰的时候,才选择该值为 1 。
-b int
    数据是(1)否(0)有 bias。当 K > 19时,需要设置 -b 1 。

gce 的结果文件为 species.table 和 species.log 。species.log 文件中的主要内容:

raw_peak   now_node    low_kmer    now_kmer    cvg genome_size a[1]    b[1]
84  35834245    22073804    4044916750  84.6637 4.83093e+07 0.928318    0.637648

raw_peak: 覆盖度为 84 的 kmer 的种类数最多,为主峰。
now_node: kmer的种类数。
low_kmer: 低覆盖度的 kmer 数。
now_kmer: 去除低覆盖度的 kmer 数,此值 = (-g 参数指定的总 kmer 数) - low_kmer 。
cvg:估算出的平均覆盖度
genome_size:基因组大小,该值 = now_kmer / cvg 。
a[1]: 在基因组上仅出现 1 次的 kmer 之 种类数比例。
b[1]: 在基因组上仅出现 1 次的 kmer 之 数量比例。该值代表着基因组上拷贝数为 1 的序列比例。

如果使用 -H 1 参数,则会得额外得到如下信息:

for hybrid: a[1/2]=0.223671 a1=0.49108
kmer-species heterozygous ratio is about 0.125918

上面结果中,0.125918 是由 a[1/2] 计算出来的。 0.125918 = a[1/2] / ( 2- a[1/2] ) 。
a[1/2]=0.223671 表示在所有的 uniqe kmer 中,有 0.223671 比例的 kmer 属于杂合 kmer 。

此外,有 a[1/2] 和 b[1/2] 的值在最后的统计结果中。重复序列的含量 = 1 - b[1/2] - b[1] 。

则杂合率 = 0.125918 / kmer_size 。 若计算出的杂合率低于 0.2%,个人认为测序数据应该是纯合的。这时候,应该不使用 -H 1 参数。使用 -H 1 参数会对基因组的大小和重复序列含量估算造成影响。

python (bytes,str,unicode)

字符串编码常用类型:utf-8,gb2312,cp936,gbk等。python中,我们使用decode()和encode()来进行解码和编码。

在python2.x中,使用unicode类型作为编码的基础类型。

 decode              encode

str ———> unicode ———>str

(1)str和unicode都是basestring的子类。

(2)str是字节串,由unicode经过编码(encode)后的字节组成的;unicode是真正意义上的字符串,由字符组成 。

在python3.x中,取消了unicode类型,代替它的是使用unicode字符的字符串类型(str),字符串类型(str)成为基础类型如下所示,而编码后的变为了字节类型(bytes)但是两个函数的使用方法不变:

     decode              encode

bytes ——> str(unicode)——>bytes

01QoN7aXN1il

字符串可以编码成字节包,而字节包可以解码成字符串。

>>>'€20'.encode('utf-8')
b'\xe2\x82\xac20'
>>> b'\xe2\x82\xac20'.decode('utf-8')
'€20'

python3中bytes与string的互相转换

# str to bytes 
bytes(s, encoding = "utf-8")  
# bytes to str  
str(b, encoding = "utf-8")