Repository 'oligator'
hg clone https://toolshed.g2.bx.psu.edu/repos/abims-sbr/oligator

Changeset 0:a811f7256f6e (2018-04-27)
Commit message:
planemo upload for repository https://github.com/abims-sbr/tools-abims/tree/master/tools/oligator commit b7e63a01570e9fc381abb01d5b176fcea024e251
added:
oligator.xml
oligator/guimixin.py
oligator/launchmodes.py
oligator/oligator.py
oligator/oligator_cmdLine.py
oligator/quitter.py
oligator/scrolledtext.py
oligator/traitefasta.py
oligator/traitefasta.pyc
test-data/allseqfasta.fas
test-data/oligator_anti-sens.csv
test-data/oligator_results.csv
test-data/oligator_sens.csv
b
diff -r 000000000000 -r a811f7256f6e oligator.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/oligator.xml Fri Apr 27 08:42:52 2018 -0400
[
@@ -0,0 +1,40 @@
+<tool id="oligator" name="Oligator" version="1.2.0" >
+
+    <description>Oligator: design PCR primers</description>
+
+    <requirements>
+        <requirement type="package" version="2.7">python</requirement>
+        <requirement type="package" version="1.4.0">argparse</requirement>
+    </requirements>
+
+    <command><![CDATA[
+        python $__tool_directory__/oligator/oligator_cmdLine.py --input $input --tm $tm
+    ]]></command>
+    <inputs>
+        <param argument="--input" type="data" format="fasta" label="DNA sequence - fasta format" />
+        <param argument="--tm" type="integer" value="70" label="Tm temperature" />
+    </inputs>
+    <outputs>
+       <data name="oligator_results" format="tabular" from_work_dir="oligator_results.csv" label="Oligator_global" />
+       <data name="oligator_sens" format="tabular" from_work_dir="oligator_sens.csv" label="Oligator_sens" />
+       <data name="oligator_anti_sens" format="tabular" from_work_dir="oligator_anti-sens.csv" label="Oligator_anti-sens" />
+    </outputs>
+    <tests>
+        <test>
+            <param name="input" value="allseqfasta.fas" ftype="fasta" />
+            <param name="tm" value="70" />
+            <output name="oligator_results" value="oligator_results.csv" />
+            <output name="oligator_sens" value="oligator_sens.csv" />
+            <output name="oligator_anti_sens" value="oligator_anti-sens.csv" />
+        </test>
+    </tests>
+    <help><![CDATA[
+.. class:: infomark
+
+**Authors**
+Oligator was written by Frederic Lechauve frederic_lechauve@yahoo.fr
+and integrated in Galaxy by ABiMS - Station Biologique de Roscoff - Sorbonne Université / CNRS
+
+    ]]></help>
+    <citations/>
+</tool>
b
diff -r 000000000000 -r a811f7256f6e oligator/guimixin.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/oligator/guimixin.py Fri Apr 27 08:42:52 2018 -0400
b
@@ -0,0 +1,74 @@
+#!/usr/bin/env python
+########################################################
+# a "mixin" class for other frames: common methods for
+# canned-dialogs, spawning programs, etc; must be mixed
+# with a class derived from Frame for its quit method
+########################################################
+
+from ScrolledText import ScrolledText
+from Tkinter import Button, Frame, Toplevel, X
+
+from launchmodes import PortableLauncher, System
+
+from tkFileDialog import askopenfilename, asksaveasfilename
+
+from tkMessageBox import askyesno, showerror, showinfo
+
+
+class GuiMixin:
+    def infobox(self, title, text, *args):              # use standard dialogs
+        return showinfo(title, text)                    # *args for bkwd compat
+
+    def errorbox(self, text):
+        showerror('Error!', text)
+
+    def question(self, title, text, *args):
+        return askyesno(title, text)
+
+    def notdone(self):
+        showerror('Not implemented', 'Option not available')
+
+    def quit(self):
+        ans = self.question('Verify quit', 'Are you sure you want to quit?')
+        if ans == 1:
+            Frame.quit(self)                            # quit not recursive!
+
+    def help(self):
+        self.infobox('RTFM', 'See figure 1...')         # override this better
+
+    def selectOpenFile(self, file="", dir="."):         # use standard dialogs
+        return askopenfilename(initialdir=dir, initialfile=file)
+
+    def selectSaveFile(self, file="", dir="."):
+        return asksaveasfilename(initialfile=file, initialdir=dir)
+
+    def clone(self):
+        new = Toplevel()                  # make a new version of me
+        myclass = self.__class__          # instance's (lowest) class object
+        myclass(new)                      # attach/run instance to new window
+
+    def spawn(self, pycmdline, wait=0):
+        if not wait:
+            PortableLauncher(pycmdline, pycmdline)()     # run Python progam
+        else:
+            System(pycmdline, pycmdline)()               # wait for it to exit
+
+    def browser(self, filename):
+        new = Toplevel()                                # make new window
+        text = ScrolledText(new, height=30, width=90)    # Text with scrollbar
+        text.config(font=('courier', 10, 'normal'))      # use fixed-width font
+        text.pack()
+        new.title("Text Viewer")                         # set window mgr attrs
+        new.iconname("browser")
+        text.insert('0.0', open(filename, 'r').read())  # insert file's text
+
+
+if __name__ == '__main__':
+    class TestMixin(GuiMixin, Frame):      # stand-alone test
+        def __init__(self, parent=None):
+            Frame.__init__(self, parent)
+            self.pack()
+            Button(self, text='quit',  command=self.quit).pack(fill=X)
+            Button(self, text='help',  command=self.help).pack(fill=X)
+            Button(self, text='clone', command=self.clone).pack(fill=X)
+    TestMixin().mainloop()
b
diff -r 000000000000 -r a811f7256f6e oligator/launchmodes.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/oligator/launchmodes.py Fri Apr 27 08:42:52 2018 -0400
[
@@ -0,0 +1,93 @@
+#!/usr/bin/env python
+#
+# launchmodes.py
+#
+# $Log: launchmodes.py,v $
+# Revision 1.1.2.1  2003/04/16 18:19:43  nadya
+# Multiple changes to incorporate Postgres as an alternative to MySQL
+#
+#
+
+###############################################################
+# launch Python programs with reusable launcher scheme classes;
+# assumes 'python' is on your system path (but see Launcher.py)
+###############################################################
+
+import os
+import string
+# import sys
+
+pycmd = 'python'   # assume it is on your system path
+
+
+class LaunchMode:
+    def __init__(self, label, command):
+        self.what = label
+        self.where = command
+
+    def __call__(self):                   # on call, ex: button press callback
+        self.announce(self.what)
+        self.run(self.where)              # subclasses must define run()
+
+    def announce(self, text):             # subclasses may redefine announce()
+        print(text)                        # methods instead of if/elif logic
+
+    def run(self, cmdline):
+        assert 0, 'run must be defined'
+
+
+class System(LaunchMode):                          # run shell commands
+    def run(self, cmdline):                        # caveat: blocks caller
+        os.system('%s %s' % (pycmd, cmdline))      # unless '&' added on Linux
+
+
+class Popen(LaunchMode):                           # caveat: blocks caller
+    def run(self, cmdline):                        # since pipe closed too soon
+        os.popen(pycmd + ' ' + cmdline)            # 1.5.2 fails in Windows GUI
+
+
+class Fork(LaunchMode):
+    def run(self, cmdline):
+        assert hasattr(os, 'fork')                 # for linux/unix today
+        cmdline = string.split(cmdline)            # convert string to list
+        if os.fork() == 0:                         # start new child process
+            os.execvp(pycmd, [pycmd] + cmdline)    # run new program in child
+
+
+class Top_level(LaunchMode):
+    def run(self, cmdline):                          # new window, same process
+        # tbd: need GUI class info
+        assert 0, 'Sorry - mode not yet implemented'
+
+
+# if sys.platform[:3] == 'win':
+#     PortableLauncher = Spawn            # pick best launcher for platform
+# else:                                   # need to tweak this code elsewhere
+PortableLauncher = Fork
+
+
+class QuietPortableLauncher(PortableLauncher):
+    def announce(self, text):
+        pass
+
+
+def selftest():
+    myfile = 'launchmodes.py'
+    program = 'textEditor.py ' + myfile       # assume in cwd
+    input('default mode...')  # raw_input in python 2
+    launcher = PortableLauncher('PyEdit', program)
+    launcher()                                                # no block
+
+    input('system mode...')
+    System('PyEdit', program)()                               # blocks
+
+    input('popen mode...')
+    Popen('PyEdit', program)()                                # blocks
+
+#    if sys.platform[:3] == 'win':
+#        raw_input('DOS start mode...')                        # no block
+#        Start('PyEdit', program)()
+
+
+if __name__ == '__main__':
+    selftest()
b
diff -r 000000000000 -r a811f7256f6e oligator/oligator.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/oligator/oligator.py Fri Apr 27 08:42:52 2018 -0400
b
@@ -0,0 +1,81 @@
+#!/usr/bin/env python
+
+from Tkinter import Button, Entry, Label, Tk
+
+# from guimixin import *
+
+from quitter import Quitter
+
+from tkFileDialog import askopenfilename
+
+from tkMessageBox import showerror, showinfo
+
+from traitefasta import traitefasta
+# import math                       # module de mathematique
+# import string                     # module d'utilitaire standard
+
+
+class Application:
+
+    def __init__(self):
+
+        self.root = Tk()                 # cree la fenetre
+        self.root.title('OLIGATOR')
+
+        # cree le texte
+        Label(self.root, text='Fichier a traiter:').grid(row=0)
+        self.entree1 = Entry(self.root, width=10)
+        self.entree1.grid(row=0, column=1)
+        test = self.entree1
+        Button(
+            self.root, text='Browse...',
+            command=(
+                lambda x=test: x.insert(0, askopenfilename()))).grid(
+                    row=0, column=2)
+
+        Label(self.root, text='Tm (temperature de fusion) :').grid(row=1)
+        self.entree2 = Entry(self.root, width=10)
+        self.entree2.grid(row=1, column=1)
+
+        Label(self.root, text='Nom des fichiers de sortie:').grid(row=2)
+        self.entree3 = Entry(self.root, width=10)
+        self.entree3.grid(row=2, column=1)
+
+        Button(
+            self.root, text='Run',
+            command=self.runOligator).grid(row=3, column=1)
+        Quitter(self.root).grid(row=3, column=4)
+        Button(
+            self.root, text='Help',
+            command=self.runHelp).grid(row=3, column=5)
+
+        self.root.mainloop()
+
+    def runOligator(self):
+        self.n = self.entree1.get()
+        self.tm = self.entree2.get()
+        self.nom_sortie = self.entree3.get()
+
+        self.message_creation = 'vous venez de creer 3 fichiers de resultats:'
+        self.message_creation += '\n-'+self.nom_sortie+'\n-'+self.nom_sortie
+        self.message_creation += '_sens.csv\n-'
+        self.message_creation += self.nom_sortie+'_anti-sens.csv'
+
+        if self.n != "" and self.tm != "" and self.nom_sortie != "":
+            try:
+                traitefasta(self.n, self.tm, self.nom_sortie)
+                showinfo('resultat', self.message_creation)
+            except ImportError:
+                showerror('Error!', "Votre fichier n'est pas au format fasta")
+
+        if self.n == "" or self.nom_sortie == "" or self.tm == "":
+            showerror('Error!', "Vous n'avez pas remplis tous les champs")
+
+    def runHelp(self):
+        showinfo(
+            'Help', 'Oligator version 1.1 edition du 29 octobre 2004.\n\n \
+            Ce logiciel a ete realise par Frederic Lechauve \
+            frederic_lechauve@yahoo.fr en python 2.3')
+
+
+f = Application()
b
diff -r 000000000000 -r a811f7256f6e oligator/oligator_cmdLine.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/oligator/oligator_cmdLine.py Fri Apr 27 08:42:52 2018 -0400
b
@@ -0,0 +1,39 @@
+#!/usr/bin/env python
+# -*- coding:utf-8 -*-
+# Author : LECHAUVE Frederic - frederic_lechauve@yahoo.fr
+# Command line version (03/09/2013) : CORMIER Alexandre -
+#                                       acormier@sb-roscoff.fr
+# Command line version (26/04/2018) : LE CORGUILLE Gildas -
+#                                       lecorguille@sb-roscoff.fr
+
+# ##################################import des librairies######################
+
+import argparse                     # module pour parser les arguments
+
+import traitefasta
+
+# #################################creation du module pour les options#########
+
+parser = argparse.ArgumentParser(
+    description="Oligator : design PCR primers\n")
+parser.add_argument(
+    "-i", "--input", action="store", dest="file", type=open,
+    required=True, help="input file : fasta format")
+parser.add_argument(
+    "-t", "--tm", action="store", type=int, dest="Tm",
+    required=True, help="Tm value")
+parser.add_argument(
+    "-o", "--output", action="store", dest="output",
+    type=argparse.FileType('w'), help="output filename")
+parser.add_argument(
+    '--version', action='version', version='%(prog)s v1.2')
+
+options = parser.parse_args()
+
+fileIn = options.file.name
+Tm = options.Tm
+Out = 'oligator'  # nom par defaut (utile pour Galaxy)
+if options.output is not None:
+    Out = options.output.name
+
+traitefasta.traitefasta(fileIn, Tm, Out)
b
diff -r 000000000000 -r a811f7256f6e oligator/quitter.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/oligator/quitter.py Fri Apr 27 08:42:52 2018 -0400
b
@@ -0,0 +1,24 @@
+#!/usr/bin/env python
+
+from Tkinter import BOTH, Button, Frame, LEFT, YES        # get widget classes
+
+from tkMessageBox import askokcancel           # get canned std dialog
+
+
+class Quitter(Frame):                          # subclass our GUI
+    def __init__(self, parent=None):           # constructor method
+        Frame.__init__(self, parent)
+        self.pack()
+        widget = Button(self, text='Quit', command=self.quit)
+        widget.pack(expand=YES, fill=BOTH, side=LEFT)
+
+    def quit(self):
+        ans = askokcancel(
+            'Verifier exit', "Voulez vous quitter l'application?")
+        if ans:
+            Frame.quit(self)
+
+
+if __name__ == '__main__':
+    Quitter().mainloop()
+# def ende(): Quitter().mainloop()
b
diff -r 000000000000 -r a811f7256f6e oligator/scrolledtext.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/oligator/scrolledtext.py Fri Apr 27 08:42:52 2018 -0400
[
@@ -0,0 +1,51 @@
+#!/usr/bin/env python
+
+import sys
+from Tkinter import BOTH, END, Frame, INSERT, LEFT, RIGHT
+from Tkinter import SUNKEN, Scrollbar, Text, Tk, YES
+
+print('PP2E scrolledtext')
+
+
+class ScrolledText(Frame):
+
+    def __init__(self, parent=None, text='', file=None):
+        Frame.__init__(self, parent)
+        self.pack(expand=YES, fill=BOTH)
+        self.makewidgets()
+        self.settext(text, file)
+
+    def makewidgets(self):
+        sbar = Scrollbar(self)
+        text = Text(self, relief=SUNKEN)
+        sbar.config(command=text.yview)
+        text.config(yscrollcommand=sbar.set)
+        sbar.pack(side=RIGHT, fill=YES)
+        text.pack(side=LEFT, expand=YES, fill=BOTH)
+        self.text = text
+
+    def settext(self, text='', file=None):
+        if file:
+            text = open(file, 'r').read()
+        self.text.delete('1.0', END)
+        self.text.insert('1.0', text)
+        self.text.mark_set(INSERT, '1.0')
+        self.text.focus()
+
+    def gettext(self):
+        return self.text.get('1.0', END+'-1c')
+
+
+if __name__ == '__main__':
+    root = Tk()
+
+    try:
+        st = ScrolledText(file=sys.argv[1])
+    except IndexError:
+        st = ScrolledText(text='Words\ngo here')
+
+    def show(event):
+        print(repr(st.gettext()))
+
+    root.bind('<Key-Escape>', show)
+    root.mainloop()
b
diff -r 000000000000 -r a811f7256f6e oligator/traitefasta.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/oligator/traitefasta.py Fri Apr 27 08:42:52 2018 -0400
[
@@ -0,0 +1,133 @@
+#!/usr/bin/env python
+
+
+# ##################################import des librairies#####################
+
+# import math                     # module de mathematique
+import string                     # module d'utilitaire standard
+
+# #################################Fonction###################################
+
+
+def traitefasta(n, tm, nom_sortie):
+
+    n = open(n, 'r')                   # ouverture dufichier
+    dico = {}                         # declaration du dictionnaire
+    liste_id = []
+
+    for ligne in n.readlines():       # lit toute les lignes du fichier
+
+        if ligne[0] == '>':            # matche les lignes debutant par >
+            # une variable recoit la ligne contenant le nom de la seq
+            # sans le superieur et sans le retour chariot
+            n = ligne[1:-1]
+            liste_id.append(n)
+            t = ''                      # la variable t est initialisee
+        else:
+            t = t + ligne[:-1]   # t recoit la sequence sans le retour chariot
+
+        t = string.upper(t)      # on passe la sequence en majuscule
+        # on cree un dictionnaire ayant pour cle le nom de la seq
+        # et pour valeur la sequence
+        dico[n] = t
+
+    # #######################traitement du dictionnaire#######################
+    sortie = open(nom_sortie+'_results.csv', 'w')
+    sortie_csv = nom_sortie+'_sens.csv'
+    sortie_anticsv = nom_sortie+'_anti-sens.csv'
+    sortie1 = open(sortie_csv, 'w')
+    sortie2 = open(sortie_anticsv, 'w')
+    temp = int(tm)
+
+    for x in liste_id:          # balaie tous les cles du fichier
+
+        i = 0                         # initialisation du compteur de lettre
+        j = 0                         # initialisation du Tm
+        # la variable seq recoit la sequence correspondante a la cle
+        seq = dico[x]
+        oligo = ''                    # initialisation de l'oligo
+        # tant que le tm est inferieur a 70 la boucle continue
+        while j < temp:
+            if seq[i] == 'A':      # test le nucleotide de rang i
+                j = j+2
+            elif seq[i] == 'T':
+                j = j+2
+            elif seq[i] == 'G':
+                j = j+4
+            elif seq[i] == 'C':
+                j = j+4
+            # on concatene les resultats pour creer l'oligo sens
+            oligo = oligo+seq[i]
+            i = i+1                    # on incremente
+
+        taille = len(oligo)
+        taille = str(taille)
+        j = str(j)              # transforme le chiffre en chaine de caractere
+        sortie.write(x)   # on ecrit les resultats dans le fichier de resultat
+        sortie.write('\n')
+        sortie.write(oligo)
+        sortie.write('\n')
+        sortie.write('Tm = ')
+        sortie.write(j)
+        sortie.write('\n')
+        sortie.write('The oligo length is ')
+        sortie.write(taille)
+        sortie.write(' nucleotide(s)\n\n')
+
+        sortie1.write(x)
+        sortie1.write(';')
+        sortie1.write(oligo)
+        sortie1.write(';')
+        sortie1.write(taille)
+        sortie1.write('\n')
+
+    for x in dico.keys():         # balaie tous les cles du fichier
+        # initialisation du compteur de lettre a -1
+        # pour creer l'oligoantisens pour parcourir le mot a l'envers
+        i = -1
+        j = 0                        # initialisation du Tm
+        # la variable seq recoit la sequence correspondante a la cle
+        seq = dico[x]
+        oligo = ''                   # initialisation de l'oligo
+        inv = ''
+        # tant que le Tm est inferieur a 70 la boucle continue
+        while j < temp:
+            if seq[i] == 'A':     # test le nucleotide de rang i
+                j = j+2
+                inv = 'T'
+            elif seq[i] == 'T':
+                j = j+2
+                inv = 'A'
+            elif seq[i] == 'G':
+                j = j+4
+                inv = 'C'
+            elif seq[i] == 'C':
+                j = j+4
+                inv = 'G'
+            oligo = oligo+inv
+            i = i-1                 # on decremente
+
+        taille = len(oligo)
+        taille = str(taille)
+        j = str(j)            # transforme le chiffre en chaine de caractere
+        sortie.write(x)
+        sortie.write('_antisens\n')
+        sortie.write(oligo)
+        sortie.write('\n')
+        sortie.write('Tm = ')
+        sortie.write(j)
+        sortie.write('\n')
+        sortie.write('The oligo length is ')
+        sortie.write(taille)
+        sortie.write(' nucleotide(s)\n\n')
+
+        sortie2.write(x)
+        sortie2.write(';')
+        sortie2.write(oligo)
+        sortie2.write(';')
+        sortie2.write(taille)
+        sortie2.write('\n')
+
+    sortie.close()
+    sortie1.close()
+    sortie2.close()
b
diff -r 000000000000 -r a811f7256f6e oligator/traitefasta.pyc
b
Binary file oligator/traitefasta.pyc has changed
b
diff -r 000000000000 -r a811f7256f6e test-data/allseqfasta.fas
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/allseqfasta.fas Fri Apr 27 08:42:52 2018 -0400
b
b'@@ -0,0 +1,1302 @@\n+>zga_344_GH3\r\n+CAAGATAAAGCACGACCTTCCGACAAGAAGATAGAAAAGCTCATTTCTAAAATGAGCCTA\r\n+GAGGAAAAAGTGCATCAATTGGCCACGCAATACCCCAATGCCAACATGCGATTGGGTATA\r\n+CCGAACCTGAGTGCCAACGAATGCCTGCACGGAATAAAAATGGATAGCGCAACGGTATTT\r\n+CCACAAGCCATAGCCATGGCAAGTACATGGGATACTGAACTGATCGAAAGAATGGGACAT\r\n+ACGGTGGCCAAGGAGTCAAGGGCCTTCGGCATCCATCAATGTTACACCCCTATGCTGGCC\r\n+GTGGTACGCGATGTACGTTGGGGGCGAACCGAAGAAAGCTATGGCGAAGACCCGTATTTG\r\n+GTGGGTAAAATCGGTTCATCGTACATCAGGGGATTGCAGGGCATGGGAGCGGAACGCTTT\r\n+GATGAAAACCATATAATGGCTACGGCCAAGCACTTTGTGGCCGATGGGGAACCTATGGCC\r\n+GGCGACAATGGTGCGGCGCACGATATATCGGAATACACGCTTCAAAATGTGCATTTATAT\r\n+CCATTTCGGATGGCCATTGAGGAAGCCGAGGTAGGCGCGATAATGCCGGCCCATCACCTT\r\n+TTGAACGGTATACCTTGCCATGCGAACAAACACGTAATGCAGACCGTACTTCGCGATGAA\r\n+TGGGGATGGGACGGGCTTGTGGTCTCTGACAATGGGGATATGCGCTCCTTAAAACGGGTT\r\n+TTTAATTATGTTCCCGATTACGAACATGCGGCCAAAAAAGGTTTGGAGGCTGGAATTCAT\r\n+CAAGAACTGGCCCTTTTTCAAGGCTGGAGCGACCATCGTATGTTTGGCGATTACCTGATA\r\n+TCGGCAGTAAATAAAAAGATAGTGCCCGTCGCTCTTGTAGACGATGCGGTAAAACATGTA\r\n+TTACAGGCTAAATTCGATCTAGGTCTTTTTGATACCGATATCAAAAACGACGAGCGTTTC\r\n+GATGTCCTTAAAAACCCCGATAACGGTGAGCCGGACAAGGTTAGCCAGCACGATGCCGAA\r\n+ATGTTTAAAAAGGCCCTCTATGTAGGGATTCCTAAAAAGGATTGGAAGAAAACCGTTTTT\r\n+GACCAAAGTCATAATGACCTGGCCCTTGAAGTGGCACAGAAGTCCATTGTACTCTTAAAA\r\n+AATGAAGGGGATCTTCTTCCGCTCAAAAAGGAAAAGTATAAAAAGATAAGTGTTGTAGGG\r\n+CCCAATGGAAAGGCCATGCGCTTGGGAGGCTATTCTCCCGACAATCCTAAATACTACATC\r\n+AACATAGTAGAGGGAATACAAAACTACCTCGGTAGTGATAGGGAGGTCGCCTTTGAAGAG\r\n+GGCTGCGATTTTACCGACTCTACGGCAAATATTCCGAAAGCGGTGGCATTGGCCGAATCT\r\n+TCCGACATCACCATCGTTGCTATCGGCGGATCGGAAGAAACCTGCCGAGAGAATGAAGAT\r\n+CGTGATGACCTAAGCCTTCCCGGGCCACAACAAAAATTGGTAGAGGCCATTCACGCCACG\r\n+GGCAAACCTTATGTAGTGGTACTGCTCAATGGTAGGCCTCTTTCCATTGAATGGATTGCC\r\n+GAGAATTCTCAGGCCATTGTAGAAGGGTGGTATCTAGGGCAGGAAACAGGAAAAGCGATC\r\n+GCCAATATATTGTTCGGAAAGGTAAACCCAAGTGGTAAACTACCAATAACCTTTCCTAGA\r\n+AACGTAGGTCAGGTGCCCTTGTTTTACAATAAGCTGGAAACCGGACGCCCTAGACAGATA\r\n+TATAACTCCGATCCCGAACCCTTGTTTCCGTTCGGTTACGGGTTGAGCTATACTTCCTTT\r\n+GAACTAGGTGAGCCCCGACTTTCAAATGAAACCATAGCCGCAAATGAACTGACAACGGTA\r\n+AATATTCCTATAACCAAT\r\n+\r\n+>zga_344_Fn3\r\n+GAAACGGTGGTCCAACTGTATGTGCACGATGTTCTTTCCGAAAGGGTGCGCCCCCAAAAG\r\n+GAACTGCGCAATTTTAAAAGAGTGGCCCTAAAACCGGGTGAGACAAAACAAATAAGTATC\r\n+AAAATCGGTGCTCAGCAATTGGAGTATTGGAACGATGGTAAGTGGACGATAGAACCGGGA\r\n+CAATTTGATATCATGGTCGGATTGGACTCCAAACACCTCAAAAAAGTAGCCTTAACTGTC\r\n+AAAAAT\r\n+\r\n+>zga_347_GH3\r\n+CAAAGCAAGCAAAAGATATATCACAAAAACTGGGTCGATTTTAATAAGAACGGCAAAAAG\r\n+GATGTTTATGAAGATCCCACACGGCCAGTAGACCTTCGTATTGAAGACTTGCTCTCACAA\r\n+ATGACCTTAGAGGAAAAAAGTTGCCAAATGGCCACCCTCTATGGCTTTGGTAGGGTATTG\r\n+AAAGATGAATTGCCGACCCCCGATTGGAAAAATCAGATATGGAAAGACGGTATCGGCAAT\r\n+ATAGACGAGCAACTCAATAATCTAGCTTACCACCCTTCGGCCGTGACCGATAAGGCTTGG\r\n+CCTCCCTCGAATCATATCAAAGCCTTGAACACCATTCAGGAATTCTTTGTAGAAGACACC\r\n+CGTTTGGGTATTCCGGTTGATTTCACCAATGAAGGCATACGGGGGCTGTGCCATGAAAAG\r\n+GCCACTAGTTTTCCCTCACAACTCGGGGTAGGGGCTACATGGAACAAAAATTTGGTCGGT\r\n+AAAATAGGACATATTACCGGAAAAGAAGCCCGGCTATTGGGCTATACCAATGTGTATTCT\r\n+CCCATACTCGATATTGCGCGCGACCCACGCTGGGGCAGGGTCGTGGAGTGCTACGGGGAA\r\n+GACCCCTACCTGGTAGGCGAACTCGGTTATCAAATGGTAAAGGGAATACAGCAAGAGAAA\r\n+GTGGTTTCCACTCCCAAACACTTTGCCATATACAGTGCACCAAAAGGAGGTCGTGACGGC\r\n+GATGCCCGAACCGATGCCCATATTACCGAGCGCGAATTATTTTCTCTTTATTTACATCCC\r\n+TTTAAACGTGCTATCAAAGATGCCGGCGCCATGGGGGTGATGAGTTCTTATAACGATTAC\r\n+AATGGGGTGCCGGTGAGCTCCTCCAAATATTTTTTGAACGATATTCTACGTGAAGATTGG\r\n+GGCTTTAAAGGCTATGTGGTATCCGATAGCCGTGCGGTCGAATTTATTGCCGATAAACAC\r\n+CATGTGGCCAAAGACCGCAAGGATGCGGTTCGACAGGCTGTTCTCGCAGGTTTGAATGTA\r\n+AGAACCGATTTTACCATGCCCGAAGACTTTATTCTTCCGGTTCGGGAGTTGGTCAAGGAA\r\n+GGAGGGCTTGACATGGCCACCATTGACGACCGCGTACGCGATATTCTAAGGGTGAAATTC\r\n+TGGCAAGGACTTTTTGATGCTCCTTATGGGAAGCAAATGAAAGAGGCGGATAAGACCGTC\r\n+GGGAAGCCTGAGTACCAAGAAGTGGCATACCAAGCTTCCTTGGAAAGCATTGTCTTGCTC\r\n+AAAAACGAAGAAAACATTCTCCCTCTCGACTTTTCAAAATATAAATCGGTGTTGGTTACG\r\n+GGCCCCAATGCCAAGGCCATCAATCACTCGGTAAGTAGATACGGTCCATCTCACATTGAT\r\n+GTGGTTTCGGTTTTTGACGGAATAAAGGAAAAATTCCCTAAAGACGTAGAGATAAAGTAC\r\n+ACCAAGGGCTGTGTTTTTTTTGATGAAAATTGGCCCGATAGCGAATTGATGAACACCCCG\r\n+CCAACGGAAGCGGAACAAAGTGAAATCGACAAGGCTGTGGCGATGGCGAAAACGGTAGGC\r\n+TTGGCCATAGTGGTTTTGGGCGATGACGAAGAAACCGTAGGGGAATCGCGATCTA'..b'TG\r\n+CGTCGAGGCAGCGACCGCGTTCAAGCTCAACTGCGCCGCGATGGCAATGCTTGGGGAATT\r\n+CCAATCACGCTGACCAAAGCGGTCACGTTGCAAGAAGGCAGCGGCAACTTGTCCGTGACT\r\n+TACTTGCTGGAGAACCTGCCACCGGCCAGCCCTCTGCACTTCGCCGTGGAGTGGAACTTT\r\n+GCTGGTCTGCCGTCCGGAGCTGACGACCGTTATTTCAGCGACGTCGACGGCAACCAACTC\r\n+GGGCAACTCGGCGAACGTTTGGACCTCACCGATGTTCGCGGCTTGTCGCTCTCGGATCGT\r\n+TGGTTGGGCGTCGACATCGACTTGCGAACCAATCGCGACAGTGGCGTTTGGGCATTCCCA\r\n+GTCGAAACGGTCAGTCAAAGCGAAGCTGGGTTTGAACTCGTGCATCAATCGGTGTGCGTG\r\n+ATGCCTCACTGGATCATCACTGCGGATGCCGAAGGACGCTGGGCGGTCACGATCGACATC\r\n+GCGACTCGCTGCGAAAATTCGGTCGAACTTCAATCCCACGATCATGTGAACGCG\r\n+\r\n+>zga_4659\r\n+TCAGGAATTAAAGAATACCAACTATTTATCGACGGAAAATGGGTTACCTCAACCTCAGGT\r\n+GAGACCATAGATATTATAAACCCATCTACCGAAGAGGTCGTTGCAAGGGTTCAGAACGGT\r\n+ACGGTCGAAGAGGCCCATCTAGCGCTACAGGCGGCCGAAAAGGCCCAAAAGGAATGGAAG\r\n+AAATTACCGGCCCGTTCGCGTGCCGAGCTCCTGTATAAGTTGGCCGATGAGATTAAGGCG\r\n+AATTCCGATTTCTTGGCCGAGCTCTTGGTCAAGGAACAGGGGAAACTGCTAAAAGTAGCT\r\n+AAGGGGGAAGTGGCTGTTACCGCTTCTTTTATTGAATATGCTTGTGAAGGGGCTAGAAGA\r\n+ATCGAGGGGGATATTGTGCCTTCCGACAACCCTAACGAGCAAATTTGGATCCAGAAAATA\r\n+CCTCGCGGCGTAGTGGTTGCCATTACCGCTTGGAATTTCCCATTGGCCTTGGCCGGTCGT\r\n+AAATTAGGTCCAGCCTTGGTTGCCGGAAATACTATCGTTATAAAACCGACTTCCGAAACG\r\n+CCTTTGGCTACTTTGGAATTGGGTAATCTTGCGAAAAAAGTGGGTATTCCAGATGGGGTC\r\n+ATCAATATATTGACCGGTCCGGGTAGGGCCATGGGTAATGCCCTTGTTGAAAGTCCTATT\r\n+ACTAAAATGGTGACAATGACCGGTTCTACGCCCGTGGGTCAGTCTATTGCCAGGGCCGCG\r\n+GCACAAAACCTTACGCACGTTCAGTTGGAACTTGGAGGGAAAGCTCCTTTTATTGTTTTT\r\n+GAAGACGCCGATATCGATGCCGCTGTAGACGCTGCCCTACACTCGCGTTTTGATAACTGT\r\n+GGACAGGTGTGTACCTGTAATGAAAGAATGTACGTTCATGAGGGCATTTACGATGCCTTT\r\n+ATGGAAAAATTTATCGCCAAGACAAAGGCTATTAAGGTAGGTGACCCTATGTTGGAGGAT\r\n+ACCGATATGGGACCTAAAGTAAATGCTTCCGAATTAAAGCATATGGAGCATTTGGTTGCC\r\n+GTGAGCCTAGAAGAAGGTGCGACTTTGGCTACAGGGGGTAAAAAACTTGAAGGTGGTGCT\r\n+TTTGAAAAAGGATTTTGGTTTGAGCCTACGGTTTTGACCAATGTAACCCAAAATATGACC\r\n+ATTGTTCATGAAGAATCTTTTGGGCCAATTCTTCCCGTCTTGAAATTCAAGACTTTTGAA\r\n+GAAGTGGTCGGTTATGCCAATGACTGTGAATACGGACTTGCGGCCATGGTCTTTACCAAT\r\n+GATATGAATACCATCATGAAGTGTAATGATGAGTTGGAATACGGTGAAATCTACGTAAAC\r\n+CGTGGTCATGGTGAACAACACCAAGGCTTCCATAACGGATATAAGCTAAGTGGCTCGGGA\r\n+GGTGAAGATGGGAAGTACGGCTTTGAGCAGTACATGGAGAAAAAGACGTTTTATATTAGA\r\n+CACAAGGCA\r\n+\r\n+>RB10507\r\n+GCAGAAGAGACGACGATCGTGTCTCCCTCGGGAGATCAGTCGATCCGGTTTTCGCTTCAT\r\n+GATGGGGTGCCGCACTACAGTGTCTCCTTTCGGGACGTCACCATTCTTGACAATTCCAAG\r\n+CTTTCGCTGGTTCTCGATGGGAGCGGACTCGAGGAACAGTTCGTTGTCGAGAGCAAGCAG\r\n+ACCGAATCTGTAAACGGAAGTTGGGTTCCTGTGGTCGGTTCCAGAGCTTCCTACCCTGAT\r\n+TCTTACAATGCGTGTGTCATTCAACTTCGTGGGGCAACTCAGAAGGCACAACGGCTTGAA\r\n+CTGGCATTCCGGGCATACGACGAAGGGGTCGCGTTCCGCTACACGATTCCTCCGCAAGAA\r\n+GGGATCGATGAGTTAAAGCTGAAATCGGAAGCGACTCACTTTCAGTTCACGGACGATCAC\r\n+TTTGTTTACTGGGACGATTATCCGCAAGCACGGTATTCCAAGCTGCGACTTTCTGAGATG\r\n+CCGGAACGCTCGATTCGCCCGCTGCTCGTCGAAGCAGGATCGCATTTTGTGGCAATCGCC\r\n+GAAGCAGGAAGCCTCGGGCATTACGCCCCCATGATGTTGAATCGATCCGGTAAGAATCAA\r\n+CTGGTCACGCGGTTTCGAAGTGGGACCGTGTCGGCAAGCAAGTCACTGACGACTCCTTGG\r\n+CGAGTGATCATGGTGGCGGAACAACCTGGGACGTTGGTTGAAAATCATTACCTGCTTCAG\r\n+AATCTTTCGCCGCCGTCCAAGTTGAGTGACACATCATGGATCAAACCGGGAAAGGTCTGG\r\n+CGAAGTAGTCTGACGACGGAGGGTGCAAAAGCGATTGTCGACTACGCTGCCGCGAACAAT\r\n+TACCAATACGTGCACTATGACGCTGGTTGGTATGGCCCTGAACGCGACGCGAATTCGGAC\r\n+CCACTGACGGTCATCGATCCGATCGACATGCAGGAAACGATTCGCTATGCGGACCAACAC\r\n+GGTATCGGGTTGATCTGCTACATCAACAAAATTGCCATGTCAGGGTACGACCTCGACAAA\r\n+ACATTTCGGACGTTTCAAAAATGGGGCATTCGCGGGGTCAAGATGGGGTTTGTTGACTGG\r\n+AAGAGCCAGTCTGACATGGAGTTCTTGTACGCTGCGATCGAGAAAGCTGCGGAATACGAA\r\n+TTGATCGTTGATATCCATGACAACTTTCGGTTGACCGGGATCGAACGCACGTACCCTCAT\r\n+CTTCTGACGGTCGAAGGAATTCTTGGGAATGAGGAGCGTCCGGACAACGGGAATCCGCCG\r\n+AAGAATGTTCTGACCACATCGTTTGCTCGCATGATCGCAGGGGCTGGCGACTACACACCG\r\n+TGCTATCTGAATGGTCGAGTTGTCAGTCGTTCATTCCAGCTTGCTTTGGGAGTCGTGTTC\r\n+TACAGTCCGCTGCAATATCTGCATTGGTACGACCAAGCTCATCAGTATCCTGAGAACCGC\r\n+TATCCTGAACTTGAATTTTGGAAGGAGATGCCGACGACTTGGGATGACTCGAAGGTCGTT\r\n+CATGGATCCATCGGGAGCTACATGACGGTCGCCAGGCGGAAAGGTGATCGGTGGTTCGTT\r\n+GGAACGATTGTCAACGAAGCCCGAAGCCTGGACATCGCGCTCAATTTCTTGGGCCCAGGA\r\n+GAGTTCGACGCCAAGATCTACGCGGAAGATCCAGACGACAAAAAGCAGGTGGTCATCCAG\r\n+TCATGCCAGGTCACCTCAGACAGCAAATTGACCGCGACCATGAGCTCTGGAAGCGGATGC\r\n+GCGATCATGATTTCGCCGATGCTGAACGAG\r\n+\r\n+\r\n+\r\n+\r\n+\r\n+\r\n+\r\n'
b
diff -r 000000000000 -r a811f7256f6e test-data/oligator_anti-sens.csv
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/oligator_anti-sens.csv Fri Apr 27 08:42:52 2018 -0400
b
@@ -0,0 +1,48 @@
+zga_314;TTTGGCGTCAGTCTTGTAGGTAATA;25
+zga_42;TTCTTTGTGTTCTAAAAGTGCGATGT;26
+zga_316;TTGCCCACTTCCTTCTAGCACAAG;24
+RB2638;GGATTCCAAACGCAGGATCGTCG;23
+zga_4661;TCTTCCCATCCAGCCACCGTCT;22
+RB5196;GACGCGGTGCAGCCACATGAAT;22
+zga_4662;TTGTTGACAATCCATAAGTACTTTCAT;27
+zga_3720_GH3;GGATGGCAAATGAAAGTCAATTCTTT;26
+zga_518_GH13;TTGAAAAATAACAATCCCCAATGGCG;26
+zga_355;TAATGCCCTAATATGGACCGCCAA;24
+RB5200_GH13;CGCGGTTGGCTCGTCATGTTCG;22
+zga_4668;CAGTGATGAATTTTGTGTCAAAACTC;26
+zga_3745_beta;ATTTACAATAGCGTCGTAAATTACTTTT;28
+RB4894;CCGTTCGACAAGCACGCAAATGG;23
+zga_4659;TGCCTTGTGTCTAATATAAAACGTCT;26
+zga_3629;TTTTTTTAAGATTAGCGGAGTTACGG;26
+zga_3572;CTCCAAACCTGATATTGCCTCGG;23
+RB2160;CGCGTTCACATGATCGTGGGATT;23
+RB12343;GGCGGTGGAAGATGACTTCAACC;23
+zga_3818_Fn3;TTTTAATCTAAAGGATGTTTTTAAATCTG;29
+zga_3602;TTTTTTGGTAAACTTTATGGTGGCAC;26
+RB10507;CTCGTTCAGCATCGGCGAAATCA;23
+zga_3720_UNK;TGACGATATGCTTACGGGCAAGG;23
+zga_347_Fn3;TATTTTCAAGTTTCCACTGACATGAAT;27
+zga_530;AAAGACCTTATAAATCGAAGCTTGATA;27
+zga_369;ATTTACTTTGGCAATAGACCAAATACT;27
+zga_344_Fn3;ATTTTTGACAGTTAAGGCTACTTTTTTG;28
+RB9292;CTTTGGCGGCGCGTTACAGACA;22
+zga_344_GH3;ATTGGTTATAGGAATATTTACCGTTGT;27
+zga_4658;TTTCGATTGAAAAGCTGCCAGTTTTT;26
+zga_347_GH3;ATTAGTAATATCCACGGAAACCACTA;26
+zga_4655;GTCCACTGCCTTGAGCTTCAACA;23
+zga_4657;CCAGTTGAATTTAAAAATCGTCGTAC;26
+zga_4653;CCAGTTGGTAAACGAGCCATCTTT;24
+RB548;CTTCCGCGTGTACACCAGAACC;22
+zga_518_CBM48;GCCTTTTCCGTAACGGCCCCAT;22
+RB2986;TGAAACTTGCCCGGATTGATCTTC;24
+zga_2429;CTTCTTACTTGGTCTGATCCACATA;25
+zga_517;TTTGAACGGGAGTCCGTGTAACTT;24
+zga_3523;CTTGCTTCCGATTTTTAGTAGCACA;25
+RB5200_S6PP;TTCGATCGAGTTTTCAAACAGACCA;25
+zga_3745_GH3;GTCCTCATAAAGGTTTTTGAGCTCC;25
+zga_1248;TTTTACAATGAAAATAAAGGATTCCAAC;28
+zga_3745_linker;CTGTGCCAACTCGCTGTTTTGATA;24
+zga_368;TTTTTCAATTATACTTATGGCATACCC;27
+zga_3745_GH3linker;CTGTGCCAACTCGCTGTTTTGATA;24
+zga_1626;ATGGCACAAGATGCGGCCCCAA;22
+zga_3818_GH3;GCTCACCTCTACAGAAACCGAAAT;24
b
diff -r 000000000000 -r a811f7256f6e test-data/oligator_results.csv
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/oligator_results.csv Fri Apr 27 08:42:52 2018 -0400
b
b'@@ -0,0 +1,480 @@\n+zga_344_GH3\n+CAAGATAAAGCACGACCTTCCGAC\n+Tm = 72\n+The oligo length is 24 nucleotide(s)\n+\n+zga_344_Fn3\n+GAAACGGTGGTCCAACTGTATGTG\n+Tm = 72\n+The oligo length is 24 nucleotide(s)\n+\n+zga_347_GH3\n+CAAAGCAAGCAAAAGATATATCACAAA\n+Tm = 70\n+The oligo length is 27 nucleotide(s)\n+\n+zga_347_Fn3\n+GAAATCGTTCAGCTTTATTTTTCGGA\n+Tm = 70\n+The oligo length is 26 nucleotide(s)\n+\n+zga_3720_GH3\n+AGTAGTACCCTACCCTATATCGAAG\n+Tm = 72\n+The oligo length is 25 nucleotide(s)\n+\n+zga_3720_UNK\n+AGCCTAAACCTAAAAATAGCCGAAAA\n+Tm = 70\n+The oligo length is 26 nucleotide(s)\n+\n+zga_3745_GH3\n+CAACATCCTTTGGTGACCAAAGAC\n+Tm = 70\n+The oligo length is 24 nucleotide(s)\n+\n+zga_3745_linker\n+GACCTGAATTCGAGAACCGATGAC\n+Tm = 72\n+The oligo length is 24 nucleotide(s)\n+\n+zga_3745_beta\n+CAGTTGATTTTCGGGGCCATCCC\n+Tm = 72\n+The oligo length is 23 nucleotide(s)\n+\n+zga_3745_GH3linker\n+CAACATCCTTTGGTGACCAAAGAC\n+Tm = 70\n+The oligo length is 24 nucleotide(s)\n+\n+zga_3818_GH3\n+CAAGAAACGATAGAAGCGGTGGAG\n+Tm = 72\n+The oligo length is 24 nucleotide(s)\n+\n+zga_3818_Fn3\n+GTGGTACAGTTATATCTACGGGATG\n+Tm = 72\n+The oligo length is 25 nucleotide(s)\n+\n+zga_42\n+TGTAAGGAAGAGCGAAAAGAAATTATA\n+Tm = 70\n+The oligo length is 27 nucleotide(s)\n+\n+zga_369\n+TGTTCGAGTGATGATGACCAATCG\n+Tm = 70\n+The oligo length is 24 nucleotide(s)\n+\n+zga_518_CBM48\n+CCGCAAGTTACCGTTTTCAGTCTT\n+Tm = 70\n+The oligo length is 24 nucleotide(s)\n+\n+zga_518_GH13\n+GATAAGGACGGAAATTTTCTCACTTA\n+Tm = 70\n+The oligo length is 26 nucleotide(s)\n+\n+zga_530\n+TACGAAAACACCGAACGAAAATGGT\n+Tm = 70\n+The oligo length is 25 nucleotide(s)\n+\n+zga_1248\n+GGCGGAAGTAAAAAAAAGGTCGTTT\n+Tm = 70\n+The oligo length is 25 nucleotide(s)\n+\n+zga_1626\n+GATTGCGCCATTTTTTATCATATTTATC\n+Tm = 72\n+The oligo length is 28 nucleotide(s)\n+\n+zga_314\n+TGCTCCAATTCCGAAATCAAGGTAG\n+Tm = 72\n+The oligo length is 25 nucleotide(s)\n+\n+zga_316\n+TGTGGAGCAGTGAAAAAAACGGATA\n+Tm = 70\n+The oligo length is 25 nucleotide(s)\n+\n+zga_355\n+TGTTCGGGAGATAAGAACATGGAG\n+Tm = 70\n+The oligo length is 24 nucleotide(s)\n+\n+zga_368\n+CAACAATTGAAATCGCCCAACGGT\n+Tm = 70\n+The oligo length is 24 nucleotide(s)\n+\n+zga_2429\n+TGTAAAGTGCCTTCCCATACTTATAT\n+Tm = 70\n+The oligo length is 26 nucleotide(s)\n+\n+zga_3602\n+TGCAAAAATGCGACCGAGGAAAAAA\n+Tm = 70\n+The oligo length is 25 nucleotide(s)\n+\n+zga_4653\n+AAAATATCAGCAATAAAAACATACCCTA\n+Tm = 70\n+The oligo length is 28 nucleotide(s)\n+\n+zga_4655\n+TGTGGCCGCGAGCCGTCAAATG\n+Tm = 72\n+The oligo length is 22 nucleotide(s)\n+\n+zga_4657\n+AAAACGACACAGACAGATTTCGGTG\n+Tm = 72\n+The oligo length is 25 nucleotide(s)\n+\n+zga_4658\n+GGTACAAGTATAAAATCGGTTGACTG\n+Tm = 72\n+The oligo length is 26 nucleotide(s)\n+\n+zga_4661\n+AGCATATTGAATCAATTTAGCCTGAAA\n+Tm = 70\n+The oligo length is 27 nucleotide(s)\n+\n+zga_4662\n+AAAGCAACTGTTTACAAAGGAAACAAA\n+Tm = 70\n+The oligo length is 27 nucleotide(s)\n+\n+zga_4668\n+TGTAGTGATGATTTTCTTAATGAGGAG\n+Tm = 72\n+The oligo length is 27 nucleotide(s)\n+\n+zga_3523\n+AAATTTAAGCCAGTGGTAAAACATGTA\n+Tm = 70\n+The oligo length is 27 nucleotide(s)\n+\n+zga_3572\n+GAATATGAGGCGCCCTTCCCCT\n+Tm = 70\n+The oligo length is 22 nucleotide(s)\n+\n+zga_3629\n+CAAGAAAAACCGAACATCATCCTTTT\n+Tm = 70\n+The oligo length is 26 nucleotide(s)\n+\n+zga_517\n+ATAACCAATACTGAGCTAGAATATAAAG\n+Tm = 72\n+The oligo length is 28 nucleotide(s)\n+\n+RB12343\n+GAATTGTGGGATCATCGCGACGT\n+Tm = 70\n+The oligo length is 23 nucleotide(s)\n+\n+RB548\n+AGTTTTGCGATGGTTGATTCGCTG\n+Tm = 70\n+The oligo length is 24 nucleotide(s)\n+\n+RB2638\n+AATTCGCAGCTTTCATTATCGACCA\n+Tm = 70\n+The oligo length is 25 nucleotide(s)\n+\n+RB2986\n+CATGGGCGGAACATGGCGACTG\n+Tm = 72\n+The oligo length is 22 nucleotide(s)\n+\n+RB4894\n+GATTTGAATTCGCAACGTCGTGTTT\n+Tm = 70\n+The oligo length is 25 nucleotide(s)\n+\n+RB5196\n+ACCATGAACGCAATGCTCACCAAC\n+Tm = 72\n+The oligo length is 24 nucleotide(s)\n+\n+RB5200_S6PP\n+AATTCCACGATCGCATCCAACCC\n+Tm = 70\n+The oligo length is 23 nucleotide(s)\n+\n+RB5200_GH13\n+ACGTCGCCCCTCAATGCGACC\n+Tm = 70\n+The oligo length is 21 nucleotide(s)\n+\n+RB9292\n+GATCTTCAGTTCGCCTACTCCCC\n+Tm = 72\n+The oligo length is 23 nucleotide(s)\n+\n+RB2160\n+TCGCCTCACGTTCACCTTTGCTT\n+Tm = 70\n+The oligo length is 23 nucle'..b'CTTTCAT\n+Tm = 70\n+The oligo length is 27 nucleotide(s)\n+\n+zga_3720_GH3_antisens\n+GGATGGCAAATGAAAGTCAATTCTTT\n+Tm = 70\n+The oligo length is 26 nucleotide(s)\n+\n+zga_518_GH13_antisens\n+TTGAAAAATAACAATCCCCAATGGCG\n+Tm = 72\n+The oligo length is 26 nucleotide(s)\n+\n+zga_355_antisens\n+TAATGCCCTAATATGGACCGCCAA\n+Tm = 70\n+The oligo length is 24 nucleotide(s)\n+\n+RB5200_GH13_antisens\n+CGCGGTTGGCTCGTCATGTTCG\n+Tm = 72\n+The oligo length is 22 nucleotide(s)\n+\n+zga_4668_antisens\n+CAGTGATGAATTTTGTGTCAAAACTC\n+Tm = 70\n+The oligo length is 26 nucleotide(s)\n+\n+zga_3745_beta_antisens\n+ATTTACAATAGCGTCGTAAATTACTTTT\n+Tm = 70\n+The oligo length is 28 nucleotide(s)\n+\n+RB4894_antisens\n+CCGTTCGACAAGCACGCAAATGG\n+Tm = 72\n+The oligo length is 23 nucleotide(s)\n+\n+zga_4659_antisens\n+TGCCTTGTGTCTAATATAAAACGTCT\n+Tm = 70\n+The oligo length is 26 nucleotide(s)\n+\n+zga_3629_antisens\n+TTTTTTTAAGATTAGCGGAGTTACGG\n+Tm = 70\n+The oligo length is 26 nucleotide(s)\n+\n+zga_3572_antisens\n+CTCCAAACCTGATATTGCCTCGG\n+Tm = 70\n+The oligo length is 23 nucleotide(s)\n+\n+RB2160_antisens\n+CGCGTTCACATGATCGTGGGATT\n+Tm = 70\n+The oligo length is 23 nucleotide(s)\n+\n+RB12343_antisens\n+GGCGGTGGAAGATGACTTCAACC\n+Tm = 72\n+The oligo length is 23 nucleotide(s)\n+\n+zga_3818_Fn3_antisens\n+TTTTAATCTAAAGGATGTTTTTAAATCTG\n+Tm = 70\n+The oligo length is 29 nucleotide(s)\n+\n+zga_3602_antisens\n+TTTTTTGGTAAACTTTATGGTGGCAC\n+Tm = 70\n+The oligo length is 26 nucleotide(s)\n+\n+RB10507_antisens\n+CTCGTTCAGCATCGGCGAAATCA\n+Tm = 70\n+The oligo length is 23 nucleotide(s)\n+\n+zga_3720_UNK_antisens\n+TGACGATATGCTTACGGGCAAGG\n+Tm = 70\n+The oligo length is 23 nucleotide(s)\n+\n+zga_347_Fn3_antisens\n+TATTTTCAAGTTTCCACTGACATGAAT\n+Tm = 70\n+The oligo length is 27 nucleotide(s)\n+\n+zga_530_antisens\n+AAAGACCTTATAAATCGAAGCTTGATA\n+Tm = 70\n+The oligo length is 27 nucleotide(s)\n+\n+zga_369_antisens\n+ATTTACTTTGGCAATAGACCAAATACT\n+Tm = 70\n+The oligo length is 27 nucleotide(s)\n+\n+zga_344_Fn3_antisens\n+ATTTTTGACAGTTAAGGCTACTTTTTTG\n+Tm = 72\n+The oligo length is 28 nucleotide(s)\n+\n+RB9292_antisens\n+CTTTGGCGGCGCGTTACAGACA\n+Tm = 70\n+The oligo length is 22 nucleotide(s)\n+\n+zga_344_GH3_antisens\n+ATTGGTTATAGGAATATTTACCGTTGT\n+Tm = 70\n+The oligo length is 27 nucleotide(s)\n+\n+zga_4658_antisens\n+TTTCGATTGAAAAGCTGCCAGTTTTT\n+Tm = 70\n+The oligo length is 26 nucleotide(s)\n+\n+zga_347_GH3_antisens\n+ATTAGTAATATCCACGGAAACCACTA\n+Tm = 70\n+The oligo length is 26 nucleotide(s)\n+\n+zga_4655_antisens\n+GTCCACTGCCTTGAGCTTCAACA\n+Tm = 70\n+The oligo length is 23 nucleotide(s)\n+\n+zga_4657_antisens\n+CCAGTTGAATTTAAAAATCGTCGTAC\n+Tm = 70\n+The oligo length is 26 nucleotide(s)\n+\n+zga_4653_antisens\n+CCAGTTGGTAAACGAGCCATCTTT\n+Tm = 70\n+The oligo length is 24 nucleotide(s)\n+\n+RB548_antisens\n+CTTCCGCGTGTACACCAGAACC\n+Tm = 70\n+The oligo length is 22 nucleotide(s)\n+\n+zga_518_CBM48_antisens\n+GCCTTTTCCGTAACGGCCCCAT\n+Tm = 70\n+The oligo length is 22 nucleotide(s)\n+\n+RB2986_antisens\n+TGAAACTTGCCCGGATTGATCTTC\n+Tm = 70\n+The oligo length is 24 nucleotide(s)\n+\n+zga_2429_antisens\n+CTTCTTACTTGGTCTGATCCACATA\n+Tm = 70\n+The oligo length is 25 nucleotide(s)\n+\n+zga_517_antisens\n+TTTGAACGGGAGTCCGTGTAACTT\n+Tm = 70\n+The oligo length is 24 nucleotide(s)\n+\n+zga_3523_antisens\n+CTTGCTTCCGATTTTTAGTAGCACA\n+Tm = 70\n+The oligo length is 25 nucleotide(s)\n+\n+RB5200_S6PP_antisens\n+TTCGATCGAGTTTTCAAACAGACCA\n+Tm = 70\n+The oligo length is 25 nucleotide(s)\n+\n+zga_3745_GH3_antisens\n+GTCCTCATAAAGGTTTTTGAGCTCC\n+Tm = 72\n+The oligo length is 25 nucleotide(s)\n+\n+zga_1248_antisens\n+TTTTACAATGAAAATAAAGGATTCCAAC\n+Tm = 70\n+The oligo length is 28 nucleotide(s)\n+\n+zga_3745_linker_antisens\n+CTGTGCCAACTCGCTGTTTTGATA\n+Tm = 70\n+The oligo length is 24 nucleotide(s)\n+\n+zga_368_antisens\n+TTTTTCAATTATACTTATGGCATACCC\n+Tm = 70\n+The oligo length is 27 nucleotide(s)\n+\n+zga_3745_GH3linker_antisens\n+CTGTGCCAACTCGCTGTTTTGATA\n+Tm = 70\n+The oligo length is 24 nucleotide(s)\n+\n+zga_1626_antisens\n+ATGGCACAAGATGCGGCCCCAA\n+Tm = 70\n+The oligo length is 22 nucleotide(s)\n+\n+zga_3818_GH3_antisens\n+GCTCACCTCTACAGAAACCGAAAT\n+Tm = 70\n+The oligo length is 24 nucleotide(s)\n+\n'
b
diff -r 000000000000 -r a811f7256f6e test-data/oligator_sens.csv
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/oligator_sens.csv Fri Apr 27 08:42:52 2018 -0400
b
@@ -0,0 +1,48 @@
+zga_344_GH3;CAAGATAAAGCACGACCTTCCGAC;24
+zga_344_Fn3;GAAACGGTGGTCCAACTGTATGTG;24
+zga_347_GH3;CAAAGCAAGCAAAAGATATATCACAAA;27
+zga_347_Fn3;GAAATCGTTCAGCTTTATTTTTCGGA;26
+zga_3720_GH3;AGTAGTACCCTACCCTATATCGAAG;25
+zga_3720_UNK;AGCCTAAACCTAAAAATAGCCGAAAA;26
+zga_3745_GH3;CAACATCCTTTGGTGACCAAAGAC;24
+zga_3745_linker;GACCTGAATTCGAGAACCGATGAC;24
+zga_3745_beta;CAGTTGATTTTCGGGGCCATCCC;23
+zga_3745_GH3linker;CAACATCCTTTGGTGACCAAAGAC;24
+zga_3818_GH3;CAAGAAACGATAGAAGCGGTGGAG;24
+zga_3818_Fn3;GTGGTACAGTTATATCTACGGGATG;25
+zga_42;TGTAAGGAAGAGCGAAAAGAAATTATA;27
+zga_369;TGTTCGAGTGATGATGACCAATCG;24
+zga_518_CBM48;CCGCAAGTTACCGTTTTCAGTCTT;24
+zga_518_GH13;GATAAGGACGGAAATTTTCTCACTTA;26
+zga_530;TACGAAAACACCGAACGAAAATGGT;25
+zga_1248;GGCGGAAGTAAAAAAAAGGTCGTTT;25
+zga_1626;GATTGCGCCATTTTTTATCATATTTATC;28
+zga_314;TGCTCCAATTCCGAAATCAAGGTAG;25
+zga_316;TGTGGAGCAGTGAAAAAAACGGATA;25
+zga_355;TGTTCGGGAGATAAGAACATGGAG;24
+zga_368;CAACAATTGAAATCGCCCAACGGT;24
+zga_2429;TGTAAAGTGCCTTCCCATACTTATAT;26
+zga_3602;TGCAAAAATGCGACCGAGGAAAAAA;25
+zga_4653;AAAATATCAGCAATAAAAACATACCCTA;28
+zga_4655;TGTGGCCGCGAGCCGTCAAATG;22
+zga_4657;AAAACGACACAGACAGATTTCGGTG;25
+zga_4658;GGTACAAGTATAAAATCGGTTGACTG;26
+zga_4661;AGCATATTGAATCAATTTAGCCTGAAA;27
+zga_4662;AAAGCAACTGTTTACAAAGGAAACAAA;27
+zga_4668;TGTAGTGATGATTTTCTTAATGAGGAG;27
+zga_3523;AAATTTAAGCCAGTGGTAAAACATGTA;27
+zga_3572;GAATATGAGGCGCCCTTCCCCT;22
+zga_3629;CAAGAAAAACCGAACATCATCCTTTT;26
+zga_517;ATAACCAATACTGAGCTAGAATATAAAG;28
+RB12343;GAATTGTGGGATCATCGCGACGT;23
+RB548;AGTTTTGCGATGGTTGATTCGCTG;24
+RB2638;AATTCGCAGCTTTCATTATCGACCA;25
+RB2986;CATGGGCGGAACATGGCGACTG;22
+RB4894;GATTTGAATTCGCAACGTCGTGTTT;25
+RB5196;ACCATGAACGCAATGCTCACCAAC;24
+RB5200_S6PP;AATTCCACGATCGCATCCAACCC;23
+RB5200_GH13;ACGTCGCCCCTCAATGCGACC;21
+RB9292;GATCTTCAGTTCGCCTACTCCCC;23
+RB2160;TCGCCTCACGTTCACCTTTGCTT;23
+zga_4659;TCAGGAATTAAAGAATACCAACTATTTA;28
+RB10507;GCAGAAGAGACGACGATCGTGTC;23