O Módulo ClustalW (../Bio/Clustalw)

Como breve e simplificada introdução ao problema, após ter-se confirmado a qualidade dos dados resultantes de biologia molecular, como seqüências de DNA e cDNA, pode-se dizer que o alinhamento das seqüências resultado com outras disponíveis em Banco de Dados como o GenBank, é uma passo obrigatório.

Inúmeros algorítimos foram e são propostos com esse objetivo. Um deles é o alinhamento progressivo, e uma de suas implementação mais populares é encontrada no programa ClustalW. Detalhes sobre o funcionamento do programa está fora do escopo desse texto, porém podem ser fácilmente encontrados na internet, e caso tenha acesso, a melhor literatura é o artigo dos autores do programa:

  • Thompson JD, et al. 1994. CLUSTAL W: improving the sensitivity of progressive multiple sequence alignment through sequence weighting, position-specific gap penalties and weight matrix choice. Nucleic Acids Res., 22
  • Larkin MA, et al. 2007. Clustal W and Clustal X version 2.0. Bioinformatics 23: 2947-2948.

O módulo Bio.Clustalw consiste de um grupo de classes e funções que interage com o programa ClustalW em sua versão de linha de comando (O programa ClustalX é a versão gráfica do ClustalW).

Esse módulo, óbviamente, requer que você tenha em seu computador o ClustalW. Digite as palavras ClustalW e Donwload no google e você terá um grande número de sítios de onde baixá-lo, sendo um deles ftp://ftp.ebi.ac.uk/pub/software/clustalw2/.

As funções presentes no módulo:

  • do_alignment
  • parse_file

As classes:

  • ClustalAlignment
  • _AlignCreator
  • MultipleAlignCL

Ao importar o módulo, temos o seguinte:

>>> from Bio.Clustalw import *
>>> dir()
['Alignment', 'Alphabet', 'ClustalAlignment', 'IUPAC', 'MultipleAlignCL', 'Seq', 'SeqRecord', '__builtins__', '__doc__', '__name__', 'clustal_format', 'do_alignment', 'handler', 'os', 'parse_file', 'saxutils', 'string']

A função do_alignment:

Pela documentação da função (conhecida como "docstring" em python):

>>> print do_alignment.__doc__
Perform an alignment with the given command line.

    Arguments:
    o command_line - A command line object that can give out
    the command line we will input into clustalw.
    o alphabet - the alphabet to use in the created alignment. If not
    specified IUPAC.unambiguous_dna and IUPAC.protein will be used for
    dna and protein alignment respectively.

    Returns:
    o A clustal alignment object corresponding to the created alignment.
    If the alignment type was not a clustal object, None is returned.

Vemos que a função do_alignment executa o programa ClustalW segundo uma linha de comando passada como argumento, e retorna o alinhamento resultante. Você precisa passar a linha de comando própriamente dita (uma string), e, caso a codificação da seqüências seja diferente das IUPAC.unambiguous_dna e IUPAC.protein, você deve passar, como segundo argumento, a codificação de suas seqüências.

A função parse_file:

Pela docstring da função:

>>> print parse_file.__doc__
Parse the given file into a clustal aligment object.

    Arguments:
    o file_name - The name of the file to parse.
    o alphabet - The type of alphabet to use for the alignment sequences.
    This should correspond to the type of information contained in the file.
    Defaults to be unambiguous_dna sequence.

A docstring, mais uma vez, diz o suficiente. A função "carrega" um dado arquivo em um objeto da classe ClustalAlignment.

Pela declaração da função no arquivo fonte __init__.py

"def parse_file(file_name, alphabet = IUPAC.unambiguous_dna, debug_level = 0):"

Vemos que a função recebe o seguintes argumentos:

  • file_name, o arquivo a ser carregado;
  • alphabet, o alfabeto pelo qual as seqüências estão codificadas
  • debug_level

O único argumento obrigatório é o nome do arquivo a ser carregado. Caso a codificação de suas seqüências não seja a IUPAC.unambiguous_dna, isto é, suas seqüências tenha apenas as letras "GATC", você deve passar a codificação via argumento alphabet. Excluindo-se o caso onde você queira saber como funcionam as entranhas desse módulo, você pode esquecer o argumento "debug_level".

A classe MultipleAlignCL:

Uma rápida olhada na documentação da classe, encontramos o seguinte:

>>> print MultipleAlignCL.__doc__
Represent a clustalw multiple alignment command line.

    This is meant to make it easy to code the command line options you
    want to submit to clustalw.

    Clustalw has a ton of options and things to do but this is set up to
    represent a clustalw mutliple alignment.

    Warning: I don't use all of these options personally, so if you find
    one to be broken for any reason, please let us know!

