2
$\begingroup$

I am able to find matching motif in my sequence, and I would like to now find overlapping motifs. Basically, after matching my motif, I want to find the 6 amino acids after it. This is the code below that I used to find the motif:

import Bio
import regex

from Bio import SeqIO
input_file = 'sequences.fasta'
fasta_sequences = SeqIO.parse(open(input_file),'fasta')
for fasta in fasta_sequences:
     name, sequence = fasta.id, str(fasta.seq)
     result=regex.finditer(r"[YFWLIMVA]..[LMALVN]..[AGSTCD].[LAIVNFYMW]",sequence)
     for x in result:
     print(name, x.start(), x.end(), x.group())

The above code works perfectly becasue it give me the sequence id, positions and the motif. The output is below

P1  33 41 VTLLPAADL

Right now, what I want to do is to also get the 6 amino acids after matching this motif, such that I get an output like the one below where the length will now be 15,.

P1 33 47 VTLLPAADLLMAIID

The code that I have tried to get the 6 amino acids after my match is below.

import Bio
import regex

from Bio import SeqIO
input_file = 'sequences.fasta'
fasta_sequences = SeqIO.parse(open(input_file),'fasta')
for fasta in fasta_sequences:
     name, sequence = fasta.id, str(fasta.seq)
     result=regex.finditer(r"[YFWLIMVA]..[LMALVN]..[AGSTCD].[LAIVNFYMW]",sequence)
     for x in result:
     print(name, x.start(), x.end() + 6, x.group())

This the output it gives me:

#It does not extend my motif by 6 amino acids, after getting the match, it only extends the 
#end position by 6. From 41 to 47.     
P1  33 47 VTLLPAADL 

#My desired output is this which include the overlapping LMAIID, the LMAIID is after the 
#match.
P1   33 47 VTLLPAADLLMAIID

I also tried the code below, but it returns an error.

import Bio
import regex

from Bio import SeqIO
input_file = 'sequences.fasta'
fasta_sequences = SeqIO.parse(open(input_file),'fasta')
for fasta in fasta_sequences:
     name, sequence = fasta.id, str(fasta.seq)
     result=regex.finditer(r"[YFWLIMVA]..[LMALVN]..[AGSTCD].[LAIVNFYMW]",sequence)
     for x in result:
     print(name, x.start(), x.end() + 6, x.group() +6)
$\endgroup$
1

2 Answers 2

1
$\begingroup$

This is how it managed to give the desired output.

import Bio
import re

from Bio import SeqIO
input_file = 'sequences.fasta'
fasta_sequences = SeqIO.parse(open(input_file),'fasta')
for fasta in fasta_sequences:
     name, sequence = fasta.id, str(fasta.seq)
     matches=re.finditer(r"[YFWLIMVA]..[LMALVN].[AGSTCD]..[LAIVNFYMW]",sequence)
     for x in matches:
     print(name, x.start(), x.end()+6,sequence[x.start():x.end()+6])

#Output
P1 33 47 VTLLPAADLLMAIID
$\endgroup$
1
  • $\begingroup$ This looks like a great answer, which has worked for you. Can you please flag this as your accepted answer (it's okay to do this for your own answer), so that the StackExchange automated algorithms do the right thing? $\endgroup$
    – gringer
    Nov 19, 2022 at 10:31
0
$\begingroup$

Just add 6 extra aminoacids to your motif:

matches=re.finditer(r"[YFWLIMVA]..[LMALVN].[AGSTCD]..[LAIVNFYMW]......",sequence)

That's all you need, now the existing code will give you the answer you want.

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.