NOTA: Este é o LUMPY 0.2.13 com alterações adicionais para permitir que o lumpyexpress funcione quando o arquivo principal é um CRAM, não um BAM. Os divisores e discordantes ainda devem ser arquivos BAM, pois o próprio LUMPY ainda não suporta CRAM como entrada. Isso requer que o comando hexdump esteja disponível.
Para perguntas e discussões sobre o LUMPY, visite o fórum em:
https://groups.google.com/forum/#!forum/lumpy-discuss
Uma estrutura probabilística para descoberta de variantes estruturais.
Ryan M Layer, Colby Chiang, Aaron R Quinlan e Ira M Hall. 2014. "LUMPY: uma estrutura probabilística para descoberta de variantes estruturais." Biologia do Genoma 15 (6): R84. doi:10.1186/gb-2014-15-6-r84.
Observe que o smoove é a maneira recomendada de executar lumpy
, pois coleta as melhores práticas de lumpy
e ferramentas associadas e terá um tempo de execução mais curto e uma taxa de falsos positivos mais baixa do que lumpyexpress
descrito abaixo.
Baixe e instale
git clone --recursive https://github.com/arq5x/lumpy-sv.git
cd lumpy-sv
make
cp bin/* /usr/local/bin/.
Execute o LUMPY Express
lumpyexpress
-B my.bam
-S my.splitters.bam
-D my.discordants.bam
-o output.vcf
Método padrão de instalação:
git clone --recursive [email protected]:arq5x/lumpy-sv.git
cd lumpy-sv
make
cp bin/* /usr/local/bin/.
Instalando com costom zlib (erro de compilação gzopen64):
git clone --recursive [email protected]:arq5x/lumpy-sv.git
cd lumpy-sv
export ZLIB_PATH="/usr/lib/x86_64-linux-gnu/"; #when /usr/lib/x86_64-linux-gnu/libz.so
make
cp bin/* /usr/local/bin/.
Detecção automatizada de pontos de interrupção para análises padrão.
usage: lumpyexpress [options]
Argumentos obrigatórios
-B FILE coordinate-sorted BAM file(s) (comma separated)
-S FILE split reads BAM file(s) (comma separated)
-D FILE discordant reads BAM files(s) (comma separated)
Argumentos opcionais
-o STR output [fullBam.bam.vcf]
-x FILE BED file to exclude
-P output probability curves for each variant
-m INT minimum sample weight for a call [4]
-r FLOAT trim threshold [0]
-T DIR temp directory [./output_prefix.XXXXXXXXXXXX]
-k keep temporary files
-K FILE path to lumpyexpress.config file
(default: same directory as lumpyexpress)
-v verbose
-h show this message
LUMPY Express executa vários programas externos cujos caminhos são especificados em scripts/lumpyexpress.config. Esta configuração deve residir no mesmo diretório que o lumpyexpress ou ser especificada explicitamente com o sinalizador -K.
O Makefile de instalação gera automaticamente um arquivo lumpyexpress.config e o coloca no diretório “bin”.
LUMPY Express espera arquivos BAM alinhados com BWA-MEM como entrada. Ele analisa automaticamente informações de amostra, biblioteca e grupo de leitura usando as tags @RG no cabeçalho BAM. Espera-se que cada arquivo BAM contenha exatamente uma amostra.
A entrada mínima é um arquivo BAM classificado por coordenadas (-B), do qual o LUMPY Express extrai divisores e discordantes usando SAMBLASTER antes de executar o LUMPY. Opcionalmente, os usuários podem fornecer arquivos BAM divididos por coordenadas (-S) e discordantes (-D) que ignorarão a extração SAMBLASTER para uma análise mais rápida.
LUMPY Express produz um arquivo VCF de acordo com a especificação VCF 4.2.
Detecção de breakpoint flexível e personalizável para usuários avançados.
usage: lumpy [options]
Opções
-g Genome file (defines chromosome order)
-e Show evidence for each call
-w File read windows size (default 1000000)
-mw minimum weight across all samples for a call
-msw minimum per-sample weight for a call
-tt trim threshold
-x exclude file bed file
-t temp file prefix, must be to a writeable directory
-P output probability curve for each variant
-b output as BEDPE instead of VCF
-sr bam_file:,
id:,
back_distance:,
min_mapping_threshold:,
weight:,
min_clip:,
read_group:
-pe bam_file:,
id:,
histo_file:,
mean:,
stdev:,
read_length:,
min_non_overlap:,
discordant_z:,
back_distance:,
min_mapping_threshold:,
weight:,
read_group:
-bedpe bedpe_file:,
id:,
weight:
Recomendamos o alinhamento dos dados com o SpeedSeq, que realiza o alinhamento BWA-MEM, marca duplicatas e extrai pares de leitura divididos e discordantes.
speedseq align -R "@RGtID:idtSM:sampletLB:lib"
human_g1k_v37.fasta
sample.1.fq
sample.2.fq
Caso contrário, os dados poderão ser alinhados com o BWA-MEM.
# Align the data
bwa mem -R "@RGtID:idtSM:sampletLB:lib" human_g1k_v37.fasta sample.1.fq sample.2.fq
| samblaster --excludeDups --addMateTags --maxSplitCount 2 --minNonOverlap 20
| samtools view -S -b -
> sample.bam
# Extract the discordant paired-end alignments.
samtools view -b -F 1294 sample.bam > sample.discordants.unsorted.bam
# Extract the split-read alignments
samtools view -h sample.bam
| scripts/extractSplitReads_BwaMem -i stdin
| samtools view -Sb -
> sample.splitters.unsorted.bam
# Sort both alignments
samtools sort sample.discordants.unsorted.bam sample.discordants
samtools sort sample.splitters.unsorted.bam sample.splitters
O LUMPY possui duas alternativas de execução distintas. LUMPY Express é um wrapper simplificado para análises padrão. LUMPY (tradicional) é mais customizável, para usuários avançados e experimentos especializados.
Execute o LUMPY Express em uma única amostra com divisores e discordantes pré-extraídos
lumpyexpress
-B sample.bam
-S sample.splitters.bam
-D sample.discordants.bam
-o sample.vcf
Execute o LUMPY Express em conjunto em várias amostras com divisores e discordantes pré-extraídos
lumpyexpress
-B sample1.bam,sample2.bam,sample3.bam
-S sample1.splitters.bam,sample2.splitters.bam,sample3.splitters.bam
-D sample1.discordants.bam,sample2.discordants.bam,sample3.discordants.bam
-o multi_sample.vcf
Execute o LUMPY Express em um par tumor-normal
lumpyexpress
-B tumor.bam,normal.bam
-S tumor.splitters.bam,normal.splitters.bam
-D tumor.discordants.bam,normal.discordants.bam
-o tumor_normal.vcf
Primeiro, gere estatísticas empíricas de tamanho de inserção em cada biblioteca no arquivo BAM
samtools view -r readgroup1 sample.bam
| tail -n+100000
| scripts/pairend_distro.py
-r 101
-X 4
-N 10000
-o sample.lib1.histo
O script acima (scripts/pairend_distro.py) exibirá a média e o stdev na tela. Para estes exemplos, assumiremos que a média é 500 e o desvio padrão é 50.
Execute o LUMPY com leituras emparelhadas e divididas.
lumpy
-mw 4
-tt 0
-pe id:sample,bam_file:sample.discordants.bam,histo_file:sample.lib1.histo,mean:500,stdev:50,read_length:101,min_non_overlap:101,discordant_z:5,back_distance:10,weight:1,min_mapping_threshold:20
-sr id:sample,bam_file:sample.splitters.bam,back_distance:10,weight:1,min_mapping_threshold:20
> sample.vcf
Execute LUMPY em um arquivo BAM com várias bibliotecas.
lumpy
-mw 4
-tt 0
-pe id:sample,read_group:rg1,bam_file:sample.discordants.bam,histo_file:sample.lib1.histo,mean:500,stdev:50,read_length:101,min_non_overlap:101,discordant_z:5,back_distance:10,weight:1,min_mapping_threshold:20
-pe id:sample,read_group:rg2,bam_file:sample.discordants.bam,histo_file:sample.lib2.histo,mean:500,stdev:50,read_length:101,min_non_overlap:101,discordant_z:5,back_distance:10,weight:1,min_mapping_threshold:20
-sr id:sample,bam_file:sample.splitters.bam,back_distance:10,weight:1,min_mapping_threshold:20
> sample.vcf
Execute o LUMPY em várias amostras com várias bibliotecas.
lumpy
-mw 4
-tt 0
-pe id:sample1,bam_file:sample1.discordants.bam,read_group:rg1,read_group:rg2,histo_file:sample1.lib1.histo,mean:500,stdev:50,read_length:101,min_non_overlap:101,discordant_z:5,back_distance:10,weight:1,min_mapping_threshold:20
-pe id:sample1,bam_file:sample1.discordants.bam,read_group:rg3,histo_file:sample1.lib2.histo,mean:500,stdev:50,read_length:101,min_non_overlap:101,discordant_z:5,back_distance:10,weight:1,min_mapping_threshold:20
-pe id:sample2,bam_file:sample2.discordants.bam,read_group:rg4,histo_file:sample2.lib1.histo,mean:500,stdev:50,read_length:101,min_non_overlap:101,discordant_z:5,back_distance:10,weight:1,min_mapping_threshold:20
-sr id:sample1,bam_file:sample1.splitters.bam,back_distance:10,weight:1,min_mapping_threshold:20
-sr id:sample2,bam_file:sample2.splitters.bam,back_distance:10,weight:1,min_mapping_threshold:20
> multi_sample.vcf
Execute o LUMPY com regiões de baixa complexidade excluídas.
Heng Li fornece um conjunto de regiões de baixa complexidade nas informações suplementares de seu artigo, "Rumo a uma melhor compreensão de artefatos na chamada de variantes de amostras de alta cobertura" em https://doi.org/10.1093/bioinformatics/btu356.
unzip btu356_Supplementary_Data.zip
unzip btu356-suppl_data.zip
lumpy
-mw 4
-tt 0.0
-x btu356_LCR-hs37d5.bed/btu356_LCR-hs37d5.bed
-pe bam_file:sample.discordants.bam,histo_file:sample.pe.histo,mean:500,stdev:50,read_length:101,min_non_overlap:101,discordant_z:5,back_distance:10,weight:1,id:sample,min_mapping_threshold:1
-sr bam_file:sample.sr.sort.bam,back_distance:10,weight:1,id:sample,min_mapping_threshold:1
> sample.exclude.vcf
Execute o LUMPY excluindo regiões de cobertura muito alta.
Podemos direcionar o irregular para ignorar certas regiões usando a opção de exclusão de região. Neste exemplo encontramos e depois excluímos regiões que têm uma cobertura muito elevada. Primeiro, usamos o script get_coverages.py para encontrar as coberturas mínima, máxima e média dos arquivos sr e pe bam e para criar perfis de cobertura para ambos os arquivos.
python ../scripts/get_coverages.py
sample.pe.sort.bam
sample.sr.sort.bam
# sample.pe.sort.bam.coverage min:1 max:14 mean(non-zero):2.35557521272
# sample.sr.sort.bam.coverage min:1 max:7 mean(non-zero):1.08945936729
Deste resultado, optaremos por excluir regiões que tenham cobertura superior a 10x. Para criar o arquivo exclude, usaremos o script get_exclude_regions.py para criar o arquivo exclude.bed
python ../scripts/get_exclude_regions.py
10
exclude.bed
sample.pe.sort.bam
sample.sr.sort.bam
Agora executamos novamente o irregular com a opção de exclusão (-x)
lumpy
-mw 4
-tt 0.0
-x exclude.bed
-pe bam_file:sample.discordants.bam,histo_file:sample.pe.histo,mean:500,stdev:50,read_length:101,min_non_overlap:101,discordant_z:5,back_distance:10,weight:1,id:sample,min_mapping_threshold:1
-sr bam_file:sample.sr.sort.bam,back_distance:10,weight:1,id:sample,min_mapping_threshold:1
> sample.exclude.vcf
O SVTyper pode chamar genótipos em arquivos VCF de saída LUMPY usando um algoritmo bayesiano de máxima verossimilhança.
svtyper
-B sample.bam
-S sample.splitters.bam
-i sample.vcf
> sample.gt.vcf
O script test/test.sh
é executado de forma irregular em vários conjuntos de dados simulados e compara os resultados com o resultado correto conhecido. Os conjuntos de dados de amostra podem ser encontrados em http://layerlab.org/lumpy/data.tar.gz. Este tar ball deve ser extraído para o diretório irregular de nível superior. O script test/test.sh
verifica a existência deste diretório antes de executar o LUMPY.
Todos os arquivos bam que processam irregularmente devem ser classificados por posição. Para verificar se seus bams estão classificados corretamente, use o script check_sorting.py
python ../scripts/check_sorting.py
pe.pos_sorted.bam
sr.pos_sorted.bam
pe.name_sorted.bam
# pe.pos_sorted.bam
# in order
# sr.pos_sorted.bam
# in order
# pe.name_sorted.bam
# out of order: chr10 102292476 occurred after chr10 102292893