GATK流程

2023-11-03

一、使用GATK前须知事项:
(1)对GATK的测试主要使用的是人类全基因组和外显子组的测序数据,而且全部是基于illumina数据格式,目前还没有提供其他格式文件(如Ion Torrent)或者实验设计(RNA-Seq)的分析方法。
(2)GATK是一个应用于前沿科学研究的软件,不断在更新和修正,因此,在使用GATK进行变异检测时,最好是下载最新的版本,目前的版本是2.8.1(2014-02-25)。下载网站:http://www.broadinstitute.org/gatk/download。
(3)在GATK使用过程中(见下面图),有些步骤需要用到已知变异信息,对于这些已知变异,GATK只提供了人类的已知变异信息,可以在GATK的FTP站点下载(GATK resource bundle)。如果要研究的不是人类基因组,需要自行构建已知变异,GATK提供了详细的构建方法。

(4)GATK在进行BQSR和VQSR的过程中会使用到R软件绘制一些图,因此,在运行GATK之前最好先检查一下是否正确安装了R和所需要的包,所需要的包大概包括ggplot2、gplots、bitops、caTools、colorspace、gdata、gsalib、reshape、RColorBrewer等。如果画图时出现错误,会提示需要安装的包的名称。

二、GATK的使用流程

GATK最佳使用方案:共3大步骤。原始数据的处理—变异检测—初步分析。


第一大步:原始数据的处理

 
1. 对原始下机fastq文件进行过滤和比对(mapping)
对于Illumina下机数据推荐使用bwa进行mapping。
 
Bwa比对步骤大致如下:
(1)对参考基因组构建索引:
     例子:bwa index -a bwtsw hg19.fa。最后生成文件:hg19.fa.amb、hg19.fa.ann、hg19.fa.bwt、hg19.fa.pac和hg19.fa.sa。
     构建索引时需要注意的问题:bwa构建索引有两种算法,两种算法都是基于BWT的,这两种算法通过参数-a is 和-a bwtsw进行选择。

     其中-a bwtsw对于短的参考序列是不工作的,必须要大于等于10Mb;-a is是默认参数,这个参数不适用于大的参考序列,必须要小于等于2G。
(2)寻找输入reads文件的SA坐标。
     对于pair end数据,每个reads文件单独做运算,single end数据就不用说了,只有一个文件。
     例子: pair end:
bwa  aln  hg19.fa  read1.fq.gz  -l 30  -k 2  -t 4  -I  > read1.fq.gz.sai
bwa  aln  hg19.fa  read2.fq.gz  -l 30  -k 2  -t 4  -I  > read2.fq.gz.sai
single end:
bwa  aln  hg19.fa  read.fq.gz  -l 30  -k 2  -t 4  -I  > read.fq.gz.sai
主要参数说明:
-o int:允许出现的最大gap数。
-e int:每个gap允许的最大长度。
-d int:不允许在3’端出现大于多少bp的deletion。
-i int:不允许在reads两端出现大于多少bp的indel。
-l int:Read前多少个碱基作为seed,如果设置的seed大于read长度,将无法继续,最好设置在25-35,与-k 2 配合使用。
-k int:在seed中的最大编辑距离,使用默认2,与-l配合使用。
-t int: 要使用的线程数。
-R int:此参数只应用于pair end中,当没有出现大于此值的最佳比对结果时,将会降低标准再次进行比对。增加这个值可以提高配对比对的准确率,但是同时会消耗更长的
           时间,默认是32。
-I int:表示输入的文件格式为Illumina 1.3+数据格式。
-B int:设置标记序列。从5’端开始多少个碱基作为标记序列,当-B为正值时,在比对之前会将每个read的标记序列剪切,并将此标记序列表示在BC SAM 标签里,对于
           pair end数据,两端的标记序列会被连接。
-b :指定输入格式为bam格式。bwa  aln  hg19.fa  read.bam  > read.fq.gz.sai
 
(3)生成sam格式的比对文件。如果一条read比对到多个位置,会随机选择一种。
     例子:single end:bwa  samse  hg19.fa  read.fq.gz.sai  read.fq.gz  > read.fq.gz.sam
           参数:-n int:如果reads比对次数超过多少次,就不在XA标签显示。
                     -r str:定义头文件。‘@RG\tID:foo\tSM:bar’,如果在此步骤不进行头文件定义,在后续GATK分析中还是需要重新增加头文件。
           pair end:bwa sampe -a 500 read1.fq.gz.sai read2.fq.gz.sai read1.fq.gz read2.fq.gz > read.sam
           参数:-a int:最大插入片段大小。
                     -o int:pair end两reads中其中之一所允许配对的最大次数,超过该次数,将被视为single end。降低这个参数,可以加快运算速度,

对于少于30bp的read,建议降低-o值。
                     -r str:定义头文件。同single end。
                    -n int:每对reads输出到结果中的最多比对数。
 
对于最后得到的sam文件,将比对上的结果提取出来(awk即可处理),即可直接用于GATK的分析。
注意:由于GATK在下游的snpcalling时,是按染色体进行callsnp的。因此,在准备原始sam文件时,可以先按染色体将文件分开,这样会提高运行速度。但是当数据量不足时,可能会影响后续的VQSR分析,这是需要注意的。
 
2. 对sam文件进行进行重新排序(reorder)
由BWA生成的sam文件时按字典式排序法进行的排序(lexicographically)进行排序的(chr10,chr11…chr19,chr1,chr20…chr22,chr2,chr3…chrM,chrX,chrY),但是GATK在进行callsnp的时候是按照染色体组型(karyotypic)进行的(chrM,chr1,chr2…chr22,chrX,chrY),因此要对原始sam文件进行reorder。可以使用picard-tools中的ReorderSam完成。
e.g.
java -jar picard-tools-1.96/ReorderSam.jar
I=hg19.sam
O=hg19.reorder_00.sam
REFERENCE=hg19.fa
 
注意:
1. 这一步的头文件可以人工加上,同时要确保头文件中有的序号在下面序列中也有对应的。虽然在GATK网站上的说明chrM可以在最前也可以在最后,但是当把chrM放在最后时可能会出错。
2. 在进行排序之前,要先构建参考序列的索引。
   e.g. samtools faidx hg19.fa。最后生成的索引文件:hg19.fa.fai。
3. 如果在上一步想把大文件切分成小文件的时候,头文件可以自己手工加上,之后运行这一步就好了。
 
 
3. 将sam文件转换成bam文件(bam是二进制文件,运算速度快)
这一步可使用samtools view完成。
e.g. samtools view -bS hg19.reorder_00.sam -o hg19.sam_01.bam
 
