-
- #!/usr/bin/env python
- #encoding=utf-8
-
- import abifpy
- from Bio.Seq import Seq
- from Bio.SeqRecord import SeqRecord
- #from Bio.Emboss.Applications import NeedleCommandline #nao consegui fazer esse modulo funcionar
- import os #uso a funcao listdir
- from Bio import SeqIO
- import subprocess #para chamar outros subprocessos como needle, finchtv
- import shlex #shlex.split é útil para determinar os argumentos dos subprocessos no bash
- import glob #para processamento em lote
-
-
- def acessa_ab1(arquivo,trim=True): #generalizar depois
- """acessa um arquivo ab1 e retorna um objeto SeqRecord
- arquivo --> string com o caminho absoluto para o arquivo"""
-
- dado = abifpy.Trace(arquivo)
- if trim:
- cortado = Seq(dado.trim(dado.seq(ambig=True)))
- return SeqRecord(cortado, id=arquivo, name=dado.meta['sample']+'_'+dado.meta['well'], description='dado cortado')
- else:
- return dado.seqrecord()
-
- def abre_ref(arquivo):
- """acessa um arquivo contendo uma sequencia de referencia
- retorna um objeto SeqRecord"""
- with open(arquivo, 'rUb') as dado:
- referencia = SeqIO.read(dado, 'genbank')
- return referencia
-
- def salva_fasta(diretorio, obj_SeqRecord):
- """Pega um objeto SeqRecord e cria um fasta com a sua sequencia"""
-
- SeqIO.write(obj_SeqRecord, diretorio + obj_SeqRecord.name + '.fasta','fasta')
-
- def processar_lote(diretorio, ref):
- """abre os arquivos ab1 de uma pasta, apara, salva em fasta, faz o alinhamento com
- o fasta de referencia e salva o alinhamento em um arquivo para analise
- posterior.
- diretorio --> uma string representando o caminho da pasta contendo os arquivos
- ref --> uma string representando o caminho absoluto + genbank com a
- sequencia de referencia.
- """
-
- referencia = abre_ref(ref)
- referencia.id = 'sequencia de referencia'
- referencia.name = 'referencia'
- pasta = '/home/mercutio22/Dropbox/My_scripts/Fabi/resultados/'
- salva_fasta(pasta, referencia)
- ab1files = glob.iglob(diretorio + '*.ab1')
- for file in ab1files:
- dado = acessa_ab1(file)
- salva_fasta(pasta, dado)
- needle_cline = '/usr/bin/needle -asequence '+ pasta +'referencia.fasta\
- -bsequence '+ pasta + dado.name + '.fasta -gapopen 10 -gapextend 0.5 -outfile\
- ' + pasta + dado.name + '_aligned.txt'
- print needle_cline
- alinhar = shlex.split(needle_cline)
- print alinhar
- needle_run = subprocess.call(needle_cline)
-
-
- pasta = '/home/mercutio22/Dropbox/My_scripts/Fabi/vs/Seq_placa273_analisada/'
- referencia = '/home/mercutio22/Dropbox/My_scripts/Fabi/vs/Seq_placa273_analisada/BRCA1 (total) - Frag 3450.gb'
- processar_lote(pasta, referencia)
-