게놈 서열 어셈블리 도구의 구성 요소
게놈, 메타 게놈 및 전 사체 어셈블러는 완전히 통합 된 것에서 완전히 모듈 식까지 다양합니다. 완전히 모듈 식 어셈블리에는 여러 가지 이점이 있습니다. 이 저장소는 표준 입력/출력 형식과 함께 모듈 식 어셈블리 파이프 라인에서 중요한 체크 포인트를 정의하기위한 진행중인 작업입니다. 현재 우리는 Illumina 유형 시퀀싱 데이터 (단일 읽기, 페어링 된 읽기, 메이트 쌍, 10x)에 대한 편견이 있지만 구성 요소를 3 세대 판독 값과도 호환하는 것을 목표로합니다.
풀 수십을 통해 자유롭게 기여하십시오.
FASTA/FASTQ : 옵션 속성은 주석 필드에 있으며 Sam, XX:x:xxxx 와 같이 형식화됩니다. 주석 필드는 헤더의 공간을 따릅니다.
FASTQ : 쌍 엔드 리드는 인터리브되어 있으며 압축 될 수 있습니다. 연결된 읽기 바코드는 BX 태그로 표시 될 수 있습니다.
FASTA : 시퀀스는 선 포장되어서는 안됩니다. FASTA 파일은 인덱싱해야합니다 (FAI).
GFA : GFA2는 GFA1보다 선호됩니다. 시퀀스 필드가 비어있을 수 있습니다 ( * ). 시퀀스는 예를 들어 assembly.gfa 및 assembly.fa 와 같은 인접한 FASTA 파일에 저장 될 수 있습니다.
SAM/BAM : SAM/BAM 파일은 달리 명시되지 않는 한 위치별로 정렬되고 색인화됩니다. 다른 시퀀싱 라이브러리는 읽기 그룹 RG 속성으로 표시 될 수 있습니다.
어셈블리는 단일 디렉토리에 포함되어 있습니다. 파일은 패턴 [0-9]+_[az]+.[az.]+ 에 따라 명명됩니다. 숫자 접두사의 길이는 제로 패딩되고 길이가 동일하며 어셈블리의 단계를 나타냅니다. 설명 이름과 파일 유형 확장자가 따릅니다. 파일이 압축 될 수 있습니다.
0_pe.fq.gz
1_unitig.gfa
2_denoise.gfa
3_debulge.gfa 3_debulge.bam 3_debulge.bam.bai
4_link.gfa
5_scaffold.gfa
6_assembly.gfa 6_assembly.fa 6_assembly.fa.fai 6_assembly.bam 6_assembly.bam.bai
type1 (레코드 [속성],…) +… → type2 (레코드 [속성],…) +…
이 단계에는 Type1의 파일이 필요하며 Type2의 파일을 생성합니다. 예를 들어, 단위의 카피 수를 추정하십시오. 시퀀스 세그먼트 및 모서리의 GFA 파일과 MAPPED 읽기의 BAM 또는 PAF 파일은 추정 된 카피 번호의 유니 그 리그가있는 GFA 파일을 생성합니다.
GFA (SE) + BAM/PAF → GFA (S [CN], E)
각 시퀀싱 기술에 특정한 시퀀싱 아티팩트를 제거합니다. 최소한의 정보 손실 (예 : 이형 접합 변이체)으로 입력 판독의 품질을 향상시킵니다.
FASTQ → FASTQ
시퀀싱의 품질을 평가하고 게놈의 파라미터를 추정합니다.
FASTQ → TSV
읽기에서 시퀀싱 오류가 올바른 것입니다.
FASTQ → FASTQ
de bruijn 그래프 (DBG) 어셈블리 또는 오버랩, 레이아웃, 컨센서스 (OLC) 어셈블리에 의해 유니 그를 조립합니다.
FASTQ → GFA (SE)
어셈블리 그래프에서 시퀀싱 오류를 제거하십시오. 변형을 유지합니다.
GFA (SE) → GFA (SE)
그래프에서 변형을 식별 및/또는 제거하십시오.
GFA (SE) → GFA (SE)
벌지를 통한 단일 시퀀스 또는 경로가 선택 될 수 있거나 벌지가 합의를 나타내는 IUPAC 모호성 코드를 사용하여 합의 시퀀스로 대체 될 수 있습니다.
맵은 어셈블리 시퀀스를 읽습니다.
FASTQ + GFA (S)/FASTA → BAM
각 시퀀스 세그먼트의 카피 번호를 추정하십시오.
GFA (SE) + BAM/PAF → GFA (S [CN], E)
중간 범위의 적용 깊이는 붕괴 된 반복, 잘못 정렬 된 판독 및 기타 문제로 인한 정렬 아티팩트에 대한 평균 커버리지 깊이보다 더 강력합니다.
반복을 확장하고 순서 및 오리엔트 시퀀스 세그먼트를 콘티그 및 스캐 폴드로 내립니다.
FASTA/GFA (SE) + BAM/PAF → FASTA/GFA (SE)
Contigs는 간격이없는 연속적인 시퀀스입니다. Contigs를 만들려면 고유 한 contigs 사이에서 발견 된 반복 순서를 확장해야합니다. Contig는 간격이없는 시퀀스 세그먼트의 연속 경로에서 파생됩니다. 스캐 폴드는 세그먼트 사이의 갭을 갖는 시퀀스 세그먼트의 불연속 경로에서 파생됩니다.
도구는 단일 단계의 어셈블리로 스캐 폴딩을 구현할 수 있습니다. 그러나 스캐 폴딩은 3 개의 별개의 단계로 구성된 것으로 볼 수있다 : 링크 유니 그, 순서 및 오리엔트 유닛은 경로를 구성하기위한 링크, 새로운 시퀀스 세그먼트를 만들기위한 계약 경로로 볼 수있다.
인접한 콘티 그 사이의 스캐 폴드 간격에서 발견 된 서열을 조립한다.
FASTQ + FASTA/GFA (S) → FASTA/GFA (S)
읽기를 어셈블리 및 올바른 어셈블리 오류에 매핑하십시오.
FASTQ + FASTA/GFA (SE) + BAM/PAF → FASTA/GFA (SE)
GFA (SE) → PNG/SVG
어셈블리의 연속성과 정확성을 평가하십시오.
FASTA/GFA (S) → TSV
도구는 단일 도구에서 여러 어셈블리 단계를 결합 할 수 있습니다.
ema preprocesslongranger basicsga preqc bfcBcool.pysga index | sga correct ABYSS 또는 ABYSS-P 또는 abyss-bloom-dbg 그런 다음 AdjList 또는 abyss-overlapbcalm | convertToGFA.pysga index | sga filter | sga overlap | sga assemble abyss-filtergraphgfaview -t PopBubbles | MergeContigsgfaview -b abyss-mapbgreatbwa memema alignlongranger alignminimap2unicycler_align sga-astat.py abyss-fixmate | DistanceEst 페어링 엔드 및 메이트 페어 읽기의 경우 abyss-fixmate | DistanceEstabyss-longseqdist 오랫동안 읽습니다arcs abyss-scaffold 또는 SimpleGraph | MergePathssga scaffold MergeContigssga scaffold2fasta abyss-sealer abyss-fac 및 abyss-samtobreak데이터는 Unicycler에서 나온 것입니다. "이들은 Shigella Sonnei 53g 게놈 어셈블리의 플라스미드 A, B 및 E의 합성 읽기입니다." Shigella Sonnei Plasmids (합성 읽기), short_reads_1.fastq.gz, short_reads_2.fastq.gz
심연을 사용하여 짝을 이루는 독서를 조립하십시오. 이 심약 파이프 라인은 완전한 abyss-pe 파이프 라인에서 실행하는 최소한의 도구입니다.
cd components
k=99
./download_test_data.sh
./abyss_unitigs.sh 0_pe.fq.gz $k
./abyss_contigs_from_unitigs.sh 1_unitig.gfa2 1_unitig.fa $k
./abyss_scaffolding.sh 6_contigs.fa 6_contigs.gfa $k
# Visualize the assembly graph
Bandage load 9_assembly.gfa1 & 이것은 Unitigs 용 BCALM을 사용하여 읽은 다음 이전 예제의 나머지 Abyss 파이프 라인을 사용합니다.
cd components
k=99
./download_test_data.sh
./bcalm.sh 0_pe.fq.gz $k
./abyss_contigs_from_unitigs.sh 1_unitig.gfa2 1_unitig.fa $k
./abyss_scaffolding.sh 6_contigs.fa 6_contigs.gfa $k
# Visualize the assembly graph
Bandage load 9_assembly.gfa1 & # Download Unicycler test data
# input: nothing
# output: 0_pe.fq.gz
# install dependencies
brew install seqtk curl
seqtk mergepe <( curl -Ls https://github.com/rrwick/Unicycler/raw/master/sample_data/short_reads_1.fastq.gz ) <( curl -Ls https://github.com/rrwick/Unicycler/raw/master/sample_data/short_reads_2.fastq.gz ) | gzip > 0_pe.fq.gz-
# input: [reads] [k]
# e.g. 0_pe.fq.gz 99
#
# output: 1_unitig.gfa2
# contains unitigs created by BCALM
# make sure bcalm and convertToGFA.py are in your path (will later be automatically done by 'conda install bcalm' when someone makes bcalm availaon conda)
reads= $1
k= $2
# Install the dependencies
pip install gfapy
# Unitig with BCALM
bcalm -in $1 -out 1_bcalm -kmer-size $k -abundance-min 1 -verbose 0
mv 1_bcalm.unitigs.fa 1_unitig.fa
convertToGFA.py 1_unitig.fa 1_unitig.gfa $k
# convert bcalm output to gfa2
(printf " HtVN:Z:1.0n " ; tail -n +2 1_unitig.gfa) > 1_unitig.gfa1
gfapy-convert 1_unitig.gfa1 > 1_unitig.gfa2
# cleanup
rm -f 1_bcalm * glue * 1_bcalm.h5-
# input: [reads] [k]
# e.g. 0_pe.fq.gz 99
#
# output: 1_unitig.gfa2 1_unitig.fa
# contains unitigs created by abyss
reads= $1
k= $2
# setting up
brew install abyss
# Unitig
gunzip -c $reads | ABYSS -k $k -t0 -c0 -b0 -o 1_unitig.fa -
AdjList --gfa2 -k $k 1_unitig.fa > 1_unitig.gfa
mv 1_unitig.gfa 1_unitig.gfa2-
# input: [unitigs.gfa2] [unitigs.fa] [k]
# e.g. 1_unitig.gfa2 1_unitigs.fa 100
#
# output: 6_contigs.gfa2 and 6_contigs.fa
# contigs produced by ABySS
unitigs_gfa2= $1
unitigs_fa= $2
k= $3
# install dependencies
brew install abyss pigz samtools
# Denoise
abyss-filtergraph --gfa2 -k $k -t200 -c3 -g 2_denoise.gfa $unitigs_gfa2
# Collapse variants
PopBubbles --gfa2 -k $k -p0.99 -g 3_debulge.gfa $unitigs_fa 2_denoise.gfa > 3_debulge.path
MergeContigs --gfa2 -k $k -g 3_debulge.gfa -o 3_debulge.fa $unitigs_fa 2_denoise.gfa 3_debulge.path
# Map reads
gunzip -c 0_pe.fq.gz | abyss-map - 3_debulge.fa | pigz > 3_debulge.sam.gz
# Link unitigs
gunzip -c 3_debulge.sam.gz | abyss-fixmate -h 4_link.tsv | samtools sort -Osam | DistanceEst --dist -k $k -s500 -n1 4_link.tsv > 4_link.dist
# Resolve repeats
samtools faidx 3_debulge.fa
SimpleGraph -k $k -s500 -n5 -o 5_resolverepeats-1.path 3_debulge.gfa 4_link.dist
MergePaths -k $k -o 5_resolverepeats.path 3_debulge.fa.fai 5_resolverepeats-1.path
# Contract paths
MergeContigs --gfa2 -k $k -g 6_contigs.gfa2 -o 6_contigs.fa 3_debulge.fa 3_debulge.gfa 5_resolverepeats.path
# cleanup (comment to keep files)
rm -f 5_resolverepeats.path 3_debulge.gfa 3_debulge.fa 3_debulge.fa.fai 3_debulge.path 5_resolverepeats-1.path 4_link.dist 4_link.tsv 2_denoise.gfa 3_debulge.sam.gz -
# input: [unitigs_gfa1] [unitigs_gfa2] [unitigs_fa] [k]
# e.g. 1_unitig.gfa1
# output: 6_contigs.gfa 6_contigs.fa
# 'contigs' generated by popping bubbles and removing tips using gfa1 tool
# https://github.com/lh3/gfa1
unitigs_gfa1= $1
unitigs_gfa2= $2
unitigs_fa= $3
k= $4
# remove tips (2 rounds), misc trimming, pop bubbles,
# but then cannot use -u to build unitigs of simplified graph (i.e. contigs), because it doesn't output sequences
gfaview -t -m -t -b $unitigs_gfa1 > 2_denoised.gfa1
# make the output of gfaview properly gfa1 and gfa2
sed -i ' s/L1/l1/g ' 2_denoised.gfa1 # gfapy wants lower case flags
sed -i ' s/L2/l2/g ' 2_denoised.gfa1
sort -n -k 2 2_denoised.gfa1 > 2_denoised.gfa1.sorted # because ABySS GFA parser wants S lines in same order as in FASTA file
head -n 1 $unitigs_gfa2 > 2_denoised.gfa2 # copy header as gfaview doesnt
gfapy-convert 2_denoised.gfa1.sorted >> 2_denoised.gfa2
# would like to use use rgfa to do compaction but itdoesnt work on the Singella example
# ./rgfa-mergelinear 2_denoised.gfa1 > 6_contigs.gfa
# convert gfa to fasta
awk ' $1 ~/S/ {print ">"$2"n"$3} ' 2_denoised.gfa1.sorted > 2_denoised.fa
# just contract paths in the 2_denoised.gfa2, using ABySS as wasn't able to do it with neither gfaview nor rgfa-mergelinear
abyss-filtergraph --gfa2 -k $k --assemble 2_denoised.gfa2 2_denoised.fa -g 3_denoised.gfa2 > 3_denoised.paths
MergeContigs --gfa2 -k $k 2_denoised.fa 3_denoised.gfa2 3_denoised.paths -o 6_contigs.fa -g 6_contigs.gfa2
# cleanup (comment to keep files)
rm -f 2_denoised.gfa1.sorted 2_denoise.gfa1 2_denoised.gfa1 3_denoised.paths 3_denoised.gfa2 # input: [contigs.fa] [contigs.gfa] [k]
# e.g. 6_contigs.fa 6_contigs.gfa 99
#
# output: 9_assembly.gfa and 9_assembly.gfa1
# scaffolds assembly using abyss scaffolder in GFA2 and GFA1 format
contigs_fa= $1
contigs_gfa= $2
k= $3
# Map reads
gunzip -c 0_pe.fq.gz | abyss-map - $contigs_fa | pigz > 6_contigs.sam.gz
# Link unitigs
gunzip -c 6_contigs.sam.gz | abyss-fixmate -h 7_link.tsv | samtools sort -Osam | DistanceEst --dot -k $k -s500 -n1 7_link.tsv > 7_link.gv
# Order and orient
abyss-scaffold -k $k -s500-1000 -n5-10 $contigs_gfa 7_link.gv > 8_scaffold.path
# Contract paths
MergeContigs --gfa2 -k $k -g 9_assembly.gfa -o 9_assembly.fa $contigs_fa $contigs_gfa 8_scaffold.path
# Compute assembly metrics
abyss-fac 9_assembly.fa
# Convert GFA2 to GFA1
abyss-todot --gfa1 9_assembly.gfa > 9_assembly.gfa1
# cleanup (comment to remove)
rm -f 6_contigs.sam.gz 7_link.gv 7_link.tsv 8_scaffold.path 8_scaffold.path