4. 对bam文件进行sort排序处理
这一步是将sam文件中同一染色体对应的条目按照坐标顺序从小到大进行排序。可以使用picard-tools中SortSam完成。
e.g.
java -jar picard-tools-1.96/SortSam.jar
INPUT=hg19.sam_01.bam
OUTPUT=hg19.sam.sort_02.bam
SORT_ORDER=coordinate
 
5. 对bam文件进行加头(head)处理
GATK2.0以上版本将不再支持无头文件的变异检测。加头这一步可以在BWA比对的时候进行,通过-r参数的选择可以完成。如果在BWA比对期间没有选择-r参数,可以增加这一步骤。可使用picard-tools中AddOrReplaceReadGroups完成。
e.g.
java -jar picard-tools-1.96/AddOrReplaceReadGroups.jar
I=hg19.sam.sort_02.bam
O=hg19.reorder.sort.addhead_03.bam
ID=hg19ID
LB=hg19ID
PL=illumine
PU=hg19PU
SM=hg19
ID str:输入reads集ID号;LB:read集文库名;PL:测序平台(illunima或solid);PU:测序平台下级单位名称(run的名称);SM:样本名称。
注意:这一步尽量不要手动加头,本人尝试过多次手工加头,虽然看起来与软件加的头是一样的,但是程序却无法运行。
 
6. Merge
如果一个样本分为多个lane进行测序,那么在进行下一步之前可以将每个lane的bam文件合并。
e.g.
java -jar  picard-tools-1.70/MergeSamFiles.jar
INPUT=lane1.bam
INPUT=lane2.bam
INPUT=lane3.bam
INPUT=lane4.bam
……
INPUT=lane8.bam
OUTPUT=sample.bam
 
7. Duplicates Marking
在制备文库的过程中,由于PCR扩增过程中会存在一些偏差,也就是说有的序列会被过量扩增。这样,在比对的时候,这些过量扩增出来的完全相同的序列就会比对到基因组的相同位置。而这些过量扩增的reads并不是基因组自身固有序列,不能作为变异检测的证据,因此,要尽量去除这些由PCR扩增所形成的duplicates,这一步可以使用picard-tools来完成。去重复的过程是给这些序列设置一个flag以标志它们,方便GATK的识别。还可以设置 REMOVE_DUPLICATES=true 来丢弃duplicated序列。对于是否选择标记或者删除,对结果应该没有什么影响,GATK官方流程里面给出的例子是仅做标记不删除。这里定义的重复序列是这样的:如果两条reads具有相同的长度而且比对到了基因组的同一位置,那么就认为这样的reads是由PCR扩增而来,就会被GATK标记。
e.g.
java -jar picard-tools-1.96/MarkDuplicates.jar
REMOVE_DUPLICATES= false
MAX_FILE_HANDLES_FOR_READ_ENDS_MAP=8000
INPUT=hg19.reorder.sort.addhead_03.bam
OUTPUT=hg19.reorder.sort.addhead.dedup_04.bam METRICS_FILE=hg19.reorder.sort.addhead.dedup_04.metrics
注意: dedup这一步只要在library层面上进行就可以了,例如一个sample如果建了多个库的话,对每个库进行dedup即可,不需要把所有库合成一个sample再进行dedup操作。其实并不能准确的定义被mask的reads到底是不是duplicates,重复序列的程度与测序深度和文库类型都有关系。最主要目的就是尽量减小文库构建时引入文库的PCR bias。
 
8. 要对上一步得到的结果生成索引文件
可以用samtools完成,生成的索引后缀是bai。
e.g.
samtools index hg19.reorder.sort.addhead.dedup_04.bam

9.Local realignment around indels
这一步的目的就是将比对到indel附近的reads进行局部重新比对,将比对的错误率降到最低。一般来说,绝大部分需要进行重新比对的基因组区域,都是因为插入/缺失的存在,因为在indel附近的比对会出现大量的碱基错配,这些碱基的错配很容易被误认为SNP。还有,在比对过程中,比对算法对于每一条read的处理都是独立的,不可能同时把多条reads与参考基因组比对来排错。因此,即使有一些reads能够正确的比对到indel,但那些恰恰比对到indel开始或者结束位置的read也会有很高的比对错误率,这都是需要重新比对的。Local realignment就是将由indel导致错配的区域进行重新比对,将indel附近的比对错误率降到最低。
主要分为两步:
第一步,通过运行RealignerTargetCreator来确定要进行重新比对的区域。
e.g.
java -jar GenomeAnalysisTK.jar
-R hg19.fa
-T RealignerTargetCreator
-I hg19.reorder.sort.addhead.dedup_04.bam
-o hg19.dedup.realn_06.intervals
-known Mills_and_1000G_gold_standard.indels.hg19.vcf
-known 1000G_phase1.indels.hg19.vcf
 
参数说明:
-R:               参考基因组;
-T:               选择的GATK工具;
-I:                输入上一步所得bam文件;
-o:                输出的需要重新比对的基因组区域结果;
-maxInterval: 允许进行重新比对的基因组区域的最大值,不能太大,太大耗费会很长时间,默认值500;
-known:        已知的可靠的indel位点,指定已知的可靠的indel位点,重比对将主要围绕这些位点进行,对于人类基因组数据而言,可以直接指定GATK resource bundle里面的indel文件(必须是vcf文件)。
 
对于known sites的选择很重要,GATK中每一个用到known sites的工具对于known sites的使用都是不一样的,但是所有的都有一个共同目的,那就是分辨真实的变异位点和不可信的变异位点。如果不提供这些known sites的话,这些统计工具就会产生偏差,最后会严重影响结果的可信度。在这些需要知道known sites的工具里面,只有UnifiedGenotyper和HaplotypeCaller对known sites没有太严格的要求。
 
如果你所研究的对象是人类基因组的话,那就简单多了,因为GATK网站上对如何使用人类基因组的known sites做出了详细的说明,具体的选择方法如下表,这些文件都可以在GATK resource bundle中下载。

但是如果你要研究的不是人类基因组的话,那就有点麻烦了,http://www.broadinstitute.org/gatk/guide/article?id=1243,这个网站上是做非人类基因组时,大家分享的经验,可以参考一下。这个known sites如果实在没有的话,也是可以自己构建的:首先,先使用没有经过矫正的数据进行一轮SNP calling;然后,挑选最可信的SNP位点进行BQSR分析;最后,在使用这些经过BQSR的数据进行一次真正的SNP calling。这几步可能要重复好多次才能得到可靠的结果。

