Precisa de ajuda com o módulo Pairwise Alignment na iteração do alinhamento

Nov 01 2020
from Bio import SeqIO
from Bio import Align

ref_seq_1 = SeqIO.read('C:/Users/King_Arthur/Desktop/ref_seq/segment 1/ref_seq_8.fasta','fasta')

seq1 = SeqIO.read('C:/Users/King_Arthur/Desktop/file/segment 1/Myfile_1 (1).fasta','fasta')

aligner = Align.PairwiseAligner()
aligner.mode = 'global'
aligner.match_score = 1
aligner.mismatch_score = -2
aligner.gap_score = -2

alignments = aligner.score(ref_seq_1.seq , seq1.seq)

print(alignments)
for alignment in sorted(alignments):
    print(alignment)

Portanto, este é o meu código e, como você pode ver na última seção, estou tentando repetir o meu alinhamento, mas estou recebendo este erro

TypeError: 'float' object is not iterable

Eu tentei várias coisas como usar, str()mas deu alguns valores estranhos e também tentei ler o código-fonte usando o inspectmódulo, mas não consigo descobrir o problema.

Qualquer ajuda seria muito apreciada.

Meu objetivo final é descobrir quantas combinações, incompatibilidades e lacunas estão presentes no alinhamento final usando biopython.

se houver outra maneira melhor de fazer isso em python, sinta-se à vontade para sugerir.

Respostas

2 Mr_Z Nov 01 2020 at 16:58

aligner.score(ref_seq_1.seq , seq1.seq)não produz um alinhamento. Ele apenas fornece a pontuação do alinhamento como valor flutuante.

Em vez disso, você precisa executar:

alignments = aligner.align(ref_seq_1.seq , seq1.seq)

Agora alignmentsé um Bio.Align.PairwiseAlignmentsvocê pode iterar alignmentsou obter a pontuação alignments.scoreque lhe dá o mesmo que aligner.score (ref_seq_1.seq, seq1.seq) `

Se precisar de mais informações, você pode verificar a documentação .