#!/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)