第二步,通过运行IndelRealigner在这些区域内进行重新比对。
e.g.
java -jar GenomeAnalysisTK.jar
-R hg19.fa
-T IndelRealigner
-targetIntervals hg19.dedup.realn_06.intervals
-I hg19.reorder.sort.addhead.dedup_04.bam
-o hg19.dedup.realn_07.bam
-known Mills_and_1000G_gold_standard.indels.hg19.vcf
-known 1000G_phase1.indels.hg19.vcf
运行结束后,生成的hg19.dedup.realn_07.bam即为最后重比对后的文件。
注意:1. 第一步和第二步中使用的输入文件(bam文件)、参考基因组和已知indel文件必须是相同的文件。
         2. 当在相同的基因组区域发现多个indel存在时,这个工具会从其中选择一个最有可能存在比对错误的indel进行重新比对,剩余的其他indel不予考虑。
         3. 对于454下机数据,本工具不支持。此外,这一步还会忽略bwa比对中质量值为0的read以及在CIGAR信息中存在连续indel的reads。
 
10.Base quality score recalibration
这一步是对bam文件里reads的碱基质量值进行重新校正,使最后输出的bam文件中reads中碱基的质量值能够更加接近真实的与参考基因组之间错配的概率。这一步适用于多种数据类型,包括illunima、solid、454、CG等数据格式。在GATK2.0以上版本中还可以对indel的质量值进行校正,这一步对indel calling非常有帮助
 
举例说明,在reads碱基质量值被校正之前,我们要保留质量值在Q25以上的碱基,但是实际上质量值在Q25的这些碱基的错误率在1%,也就是说质量值只有Q20,这样就会对后续的变异检测的可信度造成影响。还有,在边合成边测序的测序过程中,在reads末端碱基的错误率往往要比起始部位更高。另外,AC的质量值往往要低于TG。BQSR的就是要对这些质量值进行校正。
 
BQSR主要有三步:
第一步:利用工具BaseRecalibrator,根据一些known sites,生成一个校正质量值所需要的数据文件,GATK网站以“.grp”为后缀命名。
e.g.
java -jar GenomeAnalysisTK.jar
-T BaseRecalibrator
-R hg19.fa
-I ChrALL.100.sam.dedup.realn.07.bam
-knownSites dbsnp_137.hg19.vcf
-knownSites Mills_and_1000G_gold_standard.indels.hg19.vcf
-knownSites 1000G_phase1.indels.hg19.vcf
-o ChrALL.100.sam.recal.08-1.grp
 
第二步:利用第一步生成的ChrALL.100.sam.recal.08-1.grp来生成校正后的数据文件,也是以“.grp”命名,这一步主要是为了与校正之前的数据进行比较,最后生成碱基质量值校正前后的比较图,如果不想生成最后BQSR比较图,这一步可以省略。
e.g.
java -jar GenomeAnalysisTK.jar
-T BaseRecalibrator
-R hg19.fa
-I ChrALL.100.sam.dedup.realn.07.bam
-BQSR ChrALL.100.sam.recal.08-1.grp
-o GATK/hg19.recal.08-2.grp
-knownSites dbsnp_137.hg19.vcf
-knownSites Mills_and_1000G_gold_standard.indels.hg19.vcf
-knownSites 1000G_phase1.indels.hg19.vcf
 
第三步:利用工具PrintReads将经过质量值校正的数据输出到新的bam文件中,用于后续的变异检测。
e.g.
java -jar GenomeAnalysisTK.jar
-T PrintReads
-R hg19.fa
-I ChrALL.100.sam.dedup.realn.07.bam
-BQSR ChrALL.100.sam.recal.08-1.grp
-o ChrALL.100.sam.recal.08-3.grp.bam
 
主要参数说明:
-bqsrBAQGOP:BQSR BAQ gap open 罚值,默认值是40,如果是对全基因组数据进行BQSR分析,设置为30会更好。
-lqt:                在计算过程中,该算法所能考虑的reads两端的最小质量值。如果质量值小于该值,计算过程中将不予考虑,默认值是2。
    注意:(1)当bam文件中的reads数量过少时,BQSR可能不会正常工作,GATK网站建议base数量要大于100M才能得到比较好的结果。
         (2)除非你所研究的样本所得到的reads数实在太少,或者比对结果中的mismatch基本上都是实际存在的变异,否则必须要进行BQSR这一步。对于人类基因组,即使有了dbSNP和千人基因组的数据,还有很多mismatch是错误的。因此,这一步能做一定要做。
 
11. 分析和评估BQSR结果
这一步会生成评估前后碱基质量值的比较结果,可以选择使用图片和表格的形式展示。
e.g.
java -jar GenomeAnalysisTK.jar
-T AnalyzeCovariates
-R hg19.fa
-before ChrALL.100.sam.recal.08-1.grp
-after ChrALL.100.sam.recal.08-2.grp
-csv ChrALL.100.sam.recal.grp.09.csv
-plots ChrALL.100.sam.recal.grp.09.pdf
 
参数解释:
-before: 基于原始比对结果生成的第一次校对表格。
-after:    基于第一次校对表格生成的第二次校对表格。
-plots:    评估BQSR结果的报告文件。
-csv:      生成报告中图标所需要的所有数据。
 
12.Reduce bam file
这一步是使用ReduceReads这个工具将bam文件进行压缩,生成新的bam文件,新的bam文件仍然保持bam文件的格式和所有进行变异检测所需要的信息。这样不仅能够节省存储空间,也方便后续变异检测过程中对数据的处理。
e.g.
java -jar GenomeAnalysisTK.jar
-T ReduceReads
-R hg19.fa
-I ChrALL.100.sam.recal.08-3.grp.bam
-o ChrALL.100.sam.recal.08-3.grp.reduce.bam
 
到此为止,GATK流程中的第一大步骤就结束了,完成了variants calling所需要的所有准备工作,生成了用于下一步变异检测的bam文件。


第二大步:变异检测
 
1. Variant Calling
GATK在这一步里面提供了两个工具进行变异检测——UnifiedGenotyper和HaplotypeCaller。其中HaplotypeCaller一直还在开发之中,包括生成的结果以及计算模型和命令行参数一直在变动,因此,目前使用比较多的还是UnifiedGenotyper。此外,HaplotypeCaller不支持Reduce之后的bam文件,因此,当选择使用HaplotypeCaller进行变异检测时,不需要进行Reduce reads。
 
