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

生物技术

开发平台:

C/C++

  1. #!/usr/bin/python
  2. # $Id: dotter.py,v 1000.1 2003/11/21 21:44:13 gouriano Exp $
  3. #
  4. # Author:  Josh Cherry
  5. #
  6. # launch dotter (from gbench) using sequences we're handed
  7. import sys
  8. import cgi
  9. import os
  10. import tempfile
  11. def writefasta(seq, fname, seqname):
  12.    s = ">" + seqname + "n"
  13.    for pos in range(0, len(seq), 60):
  14.       s += seq[pos:pos+60]
  15.       s += 'n'
  16.    f = open(fname, "w")
  17.    f.write(s)
  18.    f.close
  19. input = sys.stdin.read()
  20. args = cgi.parse_qs(input)
  21. action = args['action'][0]
  22. # if a get info call ...
  23. if action == 'info':
  24.    print '''
  25.    PluginInfo ::= {
  26.       ver-major 0,
  27.       ver-minor 0,
  28.       ver-revision 0,
  29.       ver-build-date "",
  30.       class-name "dotter.py",
  31.       menu-item "Alignments/Dot matrix comparison",
  32.       tooltip "Dot matrix comparison of sequences using dotter",
  33.       commands algo {
  34.         {
  35.           command 3,
  36.           args {
  37.             {
  38.               name "hseq",
  39.               desc "Horizontal sequence",
  40.               data single object {
  41.                 docaddr "(nil)",
  42.                 objaddr "(nil)",
  43.                 subtype "Seq-loc"
  44.               }
  45.             },
  46.             {
  47.               name "vseq",
  48.               desc "Vertical sequence",
  49.               data single object {
  50.                 docaddr "(nil)",
  51.                 objaddr "(nil)",
  52.                 subtype "Seq-loc"
  53.               }
  54.             }
  55.           }
  56.         }
  57.       }
  58.     }
  59.     '''
  60.    sys.exit(0)
  61. # otherwise, run
  62. hseq = args['hseq'][0]
  63. vseq = args['vseq'][0]
  64. # write temporary fasta files containing the sequences
  65. fname0 = tempfile.mktemp('.fasta')
  66. fname1 = tempfile.mktemp('.fasta')
  67. loc0 = cgi.parse_qs(hseq);
  68. loc1 = cgi.parse_qs(vseq);
  69. writefasta(loc0['seq'][0], fname0, loc0['title'][0])
  70. writefasta(loc1['seq'][0], fname1, loc1['title'][0])
  71. # run dotter in background
  72. # redirect all output to /dev/null (otherwise interpreter goes zombie)
  73. os.system('dotter %s %s >& /dev/null &' % (fname0, fname1))
  74. # cheesy: wait a few seconds so dotter can read its files,
  75. # then delete them
  76. import time
  77. time.sleep(5)
  78. os.system('rm %s %s' % (fname0, fname1))
  79. # ===========================================================================
  80. # $Log: dotter.py,v $
  81. # Revision 1000.1  2003/11/21 21:44:13  gouriano
  82. # PRODUCTION: UPGRADED [ORIGINAL] Dev-tree R1.4
  83. #
  84. # Revision 1.4  2003/11/17 21:55:40  jcherry
  85. # Ask for two single Seq-locs rather than one array
  86. #
  87. # Revision 1.3  2003/10/29 20:12:05  jcherry
  88. # Reflect new spec for plugin args
  89. #
  90. # Revision 1.2  2003/10/07 13:47:02  dicuccio
  91. # Renamed CPluginURL* to CPluginValue*
  92. #
  93. # Revision 1.1  2003/07/28 18:24:31  jcherry
  94. # Initial version
  95. #
  96. # ===========================================================================
  97. #  ===========================================================================
  98. #  PRODUCTION $Log: dotter.py,v $
  99. #  PRODUCTION Revision 1000.1  2003/11/21 21:44:13  gouriano
  100. #  PRODUCTION PRODUCTION: UPGRADED [ORIGINAL] Dev-tree R1.4
  101. #  PRODUCTION
  102. #  ===========================================================================