Pastebin launched a little side project called HostCabi.net, check it out ;-)Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on Aug 12th, 2011  |  syntax: Python  |  size: 11.10 KB  |  hits: 89  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
This paste has a previous version, view the difference. Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. # -*- coding: cp1252 -*-
  2.  
  3. import csv
  4. from itertools import izip
  5. import time
  6. import shutil
  7. import os
  8. from Bio import SeqIO
  9.  
  10. import wx
  11. import wx.grid as gridlib
  12. import  wx.lib.printout as  printout
  13. import wx.aui as aui
  14. import  wx.lib.scrolledpanel as scrolled
  15.  
  16. import numpy as np
  17. import matplotlib
  18. from matplotlib.figure import Figure
  19. from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg as FigureCanvas
  20. import matplotlib.patches as mpatches
  21.  
  22. class DrawSchema(scrolled.ScrolledPanel):
  23.     """
  24.    Draw schema with matplotlib.
  25.    """
  26.     def __init__(self, parent, id = -1):
  27.         scrolled.ScrolledPanel.__init__(self, parent, -1)
  28.  
  29.         vbox = wx.BoxSizer(wx.VERTICAL)
  30.  
  31.         # Create figure.
  32.         self.fig = matplotlib.figure.Figure(figsize=(20, 15), facecolor='white')
  33.         self.axes = self.fig.add_subplot(111)
  34.         # ----------------------------------------------------------------------------
  35.         # Draw sequence as line.
  36.         seq_x = 0.9
  37.         seq_y = 0.95
  38.         seq_length = -1000
  39.         self.axes.annotate('', xy=(seq_x, seq_y),  xycoords='data',
  40.                 xytext=(seq_length, 0), textcoords='offset points',
  41.                 arrowprops=dict(facecolor='black', arrowstyle="-", linewidth=5),
  42.                 horizontalalignment='right', verticalalignment='bottom',
  43.                 )
  44.         # ----------------------------------------------------------------------------
  45.         # Draw primers.
  46.         # x = pos of primer
  47.         # x = 0 bp = 0.066
  48.         # x = 1000 bp = 0.9
  49.         # 1 bp = 0.000834
  50.         # divide primer by scaled down, because seq is scaled down
  51.         # scaled down = seq_length/1000
  52.         # x = pos * 0,000834 * scaled down
  53.         #---------------------------------------------------------
  54.         # primer_y = up and down in 0.05 steps
  55.         primer_y = 0.9
  56.         primer_length = -70
  57.         #---------------------------------------------------------
  58.         # text_y 0.8 # 0.04 steps
  59.         # 1 bp = 0.143
  60.         # 1000 bp = 0.81
  61.         # x = pos * 0,000667 * scaled down
  62.         text_y = 0.8
  63.         #---------------------------------------------------------
  64.         seq_length = 2054
  65.         scale_factor = float(float(seq_length)/1000.0)
  66.  
  67.         data = ['ARM(BstX-Sbf)R\t-\tMySequence\t1782\tAGACATGGGAACTCGGGAAGGAGAGGCC\tIIIIIIIIIIIIIIIIIIIIIIIIIIII\t0\t0:G>C,1:A>C,3:T>G\n', 'ARM(BstX-Spe)F\t+\tMySequence\t1786\tATGGGAACTCGGGAAGGAGATGAA\tIIIIIIIIIIIIIIIIIIIIIIII\t0\t23:G>A\n', 'ARM-203R\t-\tMySequence\t2050\tCTATCTCTTCTGCCCCTCAAAGG\tIIIIIIIIIIIIIIIIIIIIIII\t0\t\n', 'ARM-50F\t+\tMySequence\t656\tTAATGATAATCTTCCTAATACCCGTCAG\tIIIIIIIIIIIIIIIIIIIIIIIIIIII\t0\t\n', 'ARM-IN442R\t-\tMySequence\t350\tGTAATCTTCCCTGGACCCCGG\tIIIIIIIIIIIIIIIIIIIII\t0\t\n', 'ARM-OE-454F-SpeI\t+\tMySequence\t440\tCCATACTAGTCATGAGGCCTCATCGATCAGTC\tIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII\t0\t4:C>A,7:G>A\n', 'ARM-107F\t+\tMySequence\t713\tGATGATACGAGTTCCAGGTGATAGG\tIIIIIIIIIIIIIIIIIIIIIIIII\t0\t\n', 'ARM-163F\t+\tMySequence\t769\tTTGCTGACCGTGGGCTTTC\tIIIIIIIIIIIIIIIIIII\t0\t\n', 'ARM-203R\t-\tMySequence\t787\tCTATCTCTTCTGCCCCTCAAAGG\tIIIIIIIIIIIIIIIIIIIIIII\t0\t\n', 'ARM-278R\t-\tMySequence\t864\tCAGCGGCAAACATCTGACAAG\tIIIIIIIIIIIIIIIIIIIII\t0\t\n', 'ARM-318R\t-\tMySequence\t905\tGTCGTTATCCATGGATGCCC\tIIIIIIIIIIIIIIIIIIII\t0\t\n', 'ARM-50F\t+\tMySequence\t656\tTAATGATAATCTTCCTAATACCCGTCAG\tIIIIIIIIIIIIIIIIIIIIIIIIIIII\t0\t\n', 'ARM-FL32F\t+\tMySequence\t31\tTGACCGACCAGCCACCAC\tIIIIIIIIIIIIIIIIII\t0\t\n', 'ARM-FL40F\t+\tMySequence\t39\tCAGCCACCACCAACCCAAAC\tIIIIIIIIIIIIIIIIIIII\t0\t\n', 'ARM-INT178-R\t-\tMySequence\t762\tGGAGAGGTTGCTGACCGTGGGC\tIIIIIIIIIIIIIIIIIIIIII\t0\t\n', 'ARM-INT473-R\t-\tMySequence\t1054\tGGATTGCCATTGCTAATTGTGGGGC\tIIIIIIIIIIIIIIIIIIIIIIIII\t0\t\n', 'ARM-INT489-F\t+\tMySequence\t1094\tTGGCCTTCTTCATTCACCCGATGC\tIIIIIIIIIIIIIIIIIIIIIIII\t0\t\n', 'ARM-INT958-R\t-\tMySequence\t1544\tGACTGCGATTGGGCAGGCGC\tIIIIIIIIIIIIIIIIIIII\t0\t\n', 'ARM-OE-1898R\t-\tMySequence\t1876\tGTTATTGTTGTTGACTGGCGCT\tIIIIIIIIIIIIIIIIIIIIII\t0\t\n', 'ARM-OE1898R-ApaI\t-\tMySequence\t1876\tGTTATTGTTGTTGACTGGCGCTGGGCCCTGC\tIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII\t0\t4:A>C,5:T>C,7:T>G\n', 'ARM-OE-1970R\t-\tMySequence\t1946\tCTGGTGGATTAGTTGCTGTGTTTG\tIIIIIIIIIIIIIIIIIIIIIIII\t0\t\n', 'ARM-OE-407F\t+\tMySequence\t406\tTGTGAACCATCCTGAAATCTGA\tIIIIIIIIIIIIIIIIIIIIII\t0\t\n', 'ARM-OE40F-SpeI\t+\tMySequence\t33\tACCGACTAGTCACCACCAACCCAAACC\tIIIIIIIIIIIIIIIIIIIIIIIIIII\t0\t6:C>T,9:C>T\n', 'ARM-OE-454F\t+\tMySequence\t453\tGAGGCCTCATCGATCAGTCTTTAG\tIIIIIIIIIIIIIIIIIIIIIIII\t0\t\n', 'ARM-SPepAS\t-\tMySequence\t480\tATGCAAATGGCTCTGCTAGCAAGGCTTTCTCTTGCAAGTTCTGAAGGAAGAGAGTCTGG\tIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII\t0\t1:A>G\n', 'ARM-TS-10F\t+\tMySequence\t287\tAGCCTTCAAGATTTGAGCACCACAG\tIIIIIIIIIIIIIIIIIIIIIIIII\t0\t\n', 'ARM-TS-11F\t+\tMySequence\t313\tCAACAGCCTCCTACATCCTGTGTCG\tIIIIIIIIIIIIIIIIIIIIIIIII\t0\t\n', 'ARM-TS-12R\t-\tMySequence\t577\tCAGAACAATCAACGAAGGAAGCATTTC\tIIIIIIIIIIIIIIIIIIIIIIIIIII\t0\t\n', 'ARM-TS-13R\t-\tMySequence\t687\tGACGAGGAGTGTGACATCAACGATG\tIIIIIIIIIIIIIIIIIIIIIIIII\t0\t\n', 'ARM-TS-14R\t-\tMySequence\t350\tGTAATCTTCCCTGGACCCCGG\tIIIIIIIIIIIIIIIIIIIII\t0\t\n', 'ARM-TS-4F\t+\tMySequence\t32\tGACCGACCAGCCACCACCAAC\tIIIIIIIIIIIIIIIIIIIII\t0\t\n', 'ARM-TS-5R\t-\tMySequence\t246\tGTATCCGCCCCTTCCGCAAC\tIIIIIIIIIIIIIIIIIIII\t0\t\n', 'ARM-TS-6R\t-\tMySequence\t216\tTCCCCCTCACCGCAGCATC\tIIIIIIIIIIIIIIIIIII\t0\t\n', 'ARM-TS-7R\t-\tMySequence\t49\tCAACCCAAACCAACGCGGC\tIIIIIIIIIIIIIIIIIII\t0\t\n', 'HO14H18_3UTR-F\t+\tMySequence\t1329\tAAGCCTCTCGTGGACTTGCT\tIIIIIIIIIIIIIIIIIIII\t0\t\n', 'HO14H18_3UTR-R\t-\tMySequence\t1604\tAGCGAAAGCGAAGGAAAATG\tIIIIIIIIIIIIIIIIIIII\t0\t\n', 'N-ARM1231F\t+\tMySequence\t1788\tGGGAACTCGGCGAGGAGATGATG\tIIIIIIIIIIIIIIIIIIIIIII\t0\t10:G>C,11:A>G,21:G>T\n', 'RNR5-598R\t-\tMySequence\t577\tCAGAACAATCAACGAAGGAAGCAT\tIIIIIIIIIIIIIIIIIIIIIIII\t0\t\n', 'RNR5_RNAi-F\t+\tMySequence\t1218\tCATGTCCTGGAAACAGGGAA\tIIIIIIIIIIIIIIIIIIII\t0\t\n', 'RNR5_RNAi-R\t-\tMySequence\t1801\tGGAGATGAGGACGATGGTCC\tIIIIIIIIIIIIIIIIIIII\t0\t\n', 'WRNR5-RACE4\t-\tMySequence\t466\tTCAGTCTTCAGATTATGCAAATGGCTCTGC\tIIIIIIIIIIIIIIIIIIIIIIIIIIIIII\t0\t21:T>C\n', 'ARM-EXON1-F1\t+\tMySequence\t114\tGTGCCGTGCCGTGCCTCA\tIIIIIIIIIIIIIIIIII\t0\t\n', 'ARM-EXON1-F1\t+\tMySequence\t109\tGTGCCGTGCCGTGCCTCA\tIIIIIIIIIIIIIIIIII\t1\t15:G>T,16:T>C,17:G>A\n', 'ARM-EXON1-F1\t+\tMySequence\t104\tGTGCCGTGCCGTGCCTCA\tIIIIIIIIIIIIIIIIII\t1\t15:G>T,16:T>C,17:G>A\n', 'ARM-EXON1-R1\t-\tMySequence\t246\tGTATCCGCCCCTTCCGGCAA\tIIIIIIIIIIIIIIIIIIII\t0\t0:C>A,2:A>C,3:C>G\n', 'ARM-EXON2-F1\t+\tMySequence\t293\tCAAGATTTGAGCACCACAGGCAACAG\tIIIIIIIIIIIIIIIIIIIIIIIIII\t0\t\n', 'ARM-EXON2-R1\t-\tMySequence\t350\tGTAATCTTCCCTGGACCCCGGG\tIIIIIIIIIIIIIIIIIIIIII\t0\t\n', 'ARM-EXON2-R2\t-\tMySequence\t417\tCTGAAATCTGATGCACATGTGAACCAT\tIIIIIIIIIIIIIIIIIIIIIIIIIII\t0\t\n', 'WRNR5-R1\t-\tMySequence\t406\tTGTGAACCATCCTGAAATCTGATGC\tIIIIIIIIIIIIIIIIIIIIIIIII\t0\t\n', 'WRNR5-F1\t+\tMySequence\t403\tGCATGTGAACCATCCTGAAATCTGA\tIIIIIIIIIIIIIIIIIIIIIIIII\t0\t\n', 'WRNR5-R4\t-\tMySequence\t333\tTGTCGGTACTTGGTAGGGTAATCTTCC\tIIIIIIIIIIIIIIIIIIIIIIIIIII\t0\t\n', 'WRNR5-F4\t+\tMySequence\t216\tTTCCCCTCACCGCAGCATC\tIIIIIIIIIIIIIIIIIII\t0\t1:C>T\n', 'WRNR5-R5\t-\tMySequence\t211\tCTCGTTTCCCCTCACCGCA\tIIIIIIIIIIIIIIIIIII\t0\t12:C>T,17:C>T\n', 'WRNR5-cDNA-Seq_1670R\t-\tMySequence\t1726\tGAACACCACGCGCAAGAGAAAAG\tIIIIIIIIIIIIIIIIIIIIIII\t0\t\n', 'WRNR5-cDNA-Seq_1306R\t-\tMySequence\t1363\tCACGAGGAAAGAAAGATGCGGTTA\tIIIIIIIIIIIIIIIIIIIIIIII\t0\t\n', 'WRNR5-cDNA-Seq_798R\t-\tMySequence\t855\tCCATCTGTTCGGCGGCAAA\tIIIIIIIIIIIIIIIIIII\t0\t8:A>G,14:T>C\n', 'WRNR5-cDNA-Seq_729R\t-\tMySequence\t786\tTCTGTCTCTTCCGCCCCTCAAA\tIIIIIIIIIIIIIIIIIIIIII\t0\t10:T>C,18:A>G\n', 'WRNR5-cDNA-Seq_530R\t-\tMySequence\t578\tGGAACAATCAACGGAGGAAGCATC\tIIIIIIIIIIIIIIIIIIIIIIII\t0\t0:T>C,10:A>G,23:A>G\n', 'WRNR5-cDNA-Seq_1714F\t+\tMySequence\t1770\tTTCCGCAGCCAAAGACAT\tIIIIIIIIIIIIIIIIII\t0\t\n', 'WRNR5-cDNA-Seq_1670F\t+\tMySequence\t1726\tGAACACCACGCGCAAGAGAAAAG\tIIIIIIIIIIIIIIIIIIIIIII\t0\t\n', 'WRNR5-cDNA-Seq_1302F\t+\tMySequence\t1359\tAGCCCACGAGGAAAGAAAGATGC\tIIIIIIIIIIIIIIIIIIIIIII\t0\t\n', 'WRNR5-cDNA-Seq_933F\t+\tMySequence\t990\tATAGAAGGTCAGAGATCAGCAACA\tIIIIIIIIIIIIIIIIIIIIIIII\t0\t\n', 'WRNR5-cDNA-Seq_864F\t+\tMySequence\t921\tGCCCGGGGTGATTTCTCTGC\tIIIIIIIIIIIIIIIIIIII\t0\t7:A>G\n']
  68.  
  69.         for primer in data:
  70.             primer = primer.strip()
  71.             primer = primer.split('\t')
  72.             primer_name = primer[0]
  73.             primer_pos = primer[3]
  74.             orientation = primer[1]
  75.             if orientation == '+':
  76.                 arrow = "->"
  77.                 colour = 'red'
  78.             elif orientation == '-':
  79.                 arrow = "<-"
  80.                 colour = 'blue'
  81.  
  82.             # Calculate primer and text position
  83.             primer_x = (float(primer_pos) / scale_factor) * 0.000834
  84.             text_x = (float(primer_pos) / scale_factor) * 0.000667
  85.  
  86.             self.axes.annotate('', xy=(primer_x+0.06, primer_y),  xycoords='data',
  87.                     xytext=(primer_length, -0.1), textcoords='offset points',    # -50 = length, 0= direction
  88.                     arrowprops=dict(edgecolor=colour, arrowstyle=arrow, linewidth=3),
  89.                     horizontalalignment='right', verticalalignment='bottom',
  90.                     )
  91.  
  92.             self.fig.text(text_x+0.15, text_y, primer_name + ' (' + str(primer_pos) + ')', ha="center", size=14)
  93.  
  94.             primer_y = primer_y - 0.05
  95.             text_y = text_y - 0.04
  96.  
  97.         # ----------------------------------------------------------------------------
  98.         # Description
  99.         self.fig.text(0.186, 0.97, 'Primer Factory 2 Results', ha="center", size=14)
  100.         self.fig.text(0.189, 0.95, str(time.ctime()), ha="center", size=14)
  101.         self.fig.text(0.189, 0.93, 'Query Sequence ' + str(seq_length) +' bp', ha="center", size=14)
  102.         self.fig.text(0.185, 0.91, str(len(data)) +' Primers where found', ha="center", size=14)
  103.         # Scale
  104.         self.fig.text(0.14, 0.87, '0 bp', ha="center", size=14)
  105.         self.fig.text(0.805, 0.87, str(seq_length) +' bp', ha="center", size=14)
  106.  
  107.         self.axes.set_frame_on(False)
  108.         self.axes.set_axis_off()
  109.  
  110.         self.canvas = FigureCanvas(self, -1, self.fig)
  111.  
  112.         vbox.Add(self.canvas, 0, wx.ALIGN_LEFT|wx.ALL, 5)
  113.         self.SetSizer(vbox)
  114.         self.SetAutoLayout(1)
  115.         self.SetupScrolling()
  116.  
  117.  
  118.  
  119. class ShowResults(wx.Frame):
  120.     def __init__(self):
  121.         wx.Frame.__init__(self, None, wx.ID_ANY,
  122.                           "Primer Factory Results",
  123.                           size=(1350,1000))
  124.  
  125.         self._mgr = aui.AuiManager()
  126.  
  127.         self._mgr.SetManagedWindow(self)
  128.  
  129.         self.notebook = aui.AuiNotebook(self, wx.aui.AUI_NB_SCROLL_BUTTONS)
  130.         panelTwo = DrawSchema(self.notebook)
  131.  
  132.         self.notebook.AddPage(panelTwo, "Schema", False)
  133.  
  134.         self._mgr.AddPane(self.notebook,
  135.                           aui.AuiPaneInfo().Name("notebook_content").
  136.                           CenterPane().PaneBorder(False))
  137.         self._mgr.Update()
  138.  
  139.  
  140. if __name__ == '__main__':
  141.     app = wx.PySimpleApp()
  142.     frame = ShowResults()
  143.     frame.Show(True)
  144.     app.MainLoop()