spacepaste

  1.  
  2. #!/usr/bin/env python
  3. #encoding=utf-8
  4. import abifpy
  5. from Bio.Seq import Seq
  6. from Bio.SeqRecord import SeqRecord
  7. #from Bio.Emboss.Applications import NeedleCommandline #nao consegui fazer esse modulo funcionar
  8. import os #uso a funcao listdir
  9. from Bio import SeqIO
  10. import subprocess #para chamar outros subprocessos como needle, finchtv
  11. import shlex #shlex.split é útil para determinar os argumentos dos subprocessos no bash
  12. import glob #para processamento em lote
  13. def acessa_ab1(arquivo,trim=True): #generalizar depois
  14. """acessa um arquivo ab1 e retorna um objeto SeqRecord
  15. arquivo --> string com o caminho absoluto para o arquivo"""
  16. dado = abifpy.Trace(arquivo)
  17. if trim:
  18. cortado = Seq(dado.trim(dado.seq(ambig=True)))
  19. return SeqRecord(cortado, id=arquivo, name=dado.meta['sample']+'_'+dado.meta['well'], description='dado cortado')
  20. else:
  21. return dado.seqrecord()
  22. def abre_ref(arquivo):
  23. """acessa um arquivo contendo uma sequencia de referencia
  24. retorna um objeto SeqRecord"""
  25. with open(arquivo, 'rUb') as dado:
  26. referencia = SeqIO.read(dado, 'genbank')
  27. return referencia
  28. def salva_fasta(diretorio, obj_SeqRecord):
  29. """Pega um objeto SeqRecord e cria um fasta com a sua sequencia"""
  30. SeqIO.write(obj_SeqRecord, diretorio + obj_SeqRecord.name + '.fasta','fasta')
  31. def processar_lote(diretorio, ref):
  32. """abre os arquivos ab1 de uma pasta, apara, salva em fasta, faz o alinhamento com
  33. o fasta de referencia e salva o alinhamento em um arquivo para analise
  34. posterior.
  35. diretorio --> uma string representando o caminho da pasta contendo os arquivos
  36. ref --> uma string representando o caminho absoluto + genbank com a
  37. sequencia de referencia.
  38. """
  39. referencia = abre_ref(ref)
  40. referencia.id = 'sequencia de referencia'
  41. referencia.name = 'referencia'
  42. pasta = '/home/mercutio22/Dropbox/My_scripts/Fabi/resultados/'
  43. salva_fasta(pasta, referencia)
  44. ab1files = glob.iglob(diretorio + '*.ab1')
  45. for file in ab1files:
  46. dado = acessa_ab1(file)
  47. salva_fasta(pasta, dado)
  48. needle_cline = '/usr/bin/needle -asequence '+ pasta +'referencia.fasta\
  49. -bsequence '+ pasta + dado.name + '.fasta -gapopen 10 -gapextend 0.5 -outfile\
  50. ' + pasta + dado.name + '_aligned.txt'
  51. print needle_cline
  52. alinhar = shlex.split(needle_cline)
  53. print alinhar
  54. needle_run = subprocess.call(needle_cline)
  55. pasta = '/home/mercutio22/Dropbox/My_scripts/Fabi/vs/Seq_placa273_analisada/'
  56. referencia = '/home/mercutio22/Dropbox/My_scripts/Fabi/vs/Seq_placa273_analisada/BRCA1 (total) - Frag 3450.gb'
  57. processar_lote(pasta, referencia)
  58.