Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # -*- coding: cp1252 -*-
- import csv
- from itertools import izip
- import time
- import shutil
- import os
- from Bio import SeqIO
- import wx
- import wx.grid as gridlib
- import wx.lib.printout as printout
- import wx.aui as aui
- import wx.lib.scrolledpanel as scrolled
- import numpy as np
- import matplotlib
- from matplotlib.figure import Figure
- from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg as FigureCanvas
- import matplotlib.patches as mpatches
- class DrawSchema(scrolled.ScrolledPanel):
- """
- Draw schema with matplotlib.
- """
- def __init__(self, parent, id = -1):
- scrolled.ScrolledPanel.__init__(self, parent, -1)
- vbox = wx.BoxSizer(wx.VERTICAL)
- # Create figure.
- self.fig = matplotlib.figure.Figure(figsize=(20, 15), facecolor='white')
- self.axes = self.fig.add_subplot(111)
- # ----------------------------------------------------------------------------
- # Draw sequence as line.
- seq_x = 0.9
- seq_y = 0.95
- seq_length = -1000
- self.axes.annotate('', xy=(seq_x, seq_y), xycoords='data',
- xytext=(seq_length, 0), textcoords='offset points',
- arrowprops=dict(facecolor='black', arrowstyle="-", linewidth=5),
- horizontalalignment='right', verticalalignment='bottom',
- )
- # ----------------------------------------------------------------------------
- # Draw primers.
- # x = pos of primer
- # x = 0 bp = 0.066
- # x = 1000 bp = 0.9
- # 1 bp = 0.000834
- # divide primer by scaled down, because seq is scaled down
- # scaled down = seq_length/1000
- # x = pos * 0,000834 * scaled down
- #---------------------------------------------------------
- # primer_y = up and down in 0.05 steps
- primer_y = 0.9
- primer_length = -70
- #---------------------------------------------------------
- # text_y 0.8 # 0.04 steps
- # 1 bp = 0.143
- # 1000 bp = 0.81
- # x = pos * 0,000667 * scaled down
- text_y = 0.8
- #---------------------------------------------------------
- seq_length = 2054
- scale_factor = float(float(seq_length)/1000.0)
- 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']
- for primer in data:
- primer = primer.strip()
- primer = primer.split('\t')
- primer_name = primer[0]
- primer_pos = primer[3]
- orientation = primer[1]
- if orientation == '+':
- arrow = "->"
- colour = 'red'
- elif orientation == '-':
- arrow = "<-"
- colour = 'blue'
- # Calculate primer and text position
- primer_x = (float(primer_pos) / scale_factor) * 0.000834
- text_x = (float(primer_pos) / scale_factor) * 0.000667
- self.axes.annotate('', xy=(primer_x+0.06, primer_y), xycoords='data',
- xytext=(primer_length, -0.1), textcoords='offset points', # -50 = length, 0= direction
- arrowprops=dict(edgecolor=colour, arrowstyle=arrow, linewidth=3),
- horizontalalignment='right', verticalalignment='bottom',
- )
- self.fig.text(text_x+0.15, text_y, primer_name + ' (' + str(primer_pos) + ')', ha="center", size=14)
- primer_y = primer_y - 0.05
- text_y = text_y - 0.04
- # ----------------------------------------------------------------------------
- # Description
- self.fig.text(0.186, 0.97, 'Primer Factory 2 Results', ha="center", size=14)
- self.fig.text(0.189, 0.95, str(time.ctime()), ha="center", size=14)
- self.fig.text(0.189, 0.93, 'Query Sequence ' + str(seq_length) +' bp', ha="center", size=14)
- self.fig.text(0.185, 0.91, str(len(data)) +' Primers where found', ha="center", size=14)
- # Scale
- self.fig.text(0.14, 0.87, '0 bp', ha="center", size=14)
- self.fig.text(0.805, 0.87, str(seq_length) +' bp', ha="center", size=14)
- self.axes.set_frame_on(False)
- self.axes.set_axis_off()
- self.canvas = FigureCanvas(self, -1, self.fig)
- vbox.Add(self.canvas, 0, wx.ALIGN_LEFT|wx.ALL, 5)
- self.SetSizer(vbox)
- self.SetAutoLayout(1)
- self.SetupScrolling()
- class ShowResults(wx.Frame):
- def __init__(self):
- wx.Frame.__init__(self, None, wx.ID_ANY,
- "Primer Factory Results",
- size=(1350,1000))
- self._mgr = aui.AuiManager()
- self._mgr.SetManagedWindow(self)
- self.notebook = aui.AuiNotebook(self, wx.aui.AUI_NB_SCROLL_BUTTONS)
- panelTwo = DrawSchema(self.notebook)
- self.notebook.AddPage(panelTwo, "Schema", False)
- self._mgr.AddPane(self.notebook,
- aui.AuiPaneInfo().Name("notebook_content").
- CenterPane().PaneBorder(False))
- self._mgr.Update()
- if __name__ == '__main__':
- app = wx.PySimpleApp()
- frame = ShowResults()
- frame.Show(True)
- app.MainLoop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement