bl2seq.py
上传用户:yhdzpy8989
上传日期:2007-06-13
资源大小:13604k
文件大小:3k
源码类别:

生物技术

开发平台:

C/C++

  1. #!/usr/bin/python
  2. # $Id: bl2seq.py,v 1000.0 2003/10/31 21:37:46 gouriano Exp $
  3. #
  4. # Author:  Josh Cherry
  5. #
  6. # align two nucleotide sequences using bl2seq
  7. # (from gbench)
  8. import sys
  9. import cgi
  10. import os
  11. import tempfile
  12. def writefasta(seq, fname, seqname):
  13.    s = ">" + seqname + "n"
  14.    for pos in range(0, len(seq), 60):
  15.       s += seq[pos:pos+60]
  16.       s += 'n'
  17.    f = open(fname, "w")
  18.    f.write(s)
  19.    f.close
  20. input = sys.stdin.read()
  21. args = cgi.parse_qs(input)
  22. action = args['action'][0]
  23. # if a get info call ...
  24. if action == 'info':
  25.    print '''
  26.    PluginInfo ::= {
  27.       ver-major 0,
  28.       ver-minor 0,
  29.       ver-revision 0,
  30.       ver-build-date "",
  31.       class-name "bl2seq.py",
  32.       menu-item "Alignments/Align two sequences using blast",
  33.       tooltip "Align two sequences using blast (bl2seq)",
  34.       commands algo {
  35.         {
  36.           command 3,
  37.           args {
  38.             {
  39.               name "locs",
  40.               desc "Locations to evaluate",
  41.               data array {
  42.                 object {
  43.                   docaddr "(nil)",
  44.                   objaddr "(nil)",
  45.                   subtype "Seq-loc"
  46.                 }
  47.               }
  48.             }
  49.           }
  50.         }
  51.       }
  52.     }
  53.     '''
  54.    sys.exit(0)
  55. # otherwise, run
  56. locs = args['locs']
  57. if len(locs) != 2:
  58.    sys.stderr.write("need exactly 2 sequences; you supplied %dn" % len(locs))
  59.    sys.exit(1)
  60. # write temporary fasta files contining the sequences
  61. fname0 = tempfile.mktemp('.fasta')
  62. fname1 = tempfile.mktemp('.fasta')
  63. loc0 = cgi.parse_qs(locs[0]);
  64. loc1 = cgi.parse_qs(locs[1]);
  65. writefasta(loc0['seq'][0], fname0, loc0['title'][0])
  66. writefasta(loc1['seq'][0], fname1, loc1['title'][0])
  67. # run bl2seq, which must be on path
  68. os.system('bl2seq -p blastn -i %s -j %s' % (fname0, fname1))
  69. # then delete temporary fasta files
  70. os.system('rm %s %s' % (fname0, fname1))
  71. # ===========================================================================
  72. # $Log: bl2seq.py,v $
  73. # Revision 1000.0  2003/10/31 21:37:46  gouriano
  74. # PRODUCTION: IMPORTED [ORIGINAL] Dev-tree R1.4
  75. #
  76. # Revision 1.4  2003/10/29 20:12:05  jcherry
  77. # Reflect new spec for plugin args
  78. #
  79. # Revision 1.3  2003/10/07 19:12:25  jcherry
  80. # Reflected change of PluginURL to PluginValue (changed addr to
  81. # value in asn.1)
  82. #
  83. # Revision 1.2  2003/10/07 13:47:01  dicuccio
  84. # Renamed CPluginURL* to CPluginValue*
  85. #
  86. # Revision 1.1  2003/07/28 18:24:31  jcherry
  87. # Initial version
  88. #
  89. # ===========================================================================
  90. #  ===========================================================================
  91. #  PRODUCTION $Log: bl2seq.py,v $
  92. #  PRODUCTION Revision 1000.0  2003/10/31 21:37:46  gouriano
  93. #  PRODUCTION PRODUCTION: IMPORTED [ORIGINAL] Dev-tree R1.4
  94. #  PRODUCTION
  95. #  ===========================================================================