galaxy-commits
Threads by month
- ----- 2026 -----
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- 15302 discussions
galaxy-dist commit d1baa724b393: Modified some test fastq files to make valid
by commits-noreply@bitbucket.org 20 Nov '10
by commits-noreply@bitbucket.org 20 Nov '10
20 Nov '10
# HG changeset patch -- Bitbucket.org
# Project galaxy-dist
# URL http://bitbucket.org/galaxy/galaxy-dist/overview
# User Kelly Vincent <kpvincent(a)bx.psu.edu>
# Date 1290011865 18000
# Node ID d1baa724b393de6871df7249ebe35ecfe2054e31
# Parent 39f41821aa4eec15b04509d24715946552bb14a6
Modified some test fastq files to make valid
--- a/test-data/bwa_wrapper_in2.fastq
+++ b/test-data/bwa_wrapper_in2.fastq
@@ -1,120 +1,120 @@
@seq1/1
GGACTCAGATAGTAATCC
-+/1
++
II#IIIIIII$5+.(9II
@seq2/1
ATTCGACCTATCCTTGCG
-+/1
++
IIIIIIIIIIIIIIIIII
@seq3/1
GTAACAAAGTTTGGATTG
-+/1
++
IIIIIIIIIIIIIIIIII
@seq4/1
AGCCGCTCGTCTTTTATG
-+/1
++
IIIIIIIIIIIIIIIIII
@seq5/1
CAGTTATATGGCTTTTGG
-+/1
++
IIIIIIIIIIIIIIIIII
@seq6/1
AGGCGCTCGTCTTGGTAT
-+/1
++
IIIIIIIIIIIIIIIIII
@seq7/1
TGTAGGTGGTCAACCAAT
-+/1
++
IIIIIIIIIIIIIIIIII
@seq8/1
ACACCCGTCCTTTACGTC
-+/1
++
IIIIIIIIIIIIIIIIII
@seq9/1
GCCGCTATTCAGGTTGTT
-+/1
++
IIIIIIIIIIIIIIIIII
@seq10/1
ATTCTTTCTTTTCGTATC
-+/1
++
IIIIIIIIIIIIIIIIII
@seq11/1
GCATTTCTACTCCTTCTC
-+/1
++
II#IIIIIII$5+.(9II
@seq12/1
CGCGCTTCGATAAAAATG
-+/1
++
IIIIIIIIIIIIIIIIII
@seq13/1
ATTTCTACTCTTTCTCAT
-+/1
++
IIIIIIIIIIIIIIIIII
@seq14/1
CCCTTTTGAATGTCACGC
-+/1
++
IIIIIIIIIIIIIIIIII
@seq15/1
CCAACTTACCAAGGTGGG
-+/1
++
IIIIIIIIIIIIIIIIII
@seq16/1
TCAGGGTATTAAAAGAGA
-+/1
++
IIIIIIIIIIIIIIIIII
@seq17/1
GTGATGTGCTTGCTACCG
-+/1
++
IIIIIIIIIIIIIIIIII
@seq18/1
TCAATCCCCCATGCTTGG
-+/1
++
IIIIIIIIIIIIIIIIII
@seq19/1
TTCCTGCGCTTAATGCTT
-+/1
++
IIIIIIIIIIIIIIIIII
@seq20/1
CTTATTACCATTTCAACT
-+/1
++
IIIIIIIIIIIIIIIIII
@seq21/1
CTGATACCAATAAAACCC
-+/1
++
II#IIIIIII$5+.(9II
@seq22/1
AATCAAACTTACCAAGGG
-+/1
++
IIIIIIIIIIIIIIIIII
@seq23/1
TGTGCTTCCCCAACTTGA
-+/1
++
IIIIIIIIIIIIIIIIII
@seq24/1
TTTCTCAATCCCCAATGC
-+/1
++
IIIIIIIIIIIIIIIIII
@seq25/1
TTGCTACTGACCGCTCTT
-+/1
++
IIIIIIIIIIIIIIIIII
@seq26/1
CCGCGTGAAATTTCTATG
-+/1
++
IIIIIIIIIIIIIIIIII
@seq27/1
CGCTAATCAAGTTGTTTC
-+/1
++
IIIIIIIIIIIIIIIIII
@seq28/1
AAAGAGATTATTTGTCGG
-+/1
++
IIIIIIIIIIIIIIIIII
@seq29/1
CAAATTAATGCGCGCTTC
-+/1
++
IIIIIIIIIIIIIIIIII
@seq30/1
ATCCCCTATGCTTGGCTT
-+/1
++
IIIIIIIIIIIIIIIIII
--- a/test-data/bwa_wrapper_in3.fastq
+++ b/test-data/bwa_wrapper_in3.fastq
@@ -1,74 +1,74 @@
@seq1/2
ACGCTCCTTTAAAATATC
-+/2
++
IIIII$%*$G$A31I&&B
@seq2/2
CAGCTCGAGAAGCTCTTA
-+/2
++
IIIIIIIIIIIIIIIIII
@seq3/2
CTACTGACCGCTCTCGTG
-+/2
++
IIIIIIIIIIIIIIIIII
@seq4/2
TAGGTGGTCAACCATTTT
-+/2
++
IIIIIIIIIIIIIIIIII
@seq5/2
TTTCTATGTGGCTTAATA
-+/2
++
IIIIIIIIIIIIIIIIII
@seq6/2
GTAGGTGGTCAACAATTT
-+/2
++
IIIIIIIIIIIIIIIIII
@seq7/2
TTTAATTGCAGGGGCTTC
-+/2
++
IIIIIIIIIIIIIIIIII
@seq8/2
ATGCGCTCTATTCTCTGG
-+/2
++
IIIIIIIIIIIIIIIIII
@seq9/2
TTCTGTTGGTGCTGATAT
-+/2
++
IIIIIIIIIIIIIIIIII
@seq10/2
AGGGCGTTGAGTTCGATA
-+/2
++
IIIIIIIIIIIIIIIIII
@seq11/2
ATCCCCAATGCTTGGCTT
-+/2
++
IIIII$%*$G$A31I&&B
@seq12/2
GGATTGGCGTTTCCAACC
-+/2
++
IIIIIIIIIIIIIIIIII
@seq13/2
CCCCAATCCTTGCCTTCC
-+/2
++
IIIAAIIIIIIIIIIIII
@seq14/2
TGATATTTTGACTTTGAG
-+/2
++
IIIIIIIIIIIIIIIIII
@seq15/2
TTACGAAACGCGACGCCG
-+/2
++
IIIIIIIIIIIIIIIIII
@seq16/2
TTATTTTTCTCCAGCCAC
-+/2
++
IIIIIIIIIIIIIIIIII
@seq17/2
AAACAATACTTTAGGCAT
-+/2
++
IIIIIIIIIIIIIIIIII
@seq18/2
CCGTTCCATAAGCAGATG
-+/2
++
IIIIIIIIIIIIIIIIII
@seq19/2
GAGCGTCCTGGTGCTGAT
@@ -76,45 +76,45 @@ GAGCGTCCTGGTGCTGAT
IIIIIIIIIIIIIIIIII
@seq20/2
ACTCCGGTTATCGCTGGC
-+/2
++
IIIIIIIIIIIIIIIIII
@seq21/2
TAAGCATTTGGTTCAGGG
-+/2
++
IIIII$%*$G$A31I&&B
@seq22/2
GTTACGACGCGACGCCGT
-+/2
++
IIIIIIIIIIIIIIIIII
@seq23/2
TTTAATAACCCTATAGAC
-+/2
++
IIIIIIIIIIIIIIIIII
@seq24/2
CTTGGCTTCCCTAAGCAG
-+/2
++
IIIIIIIIIIIIIIIIII
@seq25/2
CGTGCTCGTTGCTGCGTT
-+/2
++
IIIIIIIIIIIIIIIIII
@seq26/2
AAGGATGTTTTCCGTTCT
-+/2
++
IIIIIIIIIIIIIIIIII
@seq27/2
TGTTTGGTGCTGATATTG
-+/2
++
IIIIIIIIIIIIIIIIII
@seq28/2
TCCAGCCACTAAAGTGAG
-+/2
++
IIIIIIIIIIIIIIIIII
@seq29/2
GATAATGATTGGGGTATC
-+/2
++
IIIIIIIIIIIIIIIIII
@seq30/2
ACCATAAGCAGATGGATA
-+/2
++
IIIIIIIIIIIIIIIIII
--- a/test-data/bowtie_in2.fastqsanger
+++ b/test-data/bowtie_in2.fastqsanger
@@ -1,5 +1,5 @@
@HWI-EAS91_1_30788AAXX:1:1:1513:715/1
GTTTTTTNNGCATAGATGTTTAGTTGTGGTAGTCAG
-+/1
++
IIIIIII""IIIIIIIIIIIIIIIIIIIDI?II-+I
1
0
galaxy-dist commit 39f41821aa4e: Adding data table configuration file for backwards compatibility with local installs: for people who don't want to update loc file style (changes made in rev 4550:535d276c92bc)
by commits-noreply@bitbucket.org 20 Nov '10
by commits-noreply@bitbucket.org 20 Nov '10
20 Nov '10
# HG changeset patch -- Bitbucket.org
# Project galaxy-dist
# URL http://bitbucket.org/galaxy/galaxy-dist/overview
# User Kelly Vincent <kpvincent(a)bx.psu.edu>
# Date 1290011565 18000
# Node ID 39f41821aa4eec15b04509d24715946552bb14a6
# Parent 19b10fff133595cb5cd1851a7f24024c2637ad2b
Adding data table configuration file for backwards compatibility with local installs: for people who don't want to update loc file style (changes made in rev 4550:535d276c92bc)
--- /dev/null
+++ b/tool_data_table_conf.xml.oldlocstyle
@@ -0,0 +1,73 @@
+<!-- Use this file if you don't want to update your loc files as changed in revision 4550:535d276c92bc-->
+<tables>
+ <!-- Locations of all fasta files under genome directory -->
+ <table name="all_fasta" comment_char="#">
+ <columns>value, dbkey, name, path</columns>
+ <file path="tool-data/all_fasta.loc" />
+ </table>
+ <!-- Locations of indexes in the BFAST mapper format -->
+ <table name="bfast_indexes" comment_char="#">
+ <columns>value, dbkey, formats, name, path</columns>
+ <file path="tool-data/bfast_indexes.loc" />
+ </table>
+ <!-- Locations of nucleotide (mega)blast databases -->
+ <table name="blastdb" comment_char="#">
+ <columns>name, value</columns>
+ <file path="tool-data/blastdb.loc" />
+ </table>
+ <!-- Locations of protein (mega)blast databases -->
+ <table name="blastdb_p" comment_char="#">
+ <columns>name, value</columns>
+ <file path="tool-data/blastdb_p.loc" />
+ </table>
+ <!-- Locations of indexes in the Bowtie mapper format -->
+ <table name="bowtie_indexes" comment_char="#">
+ <columns>name, value</columns>
+ <file path="tool-data/bowtie_indices.loc" />
+ </table>
+ <!-- Locations of indexes in the Bowtie color mapper format -->
+ <table name="bowtie_indexes_color" comment_char="#">
+ <columns>name, value</columns>
+ <file path="tool-data/bowtie_indices_color.loc" />
+ </table>
+ <!-- Locations of indexes in the BWA mapper format -->
+ <table name="bwa_indexes" comment_char="#">
+ <columns>name, value</columns>
+ <file path="tool-data/bwa_index.loc" />
+ </table>
+ <!-- Locations of MAF files that have been indexed with bx-python -->
+ <table name="indexed_maf_files">
+ <columns>name, value, dbkey, species</columns>
+ <file path="tool-data/maf_index.loc" />
+ </table>
+ <!-- Locations of fasta files appropriate for NGS simulation -->
+ <table name="ngs_sim_fasta" comment_char="#">
+ <columns>value, dbkey, name, path</columns>
+ <file path="tool-data/ngs_sim_fasta.loc" />
+ </table>
+ <!-- Locations of 2bit sequence files for use in Lastz -->
+ <table name="lastz_seqs" comment_char="#">
+ <columns>name, value</columns>
+ <file path="tool-data/lastz_seqs.loc" />
+ </table>
+ <!-- Locations of PerM base index files -->
+ <table name="perm_base_indexes" comment_char="#">
+ <columns>name, value</columns>
+ <file path="tool-data/perm_base_index.loc" />
+ </table>
+ <!-- Locations of PerM color index files -->
+ <table name="perm_color_indexes" comment_char="#">
+ <columns>name, value</columns>
+ <file path="tool-data/perm_color_index.loc" />
+ </table>
+ <!-- Location of SRMA dict file and other files -->
+ <table name="srma_indexes" comment_char="#">
+ <columns>name, value</columns>
+ <file path="tool-data/srma_index.loc" />
+ </table>
+ <!-- Locations of indexes in the Bowtie mapper format for TopHat to use -->
+ <table name="tophat_indexes" comment_char="#">
+ <columns>name, value</columns>
+ <file path="tool-data/bowtie_indices.loc" />
+ </table>
+</tables>
1
0
galaxy-dist commit 29227c9c5992: Relax GTF sniffer ever so slightly so that Ensembl GTF files are sniffed correctly.
by commits-noreply@bitbucket.org 20 Nov '10
by commits-noreply@bitbucket.org 20 Nov '10
20 Nov '10
# HG changeset patch -- Bitbucket.org
# Project galaxy-dist
# URL http://bitbucket.org/galaxy/galaxy-dist/overview
# User jeremy goecks <jeremy.goecks(a)emory.edu>
# Date 1290019719 18000
# Node ID 29227c9c599292f7608e61cdd4b2be424b7a7bfc
# Parent 1ee9e2490e1968957f5f440a9dd08fb75aa3eb70
Relax GTF sniffer ever so slightly so that Ensembl GTF files are sniffed correctly.
--- a/lib/galaxy/datatypes/interval.py
+++ b/lib/galaxy/datatypes/interval.py
@@ -965,7 +965,9 @@ class Gtf( Gff ):
if len( attributes ) >= 2:
try:
# Imprecise: should check for a single space per the spec.
- attr_name, attr_value = attributes[0].split(" ")
+ # strip() needed b/c Ensembl GTF files include an (illegal)
+ # space before attributes string.
+ attr_name, attr_value = attributes[0].strip().split(" ")
if attr_name != 'gene_id':
return False
except:
1
0
20 Nov '10
# HG changeset patch -- Bitbucket.org
# Project galaxy-dist
# URL http://bitbucket.org/galaxy/galaxy-dist/overview
# User Greg Von Kuster <greg(a)bx.psu.edu>
# Date 1290010215 18000
# Node ID 19b10fff133595cb5cd1851a7f24024c2637ad2b
# Parent 918a25ed14f5427f70970b0c436159fc58fd111e
More bug fixes.
--- a/lib/galaxy/web/controllers/forms.py
+++ b/lib/galaxy/web/controllers/forms.py
@@ -602,7 +602,7 @@ class Forms( BaseController ):
self.fieldtype.add_option( ft.__name__, ft.__name__ )
else:
for ft in trans.model.FormDefinition.supported_field_types:
- self.fieldtype.add_option( ft.__name__, ft__name__ )
+ self.fieldtype.add_option( ft.__name__, ft.__name__ )
self.required = SelectField('field_required_'+str(index), display='radio')
self.required.add_option('Required', 'required')
self.required.add_option('Optional', 'optional', selected=True)
@@ -713,7 +713,7 @@ class Forms( BaseController ):
form_details=form_details,
field_details=field_details,
form_definition=form_definition,
- field_types=BaseField.form_field_types(),
+ field_types=trans.model.FormDefinition.supported_field_types,
message=message,
status=status,
current_form_type=current_form[ 'type' ],
1
0
galaxy-dist commit 5ec30f459e8e: Merge with d1baa724b393de6871df7249ebe35ecfe2054e31
by commits-noreply@bitbucket.org 20 Nov '10
by commits-noreply@bitbucket.org 20 Nov '10
20 Nov '10
# HG changeset patch -- Bitbucket.org
# Project galaxy-dist
# URL http://bitbucket.org/galaxy/galaxy-dist/overview
# User rc
# Date 1290011973 18000
# Node ID 5ec30f459e8e4a1186f666f4879e14f082f17352
# Parent 7d46c23bb276790160fe05560aa87c3d41185a27
# Parent d1baa724b393de6871df7249ebe35ecfe2054e31
Merge with d1baa724b393de6871df7249ebe35ecfe2054e31
1
0
galaxy-dist commit 7d46c23bb276: Merge with 39f41821aa4eec15b04509d24715946552bb14a6
by commits-noreply@bitbucket.org 20 Nov '10
by commits-noreply@bitbucket.org 20 Nov '10
20 Nov '10
# HG changeset patch -- Bitbucket.org
# Project galaxy-dist
# URL http://bitbucket.org/galaxy/galaxy-dist/overview
# User rc
# Date 1290011867 18000
# Node ID 7d46c23bb276790160fe05560aa87c3d41185a27
# Parent 8ce82d60b2ab55966d133db136fcb2f809201c4b
# Parent 39f41821aa4eec15b04509d24715946552bb14a6
Merge with 39f41821aa4eec15b04509d24715946552bb14a6
1
0
galaxy-dist commit 264c608b48d9: Fixed inconsistency in PerM loc.sample files
by commits-noreply@bitbucket.org 20 Nov '10
by commits-noreply@bitbucket.org 20 Nov '10
20 Nov '10
# HG changeset patch -- Bitbucket.org
# Project galaxy-dist
# URL http://bitbucket.org/galaxy/galaxy-dist/overview
# User Kelly Vincent <kpvincent(a)bx.psu.edu>
# Date 1290012220 18000
# Node ID 264c608b48d9b0db2a142d820e32ec1d1fa550dd
# Parent 5ec30f459e8e4a1186f666f4879e14f082f17352
Fixed inconsistency in PerM loc.sample files
--- a/tool-data/perm_color_index.loc.sample
+++ b/tool-data/perm_color_index.loc.sample
@@ -13,7 +13,7 @@
#50, and stored in /depot/data/galaxy/phiX/perm_index/,
#then the perm_color_index.loc entry would look something like this:
#
-#phiX_F3_50 phiX: seed=F3, read length=50 /depot/data/galaxy/phiX/perm_index/phiX_color_F3_50.index
+#phiX_F3_50 phiX: seed=F3, read length=50 /data/galaxy/phiX/perm_index/phiX_color_F3_50.index
#
#and your /depot/data/galaxy/phiX/perm_index/ directory
#would contain the file phiX_color_F3_50.index:
@@ -21,8 +21,8 @@
#Your perm_color_index.loc file should include an entry per line for each
#index set you have stored. For example:
#
-#phiX_F3_50 /depot/data/galaxy/phiX/perm_index/phiX_color_F3_50.index
-#phiX_F4_50 /depot/data/galaxy/phiX/perm_index/phiX_color_F3_50.index
-#hg19_F3_50 /depot/data/galaxy/hg19/perm_index/hg19_color_F3_50.index
-#hg19_F4_50 /depot/data/galaxy/hg19/perm_index/hg19_color_F3_50.index
+#phiX_F3_50 phiX: seed=F3, read length=50 /data/galaxy/phiX/perm_index/phiX_color_F3_50.index
+#phiX_F4_50 phiX: seed=F4, read length=50 /data/galaxy/phiX/perm_index/phiX_color_F3_50.index
+#hg19_F3_50 hg19: seed=F3, read length=50 /data/galaxy/hg19/perm_index/hg19_color_F3_50.index
+#hg19_F4_50 hg19: seed=F4, read length=50 /data/galaxy/hg19/perm_index/hg19_color_F3_50.index
#
--- a/tool-data/perm_base_index.loc.sample
+++ b/tool-data/perm_base_index.loc.sample
@@ -21,8 +21,7 @@
#Your perm_base_index.loc file should include an entry per line for each
#index set you have stored. For example:
#
-#phiX_F3_50 /depot/data/galaxy/phiX/perm_index/phiX_base_F3_50.index
-#phiX_F4_50 /depot/data/galaxy/phiX/perm_index/phiX_base_F3_50.index
-#hg19_F3_50 /depot/data/galaxy/hg19/perm_index/hg19_base_F3_50.index
-#hg19_F4_50 /depot/data/galaxy/hg19/perm_index/hg19_base_F3_50.index
-#
+#phiX_F3_50 phiX: seed=F3, read length=50 /data/galaxy/phiX/perm_index/phiX_base_F3_50.index
+#phiX_F4_50 phiX: seed=F4, read length=50 /data/galaxy/phiX/perm_index/phiX_base_F3_50.index
+#hg19_F3_50 hg19: seed=F3, read length=50 /data/galaxy/hg19/perm_index/hg19_base_F3_50.index
+#hg19_F4_50 hg19: seed=F4, read length=50 /data/galaxy/hg19/perm_index/hg19_base_F3_50.index
1
0
galaxy-dist commit 1ee9e2490e19: Modifed tophat wrapper to work with data tables and fixed problem with index path; also got tests working
by commits-noreply@bitbucket.org 20 Nov '10
by commits-noreply@bitbucket.org 20 Nov '10
20 Nov '10
# HG changeset patch -- Bitbucket.org
# Project galaxy-dist
# URL http://bitbucket.org/galaxy/galaxy-dist/overview
# User Kelly Vincent <kpvincent(a)bx.psu.edu>
# Date 1290013305 18000
# Node ID 1ee9e2490e1968957f5f440a9dd08fb75aa3eb70
# Parent 264c608b48d9b0db2a142d820e32ec1d1fa550dd
Modifed tophat wrapper to work with data tables and fixed problem with index path; also got tests working
--- /dev/null
+++ b/test-data/tophat_in1.fasta
@@ -0,0 +1,14 @@
+>test_chromosome
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ACTACTATCTGACTAGACTGGAGGCGCTTGCGACTGAGCTAGGACGTGCC
+ACTACGGGGATGACGACTAGGACTACGGACGGACTTAGAGCGTCAGATGC
+AGCGACTGGACTATTTAGGACGATCGGACTGAGGAGGGCAGTAGGACGCT
+ACGTATTTGGCGCGCGGCGCTACGGCTGAGCGTCGAGCTTGCGATACGCC
+GTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG
+ACTATTACTTTATTATCTTACTCGGACGTAGACGGATCGGCAACGGGACT
+GTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG
+TTTTCTACTTGAGACTGGGATCGAGGCGGACTTTTTAGGACGGGACTTGC
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
--- /dev/null
+++ b/test-data/tophat_in2.fastqsanger
@@ -0,0 +1,400 @@
+@test_mRNA_150_290_0/1
+TCCTAAAAAGTCCGCCTCGGTCTCAGTCTCAAGTAGAAAAAGTCCCGTTGGCGATCCGTCTACGTCCGAGTAAGA
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_8_197_1/1
+TCTGACTAGACTGGAGGCGCTTGCGACTGAGCTAGGACGTGACACTACGGGGATGGCGACTAGGACTACGGACGG
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_82_255_2/1
+GAAAAAGTCCCGTTGCCGATCCGTCTACGTCCGAGTAATATAGTAAAGTAATAGTGGCGTATCGCAAGCTCGACG
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_96_238_3/1
+GATCCGTCTACGTCCGCGTAAGATAATAAAGTACTAGTAGCGTATCGCAAGCTCGACGCTCAGCCGTAGGGCCGC
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_72_258_4/1
+GTAGAAAAAGTCCCGTTGCCCATCCGTCTACGTCCGAGTAAGATAATAAAGTAATAGTGGCGTATCGCAAGCTCG
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_107_286_5/1
+AAAAAGTCCGCCTCGATCCCAGTCTCAAGTAGAAAAAGTCCCGTTGCCGATCCGTCTACGTCCGAGTAAGATAAT
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_122_299_6/1
+CAAGTCCCGTCCTAAAAAGTCCGCCTCGATCCCAGTCTCAAGTAGAAAAAGTCCCGTTGCCGCTCCGTCTACGTC
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_58_234_7/1
+AGTCTACGTCCGAGTCAGATAATAAACTAATAGTGGCGTATCGCAAGCTCGACGCTCAGCCGTAGGGCCGCGCGC
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_57_231_8/1
+GGGATGACGACTAGGACTACGGACGGACTTAGAGCGTCAGATGCACCGACTGGACTATTTAGGACGATCGGACTG
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_8_155_9/1
+TACGTAGCGTCCTACTGCCCTCCTCAGTCCGATCGTCCTAAATAGTACAGTCGCTGCATCTGACGCTCGAAGTCC
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_51_237_a/1
+ACTACGGGGATGACGACTAGGACTACGGACGGACTTAGAGCGTCAGATGCAGCGACTGGACTATTTAGGACGATC
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_89_230_b/1
+TACGTCCGAGTGAGTTAATAAAGTAATAGTGGCGTATCGCAAGCTCGACGCTCAGCCGTAGGGCCGCGCGCCAGA
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_105_276_c/1
+CCTCGATCCCAGTCTCAAGTAGAAAAAGCCCCGTTGCCGATCCGTCTACGTCCGAGTAAGATAATAAAGTAATAG
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_111_268_d/1
+CCAGTCTCAAGTAGAAAAAGTCCCGTTGCCGATCCGTCTACGTCCGAGTAAGATAATAAAATAATAGTGGCGTAT
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_151_286_e/1
+ACGTATTTGGCGCGCGGCCGTACGGCTGAGCGTCGAGCTTGCGATACGCCACTATTACTTTATTATCTTACTCGG
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_118_297_f/1
+AGTCCCGTCCTAAAAAGTCCGCCTCGATCCCAGTCTCAAGTAGAAAAAGTCCCGTTGCCGATCCGTCTACGTCCG
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_16_194_10/1
+TCGCAAGCTCGACGCTCAGCCGTAGGGCCGCGCGCCAAATACGTAGCGTCCTACTGCCCTCCTCAGTCCGATCGT
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_28_188_11/1
+TTGCGACTGAGCTAGGACGTGCCACTACGGGGATGACGACTAGGACTACGAACGGACTTAGAGCGTCAGATGCAG
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_36_218_12/1
+GAGCTAGGACGTGCCACTACGGGGATGACGACTAGGACTACGGACGGCCTTAGAGCGTCAGATGCAGCGACTGGA
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_105_266_13/1
+AGTCTCAAGTAGAAAAAGTCCCGTTGCCGATCCGTCTACGTCCGAGTAAGATAATAAAGTAATAGTGGCGGATCG
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_51_248_14/1
+ACTACGGGGATGACGACGAGGACTACGGACGGACTTAGAGCGTCAGATGCAGCGACTGAACTTTTTAGGACGATC
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_89_245_15/1
+AGCGTCAGATGCAGCGACTGGACTATTTAGGACGATCGGACTGAGGAGGGCAGTAGGACGCTACGTATTTGGCGC
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_58_218_16/1
+AGATAATAAAGTAATAGTGGCGTATCGCAAGCTCGACGCTCAGCCGTAGGGCCGCGCGCCAAATACGTAGCGTCC
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_46_195_17/1
+ATCCCAAGCTCGACGCTCAGCCGTAGGGCCGCGCGACAAATATGTAGCGTCCTACTGCCCTCCTCAGTCCAATCG
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_126_282_18/1
+AGTCCGCCTCGATCCCAGTCTCAAGTAGAAAAAGTCCCGTTGCCGATCCGTCTACGTCCGAGTAAGATAATAAAG
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_53_212_19/1
+TACGGGGATGACGACTAGGACTACGGACGGACTTAGAGCGTCAGATGCAGCGACTGGAATATTTAGGACGATCGG
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_11_190_1a/1
+GACTAGACTGGAGGCGCTTGCGACTGAGCTAGGACGTGCCACTACGGGGATGACGACTAGGACTACGGACGGACT
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_52_261_1b/1
+CTACGGGAATGACGACTAGGGCTACGGAGGGACTTACAGCGTCAGATGCAGCGACTGGACTATTTAGGACGATCG
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_104_274_1c/1
+TCGATCCCAGTCTCAAGTAGAAAAAGTCCCGTTGCCGATCCGTCTACGTCCGAGTAAGATAATAAAGTAATAGTG
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_151_297_1d/1
+ACGTATTTGGCGCGCGGCCCTACGGCTGAGCGTCGAGCTTGCGATACGCCACTATTACTTTATTATCTTACTCGG
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_44_225_1e/1
+CCGAGTAAGATAATAAAGTAATAGTGGCGTATCGCAAGCTCGACGCTCAGCCGTAGGGCCGCGCGCCATATACGT
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_28_206_1f/1
+TTGCGACTGAGCTAGGACGTGCCACTACGGGGATGACGACTAGGACTACGGACGGACTTAGAGCGTCAGACGCAG
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_48_249_20/1
+GTCCCGTTGCCGATCCGTCTCCGTCCGAGTAAGATAGTAAAGTAATAGTGGCGTATCGCAAGCTCGACGCTCAGC
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_75_235_21/1
+ACGGACGGACTTAGAGCGTCAGATGCAGCGACTGGACTATTTAGCACGATCGGACTGAGGAGGGCAGTAGAACGT
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_110_267_22/1
+CAGTCTCAAGTAGAAAAAGTCCCGTTGCCGATCCGTCTACGTCCGAGTAAGATAATAAAGTAATAGTGGCGTATC
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_69_229_23/1
+ACGTCCGAGTAAGATAATAAAGTAATAGTGGCGTATCGCAAGCTAGACGCTCAGCCGTAGGGCCGCGCGCCAAAG
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_21_208_24/1
+GTAATAGTGGCGTATCGCAAGCTCGACGCTCAGGCGTAGGGCCGCGCGCCAAATACGTAGCGTCCTACTGCCCTC
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_42_209_25/1
+GGACGTGCCACTACGTGGATGACGACTAGGACTACGGACGGACTTAGAGCGTCAGATGCAGCGACTGGACTATTT
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_97_275_26/1
+ATGCAGCGACTGGACTATTTAGGACGATCGGACTGAGGAGGGCAGTAGGACGCTACGTATTTGGCGCGCGGCCCT
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_36_146_27/1
+ACCTACTGCACTCCTCAGTCCGATCGTCCTAAATAGTCCAGTCGCTGCATCTGACGCTCTAAGTCCGTCCGTAGT
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_110_271_28/1
+ACTATTTAGGACGATCGGACTGAGGAGGGCAGTAGGACGCTACGTATTTGGCGCGCGGCCCTACGGCTGAGCGTC
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_38_199_29/1
+GCTAGGACGTGCCACTACGGGGATGACGACTAGGACTACGGACGGACTTAGAGCGTCAGATGCAGCGACTGGACT
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_103_284_2a/1
+AAAGTCCGCCTCGATCCCAGTCTCAAGTAGAAAAAGTCCCGTTGCCGATCCGTCTACGTCCGAGTAAGATAATAA
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_116_271_2b/1
+ATCCCAGTCTCAAGTAGAAAAAGTCCCGTTGCCGATCTGTCTACGTCCGAGTAAGATAATAAAGTAATAGTGGCG
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_77_256_2c/1
+GGACGGACTTAGAGCATCAGATGCAGCGACTGGACTATTTAGGACGATCGGACTGAGGAGGGCAGTAGGACGCTA
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_50_224_2d/1
+CGAGTAAGATAATAAAGTAATAGTGGCGTATCGCAAGCTCGACGCTCAGCCGTAGGGCCGCGCGCCAAATACGTA
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_65_238_2e/1
+GACTAGGACTACGGACGGACTTAGAGCGTCAGAAGCAGCGACTGGACTATTTAGGACGATCGGACTGAGGAGGGC
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_46_232_2f/1
+GTGCCACTACGGGGATGACGACTAGGACTACGGCCGGACTTAGAGCGTCAGATGCAGCGACTGGACTATTTAGGA
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_26_189_30/1
+AGCTCGACGCTCAGCCGTAGGGCCGCGCGCCAAATACGTACCGTCCTACTGCCCTCCTCAGTCCGATCGTCCTAA
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_79_256_31/1
+AGAAAAAGTCCCGTTGCCGATCCGGCTACGTCCGAGTAAGATAATAAAGTAATAGTGGCGTATGGCAAGCTCGAC
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_89_267_32/1
+CAGTCTCAAGTAGAAAAAGTCCCGTTGCCGATCCGTCTACGTCCGAGAAAGATAATAAAGTAATAGTGCCGTATC
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_131_260_33/1
+GAGGAGGGCAGTAGGACGCTACGTATTTGGCGCGCGGCCCTACGGCTGAGCGTCGAGCTTGCGATACGCCACTAT
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_73_240_34/1
+CTACGGACGGACTTAGAGCGTCAGATGCAGCGAATGGACTATTTAGGACGCTCGGACTGAGGAGGGCAGTAGGAC
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_44_197_35/1
+ACGTGCAACTACGGGGATGACGACTAGGACTACGGACGGACTTAGAGCGTCAGATGCAGCGACTGGACTATTTAG
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_128_252_36/1
+ACTGAGGAGGGCAGTAGGACGCTACGCATTTGGCGCGCGGCCCTACGGCTGAGCGTCGAGCTTGCGATAGGCCAC
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_145_300_37/1
+GCAAGTCCCGTCCTAAAAAGTCCGCCTCGATCCCAGTCTCAAGTAGAAAAAGTCCCGTTTCCGATCCGTCTACGT
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_85_275_38/1
+TTAGAGCGTCAGATGCAGCGACTGGACTATTTAGGACGATCGGACTGAGGAGGGCAGTAGGAAGCTACGTCTTTC
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_48_207_39/1
+GCCCCTACGGGGATGACGACTAGGACTACGGACGGATTTAGACCGTCAGATGCAGCGACTGGACTATTTAGGACG
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_81_228_3a/1
+CCTACGAGTAAGATAATAAAGTAATAGTGGCGTATCGCAAGCTCGACGCTCAGCCATAGGGCCGCGCGCCAAATA
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_75_277_3b/1
+ACGGACGGACTTAAAGCTTCAGATGCAGCGACAGGACTATTTAGGACGATCGGACTGAGGAGGGCAGTAGGACGC
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_30_231_3c/1
+CTACGTGCGAGTAAGATATTAAAGTAATAGTGGCGTATCGCAAGCTCGACGCTTAGCCGTAGGGCCGCGCGCCAA
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_58_220_3d/1
+GAAGATAATAAAGTAATAGTGGCGTATCGCAACCTCGACGCTCAGCCGTAGGGCCGCGCGCCAAATACGTAGCGT
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_104_278_3e/1
+CGCCTCGATTCCAGTCTCAAGTAGAAAAAGTCCCGTTGCCGATCCGTCTACGTCCGAGTAAGATAATAAAGTAAT
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_44_193_3f/1
+ACGTGCCACTACGGGGATGACGACTAGGACTACGGACGGACTTAGAGCGTCAGATGCAGCGACTGGTCTATTTAG
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_94_291_40/1
+CAGATGCAGCGACTGTACTATTTAGGACGACCTGACTGAGGAGGGTAGTAGGACGCTACGTATTTGGCGCGCGGC
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_91_256_41/1
+CGTCAGATGCAGCGACTGGACTATTTAGGACGATCGGACTGAGGAGGGCAGTAGGACGCTACGTATTTGGCGCGC
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_23_186_42/1
+TCGACGCTCAGTCGTAGGGCCGCGCGCCAAATACGTAGCGTCCTTCTGCCCTCCTCCGTCCGATCGTCCTAAATA
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_92_266_43/1
+GTCAGATGCAGCGACTGGACTATTTAGGACGATCGGACTCAGGAGGGCAGTAGGACGCTACGTATTTGGCGCGCG
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_92_250_44/1
+GTCAGATGCAGCGACTGGACTATTTAGGACGATCGGACTGAGGAGGGCAGTAGGACGCTACGTATTTGGCGCGCG
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_106_253_45/1
+AAAAGTCCCGTTGCCGATCCGTTTACGTCCGAGTAAGATAATAAAGTAATAGTGGCGTATCGCAAGCTCGACGCT
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_5_197_46/1
+CTATCTGACTAGACTCGAGGCGCTTGCGTCTGAGCTAGGACGTGCCACTACGGGGATGACGACTAGGACTACGGA
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_51_194_47/1
+TCGCAAGCTCGACGCTCAGCCGTAGGGCCGCGCGCCAAATACGTAGCGTCCTACTGCCCTCCTCAGTCCGATCGT
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_125_280_48/1
+CGGACTGAGGAGGGCAGTAGGACGCTATGTATTTGGCGCGCGGCCCTACGGCTGAGCGTCGAGCTTGCGAAACGC
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_51_194_49/1
+ACTACGGGGATGACGACTAGGCCTACGGATGGACTTAGAGCGTCAGATGCAGCGACTGGACTATTTAGGACGATC
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_33_189_4a/1
+AGCCCGACGCTCAGCCGTAGGGCCGCGCGCCAAATAGGTAGCGTCCTACTGCCCTCCTCAGTCCGATCGTCCTAA
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_78_276_4b/1
+GACGGACTTAGAGCGTCAGATGCAGCGACTGGACTATTTAGGACGATCGGACTGAGGAGGGCAGTAGGGCGCTAC
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_63_229_4c/1
+ACGTCCGAGTAAGATAATAAAGTAATAGTGGCGTATCGCAAGCTCGACACTCAGCCGTAGGGCCGCGCGCCAAAT
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_81_245_4d/1
+CGTTGCCGATCCGTCTACGTCCGAGTAAGATTATAAAGTAATAGTGGCGTATCGCAACCTCGACGCTCAGCCGTA
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_33_223_4e/1
+ACTGAGCTAGGACGTGCCACTACGGGGATGACGACTAGGACTACGGACGGACTTAGAGCGTCAGATGCAGCGACT
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_172_294_4f/1
+ACGGATGAGCGTCGAGCTTGCGATACGCCACTATTACTTTATTATCTTCCTCGGACGTAGACGGATCGCCAACGG
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_88_257_50/1
+TAGAAAAAGTCCCGTTGCCGATCCGTCTACGTCCGAGTAAGATAATAAAGTAATAGTGGCGTATCGCAAGCTCGA
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_3_187_51/1
+TACTATTTGACTAGACTGGAGGCGCTTGCGACTGAGCTAGGACGTGCCACTACGGGGATGACGACTCGGACTACG
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_9_179_52/1
+TCAGCCGTAGGGCCGCGCGCCAAATACGTAGCGTCCTACTGCCCTCCTCAGTCCGATCGTCCTAAATGGTCCAGT
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_85_268_53/1
+TTAGTGCGTCAGATGCAGCGACTGGACTATTTAGGACGATCGGACTGAGGAGGGCAGTAGGACGCTACGTATTTG
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_75_204_54/1
+ACGGACGGACTTCGAGCCTCAGATGCAGCGACTGGACTATTTAGGACGATCGGACTGAGGAGGGCAGTAGGACGC
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_41_236_55/1
+AGGACGTGCCACTACGGGGATGACGACTAGGACTACGGACGGACTTAGAGCGTCAGATGCAGCGACTGGAATATT
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_56_183_56/1
+GGGGATGACGACTAGGACTACGGACGGACTTAGAGCGTCAGATGCAGCGACTGGACTATTTGGGACGATCGGACT
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_87_250_57/1
+AGTCCCGTTGCCGATCCGTCTACGTCCGAGTAAGATAATAAAGTAATAGTGGCGTATCGCAAGCTCGACGCTCAT
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_82_271_58/1
+GACTTAGAGCGTCAGTTGCAGCGACTGGACTATTTAGGACGATCGGACTGAGGAGGGCAGTAGGACGCTACGTAT
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_6_182_59/1
+TATCTGACTAGACTGGAGGCGCTTGCGACTGAGCTAGGACGTGCCAGTACGGGGATGACGACTAGGACTACGGAC
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_53_272_5a/1
+GATCCCAGTGTCAAGTAGAAAAAGTCCCGTTGCCGATCCGTCTACGTCCGAGTAAGATAATAAAGTAATAGTGGC
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_114_277_5b/1
+GCCTCGATCCCAGTCTCAAGCAGAAAAAGTCCCGTTGCCGTTCCGTCTACCTCCGAGTAAGATAATAAAGTAATA
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_39_219_5c/1
+CTAGGACGTCCCACTATGGGGATGACGACTAGGACTACGGACGGACTTAGAGCGTCAGATGCAGCGGCTGGACTA
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_4_191_5d/1
+CAAGCTCGACGCTCAGCCGTAGGGCCGCGCGCCAAATACGTAGTGTCCTACTGCCCTACTCAGTCCGATCGTCCT
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_73_259_5e/1
+CTACGGACGGACTTAGAGCGTCAGATGCTGCGACTGGACTATTTGGGACGATCGGACTGAGGAGGGCAGTAGGAC
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_87_279_5f/1
+CCGCCTCGATCCCAGTCTCAAGTAGAAAAAGTCCCGTTGCCGATCCGTCTACGTCCGAGTAAGATAATAAAGTAA
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_125_293_60/1
+CCGTCCTAAAAAGTCCGCCTCGATCCCAGTCTCAAGTAGAAAAAGTCCCGTTGCCGATCCGTCTACGTCCGAGTA
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_111_297_61/1
+AGTCCCGTCCTAAAAAGTCCGCCTCGATCCCAGTCTCAAGTAGAAAAAGTCCCGTTGCGGATCCGTCTACGTCCG
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_22_173_62/1
+AGGCGCTTGCGACTGAGCTAGGACGTGCCACTACGGGGATGACGACTAGGACTACGGACGGACTTAGAGCGTCAG
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_116_295_63/1
+TCCCGTCCTAAAAAGTCCGCCTCGATCCCAGTCTCAAGTAGAAAAAGTCCCGTTGCCGATCCGTCTACGTCCGAG
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
Binary file test-data/tophat_out1h.bam has changed
--- a/test-data/tophat_in1.fq
+++ /dev/null
@@ -1,400 +0,0 @@
-@test_mRNA_150_290_0/1
-TCCTAAAAAGTCCGCCTCGGTCTCAGTCTCAAGTAGAAAAAGTCCCGTTGGCGATCCGTCTACGTCCGAGTAAGA
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_8_197_1/1
-TCTGACTAGACTGGAGGCGCTTGCGACTGAGCTAGGACGTGACACTACGGGGATGGCGACTAGGACTACGGACGG
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_82_255_2/1
-GAAAAAGTCCCGTTGCCGATCCGTCTACGTCCGAGTAATATAGTAAAGTAATAGTGGCGTATCGCAAGCTCGACG
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_96_238_3/1
-GATCCGTCTACGTCCGCGTAAGATAATAAAGTACTAGTAGCGTATCGCAAGCTCGACGCTCAGCCGTAGGGCCGC
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_72_258_4/1
-GTAGAAAAAGTCCCGTTGCCCATCCGTCTACGTCCGAGTAAGATAATAAAGTAATAGTGGCGTATCGCAAGCTCG
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_107_286_5/1
-AAAAAGTCCGCCTCGATCCCAGTCTCAAGTAGAAAAAGTCCCGTTGCCGATCCGTCTACGTCCGAGTAAGATAAT
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_122_299_6/1
-CAAGTCCCGTCCTAAAAAGTCCGCCTCGATCCCAGTCTCAAGTAGAAAAAGTCCCGTTGCCGCTCCGTCTACGTC
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_58_234_7/1
-AGTCTACGTCCGAGTCAGATAATAAACTAATAGTGGCGTATCGCAAGCTCGACGCTCAGCCGTAGGGCCGCGCGC
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_57_231_8/1
-GGGATGACGACTAGGACTACGGACGGACTTAGAGCGTCAGATGCACCGACTGGACTATTTAGGACGATCGGACTG
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_8_155_9/1
-TACGTAGCGTCCTACTGCCCTCCTCAGTCCGATCGTCCTAAATAGTACAGTCGCTGCATCTGACGCTCGAAGTCC
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_51_237_a/1
-ACTACGGGGATGACGACTAGGACTACGGACGGACTTAGAGCGTCAGATGCAGCGACTGGACTATTTAGGACGATC
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_89_230_b/1
-TACGTCCGAGTGAGTTAATAAAGTAATAGTGGCGTATCGCAAGCTCGACGCTCAGCCGTAGGGCCGCGCGCCAGA
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_105_276_c/1
-CCTCGATCCCAGTCTCAAGTAGAAAAAGCCCCGTTGCCGATCCGTCTACGTCCGAGTAAGATAATAAAGTAATAG
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_111_268_d/1
-CCAGTCTCAAGTAGAAAAAGTCCCGTTGCCGATCCGTCTACGTCCGAGTAAGATAATAAAATAATAGTGGCGTAT
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_151_286_e/1
-ACGTATTTGGCGCGCGGCCGTACGGCTGAGCGTCGAGCTTGCGATACGCCACTATTACTTTATTATCTTACTCGG
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_118_297_f/1
-AGTCCCGTCCTAAAAAGTCCGCCTCGATCCCAGTCTCAAGTAGAAAAAGTCCCGTTGCCGATCCGTCTACGTCCG
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_16_194_10/1
-TCGCAAGCTCGACGCTCAGCCGTAGGGCCGCGCGCCAAATACGTAGCGTCCTACTGCCCTCCTCAGTCCGATCGT
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_28_188_11/1
-TTGCGACTGAGCTAGGACGTGCCACTACGGGGATGACGACTAGGACTACGAACGGACTTAGAGCGTCAGATGCAG
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_36_218_12/1
-GAGCTAGGACGTGCCACTACGGGGATGACGACTAGGACTACGGACGGCCTTAGAGCGTCAGATGCAGCGACTGGA
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_105_266_13/1
-AGTCTCAAGTAGAAAAAGTCCCGTTGCCGATCCGTCTACGTCCGAGTAAGATAATAAAGTAATAGTGGCGGATCG
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_51_248_14/1
-ACTACGGGGATGACGACGAGGACTACGGACGGACTTAGAGCGTCAGATGCAGCGACTGAACTTTTTAGGACGATC
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_89_245_15/1
-AGCGTCAGATGCAGCGACTGGACTATTTAGGACGATCGGACTGAGGAGGGCAGTAGGACGCTACGTATTTGGCGC
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_58_218_16/1
-AGATAATAAAGTAATAGTGGCGTATCGCAAGCTCGACGCTCAGCCGTAGGGCCGCGCGCCAAATACGTAGCGTCC
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_46_195_17/1
-ATCCCAAGCTCGACGCTCAGCCGTAGGGCCGCGCGACAAATATGTAGCGTCCTACTGCCCTCCTCAGTCCAATCG
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_126_282_18/1
-AGTCCGCCTCGATCCCAGTCTCAAGTAGAAAAAGTCCCGTTGCCGATCCGTCTACGTCCGAGTAAGATAATAAAG
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_53_212_19/1
-TACGGGGATGACGACTAGGACTACGGACGGACTTAGAGCGTCAGATGCAGCGACTGGAATATTTAGGACGATCGG
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_11_190_1a/1
-GACTAGACTGGAGGCGCTTGCGACTGAGCTAGGACGTGCCACTACGGGGATGACGACTAGGACTACGGACGGACT
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_52_261_1b/1
-CTACGGGAATGACGACTAGGGCTACGGAGGGACTTACAGCGTCAGATGCAGCGACTGGACTATTTAGGACGATCG
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_104_274_1c/1
-TCGATCCCAGTCTCAAGTAGAAAAAGTCCCGTTGCCGATCCGTCTACGTCCGAGTAAGATAATAAAGTAATAGTG
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_151_297_1d/1
-ACGTATTTGGCGCGCGGCCCTACGGCTGAGCGTCGAGCTTGCGATACGCCACTATTACTTTATTATCTTACTCGG
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_44_225_1e/1
-CCGAGTAAGATAATAAAGTAATAGTGGCGTATCGCAAGCTCGACGCTCAGCCGTAGGGCCGCGCGCCATATACGT
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_28_206_1f/1
-TTGCGACTGAGCTAGGACGTGCCACTACGGGGATGACGACTAGGACTACGGACGGACTTAGAGCGTCAGACGCAG
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_48_249_20/1
-GTCCCGTTGCCGATCCGTCTCCGTCCGAGTAAGATAGTAAAGTAATAGTGGCGTATCGCAAGCTCGACGCTCAGC
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_75_235_21/1
-ACGGACGGACTTAGAGCGTCAGATGCAGCGACTGGACTATTTAGCACGATCGGACTGAGGAGGGCAGTAGAACGT
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_110_267_22/1
-CAGTCTCAAGTAGAAAAAGTCCCGTTGCCGATCCGTCTACGTCCGAGTAAGATAATAAAGTAATAGTGGCGTATC
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_69_229_23/1
-ACGTCCGAGTAAGATAATAAAGTAATAGTGGCGTATCGCAAGCTAGACGCTCAGCCGTAGGGCCGCGCGCCAAAG
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_21_208_24/1
-GTAATAGTGGCGTATCGCAAGCTCGACGCTCAGGCGTAGGGCCGCGCGCCAAATACGTAGCGTCCTACTGCCCTC
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_42_209_25/1
-GGACGTGCCACTACGTGGATGACGACTAGGACTACGGACGGACTTAGAGCGTCAGATGCAGCGACTGGACTATTT
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_97_275_26/1
-ATGCAGCGACTGGACTATTTAGGACGATCGGACTGAGGAGGGCAGTAGGACGCTACGTATTTGGCGCGCGGCCCT
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_36_146_27/1
-ACCTACTGCACTCCTCAGTCCGATCGTCCTAAATAGTCCAGTCGCTGCATCTGACGCTCTAAGTCCGTCCGTAGT
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_110_271_28/1
-ACTATTTAGGACGATCGGACTGAGGAGGGCAGTAGGACGCTACGTATTTGGCGCGCGGCCCTACGGCTGAGCGTC
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_38_199_29/1
-GCTAGGACGTGCCACTACGGGGATGACGACTAGGACTACGGACGGACTTAGAGCGTCAGATGCAGCGACTGGACT
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_103_284_2a/1
-AAAGTCCGCCTCGATCCCAGTCTCAAGTAGAAAAAGTCCCGTTGCCGATCCGTCTACGTCCGAGTAAGATAATAA
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_116_271_2b/1
-ATCCCAGTCTCAAGTAGAAAAAGTCCCGTTGCCGATCTGTCTACGTCCGAGTAAGATAATAAAGTAATAGTGGCG
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_77_256_2c/1
-GGACGGACTTAGAGCATCAGATGCAGCGACTGGACTATTTAGGACGATCGGACTGAGGAGGGCAGTAGGACGCTA
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_50_224_2d/1
-CGAGTAAGATAATAAAGTAATAGTGGCGTATCGCAAGCTCGACGCTCAGCCGTAGGGCCGCGCGCCAAATACGTA
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_65_238_2e/1
-GACTAGGACTACGGACGGACTTAGAGCGTCAGAAGCAGCGACTGGACTATTTAGGACGATCGGACTGAGGAGGGC
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_46_232_2f/1
-GTGCCACTACGGGGATGACGACTAGGACTACGGCCGGACTTAGAGCGTCAGATGCAGCGACTGGACTATTTAGGA
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_26_189_30/1
-AGCTCGACGCTCAGCCGTAGGGCCGCGCGCCAAATACGTACCGTCCTACTGCCCTCCTCAGTCCGATCGTCCTAA
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_79_256_31/1
-AGAAAAAGTCCCGTTGCCGATCCGGCTACGTCCGAGTAAGATAATAAAGTAATAGTGGCGTATGGCAAGCTCGAC
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_89_267_32/1
-CAGTCTCAAGTAGAAAAAGTCCCGTTGCCGATCCGTCTACGTCCGAGAAAGATAATAAAGTAATAGTGCCGTATC
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_131_260_33/1
-GAGGAGGGCAGTAGGACGCTACGTATTTGGCGCGCGGCCCTACGGCTGAGCGTCGAGCTTGCGATACGCCACTAT
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_73_240_34/1
-CTACGGACGGACTTAGAGCGTCAGATGCAGCGAATGGACTATTTAGGACGCTCGGACTGAGGAGGGCAGTAGGAC
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_44_197_35/1
-ACGTGCAACTACGGGGATGACGACTAGGACTACGGACGGACTTAGAGCGTCAGATGCAGCGACTGGACTATTTAG
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_128_252_36/1
-ACTGAGGAGGGCAGTAGGACGCTACGCATTTGGCGCGCGGCCCTACGGCTGAGCGTCGAGCTTGCGATAGGCCAC
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_145_300_37/1
-GCAAGTCCCGTCCTAAAAAGTCCGCCTCGATCCCAGTCTCAAGTAGAAAAAGTCCCGTTTCCGATCCGTCTACGT
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_85_275_38/1
-TTAGAGCGTCAGATGCAGCGACTGGACTATTTAGGACGATCGGACTGAGGAGGGCAGTAGGAAGCTACGTCTTTC
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_48_207_39/1
-GCCCCTACGGGGATGACGACTAGGACTACGGACGGATTTAGACCGTCAGATGCAGCGACTGGACTATTTAGGACG
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_81_228_3a/1
-CCTACGAGTAAGATAATAAAGTAATAGTGGCGTATCGCAAGCTCGACGCTCAGCCATAGGGCCGCGCGCCAAATA
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_75_277_3b/1
-ACGGACGGACTTAAAGCTTCAGATGCAGCGACAGGACTATTTAGGACGATCGGACTGAGGAGGGCAGTAGGACGC
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_30_231_3c/1
-CTACGTGCGAGTAAGATATTAAAGTAATAGTGGCGTATCGCAAGCTCGACGCTTAGCCGTAGGGCCGCGCGCCAA
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_58_220_3d/1
-GAAGATAATAAAGTAATAGTGGCGTATCGCAACCTCGACGCTCAGCCGTAGGGCCGCGCGCCAAATACGTAGCGT
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_104_278_3e/1
-CGCCTCGATTCCAGTCTCAAGTAGAAAAAGTCCCGTTGCCGATCCGTCTACGTCCGAGTAAGATAATAAAGTAAT
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_44_193_3f/1
-ACGTGCCACTACGGGGATGACGACTAGGACTACGGACGGACTTAGAGCGTCAGATGCAGCGACTGGTCTATTTAG
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_94_291_40/1
-CAGATGCAGCGACTGTACTATTTAGGACGACCTGACTGAGGAGGGTAGTAGGACGCTACGTATTTGGCGCGCGGC
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_91_256_41/1
-CGTCAGATGCAGCGACTGGACTATTTAGGACGATCGGACTGAGGAGGGCAGTAGGACGCTACGTATTTGGCGCGC
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_23_186_42/1
-TCGACGCTCAGTCGTAGGGCCGCGCGCCAAATACGTAGCGTCCTTCTGCCCTCCTCCGTCCGATCGTCCTAAATA
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_92_266_43/1
-GTCAGATGCAGCGACTGGACTATTTAGGACGATCGGACTCAGGAGGGCAGTAGGACGCTACGTATTTGGCGCGCG
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_92_250_44/1
-GTCAGATGCAGCGACTGGACTATTTAGGACGATCGGACTGAGGAGGGCAGTAGGACGCTACGTATTTGGCGCGCG
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_106_253_45/1
-AAAAGTCCCGTTGCCGATCCGTTTACGTCCGAGTAAGATAATAAAGTAATAGTGGCGTATCGCAAGCTCGACGCT
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_5_197_46/1
-CTATCTGACTAGACTCGAGGCGCTTGCGTCTGAGCTAGGACGTGCCACTACGGGGATGACGACTAGGACTACGGA
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_51_194_47/1
-TCGCAAGCTCGACGCTCAGCCGTAGGGCCGCGCGCCAAATACGTAGCGTCCTACTGCCCTCCTCAGTCCGATCGT
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_125_280_48/1
-CGGACTGAGGAGGGCAGTAGGACGCTATGTATTTGGCGCGCGGCCCTACGGCTGAGCGTCGAGCTTGCGAAACGC
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_51_194_49/1
-ACTACGGGGATGACGACTAGGCCTACGGATGGACTTAGAGCGTCAGATGCAGCGACTGGACTATTTAGGACGATC
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_33_189_4a/1
-AGCCCGACGCTCAGCCGTAGGGCCGCGCGCCAAATAGGTAGCGTCCTACTGCCCTCCTCAGTCCGATCGTCCTAA
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_78_276_4b/1
-GACGGACTTAGAGCGTCAGATGCAGCGACTGGACTATTTAGGACGATCGGACTGAGGAGGGCAGTAGGGCGCTAC
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_63_229_4c/1
-ACGTCCGAGTAAGATAATAAAGTAATAGTGGCGTATCGCAAGCTCGACACTCAGCCGTAGGGCCGCGCGCCAAAT
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_81_245_4d/1
-CGTTGCCGATCCGTCTACGTCCGAGTAAGATTATAAAGTAATAGTGGCGTATCGCAACCTCGACGCTCAGCCGTA
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_33_223_4e/1
-ACTGAGCTAGGACGTGCCACTACGGGGATGACGACTAGGACTACGGACGGACTTAGAGCGTCAGATGCAGCGACT
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_172_294_4f/1
-ACGGATGAGCGTCGAGCTTGCGATACGCCACTATTACTTTATTATCTTCCTCGGACGTAGACGGATCGCCAACGG
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_88_257_50/1
-TAGAAAAAGTCCCGTTGCCGATCCGTCTACGTCCGAGTAAGATAATAAAGTAATAGTGGCGTATCGCAAGCTCGA
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_3_187_51/1
-TACTATTTGACTAGACTGGAGGCGCTTGCGACTGAGCTAGGACGTGCCACTACGGGGATGACGACTCGGACTACG
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_9_179_52/1
-TCAGCCGTAGGGCCGCGCGCCAAATACGTAGCGTCCTACTGCCCTCCTCAGTCCGATCGTCCTAAATGGTCCAGT
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_85_268_53/1
-TTAGTGCGTCAGATGCAGCGACTGGACTATTTAGGACGATCGGACTGAGGAGGGCAGTAGGACGCTACGTATTTG
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_75_204_54/1
-ACGGACGGACTTCGAGCCTCAGATGCAGCGACTGGACTATTTAGGACGATCGGACTGAGGAGGGCAGTAGGACGC
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_41_236_55/1
-AGGACGTGCCACTACGGGGATGACGACTAGGACTACGGACGGACTTAGAGCGTCAGATGCAGCGACTGGAATATT
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_56_183_56/1
-GGGGATGACGACTAGGACTACGGACGGACTTAGAGCGTCAGATGCAGCGACTGGACTATTTGGGACGATCGGACT
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_87_250_57/1
-AGTCCCGTTGCCGATCCGTCTACGTCCGAGTAAGATAATAAAGTAATAGTGGCGTATCGCAAGCTCGACGCTCAT
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_82_271_58/1
-GACTTAGAGCGTCAGTTGCAGCGACTGGACTATTTAGGACGATCGGACTGAGGAGGGCAGTAGGACGCTACGTAT
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_6_182_59/1
-TATCTGACTAGACTGGAGGCGCTTGCGACTGAGCTAGGACGTGCCAGTACGGGGATGACGACTAGGACTACGGAC
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_53_272_5a/1
-GATCCCAGTGTCAAGTAGAAAAAGTCCCGTTGCCGATCCGTCTACGTCCGAGTAAGATAATAAAGTAATAGTGGC
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_114_277_5b/1
-GCCTCGATCCCAGTCTCAAGCAGAAAAAGTCCCGTTGCCGTTCCGTCTACCTCCGAGTAAGATAATAAAGTAATA
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_39_219_5c/1
-CTAGGACGTCCCACTATGGGGATGACGACTAGGACTACGGACGGACTTAGAGCGTCAGATGCAGCGGCTGGACTA
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_4_191_5d/1
-CAAGCTCGACGCTCAGCCGTAGGGCCGCGCGCCAAATACGTAGTGTCCTACTGCCCTACTCAGTCCGATCGTCCT
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_73_259_5e/1
-CTACGGACGGACTTAGAGCGTCAGATGCTGCGACTGGACTATTTGGGACGATCGGACTGAGGAGGGCAGTAGGAC
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_87_279_5f/1
-CCGCCTCGATCCCAGTCTCAAGTAGAAAAAGTCCCGTTGCCGATCCGTCTACGTCCGAGTAAGATAATAAAGTAA
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_125_293_60/1
-CCGTCCTAAAAAGTCCGCCTCGATCCCAGTCTCAAGTAGAAAAAGTCCCGTTGCCGATCCGTCTACGTCCGAGTA
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_111_297_61/1
-AGTCCCGTCCTAAAAAGTCCGCCTCGATCCCAGTCTCAAGTAGAAAAAGTCCCGTTGCGGATCCGTCTACGTCCG
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_22_173_62/1
-AGGCGCTTGCGACTGAGCTAGGACGTGCCACTACGGGGATGACGACTAGGACTACGGACGGACTTAGAGCGTCAG
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_116_295_63/1
-TCCCGTCCTAAAAAGTCCGCCTCGATCCCAGTCTCAAGTAGAAAAAGTCCCGTTGCCGATCCGTCTACGTCCGAG
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
--- a/tools/ngs_rna/tophat_wrapper.py
+++ b/tools/ngs_rna/tophat_wrapper.py
@@ -30,7 +30,7 @@ def __main__():
parser.add_option( '-g', '--max_multihits', dest='max_multihits', help='Maximum number of alignments to be allowed' )
parser.add_option( '', '--seg-mismatches', dest='seg_mismatches', help='Number of mismatches allowed in each segment alignment for reads mapped independently' )
parser.add_option( '', '--seg-length', dest='seg_length', help='Minimum length of read segments' )
-
+
# Options for supplying own junctions
parser.add_option( '-G', '--GTF', dest='gene_model_annotations', help='Supply TopHat with a list of gene model annotations. \
TopHat will use the exon records in this file to build \
@@ -58,18 +58,18 @@ def __main__():
parser.add_option( '', '--max-closure-intron', dest='max_closure_intron', help='Maximum intron length that may be found during closure search' )
parser.add_option( '', '--min-coverage-intron', dest='min_coverage_intron', help='Minimum intron length that may be found during coverage search' )
parser.add_option( '', '--max-coverage-intron', dest='max_coverage_intron', help='Maximum intron length that may be found during coverage search' )
-
+
# Wrapper options.
parser.add_option( '-1', '--input1', dest='input1', help='The (forward or single-end) reads file in Sanger FASTQ format' )
parser.add_option( '-2', '--input2', dest='input2', help='The reverse reads file in Sanger FASTQ format' )
parser.add_option( '', '--single-paired', dest='single_paired', help='' )
parser.add_option( '', '--settings', dest='settings', help='' )
-
+
(options, args) = parser.parse_args()
-
+
# Creat bowtie index if necessary.
tmp_index_dir = tempfile.mkdtemp()
- if options.own_file != 'None':
+ if options.own_file:
index_path = os.path.join( tmp_index_dir, os.path.split( options.own_file )[1] )
cmd_index = 'bowtie-build -f %s %s' % ( options.own_file, index_path )
try:
@@ -98,12 +98,12 @@ def __main__():
stop_err( 'Error indexing reference sequence\n' + str( e ) )
else:
index_path = options.index_path
-
+
# Build tophat command.
tmp_output_dir = tempfile.mkdtemp()
cmd = 'tophat -o %s %s %s %s'
reads = options.input1
- if options.input2 != 'None':
+ if options.input2:
reads += ' ' + options.input2
opts = '-p %s' % options.num_threads
if options.single_paired == 'paired':
@@ -129,7 +129,7 @@ def __main__():
opts += ' -j %s' % options.raw_juncs
if options.no_novel_juncs:
opts += ' --no-novel-juncs'
-
+
# Search type options.
if options.coverage_search:
opts += ' --coverage-search --min-coverage-intron %s --max-coverage-intron %s' % ( options.min_coverage_intron, options.max_coverage_intron )
@@ -143,13 +143,13 @@ def __main__():
opts += ' --microexon-search'
if options.single_paired == 'paired':
opts += ' --mate-std-dev %s' % options.mate_std_dev
- if options.seg_mismatches != None:
+ if options.seg_mismatches:
opts += ' --segment-mismatches %d' % int(options.seg_mismatches)
- if options.seg_length != None:
+ if options.seg_length:
opts += ' --segment-length %d' % int(options.seg_length)
- if options.min_segment_intron != None:
+ if options.min_segment_intron:
opts += ' --min-segment-intron %d' % int(options.min_segment_intron)
- if options.max_segment_intron != None:
+ if options.max_segment_intron:
opts += ' --max-segment-intron %d' % int(options.max_segment_intron)
cmd = cmd % ( tmp_output_dir, opts, index_path, reads )
except Exception, e:
@@ -160,7 +160,7 @@ def __main__():
shutil.rmtree( tmp_output_dir )
stop_err( 'Something is wrong with the alignment parameters and the alignment could not be run\n' + str( e ) )
print cmd
-
+
# Run
try:
tmp_out = tempfile.NamedTemporaryFile( dir=tmp_output_dir ).name
@@ -185,10 +185,10 @@ def __main__():
tmp_stderr.close()
if returncode != 0:
raise Exception, stderr
-
+
# TODO: look for errors in program output.
-
- # Copy output files from tmp directory to specified files.
+
+ # Copy output files from tmp directory to specified files.
shutil.copyfile( os.path.join( tmp_output_dir, "junctions.bed" ), options.junctions_output_file )
shutil.copyfile( os.path.join( tmp_output_dir, "accepted_hits.bam" ), options.accepted_hits_output_file )
except Exception, e:
--- a/test-data/tophat_in2.fq
+++ /dev/null
@@ -1,400 +0,0 @@
-@test_mRNA_150_290_0/2
-TACGTATTTGTCGCGCGGCCCTACGGCTGAGCGTCGAGCTTGCGATCCGCCACTATTACTTTATTATCTTACTCG
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_8_197_1/2
-GTATCGCAAGCTCGACGCTCAGCCGTAGGGCCGCGCGCCAAATACGTAGCGTCCTACTGCCCTCCTCAGTCCGAT
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_82_255_2/2
-GACTTAGAGCGTCAGATGCAGCGACTGGACTTTTTAGGACGATCGGACTGAGGAGGGCAGTAGGACGCTACGTAT
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_96_238_3/2
-GATGCAGCGACTGGACTATTTAGGACGATCGGACGGAGGAGGGCAGTAGGACGCTACGTATTTGGCGCGCGGACC
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_72_258_4/2
-ACTACGGACGGACTTAGAGCGTCAGATGCAGCAACTGGACTATTTAGGACGATCGGACTGAGGAGGGCAGTAGGA
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_107_286_5/2
-TGGACTATTTAGGACGATCGGACTGAGGAGGGCAGTAGGACGCTACGCATTTGGCGCGCGGCCCTACGGCTGAGC
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_122_299_6/2
-GATCGGACTGAGGAGGGCAGTAGGACGCTACGTATTTGGCGCGCGGCCCTACGGCTGAGCGTCGAGCTTGCGATA
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_58_234_7/2
-GGATGACGCCTAGGACTACGGACGGACTTAGAGCGTCAGATGCAGCGACTGGACTATTTAGGACGATCGGACTGA
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_57_231_8/2
-CTACGTCCGAGTAAGATAATAAAGTAATAGTGGCGTATCGCAAGCTCGACGCTCAGCCCTAGGGCCGCGCGCCAA
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_8_155_9/2
-TGTGACTAGACTGGAGGCGCTTGCGACTGAGCTAGGACGTGCCACTACGGGGATGACGACTAGGACTACGGACGG
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_51_237_a/2
-ATCCGTCTACGTCCGAGTAAGATAATAAAGTAATAGTGGCGTATCGCAAGCTCGACGCTCAGCCGTAGGGCCGCG
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_89_230_b/2
-AGCGTCAGGTGCAGCGACTGGACTATTTAGGACGATCGGACTGAGGAGGGCAGTAGGACGCTACGTATTTGGCGC
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_105_276_c/2
-ACTGGACTATTTAGGACGATCGGACTGAGGAAGGCAGTAGGACGCTACGTATTTGGCGCGCGGCCCTACGGCTGA
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_111_268_d/2
-CTATTTAAGACGTTCCGCCTGAGGAGGGCAGTAGGACGCTACGTATTTGGCGCGCGGCCCTACGGCTGAGCGTCG
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_151_286_e/2
-AAAAAGTCCGCCTCGATCCCAGTCTCAAGTAGATAAAGTCCCGTTGCCGATCCGTCTACGTCCGAGTAAGATAAT
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_118_297_f/2
-GGACGATCGGACTGAGGAGGGCAGTAGGACGCTACGTATTTGGCGCGCGGCCCTACGGCTGAGCGTCGAGCTTGC
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_16_194_10/2
-GACTGGATGCGCTTGCGACTGAGCTAGGACGTGCCACTACGGGGATGACGACTCGGACTACGGACGGACTTAAAG
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_28_188_11/2
-GCTCGACGCTCAGCCGTAGGGCCTCGCGCCAAATACGAAGCGTCCTACTGCCTTCCTCAGTCCGATCGTCCTAAA
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_36_218_12/2
-AGATAATAAAGTAATAGTGGCGTATCGCAAGCTCGACGCTCAGCCGTAGGGCCGCGCGCCAAATACGTAGCGTCC
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_105_266_13/2
-ACTGGACTATTTAGGACGATCGGACTGAGGAGGGCAGTAGGACGCTACGTATTTGGCGCGCGGCCCTACGGCTGA
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_51_248_14/2
-TCCCGTTGCCGTTCCGTCTACGTCCGAGTAAGATAATAAAGTAATAGTGGCGTATCGCAAGCTCGACGCTCAGCC
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_89_245_15/2
-CGTTGCCGATCCGTCTACGTCCGAGTAAGATAATAGAGAAATAGTGGCGTATCGCAAGCTCGACGCTCAGCCGTA
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_58_218_16/2
-GGATGACGACTAGGACTACGGACGGACTTAGAACGTCAGATGCAGCGACTGGACTATTTAGGACGATCGGACTGA
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_46_195_17/2
-GTGCCACTACGGGGATGACGACTAGGACTACGGACGGACTTAGAGCGTCAGATGCAGCGACTGGACTATTTAGGA
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_126_282_18/2
-GGACTGAGGAGGGCAGTAGGACGCTACGTATTTGGCGCGCGGCCCTACGGCTGAGCGTCGAGCTTGCGATACGCC
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_53_212_19/2
-TAAAGAAATAGTGGCGTATCGCAAGCTCGACGCTCAGCCGTAGGGCCGCGCGCCAAATACGTAGCGTCCTACTGC
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_11_190_1a/2
-AAGCTCGACGCTCAGCCGTAGGGCCACGCGCCAAATACGTAGCGTCCTACTGCCCTCCTCAGTCCCATCGACCTA
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_52_261_1b/2
-CAAGTAGAAAAAGTCCCGTTGCCGATCCTTCTACGTCCGAGTAAGATAATTAAGTAATAGTGGCGTATCGCAAGC
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_104_274_1c/2
-GAGTGTACTATTTAGGACGATCGGACTGAGGAGGGCAGTAGGACGCTACGTATGTGCCGCGCGGCCCTACGGCTG
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_151_297_1d/2
-AGTCCCGTCCTAAAATGTCCGCCTCGATCCCAGTCTCAAGTAGAAAAAGTCCCGTTGCCGATCCGTCTACGTCCG
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_44_225_1e/2
-ACGTGCCACTACGGGGATGACGACTAGGACTACGGACGGACTTAGAGCGTCGGGTGCAGCGACTGGACTATTTAG
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_28_206_1f/2
-AATAGTGGCTTATCGCAAGCTCGACTCTCAGCCGTAGGGCCGCGCGCCAAATACGTGGCGTCCTACTGCCCTCCT
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_48_249_20/2
-GCCACTACGGGGATGACGACTAGGACGACGGACGGACTTAGAGCGTCAGATGCAGCGACTGGACTATTTAGGACG
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_75_235_21/2
-CCGTCTACGTCCGAGTAAGATAATAAAGTAATAGTGGCGTATCGCAAGCTCAACGCTCAGCCGTAGGGCCGTGCG
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_110_267_22/2
-ACTAGTTAGGGCGATCGGACTGAGGAGGGCAGTAGGACGCTACGTAGTTGGCGCGCGGCCCTACGACTGAGCGTC
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_69_229_23/2
-AGGACTACGGACGGACTTATAGGGTCAGATGCAGCGACTGGACTATTTAGGACGATCGGACTGAGGAGGGCAGTA
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_21_208_24/2
-GAGGCGCTTGCGACTGAGCTAGGACGTGCCACTACGGGGATGACGACTAGGACTACGGACGGACTTAGAGCGTCA
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_42_209_25/2
-AGTAATAGTGGCGTATCGCAAGCTCGACGCTCAGCCGTAGGGCCGCGCGCCAAATACGTAGCGTCCTACTGCCCT
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_97_275_26/2
-CTCGATCCCAGTCTCAAGTAGAAAGAGTCCCGTTTCCGATCCGTCTACGTCCGACTAAGATAATAAAGTAATAGT
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_36_146_27/2
-GCGCTAGGACGTGCCACTACGGGGATGACGACTAGGACTACAGACGGACTTAGAGCGTCAGATGCAGCGACTGGA
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_110_271_28/2
-ATCCCAGTCTCAAGTAGAAAAAGCCCCGTTGCCGATCCGTCTTCGTCCGAGTAAGATAATAAAGTAATAGTGGCG
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_38_199_29/2
-GCGTATCGCAAGCTCGACGCTCAGCCGTAGGGCCGCGCGCCAAATACGTAGCGTCCTACTGCCCTCCTCAGTCCG
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_103_284_2a/2
-CGACTGGACTATTTAGGACGATCGGACTGAGGAGGGCAGTAGGACGCTACGTATTTGGCGCGCGGCCCTACGGCT
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_116_271_2b/2
-TAGGACGATCGGACTGAGGAGGGCAGTAGGACGCTACGTATTTGGCGCGCGGCCCTACGGCTGAGCGTCGAGCTT
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_77_256_2c/2
-AGAAAAAGTCCCGTTGCCGATCCGTCTACGTCCGAGTAAGATAATAAAGTAATAGTGGCGTATCGCAAGCTCGAC
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_50_224_2d/2
-CACTACGAGGATGACGTCTAGGACTACGGACGGACTTAGAGCGTCAGACGCAGCGACTGGACTATTTAGGACGAT
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_65_238_2e/2
-GATCCGTCTACGTCCGAGTAAGATAATAAAGTAATAGTGGCGTATCGCAAGCTCGACGCGCAGCCGTAGGGCCGC
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_46_232_2f/2
-TCTACGTCCGAGTAAGATAATAAAGTAATAGTGGCGTATCGCAAGCTCGACGCTCAGCCGTAGGGCCGCGCGCCA
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_26_189_30/2
-GCTTGCGACTGAGCTAGGACGTGCCACTACGGGGATGACGACTAGGACTACGGACGGACTTAGAGCGTCAGATGC
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_79_256_31/2
-ACGGACTTAGAGCGTCAGATGCAGCGACTGGACTATTTAGGACGATCGGACTGAGGAGGGCAGTAGGACGCTACG
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_89_267_32/2
-AGCGTCAGATGCAGCGACTGGACTATTTAGGACGATCGGAGTGAGGAGGGCAGTAGGACGCTACGTATTTGGCGG
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_131_260_33/2
-AAGTAAAAAAAGTCCCGTGGCCGATCCGTTTACGTCCGAGTAAGATAATAAAGTAATAGTGGCGTATCACAAGCT
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_73_240_34/2
-CCGATCCGTCTACGTCCGAGAAAGATAATAAAGTAATAGTGGCGTATCGCAAGCTCGACGCTCAGCCGTAGGGCC
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_44_197_35/2
-GTATCGCAAGCTCGACGATCAGCCGTAGGGCCGCGCGCCAAATACGTAGCGTCCTACTGCCCTCCTCAGTCCGAT
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_128_252_36/2
-AAAGTCCCGTTCCCGATCCGTCTACGTCCGAGTAAGATAATAAAGTAATAGTGGCGTATCGCAAGCTCGACGCTC
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_145_300_37/2
-GACGCTACGTATTTGGCGCGGGGCCCTATGGCTGAGCGTCGAGCTTGCGATACGCCACTATTACTTTAGTATATT
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_85_275_38/2
-CTCGATCCCAGTCTCAAGTAGTAAAAGTCCCGTTGCCGATCCGTCTACGTCCGAGTAAGATAATAAAGTAAGAGT
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_48_207_39/2
-TAAGAGTGGCGTATCGCAAGATCGACGCTCAGCCGTAGGGCCGCGCGCCAAATACGTAGCGTCCTACTTCCCTCC
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_81_228_3a/2
-GGACTGAGAGCGTCAGATGCAGCGACTGGACTATTTAGGACGATCGGACTGAGGAGGGTAGTAGGACGCTACGTA
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_75_277_3b/2
-GCCTCGATCCCAGTCTCAGGTAGAAAAAGTCCCGTTGCCGATCCGTCTACGTCCGAGTAAGATAATAAAGTAATA
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_30_231_3c/2
-GCGACTGAGCTAGGACGTGCCACTACGGGGATGACGACTAGGACTACGGACGGACTTAGAGCGTCAGATGCAGCG
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_58_220_3d/2
-GGATGACGACTAGGACTACGGACGGACTTAGAGCGTCAGATGCAGCGACTGGACTATTTAGGACGATCGGACTGA
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_104_278_3e/2
-GACTGGACTATTTAGGACGATCGGACTGAGGAGGGCAGTAGGACGCTACGTTTTTGGCGCGCGGCCCTACGGCTG
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_44_193_3f/2
-CGCAAGCTCGACGCTCAGCCGTAGGGCCGCGCGCCAAATACGTAGCGTCCTACTGCTCTCCCCAGTCCGATCGTC
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_94_291_40/2
-GTCCCAAAAAGTCCGCCTCGATCCCAGTCTCAAGTAGAAAATGTCGCGTTGCCGATCCGTCTACGTCCCAGGAAG
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_91_256_41/2
-AGAAAAAGTCCCGTTGCCGATCCGTCTACGTCCGAGTAAGATAATAAAGTAATAGTGGCGTATCGCAAGCTCGAC
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_23_186_42/2
-GGCGCTTGTGACTGAGCTAGGACGTGCCACTACGGGGATGAAGACTAGGACTACGGACGGACTTAGAGCGTCAGA
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_92_266_43/2
-GGTCTCAAGTAGAAAAAGTCCCGTTGCCGCTCCGTCTACGTCCGAGTAAGATAAGAAAGTAATAGTGGCGTATCG
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_92_250_44/2
-AGTCCCGTACCCGATCCGTCTACGTCCGAGTAAGATAATAAAGTAATAGTGGCGTATCGCAAGCTCGACGCTCAG
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_106_253_45/2
-CTGGACTATTTAGGTCGATCGGACTGAGGAGGGCAGTAGGACGCTACGTATTTGGCGCGCGGCCCTACGGCTGAG
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_5_197_46/2
-GTATCGCAAGCTCGACGCTCAGCCGTAGGGCCGCCCGCCAAATACGTAGCGTCCTACTGCCCTCCTCCGTCCGAT
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_51_194_47/2
-ACTACGGGGATGACGACTAGGACTACGGACGGACTTAGAGCGTCAGATGCAGCGACTGGACTATTTAGGACGATC
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_125_280_48/2
-TCCGCCTCGCTCCCAGTCTCAAGTAGAAAAAGTCCCGTTGCCGATCCGTCTACGTCAGAGTAAGATAATAAAGTA
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_51_194_49/2
-CCGCAAGCTCGACGCTCAGCCGTAGGGCCGCGCGCCAAATACGTGGCGTCCTACTGCCCTCCTCAGTCCGAACGT
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_33_189_4a/2
-ACTGAGCTAGGACGTGCCACTACGGGGATTACCACTAGGGCTACGGACGGACTTAGAGCGTCAGATGCAGCGACT
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_78_276_4b/2
-CCTCGATCCTAGTCTCAAGTAGAAAAAGTCCCGTTGCCGATCCGTCTACGTCCGAGTAAGATAATAAAGTAATAG
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_63_229_4c/2
-ACGACTAGGACTACGGACGGACTTAGAGCGTCAGATGCAGGGACTGGACTATTTAGGACGATCGGACTGAGGAGG
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_81_245_4d/2
-GGACTTAGAGCGTCAGATGCAGCGACTGGACTATTTAGGACGATCGGACTGATGAGGGCAGTAGGACGCTACGTA
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_33_223_4e/2
-GAGTTAGATAATAAAGTAATAGTGGCTTATCGCAAGCTCGACGCTCAGCCGTAGGGCCGCGCGCCAAATACCTAG
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_172_294_4f/2
-CCCGTCCTAAAACGTCCGCCTCGATCCCAGTCTCAAGTAGAAAAAGTCCCGCTGCCGACCCGTCTACGTCCGAGT
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_88_257_50/2
-GAGCGTCAGATGCAGCGACTGGACTATTTAGGACGATCGGACTGAGGAGGGCAGTAGGACGCTACGTATTTGGCG
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_3_187_51/2
-CTCGACGCTCAGCCGTAGGGCCGCGCGCCAAATACGTAGCGTCCTACTGCCCTCCTCAGTCCGATCGTCCTAAAT
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_9_179_52/2
-CTGACTAGACTGGAGGCGCTCGCGACTGAGCTAGGACGTGCCACTACGGGGATGACGACTAGGACTACGGACGGA
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_85_268_53/2
-CCAGTCTCAAGTAGAAAAAGTCCCGTTGACGATCCGTCTACGTCCGAGTAAGATAATAAAGTAATAGTGGCGTAT
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_75_204_54/2
-TCGTGGCGTATCGCAAGCTCGACGCTCAGCCGTAGGGCCGCGCGCCAAATACGTAGCGTCCTACTGCCCTCCTCA
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_41_236_55/2
-TCCGTCTACGTCCGAGTAAGATAATAAAGTAATAGTGGCGTATCGCAAGCTCGACGCTCAGCCGTAGGGCCGCGC
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_56_183_56/2
-ACGCTCAGCCGTAGGGCCGCGCGCCAAATACGTAGCGTCCTACTGCCCTCCTCAGTCCGATCGTCCTAAATAGTC
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_87_250_57/2
-AGAGCGTCAGATGCAGAGACTGGACTATTTAGGACGATCGGACTGAGGAGTGCAGTAGGACGCTACGTATTTGGC
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_82_271_58/2
-ATCCCAGTCTCAAGTAGAAAAAGTCCCGTTGCCGATGCGTCTACGTCCGAGTAAGATAATAAAGTAATAGTGGCG
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_6_182_59/2
-CGCTCAGCCGTAGGGCCGCGCGCCAAATACGTAGCGTCCTACTGCCCTCCTCAGTCCGATCGTCCTAAATAGTCC
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_53_272_5a/2
-TACGGGGATGACGACTAGGACTACGGACGGACTTAGAGCGTCAGATGCAGCGACTGGACTATTTAGGACGATCGG
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_114_277_5b/2
-TTTAGGACGATCGGACTGAGGAGGGCAGTAGGACGCTACGTATTTGGCGCGCGGCCCTACGCCTGAGCGTCGAGC
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_39_219_5c/2
-AAGATAATAAAGTAATAGTGGCGTATCGCAAGCTGGACGCTCAGCCGTAGGGCCGCGCGCCAAATACGTAGCGTC
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_4_191_5d/2
-ACTATCTGACGAGACTGGAGGCGCTTGCGACTGAGCTAGGACGTACCATTACGCGGATGACGACTAGGACTACGG
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_73_259_5e/2
-AGTAGAAAAAGTCCCGTTGCCGATCCGTCTACGTCCGAGTAAGATAATACAGTAATAGTGGCGTATCGCAAGCTC
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_87_279_5f/2
-AGAGCGTCAGATGCAGCGACTGGACTATTTAGGACGATCGGACCGAGGAGGGCAGTAGGACGCTACGTATTTGGC
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_125_293_60/2
-CGGACTGAGGAGGGCAGTAGGACGCTATGTATTTGGCGCGCGGCCCTACGGCTGAGCTTCGAGGTTGCGATACGC
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_111_297_61/2
-CTATTTAGGACGATCGGACTGGGGAGGGCAGTAGGACGCTACGGATTTGGCGCGCGGCCCTACGGCTGAGCGTCG
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_22_173_62/2
-GTAGGGCCGCGCGCCAAATACGTAGCGTCCTACTGCCCTCCTCAGTCCGATCGTCCTAAATAGTCCAGTCGCTGC
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
-@test_mRNA_116_295_63/2
-TAGGACGATCGGACTGAGGAGGGCAGTAGGACGCTACGTATTTGGCGCGCGGCCCTACGGCTGAGCGTCGAGCTT
-+
-IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
--- /dev/null
+++ b/test-data/tophat_out1j.bed
@@ -0,0 +1,3 @@
+track name=junctions description="TopHat junctions"
+test_chromosome 180 400 JUNC00000001 24 + 180 400 255,0,0 2 70,50 0,170
+test_chromosome 349 550 JUNC00000002 22 + 349 550 255,0,0 2 51,50 0,151
--- a/test-data/tophat_out1.bed
+++ /dev/null
@@ -1,3 +0,0 @@
-track name=junctions description="TopHat junctions"
-test_chromosome 180 402 JUNC00000001 46 + 180 402 255,0,0 2 70,52 0,170
-test_chromosome 349 550 JUNC00000002 38 + 349 550 255,0,0 2 51,50 0,151
--- /dev/null
+++ b/test-data/tophat_out2j.bed
@@ -0,0 +1,3 @@
+track name=junctions description="TopHat junctions"
+test_chromosome 180 402 JUNC00000001 46 + 180 402 255,0,0 2 70,52 0,170
+test_chromosome 349 550 JUNC00000002 38 + 349 550 255,0,0 2 51,50 0,151
--- /dev/null
+++ b/test-data/tophat_out3j.bed
@@ -0,0 +1,3 @@
+track name=junctions description="TopHat junctions"
+test_chromosome 180 400 JUNC00000001 24 + 180 400 255,0,0 2 70,50 0,170
+test_chromosome 349 550 JUNC00000002 22 + 349 550 255,0,0 2 51,50 0,151
--- /dev/null
+++ b/test-data/tophat_in3.fastqsanger
@@ -0,0 +1,400 @@
+@test_mRNA_150_290_0/2
+TACGTATTTGTCGCGCGGCCCTACGGCTGAGCGTCGAGCTTGCGATCCGCCACTATTACTTTATTATCTTACTCG
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_8_197_1/2
+GTATCGCAAGCTCGACGCTCAGCCGTAGGGCCGCGCGCCAAATACGTAGCGTCCTACTGCCCTCCTCAGTCCGAT
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_82_255_2/2
+GACTTAGAGCGTCAGATGCAGCGACTGGACTTTTTAGGACGATCGGACTGAGGAGGGCAGTAGGACGCTACGTAT
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_96_238_3/2
+GATGCAGCGACTGGACTATTTAGGACGATCGGACGGAGGAGGGCAGTAGGACGCTACGTATTTGGCGCGCGGACC
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_72_258_4/2
+ACTACGGACGGACTTAGAGCGTCAGATGCAGCAACTGGACTATTTAGGACGATCGGACTGAGGAGGGCAGTAGGA
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_107_286_5/2
+TGGACTATTTAGGACGATCGGACTGAGGAGGGCAGTAGGACGCTACGCATTTGGCGCGCGGCCCTACGGCTGAGC
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_122_299_6/2
+GATCGGACTGAGGAGGGCAGTAGGACGCTACGTATTTGGCGCGCGGCCCTACGGCTGAGCGTCGAGCTTGCGATA
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_58_234_7/2
+GGATGACGCCTAGGACTACGGACGGACTTAGAGCGTCAGATGCAGCGACTGGACTATTTAGGACGATCGGACTGA
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_57_231_8/2
+CTACGTCCGAGTAAGATAATAAAGTAATAGTGGCGTATCGCAAGCTCGACGCTCAGCCCTAGGGCCGCGCGCCAA
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_8_155_9/2
+TGTGACTAGACTGGAGGCGCTTGCGACTGAGCTAGGACGTGCCACTACGGGGATGACGACTAGGACTACGGACGG
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_51_237_a/2
+ATCCGTCTACGTCCGAGTAAGATAATAAAGTAATAGTGGCGTATCGCAAGCTCGACGCTCAGCCGTAGGGCCGCG
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_89_230_b/2
+AGCGTCAGGTGCAGCGACTGGACTATTTAGGACGATCGGACTGAGGAGGGCAGTAGGACGCTACGTATTTGGCGC
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_105_276_c/2
+ACTGGACTATTTAGGACGATCGGACTGAGGAAGGCAGTAGGACGCTACGTATTTGGCGCGCGGCCCTACGGCTGA
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_111_268_d/2
+CTATTTAAGACGTTCCGCCTGAGGAGGGCAGTAGGACGCTACGTATTTGGCGCGCGGCCCTACGGCTGAGCGTCG
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_151_286_e/2
+AAAAAGTCCGCCTCGATCCCAGTCTCAAGTAGATAAAGTCCCGTTGCCGATCCGTCTACGTCCGAGTAAGATAAT
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_118_297_f/2
+GGACGATCGGACTGAGGAGGGCAGTAGGACGCTACGTATTTGGCGCGCGGCCCTACGGCTGAGCGTCGAGCTTGC
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_16_194_10/2
+GACTGGATGCGCTTGCGACTGAGCTAGGACGTGCCACTACGGGGATGACGACTCGGACTACGGACGGACTTAAAG
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_28_188_11/2
+GCTCGACGCTCAGCCGTAGGGCCTCGCGCCAAATACGAAGCGTCCTACTGCCTTCCTCAGTCCGATCGTCCTAAA
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_36_218_12/2
+AGATAATAAAGTAATAGTGGCGTATCGCAAGCTCGACGCTCAGCCGTAGGGCCGCGCGCCAAATACGTAGCGTCC
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_105_266_13/2
+ACTGGACTATTTAGGACGATCGGACTGAGGAGGGCAGTAGGACGCTACGTATTTGGCGCGCGGCCCTACGGCTGA
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_51_248_14/2
+TCCCGTTGCCGTTCCGTCTACGTCCGAGTAAGATAATAAAGTAATAGTGGCGTATCGCAAGCTCGACGCTCAGCC
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_89_245_15/2
+CGTTGCCGATCCGTCTACGTCCGAGTAAGATAATAGAGAAATAGTGGCGTATCGCAAGCTCGACGCTCAGCCGTA
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_58_218_16/2
+GGATGACGACTAGGACTACGGACGGACTTAGAACGTCAGATGCAGCGACTGGACTATTTAGGACGATCGGACTGA
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_46_195_17/2
+GTGCCACTACGGGGATGACGACTAGGACTACGGACGGACTTAGAGCGTCAGATGCAGCGACTGGACTATTTAGGA
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_126_282_18/2
+GGACTGAGGAGGGCAGTAGGACGCTACGTATTTGGCGCGCGGCCCTACGGCTGAGCGTCGAGCTTGCGATACGCC
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_53_212_19/2
+TAAAGAAATAGTGGCGTATCGCAAGCTCGACGCTCAGCCGTAGGGCCGCGCGCCAAATACGTAGCGTCCTACTGC
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_11_190_1a/2
+AAGCTCGACGCTCAGCCGTAGGGCCACGCGCCAAATACGTAGCGTCCTACTGCCCTCCTCAGTCCCATCGACCTA
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_52_261_1b/2
+CAAGTAGAAAAAGTCCCGTTGCCGATCCTTCTACGTCCGAGTAAGATAATTAAGTAATAGTGGCGTATCGCAAGC
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_104_274_1c/2
+GAGTGTACTATTTAGGACGATCGGACTGAGGAGGGCAGTAGGACGCTACGTATGTGCCGCGCGGCCCTACGGCTG
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_151_297_1d/2
+AGTCCCGTCCTAAAATGTCCGCCTCGATCCCAGTCTCAAGTAGAAAAAGTCCCGTTGCCGATCCGTCTACGTCCG
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_44_225_1e/2
+ACGTGCCACTACGGGGATGACGACTAGGACTACGGACGGACTTAGAGCGTCGGGTGCAGCGACTGGACTATTTAG
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_28_206_1f/2
+AATAGTGGCTTATCGCAAGCTCGACTCTCAGCCGTAGGGCCGCGCGCCAAATACGTGGCGTCCTACTGCCCTCCT
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_48_249_20/2
+GCCACTACGGGGATGACGACTAGGACGACGGACGGACTTAGAGCGTCAGATGCAGCGACTGGACTATTTAGGACG
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_75_235_21/2
+CCGTCTACGTCCGAGTAAGATAATAAAGTAATAGTGGCGTATCGCAAGCTCAACGCTCAGCCGTAGGGCCGTGCG
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_110_267_22/2
+ACTAGTTAGGGCGATCGGACTGAGGAGGGCAGTAGGACGCTACGTAGTTGGCGCGCGGCCCTACGACTGAGCGTC
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_69_229_23/2
+AGGACTACGGACGGACTTATAGGGTCAGATGCAGCGACTGGACTATTTAGGACGATCGGACTGAGGAGGGCAGTA
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_21_208_24/2
+GAGGCGCTTGCGACTGAGCTAGGACGTGCCACTACGGGGATGACGACTAGGACTACGGACGGACTTAGAGCGTCA
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_42_209_25/2
+AGTAATAGTGGCGTATCGCAAGCTCGACGCTCAGCCGTAGGGCCGCGCGCCAAATACGTAGCGTCCTACTGCCCT
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_97_275_26/2
+CTCGATCCCAGTCTCAAGTAGAAAGAGTCCCGTTTCCGATCCGTCTACGTCCGACTAAGATAATAAAGTAATAGT
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_36_146_27/2
+GCGCTAGGACGTGCCACTACGGGGATGACGACTAGGACTACAGACGGACTTAGAGCGTCAGATGCAGCGACTGGA
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_110_271_28/2
+ATCCCAGTCTCAAGTAGAAAAAGCCCCGTTGCCGATCCGTCTTCGTCCGAGTAAGATAATAAAGTAATAGTGGCG
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_38_199_29/2
+GCGTATCGCAAGCTCGACGCTCAGCCGTAGGGCCGCGCGCCAAATACGTAGCGTCCTACTGCCCTCCTCAGTCCG
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_103_284_2a/2
+CGACTGGACTATTTAGGACGATCGGACTGAGGAGGGCAGTAGGACGCTACGTATTTGGCGCGCGGCCCTACGGCT
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_116_271_2b/2
+TAGGACGATCGGACTGAGGAGGGCAGTAGGACGCTACGTATTTGGCGCGCGGCCCTACGGCTGAGCGTCGAGCTT
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_77_256_2c/2
+AGAAAAAGTCCCGTTGCCGATCCGTCTACGTCCGAGTAAGATAATAAAGTAATAGTGGCGTATCGCAAGCTCGAC
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_50_224_2d/2
+CACTACGAGGATGACGTCTAGGACTACGGACGGACTTAGAGCGTCAGACGCAGCGACTGGACTATTTAGGACGAT
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_65_238_2e/2
+GATCCGTCTACGTCCGAGTAAGATAATAAAGTAATAGTGGCGTATCGCAAGCTCGACGCGCAGCCGTAGGGCCGC
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_46_232_2f/2
+TCTACGTCCGAGTAAGATAATAAAGTAATAGTGGCGTATCGCAAGCTCGACGCTCAGCCGTAGGGCCGCGCGCCA
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_26_189_30/2
+GCTTGCGACTGAGCTAGGACGTGCCACTACGGGGATGACGACTAGGACTACGGACGGACTTAGAGCGTCAGATGC
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_79_256_31/2
+ACGGACTTAGAGCGTCAGATGCAGCGACTGGACTATTTAGGACGATCGGACTGAGGAGGGCAGTAGGACGCTACG
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_89_267_32/2
+AGCGTCAGATGCAGCGACTGGACTATTTAGGACGATCGGAGTGAGGAGGGCAGTAGGACGCTACGTATTTGGCGG
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_131_260_33/2
+AAGTAAAAAAAGTCCCGTGGCCGATCCGTTTACGTCCGAGTAAGATAATAAAGTAATAGTGGCGTATCACAAGCT
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_73_240_34/2
+CCGATCCGTCTACGTCCGAGAAAGATAATAAAGTAATAGTGGCGTATCGCAAGCTCGACGCTCAGCCGTAGGGCC
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_44_197_35/2
+GTATCGCAAGCTCGACGATCAGCCGTAGGGCCGCGCGCCAAATACGTAGCGTCCTACTGCCCTCCTCAGTCCGAT
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_128_252_36/2
+AAAGTCCCGTTCCCGATCCGTCTACGTCCGAGTAAGATAATAAAGTAATAGTGGCGTATCGCAAGCTCGACGCTC
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_145_300_37/2
+GACGCTACGTATTTGGCGCGGGGCCCTATGGCTGAGCGTCGAGCTTGCGATACGCCACTATTACTTTAGTATATT
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_85_275_38/2
+CTCGATCCCAGTCTCAAGTAGTAAAAGTCCCGTTGCCGATCCGTCTACGTCCGAGTAAGATAATAAAGTAAGAGT
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_48_207_39/2
+TAAGAGTGGCGTATCGCAAGATCGACGCTCAGCCGTAGGGCCGCGCGCCAAATACGTAGCGTCCTACTTCCCTCC
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_81_228_3a/2
+GGACTGAGAGCGTCAGATGCAGCGACTGGACTATTTAGGACGATCGGACTGAGGAGGGTAGTAGGACGCTACGTA
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_75_277_3b/2
+GCCTCGATCCCAGTCTCAGGTAGAAAAAGTCCCGTTGCCGATCCGTCTACGTCCGAGTAAGATAATAAAGTAATA
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_30_231_3c/2
+GCGACTGAGCTAGGACGTGCCACTACGGGGATGACGACTAGGACTACGGACGGACTTAGAGCGTCAGATGCAGCG
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_58_220_3d/2
+GGATGACGACTAGGACTACGGACGGACTTAGAGCGTCAGATGCAGCGACTGGACTATTTAGGACGATCGGACTGA
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_104_278_3e/2
+GACTGGACTATTTAGGACGATCGGACTGAGGAGGGCAGTAGGACGCTACGTTTTTGGCGCGCGGCCCTACGGCTG
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_44_193_3f/2
+CGCAAGCTCGACGCTCAGCCGTAGGGCCGCGCGCCAAATACGTAGCGTCCTACTGCTCTCCCCAGTCCGATCGTC
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_94_291_40/2
+GTCCCAAAAAGTCCGCCTCGATCCCAGTCTCAAGTAGAAAATGTCGCGTTGCCGATCCGTCTACGTCCCAGGAAG
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_91_256_41/2
+AGAAAAAGTCCCGTTGCCGATCCGTCTACGTCCGAGTAAGATAATAAAGTAATAGTGGCGTATCGCAAGCTCGAC
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_23_186_42/2
+GGCGCTTGTGACTGAGCTAGGACGTGCCACTACGGGGATGAAGACTAGGACTACGGACGGACTTAGAGCGTCAGA
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_92_266_43/2
+GGTCTCAAGTAGAAAAAGTCCCGTTGCCGCTCCGTCTACGTCCGAGTAAGATAAGAAAGTAATAGTGGCGTATCG
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_92_250_44/2
+AGTCCCGTACCCGATCCGTCTACGTCCGAGTAAGATAATAAAGTAATAGTGGCGTATCGCAAGCTCGACGCTCAG
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_106_253_45/2
+CTGGACTATTTAGGTCGATCGGACTGAGGAGGGCAGTAGGACGCTACGTATTTGGCGCGCGGCCCTACGGCTGAG
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_5_197_46/2
+GTATCGCAAGCTCGACGCTCAGCCGTAGGGCCGCCCGCCAAATACGTAGCGTCCTACTGCCCTCCTCCGTCCGAT
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_51_194_47/2
+ACTACGGGGATGACGACTAGGACTACGGACGGACTTAGAGCGTCAGATGCAGCGACTGGACTATTTAGGACGATC
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_125_280_48/2
+TCCGCCTCGCTCCCAGTCTCAAGTAGAAAAAGTCCCGTTGCCGATCCGTCTACGTCAGAGTAAGATAATAAAGTA
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_51_194_49/2
+CCGCAAGCTCGACGCTCAGCCGTAGGGCCGCGCGCCAAATACGTGGCGTCCTACTGCCCTCCTCAGTCCGAACGT
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_33_189_4a/2
+ACTGAGCTAGGACGTGCCACTACGGGGATTACCACTAGGGCTACGGACGGACTTAGAGCGTCAGATGCAGCGACT
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_78_276_4b/2
+CCTCGATCCTAGTCTCAAGTAGAAAAAGTCCCGTTGCCGATCCGTCTACGTCCGAGTAAGATAATAAAGTAATAG
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_63_229_4c/2
+ACGACTAGGACTACGGACGGACTTAGAGCGTCAGATGCAGGGACTGGACTATTTAGGACGATCGGACTGAGGAGG
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_81_245_4d/2
+GGACTTAGAGCGTCAGATGCAGCGACTGGACTATTTAGGACGATCGGACTGATGAGGGCAGTAGGACGCTACGTA
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_33_223_4e/2
+GAGTTAGATAATAAAGTAATAGTGGCTTATCGCAAGCTCGACGCTCAGCCGTAGGGCCGCGCGCCAAATACCTAG
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_172_294_4f/2
+CCCGTCCTAAAACGTCCGCCTCGATCCCAGTCTCAAGTAGAAAAAGTCCCGCTGCCGACCCGTCTACGTCCGAGT
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_88_257_50/2
+GAGCGTCAGATGCAGCGACTGGACTATTTAGGACGATCGGACTGAGGAGGGCAGTAGGACGCTACGTATTTGGCG
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_3_187_51/2
+CTCGACGCTCAGCCGTAGGGCCGCGCGCCAAATACGTAGCGTCCTACTGCCCTCCTCAGTCCGATCGTCCTAAAT
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_9_179_52/2
+CTGACTAGACTGGAGGCGCTCGCGACTGAGCTAGGACGTGCCACTACGGGGATGACGACTAGGACTACGGACGGA
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_85_268_53/2
+CCAGTCTCAAGTAGAAAAAGTCCCGTTGACGATCCGTCTACGTCCGAGTAAGATAATAAAGTAATAGTGGCGTAT
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_75_204_54/2
+TCGTGGCGTATCGCAAGCTCGACGCTCAGCCGTAGGGCCGCGCGCCAAATACGTAGCGTCCTACTGCCCTCCTCA
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_41_236_55/2
+TCCGTCTACGTCCGAGTAAGATAATAAAGTAATAGTGGCGTATCGCAAGCTCGACGCTCAGCCGTAGGGCCGCGC
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_56_183_56/2
+ACGCTCAGCCGTAGGGCCGCGCGCCAAATACGTAGCGTCCTACTGCCCTCCTCAGTCCGATCGTCCTAAATAGTC
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_87_250_57/2
+AGAGCGTCAGATGCAGAGACTGGACTATTTAGGACGATCGGACTGAGGAGTGCAGTAGGACGCTACGTATTTGGC
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_82_271_58/2
+ATCCCAGTCTCAAGTAGAAAAAGTCCCGTTGCCGATGCGTCTACGTCCGAGTAAGATAATAAAGTAATAGTGGCG
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_6_182_59/2
+CGCTCAGCCGTAGGGCCGCGCGCCAAATACGTAGCGTCCTACTGCCCTCCTCAGTCCGATCGTCCTAAATAGTCC
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_53_272_5a/2
+TACGGGGATGACGACTAGGACTACGGACGGACTTAGAGCGTCAGATGCAGCGACTGGACTATTTAGGACGATCGG
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_114_277_5b/2
+TTTAGGACGATCGGACTGAGGAGGGCAGTAGGACGCTACGTATTTGGCGCGCGGCCCTACGCCTGAGCGTCGAGC
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_39_219_5c/2
+AAGATAATAAAGTAATAGTGGCGTATCGCAAGCTGGACGCTCAGCCGTAGGGCCGCGCGCCAAATACGTAGCGTC
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_4_191_5d/2
+ACTATCTGACGAGACTGGAGGCGCTTGCGACTGAGCTAGGACGTACCATTACGCGGATGACGACTAGGACTACGG
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_73_259_5e/2
+AGTAGAAAAAGTCCCGTTGCCGATCCGTCTACGTCCGAGTAAGATAATACAGTAATAGTGGCGTATCGCAAGCTC
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_87_279_5f/2
+AGAGCGTCAGATGCAGCGACTGGACTATTTAGGACGATCGGACCGAGGAGGGCAGTAGGACGCTACGTATTTGGC
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_125_293_60/2
+CGGACTGAGGAGGGCAGTAGGACGCTATGTATTTGGCGCGCGGCCCTACGGCTGAGCTTCGAGGTTGCGATACGC
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_111_297_61/2
+CTATTTAGGACGATCGGACTGGGGAGGGCAGTAGGACGCTACGGATTTGGCGCGCGGCCCTACGGCTGAGCGTCG
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_22_173_62/2
+GTAGGGCCGCGCGCCAAATACGTAGCGTCCTACTGCCCTCCTCAGTCCGATCGTCCTAAATAGTCCAGTCGCTGC
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
+@test_mRNA_116_295_63/2
+TAGGACGATCGGACTGAGGAGGGCAGTAGGACGCTACGTATTTGGCGCGCGGCCCTACGGCTGAGCGTCGAGCTT
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
--- a/tools/ngs_rna/tophat_wrapper.xml
+++ b/tools/ngs_rna/tophat_wrapper.xml
@@ -1,4 +1,4 @@
-<tool id="tophat" name="Tophat" version="1.1.2">
+<tool id="tophat" name="Tophat" version="1.2.0"><description>Find splice junctions using RNA-seq data</description><requirements><requirement type="package">tophat</requirement>
@@ -7,46 +7,41 @@
tophat_wrapper.py
## Change this to accommodate the number of threads you have available.
--num-threads="4"
-
+
## Provide outputs.
--junctions-output=$junctions
--hits-output=$accepted_hits
-
+
## Handle reference file.
#if $refGenomeSource.genomeSource == "history":
--own-file=$refGenomeSource.ownFile
- --indexes-path="None"
#else:
- --own-file="None"
- --indexes-path=$refGenomeSource.index
+ --indexes-path="${ filter( lambda x: str( x[0] ) == str( $refGenomeSource.index ), $__app__.tool_data_tables[ 'tophat_indexes' ].get_fields() )[0][-1] }"
#end if
-
+
## Are reads single-end or paired?
--single-paired=$singlePaired.sPaired
-
+
## First input file always required.
--input1=$singlePaired.input1
-
+
## Set parms based on whether reads are single-end or paired.
#if $singlePaired.sPaired == "single":
- --input2="None"
- -r "None"
- --settings=$singlePaired.sParams.sSettingsType
- #if $singlePaired.sParams.sSettingsType == "full":
- --mate-std-dev="None"
- -a $singlePaired.sParams.anchor_length
- -m $singlePaired.sParams.splice_mismatches
- -i $singlePaired.sParams.min_intron_length
- -I $singlePaired.sParams.max_intron_length
- -F $singlePaired.sParams.junction_filter
- -g $singlePaired.sParams.max_multihits
- --min-segment-intron $singlePaired.sParams.min_segment_intron
- --max-segment-intron $singlePaired.sParams.max_segment_intron
- --seg-mismatches=$singlePaired.sParams.seg_mismatches
- --seg-length=$singlePaired.sParams.seg_length
-
- ## Supplying junctions parameters.
- #if $singlePaired.sParams.own_junctions.use_junctions == "Yes":
+ --settings=$singlePaired.sParams.sSettingsType
+ #if $singlePaired.sParams.sSettingsType == "full":
+ -a $singlePaired.sParams.anchor_length
+ -m $singlePaired.sParams.splice_mismatches
+ -i $singlePaired.sParams.min_intron_length
+ -I $singlePaired.sParams.max_intron_length
+ -F $singlePaired.sParams.junction_filter
+ -g $singlePaired.sParams.max_multihits
+ --min-segment-intron $singlePaired.sParams.min_segment_intron
+ --max-segment-intron $singlePaired.sParams.max_segment_intron
+ --seg-mismatches=$singlePaired.sParams.seg_mismatches
+ --seg-length=$singlePaired.sParams.seg_length
+
+ ## Supplying junctions parameters.
+ #if $singlePaired.sParams.own_junctions.use_junctions == "Yes":
#if $singlePaired.sParams.own_junctions.gene_model_ann.use_annotations == "Yes":
-G $singlePaired.sParams.own_junctions.gene_model_ann.gene_annotation_model
#end if
@@ -57,47 +52,47 @@
#if str($singlePaired.sParams.own_junctions.no_novel_juncs) == "Yes":
--no-novel-juncs
#end if
- #end if
-
- #if $singlePaired.sParams.closure_search.use_search == "Yes":
+ #end if
+
+ #if $singlePaired.sParams.closure_search.use_search == "Yes":
--closure-search
--min-closure-exon $singlePaired.sParams.closure_search.min_closure_exon
--min-closure-intron $singlePaired.sParams.closure_search.min_closure_intron
--max-closure-intron $singlePaired.sParams.closure_search.max_closure_intron
- #else:
+ #else:
--no-closure-search
- #end if
- #if $singlePaired.sParams.coverage_search.use_search == "Yes":
+ #end if
+ #if $singlePaired.sParams.coverage_search.use_search == "Yes":
--coverage-search
--min-coverage-intron $singlePaired.sParams.coverage_search.min_coverage_intron
--max-coverage-intron $singlePaired.sParams.coverage_search.max_coverage_intron
- #else:
+ #else:
--no-coverage-search
- #end if
- ## TODO: No idea why the type conversion is necessary, but it seems to be.
- #if str($singlePaired.sParams.microexon_search) == "Yes":
+ #end if
+ ## TODO: No idea why the type conversion is necessary, but it seems to be.
+ #if str($singlePaired.sParams.microexon_search) == "Yes":
--microexon-search
- #end if
- #end if
- #else:
- --input2=$singlePaired.input2
- -r $singlePaired.mate_inner_distance
- --settings=$singlePaired.pParams.pSettingsType
- #if $singlePaired.pParams.pSettingsType == "full":
- --mate-std-dev=$singlePaired.pParams.mate_std_dev
- -a $singlePaired.pParams.anchor_length
- -m $singlePaired.pParams.splice_mismatches
- -i $singlePaired.pParams.min_intron_length
- -I $singlePaired.pParams.max_intron_length
- -F $singlePaired.pParams.junction_filter
- -g $singlePaired.pParams.max_multihits
- --min-segment-intron $singlePaired.pParams.min_segment_intron
- --max-segment-intron $singlePaired.pParams.max_segment_intron
- --seg-mismatches=$singlePaired.pParams.seg_mismatches
- --seg-length=$singlePaired.pParams.seg_length
-
- ## Supplying junctions parameters.
- #if $singlePaired.pParams.own_junctions.use_junctions == "Yes":
+ #end if
+ #end if
+ #else:
+ --input2=$singlePaired.input2
+ -r $singlePaired.mate_inner_distance
+ --settings=$singlePaired.pParams.pSettingsType
+ #if $singlePaired.pParams.pSettingsType == "full":
+ --mate-std-dev=$singlePaired.pParams.mate_std_dev
+ -a $singlePaired.pParams.anchor_length
+ -m $singlePaired.pParams.splice_mismatches
+ -i $singlePaired.pParams.min_intron_length
+ -I $singlePaired.pParams.max_intron_length
+ -F $singlePaired.pParams.junction_filter
+ -g $singlePaired.pParams.max_multihits
+ --min-segment-intron $singlePaired.pParams.min_segment_intron
+ --max-segment-intron $singlePaired.pParams.max_segment_intron
+ --seg-mismatches=$singlePaired.pParams.seg_mismatches
+ --seg-length=$singlePaired.pParams.seg_length
+
+ ## Supplying junctions parameters.
+ #if $singlePaired.pParams.own_junctions.use_junctions == "Yes":
#if $singlePaired.pParams.own_junctions.gene_model_ann.use_annotations == "Yes":
-G $singlePaired.pParams.own_junctions.gene_model_ann.gene_annotation_model
#end if
@@ -108,29 +103,29 @@
#if str($singlePaired.pParams.own_junctions.no_novel_juncs) == "Yes":
--no-novel-juncs
#end if
- #end if
-
- #if $singlePaired.pParams.closure_search.use_search == "Yes":
+ #end if
+
+ #if $singlePaired.pParams.closure_search.use_search == "Yes":
--closure-search
--min-closure-exon $singlePaired.pParams.closure_search.min_closure_exon
--min-closure-intron $singlePaired.pParams.closure_search.min_closure_intron
--max-closure-intron $singlePaired.pParams.closure_search.max_closure_intron
- #else:
+ #else:
--no-closure-search
- #end if
- #if $singlePaired.pParams.coverage_search.use_search == "Yes":
+ #end if
+ #if $singlePaired.pParams.coverage_search.use_search == "Yes":
--coverage-search
--min-coverage-intron $singlePaired.pParams.coverage_search.min_coverage_intron
--max-coverage-intron $singlePaired.pParams.coverage_search.max_coverage_intron
- #else:
+ #else:
--no-coverage-search
- #end if
- ## TODO: No idea why the type conversion is necessary, but it seems to be.
- #if str ($singlePaired.pParams.microexon_search) == "Yes":
+ #end if
+ ## TODO: No idea why the type conversion is necessary, but it seems to be.
+ #if str ($singlePaired.pParams.microexon_search) == "Yes":
--microexon-search
#end if
- #end if
- #end if
+ #end if
+ #end if
</command><inputs><conditional name="refGenomeSource">
@@ -140,10 +135,7 @@
</param><when value="indexed"><param name="index" type="select" label="Select a reference genome" help="If your genome of interest is not listed, contact the Galaxy team">
- <options from_file="bowtie_indices.loc">
- <column name="value" index="1" />
- <column name="name" index="0" />
- </options>
+ <options from_data_table="tophat_indexes" /></param></when><when value="history">
@@ -186,7 +178,7 @@
<conditional name="gene_model_ann"><param name="use_annotations" type="select" label="Use Gene Annotation Model"><option value="No">No</option>
- <option value="Yes">Yes</option>
+ <option value="Yes">Yes</option></param><when value="No" /><when value="Yes">
@@ -196,7 +188,7 @@
<conditional name="raw_juncs"><param name="use_juncs" type="select" label="Use Raw Junctions"><option value="No">No</option>
- <option value="Yes">Yes</option>
+ <option value="Yes">Yes</option></param><when value="No" /><when value="Yes">
@@ -242,7 +234,7 @@
</param></when><!-- full --></conditional><!-- sParams -->
- </when>
+ </when><!-- single --><when value="paired"><param format="fastqsanger" name="input1" type="data" label="RNA-Seq FASTQ file" help="Must have Sanger-scaled quality values with ASCII offset 33"/><param format="fastqsanger" name="input2" type="data" label="RNA-Seq FASTQ file" help="Must have Sanger-scaled quality values with ASCII offset 33"/>
@@ -276,7 +268,7 @@
<conditional name="gene_model_ann"><param name="use_annotations" type="select" label="Use Gene Annotation Model"><option value="No">No</option>
- <option value="Yes">Yes</option>
+ <option value="Yes">Yes</option></param><when value="No" /><when value="Yes">
@@ -286,7 +278,7 @@
<conditional name="raw_juncs"><param name="use_juncs" type="select" label="Use Raw Junctions"><option value="No">No</option>
- <option value="Yes">Yes</option>
+ <option value="Yes">Yes</option></param><when value="No" /><when value="Yes">
@@ -325,14 +317,14 @@
<param name="max_coverage_intron" type="integer" value="20000" label="Maximum intron length that may be found during coverage search" /></when><when value="No" />
- </conditional>
+ </conditional><param name="microexon_search" type="select" label="Use Microexon Search" help="With this option, the pipeline will attempt to find alignments incident to microexons. Works only for reads 50bp or longer."><option value="No">No</option><option value="Yes">Yes</option></param></when><!-- full --></conditional><!-- pParams -->
- </when>
+ </when><!-- paired --></conditional></inputs>
@@ -342,38 +334,46 @@
</outputs><tests>
-<!-- <test>
- <param name="genomeSource" value="indexed"/>
- <param name="index" value="equCab2chrM"/>
- <param name="sPaired" value="single"/>
- <param name="input1" ftype="fastqsanger" value="tophat_in1.fq"/>
- <param name="sSettingsType" value="preSet"/>
---><!--
- Can't test this right now because first lines of file are run-specific.
- <output name="accepted_hits" file="tophat_out1.sam"/>
+ <!-- Test single-end reads with pre-built index and preset parameters -->
+ <test>
+ <!-- TopHat commands:
+ tophat -o tmp_dir -p 1 /afs/bx.psu.edu/depot/data/genome/test/tophat/tophat_in1 test-data/tophat_in2.fastqsanger
-->
-<!-- <output name="coverage" file="tophat_out2.wig"/>
- <output name="junctions" file="tophat_out3.bed"/>
+ <param name="genomeSource" value="indexed" />
+ <param name="index" value="tophat_test" />
+ <param name="sPaired" value="single" />
+ <param name="input1" ftype="fastqsanger" value="tophat_in2.fastqsanger" />
+ <param name="sSettingsType" value="preSet" />
+ <output name="junctions" file="tophat_out1j.bed" ftype="bed" />
+ <output name="accepted_hits" file="tophat_out1h.bam" compare="sim_size" ftype="bam" /></test>
---><!-- Test using test data: paired-end reads, index from history. --><test>
+ <!-- TopHat commands:
+ bowtie-build -f test-data/tophat_in4.fasta tophat_in4
+ tophat -o tmp_dir -p 1 -r 20 tophat_in4 test-data/tophat_in2.fastqsanger test-data/tophat_in3.fastqsanger
+ -->
+ <param name="genomeSource" value="history" />
+ <param name="ownFile" ftype="fasta" value="tophat_in1.fasta" />
+ <param name="sPaired" value="paired" />
+ <param name="input1" ftype="fastqsanger" value="tophat_in2.fastqsanger" />
+ <param name="input2" ftype="fastqsanger" value="tophat_in3.fastqsanger" />
+ <param name="mate_inner_distance" value="20" />
+ <param name="pSettingsType" value="preSet" />
+ <output name="junctions" file="tophat_out2j.bed" ftype="bed" />
+ <output name="accepted_hits" file="tophat_out2h.bam" compare="sim_size" ftype="bam" />
+ </test>
+ <!-- Test single-end reads with user-supplied reference fasta and full parameters -->
+ <test>
+ <!-- Tophat commands:
+ bowtie-build -f test-data/tophat_in1.fasta tophat_in1
+ tophat -o tmp_dir -p 1 -a 8 -m 0 -i 70 -I 500000 -F 0.15 -g 40 +coverage-search +min-coverage-intron 50 +max-coverage-intro 20000 +segment-mismatches 2 +segment-length 25 +closure-search +min-closure-exon 50 +min-closure-intron 50 +max-closure-intro 5000 +microexon-search tophat_in1 test-data/tophat_in2.fastqsanger
+ Replace the + with double-dash
+ --><param name="genomeSource" value="history"/>
- <param name="ownFile" ftype="fasta" value="tophat_in3.fa"/>
- <param name="sPaired" value="paired"/>
- <param name="input1" ftype="fastqsanger" value="tophat_in1.fq"/>
- <param name="input2" ftype="fastqsanger" value="tophat_in2.fq"/>
- <param name="mate_inner_distance" value="20"/>
- <param name="pSettingsType" value="preSet"/>
- <output name="junctions" file="tophat_out1.bed"/>
- <!-- Bam files always differ (due to magic number?), so can't test this right now. -->
- <output name="accepted_hits" file="tophat_out2.bam" lines_diff="100000"/>
- </test>
-<!-- <test>
- <param name="genomeSource" value="history"/>
- <param name="ownFile" value="phiX.fasta"/>
+ <param name="ownFile" value="tophat_in1.fasta"/><param name="sPaired" value="single"/>
- <param name="input1" ftype="fastqsanger" value="tophat_in1.fq"/>
+ <param name="input1" ftype="fastqsanger" value="tophat_in2.fastqsanger"/><param name="sSettingsType" value="full"/><param name="anchor_length" value="8"/><param name="splice_mismatches" value="0"/>
@@ -386,19 +386,32 @@
<param name="max_segment_intron" value="500000" /><param name="seg_mismatches" value="2"/><param name="seg_length" value="25"/>
---><!--
- Can't test this right now because first lines of file are run-specific.
- <output name="accepted_hits" file="tophat_out1.sam"/>
+ <param name="use_junctions" value="Yes" />
+ <param name="use_annotations" value="No" />
+ <param name="use_juncs" value="No" />
+ <param name="no_novel_juncs" value="No" />
+ <param name="use_search" value="Yes" />
+ <param name="min_closure_exon" value="50" />
+ <param name="min_closure_intron" value="50" />
+ <param name="max_closure_intron" value="5000" />
+ <param name="use_search" value="Yes" />
+ <param name="min_coverage_intron" value="50" />
+ <param name="max_coverage_intron" value="20000" />
+ <param name="microexon_search" value="Yes" />
+ <output name="junctions" file="tophat_out3j.bed" ftype="bed" />
+ <output name="accepted_hits" file="tophat_out3h.bam" compare="sim_size" ftype="bam" />
+ </test>
+ <!-- Test paired-end reads with user-supplied reference fasta and full parameters -->
+ <test>
+ <!-- TopHat commands:
+ tophat -o tmp_dir -r 20 -p 1 -a 8 -m 0 -i 70 -I 500000 -F 0.15 -g 40 +coverage-search +min-coverage-intron 50 +max-coverage-intro 20000 +segment-mismatches 2 +segment-length 25 +closure-search +min-closure-exon 50 +min-closure-intron 50 +max-closure-intron 5000 +microexon-search /afs/bx.psu.edu/depot/data/genome/test/tophat/tophat_in1 test-data/tophat_in2.fastqsanger test-data/tophat_in3.fastqsanger
+ Replace the + with double-dash
-->
-<!-- <output name="coverage" file="tophat_out2.wig"/>
- <output name="junctions" file="tophat_out3.bed"/>
- </test>
- <test><param name="genomeSource" value="indexed"/>
- <param name="index" value="equCab2chrM"/>
+ <param name="index" value="tophat_test"/><param name="sPaired" value="paired"/>
- <param name="input1" ftype="fastqsanger" value="tophat_in1.fq"/>
- <param name="input2" ftype="fastqsanger" value="tophat_in2.fq"/>
+ <param name="input1" ftype="fastqsanger" value="tophat_in2.fastqsanger"/>
+ <param name="input2" ftype="fastqsanger" value="tophat_in3.fastqsanger"/><param name="mate_inner_distance" value="20"/><param name="pSettingsType" value="full"/><param name="mate_std_dev" value="20"/>
@@ -409,18 +422,26 @@
<param name="quals_scale" value="default"/><param name="junction_filter" value="0.15"/><param name="max_multihits" value="40"/>
+ <param name="min_segment_intron" value="50" />
+ <param name="max_segment_intron" value="500000" />
+ <param name="seg_mismatches" value="2"/>
+ <param name="seg_length" value="25"/>
+ <param name="use_junctions" value="Yes" />
+ <param name="use_annotations" value="No" />
+ <param name="use_juncs" value="No" />
+ <param name="no_novel_juncs" value="No" />
+ <param name="use_search" value="Yes" />
+ <param name="min_closure_exon" value="50" />
+ <param name="min_closure_intron" value="50" />
+ <param name="max_closure_intron" value="5000" />
+ <param name="use_search" value="Yes" /><param name="min_coverage_intron" value="50" /><param name="max_coverage_intron" value="20000" />
- <param name="seg_mismatches" value="2"/>
- <param name="seg_length" value="25"/>
---><!--
- Can't test this right now because first lines of file are run-specific.
- <output name="accepted_hits" file="tophat_out1.sam"/>
- -->
-<!-- <output name="coverage" file="tophat_out2.wig"/>
- <output name="junctions" file="tophat_out3.bed"/>
+ <param name="microexon_search" value="Yes" />
+ <output name="junctions" file="tophat_out4j.bed" ftype="bed" />
+ <output name="accepted_hits" file="tophat_out4h.bam" compare="sim_size" ftype="bam" /></test>
---></tests>
+ </tests><help>
**Tophat Overview**
Binary file test-data/tophat_out3h.bam has changed
Binary file test-data/tophat_out2.bam has changed
--- a/test-data/tophat_in3.fa
+++ /dev/null
@@ -1,14 +0,0 @@
->test_chromosome
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-ACTACTATCTGACTAGACTGGAGGCGCTTGCGACTGAGCTAGGACGTGCC
-ACTACGGGGATGACGACTAGGACTACGGACGGACTTAGAGCGTCAGATGC
-AGCGACTGGACTATTTAGGACGATCGGACTGAGGAGGGCAGTAGGACGCT
-ACGTATTTGGCGCGCGGCGCTACGGCTGAGCGTCGAGCTTGCGATACGCC
-GTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG
-ACTATTACTTTATTATCTTACTCGGACGTAGACGGATCGGCAACGGGACT
-GTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG
-TTTTCTACTTGAGACTGGGATCGAGGCGGACTTTTTAGGACGGGACTTGC
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
--- a/tool_data_table_conf.xml.sample
+++ b/tool_data_table_conf.xml.sample
@@ -1,3 +1,4 @@
+<!-- Use the file tool_data_table_conf.xml.oldlocstyle if you don't want to update your loc files as changed in revision 4550:535d276c92bc--><tables><!-- Locations of all fasta files under genome directory --><table name="all_fasta" comment_char="#">
@@ -34,7 +35,7 @@
<columns>value, dbkey, name, path</columns><file path="tool-data/bwa_index.loc" /></table>
- <!-- Locations of MAF files that have been indexed with bx-python -->
+ <!-- Locations of MAF files that have been indexed with bx-python --><table name="indexed_maf_files"><columns>name, value, dbkey, species</columns><file path="tool-data/maf_index.loc" />
@@ -65,9 +66,8 @@
<file path="tool-data/srma_index.loc" /></table><!-- Locations of indexes in the Bowtie mapper format for TopHat to use -->
-<!-- <table name="tophat_indexes" comment_char="#">
+ <table name="tophat_indexes" comment_char="#"><columns>value, dbkey, name, path</columns><file path="tool-data/bowtie_indices.loc" /></table>
---></tables>
Binary file test-data/tophat_out4h.bam has changed
--- /dev/null
+++ b/test-data/tophat_out4j.bed
@@ -0,0 +1,3 @@
+track name=junctions description="TopHat junctions"
+test_chromosome 180 402 JUNC00000001 46 + 180 402 255,0,0 2 70,52 0,170
+test_chromosome 349 550 JUNC00000002 38 + 349 550 255,0,0 2 51,50 0,151
Binary file test-data/tophat_out2h.bam has changed
1
0
galaxy-dist commit a68c74ec8cfb: OpenID support for Galaxy.
by commits-noreply@bitbucket.org 20 Nov '10
by commits-noreply@bitbucket.org 20 Nov '10
20 Nov '10
# HG changeset patch -- Bitbucket.org
# Project galaxy-dist
# URL http://bitbucket.org/galaxy/galaxy-dist/overview
# User Nate Coraor <nate(a)bx.psu.edu>
# Date 1290006822 18000
# Node ID a68c74ec8cfbc641db4b6fe424e3f77b9f3c5d3c
# Parent 56431b214df16653a966b96bf399c7646da267b8
OpenID support for Galaxy.
--- a/eggs.ini
+++ b/eggs.ini
@@ -44,6 +44,7 @@ Paste = 1.6
PasteDeploy = 1.3.3
PasteScript = 1.7.3
pexpect = 2.4
+python_openid = 2.2.5
Routes = 1.12.3
SQLAlchemy = 0.5.6
sqlalchemy_migrate = 0.5.4
--- /dev/null
+++ b/templates/user/openid_manage.mako
@@ -0,0 +1,17 @@
+## Template generates a grid that enables user to select items.
+<%namespace file="../grid_base.mako" import="make_grid" />
+<%namespace file="login.mako" import="render_openid_form" />
+
+<%inherit file="../grid_base.mako" />
+
+<%def name="grid_body( grid )">
+ ${make_grid( grid )}
+ <h2>Associate more OpenIDs</h2>
+ ${render_openid_form( kwargs['referer'], True, kwargs['openid_providers'] )}
+</%def>
+
+<%def name="center_panel()">
+ <div style="margin: 1em;">
+ ${grid_body( grid )}
+ </div>
+</%def>
Binary file static/images/openid-16x16.gif has changed
--- a/lib/galaxy/model/__init__.py
+++ b/lib/galaxy/model/__init__.py
@@ -1953,6 +1953,12 @@ class UserAddress( object ):
html = html + '<br/>' + 'Phone: ' + self.phone
return html
+class UserOpenID( object ):
+ def __init__( self, user=None, session=None, openid=None ):
+ self.user = user
+ self.session = session
+ self.openid = openid
+
class Page( object ):
def __init__( self ):
self.id = None
--- a/templates/user/index.mako
+++ b/templates/user/index.mako
@@ -15,6 +15,9 @@
%if trans.app.config.enable_api:
<li><a href="${h.url_for( controller='user', action='api_keys' )}">${_('Manage your API Keys')}</a> for new histories</li>
%endif
+ %if trans.app.config.enable_openid:
+ <li><a href="${h.url_for( controller='user', action='openid_manage' )}">${ ('Manage OpenIDs')}</a> linked to your account</li>
+ %endif
%else:
<li><a href="${h.url_for( controller='user', action='show_info', webapp='community' )}">${_('Manage your information')}</a></li>
%endif
--- /dev/null
+++ b/lib/galaxy/model/migrate/versions/0062_user_openid_table.py
@@ -0,0 +1,48 @@
+"""
+Migration script to create table for associating sessions and users with
+OpenIDs.
+"""
+
+from sqlalchemy import *
+from sqlalchemy.orm import *
+from migrate import *
+from migrate.changeset import *
+
+import datetime
+now = datetime.datetime.utcnow
+
+import logging
+log = logging.getLogger( __name__ )
+
+metadata = MetaData( migrate_engine )
+db_session = scoped_session( sessionmaker( bind=migrate_engine, autoflush=False, autocommit=True ) )
+
+# Table to add
+
+UserOpenID_table = Table( "galaxy_user_openid", metadata,
+ Column( "id", Integer, primary_key=True ),
+ Column( "create_time", DateTime, default=now ),
+ Column( "update_time", DateTime, index=True, default=now, onupdate=now ),
+ Column( "session_id", Integer, ForeignKey( "galaxy_session.id" ), index=True ),
+ Column( "user_id", Integer, ForeignKey( "galaxy_user.id" ), index=True ),
+ Column( "openid", TEXT, index=True, unique=True ),
+ )
+
+def upgrade():
+ print __doc__
+ metadata.reflect()
+
+ # Create galaxy_user_openid table
+ try:
+ UserOpenID_table.create()
+ except Exception, e:
+ log.debug( "Creating galaxy_user_openid table failed: %s" % str( e ) )
+
+def downgrade():
+ metadata.reflect()
+
+ # Drop galaxy_user_openid table
+ try:
+ UserOpenID_table.drop()
+ except Exception, e:
+ log.debug( "Dropping galaxy_user_openid table failed: %s" % str( e ) )
--- a/templates/user/login.mako
+++ b/templates/user/login.mako
@@ -1,23 +1,77 @@
-<%inherit file="/base.mako"/>
+<%!
+ def inherit(context):
+ if context.get('use_panels'):
+ if context.get('webapp'):
+ webapp = context.get('webapp')
+ else:
+ webapp = 'galaxy'
+ return '/webapps/%s/base_panels.mako' % webapp
+ else:
+ return '/base.mako'
+%>
+<%inherit file="${inherit(context)}"/>
+
+<%def name="init()">
+<%
+ self.has_left_panel=False
+ self.has_right_panel=False
+ self.active_view=active_view
+ self.message_box_visible=False
+%>
+</%def>
+
<%namespace file="/message.mako" import="render_msg" />
-%if redirect_url:
- <script type="text/javascript">
- top.location.href = '${redirect_url}';
- </script>
-%endif
+<%def name="center_panel()">
+ ${body()}
+</%def>
-%if not redirect_url and message:
- ${render_msg( message, status )}
-%endif
+<%def name="body()">
-%if not trans.user:
+ %if redirect_url:
+ <script type="text/javascript">
+ top.location.href = '${redirect_url}';
+ </script>
+ %endif
+
+ %if context.get('use_panels'):
+ <div style="margin: 1em;">
+ %else:
+ <div>
+ %endif
+
+ %if message:
+ ${render_msg( message, status )}
+ %endif
+
+ %if not trans.user:
+
+ ${render_login_form()}
+
+ %if trans.app.config.enable_openid:
+ <br/>
+ ${render_openid_form( referer, False, openid_providers )}
+ %endif
+
+ %endif
+
+ </div>
+
+</%def>
+
+<%def name="render_login_form( form_action=None )">
+
+ <%
+ if form_action is None:
+ form_action = h.url_for( controller='user', action='login', use_panels=use_panels )
+ %>
+
%if header:
${header}
%endif
<div class="toolForm"><div class="toolFormTitle">Login</div>
- <form name="login" id="login" action="${h.url_for( controller='user', action='login' )}" method="post" >
+ <form name="login" id="login" action="${form_action}" method="post" ><div class="form-row"><label>Email address:</label><input type="text" name="email" value="${email}" size="40"/>
@@ -36,4 +90,32 @@
</div></form></div>
-%endif
+
+</%def>
+
+<%def name="render_openid_form( referer, auto_associate, openid_providers )">
+
+ <div class="toolForm">
+ <div class="toolFormTitle">OpenID Login</div>
+ <form name="openid" id="openid" action="${h.url_for( controller='user', action='openid_auth' )}" method="post" >
+ <div class="form-row">
+ <label>OpenID URL:</label>
+ <input type="text" name="openid_url" size="60" style="background-image:url('${h.url_for( '/static/images/openid-16x16.gif' )}' ); background-repeat: no-repeat; padding-right: 20px; background-position: 99% 50%;"/>
+ <input type="hidden" name="webapp" value="${webapp}" size="40"/>
+ <input type="hidden" name="referer" value="${referer}" size="40"/>
+ <input type="hidden" name="auto_associate" value="${auto_associate}" size="40"/>
+ </div>
+ <div class="form-row">
+ Or, authenticate with your <select name="openid_provider">
+ %for provider in openid_providers.keys():
+ <option>${provider}</option>
+ %endfor
+ </select> account.
+ </div>
+ <div class="form-row">
+ <input type="submit" name="login_button" value="Login"/>
+ </div>
+ </form>
+ </div>
+
+</%def>
--- a/lib/galaxy/eggs/__init__.py
+++ b/lib/galaxy/eggs/__init__.py
@@ -321,6 +321,7 @@ class GalaxyConfig( object ):
"pbs_python": lambda: "pbs" in self.config.get( "app:main", "start_job_runners" ).split(","),
"threadframe": lambda: self.config.get( "app:main", "use_heartbeat" ),
"guppy": lambda: self.config.get( "app:main", "use_memdump" ),
+ "python_openid": lambda: self.config.get( "app:main", "enable_openid" ),
"GeneTrack": lambda: sys.version_info[:2] >= ( 2, 5 ),
"pysam": check_pysam()
}.get( egg_name, lambda: True )()
--- /dev/null
+++ b/templates/user/openid_associate.mako
@@ -0,0 +1,75 @@
+<%!
+ def inherit(context):
+ if context.get('use_panels'):
+ if context.get('webapp'):
+ webapp = context.get('webapp')
+ else:
+ webapp = 'galaxy'
+ return '/webapps/%s/base_panels.mako' % webapp
+ else:
+ return '/base.mako'
+%>
+<%inherit file="${inherit(context)}"/>
+
+<%def name="init()">
+<%
+ self.has_left_panel=False
+ self.has_right_panel=False
+ self.active_view=active_view
+ self.message_box_visible=False
+%>
+</%def>
+
+<%namespace file="/message.mako" import="render_msg" />
+<%namespace file="login.mako" import="render_login_form" />
+<%namespace file="register.mako" import="render_registration_form" />
+
+<%def name="center_panel()">
+ ${body()}
+</%def>
+
+<%def name="body()">
+
+ %if context.get('use_panels'):
+ <div style="margin: 1em;">
+ %else:
+ <div>
+ %endif
+
+ %if message:
+ ${render_msg( message, status )}
+ %endif
+
+ <h2>OpenID Account Association</h2>
+ <div>
+ OpenIDs must be associated with a Galaxy account before they can be used for authentication. This only needs to be done once per OpenID. You may associate your OpenID with an existing Galaxy account, or create a new one.
+ </div>
+ <br/>
+
+ %if len( openids ) > 1:
+ <div>
+ The following OpenIDs will be associated with the account chosen or created below.
+ <ul>
+ %for openid in openids:
+ <li>${openid.openid}</li>
+ %endfor
+ </ul>
+ </div>
+ %else:
+ <div>
+ The OpenID <strong>${openids[0].openid}</strong> will be associated with the account chosen or created.
+ </div>
+ %endif
+ <br/>
+
+ <% form_action = h.url_for( use_panels=use_panels ) %>
+
+ ${render_login_form( form_action=form_action )}
+
+ <br/>
+
+ ${render_registration_form( form_action=form_action )}
+
+ </div>
+
+</%def>
--- a/templates/user/register.mako
+++ b/templates/user/register.mako
@@ -22,8 +22,18 @@
## An admin user may be creating a new user account, in which case we want to display the registration form.
## But if the current user is not an admin user, then don't display the registration form.
%if trans.user_is_admin() or not trans.user:
+ ${render_registration_form()}
+%endif
+
+<%def name="render_registration_form( form_action=None )">
+
+ <%
+ if form_action is None:
+ form_action = h.url_for( controller='user', action='create', admin_view=admin_view )
+ %>
+
<div class="toolForm">
- <form name="registration" id="registration" action="${h.url_for( controller='user', action='create', admin_view=admin_view )}" method="post" >
+ <form name="registration" id="registration" action="${form_action}" method="post" ><div class="toolFormTitle">Create account</div><div class="form-row"><label>Email address:</label>
@@ -83,4 +93,5 @@
</div></form></div>
-%endif
+
+</%def>
--- a/universe_wsgi.ini.sample
+++ b/universe_wsgi.ini.sample
@@ -324,6 +324,10 @@ use_interactive = True
# WYSIWYG editor that is very similar to a word processor.
#enable_pages = False
+# Enable authentication via OpenID. Allows users to log in to their Galaxy
+# account by authenticating with an OpenID provider.
+#enable_openid = False
+
# Enable the (experimental! beta!) Web API. Documentation forthcoming.
#enable_api = False
--- a/lib/galaxy/model/mapping.py
+++ b/lib/galaxy/model/mapping.py
@@ -68,6 +68,15 @@ UserAddress.table = Table( "user_address
Column( "deleted", Boolean, index=True, default=False ),
Column( "purged", Boolean, index=True, default=False ) )
+UserOpenID.table = Table( "galaxy_user_openid", metadata,
+ Column( "id", Integer, primary_key=True ),
+ Column( "create_time", DateTime, default=now ),
+ Column( "update_time", DateTime, index=True, default=now, onupdate=now ),
+ Column( "session_id", Integer, ForeignKey( "galaxy_session.id" ), index=True ),
+ Column( "user_id", Integer, ForeignKey( "galaxy_user.id" ), index=True ),
+ Column( "openid", TEXT, index=True, unique=True ),
+ )
+
History.table = Table( "history", metadata,
Column( "id", Integer, primary_key=True),
Column( "create_time", DateTime, default=now ),
@@ -968,6 +977,17 @@ assign_mapper( context, UserAddress, Use
order_by=desc(UserAddress.table.c.update_time)),
) )
+assign_mapper( context, UserOpenID, UserOpenID.table,
+ properties=dict(
+ session=relation( GalaxySession,
+ primaryjoin=( UserOpenID.table.c.session_id == GalaxySession.table.c.id ),
+ backref='openids',
+ order_by=desc( UserOpenID.table.c.update_time ) ),
+ user=relation( User,
+ primaryjoin=( UserOpenID.table.c.user_id == User.table.c.id ),
+ backref='openids',
+ order_by=desc( UserOpenID.table.c.update_time ) ) ) )
+
assign_mapper( context, ValidationError, ValidationError.table )
--- a/templates/display_common.mako
+++ b/templates/display_common.mako
@@ -85,6 +85,8 @@
class_plural = "Forms"
elif a_class == model.RequestType:
class_plural = "sequencer configurations"
+ elif a_class == model.UserOpenID:
+ class_plural = "OpenIDs"
else:
class_plural = a_class.__name__ + "s"
return class_plural
--- a/lib/galaxy/app.py
+++ b/lib/galaxy/app.py
@@ -60,6 +60,10 @@ class UniverseApplication( object ):
self.heartbeat = None
self.memdump = None
self.memory_usage = None
+ # Container for OpenID authentication routines
+ if self.config.enable_openid:
+ from galaxy.web.framework import openid_manager
+ self.openid_manager = openid_manager.OpenIDManager( self.config.openid_consumer_cache_path )
# Start the heartbeat process if configured and available
if self.config.use_heartbeat:
from galaxy.util import heartbeat
--- /dev/null
+++ b/lib/galaxy/web/framework/openid_manager.py
@@ -0,0 +1,53 @@
+"""
+Mange the OpenID consumer and related data stores.
+"""
+
+import os, pickle, logging
+
+from galaxy import eggs
+eggs.require( 'python-openid' )
+
+import openid
+from openid import oidutil
+from openid.store import filestore
+from openid.consumer import consumer
+from openid.extensions import sreg
+
+log = logging.getLogger( __name__ )
+def oidlog( message, level=0 ):
+ log.debug( message )
+oidutil.log = oidlog
+
+class OpenIDManager( object ):
+ def __init__( self, cache_path ):
+ self.session_path = os.path.join( cache_path, 'session' )
+ self.store_path = os.path.join( cache_path, 'store' )
+ for dir in self.session_path, self.store_path:
+ if not os.path.exists( dir ):
+ os.makedirs( dir )
+ self.store = filestore.FileOpenIDStore( self.store_path )
+ def get_session( self, trans ):
+ session_file = os.path.join( self.session_path, str( trans.galaxy_session.id ) )
+ if not os.path.exists( session_file ):
+ pickle.dump( dict(), open( session_file, 'w' ) )
+ return pickle.load( open( session_file ) )
+ def persist_session( self, trans, oidconsumer ):
+ session_file = os.path.join( self.session_path, str( trans.galaxy_session.id ) )
+ pickle.dump( oidconsumer.session, open( session_file, 'w' ) )
+ def get_consumer( self, trans ):
+ return consumer.Consumer( self.get_session( trans ), self.store )
+ def add_sreg( self, trans, request, required=None, optional=None ):
+ if required is None:
+ required = []
+ if optional is None:
+ optional = []
+ sreg_request = sreg.SRegRequest( required=required, optional=optional )
+ request.addExtension( sreg_request )
+ def get_sreg( self, info ):
+ return sreg.SRegResponse.fromSuccessResponse( info )
+
+ # so I don't have to expose all of openid.consumer.consumer
+ FAILURE = consumer.FAILURE
+ SUCCESS = consumer.SUCCESS
+ CANCEL = consumer.CANCEL
+ SETUP_NEEDED = consumer.SETUP_NEEDED
--- a/lib/galaxy/config.py
+++ b/lib/galaxy/config.py
@@ -39,9 +39,11 @@ class Configuration( object ):
# Where dataset files are stored
self.file_path = resolve_path( kwargs.get( "file_path", "database/files" ), self.root )
self.new_file_path = resolve_path( kwargs.get( "new_file_path", "database/tmp" ), self.root )
+ self.openid_consumer_cache_path = resolve_path( kwargs.get( "openid_consumer_cache_path", "database/openid_consumer_cache" ), self.root )
self.cookie_path = kwargs.get( "cookie_path", "/" )
# web API
self.enable_api = string_as_bool( kwargs.get( 'enable_api', False ) )
+ self.enable_openid = string_as_bool( kwargs.get( 'enable_openid', False ) )
# Communication with a sequencer
self.enable_sequencer_communication = string_as_bool( kwargs.get( 'enable_sequencer_communication', False ) )
# dataset Track files
@@ -161,7 +163,17 @@ class Configuration( object ):
if not os.path.isdir( path ):
raise ConfigurationError("Directory does not exist: %s" % path )
# Create the directories that it makes sense to create
- for path in self.file_path, self.new_file_path, self.job_working_directory, self.cluster_files_directory, self.template_cache, self.ftp_upload_dir, self.library_import_dir, self.user_library_import_dir, self.nginx_upload_store, './static/genetrack/plots', os.path.join( self.tool_data_path, 'shared', 'jars' ):
+ for path in self.file_path, \
+ self.new_file_path, \
+ self.job_working_directory, \
+ self.cluster_files_directory, \
+ self.template_cache, \
+ self.ftp_upload_dir, \
+ self.library_import_dir, \
+ self.user_library_import_dir, \
+ self.nginx_upload_store, \
+ './static/genetrack/plots', \
+ os.path.join( self.tool_data_path, 'shared', 'jars' ):
if path not in [ None, False ] and not os.path.isdir( path ):
try:
os.makedirs( path )
--- a/lib/galaxy/web/controllers/user.py
+++ b/lib/galaxy/web/controllers/user.py
@@ -1,9 +1,10 @@
"""
Contains the user interface in the Universe class
"""
+from galaxy.web.framework.helpers import time_ago, grids
from galaxy.web.base.controller import *
from galaxy.model.orm import *
-from galaxy import util
+from galaxy import util, model
import logging, os, string, re, smtplib, socket
from random import choice
from email.MIMEText import MIMEText
@@ -26,48 +27,337 @@ require_login_creation_template = requir
VALID_USERNAME_RE = re.compile( "^[a-z0-9\-]+$" )
+OPENID_PROVIDERS = { 'Google' : 'https://www.google.com/accounts/o8/id',
+ 'Yahoo!' : 'http://yahoo.com',
+ 'AOL/AIM' : 'http://openid.aol.com',
+ 'Flickr' : 'http://flickr.com',
+ 'Launchpad' : 'http://login.launchpad.net',
+ }
+
+class UserOpenIDGrid( grids.Grid ):
+ use_panels = False
+ title = "OpenIDs linked to your account"
+ model_class = model.UserOpenID
+ template = '/user/openid_manage.mako'
+ default_filter = { "openid" : "All" }
+ default_sort_key = "-create_time"
+ columns = [
+ grids.TextColumn( "OpenID URL", key="openid" ),
+ grids.GridColumn( "Created", key="create_time", format=time_ago ),
+ ]
+ operations = [
+ grids.GridOperation( "Delete", async_compatible=True ),
+ ]
+ def build_initial_query( self, trans, **kwd ):
+ return trans.sa_session.query( self.model_class ).filter( self.model_class.user_id == trans.user.id )
+
class User( BaseController, UsesFormDefinitionWidgets ):
+ user_openid_grid = UserOpenIDGrid()
@web.expose
def index( self, trans, webapp='galaxy', **kwd ):
return trans.fill_template( '/user/index.mako', webapp=webapp )
@web.expose
+ def openid_auth( self, trans, webapp='galaxy', **kwd ):
+ if not trans.app.config.enable_openid:
+ return trans.show_error_message( 'OpenID authentication is not enabled in this instance of Galaxy' )
+ message = 'Unspecified failure authenticating via OpenID'
+ status = kwd.get( 'status', 'done' )
+ openid_url = kwd.get( 'openid_url', '' )
+ openid_provider = kwd.get( 'openid_provider', '' )
+ referer = kwd.get( 'referer', trans.request.referer )
+ auto_associate = util.string_as_bool( kwd.get( 'auto_associate', False ) )
+ use_panels = util.string_as_bool( kwd.get( 'use_panels', False ) )
+ action = 'login'
+ if auto_associate:
+ action = 'openid_manage'
+ if not referer:
+ referer = url_for( '/' )
+ consumer = trans.app.openid_manager.get_consumer( trans )
+ process_url = trans.request.base.rstrip( '/' ) + url_for( controller='user', action='openid_process', referer=referer, auto_associate=auto_associate )
+ if not openid_url and openid_provider and openid_provider in OPENID_PROVIDERS:
+ openid_url = OPENID_PROVIDERS[openid_provider]
+ if openid_url:
+ request = None
+ try:
+ request = consumer.begin( openid_url )
+ if request is None:
+ message = 'No OpenID services are available at %s' % openid_url
+ except Exception, e:
+ message = 'Failed to begin OpenID authentication: %s' % str( e )
+ if request is not None:
+ trans.app.openid_manager.add_sreg( trans, request, optional=[ 'nickname', 'email' ] )
+ if request.shouldSendRedirect():
+ redirect_url = request.redirectURL(
+ trans.request.base, process_url )
+ trans.app.openid_manager.persist_session( trans, consumer )
+ trans.response.send_redirect( redirect_url )
+ return
+ else:
+ form = request.htmlMarkup( trans.request.base, process_url, form_tag_attrs={'id':'openid_message','target':'_top'} )
+ trans.app.openid_manager.persist_session( trans, consumer )
+ return form
+ return trans.response.send_redirect( url_for( controller='user',
+ action=action,
+ use_panels=use_panels,
+ message=message,
+ status='error' ) )
+ @web.expose
+ def openid_process( self, trans, webapp='galaxy', **kwd ):
+ if not trans.app.config.enable_openid:
+ return trans.show_error_message( 'OpenID authentication is not enabled in this instance of Galaxy' )
+ auto_associate = util.string_as_bool( kwd.get( 'auto_associate', False ) )
+ action = 'login'
+ if auto_associate:
+ action = 'openid_manage'
+ if trans.app.config.bugs_email is not None:
+ contact = '<a href="mailto:%s">contact support</a>' % trans.app.config.bugs_email
+ else:
+ contact = 'contact support'
+ message = 'Verification failed for an unknown reason. Please contact support for assistance.'
+ status = 'error'
+ consumer = trans.app.openid_manager.get_consumer( trans )
+ info = consumer.complete( kwd, trans.request.url )
+ display_identifier = info.getDisplayIdentifier()
+ redirect_url = kwd.get( 'referer', url_for( '/' ) )
+ if info.status == trans.app.openid_manager.FAILURE and display_identifier:
+ message = "Login via OpenID failed. The technical reason for this follows, please include this message in your email if you need to %s to resolve this problem: %s" % ( contact, info.message )
+ return trans.response.send_redirect( url_for( controller='user',
+ action=action,
+ use_panels=True,
+ message=message,
+ status='error' ) )
+ elif info.status == trans.app.openid_manager.SUCCESS:
+ if info.endpoint.canonicalID:
+ display_identifier = info.endpoint.canonicalID
+ user_openid = trans.sa_session.query( trans.app.model.UserOpenID ).filter( trans.app.model.UserOpenID.table.c.openid == display_identifier ).first()
+ if not user_openid:
+ user_openid = trans.app.model.UserOpenID( session=trans.galaxy_session, openid=display_identifier )
+ elif not user_openid.user and user_openid.session.id != trans.galaxy_session.id:
+ user_openid.session = trans.galaxy_session
+ elif user_openid.user and not auto_associate:
+ trans.handle_user_login( user_openid.user, webapp )
+ trans.log_event( "User logged in via OpenID: %s" % display_identifier )
+ trans.response.send_redirect( redirect_url )
+ return
+ if auto_associate and trans.user:
+ # The user is already logged in and requested association from
+ # the user prefs as opposed to using the OpenID form on the
+ # login page.
+ if user_openid.user and user_openid.user.id != trans.user.id:
+ message = "The OpenID <strong>%s</strong> is already associated with another Galaxy account, <strong>%s</strong>. Please disassociate it from that account before attempting to associate it with a new account." % ( display_identifier, user_openid.user.email )
+ status = "error"
+ elif user_openid.user and user_openid.user.id == trans.user.id:
+ message = "The OpenID <strong>%s</strong> is already associated with your Galaxy account, <strong>%s</strong>." % ( display_identifier, trans.user.email )
+ status = "warning"
+ else:
+ user_openid.user_id = trans.user.id
+ trans.sa_session.add( user_openid )
+ trans.sa_session.flush()
+ trans.log_event( "User associated OpenID: %s" % display_identifier )
+ message = "The OpenID <strong>%s</strong> has been associated with your Galaxy account, <strong>%s</strong>." % ( display_identifier, trans.user.email )
+ status = "done"
+ trans.response.send_redirect( url_for( controller='user',
+ action='openid_manage',
+ use_panels=True,
+ message=message,
+ status=status ) )
+ return
+ trans.sa_session.add( user_openid )
+ trans.sa_session.flush()
+ message = "OpenID authentication was successful, but you need to associate your OpenID with a Galaxy account."
+ sreg_resp = trans.app.openid_manager.get_sreg( info )
+ try:
+ username = sreg_resp.get( 'nickname', '' )
+ except AttributeError:
+ username = ''
+ try:
+ email = sreg_resp.get( 'email', '' )
+ except AttributeError:
+ email = ''
+ trans.response.send_redirect( url_for( controller='user',
+ action='openid_associate',
+ use_panels=True,
+ username=username,
+ email=email,
+ message=message,
+ status='warning' ) )
+ elif info.status == trans.app.openid_manager.CANCEL:
+ message = "Login via OpenID was cancelled by an action at the OpenID provider's site."
+ status = "warning"
+ elif info.status == trans.app.openid_manager.SETUP_NEEDED:
+ if info.setup_url:
+ return trans.response.send_redirect( info.setup_url )
+ else:
+ message = "Unable to log in via OpenID. Setup at the provider is required before this OpenID can be used. Please visit your provider's site to complete this step."
+ return trans.response.send_redirect( url_for( controller='user',
+ action=action,
+ use_panels=True,
+ message=message,
+ status=status ) )
+ @web.expose
+ def openid_associate( self, trans, webapp='galaxy', **kwd ):
+ if not trans.app.config.enable_openid:
+ return trans.show_error_message( 'OpenID authentication is not enabled in this instance of Galaxy' )
+ use_panels = util.string_as_bool( kwd.get( 'use_panels', False ) )
+ message = kwd.get( 'message', '' )
+ status = kwd.get( 'status', 'done' )
+ email = kwd.get( 'email', '' )
+ username = kwd.get( 'username', '' )
+ referer = kwd.get( 'referer', trans.request.referer )
+ params = util.Params( kwd )
+ admin_view = util.string_as_bool( params.get( 'admin_view', False ) )
+ openids = trans.galaxy_session.openids
+ if not openids:
+ return trans.show_error_message( 'You have not successfully completed an OpenID authentication in this session. You can do so on the <a href="%s">login</a> page.' % url_for( controller='user', action='login', use_panels=use_panels ) )
+ elif admin_view:
+ return trans.show_error_message( 'Associating OpenIDs with accounts cannot be done by administrators.' )
+ if kwd.get( 'login_button', False ):
+ message, status, user, success = self.__validate_login( trans, webapp, **kwd )
+ if success:
+ for openid in openids:
+ openid.user = user
+ trans.sa_session.add( openid )
+ trans.sa_session.flush()
+ for openid in openids:
+ trans.log_event( "User associated OpenID: %s" % openid.openid )
+ redirect_url = referer
+ if not redirect_url:
+ redirect_url = url_for( '/' )
+ trans.response.send_redirect( redirect_url )
+ return
+ if kwd.get( 'create_user_button', False ):
+ password = kwd.get( 'password', '' )
+ confirm = kwd.get( 'confirm', '' )
+ subscribe = params.get( 'subscribe', '' )
+ subscribe_checked = CheckboxField.is_checked( subscribe )
+ error = ''
+ if not trans.app.config.allow_user_creation and not trans.user_is_admin():
+ error = 'User registration is disabled. Please contact your Galaxy administrator for an account.'
+ else:
+ # Check email and password validity
+ error = self.__validate( trans, params, email, password, confirm, username, webapp )
+ if not error:
+ # all the values are valid
+ message, status, user, success = self.__register( trans, webapp, email, password, username, subscribe_checked, kwd )
+ if success:
+ trans.handle_user_login( user, webapp )
+ trans.log_event( "User created a new account" )
+ trans.log_event( "User logged in" )
+ for openid in openids:
+ openid.user = user
+ trans.sa_session.add( openid )
+ trans.sa_session.flush()
+ for openid in openids:
+ trans.log_event( "User associated OpenID: %s" % openid.openid )
+ redirect_url = referer
+ if not redirect_url:
+ redirect_url = url_for( '/' )
+ trans.response.send_redirect( redirect_url )
+ else:
+ message = error
+ status = 'error'
+ if webapp == 'galaxy':
+ user_info_select, user_info_form, widgets = self.__user_info_ui( trans, **kwd )
+ else:
+ user_info_select = []
+ user_info_form = []
+ widgets = []
+ return trans.fill_template( '/user/openid_associate.mako',
+ webapp=webapp,
+ email=email,
+ password='',
+ confirm='',
+ username=username,
+ header='',
+ use_panels=use_panels,
+ redirect_url='',
+ referer='',
+ refresh_frames=[],
+ message=message,
+ status=status,
+ active_view="user",
+ subscribe_checked=False,
+ admin_view=False,
+ user_info_select=user_info_select,
+ user_info_form=user_info_form,
+ widgets=widgets,
+ openids=openids )
+ @web.expose
+ @web.require_login( 'manage OpenIDs' )
+ def openid_disassociate( self, trans, webapp='galaxy', **kwd ):
+ if not trans.app.config.enable_openid:
+ return trans.show_error_message( 'OpenID authentication is not enabled in this instance of Galaxy' )
+ params = util.Params( kwd )
+ ids = params.get( 'id', None )
+ message = params.get( 'message', None )
+ status = params.get( 'status', None )
+ use_panels = params.get( 'use_panels', False )
+ user_openids = []
+ if not ids:
+ message = 'You must select at least one OpenID to disassociate from your Galaxy account.'
+ status = 'error'
+ else:
+ ids = util.listify( params.id )
+ for id in ids:
+ id = trans.security.decode_id( id )
+ user_openid = trans.sa_session.query( trans.app.model.UserOpenID ).get( int( id ) )
+ if not user_openid or ( trans.user.id != user_openid.user_id ):
+ message = 'The selected OpenID(s) are not associated with your Galaxy account.'
+ status = 'error'
+ user_openids = []
+ break
+ user_openids.append( user_openid )
+ if user_openids:
+ deleted_urls = []
+ for user_openid in user_openids:
+ trans.sa_session.delete( user_openid )
+ deleted_urls.append( user_openid.openid )
+ trans.sa_session.flush()
+ for deleted_url in deleted_urls:
+ trans.log_event( "User disassociated OpenID: %s" % deleted_url )
+ message = '%s OpenIDs were disassociated from your Galaxy account.' % len( ids )
+ status = 'done'
+ trans.response.send_redirect( url_for( controller='user',
+ action='openid_manage',
+ use_panels=use_panels,
+ message=message,
+ status=status ) )
+ @web.expose
+ @web.require_login( 'manage OpenIDs' )
+ def openid_manage( self, trans, webapp='galaxy', **kwd ):
+ if not trans.app.config.enable_openid:
+ return trans.show_error_message( 'OpenID authentication is not enabled in this instance of Galaxy' )
+ use_panels = kwd.get( 'use_panels', False )
+ if 'operation' in kwd:
+ operation = kwd['operation'].lower()
+ if operation == "delete":
+ trans.response.send_redirect( url_for( controller='user',
+ action='openid_disassociate',
+ use_panels=use_panels,
+ id=kwd['id'] ) )
+ kwd['referer'] = url_for( controller='user', action='openid_manage', use_panels=True )
+ kwd['openid_providers'] = OPENID_PROVIDERS
+ return self.user_openid_grid( trans, **kwd )
+ @web.expose
def login( self, trans, webapp='galaxy', redirect_url='', refresh_frames=[], **kwd ):
referer = kwd.get( 'referer', trans.request.referer )
- use_panels = util.string_as_bool( kwd.get( 'use_panels', True ) )
+ use_panels = util.string_as_bool( kwd.get( 'use_panels', False ) )
message = kwd.get( 'message', '' )
status = kwd.get( 'status', 'done' )
header = ''
user = None
email = kwd.get( 'email', '' )
if kwd.get( 'login_button', False ):
- password = kwd.get( 'password', '' )
- referer = kwd.get( 'referer', '' )
if webapp == 'galaxy' and not refresh_frames:
if trans.app.config.require_login:
refresh_frames = [ 'masthead', 'history', 'tools' ]
else:
refresh_frames = [ 'masthead', 'history' ]
- user = trans.sa_session.query( trans.app.model.User ).filter( trans.app.model.User.table.c.email==email ).first()
- if not user:
- message = "No such user"
- status = 'error'
- elif user.deleted:
- message = "This account has been marked deleted, contact your Galaxy administrator to restore the account."
- status = 'error'
- elif user.external:
- message = "This account was created for use with an external authentication method, contact your local Galaxy administrator to activate it."
- status = 'error'
- elif not user.check_password( password ):
- message = "Invalid password"
- status = 'error'
- else:
- trans.handle_user_login( user, webapp )
- trans.log_event( "User logged in" )
- message = 'You are now logged in as %s.<br>You can <a target="_top" href="%s">go back to the page you were visiting</a> or <a target="_top" href="%s">go to the home page</a>.' % \
- ( user.email, referer, url_for( '/' ) )
- if trans.app.config.require_login:
- message += ' <a target="_top" href="%s">Click here</a> to continue to the home page.' % web.url_for( '/static/welcome.html' )
+ message, status, user, success = self.__validate_login( trans, webapp, **kwd )
+ if success and referer:
redirect_url = referer
+ elif success:
+ redirect_url = url_for( '/' )
if not user and trans.app.config.require_login:
if trans.app.config.allow_user_creation:
header = require_login_creation_template % web.url_for( action='create' )
@@ -83,7 +373,37 @@ class User( BaseController, UsesFormDefi
refresh_frames=refresh_frames,
message=message,
status=status,
+ openid_providers=OPENID_PROVIDERS,
active_view="user" )
+ def __validate_login( self, trans, webapp='galaxy', **kwd ):
+ message = kwd.get( 'message', '' )
+ status = kwd.get( 'status', 'done' )
+ email = kwd.get( 'email', '' )
+ password = kwd.get( 'password', '' )
+ referer = kwd.get( 'referer', trans.request.referer )
+ success = False
+ user = trans.sa_session.query( trans.app.model.User ).filter( trans.app.model.User.table.c.email==email ).first()
+ if not user:
+ message = "No such user"
+ status = 'error'
+ elif user.deleted:
+ message = "This account has been marked deleted, contact your Galaxy administrator to restore the account."
+ status = 'error'
+ elif user.external:
+ message = "This account was created for use with an external authentication method, contact your local Galaxy administrator to activate it."
+ status = 'error'
+ elif not user.check_password( password ):
+ message = "Invalid password"
+ status = 'error'
+ else:
+ trans.handle_user_login( user, webapp )
+ trans.log_event( "User logged in" )
+ message = 'You are now logged in as %s.<br>You can <a target="_top" href="%s">go back to the page you were visiting</a> or <a target="_top" href="%s">go to the home page</a>.' % \
+ ( user.email, referer, url_for( '/' ) )
+ if trans.app.config.require_login:
+ message += ' <a target="_top" href="%s">Click here</a> to continue to the home page.' % web.url_for( '/static/welcome.html' )
+ success = True
+ return ( message, status, user, success )
@web.expose
def logout( self, trans, webapp='galaxy' ):
if webapp == 'galaxy':
@@ -138,54 +458,25 @@ class User( BaseController, UsesFormDefi
error = self.__validate( trans, params, email, password, confirm, username, webapp )
if not error:
# all the values are valid
- user = trans.app.model.User( email=email )
- user.set_password_cleartext( password )
- user.username = username
- trans.sa_session.add( user )
- trans.sa_session.flush()
- trans.app.security_agent.create_private_user_role( user )
- message = 'Now logged in as %s.<br><a target="_top" href="%s">Return to the home page.</a>' % ( user.email, url_for( '/' ) )
- if webapp == 'galaxy':
- # We set default user permissions, before we log in and set the default history permissions
- trans.app.security_agent.user_set_default_permissions( user,
- default_access_private=trans.app.config.new_user_dataset_access_role_default_private )
- # save user info
- self.__save_user_info( trans, user, action='create', new_user=True, **kwd )
- if subscribe_checked:
- # subscribe user to email list
- if trans.app.config.smtp_server is None:
- error = "Now logged in as " + user.email + ". However, subscribing to the mailing list has failed because mail is not configured for this Galaxy instance."
- else:
- msg = MIMEText( 'Join Mailing list.\n' )
- to = msg[ 'To' ] = trans.app.config.mailing_join_addr
- frm = msg[ 'From' ] = email
- msg[ 'Subject' ] = 'Join Mailing List'
- try:
- s = smtplib.SMTP()
- s.connect( trans.app.config.smtp_server )
- s.sendmail( frm, [ to ], msg.as_string() )
- s.close()
- except:
- error = "Now logged in as " + user.email + ". However, subscribing to the mailing list has failed."
- if not error and not admin_view:
- # The handle_user_login() method has a call to the history_set_default_permissions() method
- # (needed when logging in with a history), user needs to have default permissions set before logging in
- trans.handle_user_login( user, webapp )
- trans.log_event( "User created a new account" )
- trans.log_event( "User logged in" )
- elif not error:
- trans.response.send_redirect( web.url_for( controller='admin',
- action='users',
- message='Created new user account (%s)' % user.email,
- status='done' ) )
- elif not admin_view:
+ message, status, user, success = self.__register( trans, webapp, email, password, username, subscribe_checked, kwd )
+ if success and not admin_view and webapp != 'galaxy':
# Must be logging into the community space webapp
trans.handle_user_login( user, webapp )
- if not error:
- redirect_url = referer
- if error:
- message=error
- status='error'
+ redirect_url = referer
+ if success and not admin_view:
+ # The handle_user_login() method has a call to the history_set_default_permissions() method
+ # (needed when logging in with a history), user needs to have default permissions set before logging in
+ trans.handle_user_login( user, webapp )
+ trans.log_event( "User created a new account" )
+ trans.log_event( "User logged in" )
+ elif success:
+ trans.response.send_redirect( web.url_for( controller='admin',
+ action='users',
+ message='Created new user account (%s)' % user.email,
+ status='done' ) )
+ else:
+ message = error
+ status = 'error'
if webapp == 'galaxy':
user_info_select, user_info_form, widgets = self.__user_info_ui( trans, **kwd )
else:
@@ -209,6 +500,57 @@ class User( BaseController, UsesFormDefi
refresh_frames=refresh_frames,
message=message,
status=status )
+ def __register( self, trans, webapp, email, password, username, subscribe_checked, kwd ):
+ status = kwd.get( 'status', 'done' )
+ admin_view = util.string_as_bool( kwd.get( 'admin_view', False ) )
+ user = trans.app.model.User( email=email )
+ user.set_password_cleartext( password )
+ user.username = username
+ trans.sa_session.add( user )
+ trans.sa_session.flush()
+ trans.app.security_agent.create_private_user_role( user )
+ error = ''
+ if webapp == 'galaxy':
+ # We set default user permissions, before we log in and set the default history permissions
+ trans.app.security_agent.user_set_default_permissions( user,
+ default_access_private=trans.app.config.new_user_dataset_access_role_default_private )
+ # save user info
+ self.__save_user_info( trans, user, action='create', new_user=True, **kwd )
+ if subscribe_checked:
+ # subscribe user to email list
+ if trans.app.config.smtp_server is None:
+ error = "Now logged in as " + user.email + ". However, subscribing to the mailing list has failed because mail is not configured for this Galaxy instance."
+ else:
+ msg = MIMEText( 'Join Mailing list.\n' )
+ to = msg[ 'To' ] = trans.app.config.mailing_join_addr
+ frm = msg[ 'From' ] = email
+ msg[ 'Subject' ] = 'Join Mailing List'
+ try:
+ s = smtplib.SMTP()
+ s.connect( trans.app.config.smtp_server )
+ s.sendmail( frm, [ to ], msg.as_string() )
+ s.close()
+ except:
+ error = "Now logged in as " + user.email + ". However, subscribing to the mailing list has failed."
+ if not error and not admin_view:
+ # The handle_user_login() method has a call to the history_set_default_permissions() method
+ # (needed when logging in with a history), user needs to have default permissions set before logging in
+ trans.handle_user_login( user, webapp )
+ trans.log_event( "User created a new account" )
+ trans.log_event( "User logged in" )
+ elif not error:
+ trans.response.send_redirect( web.url_for( controller='admin',
+ action='users',
+ message='Created new user account (%s)' % user.email,
+ status='done' ) )
+ if error:
+ message = error
+ status = 'error'
+ success = False
+ else:
+ message = 'Now logged in as %s.<br><a target="_top" href="%s">Return to the home page.</a>' % ( user.email, url_for( '/' ) )
+ success = True
+ return ( message, status, user, success )
def __save_user_info(self, trans, user, action, new_user=True, **kwd):
'''
This method saves the user information for new users as well as editing user
--- a/templates/grid_base.mako
+++ b/templates/grid_base.mako
@@ -29,12 +29,19 @@
##
<%def name="center_panel()">
- ${make_grid( grid )}
+ ${self.grid_body( grid )}
</%def>
## Render the grid's basic elements. Each of these elements can be subclassed.
<%def name="body()">
- ${make_grid( grid )}
+ ${self.grid_body( grid )}
+</%def>
+
+## Because body() is special and always exists even if not explicitly defined,
+## it's not possible to override body() in the topmost template in the chain.
+## Because of this, override grid_body() instead.
+<%def name="grid_body( grid )">
+ ${self.make_grid( grid )}
</%def><%def name="title()">${grid.title}</%def>
1
0
galaxy-dist commit 1bf064c8ab88: Fixed functional tests and samples grid alignment bug
by commits-noreply@bitbucket.org 20 Nov '10
by commits-noreply@bitbucket.org 20 Nov '10
20 Nov '10
# HG changeset patch -- Bitbucket.org
# Project galaxy-dist
# URL http://bitbucket.org/galaxy/galaxy-dist/overview
# User rc
# Date 1289928056 18000
# Node ID 1bf064c8ab88621dd58890f6cd56ad4900d10d6b
# Parent 2e2ee0289d67d244954aa05bfe315dbb5ff413eb
Fixed functional tests and samples grid alignment bug
--- a/test/functional/test_sample_tracking.py
+++ b/test/functional/test_sample_tracking.py
@@ -341,7 +341,7 @@ class TestFormsAndRequests( TwillTestCas
request_id=self.security.encode_id( request1.id ),
strings_displayed=[ 'History of sequencing request "%s"' % request1.name,
request1.states.NEW,
- 'Request created' ],
+ 'Sequencing request created' ],
strings_not_displayed=[ request1.states.SUBMITTED,
request1.states.COMPLETE,
request1.states.REJECTED ] )
@@ -412,7 +412,7 @@ class TestFormsAndRequests( TwillTestCas
self.add_samples( cntrller='requests',
request_id=self.security.encode_id( request1.id ),
sample_value_tuples=sample_value_tuples,
- strings_displayed=[ 'Add Samples to Request "%s"' % request1.name,
+ strings_displayed=[ 'Add Samples to Sequencing Request "%s"' % request1.name,
'<input type="text" name="sample_0_name" value="Sample_1" size="10"/>' ], # sample name input field
strings_displayed_after_submit=strings_displayed_after_submit )
# check the new sample field values on the request page
@@ -446,7 +446,7 @@ class TestFormsAndRequests( TwillTestCas
self.edit_samples( cntrller='requests',
request_id=self.security.encode_id( request1.id ),
sample_value_tuples=new_sample_value_tuples,
- strings_displayed=[ 'Edit Current Samples of Request "%s"' % request1.name,
+ strings_displayed=[ 'Edit Current Samples of Sequencing Request "%s"' % request1.name,
'<input type="text" name="sample_0_name" value="Sample1" size="10"/>' ], # sample name input field
strings_displayed_after_submit=strings_displayed_after_submit )
# check the changed sample field values on the request page
@@ -465,14 +465,14 @@ class TestFormsAndRequests( TwillTestCas
self.submit_request( cntrller='requests',
request_id=self.security.encode_id( request1.id ),
request_name=request1.name,
- strings_displayed_after_submit=[ 'The request has been submitted.' ] )
+ strings_displayed_after_submit=[ 'The sequencing request has been submitted.' ] )
refresh( request1 )
# Make sure the request is showing in the 'submitted' filter
self.check_request_grid( cntrller='requests',
state=request1.states.SUBMITTED,
strings_displayed=[ request1.name ] )
# Make sure the request's state is now set to 'submitted'
- assert request1.state is not request1.states.SUBMITTED, "The state of the request '%s' should be set to '%s'" \
+ assert request1.state is not request1.states.SUBMITTED, "The state of the sequencing request '%s' should be set to '%s'" \
% ( request1.name, request1.states.SUBMITTED )
# the sample state should appear once for each sample
strings_displayed_count = [ ( request1.type.states[0].name, len( request1.samples ) ) ]
@@ -485,8 +485,8 @@ class TestFormsAndRequests( TwillTestCas
strings_displayed_count=strings_displayed_count,
strings_not_displayed=strings_not_displayed )
strings_displayed=[ 'History of sequencing request "%s"' % request1.name,
- 'Request submitted by %s' % regular_user1.email,
- 'Request created' ]
+ 'Sequencing request submitted by %s' % regular_user1.email,
+ 'Sequencing request created' ]
strings_displayed_count = [ ( request1.states.SUBMITTED, 1 ) ]
self.view_request_history( cntrller='requests',
request_id=self.security.encode_id( request1.id ),
@@ -519,7 +519,7 @@ class TestFormsAndRequests( TwillTestCas
self.add_bar_codes( cntrller='requests_admin',
request_id=self.security.encode_id( request1.id ),
bar_codes=bar_codes,
- strings_displayed=[ 'Edit Current Samples of Request "%s"' % request1.name ],
+ strings_displayed=[ 'Edit Current Samples of Sequencing Request "%s"' % request1.name ],
strings_displayed_after_submit=strings_displayed_after_submit )
# the second sample state should appear once for each sample
strings_displayed_count = [ ( request1.type.states[1].name, len( request1.samples ) ),
@@ -538,7 +538,7 @@ class TestFormsAndRequests( TwillTestCas
# check history of each sample
for sample in request1.samples:
strings_displayed = [ 'Events for Sample "%s"' % sample.name,
- 'Request submitted and sample state set to %s' % request1.type.states[0].name,
+ 'Sequencing request submitted and sample state set to %s' % request1.type.states[0].name,
request1.type.states[0].name,
request1.type.states[1].name ]
self.view_sample_history( cntrller='requests_admin',
@@ -558,9 +558,9 @@ class TestFormsAndRequests( TwillTestCas
if index > 1:
# status message
if index == len( request_type1.states ) - 1:
- status_msg = 'All samples of this request are in the final sample state (%s).' % state.name
+ status_msg = 'All samples of this sequencing request are in the final sample state (%s).' % state.name
else:
- status_msg = 'All samples of this request are in the (%s) sample state. ' % state.name
+ status_msg = 'All samples of this sequencing request are in the (%s) sample state. ' % state.name
# check email notification message
email_msg = ''
if state.id in [ email_state.id for email_state in email_notification_sample_states ]:
@@ -568,7 +568,7 @@ class TestFormsAndRequests( TwillTestCas
self.change_sample_state( request_id=self.security.encode_id( request1.id ),
sample_ids=[ sample.id for sample in request1.samples ],
new_sample_state_id=self.security.encode_id( state.id ),
- strings_displayed=[ 'Edit Current Samples of Request "%s"' % request1.name ],
+ strings_displayed=[ 'Edit Current Samples of Sequencing Request "%s"' % request1.name ],
strings_displayed_after_submit = [ status_msg, email_msg ] )
# check request history page
if index == len( request_type1.states ) - 1:
@@ -584,7 +584,7 @@ class TestFormsAndRequests( TwillTestCas
self.check_request_grid( cntrller='requests_admin',
state='Complete',
strings_displayed=[ request1.name ] )
- assert request1.state is not request1.states.COMPLETE, "The state of the request '%s' should be set to '%s'" \
+ assert request1.state is not request1.states.COMPLETE, "The state of the sequencing request '%s' should be set to '%s'" \
% ( request1.name, request1.states.COMPLETE )
# def test_045_admin_create_request_on_behalf_of_regular_user( self ):
--- a/templates/requests/common/common.mako
+++ b/templates/requests/common/common.mako
@@ -113,27 +113,23 @@
</script></%def>
-<%def name="render_editable_sample_row( cntrller, sample, sample_widget_index, sample_widget, encoded_selected_sample_ids )">
+<%def name="render_editable_sample_row( cntrller, request, sample, sample_widget_index, sample_widget, encoded_selected_sample_ids )"><%
+ trans.sa_session.refresh( request )
is_admin = cntrller == 'requests_admin' and trans.user_is_admin()
+ is_rejected = request.is_rejected
+ is_complete = request.is_complete
+ is_submitted = request.is_submitted
+ is_unsubmitted = request.is_unsubmitted
if sample:
- trans.sa_session.refresh( sample.request )
- is_complete = sample.request.is_complete
- is_rejected = request.is_rejected
- is_submitted = sample.request.is_submitted
- is_unsubmitted = sample.request.is_unsubmitted
can_delete_samples = editing_samples and request.samples and ( ( is_admin and not is_complete ) or is_unsubmitted )
display_checkboxes = editing_samples and ( is_complete or is_rejected or is_submitted )
- display_bar_code = request.samples and ( is_complete or is_rejected or is_submitted )
display_datasets = request.samples and ( is_complete or is_submitted )
else:
- is_complete = False
- is_submitted = False
- is_unsubmitted = False
can_delete_samples = False
display_checkboxes = False
- display_bar_code = False
display_datasets = False
+ display_bar_code = request.samples and ( is_complete or is_rejected or is_submitted )
%><%
if display_checkboxes and trans.security.encode_id( sample.id ) in encoded_selected_sample_ids:
@@ -152,15 +148,13 @@
</td>
%if display_bar_code:
<td valign="top">
- %if is_admin:
+ %if is_admin and is_submitted:
<input type="text" name="sample_${sample_widget_index}_bar_code" value="${sample_widget['bar_code']}" size="10"/>
%else:
${sample_widget['bar_code']}
<input type="hidden" name="sample_${sample_widget_index}_bar_code" value="${sample_widget['bar_code']}"/>
%endif
</td>
- %else:
- <td></td>
%endif
%if sample:
%if is_unsubmitted:
@@ -305,7 +299,7 @@
sample = None
%>
%if editing_samples:
- <tr>${render_editable_sample_row( cntrller, sample, sample_widget_index, sample_widget, encoded_selected_sample_ids )}</tr>
+ <tr>${render_editable_sample_row( cntrller, request, sample, sample_widget_index, sample_widget, encoded_selected_sample_ids )}</tr>
%elif sample:
<tr><td>
@@ -401,7 +395,7 @@
</tr>
%else:
## The Add sample button was clicked for this sample_widget
- <tr>${render_editable_sample_row( cntrller, None, sample_widget_index, sample_widget, encoded_selected_sample_ids )}</tr>
+ <tr>${render_editable_sample_row( cntrller, request, None, sample_widget_index, sample_widget, encoded_selected_sample_ids )}</tr>
%endif
%endfor
</tbody>
1
0