Eine Geschichte darüber, wie Multi-Maps von bowtie2 gehandhabt werden.
Im Standardverhalten von bowtie2 wird nur einer von ihnen gemeldet, selbst wenn die Sequenz mehrmals getroffen wird. Dann wird die Auswahl eines von ihnen normalerweise zufällig aus denjenigen mit der höchsten Ausrichtungsbewertung ausgewählt. Das Dokument sagt es auch [^ 1]. … Aber in einigen Fällen scheint es, dass es nicht zufällig ist und sich verfestigt [^ 2], deshalb möchte ich die Bedingungen klarstellen.
Die meisten Schlussfolgerungen sind hier geschrieben [^ 2], aber dieses Problem ist auf die zufällige Erzeugung von bowtie2 zurückzuführen. Der Optionsabschnitt "--non-deterministic" in der Bedienungsanleitung von Bowtie2 [^ 3] enthält die folgende Erklärung.
Normally, Bowtie 2 re-initializes its pseudo-random generator for each read. It seeds the generator with a number derived from (a) the read name, (b) the nucleotide sequence, (c) the quality sequence, (d) the value of the
--seed
option. This means that if two reads are identical (same name, same nucleotides, same qualities) Bowtie 2 will find and report the same alignment(s) for both, even if there was ambiguity. When--non-deterministic
is specified, Bowtie 2 re-initializes its pseudo-random generator for each read using the current time. This means that Bowtie 2 will not necessarily report the same alignment for two identical reads. This is counter-intuitive for some users, but might be more appropriate in situations where the input consists of many identical reads.
Zusammenfassend initialisiert bowtie2 einen Zufallszahlengenerator für jeden Lesevorgang, und sein Startwert scheint von den folgenden vier abzuhängen.
Kurz gesagt, Leads mit denselben Informationen, einschließlich des __Namens, sind so konzipiert, dass sie demselben Speicherort __ zugeordnet werden. Lassen Sie uns unten bestätigen, dass das Mapping-Ergebnis unterschiedlich ist, wenn der Name "Lesen", das "Qualitätsarray" und die Option "--seed" unterschiedlich sind.
Bereiten Sie den folgenden FASTQ basierend auf der mehrfach zugeordneten Basensequenz vor. (Arrangements etc. werden basierend auf dem Verifizierungsbeispiel hier erstellt [^ 2])
--FASTQ mit demselben gelesenen Namen, derselben Basissequenz und derselben Qualitätssequenz --FASTQ mit derselben Basissequenz, aber unterschiedlicher Namens- / Qualitätssequenz (einer oder beide) für jeden Lesevorgang
Da die Vorbereitung jedes Mal schwierig ist, wird stattdessen der nächste Generator verwendet.
gen_testseq.py
#!/usr/bin/env python
import argparse
import random
parser = argparse.ArgumentParser()
parser.add_argument("-r", "--reads", type=int, default=10000)
parser.add_argument("-n", "--name", action="store_true")
parser.add_argument("-q", "--quality", action="store_true")
args = parser.parse_args()
for i in range(args.reads):
print "@test_sequence{}".format(random.random() if args.name else '')
print "CAAAGTGTTTACTTTTGGATTTTTGCCAGTCTAACAGGTGAAGCCCTGGAGATTCTTATTAGTGATTTGGGCTGGGGCCTGGCCATGTGTATTTTTTTAAA"
print '+'
print ''.join([chr(random.randrange(33, 127)) for _ in range(101)]) if args.quality else 'I' * 101
Wenn das Array in der zweiten Druckzeile auf hg19 abgebildet wird, werden 9 Stellen mehrfach getroffen, und die folgenden 3 Stellen haben die höchste Ausrichtungsbewertung und sind die Kartenkandidaten.
chrom | position | strand |
---|---|---|
chr1 | 11635 | + |
chr2 | 114359380 | - |
chr15 | 102519535 | - |
bowtie2 verwendete Version 2.2.4.
Auf diese Weise wird nur die Position aus dem Kartenergebnis entfernt und die Anzahl gezählt.
$ bowtie2 --no-hd -x hg19 -U <(./gen_testseq.py) | cut -f 3-4 | sort | uniq -c
Ergebnis
10000 reads; of these:
10000 (100.00%) were unpaired; of these:
0 (0.00%) aligned 0 times
0 (0.00%) aligned exactly 1 time
10000 (100.00%) aligned >1 times
100.00% overall alignment rate
10000 chr15 102519435
Alle wurden an einem Ort abgebildet.
$ bowtie2 --no-hd --seed 17320508 -x hg19 -U <(./gen_testseq.py) | cut -f 3-4 | sort | uniq -c
10000 reads; of these:
10000 (100.00%) were unpaired; of these:
0 (0.00%) aligned 0 times
0 (0.00%) aligned exactly 1 time
10000 (100.00%) aligned >1 times
100.00% overall alignment rate
10000 chr1 11635
Der Standort ändert sich je nach Wert, es wird jedoch nur ein Standort zugeordnet.
$ bowtie2 --no-hd --non-deterministic -x hg19 -U <(./gen_testseq.py) | cut -f 3-4 | sort | uniq -c
10000 reads; of these:
10000 (100.00%) were unpaired; of these:
0 (0.00%) aligned 0 times
0 (0.00%) aligned exactly 1 time
10000 (100.00%) aligned >1 times
100.00% overall alignment rate
3302 chr1 11635
3379 chr15 102519435
3319 chr2 114359280
Diesmal wurde es zufällig zugeordnet. Natürlich ist das Ergebnis jedes Mal anders, wenn Sie es ausführen.
$ bowtie2 --no-hd -x hg19 -U <(./gen_testseq.py -n) | cut -f 3-4 | sort | uniq -c
10000 reads; of these:
10000 (100.00%) were unpaired; of these:
0 (0.00%) aligned 0 times
0 (0.00%) aligned exactly 1 time
10000 (100.00%) aligned >1 times
100.00% overall alignment rate
3379 chr1 11635
3294 chr15 102519435
3327 chr2 114359280
Diesmal wurde es zufällig zugeordnet. Hier,
$ ./gen_testseq.py -n > test.fastq
$ bowtie2 --no-hd -x hg19 -U test.fastq | cut -f 3-4 | sort | uniq -c
Wenn Sie es wie oben beschrieben in eine Datei ablegen, erhalten Sie bei jeder Ausführung das gleiche Ergebnis. Dies gilt natürlich nicht, wenn der Wert der Option "--seed" unterschiedlich ist oder wenn die Option "--non-deterministic" angegeben ist.
Wird zufällig zugeordnet, auch wenn das Qualitätsarray unterschiedlich ist
$ bowtie2 --no-hd -x hg19 -U <(./gen_testseq.py -q) | cut -f 3-4 | sort | uniq -c
10000 reads; of these:
10000 (100.00%) were unpaired; of these:
0 (0.00%) aligned 0 times
0 (0.00%) aligned exactly 1 time
10000 (100.00%) aligned >1 times
100.00% overall alignment rate
3351 chr1 11635
3312 chr15 102519435
3337 chr2 114359280
Es scheint, dass es einen Fall gab, in dem es nicht gut variierte [^ 2], aber war es ein Fehler?
[^ 1]: Siehe Abschnitt -k
Option [^ 3]
Recommended Posts