Advertisement
Guest User

Untitled

a guest
Aug 14th, 2011
226
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 11.08 KB | None | 0 0
  1. # -*- coding: cp1252 -*-
  2.  
  3. import csv
  4. from itertools import izip
  5. import time
  6. import shutil
  7. import os
  8.  
  9. import wx
  10. import wx.grid as gridlib
  11. import  wx.lib.printout as  printout
  12. import wx.aui as aui
  13. import  wx.lib.scrolledpanel as scrolled
  14.  
  15. import numpy as np
  16. import matplotlib
  17. from matplotlib.figure import Figure
  18. from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg as FigureCanvas
  19. import matplotlib.patches as mpatches
  20.  
  21. class DrawSchema(scrolled.ScrolledPanel):
  22.     """
  23.    Draw schema with matplotlib.
  24.    """
  25.     def __init__(self, parent, id = -1):
  26.         scrolled.ScrolledPanel.__init__(self, parent, -1)
  27.  
  28.         vbox = wx.BoxSizer(wx.VERTICAL)
  29.  
  30.         # Create figure.
  31.         self.fig = matplotlib.figure.Figure(figsize=(20, 15), facecolor='white')
  32.         self.axes = self.fig.add_subplot(111)
  33.         # ----------------------------------------------------------------------------
  34.         # Draw sequence as line.
  35.         seq_x = 0.9
  36.         seq_y = 0.95
  37.         seq_length = -1000
  38.         self.axes.annotate('', xy=(seq_x, seq_y),  xycoords='data',
  39.                 xytext=(seq_length, 0), textcoords='offset points',
  40.                 arrowprops=dict(facecolor='black', arrowstyle="-", linewidth=5),
  41.                 horizontalalignment='right', verticalalignment='bottom',
  42.                 )
  43.         # ----------------------------------------------------------------------------
  44.         # Draw primers.
  45.         # x = pos of primer
  46.         # x = 0 bp = 0.066
  47.         # x = 1000 bp = 0.9
  48.         # 1 bp = 0.000834
  49.         # divide primer by scaled down, because seq is scaled down
  50.         # scaled down = seq_length/1000
  51.         # x = pos * 0,000834 * scaled down
  52.         #---------------------------------------------------------
  53.         # primer_y = up and down in 0.05 steps
  54.         primer_y = 0.9
  55.         primer_length = -70
  56.         #---------------------------------------------------------
  57.         # text_y 0.8 # 0.04 steps
  58.         # 1 bp = 0.143
  59.         # 1000 bp = 0.81
  60.         # x = pos * 0,000667 * scaled down
  61.         text_y = 0.8
  62.         #---------------------------------------------------------
  63.         seq_length = 2054
  64.         scale_factor = float(float(seq_length)/1000.0)
  65.  
  66.         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']
  67.  
  68.         for primer in data:
  69.             primer = primer.strip()
  70.             primer = primer.split('\t')
  71.             primer_name = primer[0]
  72.             primer_pos = primer[3]
  73.             orientation = primer[1]
  74.             if orientation == '+':
  75.                 arrow = "->"
  76.                 colour = 'red'
  77.             elif orientation == '-':
  78.                 arrow = "<-"
  79.                 colour = 'blue'
  80.  
  81.             # Calculate primer and text position
  82.             primer_x = (float(primer_pos) / scale_factor) * 0.000834
  83.             text_x = (float(primer_pos) / scale_factor) * 0.000667
  84.  
  85.             self.axes.annotate('', xy=(primer_x+0.06, primer_y),  xycoords='data',
  86.                     xytext=(primer_length, -0.1), textcoords='offset points',    # -50 = length, 0= direction
  87.                     arrowprops=dict(edgecolor=colour, arrowstyle=arrow, linewidth=3),
  88.                     horizontalalignment='right', verticalalignment='bottom',
  89.                     )
  90.  
  91.             self.fig.text(text_x+0.15, text_y, primer_name + ' (' + str(primer_pos) + ')', ha="center", size=14)
  92.  
  93.             primer_y = primer_y - 0.05
  94.             text_y = text_y - 0.04
  95.  
  96.         # ----------------------------------------------------------------------------
  97.         # Description
  98.         self.fig.text(0.186, 0.97, 'Primer Factory 2 Results', ha="center", size=14)
  99.         self.fig.text(0.189, 0.95, str(time.ctime()), ha="center", size=14)
  100.         self.fig.text(0.189, 0.93, 'Query Sequence ' + str(seq_length) +' bp', ha="center", size=14)
  101.         self.fig.text(0.185, 0.91, str(len(data)) +' Primers where found', ha="center", size=14)
  102.         # Scale
  103.         self.fig.text(0.14, 0.87, '0 bp', ha="center", size=14)
  104.         self.fig.text(0.805, 0.87, str(seq_length) +' bp', ha="center", size=14)
  105.  
  106.         self.axes.set_frame_on(False)
  107.         self.axes.set_axis_off()
  108.  
  109.         self.canvas = FigureCanvas(self, -1, self.fig)
  110.  
  111.         vbox.Add(self.canvas, 0, wx.ALIGN_LEFT|wx.ALL, 5)
  112.         self.SetSizer(vbox)
  113.         self.SetAutoLayout(1)
  114.         self.SetupScrolling()
  115.  
  116.  
  117.  
  118. class ShowResults(wx.Frame):
  119.     def __init__(self):
  120.         wx.Frame.__init__(self, None, wx.ID_ANY,
  121.                           "Primer Factory Results",
  122.                           size=(1350,1000))
  123.  
  124.         self._mgr = aui.AuiManager()
  125.  
  126.         self._mgr.SetManagedWindow(self)
  127.  
  128.         self.notebook = aui.AuiNotebook(self, wx.aui.AUI_NB_SCROLL_BUTTONS)
  129.         panelTwo = DrawSchema(self.notebook)
  130.  
  131.         self.notebook.AddPage(panelTwo, "Schema", False)
  132.  
  133.         self._mgr.AddPane(self.notebook,
  134.                           aui.AuiPaneInfo().Name("notebook_content").
  135.                           CenterPane().PaneBorder(False))
  136.         self._mgr.Update()
  137.  
  138.  
  139. if __name__ == '__main__':
  140.     app = wx.PySimpleApp()
  141.     frame = ShowResults()
  142.     frame.Show(True)
  143.     app.MainLoop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement