3
$\begingroup$

I was looking for a simple way to do a glocal alignment. The case I have is I have a small sequence which should be find in a bigger one, thus typically a glocal alignment. Also I can not Install anything on the target machine (Python 3.6 with Biopython is already installed), all I can do is pip install.

My question is : are there any glocal alignment implementation out there ?

I was unable to found one and I don't feel proficient enough with Python yet to implement it myself.

$\endgroup$
3
  • 1
    $\begingroup$ @winni2k there is also a newer pairwise aligner in Bio.Align biopython.org/DIST/docs/tutorial/Tutorial.html#htoc87 $\endgroup$ Aug 15, 2018 at 11:22
  • $\begingroup$ @ckin, is there any particular reason why you need to perform a glocal alignment? $\endgroup$
    – winni2k
    Aug 15, 2018 at 11:34
  • 2
    $\begingroup$ @winni2k like I said I have a typically case where you want to do a glocal alignement: I have to align a small sequence against a bigger sequence, and my small should be found within the bigger one. $\endgroup$
    – Ckln
    Aug 16, 2018 at 12:19

1 Answer 1

1
$\begingroup$

As suggested in the comments, the built-in BioPython pairwise aligner should work for this. You can find a short sequence match in a longer sequence using a global alignment with the right score parameters (query_end_... = 0). The other scoring parameters are values that I've found to be good for aligning similar sequences.

Example code:

from Bio import Align

aligner = Align.PairwiseAligner()
aligner = Align.PairwiseAligner()
aligner.match_score = 5
aligner.mismatch_score = -9
aligner.mode = 'global'
aligner.target_internal_open_gap_score = -12
aligner.target_internal_extend_gap_score = -3
aligner.target_end_open_gap_score = -12
aligner.target_end_extend_gap_score = -3
aligner.query_internal_open_gap_score = -12
aligner.query_internal_extend_gap_score = -3

# Set the query_end penalties to zero to effectively implement a 'glocal' alignment as described in the question
# These are the default values, so you could skip the next two lines, 
#    but this is relevant to the question, so I'm including them in the example.
aligner.query_end_open_gap_score = 0
aligner.query_end_extend_gap_score = 0
    
alignments = aligner.align("GAACTCGCATCGATGATCCGTGCGCTGAGATCCGCTGACATGATC", "GATCCG")

for a in alignments:
    print(a)
print()
print()

alignments = aligner.align("GAACTCGCATCGATGATCCGTGCGCTGAGATCCGCTGACATGATC", "GATACG")

for a in alignments:
    print(a)
print()
print()

alignments = aligner.align("GAACTCGCATCGATGATCCGTGCGCTGAGATCCGCTGACATGATC", "GATACCG")

for a in alignments:
    print(a)
$\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.