UnifiedGenotyper是集合多种变异检测方法而成的一种Variants Caller,既可以用于单个样本的变异检测,也可以用于群体的变异检测。UnifiedGenotyper使用贝叶斯最大似然模型,同时估计基因型和基因频率,最后对每一个样本的每一个变异位点和基因型都会给出一个精确的后验概率。
 
e.g.
java -jar GenomeAnalysisTK.jar
-glm BOTH
-l INFO
-R hg19.fa
-T UnifiedGenotyper
-I ChrALL.100.sam.recal.08-3.grp.reduce.bam
-D dbsnp_137.hg19.vcf
-o ChrALL.100.sam.recal.10.vcf
-metrics ChrALL.100.sam.recal.10.metrics
-stand_call_conf  10
-stand_emit_conf  30
 
上述命令将对输入的bam文件中的所有样本进行变异检测,最后生成一个vcf文件,vcf文件中会包含所有样本的变异位点和基因型信息。但是现在所得到的结果是最原始的、没有经过任何过滤和校正的Variants集合。这一步产生的变异位点会有很高的假阳性,尤其是indel,因此,必须要进行进一步的筛选过滤。这一步还可以指定对基因组的某一区域进行变异检测,只需要增加一个参数 -L:target_interval.list,格式是bed格式文件。
 
主要参数解释:
-A:                     指定一个或者多个注释信息,最后输出到vcf文件中。
-XA:                  指定不做哪些注释,最后不会输出到vcf文件中。
-D:                     已知的snp文件。
-glm:                  选择检测变异的类型。SNP表示只进行snp检测;INDEL表示只对indel进行检测;BOTH表示同时检测snp和indel。默认值是SNP。
-hets:                  杂合度的值,用于计算先验概率。默认值是0.001。
-maxAltAlleles:   容许存在的最大alt allele的数目,默认值是6。这个参数要特别注意,不要轻易修改默认值,程序设置的默认值几乎可以满足所有的分析,如果修改了可能会导致程序无法运行。
-mbq:                       变异检测时,碱基的最小质量值。如果小于这个值,将不会对其进行变异检测。这个参数不适用于indel检测,默认值是17。
-minIndelCnt:    在做indel calling的时候,支持一个indel的最少read数量。也就是说,如果同时有多少条reads同时支持一个候选indel时,软件才开始进行indel calling。降低这个值可以增加indel calling的敏感度,但是会增加耗费的时间和假阳性。
-minIndelFrac:   在做indel calling的时候,支持一个indel的reads数量占比对到该indel位置的所有reads数量的百分比。也就是说,只有同时满足-minIndelCnt和-minIndelFrac两个参数条件时,才会进行indel calling。
-onlyEmitSamples:当指定这个参数时,只有指定的样本的变异检测结果会输出到vcf文件中。
-stand_emit_conf:在变异检测过程中,所容许的最小质量值。只有大于等于这个设定值的变异位点会被输出到结果中。
-stand_call_conf:在变异检测过程中,用于区分低质量变异位点和高质量变异位点的阈值。只有质量值高于这个阈值的位点才会被视为高质量的。低于这个质量值的变异位点会在输出结果中标注LowQual。在千人基因组计划第二阶段的变异检测时,利用35x的数据进行snp calling的时候,当设置成50时,有大概10%的假阳性。
-dcov:                      这个参数用于控制检测变异数据的coverage(X),4X的数据可以设置为40,大于30X的数据可以设置为200。
 
注意:GATK进行变异检测的时候,是按照染色体排序顺序进行的(先call chr1,然后chr2,然后chr3…最后chrY),并非多条染色体并行检测的,因此,如果数据量比较大的话,建议分染色体分别进行,对性染色体的变异检测可以同常染色体方法。
大多数参数的默认值可以满足大多数研究的需求,因此,在做变异检测过程中,如果对参数意义不是很明确,不建议修改。

2. 对原始变异检测结果进行过滤(hard filter and VQSR)
这一步的目的就是对上一步call出来的变异位点进行过滤,去掉不可信的位点。这一步可以有两种方法,一种是通过GATK的VariantFiltration,另一种是通过GATK的VQSR(变异位点质量值重新校正)进行过滤。
 
通过GATK网站上提供的最佳方案可以看出,GATK是推荐使用VASR的,但使用VQSR数据量一定要达到要求,数据量太小无法使用高斯模型。还有,在使用VAQR时,indel和snp要分别进行。
 
VQSR原理介绍:
这个模型是根据已有的真实变异位点(人类基因组一般使用HapMap3中的位点,以及这些位点在Omni 2.5M SNP芯片中出现的多态位点)来训练,最后得到一个训练好的能够很好的评估真伪的错误评估模型,可以叫他适应性错误评估模型。这个适应性的错误评估模型可以应用到call出来的原始变异集合中已知的变异位点和新发现的变异位点,进而去评估每一个变异位点发生错误的概率,最终会给出一个得分。这个得分最后会被写入vcf文件的INFO信息里,叫做VQSLOD,就是在训练好的混合高斯模型下,一个位点是真实的概率比上这个位点可能是假阳性的概率的log odds ratio(对数差异比),因此,可以定性的认为,这个值越大就越好。
 
VQSR主要分两个步骤,这两个步骤会使用两个不同的工具:VariantRecalibrator和ApplyRecalibration。
VariantRecalibrator:通过大量的高质量的已知变异集合的各个注释(包括很多种,后面介绍)的值来创建一个高斯混合模型,然后用于评估所有的变异位点。这个文件最后将生成一个recalibration文件。
原理简单介绍:       这个模型首先要拿到真实变异数据集和上一步骤中得到的原始变异数据集的交集,然后对这些SNP值相对于具体注释信息的分布情况进行模拟,将这些变异位点进行聚类,最后根据聚类结果赋予所有变异位点相应的VQSLOD值。越接近聚类核心的变异位点得到的VQSLOD值越高。
 
