es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Error en la función Bio.SeqUtils.molecular_weight() para imprimir secuencias dentro de un intervalo de peso molecular.

Estoy tratando de crear una función en Python que dado una secuencia (no) ambigua y un intervalo de peso molecular, devuelve una lista de todas las secuencias no ambiguas representadas por la secuencia.
He intentado esto con el siguiente código:

def extend_ambiguous_dna(file_name, mw_min, mw_max): 
    with open(file_name) as seq_file:
        for record in SeqIO.parse(seq_file, "fasta"):
            d = Seq.IUPACData.ambiguous_dna_values
            mol_weight = Bio.SeqUtils.molecular_weight(record.seq)
            for mol_weight in range(mw_min, mw_max):
                print(list(map("".join, product(*map(d.get, record)))))

extend_ambiguous_dna('short.fasta')

Cuando ejecuto esto, obtengo este error para la función molecular_weight: ‘D’ no es una letra válida y no ambigua para el ADN.

Este es mi archivo fasta llamado ‘short.fasta’:

>seq_7009 random sequence
DGRGGGWAVCVAACGTTGAT
>seq_418 random sequence
GAGCTGVTATST
>seq_9143_unamb random sequence
ACCGTTAAGCCTTAG
>seq_2888 random sequence
RVCCWDGARATAGBCGC
>seq_1101 random sequence
CSAATGYGATNBTA
>seq_107 random sequence
WGDGHGCDCTYANGTTWCA
>seq_6946 random sequence
TCVMBRAGRSGTCCAWA
>seq_6162 random sequence
YWBGCKTGCCAAGCGCDG
>seq_504 random sequence
ADDTAACCCTCTTKA
>seq_3535 random sequence
KKGTACACCAG
>seq_4077 random sequence
SRWSCRTTRVAGDCC
>seq_1626_unamb random sequence
GGATATTACCTA

Soy nuevo en Python, pero espero que alguien pueda ayudarme.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema es que la función molecular_weight del módulo Bio.SeqUtils no admite letras ambiguas de ADN como “D” (que representa tanto A, G o T).

    Para solucionar esto, podrías modificar tu código para reemplazar cualquier letra ambigua por sus equivalentes no ambiguos antes de calcular el peso molecular. Por ejemplo:

    import re
    from Bio.Seq import Seq
    from Bio.SeqUtils import molecular_weight
    from Bio import SeqIO
    from itertools import product
    
    def extend_ambiguous_dna(file_name, mw_min, mw_max):
        with open(file_name) as seq_file:
            for record in SeqIO.parse(seq_file, "fasta"):
                # Reemplazar cualquier letra ambigua por sus equivalentes no ambiguos
                unambiguous_seq = re.sub(r"[BDHKMNRSVWY]", "N", str(record.seq))
                mol_weight = molecular_weight(Seq(unambiguous_seq), "DNA")
                if mw_min <= mol_weight <= mw_max:
                    # Generar todas las secuencias no ambiguas posibles a partir de la secuencia ambigua
                    d = Seq.IUPACData.ambiguous_dna_values
                    unambiguous_seqs = list(map("".join, product(*map(d.get, record.seq))))
                    print(unambiguous_seqs)
    
    extend_ambiguous_dna("short.fasta", 5000, 6000)
    

    En este código modificado, cualquier letra ambigua de ADN se reemplaza por “N” utilizando una expresión regular antes de calcular el peso molecular. Luego, se generan las secuencias no ambiguas a partir de la secuencia ambigua original.

    Nota que también agregué una verificación para imprimir la lista de secuencias no ambiguas solo si el peso molecular calculado se encuentra dentro del intervalo dado.

Comments are closed.