2013-04-17 2 views
0

J'ai 36-NT lit comme ceci: atcttgttcaatggccgatcXXXXgtcgacaatcaa dans le fichier fastq avec XXXX étant les codes à barres différents. Je veux rechercher un code à barres dans le fichier à la position exacte (21 à 24) et imprimer les séquences avec jusqu'à 3 discordances dans la séquence pas de code à barres.trouver un code à barres d'ADN avec discordances dans l'ordre

Par exemple: je code à barres: aacg recherche qui code à barres entre la position 21 à 24 dans le fichier fastq avec permettant 3 discordances dans la séquence comme:

atcttgttcaatggccgatcaacggtcgacaatcaC# it has 1 mismatch 
ttcttgttcaatggccgatcaacggtcgacaatcaC# it has 2 mismatch 
tccttgttcaatggccgatcaacggtcgacaatcaC# it has 3 mismatch 

je tentais de trouver des lignes uniques en utilisant d'abord awk et chercher des discordances mais c'est très fastidieux pour moi de les regarder et de les trouver.

awk 'NR%4==2' 1.fq |sort|uniq -c|awk '{print $1"\t"$2}' > out1.txt 

Y at-il un moyen rapide que je peux trouver?

Merci.

+0

Je suis confus. Qu'est-ce que les codes à barres ont à voir avec les séquences nucléotidiques? – Kevin

+0

initialement je cherchais des codes à barres pour une position spécifique et je recevais très faible compte, et avec 1 discordance dans la séquence je suis haut count.so, si je donne des discordances dans la séquence, je vais obtenir plus de séquences (et je veux essayer jusqu'à 3) – abh

+0

Donc, vous scannez [codes à barres] (http://en.wikipedia.org/wiki/Barcode)? Comme, les modèles stripey noir et blanc que les caissiers de supermarché utilisent pour identifier le prix des articles? Parce que je ne sais toujours pas comment vous pouvez obtenir de l'ADN à partir d'un code à barres. – Kevin

Répondre

1

En utilisant Python:

strs = "atcttgttcaatggccgatcaacggtcgacaatcaa" 

with open("1.fq") as f: 
    for line in f: 
     if line[20:24] == "aacg": 
      line = line.strip() 
      mismatches = sum(x!=y for x, y in zip(strs, line)) 
      if mismatches <= 3: 
       print line, mismatches 

atcttgttcaatggccgatcaacggtcgacaatcac 1 
ttcttgttcaatggccgatcaacggtcgacaatcac 2 
tccttgttcaatggccgatcaacggtcgacaatcac 3 
+0

ATCTTGTTCAATGGCCGATCAACGGTCGACAATCAA ATCTTGTTCAATGGCCGATCAACGCTCGACAATCAA 3 AGCTTGTTCAATGGCCGATCAACGCTCGACAATCAA 2 je suis confondu avec la sortie est ici quelques lignes, dans ce la première est la séquence d'origine et le numéro 3 a 1 et 2 non-concordance a 2 mismatches.what je veux est-il devrait imprimer séquence similaire (dire 0) et 1,2,3 séquences de mésappariement @Ashwini Chaudhary – abh

0

En utilisant Python:

import re 
seq="atcttgttcaatggccgatcaacggtcgacaatcaa" 
D = [ c for c in seq ] 
with open("input") as f: 
    for line in f: 
     line=line.rstrip('\n') 
     if re.match(".{20}aacg", line): 
      cnt = sum([ 1 for c,d in zip(line,D) if c != d]) 
      if cnt < 4: 
       print cnt, line 
+0

Je viens de regarder une sortie 1 ATCTTGTTCAATGGCCGATCAACGGCCGACAATCAA 2 ATCTTGTTCAATGGCCGATCAACGGTCGACAATCAA mais le second est similaire à la séquence et il me dit 2 discordances pourquoi? – abh

+0

il doit y avoir 2 discordances dans la séquence – perreal

+0

de ATCTTGTTCAATGGCCGATCAACGGTCGACAATCAA d'origine 0 AGCTTGTTCAATGGCCGATCAACGGCCGACAATCAA 1 AGCTTGTTCAATGGCCGATCAACGGTCGACAATCAA 2 ATCTTGTTCAATGGCCGATCAACGGTCGACAATCAA 3 ATCTTGATCAATGGCCGATCAACGGTCGACAATCAA ici sont les quelques-unes des lignes i got @perreal – abh

0

en utilisant le module regex python vous permet de spécifier le nombre de discordances

import regex #intended as a replacement for re 
from Bio import SeqIO 
import collections 

d = collections.defaultdict(list) 
motif = r'((atcttgttcaatggccgatc)(....)(gtcgacaatcaa)){e<4}' #e<4 = less than 4 errors 
records = list(SeqIO.parse(open(infile), "fastq")) 
for record in records: 
    seq = str(record.seq) 
    match = regex.search(motif, seq, regex.BESTMATCH) 
    barcode = match.group(3) 
    sequence = match.group(0) 
    d[barcode].append(sequence) # store as a dictionary key = barcode, value = list of sequences 
for k, v in d.items(): 
    print("barcode = %s" % (k)) 
    for i in v: 
     print("sequence = %s" % (i)) 

en utilisant des groupes de capture, le quatrième groupe (3), sera le code à barres

Questions connexes