3

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.

Ckln
  • 43
  • 4
  • 1
    @winni2k there is also a newer pairwise aligner in Bio.Align http://biopython.org/DIST/docs/tutorial/Tutorial.html#htoc87 – Chris_Rands Aug 15 '18 at 11:22
  • @ckin, is there any particular reason why you need to perform a glocal alignment? – winni2k Aug 15 '18 at 11:34
  • 2
    @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. – Ckln Aug 16 '18 at 12:19

1 Answers1

1

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)

David Ross
  • 173
  • 5