>>> print MultipleAlignCL.__init__.__doc__
Initialize some general parameters that can be set as attributes.

        Arguments:
        o sequence_file - The file to read the sequences for alignment from.
        o command - The command used to run clustalw. This defaults to
        just 'clustalw' (ie. assumes you have it on your path somewhere).

        General attributes that can be set:
        o is_quick - if set as 1, will use a fast algorithm to create
        the alignment guide tree.
        o allow_negative - allow negative values in the alignment matrix.

        Multiple alignment attributes that can be set as attributes:
        o gap_open_pen - Gap opening penalty
        o gap_ext_pen - Gap extension penalty
        o is_no_end_pen - A flag as to whether or not there should be a gap
        separation penalty for the ends.
        o gap_sep_range - The gap separation penalty range.
        o is_no_pgap - A flag to turn off residue specific gaps
        o is_no_hgap - A flag to turn off hydrophilic gaps
        o h_gap_residues - A list of residues to count a hydrophilic
        o max_div - A percent identity to use for delay (? - I don't undertand
        this!)
        o trans_weight - The weight to use for transitions

O que podemos tirar de tudo isso? Objetivamente, um objeto da classe MultipleAlignCL representaria uma linha de comando para executar o ClustalW. Esse objeto poderia ser passado para a função "do_alignment" como argumento, ao invés de passar uma string com sua linha de comando.

Certo, mas quais são os parâmetros? Bom, primeiramente, estamos tratando de uma classe e não de uma função, e portanto temos de instancia-la. Para isso, o argumento obrigatório é o arquivo que contém as seqüências a serem alinhadas.

>>> linha_de_comando = MultipleAlignCL("arquivo_seqs.fas")
>>> linha_de_comando.set_output("arquivo_seqs_alinhada.nex","Nexus")
>>> print linha_de_comando
clustalw arquivo_seqs.fas -OUTFILE=arquivo_seqs_alinhada.nex -OUTPUT=NEXUS

Aqui, mais do que nunca, o conhecimento do funcionamento do ClustalW faz-se necessário. Nesse exemplo, acabamos de criar uma linha de comando que alinha as seqüências do arquivo "arquivo_seqs.fas" com os parâmetros padrões do ClustalW, e ajustamos a saída do progama para salvar o resultado no arquivo "arquivo_seqs_alinhada.nex" no formato "Nexus".

Como está explicitado na documentação da classe, o ClustalW permite o usuário personalizar inúmeros parâmetros.

>>> dir(linha_de_comando)
['DNA_MATRIX', 'OUTPUT_CASE', 'OUTPUT_ORDER', 'OUTPUT_SEQNOS', 'OUTPUT_TYPES', 'PROTEIN_MATRIX', 'RESIDUE_TYPES', '__doc__', '__init__', '__module__', '__str__', 'add_seqnos', 'allow_negative', 'change_case', 'command', 'dna_matrix', 'gap_ext_pen', 'gap_open_pen', 'gap_sep_range', 'guide_tree', 'h_gap_residues', 'is_no_end_pen', 'is_no_hgap', 'is_no_pgap', 'is_quick', 'max_div', 'new_tree', 'output_file', 'output_order', 'output_type', 'protein_matrix', 'sequence_file', 'set_dna_matrix', 'set_guide_tree', 'set_new_guide_tree', 'set_output', 'set_protein_matrix', 'set_type', 'trans_weight', 'type']
[[//code]]

Só faz sentido personalizar esses parâmetros se você sabe o que está fazendo. Perceba no resultado acima que existem namespaces (se você não conhece muito python, leia apenas "nomes")  em caixa alta (letras maiúsculas). Esses contém as alternativas válidas para alguns parâmetros a serem passados para o ClustalW. Veja:

[[code = python]]
>>> print linha_de_comando.OUTPUT_TYPES
['GCG', 'GDE', 'PHYLIP', 'PIR', 'NEXUS', 'FASTA']
>>> print linha_de_comando.PROTEIN_MATRIX
['BLOSUM', 'PAM', 'GONNET', 'ID']
[[/code]]

Está fora do escopo do texto discutir o papel de cada parâmetro, já que isso entraria na teoria de como os alinhamentos são gerados e não acrescentaria em nada na explicação de como o Biopython funciona. Porém é interessante exemplificar como você pode personalizá-los.

[[code = python]]
>>> linha_de_comando.set_protein_matrix("BLOSUM")
>>> print linha_de_comando
clustalw arquivo_seqs.fas -OUTFILE=arquivo_seqs_alinhada.nex -OUTPUT=NEXUS -MATRIX=BLOSUM

A classe ClustalAlignment

É a classe que lida com o formato de saída padrão do ClustalW. Geralmente os arquivos nesse formato tem extensão .aln. Não convém detalhar muito, porém vale explicitar que a função parse_file gera um objeto dessa classe. Na prática, sendo bem simplista, ter um objeto desse facilita, principalmente, a visualização do alinhamento no console do python.

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License