ApplyRecalibration:这一步将模型的各个参数应用于原始vcf文件中的每一个变异位点,这时,每一个变异位点的注释信息列中都会出现一个VQSLOD值,然后模型会根据这个值对变异位点进行过滤,过滤后的信息会写在vcf文件的filter一列中。
原理简单介绍:       在VariantRecalibrator这一步中,每个变异位点已经得到了一个VQSLOD值了,同时,这些LOD值在训练集里也进行了排序。当你在这一步中设置一个tranche sensitivity 的阈值(这个阈值一般是一个百分数,如设置成99%),那么,如果LOD值从大到小排序的话,这个程序就会认为在这个训练集中,LOD值在前99%的是可信的,当这个值低于这个阈值,就认为是错误的。最后,程序就会用这个标准来过滤上一步call出来的原始变异集合。如果LOD值超过这个阈值,在filter那一列就会显示PASS,如果低于这个值就会被过滤掉,但是这些位点仍然会显示在结果里面,只不过会在filter那一列标示出他所属于的tranche sensitivity 的名称。在设置tranche sensitivity 的阈值时,要兼顾敏感度和质量值。


在VariantRecalibrator这一步,程序会通过已知位点来训练概率模型,训练完成后会生成一组图片,而且每对注释信息都对应一组图片(上图),这组图片能够帮助我们理解一个概率模型是否与我们的数据相匹配,也就是说这个模型能不能很好的区分假阳性和真实位点。
      
上图是第一步完成后生成的一个报告的一部分,图中只表示了一对注释所对应的图。左上角的图表示的是适合当前数据的概率密度图,绿色区域表示高质量变异位点所在位置,红色区域表示低质量概率分布区域。如果变异位点分布在红色区域,则会被过滤掉。右上角图中红色的点表示在经过VQSR之后被过滤掉的变异位点,黑色的表示的是留下来的。红色的表示的都是没有达到所设定的tranche sensitivity 阈值的点。左下角的图表示的是用来训练模型的点,绿色的点表示通过训练进入到ApplyRecalibration的变异位点,紫色的点则表示质量值很低的,没有达到质量要求的点。右下角的图表示的是已知的和新发现的变异位点的分布,红色的点表示新发现的变异位点,而蓝色的点表示的是已知的变异位点,看这幅图就是看这两个注释信息能不能很好的区分已知的点(大部分是真实的)和未知的点(大部分是假阳性)。
 
从图中可以看出,这个模拟结果可以很好的将真实的变异位点和假阳性变异位点分开(左下图),形成了明显的界限,也就是说,如果一个变异位点的这两个注释值,只要有一个落在了界限之外,就会被过滤掉。最主要的是要看右边两个图片,只要能很好的区分开novel和known以及filtered和retained就可以。其实在如何选择注释值存在一定得主观性,因此,在做VariantRecalibrator时可以做两次,第一次尽可能的多的选择这些注释值,第一遍跑完之后,选择几个区分好的,再做一次VariantRecalibrator,然后再做ApplyRecalibration。具体每个注释值得意义可以参考:
http://www.broadinstitute.org/gatk/guide/tagged?tag=annotation这个网址中的内容,有每个注释的详细信息的链接。


tranche值的设定
前面提到了,这个值得设定是用来在后续的ApplyRecalibration中如何根据这个阈值来过滤变异位点的,也就是说,如果这个值设定的比较高的话,那么最后留下来的变异位点就会多,但同时假阳性的位点也会相应增加;如果设定的低的话,虽然假阳性会减少,但是会丢失很多真实的位点。因此,跟选择注释时一样,可以run两遍VariantRecalibrator,第一遍的时候多写几个阈值,第一遍跑完之后看结果,看那个阈值好,选择一个最好的阈值,再run一遍VariantRecalibrator。至于说怎么区分好坏,有几个标准:
1. 看结果中已知变异位点与新发现变异位点之间的比例,这个比例不要太大,因为大多数新发现的变异都是假阳性,如果太多的话,可能假阳性的比例就比较大;
2. 看保留的变异数目,这个就要根据具体的需求进行选择了。
3. 看TI/TV值,对于人类全基因组,这个值应该在2.15左右,对于外显子组,这个值应该在3.2左右,不要太小或太大,越接近这个数值越好,这个值如果太小,说明可能存在比较多的假阳性。
   
千人中所选择的tranche值是99,仅供参考。
注意:Indel不支持tranche值的选择,另外,一部分注释类型在做indel的校正时也不支持,具体信息可以详查GATK网站。
           当数据量太小时,可能高斯模型不会运行,因为变异位点数满足不了模型的统计需求。这时候可以通过降低--maxGaussian的值,让程序运行。这个值表示的是程序将变异位点分成的最大的组数,降低这个值让程序把变异位点聚类到更少的组里面,使每个组中的变异位点数增加来满足统计需求,但是这样做降低程序分辨真伪的能力。因此,在运行程序的时候,要对各方面进行权衡。

:对SNP结果进行校正
 
第一步:
java -jar GenomeAnalysisTK.jar
-R hg19.fa
--maxGaussians 4
-numBad 10000 (这个参数在最新的GATK版本里面已经没有了,用的时候注意版本,2.8.1里面不用自己设置
                         这个参数)
-T VariantRecalibrator
-mode SNP
-input ChrALL.100.sam.recal.10.vcf
-resource:hapmap,known=false,training=true,truth=true,prior=15.0 hapmap_3.3.hg19.vcf
-resource:omni,known=false,training=true,truth=false,prior=12.0 1000G_omni2.5.hg19.vcf
-resource:1000G,known=false,training=true,truth=false,prior=10.0 1000G_phase1.snps.high_confidence.hg19.vcf
-resource:dbsnp,known=true,training=false,truth=false,prior=2.0 dbsnp_137.hg19.vcf
-an QD
-an HaplotypeScore
-an MQRankSum
-an ReadPosRankSum
-an FS
-an MQ
-an InbreedingCoeff
-recalFile hg19.vcf.snp_11_Q10.recal
-tranchesFile hg19.vcf.snp_11_Q10.tranches
-rscriptFile hg19.vcf.snp_11.plot_Q10.R
-nt 4
--TStranche 90.0
--TStranche 93.0
--TStranche 95.0
--TStranche 97.0
--TStranche 99.0
--TStranche 99.9
 
先run一下上面的代码,这一步可以尽可能多的设置注释类型和tranche的值,然后根据这次跑出来的结果选择出最好的注释类型和tranche值之后,再次运行VariantRecalibrator。
 
第二步:
java -jar GenomeAnalysisTK.jar
-R hg19.fa
--maxGaussians 4
-numBad 10000
-T VariantRecalibrator
-mode SNP
-input ChrALL.100.sam.recal.10.vcf
-resource:hapmap,known=false,training=true,truth=true,prior=15.0 hapmap_3.3.hg19.vcf
-resource:omni,known=false,training=true,truth=false,prior=12.0 1000G_omni2.5.hg19.vcf
-resource:1000G,known=false,training=true,truth=false,prior=10.0 1000G_phase1.snps.high_confidence.hg19.vcf
-resource:dbsnp,known=true,training=false,truth=false,prior=2.0 dbsnp_137.hg19.vcf
-an HaplotypeScore
-an MQRankSum
--TStranche 97.0
-recalFile hg19.vcf.snp_11_Q10.recal
-tranchesFile hg19.vcf.snp_11_Q10.tranches
-rscriptFile hg19.vcf.snp_11.plot_Q10.R
-nt 4
 
这一步run出来的结果可以直接用于下一步的ApplyRecalibration。
 
第三步
java -jar GenomeAnalysisTK.jar
-R hg19.fa
-T ApplyRecalibration
-mode SNP
-input hg19.recal_10_Q10.vcf
-tranchesFile hg19.vcf.snp_12_Q10-2.tranches
-recalFile hg19.vcf.snp_12_Q10-2.recal
-o hg19.snp.filter.t97.Q10_13.snp.vcf
--ts_filter_level 97
 
最终生成的hg19.snp.filter.t97.Q10_13.snp.vcf这个文件中的SNP位点已经全部经过校正过滤,INDEL位点还是原始数据,需要对INDEL再进行一次校正过滤。
 
对INDEL结果进行校正,与SNP基本一致,只不过INDEL需要使用的known resource不一样
      
       第一步:
       同SNP 多选择一些注释类型,但是不用选择tranche值,tranche值是专门为SNP设定的,即使设定
       了这个值(2.4版本是可以计算这个的,以后就不计算了),计算出来也都是错的,这个在indel
       里不需要考虑。
 
       第二步:
       java -jar GenomeAnalysisTK.jar
       -T VariantRecalibrator
       -R hg19.fa
       -mode INDEL
       --maxGaussians 4
       -std 10.0
       -percentBad 0.12
       -input ChrALL.100.sam.recal.10.vcf
-resource:mills,known=true,training=true,truth=true,prior=12.0 Mills_and_1000G_gold_standard.indels.hg19
       -an MQ
-an FS
-an InbreedingCoeff 
-recalFile ChrALL.100.sam.recal.10.indel.recal
-tranchesFile ChrALL.100.sam.recal.10.indel.tranche
-rscriptFile ChrALL.100.sam.recal.10.indel.R
 
       第三步:
       java -jar GenomeAnalysisTK.jar
       -T ApplyRecalibration
       -R hg19.fa
       -mode INDEL
       -input hg19.snp.filter.t97.Q10_13.snp.vcf
-recalFile ChrALL.100.sam.recal.11.indel.recal
-tranchesFile ChrALL.100.sam.recal.11.indel.tranche
-o hg19.snp.filter.t97.Q10_13.both.vcf
 
最后得到的hg19.snp.filter.t97.Q10_13.both.vcf文件,就是我们最终想得到的过滤好的变异集合。
 
主要参数解释:
 
VariantRecalibrator
-badLodCutoff                  当LOD得分低于这个值的时候,就用于构建高斯混合模型的bad variants。默认值是-5。
-maxNumTrainingData      构建高斯模型过程中,用于训练的最大位点数目。如果超过这个数目,将被随机删除。默认值是2500000。
-minNumBad                   构建高斯模型的bad variants时的最少低质量值得位点数。
-recalFile                         用于ApplyRecalibration的输出文件。
-resource                          已知的变异信息。
-rscriptFile                       结果中生成图片的脚本。
-tranchesFile                    用于ApplyRecalibration的tranche结果输出文件。
-tranche                           设置tranche阈值。
-an                                  选择填加注释信息。
更多其他参数参考:
http://www.broadinstitute.org/gatk/gatkdocs/org_broadinstitute_sting_gatk_walkers_variantrecalibration_VariantRecalibrator.html
       ApplyRecalibration
         -ef                    输出结果中不显示被过滤掉的位点。
      -lodCutoff                        VQSLOD值低于这个值就过滤掉。
      -recalFile                       上一步生成的recalFile。
         -tranchesFile                    上一步生成的tranchesFile。
         -ts_filter_level                  上一步中确定的tranche值。
           更多其他参数请参考:    http://www.broadinstitute.org/gatk/gatkdocs/org_broadinstitute_sting_gatk_walkers_variantrecalibration_ApplyRecalibration.html
          
           另外,关于如何选择resource data可以参考:
           http://www.broadinstitute.org/gatk/guide/article?id=1259

 如果要分析的数据集不符合进行VQSR的标准,可以进行hard filter,这一步将使用GATK中的VariantFiltration工具来完成。具体使用方法参考:
           http://www.broadinstitute.org/gatk/gatkdocs/org_broadinstitute_sting_gatk_walkers_filters_VariantFiltration.html
          
           最后生成的vcf文件的格式说明,即每一列所代表的的内容,可参考下面的网站,有详细的说明:
           http://www.broadinstitute.org/gatk/guide/article?id=1268
          
           其实到这里就已经完成了变异检测的所有步骤,最后生成的hg19.snp.filter.t97.Q10_13.both.vcf文件就可以用于你的下游分析了。


第三大步:初步分析

           这一步主要是对上面所得到的最终vcf中的结果进行一些初步的分析,比如计算这些变异位点在dbsnp中的比例、Ti/Tv的比例、每个样本中的snp数量……。此外,还可以对变异位点的同义/非同义突变进行统计,识别是否为CpG位点以及氨基酸的简并信息等。这一步主要是利用GATK中的VariantEval来完成。

          
           需要注意的是,有些计算内容不能同时进行,例如AlleleCount和VariantSummary或者Sample和VariantSummary。如果选择了这样的组合方式,程序就会报错。但是GATK并没有告诉我们到底哪些不能同时运行,所以当选择计算内容的时候可以先做一下测试。
          
           e.g.
           java -jar GenomeAnalysisTK.jar
           -R hg19.fa
           -T VariantEval
           --eval hg19.snp.filter.t97.Q10_13.both.vcf
           -D dbsnp_137.hg19.vcf
           -o hg19.PASS.Eval_15_Final.gatkreport
          
           主要参数解释:
           --eval                       输入要进行summary的文件,也就是hg19.snp.filter.t97.Q10_13.both.vcf。
           -EV                          选择模块计算相应的分析内容,。
           --list                         列出可供选择的计算模块。
           -noEV                      不是用默认的模块,只计算用-EV选定的模块。
          
更多其他参数请参考:
           http://www.broadinstitute.org/gatk/gatkdocs/org_broadinstitute_sting_gatk_walkers_varianteval_VariantEval.html
 
##############################################################################################################
 
以上就是GATK整个流程的详细介绍了,我敢保证,如果你是第一次使用GATK,就算按照这个说明一步一步去做,也肯定会遇到很多问题,因为GATK需要注意的细节真的很多,我在这里面还有很多没有提到,遇到问题的时候可以仔细看一下报错信息,一般情况下是可以通过报错信息知道错在哪里。遇到问题的时候可以多浏览GATK网站,里面的FAQ基本上可以包括所有出现过的问题的解决方法了,可以耐心查一下。要是不想查可以在论坛上直接发起提问,管理员真的会很快给你回复的。不像同类的XXX网站只有问题没有回答,没人用也是可以理解的……。祝好运!!!
 
此时版本 GATK 2.8.1

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GATK流程 的相关文章

  • bootstrap组件:fileinput控件的非常规操作

    在fileinput控件的使用中遇到了一个问题 就是分了三次选了三个文件 点击form提交的时候只会出现最后一次选择的文件 而我想要的是选中的所有文件一起上传 多方查找之后确定了一种可行方案 分享如下 1 引用 和基本引用一样 样式和js
  • Python基础第三集:函数+模块+类,花钱也买不到....

    Python基础知识第三集 Python第一话在这里 Python第二话在这里 今天的是Python第三话 前面的知识点给大家放在上面了 零基础的小伙伴可以自己动手领取 学好Python的基础知识对我们后期 去实现Python案例帮助很大
  • docker 镜像常用命令

    1 拉取镜像 docker pull ubuntu 18 04 2 存储镜像 docker save o tools ubuntu 18 04 tar ubuntu 18 04 3 载入镜像 docker load lt ubuntu 18
  • 模型训练-3D并行

    目录 1 数据并行 Data Parallel 1 1常规数据并行 1 3 数据并行带来的显存优化效果 2 模型并行 2 1 原理 2 2 模型并行带来的显存优化结果 3 ZeRO 3 1 ZeRO1 3 2 ZeRO2 3 3 ZeRO3
  • minio基础知识介绍

    minio基础知识介绍 文章目录 minio基础知识介绍 1 概述 1 1 特性 1 2 部署运行模式 2 存储机制 2 1 纠错码 2 2 RS code编码数据恢复原理 2 3 校验和 3 minio多租户和多用户 3 1 多租户 3
  • tomcat 9 编码问题导致乱码问题(web程序乱码)

    tomcat编码设置问题 由于刚更换tomcat 9 没有修改配置文件 致使项目运行之后 web端出现个别乱码的情况 接下来将配置文件中的设置一一调整 catalina bat文件 catalina bat配置文件中需要添加内容 catal
  • 企业在APP开发时一定要注意的几方面

    随着移动互联网的不断发展 市面上的需求也随着发生了一些改变 而最初的微信小程序已满足不了解一些企业发展的需求 因此 一部分企业开始着手于APP开发 在进行APP开发时 一定要考虑以下几个方面 请点击输入图片描述 最多18字 1 确立应用程序
  • 单片机毕业设计 STM32天气预报系统设计与实现 - 嵌入式 物联网

    文章目录 0 前言 1 简介 2 主要器件 3 实现效果 4 设计原理 5 部分核心代码 6 最后 0 前言 这两年开始毕业设计和毕业答辩的要求和难度不断提升 传统的毕设题目缺少创新和亮点 往往达不到毕业答辩的要求 这两年不断有学弟学妹告诉
  • 模拟实现atoi函数(将数字字符串转换为整型)附加leetcode练习题

    各位朋友们 大家好啊 今天我为大家分享的知识是如何模拟实现atoi函数 相信大家如果能够理解这个知识 对大家以后的刷题是有帮助的 文章目录 什么是atoi函数 atoi函数的作用 先直接使用库函数看看这个函数是什么作用 都是正整数字符的字符
  • [Python知识图谱] 三.Jieba工具中文分词、添加自定义词典及词性标注详解

    本系列文章主要结合Python语言实现知识图谱构建相关工程 具有一定创新性和实用性 非常希望各位博友交流讨论 相互促进成长 前面两篇文章详细讲解了哈工大Pyltp工具 包括中文分词 词性标注 实体识别 依存句法分析和语义角色标注等 但是其中
  • 多级指针和静动态内存的跨函数访问

    参考 多级指针 静动态内存的跨函数访问 作者 枕上 发布时间 2021 07 15 00 27 17 网址 https blog csdn net jinchi boke article details 118724993 spm 1001
  • RAC安装与维护遇到的几个问题

    author skatetime 2009 05 26 rac安装还是比较顺利的 弄了一天 下面是我在安装和使用中遇到的问题 参考文档 http www oracle com technology pub articles hunter r
  • prisma 开发遇到https://xxx failed, reason: read ECONNRESET

    在使用nodejs prisma 开发时使用如下命令遇到错误 npx prisma db pull 设置proxy和https proxy问题依旧 最后使用 f 参数解决问题 npx prisma db pull f
  • ngModel:numfmt

    angularJS 报 ngModel numfmt angularJS 前台报错 Error ngModel numfmt Model is not of type number 错误 ngModel numfmt模型的类型是 numbe
  • PMD规则

    Design Rules UseSingleton If you have a class that has nothing but static methods consider making it a Singleton Note th
  • Unity常见问题集(待续)

    1 error CS0101 The namespace global already cont 分析 关于global 错误 我们不能打开两个同一名称的scripts在你的工程里 解决 如果在你的工程里有另一个 Activate Trig
  • 傅里叶变换:周期、非周期 与连续、离散

    也是之前总结的 但是感觉很重要 分享出来 也方便自己不带本子的时候能快速找到 傅里叶变化过程中 在两个域 周期和非周期 连续和离散问题
  • chatGPT本地部署

    chatGPT是一种使用自然语言生成 NLG 技术的聊天机器人 可以使用生成对话模型 GPT 训练出来的模型来回答用户的提问或对话 要在本地部署chatGPT 您需要 安装Python环境 并使用pip安装chatGPT所需的依赖包 下载并
  • spring boot 自动构造模拟数据

    spring boot 自动构造模拟数据 引言 Spring boot代码 实体类对象 pom xml 控制器代码 Swagger测试效果 jar包下载地址 引言 现如今基于微服务架构技术开发的项目 一般会采用前后端分离的模式 该模式的好处

随机推荐

  • #3文献学习总结--边缘计算资源分配与任务调度优化

    文献 边缘计算资源分配与任务调度优化综述 1 系统模型 云 边 端 第 1 层是物联网层 传感器 处理器根据应用需求感知 测量和收集原始数据 在本地处理大量数据或将其上传至计算节点 第 2 层是边缘计算层 位于互联网边缘 靠近数据源 边缘计
  • TensorFlow Seq2Seq Model笔记

    0 tf跑起来一直没有用GPU 尴尬 跑起来发现GPU没用起来 CPU满了 发现装错了 应该装tensorflow gpu 代码测试是否用的是GPU https stackoverflow com questions 38009682 ho
  • 正确选择云服务器的带宽教程

    由于云服务器具有弹性的扩容机制 安全的云端集群分布式存储等 云服务器的优势逐渐凸现出来 我们越来越多的人开始选择云服务器 那么如何选择云服务器配置呢 怎样的云服务器配置才能不浪费呢 计算机数据的最小单位是bit 称之为位 其他还有B KB
  • 1114 计算营业额

    题目描述 编程统计营业员一天的营业额 输入要求 输入若干个数据代表交易金额 由于营业员一天完成的交易次数是不确定的 因此最后附加输入一笔0作为交易金额已全部输入结束的标志 输出要求 输出一天的营业额 保留2位小数 输入样例 100 5 12
  • Cocos Creator3D:发布到 Web 平台

    推荐 将 NSDT场景编辑器 加入你的3D工具链 3D工具集 NSDT简石数字孪生 发布到 Web 平台 打开主菜单的 项目 gt 构建发布 打开构建发布面板 Cocos Creator 3D 提供了两种 Web 平台的页面模板 可以通过
  • 虚拟机中安装Virtualbox,嵌套的虚拟机不能运行64位系统

    https www quora com Can I install Virtualbox in a virtual machine Here is a previous question on Quora about it Is it po
  • 机器学习中,不平衡样本多分类评估指标采用哪些?准确率很高,召回率在少数样本上较低。

    Macro F1 这个指标计算每一类的F1 score然后求算术平均 如果模型在小样本上表现不好 小样本的F1会极大程度上拉低Macro F1 除了F1之外还有Macro recall Macro precision 计算原理是一样的 另
  • 区块链在中国(2):PBFT算法

    上一张我们从分布式系统的角度简单叙述了一下 IBM HyperLedger fabric 的一些基本概念 架构和协议信息 其中最为核心的部分就是共识算法 consensus plugin fabric推荐并实现的就是PBFT这一经典算法 B
  • ListView的性能优化之convertView和viewHolder

    ListView优化大致从以下几个角度 1 复用已经生成的convertView 2 添加viewHolder类 3 缓存数据 图片缓存 4 分页加载 一 复用convertView 首先讲下ListView的原理 ListView中的每一
  • Vue 集成mock.js

    mock js 官网地址 mockjs com mockjs是用来模拟产生一些虚拟的数据 可以让前端在后端接口还没有开发出来时独立开发 我们可以使用真实的url mockjs可以拦截ajax请求 返回设定好的数据 使用方式 这里主要讨论在v
  • com.mysql.jdbc.Driver错误解决方法

    把mysql的驱动包放在web工程下的WEB INF下的lib目录下即可
  • C++ 时间

    精确到秒的 std time 为了获得系统当前时间 目前 C 标准库里面给出的方法是 std time 它返回的结构体是 std time t 这个方法很方便很通用 但它有一些局限 它是精确到秒的 如果您需要更高精度的时间 比如说您需要精确
  • KCP】从零开始深入理解KCP原理(含TCP可靠机制原理), 及源码解析。

    目录 KCP是什么 KCP商业案例 KCP的实现原理 停等式ARQ协议 确认机制 超时重传 连续ARQ 1 回退n帧 go back n ARQ 2 选择重传协议 selective repeat 待补充 滑动窗口协议 TCP应用的ARQ机
  • mysql中 if 函数的使用

    在MySQL中 if 为流程控制函数 效果相当与java语句中的 if else 语法 IF 判断语句 结果一 结果二 注意 当判断语句为true时 为结果一 为false时 为结果二 例子 select if 5 gt 3 大于 小于
  • 回归商业初心,宝尊电商“深耕广拓”缔造品牌电商有质增长

    今年来 受疫情 通胀 能源等因素影响 全球市场都经历了不同程度的 震荡 寒气传递之间 电商行业开始摸索后疫情时代的前进之路 随着财报季来临 市场开始期待从各赛道标杆企业财报中看出行业走势 11月29日 品牌电商第一股 宝尊电商公布了2022
  • Cesium 同时拾取多个对象与 1024*1024 个坐标

    Cesium 拾取案例 在上一文 Cesium 中的离屏渲染 已经了解到 拾取可以通过离屏渲染实现 其中涉及到了颜色缓存和深度缓存的概念 拾取对象 颜色缓存 Cesium 的 Scene pick 只返回选中的第一个物体 根据上文已知原理是
  • SpringBoot不同环境动态加载不同配置文件

    在平常开发完成后 需要针对不同的环境进行不同的配置文件的选择 之前是建立多个配置文件 然后指定某一个配置文件使用 在进行部署的时候可以使用jar启动命令传参数的办法指定环境 但这样还不够通用 这里讲述一个根据环境变量自动加载不同配置文件的办
  • 根据智能停车场管理系统,分别按照最佳情况、可能情况、最差情况预估你的项目系统开发需要持续的时间。并详细地阐述原因。...

    最佳情况下 项目系统开发需要持续的时间可能为2 3个月 因为项目规划清晰 需求分析准确 技术团队的熟练度较高 且可能有部分已有的系统可以改造使用 因此可以减少开发系统的时间 可能情况下 项目系统开发需要持续的时间可能为3 4个月 因为项目规
  • 【React】antdpro开发指南

    前言 后台管理系统用的非常多 如果比较复杂点的后台可能会多人开发 这时候可能导致各种样式不统一之类的问题 antdpro用起来有一定学习成本 所以需要梳理一下 快速上手 npx create umi your project 选择最新v5
  • GATK流程

    一 使用GATK前须知事项 1 对GATK的测试主要使用的是人类全基因组和外显子组的测序数据 而且全部是基于illumina数据格式 目前还没有提供其他格式文件 如Ion Torrent 或者实验设计 RNA Seq 的分析方法 2 GAT