galaxy-dev
Threads by month
- ----- 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
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
September 2009
- 15 participants
- 140 discussions
16 Sep '09
details: http://www.bx.psu.edu/hg/galaxy/rev/1a56a541f9f9
changeset: 2697:1a56a541f9f9
user: Kelly Vincent <kpvincent(a)bx.psu.edu>
date: Tue Sep 15 14:26:20 2009 -0400
description:
In Bowtie wrapper tool, removed --quiet option and redirected stderr to /dev/null
1 file(s) affected in this change:
tools/sr_mapping/bowtie_wrapper.py
diffs (67 lines):
diff -r bd160d40ee15 -r 1a56a541f9f9 tools/sr_mapping/bowtie_wrapper.py
--- a/tools/sr_mapping/bowtie_wrapper.py Tue Sep 15 12:57:17 2009 -0400
+++ b/tools/sr_mapping/bowtie_wrapper.py Tue Sep 15 14:26:20 2009 -0400
@@ -69,10 +69,10 @@
if options.genomeSource == 'history':
# set up commands
if options.index_settings =='index_pre_set':
- indexing_cmds = '--quiet'
+ indexing_cmds = ''
else:
try:
- indexing_cmds = '%s %s %s %s %s %s %s --offrate %s %s %s %s %s %s %s --quiet' % \
+ indexing_cmds = '%s %s %s %s %s %s %s --offrate %s %s %s %s %s %s %s' % \
(('','--noauto')[options.iauto_b=='set'],
('','--packed')[options.ipacked=='packed'],
('','--bmax %s'%options.ibmax)[options.ibmax!='None' and options.ibmax>=1],
@@ -87,7 +87,7 @@
('','--cutoff %s'%options.icutoff)[int(options.icutoff)>0],
('','--oldpmap')[options.ioldpmap=='yes'])
except ValueError:
- indexing_cmds = '--quiet'
+ indexing_cmds = ''
# make temp directory for placement of indices and copy reference file there
tmp_dir = tempfile.gettempdir()
@@ -96,7 +96,7 @@
except Exception, erf:
stop_err('Error creating temp directory for indexing purposes\n' + str(erf))
options.ref = os.path.join(tmp_dir,os.path.split(options.ref)[1])
- cmd1 = 'cd %s; bowtie-build %s -f %s %s' % (tmp_dir, indexing_cmds, options.ref, options.ref)
+ cmd1 = 'cd %s; bowtie-build %s -f %s %s 2> /dev/null' % (tmp_dir, indexing_cmds, options.ref, options.ref)
try:
os.system(cmd1)
except Exception, erf:
@@ -105,11 +105,11 @@
# set up aligning and generate aligning command options
# automatically set threads to 8 in both cases
if options.params == 'pre_set':
- aligning_cmds = '-p %s --quiet' % options.threads
+ aligning_cmds = '-p %s' % options.threads
else:
try:
aligning_cmds = '%s %s %s %s %s %s %s %s %s %s %s %s %s %s ' \
- '%s %s %s %s %s %s %s %s %s %s %s %s -p %s --quiet' % \
+ '%s %s %s %s %s %s %s %s %s %s %s %s -p %s' % \
(('','-s %s'%options.skip)[options.skip!='None'],
('','-u %s'%options.alignLimit)[int(options.alignLimit)>0],
('','-5 %s'%options.trimH)[int(options.trimH)>=0],
@@ -138,15 +138,15 @@
('','--seed %s'%options.seed)[int(options.seed)>=0],
options.threads)
except ValueError:
- aligning_cmds = '-p %s --quiet' % options.threads
+ aligning_cmds = '-p %s' % options.threads
tmp_out = tempfile.NamedTemporaryFile()
# prepare actual aligning commands
if options.paired == 'paired':
- cmd2 = 'bowtie %s %s -1 %s -2 %s > %s' % (aligning_cmds, options.ref, options.input1, options.input2, tmp_out.name)
+ cmd2 = 'bowtie %s %s -1 %s -2 %s > %s 2> /dev/null' % (aligning_cmds, options.ref, options.input1, options.input2, tmp_out.name)
else:
- cmd2 = 'bowtie %s %s %s > %s' % (aligning_cmds, options.ref, options.input1, tmp_out.name)
+ cmd2 = 'bowtie %s %s %s > %s 2> /dev/null' % (aligning_cmds, options.ref, options.input1, tmp_out.name)
# prepare command to convert bowtie output to sam and alternative
cmd3 = 'bowtie2sam.pl %s > %s' % (tmp_out.name, options.output)
cmd4 = 'cp %s %s' % (tmp_out.name, options.output)
1
0
16 Sep '09
details: http://www.bx.psu.edu/hg/galaxy/rev/14d54c9dbd59
changeset: 2698:14d54c9dbd59
user: Kelly Vincent <kpvincent(a)bx.psu.edu>
date: Wed Sep 16 11:14:39 2009 -0400
description:
Updated BWA wrapper tool: replaced threads option to hard-coded value, changed output and test file output datatype to sam, changed test file names to standard, better cleanup of temp files, added dbkey parameter and exec_before_job method to set it. Also changed name of a FASTQ Conversions tool test file
17 file(s) affected in this change:
test-data/bwa_wrapper_in1.fastq
test-data/bwa_wrapper_in2.fastq
test-data/bwa_wrapper_in3.fastq
test-data/bwa_wrapper_in4.fastq
test-data/bwa_wrapper_in5.fastq
test-data/bwa_wrapper_in6.fastq
test-data/bwa_wrapper_out0.sam
test-data/bwa_wrapper_out0b.sam
test-data/bwa_wrapper_out1.sam
test-data/bwa_wrapper_out2.sam
test-data/bwa_wrapper_out3.sam
test-data/bwa_wrapper_out4.sam
test-data/fastq_conv_in1.fastq
tools/next_gen_conversion/fastq_conversions.xml
tools/sr_mapping/bwa_wrapper.py
tools/sr_mapping/bwa_wrapper.xml
tools/sr_mapping/bwa_wrapper_code.py
diffs (1880 lines):
diff -r 1a56a541f9f9 -r 14d54c9dbd59 test-data/bwa_wrapper_in1.fastq
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/bwa_wrapper_in1.fastq Wed Sep 16 11:14:39 2009 -0400
@@ -0,0 +1,4 @@
+@081017-and-081020:1:1:1715:1759
+GGACTCAGATAGTAATCCACGCTCCTTTAAAATATC
++
+II#IIIIIII$5+.(9IIIIIII$%*$G$A31I&&B
diff -r 1a56a541f9f9 -r 14d54c9dbd59 test-data/bwa_wrapper_in2.fastq
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/bwa_wrapper_in2.fastq Wed Sep 16 11:14:39 2009 -0400
@@ -0,0 +1,576 @@
+@1831_573_1004/1
+AATACTTTCGGCGCCCTAAACCAGCTCACTGGGG
++
+><C&&9952+C>5<.?<79,=42<292:<(9/-7
+@1831_573_1050/1
+TTTATGGGTATGGCCGCTCACAGGCCAGCGGCCT
++
+;@@17?@=>7??@A8?==@4A?A4)&+.'&+'1,
+@1831_573_1067/1
+AAGTATGAGTCATTTACCGGGATGCGAAGAAAAG
++
+++#%(',%/$,+&1#&),)&+'*'*%#$&#%('$
+@1831_573_1219/1
+CGCCCTATAATAATACAGCGCGTTAGACCGCTCA
++
+@@=4/+)5)408?'665>*/5?<61';<3,:,5-
+@1831_573_1242/1
+GCTGAATCGCACCTAGCAACTATAGCCGGGCCGC
++
+>>::>17=A5?@@=;7A=;2.60>82<8=74+;;
+@1831_573_1333/1
+AGAATCGTTACCACACACTGCGTCTGGGTATCCG
++
+='@#%3=.>)/34*117,,/6-4+.9742456<)
+@1831_573_1362/1
+CGATCTCAACCAGGTCCGCGCCCACCCCTGCCTC
++
+B@@?@@?@C@BA?@>@<@8A@?@'.8'?17:,+?
+@1831_573_1448/1
+TCACGCCGGTCCTTGACTGGCGTTCTCTTCGAGG
++
+7=A)?,.@A@@:@@<=/7)@<-#8662%9613&+
+@1831_573_1490/1
+CTCGTCATGTTACGCAAAGGCACGTCACAGCACC
++
+@@@?,@??@$><=>+%/*>*1,)?26&12'9%7.
+@1831_573_1523/1
+ATGGAACGGAACGGGTGAGGAGGGGAACGTAGGG
++
+,//*,#8''.6''6'2&27/80)%�'%#*,2'
+@1831_573_1578/1
+CGAGTAGCAAACAAGACGCCAATCCAGGCGACCC
++
+?=@<@C@?@@??=>@;7<<8<694)3511(+1<.
+@1831_573_1647/1
+AGGGGTTTACACTATTCGACTGGGTGAGAGGCGT
++
+?@@<@@???;A==@@;9?@?3=;6.4/;6:=/;4
+@1831_573_1684/1
+TTCAACTGCGTCGACGTAGCGCACAGGCGTCCGT
++
+>1:8<@39@@??9=;@@<>?@@<;<?7>76?9>?
+@1831_573_1769/1
+TGGACGTATAGTGGCGATGAGCATGTAGGTTCTC
++
+54749&&767%/7;3$-7;3#,3//#,45/#&06
+@1831_573_1853/1
+CAAAACGCCCGGGGCCTCACATGCGCGGCAGTTC
++
+4./B@@72B+/4?@?7?+@9/+99.')2<2&)2&
+@1831_573_1943/1
+ATAACGTATGGCAGTGAACGGGCGGAACCTGCCC
++
+>/*1,),@-)'0*>5'$/?6(a)/.&?8/(')A43,
+@1831_573_1977/1
+GGCGTAGGGCTCATTGTGCAAGTATCCGACCTCC
++
+@?6@8@@9A@=4633A7?9?<3:+7>'@%@?%32
+@1831_574_109/1
+TCGGTTGCGTTACTTCATGGGAGGGCTTTACATT
++
+7651#4817>@65<2:84716=788<1995.7?6
+@1831_574_148/1
+CGAACCTCGTATAACGGAGTAGTCGGAAACAGTC
++
+;->3;;3>//>0;;7=,=4-4/+>029<9<624;
+@1831_574_185/1
+CCGTTTTGCCTAGTAATGCTCGGCGCAGCGTCGC
++
+<4;%%@7>#*>97%6;+8$#<07%1372$%<54#
+@1831_574_243/1
+AGGCACCGTAACTCAGGACATTCTCGATTAGTTA
++
+@@@95@=9?*><45$<@<4%@9?7#=?>7&>?97
+@1831_574_257/1
+ATACCTTCCAAAGCAATAGAATAAAAAACAGTAC
++
+>>B>)@?>B@B?@1%*%,#+00.'(+&5&%#$3&
+@1831_574_293/1
+TGCTGCAAATAAACATACAGCCTTCTAATGACTA
++
+')7'.*%#&$'/.$##$.$&*)+*$#8%&%#&&%
+@1831_574_389/1
+CATGGCTATGCACCGGTTTGTAGCGTACTCGAGA
++
+)$>/>8):2@:213;;.1)@3%64%+)<7)+$92
+@1831_574_575/1
+TTCTTGGCAAGCGCAGATTATGCGTTCCGCCTAG
++
+?@>=?@>8@@@=@6*%&<='5@<<',0<=4*5/<
+@1831_574_592/1
+TCATTTACCACGTCAGGGTCGGAGTCATTCATTA
++
+3-5)19,,<@>4067<2.-864346;9<1/;212
+@1831_574_617/1
+AAGCATCGGCGGGAGCGCAAGCTGGGAAGGTGCC
++
+>@?;>?=@==@>@=5?@+@:@40@><:0)')64-
+@1831_574_725/1
+GACAAGATGGCTATTATTTACAATCCGATCTGCA
++
+'>?52+5=;4$6;<8.1<47*9+?7(+5;-).)4
+@1831_574_734/1
+CCTGTACGAAAGAACGTAGGCATGGGCTGGGGGG
++
+-&.$2&<*(-%):/)%5:)/%7+,9034*A.?70
+@1831_574_824/1
+AGCGCAAATTATGCGTTCCGCCTAGCGGAGAACT
++
+@@@;;),+@<-<7;<&89??&29?<$2:A<);8?
+@1831_574_959/1
+CGCGCTAGGACTCGGCCCCAAGAGACGTTCCGCC
++
+A=;+?@9;/<@;<8#&&/*%(%.0$0$2)+1$-1
+@1831_574_1062/1
+ACCGGTAATATAAGGCAACATGATTACGGCCACG
++
+@821<//:136/8<1/5.427.;>288/0<1$)/
+@1831_574_1092/1
+GACTGGCGAAATCATCGCGGAAAAACCCCTATCA
++
+8?.,98)03%#,,,(,++$'69'#9'7#';6.%2
+@1831_574_1103/1
+ATCTCCTGATTAGACATATCTCCGTAGCTCACGC
++
+??>?@=>@@A<>?=@==<:?<;58'&&):+35'1
+@1831_574_1116/1
+CACCTCACGTGAGTATAGCAGCCCGAGCGTCACC
++
+(a)++,)/)?./)%<)2>.==:8?&;44&/&,)/*4
+@1831_574_1194/1
+TTATCACATTTGGGGATCGGAAGGGACTACTTCG
++
+5>;,??9@9@?@1@@=@3=@>@4?@@94?75/,6
+@1831_574_1204/1
+CTTACTGGTCTGCTGGACATATAGTGGCGATGAA
++
+A5A5B@5:;@@,.9?A1?#.?;3),>82%)='7*
+@1831_574_1306/1
+ATTGCTTAGATCCAGTGGCGCTCAATACAACGGA
++
+2.7&%''.$&#'%##$#'#%')')$'$%$,)'.1
+@1831_574_1387/1
+GTACTTCTCAATGCTGCACTACTATGTACGCCCC
++
+?A??:@?@@9?@@?9C;:>&).,,);&'<&7(/'
+@1831_574_1431/1
+GACCAGTTTCAGGGCTAACCGTCCCTACTCGACC
++
+7?>9BA897;+8*=6#6.+5&-#26$0.,5&'$1
+@1831_574_1560/1
+GGCGTCTTAGGATTGAAGAGGGCCTCCCACCCCC
++
+))&65<4=>99@:597(1&;+&(%&4#,#&&&*$
+@1831_574_1591/1
+TGAGCACTTATGGCTAGGCGTAGGGGACCGTGAG
++
+=<A><?@78@<=;@&@6>8:?,><&&<7>8(8+9
+@1831_574_1624/1
+ACGGGAAGGGCTGGAATCTACCCAGTAGGCATTG
++
+<6.&(,7-+))7..'/;43.)927.(<85&13-)
+@1831_574_1826/1
+TACGTCGCGACCGAGCGTTATATAGTCTGACCCC
++
+@<<,))459<?.+57'-'&6?1)(;1;0&%4,#$
+@1831_574_1903/1
+AGTGCAACATCTGCTTTGCTTATCAGCACACGGC
++
+956?@>;7@@@8:@>8><=9>9>@2=71?1:6;/
+@1831_574_1961/1
+GTTTCACTTCGGTTATTAAGAAACCCAAATGGAA
++
+>-07-@>(2'@<#064@%5%@@6.&<<(9)=:47
+@1831_575_54/1
+TTTCTTATGGGTAGAACAGCTGCCACTGACTGAA
++
+=@@68<2;<8;?@<>+9>7,,6972&57:4&9<8
+@1831_575_80/1
+TCTTTGGGTTTGGGGCAATTTGGTATGTTCGTCT
++
+?5><@?/=5%(&.5)+#/0'/'>#$/'37#()6&
+@1831_575_192/1
+AACTACGCCCCTTAATTACACAGCGCGTTAGACC
++
+:8<,9(.=/)#%8$,4'<,:)3/.'.5<,>-;7'
+@1831_575_197/1
+TTCGCCTACACTTAGATACCTCTTAAACTCAATG
++
+-:?463@A:88?6?437<=.2&1.;@67.4@%2,
+@1831_575_223/1
+ACGCACAAAGGAGCTCGGCGCATAGCAACGCAGA
++
+?>?8?@:?;>+$'%&,+#$.--#%$1'&#-7$&'
+@1831_575_420/1
+CCCACATGGAAAACACTCACCGCCGAACAGAGCG
++
+2?.>?(-''2+..@),$%1@;')1)?+)7.')..
+@1831_575_434/1
+ATCGCTGCGAGGTCACCCTGGTTACGCCCCTTCC
++
+@@><@B@>=@@?>><@?;)@?;6.?=4,'';/3)
+@1831_575_444/1
+TAGGCGACCGTGAGGACAAGAGCTGTTGCCTTGA
++
+2@@;<.=?@<+=:A<<@?<</>@><(<8>4&5;>
+@1831_575_459/1
+CTTATCAGCACACGGTTTACCAGTCCGACTCCAA
++
+@@C@?A@@A@??A@@'6@@B'=;C@'4<=9,@1.
+@1831_575_506/1
+CGCAGAACCCGCACGCTTGTGCTCACCACTGTAC
++
+?)2*5@3+.7=?A:8@,/&):@37/<89'+4*)*
+@1831_575_569/1
+AGCAGACTGCTGTAACACGGTGTGGTGTAAGGAT
++
+'9-,@29+479%&>9#&08=>7#9>,69/+'*3)
+@1831_575_622/1
+CCAAATCCGGCCCAGTAAGTGTCCTGTCGCACCC
++
+A8B=@@?<@?<>>=?96<497)<4/<':4+;74+
+@1831_575_644/1
+CTTGAATGGCGATCTCGTCGAGGAAATACCACTA
++
+<8>.>&,+)8.10':5(/-62&*.=/%(.<&&18
+@1831_575_663/1
+GGCAACTTATCCGCATTGGTCCCACTGGAGCGCA
++
+@@@@A</;A>@6>0792<5966:?;25+:><1,+
+@1831_575_681/1
+TCTCCTGATTAGACATATCACTGTTGAACACAGC
++
+72?.)25;96-14'*.03'#4#++$)/8+%/((&
+@1831_575_711/1
+TATGTTCGTCCACGTCAGACGCGCAAAGTTGCGC
++
+%+:2(#'1+.)&*45-#,<A-%4;>+))<;##*&
+@1831_575_730/1
+CACACAGGAACCATAGCGTATGTTATTCACCCCC
++
+%8<%-')5,*1&=#)(1*1)->7$.,4'4'&'*&
+@1831_575_904/1
+ACCCGCTTAAAGACGTGAATTTTGCCTCCGCGCC
++
+<><.689@@7@<54:4=@>69=:+6-=42;8<:#
+@1831_575_938/1
+TCATCAGGGAAGGCTAGGGGTTTACACTATTCGA
++
+:@@:?@;=8;>=;;:=<93<4.;<6:2<9;4)87
+@1831_575_970/1
+TGACTCCTACAGTCTTTATAGTACCGAGGGAGGC
++
+@=@=;@@><@@:9<:=?;>@=?9>>?@:2===<5
+@1831_575_991/1
+TTCGGCGATCCCCCCCACGGCGCGATGCCGCGCA
++
+>>;7???/4<:::,#&*%'$--5-#(7)&&,-)%
+@1831_575_1138/1
+TTGAAAGACCTGAACGCGATTTCATGTTTACTGC
++
+=0;%1936+?96?,?5<:2>@6@<:;4>.7;*:1
+@1831_575_1157/1
+TCGCTGTTTAGATTTCGGGAGGGTACTTCAGTGC
++
+B@B>?A?A@?9'?;?&8?@@6;<@=+<:99+965
+@1831_575_1180/1
+GAATTCACGGCAGTGTTATCACCGTTTCCTTCCA
++
+<B>5?':/78?;1;55:997@@>94=7<186->7
+@1831_575_1283/1
+GGTGGAATACTAAGGACTAATGTGCTGTCTCTTT
++
+C@A54><?A78@<?2>:#>=?@2>80:'?69.'7
+@1831_575_1302/1
+CGACTATTCGTTTCGTCTAGAACGTGACACTAGC
++
+12>/#2'&-2&%'7+$%*#$/1(&&12/$,2,,*
+@1831_575_1310/1
+CTTGCTCTCGAGCTATGCCTCAGGACACGCCCTT
++
+<<>663?99@(@7=11@:@@/7??<@<;>'3-7;
+@1831_575_1321/1
+CAACACAGTTGAACGGCGGAGGAGTAAAGATGCG
++
+;B@?@>=A@<A?>@>?6>@5>'4@9?)7@7?/89
+@1831_575_1373/1
+CGCTACCGGTTCCAACGGCTGCCTGACTCGCGGA
++
+@@@>@;=9<@??7@>@:@;@;17?630/7=4,2<
+@1831_575_1419/1
+TGGGGAATATAACAGCGTAGCGTTGAACACTAGA
++
+//3->&-.->%11/@&/&7:<,-1=,+2<6'%&<
+@1831_575_1436/1
+TGCATCTAGCGCGTATTGCGAGCCTTACGGATTC
++
+2@=;39*3<*4<:>52>>9'7:<='0=>1'136<
+@1831_575_1442/1
+TCTGACAAGGTTCCTGCACCTGCGTCTGAGAGGG
++
+>58<?7>+1B6-/9<<:5?>A:1@?539.@4/1>
+@1831_575_1454/1
+CCTCCTAACCACGAGCCGAGGGGTCTCTGCCCCT
++
+4=?8=6589=0:A=:?>6<;@/,4+-6+/'.,(,
+@1831_575_1500/1
+CACAAAAGGTCCCTACCTGTCTACCCTACATAGC
++
+?@@?A@?8<6<:985=99999==B3<5<<,7?>9
+@1831_575_1535/1
+CTCGACGATATGACCGCCAGCCACTTAACTCCGC
++
+B=@<@@B?:A@@=>@?68@=?@5?7;:6<<;>5<
+@1831_575_1724/1
+TCGTAAGTGTTAAGGAGCTGTGTACAAAACAACA
++
+<B.+@),2*.%)))4%2@;7#%(%+$8))85%&5
+@1831_575_1829/1
+CATTTGCTGACCCTGCGTAGTTTAGTCTCACAGC
++
+2(*'%.3$+7)@&%$'3*+*#/#/*+0.=&#)+0
+@1831_575_1898/1
+CTTACCATATCATCTCAACCCATAACAGCACTTA
++
+B>@@&1/))'40)%#8/.%#8$((#;4'$'63,,
+@1831_575_1964/1
+GACAGACCATGAGGCTGAAGACTACTAAGTGCGT
++
+>39)@2<2/@+9?2=&)>>@*62=5&2<42.'?+
+@1831_576_32/1
+TACGCAACGATTTATGGCCTTATAATTGAGGCCA
++
+<>?>?=7<2)522;><<@40@>704<>5=23@+&
+@1831_576_74/1
+ACATTCTGCAGTGGGACAGAGCGGTACGCCGCAA
++
+=@@?@>(??<B5?@@@9<@><+><;@';>6961?
+@1831_576_86/1
+ATGAAAACGCATTAGGACAACCATAATGGCCTCA
++
+811)2:*.++5</:3+43924*))/:,6&29)2/
+@1831_576_89/1
+GCTGTTTGATTTGAGAAGAGGAATTAAGCGCCGA
++
+)69+,'.4=-,>/>(*$#)3030*'(,%)2##$,
+@1831_576_266/1
+ATGGGGTCACTCGACCTAATCCCGCGGCTTTGGT
++
+@@?=;<?7=@>9,>@1$&&89$/:>7'3178%&6
+@1831_576_327/1
+GCCGTTCTACTCTAGCTGCAACTTGCGATTGCTA
++
+@?@6@@;<@?><@>==3@:==<3@@>53<9><6=
+@1831_576_331/1
+GACGCTTTACTCCGGTAGTACCGTGCCGTTTATA
++
+-2)+(*.*1/;5%.-9&#/1'+($*$##()%/$.
+@1831_576_387/1
+ACACGCCATGATCCGATAAGAAGGGAACGTAAGG
++
+8).$5#1#*%.$##.*#$%##-%,+,1#&%.%))
+@1831_576_406/1
+AGGTCTTACAGCACGGGGCTGAGCGCATCTGACC
++
+4<>%%14:*4656)&<251&2+3#&19,6&4>5(
+@1831_576_449/1
+CTCGAACCGCGGGGTCCAAAGACTGCTGCAAGGA
++
++'&'.,,$/+.)$$8&%#+?&,#)-&###7,+#*
+@1831_576_519/1
+TACCTGCCTACTACTTGCTCTCGAGCTATGCCTC
++
+=46<97@>2/6?;2<4A881>9121+<1/4.9+7
+@1831_576_603/1
+CAATATGTCTTAGTCGTGACTCGGCAACTTATCC
++
+@46=@C.??<A79@@;-<@@>29B?>55<B7598
+@1831_576_655/1
+GAACAGTCTATAGTGGCGGGAATCTCGTCGTCAG
++
+@AA9@@<6*>@@5/<@>9'=;>7+@?9>/9;+,%
+@1831_576_677/1
+TTTACTCAGTTGATACATCACTGTAGCACATAGG
++
+290&/*0#&'&,.2'#&*$&('#-%($*#%$)#%
+@1831_576_718/1
+CGTGCCTTTCAGGGTCTTTTCTGGTCTGGTCGCT
++
+4###$0###%(#########,####%####$###
+@1831_576_722/1
+CGTATGATGGCGAGTCTTTATAATCCAATCTGAA
++
+*,-,##.)*&(*1%*(%(-2#+)-#.&-#%%$')
+@1831_576_754/1
+AGGCGTCCTGCATCGACCGTTCTATCCGCTTAGA
++
+4//#(.$)'',>($<,##%((,#5?#0*%1*
+@1831_576_815/1
+TAGGCCTGATATGACACGATCACAGTGCAACATC
++
+3>@?9>@?B=>=;>A???=>:25=4.25?6<57.
+@1831_576_882/1
+TGTAAGACGGTGAGGTGTAAGGATCAGACCACGG
++
+26?8?@:4>@>96??<<=5'1<>9846=<9<1>8
+@1831_576_898/1
+AGTACTGTCGCGCATTGGGGTCCTGGTCGTTGCT
++
+@@C2?C>?<>@886B?;?.??87=B<8<15??=.
+@1831_576_923/1
+CTGGACATGAGAGACTGCACGCGGTACACGTCGG
++
+6.51=;.699<96>;;49<;;11;<@59:9=647
+@1831_576_930/1
+CTGGCATGTACGTCCATGTCAGACGAGCAGAACT
++
+#*0.2&.:((#'14'##-)#%$$2%#$/1&#%/#
+@1831_576_1019/1
+GATGCGCGCTGTCATGGCATCGAACCATCGGTCG
++
+<$>$,1,&++&@,.)'+/+#9'69/6'2(+-'9-
+@1831_576_1068/1
+AAGAGTGACTCACTTACCGGGATGCGATGGAGCC
++
+>><=4?;@7=??9?;9>5@9?:8@:=5';7;'#4
+@1831_576_1131/1
+AGTTCGGGAAGGGCTGGAATCTACCCAGTAGGCA
++
+04@#@/@,4>9?2+?1571@',>=;(759;*92<
+@1831_576_1168/1
+CACTTAACTCCGCTGTCGGAAGCCTTACAAGACA
++
+@CC6@@2?9=>7?;76<;467@;9,0%26'',4$
+@1831_576_1207/1
+CAACCTGACTAAACGGGGATACGCTGGCGCTACA
++
+$>2,(&?4?(,@:<&,@>?$&:8A%%=0.%,597
+@1831_576_1289/1
+TAGCGCAAGTCCAGAATGTTCATAGACTCGCGAT
++
+9<>1B@@;7@@663==28,5':8<<,.=2>>.50
+@1831_576_1329/1
+CCAATAGCAGAGACCTAATAGGAAACGAAAGCAA
++
+>&0,870/A@@/5.;=;:'&@3'&$$%,+#($&2
+@1831_576_1367/1
+GGTCTCATCCGTTCCAATCGGGACTTTGACCAGT
++
+?@@<>@@=@<@<=@>@??9:?<=>=<8;59@787
+@1831_576_1416/1
+TAGCGTTCAACGTCGATCTCATCTTGCCGATGGC
++
+';?..1.<@'.=+6.5?7<0-?7;(%=>56.98@
+@1831_576_1461/1
+GAGGGGCGGCCCGGTTCAAGCAGGTAAGCAACAA
++
+1&74#(#(&##$#,'###%#%%#*#&%%##%%%'
+@1831_576_1605/1
+AGTGCAACATCTGCTTTGCTTATCAGCACACGGC
++
+<@C@@>1;@:;<<@@9@???9<3?5-21=4877,
+@1831_576_1664/1
+CGCGCACAACTCGCCATGATACGACAAGACCCGA
++
+@?>?@=A:@@>@='=<>=).>=9*8)(7#/++;)
+@1831_576_1671/1
+GTCTTTGTAAGCCTGGCCTGGTCAGGTCTGGTCT
++
+@?@5>@@8&8?25#&)&5&&)15&&,&4%&,&6%
+@1831_576_1729/1
+CGTTTCGTCTACAACGTGACACTAGCACAGTATA
++
+?@?<?<@>A?/==?>?7>?@8<?@>99;><+0=>
+@1831_576_1880/1
+TATGCGCTGTTGAGCTTACAACTCACTAGCGAAT
++
+515/792,:,7/%/05,%$):+#8%2(1754))3
+@1831_576_1982/1
+AATGTCGTCAGACGACTTTGGCGCGAAAACCATA
++
+@@?@,A><@9@=?@9B=8<6@@6@2<A?>.7<+@
+@1831_576_1987/1
+AAGGTCTTCTGTCGGCGCTGGACTGAACACCTGA
++
+##()(#&##)%)/-#%$11#%3>'##&$,#$$'+
+@1831_576_2014/1
+CCGTGACACACAATGCCGGCCCCAGCCTAGCAAT
++
+@@9,B29-5>'?,+?79+/A';'2@'5&/9,6&1
+@1831_576_2028/1
+ACTCGCCGCATCCCCGAGTGACGCTCGAGACCAA
++
+<>9>5'2(&707.8#&&39,0%7/#(#,*%&5*+
+@1831_577_40/1
+CCCCGCGTTACGAACGAGAGAAATCTCTTATAAT
++
+2/4('.')(<*?#$)%&<,/39<(.2,+<=@611
+@1831_577_119/1
+TCCCACAAGCCATTGACATGCTCGCTCTAAACAG
++
+>?C11)-1/)#;#/,850*+.+$$5550+%-.40
+@1831_577_133/1
+TGCTTGTACGGTCTAACGGGGTATGGGTTTCTGG
++
+4@>>?=1?:+>@07@@><>@*<+1@15)96'2$)
+@1831_577_255/1
+ATTGAGGCCAAGATAATTGAGGAGAGAGAAGGTG
++
+<=87@>69%**#&#-+$.#&&#+$-+%&%.,%5#
+@1831_577_281/1
+TATGTACGTCGCGTACACTCCGGGGCCCGCAAAA
++
+-:B;8@=;>7@>4?=?+659?;5<7?;9@8(>:?
+@1831_577_288/1
+CATCCGAGGCTATCAAGGCGTAAGCACTGACCTA
++
+;/79??&=B::298*6.7/+4&21,7,6?.7#'6
+@1831_577_322/1
+GAATGCTGGAGTACATTATGACAAACTATCGGAG
++
+=;>4506;255464-<#7+194&2<?65968)7/
+@1831_577_362/1
+CGATTAGTTACCACTCGTATTCGCACGCCCAGGA
++
+2B?:@?@<?958=,3:,90:&'-99,6<5.($+6
+@1831_577_382/1
+GTCGCGTATTCCCCGATGCTATGTAGACTTGCAA
++
+2957/:1))=76(*24;,3+:<.&.&-=1=2/5*
+@1831_577_464/1
+TAGAGGCACCCTAACTCAGGGCTTTCTCGATTAG
++
+=<7/<826)>#.'&4204+5#/041.7*91&756
+@1831_577_488/1
+TGAATAGTTATGGCCAGAATGTCTGCACCGATAC
++
+48.,*>6566<?8=<=<2>6;94>;=9>@8924@
+@1831_577_511/1
+GGTGCTTATCAGTTCTTTCTCGGGACTTGTATTT
++
+7/+&$:<7%6,$$%'%/+)#$7((&*3>16'0/+
+@1831_577_545/1
+ACCGCTCTTTGGGTATGGGGCAATCTGGCATGTT
++
+><<9?<>?A<481@<@8==@76/61<95.5988-
+@1831_577_559/1
+GTGCCACTATGTTCGACAGACCCTAAGGCGGAAG
++
+<@;??@>@?/2<.@1=>12=61/;=?.&2+92)'
+@1831_577_562/1
+GTTCCACTACGTTCCACGCAAAGGAATCCGAATC
++
+((&*&0%)1%)#($2-,***%/-,,))&,-.1'*
+@1831_577_637/1
+GCCTTCGCGGGAGCATATCAGTCGATACATCCCA
++
+-,4#>:-6+:8,&(5;3=0>7=68&1/9&'?;4,
+@1831_577_641/1
+TATCTACCACCGCGGTGGCGCGAGAATGCTCCCT
++
+47;/':A;;5?:72,(=),#*?+.#&7$8#%7/'
+@1831_577_692/1
+CCGGTGAGAATTACATCGCGAGTACGCCCAAGGA
++
+B,@?@B(@A?@+@@>@+?=>@'=<@<=<9=?75<
diff -r 1a56a541f9f9 -r 14d54c9dbd59 test-data/bwa_wrapper_in3.fastq
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/bwa_wrapper_in3.fastq Wed Sep 16 11:14:39 2009 -0400
@@ -0,0 +1,192 @@
+@1378_11_329/2
+GTTCGTGGCCGGTGGGTGTTTGGG
++
+###$$#$#$&#####$'$#$###$
+@1378_17_1788/2
+TGGGTGGATGTGTTGTCGTTCATG
++
+#$#$###$#$#######$#$####
+@1378_25_2035/2
+GTGCGTCGGGGAGGGTGCTGTCGG
++
+######%#$%#$$###($###&&%
+@1378_28_770/2
+GGTTGGGAGTTGGCGCGCGTGGTT
++
+###$##%%$####%#%$#%%#($$
+@1378_33_1945/2
+GGGGGGGGGGGGGGGGGGGGGGGG
++
+.6;?;55697>8779457986264
+@1378_34_789/2
+GGGCTTGCGTTAGTGAGAGGTTGT
++
+###%$%$%%###$####$###$#&
+@1378_35_263/2
+GGCGGGGGGGGGGGGGGGGGGGGG
++
+$%%&,)3/)%$-6'$&5&#$''5.
+@1378_43_186/2
+GCTAGGGTTTGGGTTTGCGGTGGG
++
+$%#$########%##%#$###'#'
+@1378_51_1671/2
+GGTGTTGTTCGGATGTAGCGTGGG
++
+##%$$####$########$##0##
+@1378_56_324/2
+GCTGGGTGATCTAAGGAATGTAAT
++
+#$#####$$$#$$$$##%###*(#
+@1378_56_773/2
+TCTGGTCGGTTTCGGGGAGTGGAA
++
+##%%#&$###$#$##%$####%%$
+@1378_62_2027/2
+GTTGGCCTGGCCTGCCGTGCTGCG
++
+*##),/%##$)#%##1$#'%.#&#
+@1378_62_2029/2
+GGCGGTGTGTGGTGCGGCTGTGCG
++
+/$$$=(####%####)$$%$-&%#
+@1378_67_1795/2
+CGTGCCAACGACCGTCCTACGGAG
++
+@@.?7@@@.@:@A<<>>=>70<@7
+@1378_68_466/2
+GTGTCATCTGAGGTAAAGCATTGT
++
+/##$09#$#.=$#$76+$%1'###
+@1378_68_1692/2
+TGTTCGATTTAGGTCTTGCCTCGC
++
+###%%$%%##%$#$##$###$$#$
+@1378_80_664/2
+TGTCTGCGTTGTATCTCTGGTGTA
++
+%##%,%$$#&$$###$#$%##'%#
+@1378_85_1786/2
+CCCTAGGAGCGTATACCGGACGAG
++
+,'&/%/@,&1,&'/)&,6&&1)((
+@1378_86_1011/2
+AGGCGATGGGATATTATTTTACTT
++
+:$###)%##$9$###1$$#$2###
+@1378_86_1789/2
+GGCCAGGTACTAATAAATTCAACA
++
+1.51/&%#'$,*?%#6&0$$5,20
+@1378_91_1596/2
+GCTTTTTCATTCGGTGCCTTTGGA
++
+'>%/3%=()8'#.%?50$&5>%)%
+@1378_94_1595/2
+GCGGGTTAACCCAGTACCTCTGGC
++
+,8@6'>8<76>@@(->9)7'*941
+@1378_95_1039/2
+GTTCTGTGCCAGGTGAGGTACGGA
++
+&##,./#$&)6##+,'#$$0(##$
+@1378_95_1767/2
+CTAATTGACCGGGCAAGCTATTAA
++
+',,2'(10/>:=/7).3&%6&)&6
+@1378_96_1037/2
+CTGCTGGGCCATTTGACTTACTCA
++
+'$#+#(##-%5##+*&###-.$$$
+@1378_96_1764/2
+TCTTTGTAACCCACTTAGTATTTC
++
+4='28>.@4881B807:822>%)1
+@1378_98_1574/2
+AGGCGAGTGTGGGGGTTGTTTGAG
++
++%%$#)##%##$####%###$%$#
+@1378_107_1647/2
+GGTCTGGTTCTATGTTGGTCGACT
++
+###'$$#$$$(#%###(#$##$%#
+@1378_111_829/2
+GGTCTTCTATGGTGCTAAATTAGT
++
+$##'&###$##)#%($#$%#$'%#
+@1378_111_1900/2
+GCACGCCTTTGGGCTAAGCCGTAA
++
+)$)'#%$########$'#&%$#(#
+@1378_112_1483/2
+TGGAGTGGTGTGTTTGCTGAGCCA
++
+#$#)#############$#%#%'%
+@1378_125_1287/2
+TGACGTGGGTTGTCCCGTGAGATT
++
+##$%%#$###$##$$#&%##$(%%
+@1378_126_468/2
+AAAAAACGGGCCGGGCGGACTAGG
++
+@@B@@@>@2>1+?:92)>@8&&<+
+@1378_127_664/2
+TCGCTTTGCCTATGTTTGTTCGGA
++
+#%$%#&##$%#%%###$$###)-'
+@1378_129_463/2
+AAAAAAAAAAAAAAAAAAAAAAAA
++
+,)&20%8'(&35-***1-2&+510
+@1378_129_875/2
+GACCTTTACGTATTGGGGGTTGGC
++
+###)###+###$##$#&%##$,#$
+@1378_140_1251/2
+TTTCCTTCGTGTGCGTGCGGAGTG
++
+#%#%$##$$$######.$$$%#%(
+@1378_141_809/2
+TCTCGTGGTTTCTTTTTTATGTGT
++
+##%)##$$#####%$#$#%%#'##
+@1378_144_983/2
+GTTCGTTCGTGGTGTACGAGGGTG
++
+#(#%#####($#%##$$#%##%#)
+@1378_153_270/2
+GGCCGTGTGCGGGTGTAGATTGGA
++
+%$##($######&##$&$$$$%##
+@1378_155_1689/2
+CGCGTTCGGACAAAGCTAGCACCT
++
+@4@@=6=@@<4:@@681@@@.24.
+@1378_157_1580/2
+GGGATTGAAGGGATGTATGCTAGG
++
+#%$&%#$$'%$%#$##*#%$$$$#
+@1378_161_317/2
+AATCCATACCCACAAAAGCAGGCC
++
+.&%','(@''?7//+&)+2.+)0)
+@1378_177_735/2
+CGAGCCCTAAACCATGAGATCGGA
++
+@@B>@AC9@A<B8@=9>7@5)>,0
+@1378_181_1684/2
+TTTCTGTTGTGGTTTTGTTGGGGT
++
+$##'$%'##%##$%$#$$####$*
+@1378_187_1407/2
+TTGGGTGAAATCTTGTCGAGTGGA
++
+####&##$$###$#####%##%%)
+@1378_203_721/2
+CCTTTACGATCATAAACCATGACC
++
+9<&./1&@;12')?<1',?/)&/.
+@1378_206_2039/2
+CCCCCCCCCCCCCCCCCCCCCCCC
++
+?=>>?=:;<>>4::<=56199(05
diff -r 1a56a541f9f9 -r 14d54c9dbd59 test-data/bwa_wrapper_in4.fastq
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/bwa_wrapper_in4.fastq Wed Sep 16 11:14:39 2009 -0400
@@ -0,0 +1,192 @@
+@1378_11_329/1
+AGACCGGGCGGGGTGGCGTTCGGT
++
+%##+'#######%###$#$##$(#
+@1378_17_1788/1
+TGCCGTGTCTTGCTAACGCCGATT
++
+#'#$$#$###%%##$$$$######
+@1378_25_2035/1
+CTGCGTGTTGGTGTCTACTGGGGT
++
+#%#'##$#$##&%#%$$$%#%#'#
+@1378_28_770/1
+CTGCTATGCCGGCCGCCTGCCCCT
++
+%##(#$$#%$#$%###$%%$##$#
+@1378_33_1945/1
+GGGGGGGGGGGGGGGGGGGGGGGG
++
++9;64287788752796/576352
+@1378_34_789/1
+ATGGTGGCTGACGCGTTTGACTGT
++
+#$##%#$##$&$#%##$##$###$
+@1378_35_263/1
+GGGCGGGGGGCGGCGGGGGGGGGG
++
+),,#%'$)'-(%&%'%',%%&&(&
+@1378_43_186/1
+ATACTAGTTGGGACGCGTTGTGCT
++
+#$(4%$########$#$###$$$#
+@1378_51_1671/1
+TGGGTAGGTGCGGCTCTTGCGGTC
++
+##$#$%###%%#%#$##$$#####
+@1378_56_324/1
+AGGCTTGGATTGTTGCGCTGACCT
++
+/+#**###%%##%#####$$$#$#
+@1378_56_773/1
+TGTCGTGAGGTCACTTATCCCCAT
++
+&%#%##%%#####&#$%##$%##$
+@1378_62_2027/1
+CTTCCACGATCTGCTCGCTGTGGT
++
+(#&&$##$$#$%#%$$$#$###'#
+@1378_62_2029/1
+TCTGGGCTGTCTTCGGGTCGGTGT
++
+$%$$####$##$$#)##%%#$###
+@1378_67_1795/1
+TAGTGGGCTAGTCCGGGATCTACC
++
+B@C2@@?;-@@1>'A@@91@.@1'
+@1378_68_466/1
+GTGATCGTCGGTGCCAGTCCCTGT
++
+#(%)+##$#$#%#+$%##$#####
+@1378_68_1692/1
+GGTCTTCTGGGCACGGGCCAAGTT
++
+###)%'&%##$###%#######$#
+@1378_80_664/1
+CTGCTTTGATCCCCGGTGGAGCAC
++
+7#%###$$6#######$##$$$##
+@1378_85_1786/1
+ATACTATGTCGATCTGTAAAAAAA
++
+)&.)#3%(a)$&%-,2#&+.-%0&./
+@1378_86_1011/1
+CTACGTTATTGCTCTGTTTGTCCT
++
+######$%##$$$%###%#$####
+@1378_86_1789/1
+CGAATATCCCCTGGTTTAGAAGTA
++
+61?1;@/>@<=/(.7'(<5@=%$=
+@1378_91_1596/1
+TTAGCGGTTGACTATCTGCTGACA
++
+*&+'#9'(%*'#//,&<),/)'*#
+@1378_94_1595/1
+CGTGCGACAGCCCATGTTTTCAGA
++
+-=..5,3826&*+.+#+#%%6;%#
+@1378_95_1039/1
+CGGCGTCCATCTTCGCCTTGAGAT
++
+$##.#$##$$#%$#$%%$###$)$
+@1378_95_1767/1
+ACACGCACCATCTGGCGGCTAACC
++
+86<65<4<C27/$5+#;-$+#2%$
+@1378_96_1037/1
+ATCCCCCAAGATGCCTGTTGATTG
++
+$#$'##$$$#%$$#%###+##$#$
+@1378_96_1764/1
+TACACCGGAACCTTGCACTAAAGC
++
+6-9'<#+81?+*<8-=69&6;*3)
+@1378_98_1574/1
+GTTCTGCCGGTGTCTGTGGCGGGC
++
+$$#+&$$####%$$$###$%#%%#
+@1378_107_1647/1
+AGGCCTACTACGCGTCATTGATAG
++
+&#$$#$(.#%#$$####&$%##($
+@1378_111_829/1
+TGCGGCACTTGCTTCTTCGTATTT
++
+%#%##%#$%#$#%###$$##&#$$
+@1378_111_1900/1
+TCCCCTCGCTCGGCTCTGTGCTGT
++
+$&%*$#(#)##$#'##%(##$#$%
+@1378_112_1483/1
+TGTCCAGCTATGCGGCTTCCTCCT
++
+%#$+#%#&#$#####%####%$##
+@1378_125_1287/1
+TGTCTCTGGGGGGCCTGGTTAGGT
++
+$##13$'%#$###$$###$$$#&#
+@1378_126_468/1
+TCTCCTGATTAGACATATCTCCGT
++
+7>@318?=,=8@49579?..7,7)
+@1378_127_664/1
+AGAGGTTGGTGTCTTGTCGCAGCT
++
+##'#$######$$%######$$$#
+@1378_129_463/1
+CCTGTGGGCCAAGCCCAATGAAAG
++
+8),,<6(--)<()5&.&/8+;.2+
+@1378_129_875/1
+TTTCTATGGCTTACGCTGTCTGCC
++
+#$($##%####%$#$#####$###
+@1378_140_1251/1
+ATCCTAGCGCGGTGTCTTGGGGAC
++
+#$%1#$$$##$##$#$#$##$%$$
+@1378_141_809/1
+TGTCCTCCAGTGTCTGTTGGGTGT
++
+%&,-##$$#(%###$#$$'###'#
+@1378_144_983/1
+AGCGCCCGGTTGGTGCGGCTCGTC
++
+-$(&%*$#*#))#$$$#%%$#$##
+@1378_153_270/1
+AGTCCTTGTCCCCTGGGTTTTCCC
++
++''$#&%$%#$##&$$($#&#$$#
+@1378_155_1689/1
+TTGGGAGGGAGAGAGACTAGACCG
++
+?4@@4<<??<?-@4@=4<5<?:/>
+@1378_157_1580/1
+TGGGCCTCGGTGCCCTTGGTCTGT
++
+#%)$##'#$$$&#####%#$#$##
+@1378_161_317/1
+TTGGCCGGCAACCCCGGTACCTAA
++
+7<,<'@)@>.)2@/')'&(?/-<(
+@1378_177_735/1
+AGTACGCCATGTATTTGCGACCAG
++
+=?@?C<88@=>:7>@55/.,416,
+@1378_181_1684/1
+CGACTCCCGCATTCACGGTCAAGT
++
+&*#,##$#&$*$$#$#$$$#%$##
+@1378_187_1407/1
+TGGCGTCCACTCGTGGGTCTATCG
++
+$#$'%#$%$%&$%#####$#$#%#
+@1378_203_721/1
+CCTAAATAACCCAGGGTAAAAGAT
++
+9<1+2+1@=259@+;2.71&@+2&
+@1378_206_2039/1
+CCCCCCCCCCCCCCCCCCCCCCCC
++
+9@?8>;>>><<994;=895895-8
diff -r 1a56a541f9f9 -r 14d54c9dbd59 test-data/bwa_wrapper_in5.fastq
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/bwa_wrapper_in5.fastq Wed Sep 16 11:14:39 2009 -0400
@@ -0,0 +1,4 @@
+@081017-and-081020:1:1:1715:1759/2
+ACGCTCCTTTAAAATATC
++/2
+IIIII$%*$G$A31I&&B
diff -r 1a56a541f9f9 -r 14d54c9dbd59 test-data/bwa_wrapper_in6.fastq
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/bwa_wrapper_in6.fastq Wed Sep 16 11:14:39 2009 -0400
@@ -0,0 +1,4 @@
+@081017-and-081020:1:1:1715:1759/1
+GGACTCAGATAGTAATCC
++/1
+II#IIIIIII$5+.(9II
diff -r 1a56a541f9f9 -r 14d54c9dbd59 test-data/bwa_wrapper_out0.sam
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/bwa_wrapper_out0.sam Wed Sep 16 11:14:39 2009 -0400
@@ -0,0 +1,2 @@
+@SQ SN:PHIX174 LN:5386
+081017-and-081020:1:1:1715:1759 16 PHIX174 322 25 36M * 0 0 GATATTTTAAAGGAGCGTGGATTACTATCTGAGTCC B&&I13A$G$*%$IIIIIII9(.+5$IIIIIII#II XT:A:U NM:i:2 X0:i:1 X1:i:0 XM:i:2 XO:i:0 XG:i:0 MD:Z:2C8A24
diff -r 1a56a541f9f9 -r 14d54c9dbd59 test-data/bwa_wrapper_out0b.sam
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/bwa_wrapper_out0b.sam Wed Sep 16 11:14:39 2009 -0400
@@ -0,0 +1,145 @@
+@SQ SN:phiX LN:5386
+1831_573_1004 0 phiX 278 25 33M1S * 0 0 TTAGATATGAGTCACATTTTGTTCATGGTAGAGG ]]>!4[WPFW]\ZSV]\YNRZOWWTTU]MJQEM XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:2 XO:i:0 XG:i:0 MD:Z:33
+1831_573_1050 4 * 0 0 * * 0 0 TTTATGGGTATGGCCGCTCACAGGCCAGCGGCCT ;@@17?@=>7??@A8?==@4A?A4)&+.'&+'1,
+1831_573_1067 4 * 0 0 * * 0 0 AAGTATGAGTCATTTACCGGGATGCGAAGAAAAG ++#%(',%/$,+&1#&),)&+'*'*%#$&#%('$
+1831_573_1219 16 phiX 2202 37 1S33M * 0 0 TACGTCACCTTATCAGTCCAATTTAAATTACACT XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:33
+1831_573_1242 0 phiX 648 37 33M1S * 0 0 CATCCCGTCAACATTCAAACGGCCTGTCTCATCC ]]]]XQ]]]]]]]][]]]VIMOW]SW]]]T*1] XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:1 XO:i:0 XG:i:0 MD:Z:33
+1831_573_1333 4 * 0 0 * * 0 0 AGAATCGTTACCACACACTGCGTCTGGGTATCCG ='@#%3=.>)/34*117,,/6-4+.9742456<)
+1831_573_1362 4 * 0 0 * * 0 0 CGATCTCAACCAGGTCCGCGCCCACCCCTGCCTC B@@?@@?@C@BA?@>@<@8A@?@'.8'?17:,+?
+1831_573_1448 16 phiX 2563 25 1S33M * 0 0 CGAAGTAACGTAAGTCTACCTATGTAGACAGTTG XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:2 XO:i:0 XG:i:0 MD:Z:33
+1831_573_1490 0 phiX 1767 25 33M1S * 0 0 CGTCGTTAGGCCAGTTTTCTGGTCGTGTTCAACC ]]]TU]]]=;]]]R9=BQQDF>QZQ1,LBIGEN XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:2 XO:i:0 XG:i:0 MD:Z:33
+1831_573_1523 4 * 0 0 * * 0 0 ATGGAACGGAACGGGTGAGGAGGGGAACGTAGGG ,//*,#8''.6''6'2&27/80)%�'%#*,2'
+1831_573_1578 4 * 0 0 * * 0 0 CGAGTAGCAAACAAGACGCCAATCCAGGCGACCC ?=@<@C@?@@??=>@;7<<8<694)3511(+1<.
+1831_573_1647 16 phiX 1118 37 1S33M * 0 0 ACTGAGGAAGCTCTACCTGCGGCAACCGCGAGAG XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:33
+1831_573_1684 16 phiX 3696 37 1S33M * 0 0 ATCACGACTCCAACTGAATCAAGTAGTCGTTTGC XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:33
+1831_573_1769 4 * 0 0 * * 0 0 TGGACGTATAGTGGCGATGAGCATGTAGGTTCTC 54749&&767%/7;3$-7;3#,3//#,45/#&06
+1831_573_1853 4 * 0 0 * * 0 0 CAAAACGCCCGGGGCCTCACATGCGCGGCAGTTC 4./B@@72B+/4?@?7?+@9/+99.')2<2&)2&
+1831_573_1943 4 * 0 0 * * 0 0 ATAACGTATGGCAGTGAACGGGCGGAACCTGCCC >/*1,),@-)'0*>5'$/?6(a)/.&?8/(')A43,
+1831_573_1977 4 * 0 0 * * 0 0 GGCGTAGGGCTCATTGTGCAAGTATCCGACCTCC @?6@8@@9A@=4633A7?9?<3:+7>'@%@?%32
+1831_574_109 0 phiX 3729 37 33M1S * 0 0 CAGAATCAGCGGTATGGCTCTTCTCATATTGGCT VTO/2URQ]]]TZWU[UTQP\]XY]VS[WLN]] XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:1 XO:i:0 XG:i:0 MD:Z:33
+1831_574_148 16 phiX 2369 37 1S33M * 0 0 GATCCAAAAGACGAATCCTCAAATTAGTACAAAG XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:33
+1831_574_185 4 * 0 0 * * 0 0 CCGTTTTGCCTAGTAATGCTCGGCGCAGCGTCGC <4;%%@7>#*>97%6;+8$#<07%1372$%<54#
+1831_574_243 0 phiX 2129 37 33M1S * 0 0 TCTGGTGATTTGCAAGAACGCGTACTTATTCGCA ]]]W]]]]RQ]YRBI]]Y0<]]]CI]]]FM]]Y XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:1 XO:i:0 XG:i:0 MD:Z:33
+1831_574_257 4 * 0 0 * * 0 0 ATACCTTCCAAAGCAATAGAATAAAAAACAGTAC >>B>)@?>B@B?@1%*%,#+00.'(+&5&%#$3&
+1831_574_293 4 * 0 0 * * 0 0 TGCTGCAAATAAACATACAGCCTTCTAATGACTA ')7'.*%#&$'/.$##$.$&*)+*$#8%&%#&&%
+1831_574_389 4 * 0 0 * * 0 0 CATGGCTATGCACCGGTTTGTAGCGTACTCGAGA )$>/>8):2@:213;;.1)@3%64%+)<7)+$92
+1831_574_575 16 phiX 4006 37 1S33M * 0 0 CTTACAGTGCGACTAATAAAACTGAAACTCGCAT XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:1 XO:i:0 XG:i:0 MD:Z:33
+1831_574_592 16 phiX 2950 37 1S33M * 0 0 TCGCCATAACGAAGACGAGAACGACCACCGCGGT XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:33
+1831_574_617 4 * 0 0 * * 0 0 AAGCATCGGCGGGAGCGCAAGCTGGGAAGGTGCC >@?;>?=@==@>@=5?@+@:@40@><:0)')64-
+1831_574_725 4 * 0 0 * * 0 0 GACAAGATGGCTATTATTTACAATCCGATCTGCA '>?52+5=;4$6;<8.1<47*9+?7(+5;-).)4
+1831_574_734 16 phiX 5263 25 1S33M * 0 0 CCTCTCTACTCTAACTCCGACCCTTTTCAATGAC XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:2 XO:i:0 XG:i:0 MD:Z:33
+1831_574_824 16 phiX 3997 37 1S33M * 0 0 ATGGGAAGACTTACAGTGCGACTAATAAAACTGA XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:33
+1831_574_959 4 * 0 0 * * 0 0 CGCGCTAGGACTCGGCCCCAAGAGACGTTCCGCC A=;+?@9;/<@;<8#&&/*%(%.0$0$2)+1$-1
+1831_574_1062 4 * 0 0 * * 0 0 ACCGGTAATATAAGGCAACATGATTACGGCCACG @821<//:136/8<1/5.427.;>288/0<1$)/
+1831_574_1092 4 * 0 0 * * 0 0 GACTGGCGAAATCATCGCGGAAAAACCCCTATCA 8?.,98)03%#,,,(,++$'69'#9'7#';6.%2
+1831_574_1103 4 * 0 0 * * 0 0 ATCTCCTGATTAGACATATCTCCGTAGCTCACGC ??>?@=>@@A<>?=@==<:?<;58'&&):+35'1
+1831_574_1116 4 * 0 0 * * 0 0 CACCTCACGTGAGTATAGCAGCCCGAGCGTCACC @++,)/)?./)%<)2>.==:8?&;44&/&,)/*4
+1831_574_1194 0 phiX 1136 37 33M1S * 0 0 GCCGTTGGCGCTCTCCGTCTTTCTCCATTGCGTG \]PT]]]]]]]ZZ]]]\Y]]]]\]]]V\]UMDK XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:33
+1831_574_1204 16 phiX 1445 25 1S33M * 0 0 TGGATTACTCGAATTAGTTCTACTACGAGCAATA XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:2 XO:i:0 XG:i:0 MD:Z:33
+1831_574_1306 4 * 0 0 * * 0 0 ATTGCTTAGATCCAGTGGCGCTCAATACAACGGA 2.7&%''.$&#'%##$#'#%')')$'$%$,)'.1
+1831_574_1387 4 * 0 0 * * 0 0 GTACTTCTCAATGCTGCACTACTATGTACGCCCC ?A??:@?@@9?@@?9C;:>&).,,);&'<&7(/'
+1831_574_1431 4 * 0 0 * * 0 0 GACCAGTTTCAGGGCTAACCGTCCCTACTCGACC 7?>9BA897;+8*=6#6.+5&-#26$0.,5&'$1
+1831_574_1560 4 * 0 0 * * 0 0 GGCGTCTTAGGATTGAAGAGGGCCTCCCACCCCC ))&65<4=>99@:597(1&;+&(%&4#,#&&&*$
+1831_574_1591 16 phiX 5118 37 1S33M * 0 0 CTTCGACAAGTCTTAGTCTTACTCGGCGTTGAAG XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:1 XO:i:0 XG:i:0 MD:Z:33
+1831_574_1624 16 phiX 4058 37 1S33M * 0 0 CATAACTCCGAACACCGTAAAGATGAGAAAGAGT XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:33
+1831_574_1826 4 * 0 0 * * 0 0 TACGTCGCGACCGAGCGTTATATAGTCTGACCCC @<<,))459<?.+57'-'&6?1)(;1;0&%4,#$
+1831_574_1903 0 phiX 5209 37 33M1S * 0 0 AGCTGGGTTACGACGCGACGCCGTTCAACCAGAC WT]]]][]]]][]]]]]]]]]]][X]QYYTYZ- XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:1 XO:i:0 XG:i:0 MD:Z:33
+1831_574_1961 0 phiX 3555 25 33M1S * 0 0 CGCGTTGCGTCTATTATGGAAAACACCAATCTTA TFPMV]OCBP]H<OS]<1CN]]M=K]52KO]WT XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:2 XO:i:0 XG:i:0 MD:Z:33
+1831_575_54 16 phiX 3587 37 1S33M * 0 0 TAAGGTTCGTTGTCGTCCAAAGGCTCTAATACGC XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:1 XO:i:0 XG:i:0 MD:Z:33
+1831_575_80 4 * 0 0 * * 0 0 TCTTTGGGTTTGGGGCAATTTGGTATGTTCGTCT ?5><@?/=5%(&.5)+#/0'/'>#$/'37#()6&
+1831_575_192 4 * 0 0 * * 0 0 AACTACGCCCCTTAATTACACAGCGCGTTAGACC :8<,9(.=/)#%8$,4'<,:)3/.'.5<,>-;7'
+1831_575_197 16 phiX 4861 37 1S33M * 0 0 CCGAACGTTTTATGCACCGGAATACCAATGTCAT XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:1 XO:i:0 XG:i:0 MD:Z:33
+1831_575_223 4 * 0 0 * * 0 0 ACGCACAAAGGAGCTCGGCGCATAGCAACGCAGA ?>?8?@:?;>+$'%&,+#$.--#%$1'&#-7$&'
+1831_575_420 4 * 0 0 * * 0 0 CCCACATGGAAAACACTCACCGCCGAACAGAGCG 2?.>?(-''2+..@),$%1@;')1)?+)7.')..
+1831_575_434 4 * 0 0 * * 0 0 ATCGCTGCGAGGTCACCCTGGTTACGCCCCTTCC @@><@B@>=@@?>><@?;)@?;6.?=4,'';/3)
+1831_575_444 16 phiX 5098 37 1S33M * 0 0 TTCGACAGCGATGAAGGGTTCTTCGACAAGTCTT XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:1 XO:i:0 XG:i:0 MD:Z:33
+1831_575_459 4 * 0 0 * * 0 0 CTTATCAGCACACGGTTTACCAGTCCGACTCCAA @@C@?A@@A@??A@@'6@@B'=;C@'4<=9,@1.
+1831_575_506 4 * 0 0 * * 0 0 CGCAGAACCCGCACGCTTGTGCTCACCACTGTAC ?)2*5@3+.7=?A:8@,/&):@37/<89'+4*)*
+1831_575_569 0 phiX 5043 25 33M1S * 0 0 GACCTTGCTGCTAAAGGTCTAGGAGCTAAAGAAT IOBU[TMHTYG4M]7$?Q]]]57]SKXQC;:FE XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:2 XO:i:0 XG:i:0 MD:Z:33
+1831_575_622 0 phiX 2485 37 33M1S * 0 0 GTTTTACAGACACCTAAAGCTACATCGTCAACGC ]]]]]]]]]]]]]]]X[YVYINYLTLJWHO[$! XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:1 XO:i:0 XG:i:0 MD:Z:33
+1831_575_644 4 * 0 0 * * 0 0 CTTGAATGGCGATCTCGTCGAGGAAATACCACTA <8>.>&,+)8.10':5(/-62&*.=/%(.<&&18
+1831_575_663 16 phiX 1554 25 1S33M * 0 0 TGCTGAAGATGGTGTAGATAACTGTAATACCCAG XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:2 XO:i:0 XG:i:0 MD:Z:33
+1831_575_681 4 * 0 0 * * 0 0 TCTCCTGATTAGACATATCACTGTTGAACACAGC 72?.)25;96-14'*.03'#4#++$)/8+%/((&
+1831_575_711 4 * 0 0 * * 0 0 TATGTTCGTCCACGTCAGACGCGCAAAGTTGCGC %+:2(#'1+.)&*45-#,<A-%4;>+))<;##*&
+1831_575_730 4 * 0 0 * * 0 0 CACACAGGAACCATAGCGTATGTTATTCACCCCC %8<%-')5,*1&=#)(1*1)->7$.,4'4'&'*&
+1831_575_904 4 * 0 0 * * 0 0 ACCCGCTTAAAGACGTGAATTTTGCCTCCGCGCC <><.689@@7@<54:4=@>69=:+6-=42;8<:#
+1831_575_938 16 phiX 1133 37 1S33M * 0 0 TCTGCGGCAACCGCGAGAGGCAGAAAGAGGTAAC XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:33
+1831_575_970 16 phiX 232 37 1S33M * 0 0 GCTCCTCTTCACCGAATTATACGAACCGTGCAAG XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:33
+1831_575_991 4 * 0 0 * * 0 0 TTCGGCGATCCCCCCCACGGCGCGATGCCGCGCA >>;7???/4<:::,#&*%'$--5-#(7)&&,-)%
+1831_575_1138 0 phiX 1913 37 33M1S * 0 0 GCTAAAGGTGCTTTGACTTATACCGATATTGCTC VT7-SURJS]X]TT]Z]UY]]]]]]X[UN[NMT XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:1 XO:i:0 XG:i:0 MD:Z:33
+1831_575_1157 16 phiX 3736 25 1S33M * 0 0 GTCGCCATACCGAGAAGAGTATAACCGCGATGAC XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:2 XO:i:0 XG:i:0 MD:Z:33
+1831_575_1180 0 phiX 4169 37 33M1S * 0 0 GGGCGTTGAGTTCGATAATGGTGATATGTATGTA ]]\]OJROX]]UUYSX\[Y]]]]VZ]\VRWLT] XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:33
+1831_575_1283 4 * 0 0 * * 0 0 GGTGGAATACTAAGGACTAATGTGCTGTCTCTTT C@A54><?A78@<?2>:#>=?@2>80:'?69.'7
+1831_575_1302 16 phiX 5202 37 1S33M * 0 0 GGAATGGTTCGACCCAATGCTGCGCTGCGGCAAG XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:1 XO:i:0 XG:i:0 MD:Z:33
+1831_575_1310 16 phiX 1612 37 1S33M * 0 0 AATGACTGGTTCTTGCACTAATGAAGTACGTCGC XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:1 XO:i:0 XG:i:0 MD:Z:33
+1831_575_1321 0 phiX 2664 37 33M1S * 0 0 TTTGGTTCGCTTTGAGTCTTCTTCGGTTCCGACG ]]]]]]]]]]]]]]]]]]]\ND]]]7/]]]WPZ XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:1 XO:i:0 XG:i:0 MD:Z:33
+1831_575_1373 16 phiX 4221 37 1S33M * 0 0 TAGACTGCAAGCACTACTCAAACATAGACAATGA XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:33
+1831_575_1419 4 * 0 0 * * 0 0 TGGGGAATATAACAGCGTAGCGTTGAACACTAGA //3->&-.->%11/@&/&7:<,-1=,+2<6'%&<
+1831_575_1436 0 phiX 3460 37 33M1S * 0 0 CTGGCATTCAGTCGGCGACTTCACGCCAGAATAC []]WULFXOGY]]\PY]]IGZ]]M@V]XAAMR[ XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:33
+1831_575_1442 0 phiX 3317 37 33M1S * 0 0 TGCTTGGGAGCGTGCTGGTGCTGATGCTTCCTCG \V]]]]RE\]LEQ]]]X]]]]TZ]]QUPW]LIX XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:33
+1831_575_1454 4 * 0 0 * * 0 0 CCTCCTAACCACGAGCCGAGGGGTCTCTGCCCCT 4=?8=6589=0:A=:?>6<;@/,4+-6+/'.,(,
+1831_575_1500 16 phiX 4269 37 1S33M * 0 0 GCTTAACCGTGTTACGATGTTACACGAGGGGGTT XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:33
+1831_575_1535 16 phiX 1225 37 1S33M * 0 0 GAGTGCAAATACCACTTGTCACCTAATTCAAGTA XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:33
+1831_575_1724 4 * 0 0 * * 0 0 TCGTAAGTGTTAAGGAGCTGTGTACAAAACAACA <B.+@),2*.%)))4%2@;7#%(%+$8))85%&5
+1831_575_1829 4 * 0 0 * * 0 0 CATTTGCTGACCCTGCGTAGTTTAGTCTCACAGC 2(*'%.3$+7)@&%$'3*+*#/#/*+0.=&#)+0
+1831_575_1898 4 * 0 0 * * 0 0 CTTACCATATCATCTCAACCCATAACAGCACTTA B>@@&1/))'40)%#8/.%#8$((#;4'$'63,,
+1831_575_1964 4 * 0 0 * * 0 0 GACAGACCATGAGGCTGAAGACTACTAAGTGCGT >39)@2<2/@+9?2=&)>>@*62=5&2<42.'?+
+1831_576_32 16 phiX 988 25 1S33M * 0 0 TAACTCCTATTTAATACAGATTATAAGTTTGACC XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:2 XO:i:0 XG:i:0 MD:Z:33
+1831_576_74 4 * 0 0 * * 0 0 ACATTCTGCAGTGGGACAGAGCGGTACGCCGCAA =@@?@>(??<B5?@@@9<@><+><;@';>6961?
+1831_576_86 16 phiX 2981 37 1S33M * 0 0 TGTACAGATTTAACAAACCTCCGCCAGTTTTTCG XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:33
+1831_576_89 4 * 0 0 * * 0 0 GCTGTTTGATTTGAGAAGAGGAATTAAGCGCCGA )69+,'.4=-,>/>(*$#)3030*'(,%)2##$,
+1831_576_266 16 phiX 280 37 1S33M * 0 0 ATCTATACTCAGTGTAAAACAAGTACCATCTCTA XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:1 XO:i:0 XG:i:0 MD:Z:33
+1831_576_327 16 phiX 4517 25 1S33M * 0 0 TATGATAAGTCGCAAACTACTTACGTTACGCTGT XT:A:U CM:i:1 X0:i:1 X1:i:0 XM:i:2 XO:i:0 XG:i:0 MD:Z:1G31
+1831_576_331 4 * 0 0 * * 0 0 GACGCTTTACTCCGGTAGTACCGTGCCGTTTATA -2)+(*.*1/;5%.-9&#/1'+($*$##()%/$.
+1831_576_387 4 * 0 0 * * 0 0 ACACGCCATGATCCGATAAGAAGGGAACGTAAGG 8).$5#1#*%.$##.*#$%##-%,+,1#&%.%))
+1831_576_406 4 * 0 0 * * 0 0 AGGTCTTACAGCACGGGGCTGAGCGCATCTGACC 4<>%%14:*4656)&<251&2+3#&19,6&4>5(
+1831_576_449 4 * 0 0 * * 0 0 CTCGAACCGCGGGGTCCAAAGACTGCTGCAAGGA +'&'.,,$/+.)$$8&%#+?&,#)-&###7,+#*
+1831_576_519 16 phiX 1625 25 1S33M * 0 0 GGCACTAATGAAGTACGTCGCAATGGCACTACAA XT:A:U CM:i:1 X0:i:1 X1:i:0 XM:i:2 XO:i:0 XG:i:0 MD:Z:25A7
+1831_576_603 16 phiX 1576 37 1S33M * 0 0 GGTAATACCCAGACGTTCGACGAATACGATTAAA XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:33
+1831_576_655 16 phiX 3292 37 1S33M * 0 0 CAACGACGACGTAAAGGACTCGAATTACGAACCC XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:1 XO:i:0 XG:i:0 MD:Z:33
+1831_576_677 4 * 0 0 * * 0 0 TTTACTCAGTTGATACATCACTGTAGCACATAGG 290&/*0#&'&,.2'#&*$&('#-%($*#%$)#%
+1831_576_718 4 * 0 0 * * 0 0 CGTGCCTTTCAGGGTCTTTTCTGGTCTGGTCGCT 4###$0###%(#########,####%####$###
+1831_576_722 4 * 0 0 * * 0 0 CGTATGATGGCGAGTCTTTATAATCCAATCTGAA *,-,##.)*&(*1%*(%(-2#+)-#.&-#%%$')
+1831_576_754 4 * 0 0 * * 0 0 AGGCGTCCTGCATCGACCGTTCTATCCGCTTAGA 4//#(.$)'',>($<,##%((,#5?#0*%1*
+1831_576_815 0 phiX 5186 37 33M1S * 0 0 GGAGTGCTTAATCCAACTTACCAAGCTGGGTTAC Z]]]]]]]]]]]]]]]]]]]UP[ZKIP]][ZUN XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:33
+1831_576_882 0 phiX 5053 37 33M1S * 0 0 CTAAAGGTCTAGGAGCTAAAGAATGGAACAACTG Q]]]]]W[]]]X]]]]][EAV]]ZUS\]]]VX] XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:33
+1831_576_898 0 phiX 518 37 33M1S * 0 0 GATTGCTACTGACCGCTCTCGTGCTCGTCGCTGT ]]]Z]]]]]]]YW]]]]VV]]X]]]]]VO]]]T XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:33
+1831_576_923 0 phiX 1050 37 33M1S * 0 0 ATCTTGGCTTCCTTGCTGGTCAGATTGGTCGTCG MLOW]RMX[]]X]]]XV]]]UKU]]]W\\]\ST XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:33
+1831_576_930 4 * 0 0 * * 0 0 CTGGCATGTACGTCCATGTCAGACGAGCAGAACT #*0.2&.:((#'14'##-)#%$$2%#$/1&#%/#
+1831_576_1019 4 * 0 0 * * 0 0 GATGCGCGCTGTCATGGCATCGAACCATCGGTCG <$>$,1,&++&@,.)'+/+#9'69/6'2(+-'9-
+1831_576_1068 4 * 0 0 * * 0 0 AAGAGTGACTCACTTACCGGGATGCGATGGAGCC >><=4?;@7=??9?;9>5@9?:8@:=5';7;'#4
+1831_576_1131 16 phiX 4061 37 1S33M * 0 0 TACTCCGAACACCGTAAAGATGAGAAAGAGTTAG XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:1 XO:i:0 XG:i:0 MD:Z:33
+1831_576_1168 4 * 0 0 * * 0 0 CACTTAACTCCGCTGTCGGAAGCCTTACAAGACA @CC6@@2?9=>7?;76<;467@;9,0%26'',4$
+1831_576_1207 4 * 0 0 * * 0 0 CAACCTGACTAAACGGGGATACGCTGGCGCTACA $>2,(&?4?(,@:<&,@>?$&:8A%%=0.%,597
+1831_576_1289 16 phiX 1899 37 1S33M * 0 0 AAAGTCATGGAATTGCGATTTCCACGAAACTGAA XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:33
+1831_576_1329 4 * 0 0 * * 0 0 CCAATAGCAGAGACCTAATAGGAAACGAAAGCAA >&0,870/A@@/5.;=;:'&@3'&$$%,+#($&2
+1831_576_1367 0 phiX 1839 37 33M1S * 0 0 AGCATGGCACTATGTTTACTCTTGCGCTTGTTCT ]]]]]]]]]]]]]]]]]]\]]]]]]]\YW]]XX XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:33
+1831_576_1416 0 phiX 4522 37 33M1S * 0 0 TTCAGCGTTTGATGAATGCAATGCGACAGGCTCC K]VEHHS]P>TQJML]]\UFU][L6K]\TMPZ] XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:33
+1831_576_1461 4 * 0 0 * * 0 0 GAGGGGCGGCCCGGTTCAAGCAGGTAAGCAACAA 1&74#(#(&##$#,'###%#%%#*#&%%##%%%'
+1831_576_1605 0 phiX 5209 37 33M1S * 0 0 AGCTGGGTTACGACGCGACGCCGTTCAACCAGAC ]]]]]XU]]]]]]]]]]]]]]X[]KHLWZUXW, XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:1 XO:i:0 XG:i:0 MD:Z:33
+1831_576_1664 4 * 0 0 * * 0 0 CGCGCACAACTCGCCATGATACGACAAGACCCGA @?>?@=A:@@>@='=<>=).>=9*8)(7#/++;)
+1831_576_1671 4 * 0 0 * * 0 0 GTCTTTGTAAGCCTGGCCTGGTCAGGTCTGGTCT @?@5>@@8&8?25#&)&5&&)15&&,&4%&,&6%
+1831_576_1729 16 phiX 5194 37 1S33M * 0 0 TATTAGGTTGAATGGTTCGACCCAATGCTGCGCT XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:33
+1831_576_1880 4 * 0 0 * * 0 0 TATGCGCTGTTGAGCTTACAACTCACTAGCGAAT 515/792,:,7/%/05,%$):+#8%2(1754))3
+1831_576_1982 16 phiX 5024 37 1S33M * 0 0 TATTGTTTTTCAGTCTATACCTGGAACGACGATT XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:33
+1831_576_1987 4 * 0 0 * * 0 0 AAGGTCTTCTGTCGGCGCTGGACTGAACACCTGA ##()(#&##)%)/-#%$11#%3>'##&$,#$$'+
+1831_576_2014 4 * 0 0 * * 0 0 CCGTGACACACAATGCCGGCCCCAGCCTAGCAAT @@9,B29-5>'?,+?79+/A';'2@'5&/9,6&1
+1831_576_2028 4 * 0 0 * * 0 0 ACTCGCCGCATCCCCGAGTGACGCTCGAGACCAA <>9>5'2(&707.8#&&39,0%7/#(#,*%&5*+
+1831_577_40 0 phiX 2772 25 33M1S * 0 0 TGTGACTATTGACGTCCTTCCCCGTACGCCGGGT JLE8>>9:MOR=!&74KQDKU]M?IG@P]]]PK XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:2 XO:i:0 XG:i:0 MD:Z:33
+1831_577_119 4 * 0 0 * * 0 0 TCCCACAAGCCATTGACATGCTCGCTCTAAACAG >?C11)-1/)#;#/,850*+.+$$5550+%-.40
+1831_577_133 16 phiX 1714 37 1S33M * 0 0 CGTACGCGAGATTAGAGACCCGTAGACCGATACT XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:1 XO:i:0 XG:i:0 MD:Z:33
+1831_577_255 4 * 0 0 * * 0 0 ATTGAGGCCAAGATAATTGAGGAGAGAGAAGGTG <=87@>69%**#&#-+$.#&&#+$-+%&%.,%5#
+1831_577_281 16 phiX 4577 37 1S33M * 0 0 TAAAACTGTGAGAGTGCAACCGACTGCTGGCTAA XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:33
+1831_577_288 0 phiX 3201 25 33M1S * 0 0 GGCACTTCTGCCGTTTCTGATAAGTTGCTTGATA SOY]]NL]]]UTZKIMNOCH/-LFLLK]VN5%F XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:2 XO:i:0 XG:i:0 MD:Z:33
+1831_577_322 16 phiX 458 37 1S33M * 0 0 CAAGACGGCAAAACCTAAATTGGCTTCTACTAAA XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:1 XO:i:0 XG:i:0 MD:Z:33
+1831_577_362 0 phiX 2153 37 33M1S * 0 0 CTTATTCGCCACCATGATTATGACCAGTGTTTCA ]]]]]]]]]WV]RHVONRSI6=O[NK[ZL?%(J XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:1 XO:i:0 XG:i:0 MD:Z:33
+1831_577_382 16 phiX 4686 37 1S33M * 0 0 TCCAGCGTTCCGATTACTAAGTGTGCGGCTGACG XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:33
+1831_577_464 0 phiX 2126 25 33M1S * 0 0 CCTTCTGGTGATTTGCAAGAACGCGTACTTATTG ]\OT]SQHP<,>6COKMHI3-HMNHNJLS@FUT XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:2 XO:i:0 XG:i:0 MD:Z:33
+1831_577_488 16 phiX 4948 37 1S33M * 0 0 GCCGGACAACTACGATTTCCACTCGGCGAATTTC XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:33
+1831_577_511 4 * 0 0 * * 0 0 GGTGCTTATCAGTTCTTTCTCGGGACTTGTATTT 7/+&$:<7%6,$$%'%/+)#$7((&*3>16'0/+
+1831_577_545 0 phiX 1711 37 33M1S * 0 0 TGTCATGCGCTCTAATCTCTGGGCATCTGGCTAT ]]]]]]]]]YURZ]]]]]]]VNNPV]WLLWZYN XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:33
+1831_577_559 0 phiX 3840 25 33M1S * 0 0 GCTGTTGCCGATACTTGGAACAATTTCTGGAAAG ]]]]]]]]WJWSWZW]XLX\P#-]]V=A(/TD9 XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:2 XO:i:0 XG:i:0 MD:Z:33
+1831_577_562 4 * 0 0 * * 0 0 GTTCCACTACGTTCCACGCAAAGGAATCCGAATC ((&*&0%)1%)#($2-,***%/-,,))&,-.1'*
+1831_577_637 0 phiX 4247 37 33M1S * 0 0 TGTTACTGAGAAGTTAATGGATGAATTGGCACAA BI2<]PLJN[M;7FYWYVW]]\WG@IQH6O]XI XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:1 XO:i:0 XG:i:0 MD:Z:33
+1831_577_641 4 * 0 0 * * 0 0 TATCTACCACCGCGGTGGCGCGAGAATGCTCCCT 47;/':A;;5?:72,(=),#*?+.#&7$8#%7/'
+1831_577_692 0 phiX 3905 37 33M1S * 0 0 GTCTAGGAAATAACCGTCAGGATTGACACCCTCA WU]]]SQ]]]TT]]]TS]]]PM]]]]]]]]]UZ XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:33
diff -r 1a56a541f9f9 -r 14d54c9dbd59 test-data/bwa_wrapper_out1.sam
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/bwa_wrapper_out1.sam Wed Sep 16 11:14:39 2009 -0400
@@ -0,0 +1,145 @@
+@SQ SN:PHIX174 LN:5386
+1831_573_1004 0 PHIX174 278 25 33M1S * 0 0 TTAGATATGAGTCACATTTTGTTCATGGTAGAGG ]]>!4[WPFW]\ZSV]\YNRZOWWTTU]MJQEM XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:2 XO:i:0 XG:i:0 MD:Z:33
+1831_573_1050 4 * 0 0 * * 0 0 TTTATGGGTATGGCCGCTCACAGGCCAGCGGCCT ;@@17?@=>7??@A8?==@4A?A4)&+.'&+'1,
+1831_573_1067 4 * 0 0 * * 0 0 AAGTATGAGTCATTTACCGGGATGCGAAGAAAAG ++#%(',%/$,+&1#&),)&+'*'*%#$&#%('$
+1831_573_1219 16 PHIX174 2202 37 1S33M * 0 0 TACGTCACCTTATCAGTCCAATTTAAATTACACT XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:33
+1831_573_1242 0 PHIX174 648 37 33M1S * 0 0 CATCCCGTCAACATTCAAACGGCCTGTCTCATCC ]]]]XQ]]]]]]]][]]]VIMOW]SW]]]T*1] XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:1 XO:i:0 XG:i:0 MD:Z:33
+1831_573_1333 4 * 0 0 * * 0 0 AGAATCGTTACCACACACTGCGTCTGGGTATCCG ='@#%3=.>)/34*117,,/6-4+.9742456<)
+1831_573_1362 4 * 0 0 * * 0 0 CGATCTCAACCAGGTCCGCGCCCACCCCTGCCTC B@@?@@?@C@BA?@>@<@8A@?@'.8'?17:,+?
+1831_573_1448 16 PHIX174 2563 25 1S33M * 0 0 CGAAGTAACGTAAGTCTACCTATGTAGACAGTTG XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:2 XO:i:0 XG:i:0 MD:Z:33
+1831_573_1490 0 PHIX174 1767 25 33M1S * 0 0 CGTCGTTAGGCCAGTTTTCTGGTCGTGTTCAACC ]]]TU]]]=;]]]R9=BQQDF>QZQ1,LBIGEN XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:2 XO:i:0 XG:i:0 MD:Z:33
+1831_573_1523 4 * 0 0 * * 0 0 ATGGAACGGAACGGGTGAGGAGGGGAACGTAGGG ,//*,#8''.6''6'2&27/80)%�'%#*,2'
+1831_573_1578 4 * 0 0 * * 0 0 CGAGTAGCAAACAAGACGCCAATCCAGGCGACCC ?=@<@C@?@@??=>@;7<<8<694)3511(+1<.
+1831_573_1647 16 PHIX174 1118 37 1S33M * 0 0 ACTGAGGAAGCTCTACCTGCGGCAACCGCGAGAG XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:33
+1831_573_1684 16 PHIX174 3696 37 1S33M * 0 0 ATCACGACTCCAACTGAATCAAGTAGTCGTTTGC XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:33
+1831_573_1769 4 * 0 0 * * 0 0 TGGACGTATAGTGGCGATGAGCATGTAGGTTCTC 54749&&767%/7;3$-7;3#,3//#,45/#&06
+1831_573_1853 4 * 0 0 * * 0 0 CAAAACGCCCGGGGCCTCACATGCGCGGCAGTTC 4./B@@72B+/4?@?7?+@9/+99.')2<2&)2&
+1831_573_1943 4 * 0 0 * * 0 0 ATAACGTATGGCAGTGAACGGGCGGAACCTGCCC >/*1,),@-)'0*>5'$/?6(a)/.&?8/(')A43,
+1831_573_1977 4 * 0 0 * * 0 0 GGCGTAGGGCTCATTGTGCAAGTATCCGACCTCC @?6@8@@9A@=4633A7?9?<3:+7>'@%@?%32
+1831_574_109 0 PHIX174 3729 37 33M1S * 0 0 CAGAATCAGCGGTATGGCTCTTCTCATATTGGCT VTO/2URQ]]]TZWU[UTQP\]XY]VS[WLN]] XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:1 XO:i:0 XG:i:0 MD:Z:33
+1831_574_148 16 PHIX174 2369 37 1S33M * 0 0 GATCCAAAAGACGAATCCTCAAATTAGTACAAAG XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:33
+1831_574_185 4 * 0 0 * * 0 0 CCGTTTTGCCTAGTAATGCTCGGCGCAGCGTCGC <4;%%@7>#*>97%6;+8$#<07%1372$%<54#
+1831_574_243 0 PHIX174 2129 37 33M1S * 0 0 TCTGGTGATTTGCAAGAACGCGTACTTATTCGCA ]]]W]]]]RQ]YRBI]]Y0<]]]CI]]]FM]]Y XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:1 XO:i:0 XG:i:0 MD:Z:33
+1831_574_257 4 * 0 0 * * 0 0 ATACCTTCCAAAGCAATAGAATAAAAAACAGTAC >>B>)@?>B@B?@1%*%,#+00.'(+&5&%#$3&
+1831_574_293 4 * 0 0 * * 0 0 TGCTGCAAATAAACATACAGCCTTCTAATGACTA ')7'.*%#&$'/.$##$.$&*)+*$#8%&%#&&%
+1831_574_389 4 * 0 0 * * 0 0 CATGGCTATGCACCGGTTTGTAGCGTACTCGAGA )$>/>8):2@:213;;.1)@3%64%+)<7)+$92
+1831_574_575 16 PHIX174 4006 37 1S33M * 0 0 CTTACAGTGCGACTAATAAAACTGAAACTCGCAT XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:1 XO:i:0 XG:i:0 MD:Z:33
+1831_574_592 16 PHIX174 2950 37 1S33M * 0 0 TCGCCATAACGAAGACGAGAACGACCACCGCGGT XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:33
+1831_574_617 4 * 0 0 * * 0 0 AAGCATCGGCGGGAGCGCAAGCTGGGAAGGTGCC >@?;>?=@==@>@=5?@+@:@40@><:0)')64-
+1831_574_725 4 * 0 0 * * 0 0 GACAAGATGGCTATTATTTACAATCCGATCTGCA '>?52+5=;4$6;<8.1<47*9+?7(+5;-).)4
+1831_574_734 16 PHIX174 5263 25 1S33M * 0 0 CCTCTCTACTCTAACTCCGACCCTTTTCAATGAC XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:2 XO:i:0 XG:i:0 MD:Z:33
+1831_574_824 16 PHIX174 3997 37 1S33M * 0 0 ATGGGAAGACTTACAGTGCGACTAATAAAACTGA XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:33
+1831_574_959 4 * 0 0 * * 0 0 CGCGCTAGGACTCGGCCCCAAGAGACGTTCCGCC A=;+?@9;/<@;<8#&&/*%(%.0$0$2)+1$-1
+1831_574_1062 4 * 0 0 * * 0 0 ACCGGTAATATAAGGCAACATGATTACGGCCACG @821<//:136/8<1/5.427.;>288/0<1$)/
+1831_574_1092 4 * 0 0 * * 0 0 GACTGGCGAAATCATCGCGGAAAAACCCCTATCA 8?.,98)03%#,,,(,++$'69'#9'7#';6.%2
+1831_574_1103 4 * 0 0 * * 0 0 ATCTCCTGATTAGACATATCTCCGTAGCTCACGC ??>?@=>@@A<>?=@==<:?<;58'&&):+35'1
+1831_574_1116 4 * 0 0 * * 0 0 CACCTCACGTGAGTATAGCAGCCCGAGCGTCACC @++,)/)?./)%<)2>.==:8?&;44&/&,)/*4
+1831_574_1194 0 PHIX174 1136 37 33M1S * 0 0 GCCGTTGGCGCTCTCCGTCTTTCTCCATTGCGTG \]PT]]]]]]]ZZ]]]\Y]]]]\]]]V\]UMDK XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:33
+1831_574_1204 16 PHIX174 1445 25 1S33M * 0 0 TGGATTACTCGAATTAGTTCTACTACGAGCAATA XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:2 XO:i:0 XG:i:0 MD:Z:33
+1831_574_1306 4 * 0 0 * * 0 0 ATTGCTTAGATCCAGTGGCGCTCAATACAACGGA 2.7&%''.$&#'%##$#'#%')')$'$%$,)'.1
+1831_574_1387 4 * 0 0 * * 0 0 GTACTTCTCAATGCTGCACTACTATGTACGCCCC ?A??:@?@@9?@@?9C;:>&).,,);&'<&7(/'
+1831_574_1431 4 * 0 0 * * 0 0 GACCAGTTTCAGGGCTAACCGTCCCTACTCGACC 7?>9BA897;+8*=6#6.+5&-#26$0.,5&'$1
+1831_574_1560 4 * 0 0 * * 0 0 GGCGTCTTAGGATTGAAGAGGGCCTCCCACCCCC ))&65<4=>99@:597(1&;+&(%&4#,#&&&*$
+1831_574_1591 16 PHIX174 5118 37 1S33M * 0 0 CTTCGACAAGTCTTAGTCTTACTCGGCGTTGAAG XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:1 XO:i:0 XG:i:0 MD:Z:33
+1831_574_1624 16 PHIX174 4058 37 1S33M * 0 0 CATAACTCCGAACACCGTAAAGATGAGAAAGAGT XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:33
+1831_574_1826 4 * 0 0 * * 0 0 TACGTCGCGACCGAGCGTTATATAGTCTGACCCC @<<,))459<?.+57'-'&6?1)(;1;0&%4,#$
+1831_574_1903 0 PHIX174 5209 37 33M1S * 0 0 AGCTGGGTTACGACGCGACGCCGTTCAACCAGAC WT]]]][]]]][]]]]]]]]]]][X]QYYTYZ- XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:1 XO:i:0 XG:i:0 MD:Z:33
+1831_574_1961 0 PHIX174 3555 25 33M1S * 0 0 CGCGTTGCGTCTATTATGGAAAACACCAATCTTA TFPMV]OCBP]H<OS]<1CN]]M=K]52KO]WT XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:2 XO:i:0 XG:i:0 MD:Z:33
+1831_575_54 16 PHIX174 3587 37 1S33M * 0 0 TAAGGTTCGTTGTCGTCCAAAGGCTCTAATACGC XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:1 XO:i:0 XG:i:0 MD:Z:33
+1831_575_80 4 * 0 0 * * 0 0 TCTTTGGGTTTGGGGCAATTTGGTATGTTCGTCT ?5><@?/=5%(&.5)+#/0'/'>#$/'37#()6&
+1831_575_192 4 * 0 0 * * 0 0 AACTACGCCCCTTAATTACACAGCGCGTTAGACC :8<,9(.=/)#%8$,4'<,:)3/.'.5<,>-;7'
+1831_575_197 16 PHIX174 4861 37 1S33M * 0 0 CCGAACGTTTTATGCACCGGAATACCAATGTCAT XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:1 XO:i:0 XG:i:0 MD:Z:33
+1831_575_223 4 * 0 0 * * 0 0 ACGCACAAAGGAGCTCGGCGCATAGCAACGCAGA ?>?8?@:?;>+$'%&,+#$.--#%$1'&#-7$&'
+1831_575_420 4 * 0 0 * * 0 0 CCCACATGGAAAACACTCACCGCCGAACAGAGCG 2?.>?(-''2+..@),$%1@;')1)?+)7.')..
+1831_575_434 4 * 0 0 * * 0 0 ATCGCTGCGAGGTCACCCTGGTTACGCCCCTTCC @@><@B@>=@@?>><@?;)@?;6.?=4,'';/3)
+1831_575_444 16 PHIX174 5098 37 1S33M * 0 0 TTCGACAGCGATGAAGGGTTCTTCGACAAGTCTT XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:1 XO:i:0 XG:i:0 MD:Z:33
+1831_575_459 4 * 0 0 * * 0 0 CTTATCAGCACACGGTTTACCAGTCCGACTCCAA @@C@?A@@A@??A@@'6@@B'=;C@'4<=9,@1.
+1831_575_506 4 * 0 0 * * 0 0 CGCAGAACCCGCACGCTTGTGCTCACCACTGTAC ?)2*5@3+.7=?A:8@,/&):@37/<89'+4*)*
+1831_575_569 0 PHIX174 5043 25 33M1S * 0 0 GACCTTGCTGCTAAAGGTCTAGGAGCTAAAGAAT IOBU[TMHTYG4M]7$?Q]]]57]SKXQC;:FE XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:2 XO:i:0 XG:i:0 MD:Z:33
+1831_575_622 0 PHIX174 2485 37 33M1S * 0 0 GTTTTACAGACACCTAAAGCTACATCGTCAACGC ]]]]]]]]]]]]]]]X[YVYINYLTLJWHO[$! XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:1 XO:i:0 XG:i:0 MD:Z:33
+1831_575_644 4 * 0 0 * * 0 0 CTTGAATGGCGATCTCGTCGAGGAAATACCACTA <8>.>&,+)8.10':5(/-62&*.=/%(.<&&18
+1831_575_663 16 PHIX174 1554 25 1S33M * 0 0 TGCTGAAGATGGTGTAGATAACTGTAATACCCAG XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:2 XO:i:0 XG:i:0 MD:Z:33
+1831_575_681 4 * 0 0 * * 0 0 TCTCCTGATTAGACATATCACTGTTGAACACAGC 72?.)25;96-14'*.03'#4#++$)/8+%/((&
+1831_575_711 4 * 0 0 * * 0 0 TATGTTCGTCCACGTCAGACGCGCAAAGTTGCGC %+:2(#'1+.)&*45-#,<A-%4;>+))<;##*&
+1831_575_730 4 * 0 0 * * 0 0 CACACAGGAACCATAGCGTATGTTATTCACCCCC %8<%-')5,*1&=#)(1*1)->7$.,4'4'&'*&
+1831_575_904 4 * 0 0 * * 0 0 ACCCGCTTAAAGACGTGAATTTTGCCTCCGCGCC <><.689@@7@<54:4=@>69=:+6-=42;8<:#
+1831_575_938 16 PHIX174 1133 37 1S33M * 0 0 TCTGCGGCAACCGCGAGAGGCAGAAAGAGGTAAC XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:33
+1831_575_970 16 PHIX174 232 37 1S33M * 0 0 GCTCCTCTTCACCGAATTATACGAACCGTGCAAG XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:33
+1831_575_991 4 * 0 0 * * 0 0 TTCGGCGATCCCCCCCACGGCGCGATGCCGCGCA >>;7???/4<:::,#&*%'$--5-#(7)&&,-)%
+1831_575_1138 0 PHIX174 1913 37 33M1S * 0 0 GCTAAAGGTGCTTTGACTTATACCGATATTGCTC VT7-SURJS]X]TT]Z]UY]]]]]]X[UN[NMT XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:1 XO:i:0 XG:i:0 MD:Z:33
+1831_575_1157 16 PHIX174 3736 25 1S33M * 0 0 GTCGCCATACCGAGAAGAGTATAACCGCGATGAC XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:2 XO:i:0 XG:i:0 MD:Z:33
+1831_575_1180 0 PHIX174 4169 37 33M1S * 0 0 GGGCGTTGAGTTCGATAATGGTGATATGTATGTA ]]\]OJROX]]UUYSX\[Y]]]]VZ]\VRWLT] XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:33
+1831_575_1283 4 * 0 0 * * 0 0 GGTGGAATACTAAGGACTAATGTGCTGTCTCTTT C@A54><?A78@<?2>:#>=?@2>80:'?69.'7
+1831_575_1302 16 PHIX174 5202 37 1S33M * 0 0 GGAATGGTTCGACCCAATGCTGCGCTGCGGCAAG XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:1 XO:i:0 XG:i:0 MD:Z:33
+1831_575_1310 16 PHIX174 1612 37 1S33M * 0 0 AATGACTGGTTCTTGCACTAATGAAGTACGTCGC XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:1 XO:i:0 XG:i:0 MD:Z:33
+1831_575_1321 0 PHIX174 2664 37 33M1S * 0 0 TTTGGTTCGCTTTGAGTCTTCTTCGGTTCCGACG ]]]]]]]]]]]]]]]]]]]\ND]]]7/]]]WPZ XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:1 XO:i:0 XG:i:0 MD:Z:33
+1831_575_1373 16 PHIX174 4221 37 1S33M * 0 0 TAGACTGCAAGCACTACTCAAACATAGACAATGA XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:33
+1831_575_1419 4 * 0 0 * * 0 0 TGGGGAATATAACAGCGTAGCGTTGAACACTAGA //3->&-.->%11/@&/&7:<,-1=,+2<6'%&<
+1831_575_1436 0 PHIX174 3460 37 33M1S * 0 0 CTGGCATTCAGTCGGCGACTTCACGCCAGAATAC []]WULFXOGY]]\PY]]IGZ]]M@V]XAAMR[ XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:33
+1831_575_1442 0 PHIX174 3317 37 33M1S * 0 0 TGCTTGGGAGCGTGCTGGTGCTGATGCTTCCTCG \V]]]]RE\]LEQ]]]X]]]]TZ]]QUPW]LIX XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:33
+1831_575_1454 4 * 0 0 * * 0 0 CCTCCTAACCACGAGCCGAGGGGTCTCTGCCCCT 4=?8=6589=0:A=:?>6<;@/,4+-6+/'.,(,
+1831_575_1500 16 PHIX174 4269 37 1S33M * 0 0 GCTTAACCGTGTTACGATGTTACACGAGGGGGTT XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:33
+1831_575_1535 16 PHIX174 1225 37 1S33M * 0 0 GAGTGCAAATACCACTTGTCACCTAATTCAAGTA XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:33
+1831_575_1724 4 * 0 0 * * 0 0 TCGTAAGTGTTAAGGAGCTGTGTACAAAACAACA <B.+@),2*.%)))4%2@;7#%(%+$8))85%&5
+1831_575_1829 4 * 0 0 * * 0 0 CATTTGCTGACCCTGCGTAGTTTAGTCTCACAGC 2(*'%.3$+7)@&%$'3*+*#/#/*+0.=&#)+0
+1831_575_1898 4 * 0 0 * * 0 0 CTTACCATATCATCTCAACCCATAACAGCACTTA B>@@&1/))'40)%#8/.%#8$((#;4'$'63,,
+1831_575_1964 4 * 0 0 * * 0 0 GACAGACCATGAGGCTGAAGACTACTAAGTGCGT >39)@2<2/@+9?2=&)>>@*62=5&2<42.'?+
+1831_576_32 16 PHIX174 988 25 1S33M * 0 0 TAACTCCTATTTAATACAGATTATAAGTTTGACC XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:2 XO:i:0 XG:i:0 MD:Z:33
+1831_576_74 4 * 0 0 * * 0 0 ACATTCTGCAGTGGGACAGAGCGGTACGCCGCAA =@@?@>(??<B5?@@@9<@><+><;@';>6961?
+1831_576_86 16 PHIX174 2981 37 1S33M * 0 0 TGTACAGATTTAACAAACCTCCGCCAGTTTTTCG XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:33
+1831_576_89 4 * 0 0 * * 0 0 GCTGTTTGATTTGAGAAGAGGAATTAAGCGCCGA )69+,'.4=-,>/>(*$#)3030*'(,%)2##$,
+1831_576_266 16 PHIX174 280 37 1S33M * 0 0 ATCTATACTCAGTGTAAAACAAGTACCATCTCTA XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:1 XO:i:0 XG:i:0 MD:Z:33
+1831_576_327 16 PHIX174 4517 37 1S33M * 0 0 TATGATAAGTCGCAAACTACTTACGTTACGCTGT XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:33
+1831_576_331 4 * 0 0 * * 0 0 GACGCTTTACTCCGGTAGTACCGTGCCGTTTATA -2)+(*.*1/;5%.-9&#/1'+($*$##()%/$.
+1831_576_387 4 * 0 0 * * 0 0 ACACGCCATGATCCGATAAGAAGGGAACGTAAGG 8).$5#1#*%.$##.*#$%##-%,+,1#&%.%))
+1831_576_406 4 * 0 0 * * 0 0 AGGTCTTACAGCACGGGGCTGAGCGCATCTGACC 4<>%%14:*4656)&<251&2+3#&19,6&4>5(
+1831_576_449 4 * 0 0 * * 0 0 CTCGAACCGCGGGGTCCAAAGACTGCTGCAAGGA +'&'.,,$/+.)$$8&%#+?&,#)-&###7,+#*
+1831_576_519 16 PHIX174 1625 37 1S33M * 0 0 GGCACTAATGAAGTACGTCGCAATGGCACTACAA XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:33
+1831_576_603 16 PHIX174 1576 37 1S33M * 0 0 GGTAATACCCAGACGTTCGACGAATACGATTAAA XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:33
+1831_576_655 16 PHIX174 3292 37 1S33M * 0 0 CAACGACGACGTAAAGGACTCGAATTACGAACCC XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:1 XO:i:0 XG:i:0 MD:Z:33
+1831_576_677 4 * 0 0 * * 0 0 TTTACTCAGTTGATACATCACTGTAGCACATAGG 290&/*0#&'&,.2'#&*$&('#-%($*#%$)#%
+1831_576_718 4 * 0 0 * * 0 0 CGTGCCTTTCAGGGTCTTTTCTGGTCTGGTCGCT 4###$0###%(#########,####%####$###
+1831_576_722 4 * 0 0 * * 0 0 CGTATGATGGCGAGTCTTTATAATCCAATCTGAA *,-,##.)*&(*1%*(%(-2#+)-#.&-#%%$')
+1831_576_754 4 * 0 0 * * 0 0 AGGCGTCCTGCATCGACCGTTCTATCCGCTTAGA 4//#(.$)'',>($<,##%((,#5?#0*%1*
+1831_576_815 0 PHIX174 5186 37 33M1S * 0 0 GGAGTGCTTAATCCAACTTACCAAGCTGGGTTAC Z]]]]]]]]]]]]]]]]]]]UP[ZKIP]][ZUN XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:33
+1831_576_882 0 PHIX174 5053 37 33M1S * 0 0 CTAAAGGTCTAGGAGCTAAAGAATGGAACAACTG Q]]]]]W[]]]X]]]]][EAV]]ZUS\]]]VX] XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:33
+1831_576_898 0 PHIX174 518 37 33M1S * 0 0 GATTGCTACTGACCGCTCTCGTGCTCGTCGCTGT ]]]Z]]]]]]]YW]]]]VV]]X]]]]]VO]]]T XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:33
+1831_576_923 0 PHIX174 1050 37 33M1S * 0 0 ATCTTGGCTTCCTTGCTGGTCAGATTGGTCGTCG MLOW]RMX[]]X]]]XV]]]UKU]]]W\\]\ST XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:33
+1831_576_930 4 * 0 0 * * 0 0 CTGGCATGTACGTCCATGTCAGACGAGCAGAACT #*0.2&.:((#'14'##-)#%$$2%#$/1&#%/#
+1831_576_1019 4 * 0 0 * * 0 0 GATGCGCGCTGTCATGGCATCGAACCATCGGTCG <$>$,1,&++&@,.)'+/+#9'69/6'2(+-'9-
+1831_576_1068 4 * 0 0 * * 0 0 AAGAGTGACTCACTTACCGGGATGCGATGGAGCC >><=4?;@7=??9?;9>5@9?:8@:=5';7;'#4
+1831_576_1131 16 PHIX174 4061 37 1S33M * 0 0 TACTCCGAACACCGTAAAGATGAGAAAGAGTTAG XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:1 XO:i:0 XG:i:0 MD:Z:33
+1831_576_1168 4 * 0 0 * * 0 0 CACTTAACTCCGCTGTCGGAAGCCTTACAAGACA @CC6@@2?9=>7?;76<;467@;9,0%26'',4$
+1831_576_1207 4 * 0 0 * * 0 0 CAACCTGACTAAACGGGGATACGCTGGCGCTACA $>2,(&?4?(,@:<&,@>?$&:8A%%=0.%,597
+1831_576_1289 16 PHIX174 1899 37 1S33M * 0 0 AAAGTCATGGAATTGCGATTTCCACGAAACTGAA XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:33
+1831_576_1329 4 * 0 0 * * 0 0 CCAATAGCAGAGACCTAATAGGAAACGAAAGCAA >&0,870/A@@/5.;=;:'&@3'&$$%,+#($&2
+1831_576_1367 0 PHIX174 1839 37 33M1S * 0 0 AGCATGGCACTATGTTTACTCTTGCGCTTGTTCT ]]]]]]]]]]]]]]]]]]\]]]]]]]\YW]]XX XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:33
+1831_576_1416 0 PHIX174 4522 37 33M1S * 0 0 TTCAGCGTTTGATGAATGCAATGCGACAGGCTCC K]VEHHS]P>TQJML]]\UFU][L6K]\TMPZ] XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:33
+1831_576_1461 4 * 0 0 * * 0 0 GAGGGGCGGCCCGGTTCAAGCAGGTAAGCAACAA 1&74#(#(&##$#,'###%#%%#*#&%%##%%%'
+1831_576_1605 0 PHIX174 5209 37 33M1S * 0 0 AGCTGGGTTACGACGCGACGCCGTTCAACCAGAC ]]]]]XU]]]]]]]]]]]]]]X[]KHLWZUXW, XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:1 XO:i:0 XG:i:0 MD:Z:33
+1831_576_1664 4 * 0 0 * * 0 0 CGCGCACAACTCGCCATGATACGACAAGACCCGA @?>?@=A:@@>@='=<>=).>=9*8)(7#/++;)
+1831_576_1671 4 * 0 0 * * 0 0 GTCTTTGTAAGCCTGGCCTGGTCAGGTCTGGTCT @?@5>@@8&8?25#&)&5&&)15&&,&4%&,&6%
+1831_576_1729 16 PHIX174 5194 37 1S33M * 0 0 TATTAGGTTGAATGGTTCGACCCAATGCTGCGCT XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:33
+1831_576_1880 4 * 0 0 * * 0 0 TATGCGCTGTTGAGCTTACAACTCACTAGCGAAT 515/792,:,7/%/05,%$):+#8%2(1754))3
+1831_576_1982 16 PHIX174 5024 37 1S33M * 0 0 TATTGTTTTTCAGTCTATACCTGGAACGACGATT XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:33
+1831_576_1987 4 * 0 0 * * 0 0 AAGGTCTTCTGTCGGCGCTGGACTGAACACCTGA ##()(#&##)%)/-#%$11#%3>'##&$,#$$'+
+1831_576_2014 4 * 0 0 * * 0 0 CCGTGACACACAATGCCGGCCCCAGCCTAGCAAT @@9,B29-5>'?,+?79+/A';'2@'5&/9,6&1
+1831_576_2028 4 * 0 0 * * 0 0 ACTCGCCGCATCCCCGAGTGACGCTCGAGACCAA <>9>5'2(&707.8#&&39,0%7/#(#,*%&5*+
+1831_577_40 0 PHIX174 2772 25 33M1S * 0 0 TGTGACTATTGACGTCCTTCCCCGTACGCCGGGT JLE8>>9:MOR=!&74KQDKU]M?IG@P]]]PK XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:2 XO:i:0 XG:i:0 MD:Z:33
+1831_577_119 4 * 0 0 * * 0 0 TCCCACAAGCCATTGACATGCTCGCTCTAAACAG >?C11)-1/)#;#/,850*+.+$$5550+%-.40
+1831_577_133 16 PHIX174 1714 37 1S33M * 0 0 CGTACGCGAGATTAGAGACCCGTAGACCGATACT XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:1 XO:i:0 XG:i:0 MD:Z:33
+1831_577_255 4 * 0 0 * * 0 0 ATTGAGGCCAAGATAATTGAGGAGAGAGAAGGTG <=87@>69%**#&#-+$.#&&#+$-+%&%.,%5#
+1831_577_281 16 PHIX174 4577 37 1S33M * 0 0 TAAAACTGTGAGAGTGCAACCGACTGCTGGCTAA XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:33
+1831_577_288 0 PHIX174 3201 25 33M1S * 0 0 GGCACTTCTGCCGTTTCTGATAAGTTGCTTGATA SOY]]NL]]]UTZKIMNOCH/-LFLLK]VN5%F XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:2 XO:i:0 XG:i:0 MD:Z:33
+1831_577_322 16 PHIX174 458 37 1S33M * 0 0 CAAGACGGCAAAACCTAAATTGGCTTCTACTAAA XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:1 XO:i:0 XG:i:0 MD:Z:33
+1831_577_362 0 PHIX174 2153 37 33M1S * 0 0 CTTATTCGCCACCATGATTATGACCAGTGTTTCA ]]]]]]]]]WV]RHVONRSI6=O[NK[ZL?%(J XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:1 XO:i:0 XG:i:0 MD:Z:33
+1831_577_382 16 PHIX174 4686 37 1S33M * 0 0 TCCAGCGTTCCGATTACTAAGTGTGCGGCTGACG XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:33
+1831_577_464 0 PHIX174 2126 25 33M1S * 0 0 CCTTCTGGTGATTTGCAAGAACGCGTACTTATTG ]\OT]SQHP<,>6COKMHI3-HMNHNJLS@FUT XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:2 XO:i:0 XG:i:0 MD:Z:33
+1831_577_488 16 PHIX174 4948 37 1S33M * 0 0 GCCGGACAACTACGATTTCCACTCGGCGAATTTC XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:33
+1831_577_511 4 * 0 0 * * 0 0 GGTGCTTATCAGTTCTTTCTCGGGACTTGTATTT 7/+&$:<7%6,$$%'%/+)#$7((&*3>16'0/+
+1831_577_545 0 PHIX174 1711 37 33M1S * 0 0 TGTCATGCGCTCTAATCTCTGGGCATCTGGCTAT ]]]]]]]]]YURZ]]]]]]]VNNPV]WLLWZYN XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:33
+1831_577_559 0 PHIX174 3840 25 33M1S * 0 0 GCTGTTGCCGATACTTGGAACAATTTCTGGAAAG ]]]]]]]]WJWSWZW]XLX\P#-]]V=A(/TD9 XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:2 XO:i:0 XG:i:0 MD:Z:33
+1831_577_562 4 * 0 0 * * 0 0 GTTCCACTACGTTCCACGCAAAGGAATCCGAATC ((&*&0%)1%)#($2-,***%/-,,))&,-.1'*
+1831_577_637 0 PHIX174 4247 37 33M1S * 0 0 TGTTACTGAGAAGTTAATGGATGAATTGGCACAA BI2<]PLJN[M;7FYWYVW]]\WG@IQH6O]XI XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:1 XO:i:0 XG:i:0 MD:Z:33
+1831_577_641 4 * 0 0 * * 0 0 TATCTACCACCGCGGTGGCGCGAGAATGCTCCCT 47;/':A;;5?:72,(=),#*?+.#&7$8#%7/'
+1831_577_692 0 PHIX174 3905 37 33M1S * 0 0 GTCTAGGAAATAACCGTCAGGATTGACACCCTCA WU]]]SQ]]]TT]]]TS]]]PM]]]]]]]]]UZ XT:A:U CM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:33
diff -r 1a56a541f9f9 -r 14d54c9dbd59 test-data/bwa_wrapper_out2.sam
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/bwa_wrapper_out2.sam Wed Sep 16 11:14:39 2009 -0400
@@ -0,0 +1,97 @@
+@SQ SN:PHIX174 LN:5386
+1378_11_329 77 * 0 0 * * 0 0 GTTCGTGGCCGGTGGGTGTTTGGG ###$$#$#$&#####$'$#$###$
+1378_11_329 141 * 0 0 * * 0 0 AGACCGGGCGGGGTGGCGTTCGGT %##+'#######%###$#$##$(#
+1378_17_1788 77 * 0 0 * * 0 0 TGGGTGGATGTGTTGTCGTTCATG #$#$###$#$#######$#$####
+1378_17_1788 141 * 0 0 * * 0 0 TGCCGTGTCTTGCTAACGCCGATT #'#$$#$###%%##$$$$######
+1378_25_2035 77 * 0 0 * * 0 0 GTGCGTCGGGGAGGGTGCTGTCGG ######%#$%#$$###($###&&%
+1378_25_2035 141 * 0 0 * * 0 0 CTGCGTGTTGGTGTCTACTGGGGT #%#'##$#$##&%#%$$$%#%#'#
+1378_28_770 77 * 0 0 * * 0 0 GGTTGGGAGTTGGCGCGCGTGGTT ###$##%%$####%#%$#%%#($$
+1378_28_770 141 * 0 0 * * 0 0 CTGCTATGCCGGCCGCCTGCCCCT %##(#$$#%$#$%###$%%$##$#
+1378_33_1945 77 * 0 0 * * 0 0 GGGGGGGGGGGGGGGGGGGGGGGG .6;?;55697>8779457986264
+1378_33_1945 141 * 0 0 * * 0 0 GGGGGGGGGGGGGGGGGGGGGGGG +9;64287788752796/576352
+1378_34_789 77 * 0 0 * * 0 0 GGGCTTGCGTTAGTGAGAGGTTGT ###%$%$%%###$####$###$#&
+1378_34_789 141 * 0 0 * * 0 0 ATGGTGGCTGACGCGTTTGACTGT #$##%#$##$&$#%##$##$###$
+1378_35_263 77 * 0 0 * * 0 0 GGCGGGGGGGGGGGGGGGGGGGGG $%%&,)3/)%$-6'$&5&#$''5.
+1378_35_263 141 * 0 0 * * 0 0 GGGCGGGGGGCGGCGGGGGGGGGG ),,#%'$)'-(%&%'%',%%&&(&
+1378_43_186 77 * 0 0 * * 0 0 GCTAGGGTTTGGGTTTGCGGTGGG $%#$########%##%#$###'#'
+1378_43_186 141 * 0 0 * * 0 0 ATACTAGTTGGGACGCGTTGTGCT #$(4%$########$#$###$$$#
+1378_51_1671 77 * 0 0 * * 0 0 GGTGTTGTTCGGATGTAGCGTGGG ##%$$####$########$##0##
+1378_51_1671 141 * 0 0 * * 0 0 TGGGTAGGTGCGGCTCTTGCGGTC ##$#$%###%%#%#$##$$#####
+1378_56_324 77 * 0 0 * * 0 0 GCTGGGTGATCTAAGGAATGTAAT #$#####$$$#$$$$##%###*(#
+1378_56_324 141 * 0 0 * * 0 0 AGGCTTGGATTGTTGCGCTGACCT /+#**###%%##%#####$$$#$#
+1378_56_773 77 * 0 0 * * 0 0 TCTGGTCGGTTTCGGGGAGTGGAA ##%%#&$###$#$##%$####%%$
+1378_56_773 141 * 0 0 * * 0 0 TGTCGTGAGGTCACTTATCCCCAT &%#%##%%#####&#$%##$%##$
+1378_62_2027 77 * 0 0 * * 0 0 GTTGGCCTGGCCTGCCGTGCTGCG *##),/%##$)#%##1$#'%.#&#
+1378_62_2027 141 * 0 0 * * 0 0 CTTCCACGATCTGCTCGCTGTGGT (#&&$##$$#$%#%$$$#$###'#
+1378_62_2029 77 * 0 0 * * 0 0 GGCGGTGTGTGGTGCGGCTGTGCG /$$$=(####%####)$$%$-&%#
+1378_62_2029 141 * 0 0 * * 0 0 TCTGGGCTGTCTTCGGGTCGGTGT $%$$####$##$$#)##%%#$###
+1378_67_1795 77 * 0 0 * * 0 0 CGTGCCAACGACCGTCCTACGGAG @@.?7@@@.@:@A<<>>=>70<@7
+1378_67_1795 141 * 0 0 * * 0 0 TAGTGGGCTAGTCCGGGATCTACC B@C2@@?;-@@1>'A@@91@.@1'
+1378_68_466 77 * 0 0 * * 0 0 GTGTCATCTGAGGTAAAGCATTGT /##$09#$#.=$#$76+$%1'###
+1378_68_466 141 * 0 0 * * 0 0 GTGATCGTCGGTGCCAGTCCCTGT #(%)+##$#$#%#+$%##$#####
+1378_68_1692 77 * 0 0 * * 0 0 TGTTCGATTTAGGTCTTGCCTCGC ###%%$%%##%$#$##$###$$#$
+1378_68_1692 141 * 0 0 * * 0 0 GGTCTTCTGGGCACGGGCCAAGTT ###)%'&%##$###%#######$#
+1378_80_664 77 * 0 0 * * 0 0 TGTCTGCGTTGTATCTCTGGTGTA %##%,%$$#&$$###$#$%##'%#
+1378_80_664 141 * 0 0 * * 0 0 CTGCTTTGATCCCCGGTGGAGCAC 7#%###$$6#######$##$$$##
+1378_85_1786 77 * 0 0 * * 0 0 CCCTAGGAGCGTATACCGGACGAG ,'&/%/@,&1,&'/)&,6&&1)((
+1378_85_1786 141 * 0 0 * * 0 0 ATACTATGTCGATCTGTAAAAAAA )&.)#3%(a)$&%-,2#&+.-%0&./
+1378_86_1011 77 * 0 0 * * 0 0 AGGCGATGGGATATTATTTTACTT :$###)%##$9$###1$$#$2###
+1378_86_1011 141 * 0 0 * * 0 0 CTACGTTATTGCTCTGTTTGTCCT ######$%##$$$%###%#$####
+1378_86_1789 77 * 0 0 * * 0 0 GGCCAGGTACTAATAAATTCAACA 1.51/&%#'$,*?%#6&0$$5,20
+1378_86_1789 141 * 0 0 * * 0 0 CGAATATCCCCTGGTTTAGAAGTA 61?1;@/>@<=/(.7'(<5@=%$=
+1378_91_1596 77 * 0 0 * * 0 0 GCTTTTTCATTCGGTGCCTTTGGA '>%/3%=()8'#.%?50$&5>%)%
+1378_91_1596 141 * 0 0 * * 0 0 TTAGCGGTTGACTATCTGCTGACA *&+'#9'(%*'#//,&<),/)'*#
+1378_94_1595 77 * 0 0 * * 0 0 GCGGGTTAACCCAGTACCTCTGGC ,8@6'>8<76>@@(->9)7'*941
+1378_94_1595 141 * 0 0 * * 0 0 CGTGCGACAGCCCATGTTTTCAGA -=..5,3826&*+.+#+#%%6;%#
+1378_95_1039 77 * 0 0 * * 0 0 GTTCTGTGCCAGGTGAGGTACGGA &##,./#$&)6##+,'#$$0(##$
+1378_95_1039 141 * 0 0 * * 0 0 CGGCGTCCATCTTCGCCTTGAGAT $##.#$##$$#%$#$%%$###$)$
+1378_95_1767 77 * 0 0 * * 0 0 CTAATTGACCGGGCAAGCTATTAA ',,2'(10/>:=/7).3&%6&)&6
+1378_95_1767 141 * 0 0 * * 0 0 ACACGCACCATCTGGCGGCTAACC 86<65<4<C27/$5+#;-$+#2%$
+1378_96_1037 77 * 0 0 * * 0 0 CTGCTGGGCCATTTGACTTACTCA '$#+#(##-%5##+*&###-.$$$
+1378_96_1037 141 * 0 0 * * 0 0 ATCCCCCAAGATGCCTGTTGATTG $#$'##$$$#%$$#%###+##$#$
+1378_96_1764 77 * 0 0 * * 0 0 TCTTTGTAACCCACTTAGTATTTC 4='28>.@4881B807:822>%)1
+1378_96_1764 141 * 0 0 * * 0 0 TACACCGGAACCTTGCACTAAAGC 6-9'<#+81?+*<8-=69&6;*3)
+1378_98_1574 77 * 0 0 * * 0 0 AGGCGAGTGTGGGGGTTGTTTGAG +%%$#)##%##$####%###$%$#
+1378_98_1574 141 * 0 0 * * 0 0 GTTCTGCCGGTGTCTGTGGCGGGC $$#+&$$####%$$$###$%#%%#
+1378_107_1647 77 * 0 0 * * 0 0 GGTCTGGTTCTATGTTGGTCGACT ###'$$#$$$(#%###(#$##$%#
+1378_107_1647 141 * 0 0 * * 0 0 AGGCCTACTACGCGTCATTGATAG &#$$#$(.#%#$$####&$%##($
+1378_111_829 77 * 0 0 * * 0 0 GGTCTTCTATGGTGCTAAATTAGT $##'&###$##)#%($#$%#$'%#
+1378_111_829 141 * 0 0 * * 0 0 TGCGGCACTTGCTTCTTCGTATTT %#%##%#$%#$#%###$$##&#$$
+1378_111_1900 77 * 0 0 * * 0 0 GCACGCCTTTGGGCTAAGCCGTAA )$)'#%$########$'#&%$#(#
+1378_111_1900 141 * 0 0 * * 0 0 TCCCCTCGCTCGGCTCTGTGCTGT $&%*$#(#)##$#'##%(##$#$%
+1378_112_1483 77 * 0 0 * * 0 0 TGGAGTGGTGTGTTTGCTGAGCCA #$#)#############$#%#%'%
+1378_112_1483 141 * 0 0 * * 0 0 TGTCCAGCTATGCGGCTTCCTCCT %#$+#%#&#$#####%####%$##
+1378_125_1287 77 * 0 0 * * 0 0 TGACGTGGGTTGTCCCGTGAGATT ##$%%#$###$##$$#&%##$(%%
+1378_125_1287 141 * 0 0 * * 0 0 TGTCTCTGGGGGGCCTGGTTAGGT $##13$'%#$###$$###$$$#&#
+1378_126_468 77 * 0 0 * * 0 0 AAAAAACGGGCCGGGCGGACTAGG @@B@@@>@2>1+?:92)>@8&&<+
+1378_126_468 141 * 0 0 * * 0 0 TCTCCTGATTAGACATATCTCCGT 7>@318?=,=8@49579?..7,7)
+1378_127_664 77 * 0 0 * * 0 0 TCGCTTTGCCTATGTTTGTTCGGA #%$%#&##$%#%%###$$###)-'
+1378_127_664 141 * 0 0 * * 0 0 AGAGGTTGGTGTCTTGTCGCAGCT ##'#$######$$%######$$$#
+1378_129_463 77 * 0 0 * * 0 0 AAAAAAAAAAAAAAAAAAAAAAAA ,)&20%8'(&35-***1-2&+510
+1378_129_463 141 * 0 0 * * 0 0 CCTGTGGGCCAAGCCCAATGAAAG 8),,<6(--)<()5&.&/8+;.2+
+1378_129_875 77 * 0 0 * * 0 0 GACCTTTACGTATTGGGGGTTGGC ###)###+###$##$#&%##$,#$
+1378_129_875 141 * 0 0 * * 0 0 TTTCTATGGCTTACGCTGTCTGCC #$($##%####%$#$#####$###
+1378_140_1251 77 * 0 0 * * 0 0 TTTCCTTCGTGTGCGTGCGGAGTG #%#%$##$$$######.$$$%#%(
+1378_140_1251 141 * 0 0 * * 0 0 ATCCTAGCGCGGTGTCTTGGGGAC #$%1#$$$##$##$#$#$##$%$$
+1378_141_809 77 * 0 0 * * 0 0 TCTCGTGGTTTCTTTTTTATGTGT ##%)##$$#####%$#$#%%#'##
+1378_141_809 141 * 0 0 * * 0 0 TGTCCTCCAGTGTCTGTTGGGTGT %&,-##$$#(%###$#$$'###'#
+1378_144_983 77 * 0 0 * * 0 0 GTTCGTTCGTGGTGTACGAGGGTG #(#%#####($#%##$$#%##%#)
+1378_144_983 141 * 0 0 * * 0 0 AGCGCCCGGTTGGTGCGGCTCGTC -$(&%*$#*#))#$$$#%%$#$##
+1378_153_270 77 * 0 0 * * 0 0 GGCCGTGTGCGGGTGTAGATTGGA %$##($######&##$&$$$$%##
+1378_153_270 141 * 0 0 * * 0 0 AGTCCTTGTCCCCTGGGTTTTCCC +''$#&%$%#$##&$$($#&#$$#
+1378_155_1689 77 * 0 0 * * 0 0 CGCGTTCGGACAAAGCTAGCACCT @4@@=6=@@<4:@@681@@@.24.
+1378_155_1689 141 * 0 0 * * 0 0 TTGGGAGGGAGAGAGACTAGACCG ?4@@4<<??<?-@4@=4<5<?:/>
+1378_157_1580 77 * 0 0 * * 0 0 GGGATTGAAGGGATGTATGCTAGG #%$&%#$$'%$%#$##*#%$$$$#
+1378_157_1580 141 * 0 0 * * 0 0 TGGGCCTCGGTGCCCTTGGTCTGT #%)$##'#$$$&#####%#$#$##
+1378_161_317 77 * 0 0 * * 0 0 AATCCATACCCACAAAAGCAGGCC .&%','(@''?7//+&)+2.+)0)
+1378_161_317 141 * 0 0 * * 0 0 TTGGCCGGCAACCCCGGTACCTAA 7<,<'@)@>.)2@/')'&(?/-<(
+1378_177_735 77 * 0 0 * * 0 0 CGAGCCCTAAACCATGAGATCGGA @@B>@AC9@A<B8@=9>7@5)>,0
+1378_177_735 141 * 0 0 * * 0 0 AGTACGCCATGTATTTGCGACCAG =?@?C<88@=>:7>@55/.,416,
+1378_181_1684 77 * 0 0 * * 0 0 TTTCTGTTGTGGTTTTGTTGGGGT $##'$%'##%##$%$#$$####$*
+1378_181_1684 141 * 0 0 * * 0 0 CGACTCCCGCATTCACGGTCAAGT &*#,##$#&$*$$#$#$$$#%$##
+1378_187_1407 77 * 0 0 * * 0 0 TTGGGTGAAATCTTGTCGAGTGGA ####&##$$###$#####%##%%)
+1378_187_1407 141 * 0 0 * * 0 0 TGGCGTCCACTCGTGGGTCTATCG $#$'%#$%$%&$%#####$#$#%#
+1378_203_721 77 * 0 0 * * 0 0 CCTTTACGATCATAAACCATGACC 9<&./1&@;12')?<1',?/)&/.
+1378_203_721 141 * 0 0 * * 0 0 CCTAAATAACCCAGGGTAAAAGAT 9<1+2+1@=259@+;2.71&@+2&
+1378_206_2039 77 * 0 0 * * 0 0 CCCCCCCCCCCCCCCCCCCCCCCC ?=>>?=:;<>>4::<=56199(05
+1378_206_2039 141 * 0 0 * * 0 0 CCCCCCCCCCCCCCCCCCCCCCCC 9@?8>;>>><<994;=895895-8
diff -r 1a56a541f9f9 -r 14d54c9dbd59 test-data/bwa_wrapper_out3.sam
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/bwa_wrapper_out3.sam Wed Sep 16 11:14:39 2009 -0400
@@ -0,0 +1,2 @@
+@SQ SN:PHIX174 LN:5386
+081017-and-081020:1:1:1715:1759 16 PHIX174 322 25 36M * 0 0 GATATTTTAAAGGAGCGTGGATTACTATCTGAGTCC B&&I13A$G$*%$IIIIIII9(.+5$IIIIIII#II XT:A:U NM:i:2 X0:i:1 X1:i:0 XM:i:2 XO:i:0 XG:i:0 MD:Z:2C8A24
diff -r 1a56a541f9f9 -r 14d54c9dbd59 test-data/bwa_wrapper_out4.sam
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/bwa_wrapper_out4.sam Wed Sep 16 11:14:39 2009 -0400
@@ -0,0 +1,3 @@
+@SQ SN:PHIX174 LN:5386
+081017-and-081020:1:1:1715:1759 113 PHIX174 322 25 18M = 340 18 GATATTTTAAAGGAGCGT B&&I13A$G$*%$IIIII XT:A:U NM:i:2 SM:i:25 AM:i:25 X0:i:1 X1:i:0 XM:i:2 XO:i:0 XG:i:0 MD:Z:2C8A6
+081017-and-081020:1:1:1715:1759 177 PHIX174 340 37 18M = 322 -18 GGATTACTATCTGAGTCC II9(.+5$IIIIIII#II XT:A:U NM:i:0 SM:i:37 AM:i:25 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:18
diff -r 1a56a541f9f9 -r 14d54c9dbd59 test-data/fastq_conv_in1.fastq
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/fastq_conv_in1.fastq Wed Sep 16 11:14:39 2009 -0400
@@ -0,0 +1,4 @@
+@081017-and-081020:1:1:1715:1759
+GGACTCAGATAGTAATCCACGCTCCTTTAAAATATC
++
+II#IIIIIII$5+.(9IIIIIII$%*$G$A31I&&B
diff -r 1a56a541f9f9 -r 14d54c9dbd59 tools/next_gen_conversion/fastq_conversions.xml
--- a/tools/next_gen_conversion/fastq_conversions.xml Tue Sep 15 14:26:20 2009 -0400
+++ b/tools/next_gen_conversion/fastq_conversions.xml Wed Sep 16 11:14:39 2009 -0400
@@ -52,7 +52,7 @@
<tests>
<test>
<param name="type" value="sol2std" />
- <param name="input" value="bwa_phiX_sanger.fastq" ftype="fastqsolexa" />
+ <param name="input" value="fastq_conv_in1.fastq" ftype="fastqsolexa" />
<output name="outputFastqsanger" file="fastq_conv_out1.fastqsanger" />
</test>
<test>
diff -r 1a56a541f9f9 -r 14d54c9dbd59 tools/sr_mapping/bwa_wrapper.py
--- a/tools/sr_mapping/bwa_wrapper.py Tue Sep 15 14:26:20 2009 -0400
+++ b/tools/sr_mapping/bwa_wrapper.py Wed Sep 16 11:14:39 2009 -0400
@@ -3,8 +3,6 @@
"""
Runs BWA on single-end or paired-end data.
Produces a SAM file containing the mappings.
-
-usage: python bwa_wrapper.py reference_sequence indexing_algorithm(is_or_bwtsw) forward_fastq_file reverse_fastq_file(or_None) output alignment_type(single_or_paired) parameters(pre_set_or_full) file_type(solexa_or_solid) file_source(indexed_or_history) maxEditDist fracMissingAligns maxGapOpens maxGapExtens disallowLongDel disallowIndel seed maxEditDistSeed numThreads mismatchPenalty gapOpenPenalty gapExtensPenalty colorSpaceRev suboptAlign noIterSearch outputTopN maxInsertSize maxOccurPairing\nThe last eighteen need to all be specified, or all be None
"""
import optparse, os, sys, tempfile
@@ -16,6 +14,7 @@
def __main__():
#Parse Command Line
parser = optparse.OptionParser()
+ parser.add_option('', '--threads', dest='threads', help='The number of threads to use')
parser.add_option('', '--ref', dest='ref', help='The reference genome to use or index')
parser.add_option('', '--fastq', dest='fastq', help='The (forward) fastq file to use for the mapping')
parser.add_option('', '--rfastq', dest='rfastq', help='The reverse fastq file to use for mapping if paired-end data')
@@ -32,7 +31,6 @@
parser.add_option('-i', '--disallowIndel', dest='disallowIndel', help='Disallow indel within specified bps')
parser.add_option('-l', '--seed', dest='seed', help='Take the first specified subsequences')
parser.add_option('-k', '--maxEditDistSeed', dest='maxEditDistSeed', help='Maximum edit distance to the seed')
- parser.add_option('-t', '--numThreads', dest='numThreads', help='Number of threads')
parser.add_option('-M', '--mismatchPenalty', dest='mismatchPenalty', help='Mismatch penalty')
parser.add_option('-O', '--gapOpenPenalty', dest='gapOpenPenalty', help='Gap open penalty')
parser.add_option('-E', '--gapExtensPenalty', dest='gapExtensPenalty', help='Gap extension penalty')
@@ -42,8 +40,9 @@
parser.add_option('', '--outputTopN', dest='outputTopN', help='Output top specified hits')
parser.add_option('', '--maxInsertSize', dest='maxInsertSize', help='Maximum insert size for a read pair to be considered mapped good')
parser.add_option('', '--maxOccurPairing', dest='maxOccurPairing', help='Maximum occurrences of a read for pairings')
+ parser.add_option('', '--dbkey', dest='dbkey', help='')
(options, args) = parser.parse_args()
-
+
# index if necessary
if options.fileSource == 'history':
# make temp directory for placement of indices and copy reference file there
@@ -65,46 +64,42 @@
else:
indexing_cmds = '-a %s' % indexingAlg
options.ref = os.path.join(tmp_dir,os.path.split(options.ref)[1])
- cmd1 = 'bwa index %s %s 2> /dev/null' % (indexing_cmds, options.ref)
+ cmd1 = 'cd %s; bwa index %s %s 2> /dev/null' % (tmp_dir, indexing_cmds, options.ref)
try:
os.system(cmd1)
except Exception, erf:
stop_err('Error indexing reference sequence\n' + str(erf))
-
# set up aligning and generate aligning command options
if options.params == 'pre_set':
if options.fileType == 'solid':
- aligning_cmds = '-c'
+ aligning_cmds = '-c -t %s' % options.threads
else:
- aligning_cmds = ''
+ aligning_cmds = '-t %s' % options.threads
gen_alignment_cmds = ''
else:
aligning_cmds = '-n %s -o %s -e %s -d %s -i %s %s -k %s -t %s -M %s -O %s -E %s %s %s %s' % \
((options.fracMissingAligns, options.maxEditDist)[options.maxEditDist != '0'],
options.maxGapOpens, options.maxGapExtens, options.disallowLongDel,
- options.disallowIndel, ('',' -l %s'%options.seed)[options.seed!=-1],
- options.maxEditDistSeed, options.numThreads, options.mismatchPenalty,
+ options.disallowIndel, ('',' -l %s'%options.seed)[options.seed!='-1'],
+ options.maxEditDistSeed, options.threads, options.mismatchPenalty,
options.gapOpenPenalty, options.gapExtensPenalty, ('',' -c')[options.colorSpaceRev=='true'],
('',' -R')[options.suboptAlign=='true'], ('',' -N')[options.noIterSearch=='true'])
if options.genAlignType == 'single':
gen_alignment_cmds = '-n %s' % options.outputTopN
elif options.genAlignType == 'paired':
gen_alignment_cmds = '-a %s -o %s' % (options.maxInsertSize, options.maxOccurPairing)
-
- # set up output file
- file(options.output,'w').write('QNAME\tFLAG\tRNAME\tPOS\tMAPQ\tCIGAR\tMRNM\tMPOS\tISIZE\tSEQ\tQUAL\tOPT\n')
+ # set up output files
tmp_align_out = tempfile.NamedTemporaryFile()
+ tmp_align_out2 = tempfile.NamedTemporaryFile()
# prepare actual aligning and generate aligning commands
cmd2 = 'bwa aln %s %s %s > %s 2> /dev/null' % (aligning_cmds, options.ref, options.fastq, tmp_align_out.name)
cmd2b = ''
if options.genAlignType == 'paired':
- tmp_align_out2 = tempfile.NamedTemporaryFile()
cmd2b = 'bwa aln %s %s %s > %s 2> /dev/null' % (aligning_cmds, options.ref, options.rfastq, tmp_align_out2.name)
cmd3 = 'bwa sampe %s %s %s %s %s %s >> %s 2> /dev/null' % (gen_alignment_cmds, options.ref, tmp_align_out.name, tmp_align_out2.name, options.fastq, options.rfastq, options.output)
else:
cmd3 = 'bwa samse %s %s %s %s >> %s 2> /dev/null' % (gen_alignment_cmds, options.ref, tmp_align_out.name, options.fastq, options.output)
-
# align
try:
os.system(cmd2)
@@ -116,11 +111,13 @@
os.system(cmd2b)
except Exception, erf:
stop_err("Error aligning second sequence\n" + str(erf))
-
# generate align
try:
os.system(cmd3)
except Exception, erf:
stop_err("Error sequence aligning sequence\n" + str(erf))
-
+ # clean up temp files
+ tmp_align_out.close()
+ tmp_align_out2.close()
+
if __name__=="__main__": __main__()
diff -r 1a56a541f9f9 -r 14d54c9dbd59 tools/sr_mapping/bwa_wrapper.xml
--- a/tools/sr_mapping/bwa_wrapper.xml Tue Sep 15 14:26:20 2009 -0400
+++ b/tools/sr_mapping/bwa_wrapper.xml Wed Sep 16 11:14:39 2009 -0400
@@ -1,7 +1,8 @@
-<tool id="bwa_wrapper" name="BWA" version="1.0.0">
+<tool id="bwa_wrapper" name="BWA" version="1.0.1">
<description> fast mapping of reads against reference sequence</description>
<command interpreter="python">
bwa_wrapper.py
+ --threads="8"
#if $solidOrSolexa.solidRefGenomeSource.refGenomeSource == "history":
--ref=$solidOrSolexa.solidRefGenomeSource.ownFile
#else:
@@ -27,7 +28,6 @@
--disallowIndel="None"
--seed="None"
--maxEditDistSeed="None"
- --numThreads="None"
--mismatchPenalty="None"
--gapOpenPenalty="None"
--gapExtensPenalty="None"
@@ -46,7 +46,6 @@
--disallowIndel=$params.disallowIndel
--seed=$params.seed
--maxEditDistSeed=$params.maxEditDistSeed
- --numThreads=$params.numThreads
--mismatchPenalty=$params.mismatchPenalty
--gapOpenPenalty=$params.gapOpenPenalty
--gapExtensPenalty=$params.gapExtensPenalty
@@ -57,9 +56,14 @@
--maxInsertSize=$params.maxInsertSize
--maxOccurPairing=$params.maxOccurPairing
#end if
+ #if $solidOrSolexa.solidRefGenomeSource.refGenomeSource == "history":
+ --dbkey=$dbkey
+ #else:
+ --dbkey="None"
+ #end if
</command>
<inputs>
- <conditional name="solidOrSolexa">
+ <conditional name="solidOrSolexa">
<param name="solidSolexa" type="select" label="Select SOLiD or Solexa format for the original dataset">
<option value="solexa">Solexa</option>
<option value="solid">SOLiD</option>
@@ -70,18 +74,18 @@
<option value="indexed">Use a built-in index</option>
<option value="history">Use one from the history</option>
</param>
- <when value="history">
- <param name="ownFile" type="data" format="fasta" label="Select a reference genome" />
- </when>
<when value="indexed">
<param name="indices" type="select" label="Select a reference genome">
<options from_file="sequence_index_color.loc">
<column name="value" index="1" />
<column name="name" index="0" />
- <filter type="sort_by" column="0" />
+ <filter type="sort_by" column="0" />
</options>
</param>
</when>
+ <when value="history">
+ <param name="ownFile" type="data" format="fasta" metadata_name="dbkey" label="Select a reference genome" />
+ </when>
</conditional>
</when>
<when value="solexa">
@@ -90,39 +94,39 @@
<option value="indexed">Use a built-in index</option>
<option value="history">Use one from the history</option>
</param>
- <when value="history">
- <param name="ownFile" type="data" format="fasta" label="Select a reference genome" />
- </when>
<when value="indexed">
<param name="indices" type="select" label="Select a reference genome">
<options from_file="sequence_index_base.loc">
<column name="value" index="1" />
<column name="name" index="0" />
- <filter type="sort_by" column="0" />
+ <filter type="sort_by" column="0" />
</options>
</param>
+ </when>
+ <when value="history">
+ <param name="ownFile" type="data" format="fasta" metadata_name="dbkey" label="Select a reference genome" />
</when>
</conditional>
</when>
</conditional>
- <conditional name="paired">
- <param name="sPaired" type="select" label="Is this library mate-paired?">
- <option value="single">Single-end</option>
- <option value="paired">Paired-end</option>
- </param>
- <when value="single">
- <param name="input1" type="data" format="fastqsanger" label="FASTQ file" />
- </when>
- <when value="paired">
- <param name="input1" type="data" format="fastqsanger" label="Forward FASTQ file" />
- <param name="input2" type="data" format="fastqsanger" label="Reverse FASTQ file" />
- </when>
- </conditional>
- <conditional name="params">
+ <conditional name="paired">
+ <param name="sPaired" type="select" label="Is this library mate-paired?">
+ <option value="single">Single-end</option>
+ <option value="paired">Paired-end</option>
+ </param>
+ <when value="single">
+ <param name="input1" type="data" format="fastqsanger" label="FASTQ file" />
+ </when>
+ <when value="paired">
+ <param name="input1" type="data" format="fastqsanger" label="Forward FASTQ file" />
+ <param name="input2" type="data" format="fastqsanger" label="Reverse FASTQ file" />
+ </when>
+ </conditional>
+ <conditional name="params">
<param name="source_select" type="select" label="BWA settings to use" help="For most mapping needs use Commonly used settings. If you want full control use Full List">
- <option value="pre_set">Commonly used</option>
- <option value="full">Full Parameter List</option>
- </param>
+ <option value="pre_set">Commonly used</option>
+ <option value="full">Full Parameter List</option>
+ </param>
<when value="pre_set" />
<when value="full">
<param name="maxEditDist" type="integer" value="0" label="Maximum edit distance" help="Enter this value OR a fraction of missing alignments, not both" />
@@ -133,9 +137,8 @@
<param name="disallowIndel" type="integer" value="5" label="Disallow insertion/deletion within [value] bp towards the end" />
<param name="seed" type="integer" value="-1" label="Number of first subsequences to take as seed" help="Enter -1 for infinity" />
<param name="maxEditDistSeed" type="integer" value="2" label="Maximum edit distance in the seed" />
- <param name="numThreads" type="integer" value="1" label="Number of threads, in multi-threading mode" />
<param name="mismatchPenalty" type="integer" value="3" label="Mismatch penalty" help="BWA will not search for suboptimal hits with a score lower than [value]" />
- <param name="gapOpenPenalty" type="integer" value="1" label="Gap open penalty" />
+ <param name="gapOpenPenalty" type="integer" value="11" label="Gap open penalty" />
<param name="gapExtensPenalty" type="integer" value="4" label="Gap extension penalty" />
<param name="colorSpaceRev" type="select" label="Reverse query but don't compement it" help="Reverse query for all alignment in color space">
<option value="false">Don't reverse query</option>
@@ -150,34 +153,33 @@
</conditional>
</inputs>
<outputs>
- <data format="tabular" name="output" />
+ <data format="sam" name="output" />
</outputs>
-<!-- Tests all fail because of problem with nested conditionals in test framework
<tests>
<test>
<param name="solidSolexa" value="solexa" />
<param name="refGenomeSource" value="indexed" />
<param name="indices" value="phiX" />
<param name="sPaired" value="single" />
- <param name="input1" value="bwa_phiX_sanger.fastq" />
+ <param name="input1" value="bwa_wrapper_in1.fastq" />
<param name="source_select" value="pre_set" />
- <output name="output" file="bwa_wrapper_out0.tabular" />
+ <output name="output" file="bwa_wrapper_out0.sam" ftype="sam" />
</test>
<test>
<param name="solidSolexa" value="solid" />
<param name="refGenomeSource" value="history" />
<param name="ownFile" value="phiX.fa" />
<param name="sPaired" value="single" />
- <param name="input1" value="bwa_phiX_sanger.fastq" />
+ <param name="input1" value="bwa_wrapper_in0.fastq" />
<param name="source_select" value="pre_set" />
- <output name="output" file="bwa_wrapper_out0b.tabular" />
+ <output name="output" file="bwa_wrapper_out0b.sam" ftype="sam" />
</test>
<test>
<param name="solidSolexa" value="solid" />
<param name="refGenomeSource" value="indexed" />
<param name="indices" value="phiX" />
<param name="sPaired" value="single" />
- <param name="input1" value="bwa_solid.fastq" />
+ <param name="input1" value="bwa_wrapper_in2.fastq" />
<param name="source_select" value="full" />
<param name="maxEditDist" value="0" />
<param name="fracMissingAligns" value="0.04" />
@@ -187,9 +189,8 @@
<param name="disallowIndel" value="5" />
<param name="seed" value="-1" />
<param name="maxEditDistSeed" value="2" />
- <param name="numThreads" value="1" />
<param name="mismatchPenalty" value="3" />
- <param name="gapOpenPenalty" value="1" />
+ <param name="gapOpenPenalty" value="11" />
<param name="gapExtensPenalty" value="4" />
<param name="colorSpaceRev" value="true" />
<param name="suboptAlign" value="true" />
@@ -197,15 +198,15 @@
<param name="outputTopN" value="-1" />
<param name="maxInsertSize" value="500" />
<param name="maxOccurPairing" value="100000" />
- <output name="output" file="bwa_wrapper_out1.tabular" />
+ <output name="output" file="bwa_wrapper_out1.sam" ftype="sam" />
</test>
<test>
<param name="solidSolexa" value="solid" />
<param name="refGenomeSource" value="indexed" />
<param name="indices" value="phiX" />
<param name="sPaired" value="paired" />
- <param name="input1" value="bwa_solid_f.fastq" />
- <param name="input2" value="bwa_solid_r.fastq" />
+ <param name="input1" value="bwa_wrapper_in3.fastq" />
+ <param name="input2" value="bwa_wrapper_in4.fastq" />
<param name="source_select" value="full" />
<param name="maxEditDist" value="0" />
<param name="fracMissingAligns" value="0.04" />
@@ -215,9 +216,8 @@
<param name="disallowIndel" value="5" />
<param name="seed" value="-1" />
<param name="maxEditDistSeed" value="2" />
- <param name="numThreads" value="1" />
<param name="mismatchPenalty" value="3" />
- <param name="gapOpenPenalty" value="1" />
+ <param name="gapOpenPenalty" value="11" />
<param name="gapExtensPenalty" value="4" />
<param name="colorSpaceRev" value="true" />
<param name="suboptAlign" value="true" />
@@ -225,14 +225,14 @@
<param name="outputTopN" value="-1" />
<param name="maxInsertSize" value="500" />
<param name="maxOccurPairing" value="100000" />
- <output name="output" file="bwa_wrapper_out2.tabular" />
+ <output name="output" file="bwa_wrapper_out2.sam" ftype="sam" />
</test>
<test>
<param name="solidSolexa" value="solexa" />
<param name="refGenomeSource" value="indexed" />
<param name="indices" value="phiX" />
<param name="sPaired" value="single" />
- <param name="input1" value="bwa_phiX_sanger.fastq" />
+ <param name="input1" value="bwa_wrapper_in1.fastq" />
<param name="source_select" value="full" />
<param name="maxEditDist" value="0" />
<param name="fracMissingAligns" value="0.04" />
@@ -242,9 +242,8 @@
<param name="disallowIndel" value="5" />
<param name="seed" value="-1" />
<param name="maxEditDistSeed" value="2" />
- <param name="numThreads" value="1" />
<param name="mismatchPenalty" value="3" />
- <param name="gapOpenPenalty" value="1" />
+ <param name="gapOpenPenalty" value="11" />
<param name="gapExtensPenalty" value="4" />
<param name="colorSpaceRev" value="false" />
<param name="suboptAlign" value="true" />
@@ -252,15 +251,15 @@
<param name="outputTopN" value="-1" />
<param name="maxInsertSize" value="500" />
<param name="maxOccurPairing" value="100000" />
- <output name="output" file="bwa_wrapper_out3.tabular" />
+ <output name="output" file="bwa_wrapper_out3.sam" ftype="sam" />
</test>
<test>
<param name="solidSolexa" value="solexa" />
<param name="refGenomeSource" value="indexed" />
<param name="indices" value="phiX" />
<param name="sPaired" value="paired" />
- <param name="input1" value="bwa_phiX_sanger_f.fastq" />
- <param name="input2" value="bwa_phiX_sanger_r.fastq" />
+ <param name="input1" value="bwa_wrapper_in5.fastq" />
+ <param name="input2" value="bwa_wrapper_in6.fastq" />
<param name="source_select" value="full" />
<param name="maxEditDist" value="0" />
<param name="fracMissingAligns" value="0.04" />
@@ -270,9 +269,8 @@
<param name="disallowIndel" value="5" />
<param name="seed" value="-1" />
<param name="maxEditDistSeed" value="2" />
- <param name="numThreads" value="1" />
<param name="mismatchPenalty" value="3" />
- <param name="gapOpenPenalty" value="1" />
+ <param name="gapOpenPenalty" value="11" />
<param name="gapExtensPenalty" value="4" />
<param name="colorSpaceRev" value="false" />
<param name="suboptAlign" value="true" />
@@ -280,11 +278,10 @@
<param name="outputTopN" value="-1" />
<param name="maxInsertSize" value="500" />
<param name="maxOccurPairing" value="100000" />
- <output name="output" file="bwa_wrapper_out4.tabular" />
- </test>
+ <output name="output" file="bwa_wrapper_out4.sam" ftype="sam" />
+ </test>
</tests>
--->
- <help>
+ <help>
**What it does**
@@ -294,7 +291,7 @@
**Input formats**
-BWA accepts files in FASTQ format.
+BWA accepts files in Sanger FASTQ format.
------
@@ -336,7 +333,7 @@
-------
-**BWA Settings**
+**BWA settings**
All of the options have a default value. You can change any of them. All of the options in BWA have been implemented here.
@@ -390,9 +387,9 @@
-o INT Maximum occurrences of a read for pairing. A read with more
occurrences will be treated as a single-end read. Reducing this
parameter helps faster pairing. [100000]
-
- </help>
+ </help>
+ <code file="bwa_wrapper_code.py" />
</tool>
diff -r 1a56a541f9f9 -r 14d54c9dbd59 tools/sr_mapping/bwa_wrapper_code.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/sr_mapping/bwa_wrapper_code.py Wed Sep 16 11:14:39 2009 -0400
@@ -0,0 +1,8 @@
+import os
+
+def exec_before_job(app, inp_data, out_data, param_dict, tool):
+ try:
+ refFile = param_dict['solidOrSolexa']['solidRefGenomeSource']['indices'].value
+ out_data['output'].set_dbkey(os.path.split(refFile)[1].split('.')[0])
+ except Exception, eq:
+ out_data['output'].set_dbkey(param_dict['dbkey'])
1
0
16 Sep '09
details: http://www.bx.psu.edu/hg/galaxy/rev/40c5e1853a66
changeset: 2691:40c5e1853a66
user: gua110
date: Mon Sep 14 17:03:17 2009 -0400
description:
Updating FASTX tool-set to the latest version v0.0.10
28 file(s) affected in this change:
static/fastx_icons/fasta_clipping_histogram_3.png
static/fastx_icons/fasta_clipping_histogram_4.png
test-data/fasta_collapser1.out
test-data/fasta_formatter1.fasta
test-data/fasta_formatter1.out
test-data/fasta_formatter2.out
test-data/fasta_nuc_changer1.fasta
test-data/fasta_nuc_changer1.out
test-data/fasta_nuc_changer2.fasta
test-data/fasta_nuc_changer2.out
test-data/fastq_stats1.out
tool-data/fastx_clipper_sequences.txt
tool_conf.xml.sample
tools/fastx_toolkit/fasta_clipping_histogram.xml
tools/fastx_toolkit/fasta_collapser.xml
tools/fastx_toolkit/fasta_formatter.xml
tools/fastx_toolkit/fasta_nucleotide_changer.xml
tools/fastx_toolkit/fastq_nucleotides_distribution.xml
tools/fastx_toolkit/fastq_qual_conv.xml
tools/fastx_toolkit/fastq_qual_stat.xml
tools/fastx_toolkit/fastq_quality_converter.xml
tools/fastx_toolkit/fastx_barcode_splitter.xml
tools/fastx_toolkit/fastx_barcode_splitter_galaxy_wrapper.sh
tools/fastx_toolkit/fastx_clipper.xml
tools/fastx_toolkit/fastx_collapser.xml
tools/fastx_toolkit/fastx_nucleotides_distribution.xml
tools/fastx_toolkit/fastx_quality_statistics.xml
tools/fastx_toolkit/fastx_renamer.xml
diffs (1772 lines):
diff -r 0f97b3048bc3 -r 40c5e1853a66 static/fastx_icons/fasta_clipping_histogram_3.png
Binary file static/fastx_icons/fasta_clipping_histogram_3.png has changed
diff -r 0f97b3048bc3 -r 40c5e1853a66 static/fastx_icons/fasta_clipping_histogram_4.png
Binary file static/fastx_icons/fasta_clipping_histogram_4.png has changed
diff -r 0f97b3048bc3 -r 40c5e1853a66 test-data/fasta_collapser1.out
--- a/test-data/fasta_collapser1.out Mon Sep 14 15:27:55 2009 -0400
+++ b/test-data/fasta_collapser1.out Mon Sep 14 17:03:17 2009 -0400
@@ -1,24 +1,24 @@
->1-3
+>1-15
+AGTACAAGGACATGC
+>2-11
+ATTGCTGCTCGGATGGTCCGGCTGTGCACAC
+>3-5
+TTCAACGCCGCCGTGAAC
+>4-3
CTGCTGCGATCGGTGTGC
->2-1
-TTACCTCACGATATTGTAATA
->3-1
-CCTTGTAGTGGATTCTGATGA
->4-1
-TGATTTCCAGAGCCAAT
->5-11
-ATTGCTGCTCGGATGGTCCGGCTGTGCACAC
+>5-1
+TCAAATTCTAGATTTTTACGG
>6-1
ACCATTCGAGCATAC
>7-1
+TGATTTCCAGAGCCAAT
+>8-1
+TTACCTCACGATATTGTAATA
+>9-1
+TGTATTTACAATGACTAGAAA
+>10-1
+CCTTGTAGTGGATTCTGATGA
+>11-1
CGATTGCCGAAGTCTACCA
->8-5
-TTCAACGCCGCCGTGAAC
->9-1
-ATGACTTCATCGTCCACCCTTTAGAACT
->10-15
-AGTACAAGGACATGC
->11-1
-TCAAATTCTAGATTTTTACGG
>12-1
-TGTATTTACAATGACTAGAAA
+ATGACTTCATCGTCCACCCTTTAGAACT
\ No newline at end of file
diff -r 0f97b3048bc3 -r 40c5e1853a66 test-data/fasta_formatter1.fasta
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/fasta_formatter1.fasta Mon Sep 14 17:03:17 2009 -0400
@@ -0,0 +1,100 @@
+>Scaffold3648
+AGGAATGATGACTACAATGATCAACTTAACCTATCTATTTAATTTAGTTC
+CCTAATGTCAGGGACCTACCTGTTTTTGTTATGTTTGGGTTTTGTTGTTG
+TTGTTTTTTTAATCTGAAGGTATTGTGCATTATATGACCTGTAATACACA
+GTATAACTTTTCAAATACTTTTGTTTTACAACTTTTCTCTCTGGACTTAT
+ATTAAAGTCAATTTTAATGAACATGTAGTAAAAACTAATACATGTACATC
+TACAGTTTATTTATTTTTTTCTTCTTCTTTTTGTATTTCTTGTGTTACAT
+TATTTCACTTCACGTTCATGTTACCAACCTTGCCCCCTTGCTTTCCATGC
+AAAAAAAGAAAAAAAAGAAGCAATACTTACACTTACCCTTGAGATATCTT
+GATCTGAATGCTTTAACATTCTATATGTACAATAAATTTTTGTATCTATA
+GCCTATTATTATATATGTTGCTATGTCAGGCACATTGACAACATTCTCAG
+AAGGTTAGAAGATGGTATTGTTCTGAAATGCCTGGAATGCCTTGTGAACT
+AAGATGATTACTCATGTCATTAAAGTCCCCTAACCCAGGTATTTCCTCCT
+TCCCATGACGAAAACAGTCCATTTAAACTTCACCCCACTTTGGACCCGAA
+AGTGGGGTGCATTTTGGTGGTAAGCTCACCACAGAGCAAGAGAGAGTTAG
+AGTCCCTAATCTGCAGTGTAAACAAACTTTGCCAGGACATCACCAGCCCA
+ACCTTGATAAGTACTGCTTGGAACTCCTCCATGATGTTCTAGTCTTATTC
+GCAGTCTCATATAGGTTCGGATTTTGTCCATTCTCATAGCTACCAGTATA
+CATGGGAGATGCCAGTTTCATCTTCCTTGCTTCACTTTATAAGCATAGTT
+ATATCANGAACTTCCTGGTTATAATTATGTTCCTTTCAAGTTTCATCATA
+ATTGTCTAGTTCGATATAGTACATGGACACAATTAAATATGATATTGTCT
+>Scaffold9299
+CAGCATCTACATAATATGATCGCTATTAAACTTAAATCTCCTTGACGGAG
+TCTTCGGTCATAACACAAACCCAGACCTACGTATATGACAAAGCTAATAG
+GAAAAGCATCCTTGTTTGTTTCACTATGCTTTTTAATGGTTGACGTTAAa
+ggtaaagaccagtattggaaacgccccaatttcaaaaaatgaaatggaag
+ctctcattaccaatcatgtgaaagaatatgttttgactaatacatgatga
+taaaaaaattgccgggaaaccgcctactaattcatatatttagtaaattt
+gtttctctcatggtctgtgagagatatagggtagtcccatatacatcttt
+ctgtgtatagtgcttgtaactttacgaagaatgggccaaatttcttatca
+ttttgatgattccagaaccttgcagatgcgagatggtagatgatcaacct
+tttctgatcgattccataacgtttctttcacaatgcaatcgcatgaccat
+aactggtctttacctTTAAGTTGTAGGTCTTAATTGATAACACTATATAG
+TTTTTTTCTTTTTACTGTTTTTATTAATGACCTCTGTAATTTGCCCTATT
+GTGAAAATACTAAAATATGTTTATACGCCGATGATGCGGCAATATTTTGC
+CAAGGCAAAGAAATTGCCCTTGTTGAGAAAACTCTTAAATGTGAGTTTAA
+AAAAATAGTTGATCACATTGAAAAAGATGACTTAATGTTGAATATCAAGA
+AGTGTAAGATCATGTTATTTGGGACAAGAAAACGAATCAAAAATCAAAGT
+GTACGCTTGATTTACAGAGATAATGTTATCGAAGTTGTAAATGAATTTAA
+ATATCTTGGTGTATTATTTGATAATTATTTAAAGTGGGATATACATATAT
+CGAAAACTGCCTCCAAAATATCTAGAACCATATCATGTATAAAACGAATT
+AAATATTATTTGCCGAAAAGAATTTTAAAATTGTTATATGATAGTTTGAT
+ATTGTCACATATTGACTACGGTATTGTTTTGTGGGGATGTTCAGCAAAGT
+GTCATTTGGAAAAGTTACAAAAGTTACAAAATCGTTATGCCCGTTTAATA
+CTAAACGTAGATATTTTGACACCTCGTATTATATTATTATCCTCTCTAAG
+ATGGCAATCAGTTGTTCAGAGAGTGCAATACCAA
+>Scaffold9309
+GAAGGAAGAAGAGGAAAATAATGATGAATTTGTAGAATTTCTATAACGTA
+TGAAAACATAAACAACATGAAAAAGTATGAACCGACAGAAGAATGAAAAT
+TTCAATCATATAACATGTCATTCACTTCTCTTCTCTGACTGTCAAGTATT
+AGGTATTCCTTTTTATTTCCTCTTAAAATGATCATAGTTTCCTATTTCTT
+TTACACCATTGGGAAGGGAATTCCAATGTTTTATGGCATTGTAATAAAAC
+GAATTTCCAATACTACCTACTCTTTCTGGTAAGTTAAAGTTGAATCGGCT
+ATTTCTTGTATTATAATCATGTACGTCAGTAACAAGATCGAAGTTGGATC
+GAATATAATGATTCGACCTAGTATGATATATTTTATGCACGTGATGCAAT
+ACGAGTTGTTTTGATCTTTGGTCGACTTCAAGAAAACCAGCTTTAGAAAG
+TTCGCTGTAGCCAACATGAGTTCTTGCCTTGGACTAGAACAGTTGATAAA
+TCTCACCATTTTGTTCTTTAAGATGGGTAGAAGAATCCCTGCAATCTAAA
+TGGTCAATTACTGTGAAGTTATTTTTACTGGATGCACCCAATAttttttt
+gataatttttttttctttgataatttttttctttttctttaataaatttt
+ttggataatttttttttggataaatagttcttttttgataattctaataa
+tttttttatttattttttttttttctataattttttttaaaaaatttatt
+aatttttaattaaaaaaaaaataaGAGTTAACAGATTAAGGGAAACTGAC
+AATTCAAAAAAAAAAAAAA
+>Scaffold9310
+GCGGGGGCTGGGGAGGAAGGGGTGGCGTTATTTCACTTCCGATCTAATAC
+GCTTTCTTAAGACACTGAAATATCAGTAGGTATTGGTATAGAGAATTACT
+TTTTATTTTTAATTAAAACATTATCGAAATGAAGATACAGAGAAAAACGA
+TGAGATGTAAGAAGTGCGCGTATTTAtgtgtgtgggtgcgtgtgtgtgtg
+tgtgtgtgtgttgtgtgcgtgcgtgtgtgtggtggtgtgtACTAATTTTG
+ATGTGTGTTGTGGCACAATTGCAATCATCAGTATCTTCATGAAAATGATA
+ACCAGAAGCACAAAAAGGAGGgtgcgtgtgtgtgtgtgtgtgtttagtgt
+gcgtgcgtgtgagggtgtttaagtgtgtatgtCGGAAATGTGGCACAATT
+GCAATCATCTGTATCTTCATGAAAATGATAACCAGAAGAACAAAAAAAAA
+AAACATTGAGAGAACATGTTTTTTTGATGGAAGACAAGAAGTTCTCGTAA
+CGTAGGATCTCCGAGACATGATGGGGTCAACTTAAAAAGAGAGCAGTGAG
+AGGCATTTATATCGAAGGTCAGGGAAAGGCAAACAAAGAAAGAAAAAAAA
+AAGGCTCACAGGAGAACGAAAACACGGGCCAAAATAATAAACAGGAGCAA
+GTGAACGGGCAGTTTGGTAGCTACTTCATTTACCGGCTTTTAAaggtact
+atgtcccatttgcaggtcaaaaaaaatgaaaaagttaaattccaactgca
+tttgaaagataatactaatttacaacttccctaaaaaaggtggggcttga
+aaatgtcttcaagtgcggaaaataacgactattagttgtcaaatcgactt
+tagggCTATAGAGCCCAAAAGTAATAGTCTTGA
+>Scaffold11911
+TTCTTGGCACCCCCCCCCCCCCCACACTCCTGCACTGAAGAACTACTCAA
+GTTTAAACTTTGCATTGCTTTTCTTTCTTTTTCAGTATTTTTTGCTTGGT
+ACATGTTTCTCTTAATATCTGTCGTATAGatttttaatatttttatttat
+atCTACGTCAATCTGGCTGttctttttcttgtcttctttttttttctctc
+tcttttttttcctcgtattttGTATTGATCCTTACCCTAGTTTTTGAACT
+TGAACAGCAATTTGCAGCACTCAAATTTCTTTAAAATTACCTTCTCTTAT
+TTGtctctgttcccctctccccccctctctctctctctctctctctctct
+ctctctctctttcATCTCCCATATCATAATTTGAAGTACCATCTATGGTG
+TTTTCAGATTGATCTTTCTTGCTTTCCCCACCCTCCCCCTTTATGCAGTT
+AATTTTCAGTCTATTTGTGTTTTCTGTGGTTGATTCTAATCATATTCTAA
+CTCTTATTTTACATTTTACTTCACTAACAACTGGTTTATTATATTTGTTA
+CTAATTTTGAATTAAACTATTTACCATTCTGAACGAACTGAAAGATTAAA
+GATCAAACTATCTATGAATAGAATGGTATTTCTTCAATTTATTCAAATTT
+CTCTCTCTTTAACCCCCTTTTTCTGCTTGCATTTTTATCCCTTTGCCGTG
+GACTTCACTGGATATTTTGCTTTGATGCCAATCCAACAATTTTGCATATA
+TTA
diff -r 0f97b3048bc3 -r 40c5e1853a66 test-data/fasta_formatter1.out
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/fasta_formatter1.out Mon Sep 14 17:03:17 2009 -0400
@@ -0,0 +1,10 @@
+>Scaffold3648
+AGGAATGATGACTACAATGATCAACTTAACCTATCTATTTAATTTAGTTCCCTAATGTCAGGGACCTACCTGTTTTTGTTATGTTTGGGTTTTGTTGTTGTTGTTTTTTTAATCTGAAGGTATTGTGCATTATATGACCTGTAATACACAGTATAACTTTTCAAATACTTTTGTTTTACAACTTTTCTCTCTGGACTTATATTAAAGTCAATTTTAATGAACATGTAGTAAAAACTAATACATGTACATCTACAGTTTATTTATTTTTTTCTTCTTCTTTTTGTATTTCTTGTGTTACATTATTTCACTTCACGTTCATGTTACCAACCTTGCCCCCTTGCTTTCCATGCAAAAAAAGAAAAAAAAGAAGCAATACTTACACTTACCCTTGAGATATCTTGATCTGAATGCTTTAACATTCTATATGTACAATAAATTTTTGTATCTATAGCCTATTATTATATATGTTGCTATGTCAGGCACATTGACAACATTCTCAGAAGGTTAGAAGATGGTATTGTTCTGAAATGCCTGGAATGCCTTGTGAACTAAGATGATTACTCATGTCATTAAAGTCCCCTAACCCAGGTATTTCCTCCTTCCCATGACGAAAACAGTCCATTTAAACTTCACCCCACTTTGGACCCGAAAGTGGGGTGCATTTTGGTGGTAAGCTCACCACAGAGCAAGAGAGAGTTAGAGTCCCTAATCTGCAGTGTAAACAAACTTTGCCAGGACATCACCAGCCCAACCTTGATAAGTACTGCTTGGAACTCCTCCATGATGTTCTAGTCTTATTCGCAGTCTCATATAGGTTCGGATTTTGTCCATTCTCATAGCTACCAGTATACATGGGAGATGCCAGTTTCATCTTCCTTGCTTCACTTTATAAGCATAGTTATATCANGAACTTCCTGGTTATAATTATGTTCCTTTCAAGTTTCATCATAATTGTCTAGTTCGATATAGTACATGGACACAATTAAATA
TGATATTGTCT
+>Scaffold9299
+CAGCATCTACATAATATGATCGCTATTAAACTTAAATCTCCTTGACGGAGTCTTCGGTCATAACACAAACCCAGACCTACGTATATGACAAAGCTAATAGGAAAAGCATCCTTGTTTGTTTCACTATGCTTTTTAATGGTTGACGTTAAaggtaaagaccagtattggaaacgccccaatttcaaaaaatgaaatggaagctctcattaccaatcatgtgaaagaatatgttttgactaatacatgatgataaaaaaattgccgggaaaccgcctactaattcatatatttagtaaatttgtttctctcatggtctgtgagagatatagggtagtcccatatacatctttctgtgtatagtgcttgtaactttacgaagaatgggccaaatttcttatcattttgatgattccagaaccttgcagatgcgagatggtagatgatcaaccttttctgatcgattccataacgtttctttcacaatgcaatcgcatgaccataactggtctttacctTTAAGTTGTAGGTCTTAATTGATAACACTATATAGTTTTTTTCTTTTTACTGTTTTTATTAATGACCTCTGTAATTTGCCCTATTGTGAAAATACTAAAATATGTTTATACGCCGATGATGCGGCAATATTTTGCCAAGGCAAAGAAATTGCCCTTGTTGAGAAAACTCTTAAATGTGAGTTTAAAAAAATAGTTGATCACATTGAAAAAGATGACTTAATGTTGAATATCAAGAAGTGTAAGATCATGTTATTTGGGACAAGAAAACGAATCAAAAATCAAAGTGTACGCTTGATTTACAGAGATAATGTTATCGAAGTTGTAAATGAATTTAAATATCTTGGTGTATTATTTGATAATTATTTAAAGTGGGATATACATATATCGAAAACTGCCTCCAAAATATCTAGAACCATATCATGTATAAAACGAATTAAATATTATTTGCCGAAAAGAATTTTAAAATTGTTATAT
GATAGTTTGATATTGTCACATATTGACTACGGTATTGTTTTGTGGGGATGTTCAGCAAAGTGTCATTTGGAAAAGTTACAAAAGTTACAAAATCGTTATGCCCGTTTAATACTAAACGTAGATATTTTGACACCTCGTATTATATTATTATCCTCTCTAAGATGGCAATCAGTTGTTCAGAGAGTGCAATACCAA
+>Scaffold9309
+GAAGGAAGAAGAGGAAAATAATGATGAATTTGTAGAATTTCTATAACGTATGAAAACATAAACAACATGAAAAAGTATGAACCGACAGAAGAATGAAAATTTCAATCATATAACATGTCATTCACTTCTCTTCTCTGACTGTCAAGTATTAGGTATTCCTTTTTATTTCCTCTTAAAATGATCATAGTTTCCTATTTCTTTTACACCATTGGGAAGGGAATTCCAATGTTTTATGGCATTGTAATAAAACGAATTTCCAATACTACCTACTCTTTCTGGTAAGTTAAAGTTGAATCGGCTATTTCTTGTATTATAATCATGTACGTCAGTAACAAGATCGAAGTTGGATCGAATATAATGATTCGACCTAGTATGATATATTTTATGCACGTGATGCAATACGAGTTGTTTTGATCTTTGGTCGACTTCAAGAAAACCAGCTTTAGAAAGTTCGCTGTAGCCAACATGAGTTCTTGCCTTGGACTAGAACAGTTGATAAATCTCACCATTTTGTTCTTTAAGATGGGTAGAAGAATCCCTGCAATCTAAATGGTCAATTACTGTGAAGTTATTTTTACTGGATGCACCCAATAtttttttgataatttttttttctttgataatttttttctttttctttaataaattttttggataatttttttttggataaatagttcttttttgataattctaataatttttttatttattttttttttttctataattttttttaaaaaatttattaatttttaattaaaaaaaaaataaGAGTTAACAGATTAAGGGAAACTGACAATTCAAAAAAAAAAAAAA
+>Scaffold9310
+GCGGGGGCTGGGGAGGAAGGGGTGGCGTTATTTCACTTCCGATCTAATACGCTTTCTTAAGACACTGAAATATCAGTAGGTATTGGTATAGAGAATTACTTTTTATTTTTAATTAAAACATTATCGAAATGAAGATACAGAGAAAAACGATGAGATGTAAGAAGTGCGCGTATTTAtgtgtgtgggtgcgtgtgtgtgtgtgtgtgtgtgttgtgtgcgtgcgtgtgtgtggtggtgtgtACTAATTTTGATGTGTGTTGTGGCACAATTGCAATCATCAGTATCTTCATGAAAATGATAACCAGAAGCACAAAAAGGAGGgtgcgtgtgtgtgtgtgtgtgtttagtgtgcgtgcgtgtgagggtgtttaagtgtgtatgtCGGAAATGTGGCACAATTGCAATCATCTGTATCTTCATGAAAATGATAACCAGAAGAACAAAAAAAAAAAACATTGAGAGAACATGTTTTTTTGATGGAAGACAAGAAGTTCTCGTAACGTAGGATCTCCGAGACATGATGGGGTCAACTTAAAAAGAGAGCAGTGAGAGGCATTTATATCGAAGGTCAGGGAAAGGCAAACAAAGAAAGAAAAAAAAAAGGCTCACAGGAGAACGAAAACACGGGCCAAAATAATAAACAGGAGCAAGTGAACGGGCAGTTTGGTAGCTACTTCATTTACCGGCTTTTAAaggtactatgtcccatttgcaggtcaaaaaaaatgaaaaagttaaattccaactgcatttgaaagataatactaatttacaacttccctaaaaaaggtggggcttgaaaatgtcttcaagtgcggaaaataacgactattagttgtcaaatcgactttagggCTATAGAGCCCAAAAGTAATAGTCTTGA
+>Scaffold11911
+TTCTTGGCACCCCCCCCCCCCCCACACTCCTGCACTGAAGAACTACTCAAGTTTAAACTTTGCATTGCTTTTCTTTCTTTTTCAGTATTTTTTGCTTGGTACATGTTTCTCTTAATATCTGTCGTATAGatttttaatatttttatttatatCTACGTCAATCTGGCTGttctttttcttgtcttctttttttttctctctcttttttttcctcgtattttGTATTGATCCTTACCCTAGTTTTTGAACTTGAACAGCAATTTGCAGCACTCAAATTTCTTTAAAATTACCTTCTCTTATTTGtctctgttcccctctccccccctctctctctctctctctctctctctctctctctctttcATCTCCCATATCATAATTTGAAGTACCATCTATGGTGTTTTCAGATTGATCTTTCTTGCTTTCCCCACCCTCCCCCTTTATGCAGTTAATTTTCAGTCTATTTGTGTTTTCTGTGGTTGATTCTAATCATATTCTAACTCTTATTTTACATTTTACTTCACTAACAACTGGTTTATTATATTTGTTACTAATTTTGAATTAAACTATTTACCATTCTGAACGAACTGAAAGATTAAAGATCAAACTATCTATGAATAGAATGGTATTTCTTCAATTTATTCAAATTTCTCTCTCTTTAACCCCCTTTTTCTGCTTGCATTTTTATCCCTTTGCCGTGGACTTCACTGGATATTTTGCTTTGATGCCAATCCAACAATTTTGCATATATTA
diff -r 0f97b3048bc3 -r 40c5e1853a66 test-data/fasta_formatter2.out
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/fasta_formatter2.out Mon Sep 14 17:03:17 2009 -0400
@@ -0,0 +1,84 @@
+>Scaffold3648
+AGGAATGATGACTACAATGATCAACTTAACCTATCTATTTAATTTAGTTCCCTAATGTCA
+GGGACCTACCTGTTTTTGTTATGTTTGGGTTTTGTTGTTGTTGTTTTTTTAATCTGAAGG
+TATTGTGCATTATATGACCTGTAATACACAGTATAACTTTTCAAATACTTTTGTTTTACA
+ACTTTTCTCTCTGGACTTATATTAAAGTCAATTTTAATGAACATGTAGTAAAAACTAATA
+CATGTACATCTACAGTTTATTTATTTTTTTCTTCTTCTTTTTGTATTTCTTGTGTTACAT
+TATTTCACTTCACGTTCATGTTACCAACCTTGCCCCCTTGCTTTCCATGCAAAAAAAGAA
+AAAAAAGAAGCAATACTTACACTTACCCTTGAGATATCTTGATCTGAATGCTTTAACATT
+CTATATGTACAATAAATTTTTGTATCTATAGCCTATTATTATATATGTTGCTATGTCAGG
+CACATTGACAACATTCTCAGAAGGTTAGAAGATGGTATTGTTCTGAAATGCCTGGAATGC
+CTTGTGAACTAAGATGATTACTCATGTCATTAAAGTCCCCTAACCCAGGTATTTCCTCCT
+TCCCATGACGAAAACAGTCCATTTAAACTTCACCCCACTTTGGACCCGAAAGTGGGGTGC
+ATTTTGGTGGTAAGCTCACCACAGAGCAAGAGAGAGTTAGAGTCCCTAATCTGCAGTGTA
+AACAAACTTTGCCAGGACATCACCAGCCCAACCTTGATAAGTACTGCTTGGAACTCCTCC
+ATGATGTTCTAGTCTTATTCGCAGTCTCATATAGGTTCGGATTTTGTCCATTCTCATAGC
+TACCAGTATACATGGGAGATGCCAGTTTCATCTTCCTTGCTTCACTTTATAAGCATAGTT
+ATATCANGAACTTCCTGGTTATAATTATGTTCCTTTCAAGTTTCATCATAATTGTCTAGT
+TCGATATAGTACATGGACACAATTAAATATGATATTGTCT
+>Scaffold9299
+CAGCATCTACATAATATGATCGCTATTAAACTTAAATCTCCTTGACGGAGTCTTCGGTCA
+TAACACAAACCCAGACCTACGTATATGACAAAGCTAATAGGAAAAGCATCCTTGTTTGTT
+TCACTATGCTTTTTAATGGTTGACGTTAAaggtaaagaccagtattggaaacgccccaat
+ttcaaaaaatgaaatggaagctctcattaccaatcatgtgaaagaatatgttttgactaa
+tacatgatgataaaaaaattgccgggaaaccgcctactaattcatatatttagtaaattt
+gtttctctcatggtctgtgagagatatagggtagtcccatatacatctttctgtgtatag
+tgcttgtaactttacgaagaatgggccaaatttcttatcattttgatgattccagaacct
+tgcagatgcgagatggtagatgatcaaccttttctgatcgattccataacgtttctttca
+caatgcaatcgcatgaccataactggtctttacctTTAAGTTGTAGGTCTTAATTGATAA
+CACTATATAGTTTTTTTCTTTTTACTGTTTTTATTAATGACCTCTGTAATTTGCCCTATT
+GTGAAAATACTAAAATATGTTTATACGCCGATGATGCGGCAATATTTTGCCAAGGCAAAG
+AAATTGCCCTTGTTGAGAAAACTCTTAAATGTGAGTTTAAAAAAATAGTTGATCACATTG
+AAAAAGATGACTTAATGTTGAATATCAAGAAGTGTAAGATCATGTTATTTGGGACAAGAA
+AACGAATCAAAAATCAAAGTGTACGCTTGATTTACAGAGATAATGTTATCGAAGTTGTAA
+ATGAATTTAAATATCTTGGTGTATTATTTGATAATTATTTAAAGTGGGATATACATATAT
+CGAAAACTGCCTCCAAAATATCTAGAACCATATCATGTATAAAACGAATTAAATATTATT
+TGCCGAAAAGAATTTTAAAATTGTTATATGATAGTTTGATATTGTCACATATTGACTACG
+GTATTGTTTTGTGGGGATGTTCAGCAAAGTGTCATTTGGAAAAGTTACAAAAGTTACAAA
+ATCGTTATGCCCGTTTAATACTAAACGTAGATATTTTGACACCTCGTATTATATTATTAT
+CCTCTCTAAGATGGCAATCAGTTGTTCAGAGAGTGCAATACCAA
+>Scaffold9309
+GAAGGAAGAAGAGGAAAATAATGATGAATTTGTAGAATTTCTATAACGTATGAAAACATA
+AACAACATGAAAAAGTATGAACCGACAGAAGAATGAAAATTTCAATCATATAACATGTCA
+TTCACTTCTCTTCTCTGACTGTCAAGTATTAGGTATTCCTTTTTATTTCCTCTTAAAATG
+ATCATAGTTTCCTATTTCTTTTACACCATTGGGAAGGGAATTCCAATGTTTTATGGCATT
+GTAATAAAACGAATTTCCAATACTACCTACTCTTTCTGGTAAGTTAAAGTTGAATCGGCT
+ATTTCTTGTATTATAATCATGTACGTCAGTAACAAGATCGAAGTTGGATCGAATATAATG
+ATTCGACCTAGTATGATATATTTTATGCACGTGATGCAATACGAGTTGTTTTGATCTTTG
+GTCGACTTCAAGAAAACCAGCTTTAGAAAGTTCGCTGTAGCCAACATGAGTTCTTGCCTT
+GGACTAGAACAGTTGATAAATCTCACCATTTTGTTCTTTAAGATGGGTAGAAGAATCCCT
+GCAATCTAAATGGTCAATTACTGTGAAGTTATTTTTACTGGATGCACCCAATAttttttt
+gataatttttttttctttgataatttttttctttttctttaataaattttttggataatt
+tttttttggataaatagttcttttttgataattctaataatttttttatttatttttttt
+ttttctataattttttttaaaaaatttattaatttttaattaaaaaaaaaataaGAGTTA
+ACAGATTAAGGGAAACTGACAATTCAAAAAAAAAAAAAA
+>Scaffold9310
+GCGGGGGCTGGGGAGGAAGGGGTGGCGTTATTTCACTTCCGATCTAATACGCTTTCTTAA
+GACACTGAAATATCAGTAGGTATTGGTATAGAGAATTACTTTTTATTTTTAATTAAAACA
+TTATCGAAATGAAGATACAGAGAAAAACGATGAGATGTAAGAAGTGCGCGTATTTAtgtg
+tgtgggtgcgtgtgtgtgtgtgtgtgtgtgttgtgtgcgtgcgtgtgtgtggtggtgtgt
+ACTAATTTTGATGTGTGTTGTGGCACAATTGCAATCATCAGTATCTTCATGAAAATGATA
+ACCAGAAGCACAAAAAGGAGGgtgcgtgtgtgtgtgtgtgtgtttagtgtgcgtgcgtgt
+gagggtgtttaagtgtgtatgtCGGAAATGTGGCACAATTGCAATCATCTGTATCTTCAT
+GAAAATGATAACCAGAAGAACAAAAAAAAAAAACATTGAGAGAACATGTTTTTTTGATGG
+AAGACAAGAAGTTCTCGTAACGTAGGATCTCCGAGACATGATGGGGTCAACTTAAAAAGA
+GAGCAGTGAGAGGCATTTATATCGAAGGTCAGGGAAAGGCAAACAAAGAAAGAAAAAAAA
+AAGGCTCACAGGAGAACGAAAACACGGGCCAAAATAATAAACAGGAGCAAGTGAACGGGC
+AGTTTGGTAGCTACTTCATTTACCGGCTTTTAAaggtactatgtcccatttgcaggtcaa
+aaaaaatgaaaaagttaaattccaactgcatttgaaagataatactaatttacaacttcc
+ctaaaaaaggtggggcttgaaaatgtcttcaagtgcggaaaataacgactattagttgtc
+aaatcgactttagggCTATAGAGCCCAAAAGTAATAGTCTTGA
+>Scaffold11911
+TTCTTGGCACCCCCCCCCCCCCCACACTCCTGCACTGAAGAACTACTCAAGTTTAAACTT
+TGCATTGCTTTTCTTTCTTTTTCAGTATTTTTTGCTTGGTACATGTTTCTCTTAATATCT
+GTCGTATAGatttttaatatttttatttatatCTACGTCAATCTGGCTGttctttttctt
+gtcttctttttttttctctctcttttttttcctcgtattttGTATTGATCCTTACCCTAG
+TTTTTGAACTTGAACAGCAATTTGCAGCACTCAAATTTCTTTAAAATTACCTTCTCTTAT
+TTGtctctgttcccctctccccccctctctctctctctctctctctctctctctctctct
+ttcATCTCCCATATCATAATTTGAAGTACCATCTATGGTGTTTTCAGATTGATCTTTCTT
+GCTTTCCCCACCCTCCCCCTTTATGCAGTTAATTTTCAGTCTATTTGTGTTTTCTGTGGT
+TGATTCTAATCATATTCTAACTCTTATTTTACATTTTACTTCACTAACAACTGGTTTATT
+ATATTTGTTACTAATTTTGAATTAAACTATTTACCATTCTGAACGAACTGAAAGATTAAA
+GATCAAACTATCTATGAATAGAATGGTATTTCTTCAATTTATTCAAATTTCTCTCTCTTT
+AACCCCCTTTTTCTGCTTGCATTTTTATCCCTTTGCCGTGGACTTCACTGGATATTTTGC
+TTTGATGCCAATCCAACAATTTTGCATATATTA
diff -r 0f97b3048bc3 -r 40c5e1853a66 test-data/fasta_nuc_changer1.fasta
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/fasta_nuc_changer1.fasta Mon Sep 14 17:03:17 2009 -0400
@@ -0,0 +1,50 @@
+>cel-let-7 MIMAT0000001 Caenorhabditis elegans let-7
+TGAGGTAGTAGGTTGTATAGTT
+>cel-lin-4 MIMAT0000002 Caenorhabditis elegans lin-4
+TCCCTGAGACCTCAAGTGTGA
+>cel-miR-1 MIMAT0000003 Caenorhabditis elegans miR-1
+TGGAATGTAAAGAAGTATGTA
+>cel-miR-2 MIMAT0000004 Caenorhabditis elegans miR-2
+TATCACAGCCAGCTTTGATGTGC
+>cel-miR-34 MIMAT0000005 Caenorhabditis elegans miR-34
+AGGCAGTGTGGTTAGCTGGTTG
+>cel-miR-35 MIMAT0000006 Caenorhabditis elegans miR-35
+TCACCGGGTGGAAACTAGCAGT
+>cel-miR-36 MIMAT0000007 Caenorhabditis elegans miR-36
+TCACCGGGTGAAAATTCGCATG
+>cel-miR-37 MIMAT0000008 Caenorhabditis elegans miR-37
+TCACCGGGTGAACACTTGCAGT
+>cel-miR-38 MIMAT0000009 Caenorhabditis elegans miR-38
+TCACCGGGAGAAAAACTGGAGT
+>cel-miR-39 MIMAT0000010 Caenorhabditis elegans miR-39
+TCACCGGGTGTAAATCAGCTTG
+>cel-miR-40 MIMAT0000011 Caenorhabditis elegans miR-40
+TCACCGGGTGTACATCAGCTAA
+>cel-miR-41 MIMAT0000012 Caenorhabditis elegans miR-41
+TCACCGGGTGAAAAATCACCTA
+>cel-miR-42 MIMAT0000013 Caenorhabditis elegans miR-42
+TCACCGGGTTAACATCTACAGA
+>cel-miR-43 MIMAT0000014 Caenorhabditis elegans miR-43
+TATCACAGTTTACTTGCTGTCGC
+>cel-miR-44 MIMAT0000015 Caenorhabditis elegans miR-44
+TGACTAGAGACACATTCAGCT
+>cel-miR-45 MIMAT0000016 Caenorhabditis elegans miR-45
+TGACTAGAGACACATTCAGCT
+>cel-miR-46 MIMAT0000017 Caenorhabditis elegans miR-46
+TGTCATGGAGTCGCTCTCTTCA
+>cel-miR-47 MIMAT0000018 Caenorhabditis elegans miR-47
+TGTCATGGAGGCGCTCTCTTCA
+>cel-miR-48 MIMAT0000019 Caenorhabditis elegans miR-48
+TGAGGTAGGCTCAGTAGATGCGA
+>cel-miR-49 MIMAT0000020 Caenorhabditis elegans miR-49
+AAGCACCACGAGAAGCTGCAGA
+>cel-miR-50 MIMAT0000021 Caenorhabditis elegans miR-50
+TGATATGTCTGGTATTCTTGGG
+>cel-miR-51 MIMAT0000022 Caenorhabditis elegans miR-51
+TACCCGTAGCTCCTATCCATGTT
+>cel-miR-52 MIMAT0000023 Caenorhabditis elegans miR-52
+CACCCGTACATATGTTTCCGTGCT
+>cel-miR-53 MIMAT0000024 Caenorhabditis elegans miR-53
+CACCCGTACATTTGTTTCCGTGCT
+>cel-miR-54 MIMAT0000025 Caenorhabditis elegans miR-54
+TACCCGTAATCTTCATAATCCGAG
diff -r 0f97b3048bc3 -r 40c5e1853a66 test-data/fasta_nuc_changer1.out
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/fasta_nuc_changer1.out Mon Sep 14 17:03:17 2009 -0400
@@ -0,0 +1,50 @@
+>cel-let-7 MIMAT0000001 Caenorhabditis elegans let-7
+UGAGGUAGUAGGUUGUAUAGUU
+>cel-lin-4 MIMAT0000002 Caenorhabditis elegans lin-4
+UCCCUGAGACCUCAAGUGUGA
+>cel-miR-1 MIMAT0000003 Caenorhabditis elegans miR-1
+UGGAAUGUAAAGAAGUAUGUA
+>cel-miR-2 MIMAT0000004 Caenorhabditis elegans miR-2
+UAUCACAGCCAGCUUUGAUGUGC
+>cel-miR-34 MIMAT0000005 Caenorhabditis elegans miR-34
+AGGCAGUGUGGUUAGCUGGUUG
+>cel-miR-35 MIMAT0000006 Caenorhabditis elegans miR-35
+UCACCGGGUGGAAACUAGCAGU
+>cel-miR-36 MIMAT0000007 Caenorhabditis elegans miR-36
+UCACCGGGUGAAAAUUCGCAUG
+>cel-miR-37 MIMAT0000008 Caenorhabditis elegans miR-37
+UCACCGGGUGAACACUUGCAGU
+>cel-miR-38 MIMAT0000009 Caenorhabditis elegans miR-38
+UCACCGGGAGAAAAACUGGAGU
+>cel-miR-39 MIMAT0000010 Caenorhabditis elegans miR-39
+UCACCGGGUGUAAAUCAGCUUG
+>cel-miR-40 MIMAT0000011 Caenorhabditis elegans miR-40
+UCACCGGGUGUACAUCAGCUAA
+>cel-miR-41 MIMAT0000012 Caenorhabditis elegans miR-41
+UCACCGGGUGAAAAAUCACCUA
+>cel-miR-42 MIMAT0000013 Caenorhabditis elegans miR-42
+UCACCGGGUUAACAUCUACAGA
+>cel-miR-43 MIMAT0000014 Caenorhabditis elegans miR-43
+UAUCACAGUUUACUUGCUGUCGC
+>cel-miR-44 MIMAT0000015 Caenorhabditis elegans miR-44
+UGACUAGAGACACAUUCAGCU
+>cel-miR-45 MIMAT0000016 Caenorhabditis elegans miR-45
+UGACUAGAGACACAUUCAGCU
+>cel-miR-46 MIMAT0000017 Caenorhabditis elegans miR-46
+UGUCAUGGAGUCGCUCUCUUCA
+>cel-miR-47 MIMAT0000018 Caenorhabditis elegans miR-47
+UGUCAUGGAGGCGCUCUCUUCA
+>cel-miR-48 MIMAT0000019 Caenorhabditis elegans miR-48
+UGAGGUAGGCUCAGUAGAUGCGA
+>cel-miR-49 MIMAT0000020 Caenorhabditis elegans miR-49
+AAGCACCACGAGAAGCUGCAGA
+>cel-miR-50 MIMAT0000021 Caenorhabditis elegans miR-50
+UGAUAUGUCUGGUAUUCUUGGG
+>cel-miR-51 MIMAT0000022 Caenorhabditis elegans miR-51
+UACCCGUAGCUCCUAUCCAUGUU
+>cel-miR-52 MIMAT0000023 Caenorhabditis elegans miR-52
+CACCCGUACAUAUGUUUCCGUGCU
+>cel-miR-53 MIMAT0000024 Caenorhabditis elegans miR-53
+CACCCGUACAUUUGUUUCCGUGCU
+>cel-miR-54 MIMAT0000025 Caenorhabditis elegans miR-54
+UACCCGUAAUCUUCAUAAUCCGAG
diff -r 0f97b3048bc3 -r 40c5e1853a66 test-data/fasta_nuc_changer2.fasta
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/fasta_nuc_changer2.fasta Mon Sep 14 17:03:17 2009 -0400
@@ -0,0 +1,50 @@
+>cel-let-7 MIMAT0000001 Caenorhabditis elegans let-7
+UGAGGUAGUAGGUUGUAUAGUU
+>cel-lin-4 MIMAT0000002 Caenorhabditis elegans lin-4
+UCCCUGAGACCUCAAGUGUGA
+>cel-miR-1 MIMAT0000003 Caenorhabditis elegans miR-1
+UGGAAUGUAAAGAAGUAUGUA
+>cel-miR-2 MIMAT0000004 Caenorhabditis elegans miR-2
+UAUCACAGCCAGCUUUGAUGUGC
+>cel-miR-34 MIMAT0000005 Caenorhabditis elegans miR-34
+AGGCAGUGUGGUUAGCUGGUUG
+>cel-miR-35 MIMAT0000006 Caenorhabditis elegans miR-35
+UCACCGGGUGGAAACUAGCAGU
+>cel-miR-36 MIMAT0000007 Caenorhabditis elegans miR-36
+UCACCGGGUGAAAAUUCGCAUG
+>cel-miR-37 MIMAT0000008 Caenorhabditis elegans miR-37
+UCACCGGGUGAACACUUGCAGU
+>cel-miR-38 MIMAT0000009 Caenorhabditis elegans miR-38
+UCACCGGGAGAAAAACUGGAGU
+>cel-miR-39 MIMAT0000010 Caenorhabditis elegans miR-39
+UCACCGGGUGUAAAUCAGCUUG
+>cel-miR-40 MIMAT0000011 Caenorhabditis elegans miR-40
+UCACCGGGUGUACAUCAGCUAA
+>cel-miR-41 MIMAT0000012 Caenorhabditis elegans miR-41
+UCACCGGGUGAAAAAUCACCUA
+>cel-miR-42 MIMAT0000013 Caenorhabditis elegans miR-42
+UCACCGGGUUAACAUCUACAGA
+>cel-miR-43 MIMAT0000014 Caenorhabditis elegans miR-43
+UAUCACAGUUUACUUGCUGUCGC
+>cel-miR-44 MIMAT0000015 Caenorhabditis elegans miR-44
+UGACUAGAGACACAUUCAGCU
+>cel-miR-45 MIMAT0000016 Caenorhabditis elegans miR-45
+UGACUAGAGACACAUUCAGCU
+>cel-miR-46 MIMAT0000017 Caenorhabditis elegans miR-46
+UGUCAUGGAGUCGCUCUCUUCA
+>cel-miR-47 MIMAT0000018 Caenorhabditis elegans miR-47
+UGUCAUGGAGGCGCUCUCUUCA
+>cel-miR-48 MIMAT0000019 Caenorhabditis elegans miR-48
+UGAGGUAGGCUCAGUAGAUGCGA
+>cel-miR-49 MIMAT0000020 Caenorhabditis elegans miR-49
+AAGCACCACGAGAAGCUGCAGA
+>cel-miR-50 MIMAT0000021 Caenorhabditis elegans miR-50
+UGAUAUGUCUGGUAUUCUUGGG
+>cel-miR-51 MIMAT0000022 Caenorhabditis elegans miR-51
+UACCCGUAGCUCCUAUCCAUGUU
+>cel-miR-52 MIMAT0000023 Caenorhabditis elegans miR-52
+CACCCGUACAUAUGUUUCCGUGCU
+>cel-miR-53 MIMAT0000024 Caenorhabditis elegans miR-53
+CACCCGUACAUUUGUUUCCGUGCU
+>cel-miR-54 MIMAT0000025 Caenorhabditis elegans miR-54
+UACCCGUAAUCUUCAUAAUCCGAG
diff -r 0f97b3048bc3 -r 40c5e1853a66 test-data/fasta_nuc_changer2.out
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/fasta_nuc_changer2.out Mon Sep 14 17:03:17 2009 -0400
@@ -0,0 +1,50 @@
+>cel-let-7 MIMAT0000001 Caenorhabditis elegans let-7
+TGAGGTAGTAGGTTGTATAGTT
+>cel-lin-4 MIMAT0000002 Caenorhabditis elegans lin-4
+TCCCTGAGACCTCAAGTGTGA
+>cel-miR-1 MIMAT0000003 Caenorhabditis elegans miR-1
+TGGAATGTAAAGAAGTATGTA
+>cel-miR-2 MIMAT0000004 Caenorhabditis elegans miR-2
+TATCACAGCCAGCTTTGATGTGC
+>cel-miR-34 MIMAT0000005 Caenorhabditis elegans miR-34
+AGGCAGTGTGGTTAGCTGGTTG
+>cel-miR-35 MIMAT0000006 Caenorhabditis elegans miR-35
+TCACCGGGTGGAAACTAGCAGT
+>cel-miR-36 MIMAT0000007 Caenorhabditis elegans miR-36
+TCACCGGGTGAAAATTCGCATG
+>cel-miR-37 MIMAT0000008 Caenorhabditis elegans miR-37
+TCACCGGGTGAACACTTGCAGT
+>cel-miR-38 MIMAT0000009 Caenorhabditis elegans miR-38
+TCACCGGGAGAAAAACTGGAGT
+>cel-miR-39 MIMAT0000010 Caenorhabditis elegans miR-39
+TCACCGGGTGTAAATCAGCTTG
+>cel-miR-40 MIMAT0000011 Caenorhabditis elegans miR-40
+TCACCGGGTGTACATCAGCTAA
+>cel-miR-41 MIMAT0000012 Caenorhabditis elegans miR-41
+TCACCGGGTGAAAAATCACCTA
+>cel-miR-42 MIMAT0000013 Caenorhabditis elegans miR-42
+TCACCGGGTTAACATCTACAGA
+>cel-miR-43 MIMAT0000014 Caenorhabditis elegans miR-43
+TATCACAGTTTACTTGCTGTCGC
+>cel-miR-44 MIMAT0000015 Caenorhabditis elegans miR-44
+TGACTAGAGACACATTCAGCT
+>cel-miR-45 MIMAT0000016 Caenorhabditis elegans miR-45
+TGACTAGAGACACATTCAGCT
+>cel-miR-46 MIMAT0000017 Caenorhabditis elegans miR-46
+TGTCATGGAGTCGCTCTCTTCA
+>cel-miR-47 MIMAT0000018 Caenorhabditis elegans miR-47
+TGTCATGGAGGCGCTCTCTTCA
+>cel-miR-48 MIMAT0000019 Caenorhabditis elegans miR-48
+TGAGGTAGGCTCAGTAGATGCGA
+>cel-miR-49 MIMAT0000020 Caenorhabditis elegans miR-49
+AAGCACCACGAGAAGCTGCAGA
+>cel-miR-50 MIMAT0000021 Caenorhabditis elegans miR-50
+TGATATGTCTGGTATTCTTGGG
+>cel-miR-51 MIMAT0000022 Caenorhabditis elegans miR-51
+TACCCGTAGCTCCTATCCATGTT
+>cel-miR-52 MIMAT0000023 Caenorhabditis elegans miR-52
+CACCCGTACATATGTTTCCGTGCT
+>cel-miR-53 MIMAT0000024 Caenorhabditis elegans miR-53
+CACCCGTACATTTGTTTCCGTGCT
+>cel-miR-54 MIMAT0000025 Caenorhabditis elegans miR-54
+TACCCGTAATCTTCATAATCCGAG
diff -r 0f97b3048bc3 -r 40c5e1853a66 test-data/fastq_stats1.out
--- a/test-data/fastq_stats1.out Mon Sep 14 15:27:55 2009 -0400
+++ b/test-data/fastq_stats1.out Mon Sep 14 17:03:17 2009 -0400
@@ -1,37 +1,37 @@
-column count min max sum mean Q1 med Q3 IQR lW rW A_Count C_Count G_Count T_Count N_Count
-1 9 23 34 288 32.00 33 33 33 0 33 33 3 1 4 1 0
-2 9 28 33 287 31.89 31 33 33 2 28 33 3 3 2 1 0
-3 9 13 34 268 29.78 28 33 33 5 21 34 5 1 0 3 0
-4 9 17 33 261 29.00 30 33 33 3 26 33 1 2 3 3 0
-5 9 22 33 269 29.89 30 33 33 3 26 33 3 3 3 0 0
-6 9 22 33 277 30.78 30 33 33 3 26 33 5 3 0 1 0
-7 9 21 33 258 28.67 24 33 33 9 21 33 4 1 3 1 0
-8 9 12 33 263 29.22 32 33 33 1 31 33 2 1 1 5 0
-9 9 29 33 290 32.22 33 33 33 0 33 33 3 3 2 1 0
-10 9 23 33 277 30.78 32 33 33 1 31 33 1 4 2 2 0
-11 9 12 33 245 27.22 21 31 33 12 12 33 5 2 1 1 0
-12 9 13 33 214 23.78 15 24 33 18 13 33 2 4 2 1 0
-13 9 5 33 249 27.67 29 31 33 4 23 33 2 1 1 5 0
-14 9 5 33 233 25.89 24 33 33 9 11 33 3 3 2 1 0
-15 9 15 33 251 27.89 24 33 33 9 15 33 5 1 1 2 0
-16 9 23 34 269 29.89 24 33 33 9 23 34 3 1 2 3 0
-17 9 13 34 266 29.56 33 33 33 0 33 33 2 3 1 3 0
-18 9 21 34 272 30.22 31 33 33 2 28 34 0 5 1 3 0
-19 9 5 34 244 27.11 27 30 33 6 18 34 4 4 1 0 0
-20 9 11 34 241 26.78 23 32 33 10 11 34 3 4 2 0 0
-21 9 13 33 240 26.67 24 27 33 9 13 33 1 4 0 4 0
-22 9 5 33 190 21.11 13 21 33 20 5 33 1 4 0 3 1
-23 9 5 33 205 22.78 16 26 33 17 5 33 4 4 1 0 0
-24 9 5 33 247 27.44 28 31 33 5 21 33 1 5 1 2 0
-25 9 11 34 241 26.78 24 33 33 9 11 34 3 4 0 2 0
-26 9 5 33 212 23.56 18 31 33 15 5 33 0 6 0 3 0
-27 9 5 33 227 25.22 21 26 33 12 5 33 3 4 1 1 0
-28 9 21 33 255 28.33 24 31 33 9 21 33 2 4 3 0 0
-29 9 5 33 228 25.33 21 30 33 12 5 33 2 4 1 2 0
-30 9 10 33 213 23.67 16 28 33 17 10 33 3 4 2 0 0
-31 9 5 33 236 26.22 21 31 33 12 5 33 1 4 1 3 0
-32 9 5 33 210 23.33 12 29 33 21 5 33 3 3 0 3 0
-33 9 5 33 183 20.33 9 21 33 24 5 33 1 4 2 2 0
-34 9 5 33 150 16.67 7 17 22 15 5 33 3 4 1 1 0
-35 9 13 33 217 24.11 21 24 29 8 13 33 1 4 1 3 0
-36 9 5 33 195 21.67 18 21 32 14 5 33 3 2 1 3 0
+column count min max sum mean Q1 med Q3 IQR lW rW A_Count C_Count G_Count T_Count N_Count Max_count
+1 9 23 34 288 32.00 33 33 33 0 33 33 3 1 4 1 0 9
+2 9 28 33 287 31.89 31 33 33 2 28 33 3 3 2 1 0 9
+3 9 13 34 268 29.78 28 33 33 5 21 34 5 1 0 3 0 9
+4 9 17 33 261 29.00 30 33 33 3 26 33 1 2 3 3 0 9
+5 9 22 33 269 29.89 30 33 33 3 26 33 3 3 3 0 0 9
+6 9 22 33 277 30.78 30 33 33 3 26 33 5 3 0 1 0 9
+7 9 21 33 258 28.67 24 33 33 9 21 33 4 1 3 1 0 9
+8 9 12 33 263 29.22 32 33 33 1 31 33 2 1 1 5 0 9
+9 9 29 33 290 32.22 33 33 33 0 33 33 3 3 2 1 0 9
+10 9 23 33 277 30.78 32 33 33 1 31 33 1 4 2 2 0 9
+11 9 12 33 245 27.22 21 31 33 12 12 33 5 2 1 1 0 9
+12 9 13 33 214 23.78 15 24 33 18 13 33 2 4 2 1 0 9
+13 9 5 33 249 27.67 29 31 33 4 23 33 2 1 1 5 0 9
+14 9 5 33 233 25.89 24 33 33 9 11 33 3 3 2 1 0 9
+15 9 15 33 251 27.89 24 33 33 9 15 33 5 1 1 2 0 9
+16 9 23 34 269 29.89 24 33 33 9 23 34 3 1 2 3 0 9
+17 9 13 34 266 29.56 33 33 33 0 33 33 2 3 1 3 0 9
+18 9 21 34 272 30.22 31 33 33 2 28 34 0 5 1 3 0 9
+19 9 5 34 244 27.11 27 30 33 6 18 34 4 4 1 0 0 9
+20 9 11 34 241 26.78 23 32 33 10 11 34 3 4 2 0 0 9
+21 9 13 33 240 26.67 24 27 33 9 13 33 1 4 0 4 0 9
+22 9 5 33 190 21.11 13 21 33 20 5 33 1 4 0 3 1 9
+23 9 5 33 205 22.78 16 26 33 17 5 33 4 4 1 0 0 9
+24 9 5 33 247 27.44 28 31 33 5 21 33 1 5 1 2 0 9
+25 9 11 34 241 26.78 24 33 33 9 11 34 3 4 0 2 0 9
+26 9 5 33 212 23.56 18 31 33 15 5 33 0 6 0 3 0 9
+27 9 5 33 227 25.22 21 26 33 12 5 33 3 4 1 1 0 9
+28 9 21 33 255 28.33 24 31 33 9 21 33 2 4 3 0 0 9
+29 9 5 33 228 25.33 21 30 33 12 5 33 2 4 1 2 0 9
+30 9 10 33 213 23.67 16 28 33 17 10 33 3 4 2 0 0 9
+31 9 5 33 236 26.22 21 31 33 12 5 33 1 4 1 3 0 9
+32 9 5 33 210 23.33 12 29 33 21 5 33 3 3 0 3 0 9
+33 9 5 33 183 20.33 9 21 33 24 5 33 1 4 2 2 0 9
+34 9 5 33 150 16.67 7 17 22 15 5 33 3 4 1 1 0 9
+35 9 13 33 217 24.11 21 24 29 8 13 33 1 4 1 3 0 9
+36 9 5 33 195 21.67 18 21 32 14 5 33 3 2 1 3 0 9
diff -r 0f97b3048bc3 -r 40c5e1853a66 tool-data/fastx_clipper_sequences.txt
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tool-data/fastx_clipper_sequences.txt Mon Sep 14 17:03:17 2009 -0400
@@ -0,0 +1,13 @@
+#
+# Adapter/Linker sequences for FASTX-Clipper tool.
+#
+# Format:
+# Adapter Sequence <TAB> Descriptive name
+#
+# Example:
+# AAATTTGATAAGATA Our-Adapter
+#
+# Some adapters can be found here:
+# http://seqanswers.com/forums/showthread.php?t=198
+
+TGTAGGCC Dummy-Adapter (don't use me)
diff -r 0f97b3048bc3 -r 40c5e1853a66 tool_conf.xml.sample
--- a/tool_conf.xml.sample Mon Sep 14 15:27:55 2009 -0400
+++ b/tool_conf.xml.sample Mon Sep 14 17:03:17 2009 -0400
@@ -299,24 +299,26 @@
<tool file="fasta_tools/tabular_to_fasta.xml" />
</section>
<section name="FASTA/Q Information" id="cshl_library_information">
- <tool file="fastx_toolkit/fastq_qual_stat.xml" />
+ <tool file="fastx_toolkit/fastx_quality_statistics.xml" />
<tool file="fastx_toolkit/fastq_quality_boxplot.xml" />
- <tool file="fastx_toolkit/fastq_nucleotides_distribution.xml" />
- <!-- <tool file="fastx_toolkit/fasta_clipping_histogram.xml" /> -->
+ <tool file="fastx_toolkit/fastx_nucleotides_distribution.xml" />
+ <tool file="fastx_toolkit/fasta_clipping_histogram.xml" />
</section>
<section name="FASTA/Q Preprocessing" id="cshl_fastx_manipulation">
<tool file="fastx_toolkit/fastq_to_fasta.xml" />
- <tool file="fastx_toolkit/fastq_qual_conv.xml" />
- <!-- <tool file="fastx_toolkit/fastx_clipper.xml" /> -->
+ <tool file="fastx_toolkit/fastq_quality_converter.xml" />
+ <tool file="fastx_toolkit/fastx_clipper.xml" />
<tool file="fastx_toolkit/fastx_trimmer.xml" />
+ <tool file="fastx_toolkit/fastx_renamer.xml" />
<tool file="fastx_toolkit/fastx_reverse_complement.xml" />
+ <tool file="fastx_toolkit/fasta_formatter.xml" />
+ <tool file="fastx_toolkit/fasta_nucleotide_changer.xml" />
<tool file="fastx_toolkit/fastx_artifacts_filter.xml" />
<tool file="fastx_toolkit/fastq_quality_filter.xml" />
- <!-- <tool file="fastx_toolkit/fasta_collapser.xml" /> -->
- <!-- <tool file="fastx_toolkit/fastx_barcode_splitter.xml" /> -->
+ <tool file="fastx_toolkit/fastx_collapser.xml" />
+ <!--<tool file="fastx_toolkit/fastx_barcode_splitter.xml" />-->
</section>
-
<section name="Short Read QC and Manipulation" id="short_read_analysis">
<tool file="metag_tools/short_reads_figure_score.xml" />
<tool file="metag_tools/short_reads_figure_high_quality_length.xml" />
diff -r 0f97b3048bc3 -r 40c5e1853a66 tools/fastx_toolkit/fasta_clipping_histogram.xml
--- a/tools/fastx_toolkit/fasta_clipping_histogram.xml Mon Sep 14 15:27:55 2009 -0400
+++ b/tools/fastx_toolkit/fasta_clipping_histogram.xml Mon Sep 14 17:03:17 2009 -0400
@@ -13,7 +13,7 @@
**What it does**
-This tool creates a histogram image of sequence lengths distribution in a given fasta data set file.
+This tool creates a histogram image of sequence lengths distribution in a given fasta dataset file.
**TIP:** Use this tool after clipping your library (with **FASTX Clipper tool**), to visualize the clipping results.
@@ -21,17 +21,82 @@
**Output Examples**
-
In the following library, most sequences are 24-mers to 27-mers.
This could indicate an abundance of endo-siRNAs (depending of course of what you've tried to sequence in the first place).
-.. image:: ../static/fastx_icons/fasta_clipping_histogram_1.png
+.. image:: ./static/fastx_icons/fasta_clipping_histogram_1.png
In the following library, most sequences are 19,22 or 23-mers.
This could indicate an abundance of miRNAs (depending of course of what you've tried to sequence in the first place).
-.. image:: ../static/fastx_icons/fasta_clipping_histogram_2.png
+.. image:: ./static/fastx_icons/fasta_clipping_histogram_2.png
+
+
+-----
+
+
+**Input Formats**
+
+This tool accepts short-reads FASTA files. The reads don't have to be short, but they do have to be on a single line, like so::
+
+ >sequence1
+ AGTAGTAGGTGATGTAGAGAGAGAGAGAGTAG
+ >sequence2
+ GTGTGTGTGGGAAGTTGACACAGTA
+ >sequence3
+ CCTTGAGATTAACGCTAATCAAGTAAAC
+
+
+If the sequences span over multiple lines::
+
+ >sequence1
+ CAGCATCTACATAATATGATCGCTATTAAACTTAAATCTCCTTGACGGAG
+ TCTTCGGTCATAACACAAACCCAGACCTACGTATATGACAAAGCTAATAG
+ aactggtctttacctTTAAGTTG
+
+Use the **FASTA Width Formatter** tool to re-format the FASTA into a single-lined sequences::
+
+ >sequence1
+ CAGCATCTACATAATATGATCGCTATTAAACTTAAATCTCCTTGACGGAGTCTTCGGTCATAACACAAACCCAGACCTACGTATATGACAAAGCTAATAGaactggtctttacctTTAAGTTG
+
+
+-----
+
+
+
+**Multiplicity counts (a.k.a reads-count)**
+
+If the sequence identifier (the text after the '>') contains a dash and a number, it is treated as a multiplicity count value (i.e. how many times that individual sequence repeated in the original FASTA file, before collapsing).
+
+Example 1 - The following FASTA file *does not* have multiplicity counts::
+
+ >seq1
+ GGATCC
+ >seq2
+ GGTCATGGGTTTAAA
+ >seq3
+ GGGATATATCCCCACACACACACAC
+
+Each sequence is counts as one, to produce the following chart:
+
+.. image:: ./static/fastx_icons/fasta_clipping_histogram_3.png
+
+
+Example 2 - The following FASTA file have multiplicity counts::
+
+ >seq1-2
+ GGATCC
+ >seq2-10
+ GGTCATGGGTTTAAA
+ >seq3-3
+ GGGATATATCCCCACACACACACAC
+
+The first sequence counts as 2, the second as 10, the third as 3, to produce the following chart:
+
+.. image:: ./static/fastx_icons/fasta_clipping_histogram_4.png
+
+Use the **FASTA Collapser** tool to create FASTA files with multiplicity counts.
</help>
</tool>
diff -r 0f97b3048bc3 -r 40c5e1853a66 tools/fastx_toolkit/fasta_collapser.xml
--- a/tools/fastx_toolkit/fasta_collapser.xml Mon Sep 14 15:27:55 2009 -0400
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,75 +0,0 @@
-<tool id="cshl_fasta_collapser" name="Collapse">
- <description>sequences</description>
- <command>fasta_collapser.pl $input $output</command>
-
- <inputs>
- <param format="fasta" name="input" type="data" label="Library to collapse" />
- </inputs>
-
- <tests>
- <test>
- <param name="input" value="fasta_collapser1.fasta" />
- <output name="output" file="fasta_collapser1.out" />
- </test>
- </tests>
-
- <outputs>
- <data format="fasta" name="output" metadata_source="input" />
- </outputs>
- <help>
-
-**What it does**
-
-This tool collapses identical sequences in a FASTA file into a single sequence.
-
---------
-
-**Example**
-
-Example Input File (Sequence "ATAT" appears multiple times)::
-
- >CSHL_2_FC0042AGLLOO_1_1_605_414
- TGCG
- >CSHL_2_FC0042AGLLOO_1_1_537_759
- ATAT
- >CSHL_2_FC0042AGLLOO_1_1_774_520
- TGGC
- >CSHL_2_FC0042AGLLOO_1_1_742_502
- ATAT
- >CSHL_2_FC0042AGLLOO_1_1_781_514
- TGAG
- >CSHL_2_FC0042AGLLOO_1_1_757_487
- TTCA
- >CSHL_2_FC0042AGLLOO_1_1_903_769
- ATAT
- >CSHL_2_FC0042AGLLOO_1_1_724_499
- ATAT
-
-Example Output file::
-
- >1-1
- TGCG
- >2-4
- ATAT
- >3-1
- TGGC
- >4-1
- TGAG
- >5-1
- TTCA
-
-.. class:: infomark
-
-Original Sequence Names / Lane descriptions (e.g. "CSHL_2_FC0042AGLLOO_1_1_742_502") are discarded.
-
-The output seqeunce name is composed of two numbers: the first is the sequence's number, the second is the multiplicity value.
-
-The following output::
-
- >2-4
- ATAT
-
-means that the sequence "ATAT" is the second sequence in the file, and it appeared 4 times in the input FASTA file.
-
-</help>
-</tool>
diff -r 0f97b3048bc3 -r 40c5e1853a66 tools/fastx_toolkit/fasta_formatter.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/fastx_toolkit/fasta_formatter.xml Mon Sep 14 17:03:17 2009 -0400
@@ -0,0 +1,79 @@
+<tool id="cshl_fasta_formatter" name="FASTA Width">
+ <description>formatter</description>
+ <!--
+ Note:
+ fasta_formatter also has a tabular output mode (-t),
+ but Galaxy already contains such a tool, so no need
+ to offer the user a duplicated tool.
+
+ So this XML tool only changes the width (line-wrapping) of a
+ FASTA file.
+ -->
+ <command>zcat -f '$input' | fasta_formatter -w $width -o $output</command>
+ <inputs>
+ <param format="fasta" name="input" type="data" label="Library to re-format" />
+
+ <param name="width" type="integer" value="0" label="New width for nucleotides strings" help="Use 0 for single line outout." />
+ </inputs>
+
+ <tests>
+ <test>
+ <!-- Re-format a FASTA file into a single line -->
+ <param name="input" value="fasta_formatter1.fasta" />
+ <param name="width" value="0" />
+ <output name="output" file="fastx_formatter1.out" />
+ </test>
+ <test>
+ <!-- Re-format a FASTA file into multiple lines wrapping at 60 charactes -->
+ <param name="input" value="fasta_formatter1.fasta" />
+ <param name="width" value="60" />
+ <output name="output" file="fasta_formatter2.out" />
+ </test>
+ </tests>
+
+ <outputs>
+ <data format="input" name="output" metadata_source="input" />
+ </outputs>
+
+<help>
+**What it does**
+
+This tool re-formats a FASTA file, changing the width of the nucleotides lines.
+
+**TIP:** Outputting a single line (with **width = 0**) can be useful for scripting (with **grep**, **awk**, and **perl**). Every odd line is a sequence identifier, and every even line is a nucleotides line.
+
+--------
+
+**Example**
+
+Input FASTA file (each nucleotides line is 50 characters long)::
+
+ >Scaffold3648
+ AGGAATGATGACTACAATGATCAACTTAACCTATCTATTTAATTTAGTTC
+ CCTAATGTCAGGGACCTACCTGTTTTTGTTATGTTTGGGTTTTGTTGTTG
+ TTGTTTTTTTAATCTGAAGGTATTGTGCATTATATGACCTGTAATACACA
+ ATTAAAGTCAATTTTAATGAACATGTAGTAAAAACT
+ >Scaffold9299
+ CAGCATCTACATAATATGATCGCTATTAAACTTAAATCTCCTTGACGGAG
+ TCTTCGGTCATAACACAAACCCAGACCTACGTATATGACAAAGCTAATAG
+ aactggtctttacctTTAAGTTG
+
+
+Output FASTA file (with width=80)::
+
+ >Scaffold3648
+ AGGAATGATGACTACAATGATCAACTTAACCTATCTATTTAATTTAGTTCCCTAATGTCAGGGACCTACCTGTTTTTGTT
+ ATGTTTGGGTTTTGTTGTTGTTGTTTTTTTAATCTGAAGGTATTGTGCATTATATGACCTGTAATACACAATTAAAGTCA
+ ATTTTAATGAACATGTAGTAAAAACT
+ >Scaffold9299
+ CAGCATCTACATAATATGATCGCTATTAAACTTAAATCTCCTTGACGGAGTCTTCGGTCATAACACAAACCCAGACCTAC
+ GTATATGACAAAGCTAATAGaactggtctttacctTTAAGTTG
+
+Output FASTA file (with width=0 => single line)::
+
+ >Scaffold3648
+ AGGAATGATGACTACAATGATCAACTTAACCTATCTATTTAATTTAGTTCCCTAATGTCAGGGACCTACCTGTTTTTGTTATGTTTGGGTTTTGTTGTTGTTGTTTTTTTAATCTGAAGGTATTGTGCATTATATGACCTGTAATACACAATTAAAGTCAATTTTAATGAACATGTAGTAAAAACT
+ >Scaffold9299
+ CAGCATCTACATAATATGATCGCTATTAAACTTAAATCTCCTTGACGGAGTCTTCGGTCATAACACAAACCCAGACCTACGTATATGACAAAGCTAATAGaactggtctttacctTTAAGTTG
+</help>
+</tool>
diff -r 0f97b3048bc3 -r 40c5e1853a66 tools/fastx_toolkit/fasta_nucleotide_changer.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/fastx_toolkit/fasta_nucleotide_changer.xml Mon Sep 14 17:03:17 2009 -0400
@@ -0,0 +1,65 @@
+<tool id="cshl_fasta_nucleotides_changer" name="RNA/DNA" >
+ <description>converter</description>
+ <command>zcat -f '$input' | fasta_nucleotide_changer $mode -v -o $output</command>
+ <inputs>
+ <param format="fasta" name="input" type="data" label="Library to convert" />
+
+ <param name="mode" type="select" label="Convert">
+ <option value="-d">RNA to DNA (U to T)</option>
+ <option value="-r">DNA to RNA (T to U)</option>
+ </param>
+ </inputs>
+
+ <tests>
+ <test>
+ <!-- DNA-to-RNA -->
+ <param name="input" value="fasta_nuc_changer1.fasta" />
+ <param name="mode" value="-r" />
+ <output name="output" file="fasta_nuc_change1.out" />
+ </test>
+ <test>
+ <!-- RNA-to-DNA -->
+ <param name="input" value="fasta_nuc_changer2.fasta" />
+ <param name="mode" value="-d" />
+ <output name="output" file="fasta_nuc_change2.out" />
+ </test>
+ </tests>
+
+
+ <outputs>
+ <data format="input" name="output" metadata_source="input" />
+ </outputs>
+
+<help>
+**What it does**
+
+This tool converts RNA FASTA files to DNA (and vice-versa).
+
+In **RNA-to-DNA** mode, U's are changed into T's.
+
+In **DNA-to-RNA** mode, T's are changed into U's.
+
+--------
+
+**Example**
+
+Input RNA FASTA file ( from Sanger's mirBase )::
+
+ >cel-let-7 MIMAT0000001 Caenorhabditis elegans let-7
+ UGAGGUAGUAGGUUGUAUAGUU
+ >cel-lin-4 MIMAT0000002 Caenorhabditis elegans lin-4
+ UCCCUGAGACCUCAAGUGUGA
+ >cel-miR-1 MIMAT0000003 Caenorhabditis elegans miR-1
+ UGGAAUGUAAAGAAGUAUGUA
+
+Output DNA FASTA file (with RNA-to-DNA mode)::
+
+ >cel-let-7 MIMAT0000001 Caenorhabditis elegans let-7
+ TGAGGTAGTAGGTTGTATAGTT
+ >cel-lin-4 MIMAT0000002 Caenorhabditis elegans lin-4
+ TCCCTGAGACCTCAAGTGTGA
+ >cel-miR-1 MIMAT0000003 Caenorhabditis elegans miR-1
+ TGGAATGTAAAGAAGTATGTA
+
+</help>
+</tool>
diff -r 0f97b3048bc3 -r 40c5e1853a66 tools/fastx_toolkit/fastq_nucleotides_distribution.xml
--- a/tools/fastx_toolkit/fastq_nucleotides_distribution.xml Mon Sep 14 15:27:55 2009 -0400
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,66 +0,0 @@
-<tool id="cshl_fastq_nucleotides_distribution" name="Nucleotides Distribution">
- <description>chart</description>
- <command>fastq_nucleotide_distribution_graph.sh -t '$input.name' -i $input -o $output</command>
-
- <inputs>
- <param format="txt" name="input" type="data" label="Statistics Text File (output of 'FASTQ Statistics' tool)" />
- </inputs>
-
- <outputs>
- <data format="png" name="output" metadata_source="input" />
- </outputs>
-<help>
-
-**What it does**
-
-Creates a stacked-histogram graph for the nucleotide distribution in the Solexa library.
-
-.. class:: infomark
-
-**TIP:** Use the **FASTQ Statistics** tool to generate the report file needed for this tool.
-
------
-
-**Output Examples**
-
-
-
-The following chart clearly shows the barcode used at the 5'-end of the library: **GATCT**
-
-.. image:: ../static/fastx_icons/fastq_nucleotides_distribution_1.png
-
-
-
-
-
-
-
-In the following chart, one can almost 'read' the most abundant sequence by looking at the dominant values: **TGATA TCGTA TTGAT GACTG AA...**
-
-.. image:: ../static/fastx_icons/fastq_nucleotides_distribution_2.png
-
-
-
-
-
-
-
-
-The following chart shows a growing number of unknown (N) nucleotides towards later cycles (which might indicate a sequencing problem):
-
-.. image:: ../static/fastx_icons/fastq_nucleotides_distribution_3.png
-
-
-
-
-
-
-
-
-But most of the time, the chart will look rather random:
-
-.. image:: ../static/fastx_icons/fastq_nucleotides_distribution_4.png
-
-</help>
-</tool>
-<!-- FASTQ-Nucleotides-Distribution is part of the FASTX-toolkit, by A.Gordon (gordon(a)cshl.edu) -->
diff -r 0f97b3048bc3 -r 40c5e1853a66 tools/fastx_toolkit/fastq_qual_conv.xml
--- a/tools/fastx_toolkit/fastq_qual_conv.xml Mon Sep 14 15:27:55 2009 -0400
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,82 +0,0 @@
-<tool id="cshl_fastq_qual_conv" name="Quality format converter">
- <description>(ASCII-Numeric)</description>
- <command>zcat -f $input | fastq_quality_converter $QUAL_FORMAT -o $output</command>
- <inputs>
- <param format="fastqsolexa" name="input" type="data" label="Library to convert" />
-
- <param name="QUAL_FORMAT" type="select" label="Desired output format">
- <option value="-a">ASCII (letters) quality scores</option>
- <option value="-n">Numeric quality scores</option>
- </param>
- </inputs>
-
- <tests>
- <test>
- <!-- ASCII to NUMERIC -->
- <param name="input" value="fastq_qual_conv1.fastq" />
- <param name="QUAL_FORMAT" value="Numeric quality scores" />
- <output name="output" file="fastq_qual_conv1.out" />
- </test>
- <test>
- <!-- ASCII to ASCII (basically, a no-op, but it should still produce a valid output -->
- <param name="input" value="fastq_qual_conv1.fastq" />
- <param name="QUAL_FORMAT" value="ASCII (letters) quality scores" />
- <output name="output" file="fastq_qual_conv1a.out" />
- </test>
- <test>
- <!-- NUMERIC to ASCII -->
- <param name="input" value="fastq_qual_conv2.fastq" />
- <param name="QUAL_FORMAT" value="ASCII (letters) quality scores" />
- <output name="output" file="fastq_qual_conv2.out" />
- </test>
- <test>
- <!-- NUMERIC to NUMERIC (basically, a no-op, but it should still produce a valid output -->
- <param name="input" value="fastq_qual_conv2.fastq" />
- <param name="QUAL_FORMAT" value="Numeric quality scores" />
- <output name="output" file="fastq_qual_conv2n.out" />
- </test>
- </tests>
-
- <outputs>
- <data format="fastqsolexa" name="output" metadata_source="input" />
- </outputs>
-<help>
-
-**What it does**
-
-Converts a solexa FASTQ file to/from numeric or ASCII quality format.
-
-.. class:: warningmark
-
-Re-scaling is **not** performed. (e.g. conversion from Phred scale to Solexa scale).
-
-
------
-
-FASTQ with Numeric quality scores::
-
- @CSHL__2_FC042AGWWWXX:8:1:120:202
- ACGATAGATCGGAAGAGCTAGTATGCCGTTTTCTGC
- +CSHL__2_FC042AGWWWXX:8:1:120:202
- 40 40 40 40 20 40 40 40 40 6 40 40 28 40 40 25 40 20 40 -1 30 40 14 27 40 8 1 3 7 -1 11 10 -1 21 10 8
- @CSHL__2_FC042AGWWWXX:8:1:103:1185
- ATCACGATAGATCGGCAGAGCTCGTTTACCGTCTTC
- +CSHL__2_FC042AGWWWXX:8:1:103:1185
- 40 40 40 40 40 35 33 31 40 40 40 32 30 22 40 -0 9 22 17 14 8 36 15 34 22 12 23 3 10 -0 8 2 4 25 30 2
-
-
-FASTQ with ASCII quality scores::
-
- @CSHL__2_FC042AGWWWXX:8:1:120:202
- ACGATAGATCGGAAGAGCTAGTATGCCGTTTTCTGC
- +CSHL__2_FC042AGWWWXX:8:1:120:202
- hhhhThhhhFhh\hhYhTh?^hN[hHACG?KJ?UJH
- @CSHL__2_FC042AGWWWXX:8:1:103:1185
- ATCACGATAGATCGGCAGAGCTCGTTTACCGTCTTC
- +CSHL__2_FC042AGWWWXX:8:1:103:1185
- hhhhhca_hhh`^Vh@IVQNHdObVLWCJ@HBDY^B
-
-
-</help>
-</tool>
-<!-- FASTQ-Quality-Converter is part of the FASTX-toolkit, by A.Gordon (gordon(a)cshl.edu) -->
diff -r 0f97b3048bc3 -r 40c5e1853a66 tools/fastx_toolkit/fastq_qual_stat.xml
--- a/tools/fastx_toolkit/fastq_qual_stat.xml Mon Sep 14 15:27:55 2009 -0400
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,100 +0,0 @@
-<tool id="cshl_fastq_qual_stat" name="Quality Statistics">
- <description></description>
- <command>zcat -f $input | fastq_quality_stats -o $output</command>
-
- <inputs>
- <param format="fastqsolexa" name="input" type="data" label="Library to analyse" />
- </inputs>
-
- <tests>
- <test>
- <param name="input" value="fastq_stats1.fastq" />
- <output name="output" file="fastq_stats1.out" />
- </test>
- </tests>
-
- <outputs>
- <data format="txt" name="output" metadata_source="input" />
- </outputs>
-
-<help>
-
-**What it does**
-
-Creates quality statistics report for the given Solexa/FASTQ library.
-
-.. class:: infomark
-
-**TIP:** This statistics report can be used as input for **Quality Score** and **Nucleotides Distribution** tools.
-
------
-
-**The output file will contain the following fields:**
-
-* column = column number (1 to 36 for a 36-cycles read solexa file)
-* count = number of bases found in this column.
-* min = Lowest quality score value found in this column.
-* max = Highest quality score value found in this column.
-* sum = Sum of quality score values for this column.
-* mean = Mean quality score value for this column.
-* Q1 = 1st quartile quality score.
-* med = Median quality score.
-* Q3 = 3rd quartile quality score.
-* IQR = Inter-Quartile range (Q3-Q1).
-* lW = 'Left-Whisker' value (for boxplotting).
-* rW = 'Right-Whisker' value (for boxplotting).
-* A_Count = Count of 'A' nucleotides found in this column.
-* C_Count = Count of 'C' nucleotides found in this column.
-* G_Count = Count of 'G' nucleotides found in this column.
-* T_Count = Count of 'T' nucleotides found in this column.
-* N_Count = Count of 'N' nucleotides found in this column.
-
-
-
-
-
-
-**Output Example**::
-
- column count min max sum mean Q1 med Q3 IQR lW rW A_Count C_Count G_Count T_Count N_Count
- 1 6362991 -4 40 250734117 39.41 40 40 40 0 40 40 1396976 1329101 678730 2958184 0
- 2 6362991 -5 40 250531036 39.37 40 40 40 0 40 40 1786786 1055766 1738025 1782414 0
- 3 6362991 -5 40 248722469 39.09 40 40 40 0 40 40 2296384 984875 1443989 1637743 0
- 4 6362991 -5 40 247654797 38.92 40 40 40 0 40 40 1683197 1410855 1722633 1546306 0
- 5 6362991 -4 40 248214827 39.01 40 40 40 0 40 40 2536861 1167423 1248968 1409739 0
- 6 6362991 -5 40 248499903 39.05 40 40 40 0 40 40 1598956 1236081 1568608 1959346 0
- 7 6362991 -4 40 247719760 38.93 40 40 40 0 40 40 1692667 1822140 1496741 1351443 0
- 8 6362991 -5 40 245745205 38.62 40 40 40 0 40 40 2230936 1343260 1529928 1258867 0
- 9 6362991 -5 40 245766735 38.62 40 40 40 0 40 40 1702064 1306257 1336511 2018159 0
- 10 6362991 -5 40 245089706 38.52 40 40 40 0 40 40 1519917 1446370 1450995 1945709 0
- 11 6362991 -5 40 242641359 38.13 40 40 40 0 40 40 1717434 1282975 1387804 1974778 0
- 12 6362991 -5 40 242026113 38.04 40 40 40 0 40 40 1662872 1202041 1519721 1978357 0
- 13 6362991 -5 40 238704245 37.51 40 40 40 0 40 40 1549965 1271411 1973291 1566681 1643
- 14 6362991 -5 40 235622401 37.03 40 40 40 0 40 40 2101301 1141451 1603990 1515774 475
- 15 6362991 -5 40 230766669 36.27 40 40 40 0 40 40 2344003 1058571 1440466 1519865 86
- 16 6362991 -5 40 224466237 35.28 38 40 40 2 35 40 2203515 1026017 1474060 1651582 7817
- 17 6362991 -5 40 219990002 34.57 34 40 40 6 25 40 1522515 1125455 2159183 1555765 73
- 18 6362991 -5 40 214104778 33.65 30 40 40 10 15 40 1479795 2068113 1558400 1249337 7346
- 19 6362991 -5 40 212934712 33.46 30 40 40 10 15 40 1432749 1231352 1769799 1920093 8998
- 20 6362991 -5 40 212787944 33.44 29 40 40 11 13 40 1311657 1411663 2126316 1513282 73
- 21 6362991 -5 40 211369187 33.22 28 40 40 12 10 40 1887985 1846300 1300326 1318380 10000
- 22 6362991 -5 40 213371720 33.53 30 40 40 10 15 40 542299 3446249 516615 1848190 9638
- 23 6362991 -5 40 221975899 34.89 36 40 40 4 30 40 347679 1233267 926621 3855355 69
- 24 6362991 -5 40 194378421 30.55 21 40 40 19 -5 40 433560 674358 3262764 1992242 67
- 25 6362991 -5 40 199773985 31.40 23 40 40 17 -2 40 944760 325595 1322800 3769641 195
- 26 6362991 -5 40 179404759 28.20 17 34 40 23 -5 40 3457922 156013 1494664 1254293 99
- 27 6362991 -5 40 163386668 25.68 13 28 40 27 -5 40 1392177 281250 3867895 821491 178
- 28 6362991 -5 40 156230534 24.55 12 25 40 28 -5 40 907189 981249 4174945 299437 171
- 29 6362991 -5 40 163236046 25.65 13 28 40 27 -5 40 1097171 3418678 1567013 280008 121
- 30 6362991 -5 40 151309826 23.78 12 23 40 28 -5 40 3514775 2036194 566277 245613 132
- 31 6362991 -5 40 141392520 22.22 10 21 40 30 -5 40 1569000 4571357 124732 97721 181
- 32 6362991 -5 40 143436943 22.54 10 21 40 30 -5 40 1453607 4519441 38176 351107 660
- 33 6362991 -5 40 114269843 17.96 6 14 30 24 -5 40 3311001 2161254 155505 734297 934
- 34 6362991 -5 40 140638447 22.10 10 20 40 30 -5 40 1501615 1637357 18113 3205237 669
- 35 6362991 -5 40 138910532 21.83 10 20 40 30 -5 40 1532519 3495057 23229 1311834 352
- 36 6362991 -5 40 117158566 18.41 7 15 30 23 -5 40 4074444 1402980 63287 822035 245
-
-
-</help>
-</tool>
-<!-- FASTQ-Statistics is part of the FASTX-toolkit, by A.Gordon (gordon(a)cshl.edu) -->
diff -r 0f97b3048bc3 -r 40c5e1853a66 tools/fastx_toolkit/fastq_quality_converter.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/fastx_toolkit/fastq_quality_converter.xml Mon Sep 14 17:03:17 2009 -0400
@@ -0,0 +1,88 @@
+<tool id="cshl_fastq_quality_converter" name="Quality format converter">
+ <description>(ASCII-Numeric)</description>
+ <command>zcat -f $input | fastq_quality_converter $QUAL_FORMAT -o $output -Q $offset</command>
+ <inputs>
+ <param format="fastqsolexa" name="input" type="data" label="Library to convert" />
+
+ <param name="QUAL_FORMAT" type="select" label="Desired output format">
+ <option value="-a">ASCII (letters) quality scores</option>
+ <option value="-n">Numeric quality scores</option>
+ </param>
+
+ <param name="offset" size="4" type="integer" value="33" label="FASTQ ASCII offset" />
+ </inputs>
+
+ <tests>
+ <test>
+ <!-- ASCII to NUMERIC -->
+ <param name="input" value="fastq_qual_conv1.fastq" />
+ <param name="QUAL_FORMAT" value="Numeric quality scores" />
+ <param name="offset" value="64" />
+ <output name="output" file="fastq_qual_conv1.out" />
+ </test>
+ <test>
+ <!-- ASCII to ASCII (basically, a no-op, but it should still produce a valid output -->
+ <param name="input" value="fastq_qual_conv1.fastq" />
+ <param name="QUAL_FORMAT" value="ASCII (letters) quality scores" />
+ <param name="offset" value="64" />
+ <output name="output" file="fastq_qual_conv1a.out" />
+ </test>
+ <test>
+ <!-- NUMERIC to ASCII -->
+ <param name="input" value="fastq_qual_conv2.fastq" />
+ <param name="QUAL_FORMAT" value="ASCII (letters) quality scores" />
+ <param name="offset" value="64" />
+ <output name="output" file="fastq_qual_conv2.out" />
+ </test>
+ <test>
+ <!-- NUMERIC to NUMERIC (basically, a no-op, but it should still produce a valid output -->
+ <param name="input" value="fastq_qual_conv2.fastq" />
+ <param name="QUAL_FORMAT" value="Numeric quality scores" />
+ <param name="offset" value="64" />
+ <output name="output" file="fastq_qual_conv2n.out" />
+ </test>
+ </tests>
+
+ <outputs>
+ <data format="fastqsolexa" name="output" metadata_source="input" />
+ </outputs>
+<help>
+
+**What it does**
+
+Converts a solexa FASTQ file to/from numeric or ASCII quality format.
+
+.. class:: warningmark
+
+Re-scaling is **not** performed. (e.g. conversion from Phred scale to Solexa scale).
+
+
+-----
+
+FASTQ with Numeric quality scores::
+
+ @CSHL__2_FC042AGWWWXX:8:1:120:202
+ ACGATAGATCGGAAGAGCTAGTATGCCGTTTTCTGC
+ +CSHL__2_FC042AGWWWXX:8:1:120:202
+ 40 40 40 40 20 40 40 40 40 6 40 40 28 40 40 25 40 20 40 -1 30 40 14 27 40 8 1 3 7 -1 11 10 -1 21 10 8
+ @CSHL__2_FC042AGWWWXX:8:1:103:1185
+ ATCACGATAGATCGGCAGAGCTCGTTTACCGTCTTC
+ +CSHL__2_FC042AGWWWXX:8:1:103:1185
+ 40 40 40 40 40 35 33 31 40 40 40 32 30 22 40 -0 9 22 17 14 8 36 15 34 22 12 23 3 10 -0 8 2 4 25 30 2
+
+
+FASTQ with ASCII quality scores::
+
+ @CSHL__2_FC042AGWWWXX:8:1:120:202
+ ACGATAGATCGGAAGAGCTAGTATGCCGTTTTCTGC
+ +CSHL__2_FC042AGWWWXX:8:1:120:202
+ hhhhThhhhFhh\hhYhTh?^hN[hHACG?KJ?UJH
+ @CSHL__2_FC042AGWWWXX:8:1:103:1185
+ ATCACGATAGATCGGCAGAGCTCGTTTACCGTCTTC
+ +CSHL__2_FC042AGWWWXX:8:1:103:1185
+ hhhhhca_hhh`^Vh@IVQNHdObVLWCJ@HBDY^B
+
+
+</help>
+</tool>
+<!-- FASTQ-Quality-Converter is part of the FASTX-toolkit, by A.Gordon (gordon(a)cshl.edu) -->
diff -r 0f97b3048bc3 -r 40c5e1853a66 tools/fastx_toolkit/fastx_barcode_splitter.xml
--- a/tools/fastx_toolkit/fastx_barcode_splitter.xml Mon Sep 14 15:27:55 2009 -0400
+++ b/tools/fastx_toolkit/fastx_barcode_splitter.xml Mon Sep 14 17:03:17 2009 -0400
@@ -1,6 +1,6 @@
<tool id="cshl_fastx_barcode_splitter" name="Barcode Splitter">
<description></description>
- <command>fastx_barcode_splitter_galaxy_wrapper.sh $BARCODE $input "$input.name" --mismatches $mismatches --partial $partial $EOL > $output </command>
+ <command interpreter="sh">fastx_barcode_splitter_galaxy_wrapper.sh $BARCODE $input "$input.name" "$output.files_path" --mismatches $mismatches --partial $partial $EOL > $output </command>
<inputs>
<param format="txt" name="BARCODE" type="data" label="Barcodes to use" />
@@ -61,7 +61,7 @@
**Output Example**
-.. image:: ../static/fastx_icons/barcode_splitter_output_example.png
+.. image:: ./static/fastx_icons/barcode_splitter_output_example.png
</help>
</tool>
diff -r 0f97b3048bc3 -r 40c5e1853a66 tools/fastx_toolkit/fastx_barcode_splitter_galaxy_wrapper.sh
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/fastx_toolkit/fastx_barcode_splitter_galaxy_wrapper.sh Mon Sep 14 17:03:17 2009 -0400
@@ -0,0 +1,80 @@
+#!/bin/sh
+
+# FASTX-toolkit - FASTA/FASTQ preprocessing tools.
+# Copyright (C) 2009 A. Gordon (gordon(a)cshl.edu)
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+#
+#This is a shell script wrapper for 'fastx_barcode_splitter.pl'
+#
+# 1. Output files are saved at the dataset's files_path directory.
+#
+# 2. 'fastx_barcode_splitter.pl' outputs a textual table.
+# This script turns it into pretty HTML with working URL
+# (so lazy users can just click on the URLs and get their files)
+
+BARCODE_FILE="$1"
+FASTQ_FILE="$2"
+LIBNAME="$3"
+OUTPUT_PATH="$4"
+shift 4
+# The rest of the parameters are passed to the split program
+
+if [ "$OUTPUT_PATH" == "" ]; then
+ echo "Usage: $0 [BARCODE FILE] [FASTQ FILE] [LIBRARY_NAME] [OUTPUT_PATH]" >&2
+ exit 1
+fi
+
+#Sanitize library name, make sure we can create a file with this name
+LIBNAME=${LIBNAME//\.gz/}
+LIBNAME=${LIBNAME//\.txt/}
+LIBNAME=${LIBNAME//[^[:alnum:]]/_}
+
+if [ ! -r "$FASTQ_FILE" ]; then
+ echo "Error: Input file ($FASTQ_FILE) not found!" >&2
+ exit 1
+fi
+if [ ! -r "$BARCODE_FILE" ]; then
+ echo "Error: barcode file ($BARCODE_FILE) not found!" >&2
+ exit 1
+fi
+mkdir -p "$OUTPUT_PATH"
+if [ ! -d "$OUTPUT_PATH" ]; then
+ echo "Error: failed to create output path '$OUTPUT_PATH'" >&2
+ exit 1
+fi
+
+PUBLICURL=""
+BASEPATH="$OUTPUT_PATH/"
+#PREFIX="$BASEPATH"`date "+%Y-%m-%d_%H%M__"`"${LIBNAME}__"
+PREFIX="$BASEPATH""${LIBNAME}__"
+SUFFIX=".txt"
+
+RESULTS=`zcat -f "$FASTQ_FILE" | fastx_barcode_splitter.pl --bcfile "$BARCODE_FILE" --prefix "$PREFIX" --suffix "$SUFFIX" "$@"`
+if [ $? != 0 ]; then
+ echo "error"
+fi
+
+#
+# Convert the textual tab-separated table into simple HTML table,
+# with the local path replaces with a valid URL
+echo "<html><body><table border=1>"
+echo "$RESULTS" | sed -r "s|$BASEPATH(.*)|<a href=\"\\1\">\\1</a>|" | sed '
+i<tr><td>
+s|\t|</td><td>|g
+a<\/td><\/tr>
+'
+echo "<p>"
+echo "</table></body></html>"
diff -r 0f97b3048bc3 -r 40c5e1853a66 tools/fastx_toolkit/fastx_clipper.xml
--- a/tools/fastx_toolkit/fastx_clipper.xml Mon Sep 14 15:27:55 2009 -0400
+++ b/tools/fastx_toolkit/fastx_clipper.xml Mon Sep 14 17:03:17 2009 -0400
@@ -1,15 +1,11 @@
<tool id="cshl_fastx_clipper" name="Clip" version="1.0.1" >
<description>adapter sequences</description>
<command>
- zcat -f $input | fastx_clipper -s $maxmismatches -l $minlength -a $clip_source.clip_sequence -d $keepdelta -o $output -v $KEEP_N $DISCARD_OPTIONS
+ zcat -f $input | fastx_clipper -l $minlength -a $clip_source.clip_sequence -d $keepdelta -o $output -v $KEEP_N $DISCARD_OPTIONS
</command>
<inputs>
<param format="fasta,fastqsolexa" name="input" type="data" label="Library to clip" />
-
- <param name="maxmismatches" size="4" type="integer" value="2">
- <label>Maximum number of mismatches allowed (when matching the adapter sequence)</label>
- </param>
<param name="minlength" size="4" type="integer" value="15">
<label>Minimum sequence length (after clipping, sequences shorter than this length will be discarded)</label>
@@ -52,22 +48,23 @@
</param>
</inputs>
-
+ <!--
+ #functional test with param value starting with - fails.
<tests>
<test>
<!-- Clip a FASTQ file -->
<param name="input" value="fastx_clipper1.fastq" />
<param name="maxmismatches" value="2" />
<param name="minlength" value="15" />
- <param name="clip_source.clip_source_list" value="user" />
- <param name="clip_source.clip_sequence" value="CAATTGGTTAATCCCCCTATATA" />
+ <param name="clip_source_list" value="user" />
+ <param name="clip_sequence" value="CAATTGGTTAATCCCCCTATATA" />
<param name="keepdelta" value="0" />
<param name="KEEP_N" value="-n" />
<param name="DISCARD_OPTIONS" value="-c" />
<output name="output" file="fastx_clipper1a.out" />
</test>
</tests>
-
+ -->
<outputs>
<data format="input" name="output" metadata_source="input" />
</outputs>
@@ -82,7 +79,7 @@
**Clipping Illustration:**
-.. image:: ../static/fastx_icons/fastx_clipper_illustration.png
+.. image:: ./static/fastx_icons/fastx_clipper_illustration.png
@@ -93,7 +90,7 @@
**Clipping Example:**
-.. image:: ../static/fastx_icons/fastx_clipper_example.png
+.. image:: ./static/fastx_icons/fastx_clipper_example.png
diff -r 0f97b3048bc3 -r 40c5e1853a66 tools/fastx_toolkit/fastx_collapser.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/fastx_toolkit/fastx_collapser.xml Mon Sep 14 17:03:17 2009 -0400
@@ -0,0 +1,75 @@
+<tool id="cshl_fastx_collapser" name="Collapse">
+ <description>sequences</description>
+ <command>zcat -f '$input' | fastx_collapser -v -o '$output' </command>
+
+ <inputs>
+ <param format="fastqsolexa,fasta" name="input" type="data" label="Library to collapse" />
+ </inputs>
+
+ <tests>
+ <test>
+ <param name="input" value="fasta_collapser1.fasta" />
+ <output name="output" file="fasta_collapser1.out" />
+ </test>
+ </tests>
+
+ <outputs>
+ <data format="fasta" name="output" metadata_source="input" />
+ </outputs>
+ <help>
+
+**What it does**
+
+This tool collapses identical sequences in a FASTA file into a single sequence.
+
+--------
+
+**Example**
+
+Example Input File (Sequence "ATAT" appears multiple times)::
+
+ >CSHL_2_FC0042AGLLOO_1_1_605_414
+ TGCG
+ >CSHL_2_FC0042AGLLOO_1_1_537_759
+ ATAT
+ >CSHL_2_FC0042AGLLOO_1_1_774_520
+ TGGC
+ >CSHL_2_FC0042AGLLOO_1_1_742_502
+ ATAT
+ >CSHL_2_FC0042AGLLOO_1_1_781_514
+ TGAG
+ >CSHL_2_FC0042AGLLOO_1_1_757_487
+ TTCA
+ >CSHL_2_FC0042AGLLOO_1_1_903_769
+ ATAT
+ >CSHL_2_FC0042AGLLOO_1_1_724_499
+ ATAT
+
+Example Output file::
+
+ >1-1
+ TGCG
+ >2-4
+ ATAT
+ >3-1
+ TGGC
+ >4-1
+ TGAG
+ >5-1
+ TTCA
+
+.. class:: infomark
+
+Original Sequence Names / Lane descriptions (e.g. "CSHL_2_FC0042AGLLOO_1_1_742_502") are discarded.
+
+The output seqeunce name is composed of two numbers: the first is the sequence's number, the second is the multiplicity value.
+
+The following output::
+
+ >2-4
+ ATAT
+
+means that the sequence "ATAT" is the second sequence in the file, and it appeared 4 times in the input FASTA file.
+
+</help>
+</tool>
diff -r 0f97b3048bc3 -r 40c5e1853a66 tools/fastx_toolkit/fastx_nucleotides_distribution.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/fastx_toolkit/fastx_nucleotides_distribution.xml Mon Sep 14 17:03:17 2009 -0400
@@ -0,0 +1,66 @@
+<tool id="cshl_fastx_nucleotides_distribution" name="Nucleotides Distribution">
+ <description>chart</description>
+ <command>fastx_nucleotide_distribution_graph.sh -t '$input.name' -i $input -o $output</command>
+
+ <inputs>
+ <param format="txt" name="input" type="data" label="Statistics Text File (output of 'FASTX Statistics' tool)" />
+ </inputs>
+
+ <outputs>
+ <data format="png" name="output" metadata_source="input" />
+ </outputs>
+<help>
+
+**What it does**
+
+Creates a stacked-histogram graph for the nucleotide distribution in the Solexa library.
+
+.. class:: infomark
+
+**TIP:** Use the **FASTQ Statistics** tool to generate the report file needed for this tool.
+
+-----
+
+**Output Examples**
+
+
+
+The following chart clearly shows the barcode used at the 5'-end of the library: **GATCT**
+
+.. image:: ./static/fastx_icons/fastq_nucleotides_distribution_1.png
+
+
+
+
+
+
+
+In the following chart, one can almost 'read' the most abundant sequence by looking at the dominant values: **TGATA TCGTA TTGAT GACTG AA...**
+
+.. image:: ./static/fastx_icons/fastq_nucleotides_distribution_2.png
+
+
+
+
+
+
+
+
+The following chart shows a growing number of unknown (N) nucleotides towards later cycles (which might indicate a sequencing problem):
+
+.. image:: ./static/fastx_icons/fastq_nucleotides_distribution_3.png
+
+
+
+
+
+
+
+
+But most of the time, the chart will look rather random:
+
+.. image:: ./static/fastx_icons/fastq_nucleotides_distribution_4.png
+
+</help>
+</tool>
+<!-- FASTQ-Nucleotides-Distribution is part of the FASTX-toolkit, by A.Gordon (gordon(a)cshl.edu) -->
diff -r 0f97b3048bc3 -r 40c5e1853a66 tools/fastx_toolkit/fastx_quality_statistics.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/fastx_toolkit/fastx_quality_statistics.xml Mon Sep 14 17:03:17 2009 -0400
@@ -0,0 +1,102 @@
+<tool id="cshl_fastx_quality_statistics" name="Quality Statistics">
+ <description></description>
+ <command>zcat -f $input | fastx_quality_stats -o $output -Q $offset</command>
+
+ <inputs>
+ <param format="fasta,fastqsolexa" name="input" type="data" label="Library to analyse" />
+ <param name="offset" size="4" type="integer" value="33" label="FASTQ ASCII offset" />
+ </inputs>
+
+ <tests>
+ <test>
+ <param name="input" value="fastq_stats1.fastq" />
+ <param name="offset" value="64" />
+ <output name="output" file="fastq_stats1.out" />
+ </test>
+ </tests>
+
+ <outputs>
+ <data format="txt" name="output" metadata_source="input" />
+ </outputs>
+
+<help>
+
+**What it does**
+
+Creates quality statistics report for the given Solexa/FASTQ library.
+
+.. class:: infomark
+
+**TIP:** This statistics report can be used as input for **Quality Score** and **Nucleotides Distribution** tools.
+
+-----
+
+**The output file will contain the following fields:**
+
+* column = column number (1 to 36 for a 36-cycles read solexa file)
+* count = number of bases found in this column.
+* min = Lowest quality score value found in this column.
+* max = Highest quality score value found in this column.
+* sum = Sum of quality score values for this column.
+* mean = Mean quality score value for this column.
+* Q1 = 1st quartile quality score.
+* med = Median quality score.
+* Q3 = 3rd quartile quality score.
+* IQR = Inter-Quartile range (Q3-Q1).
+* lW = 'Left-Whisker' value (for boxplotting).
+* rW = 'Right-Whisker' value (for boxplotting).
+* A_Count = Count of 'A' nucleotides found in this column.
+* C_Count = Count of 'C' nucleotides found in this column.
+* G_Count = Count of 'G' nucleotides found in this column.
+* T_Count = Count of 'T' nucleotides found in this column.
+* N_Count = Count of 'N' nucleotides found in this column.
+
+
+
+
+
+
+**Output Example**::
+
+ column count min max sum mean Q1 med Q3 IQR lW rW A_Count C_Count G_Count T_Count N_Count
+ 1 6362991 -4 40 250734117 39.41 40 40 40 0 40 40 1396976 1329101 678730 2958184 0
+ 2 6362991 -5 40 250531036 39.37 40 40 40 0 40 40 1786786 1055766 1738025 1782414 0
+ 3 6362991 -5 40 248722469 39.09 40 40 40 0 40 40 2296384 984875 1443989 1637743 0
+ 4 6362991 -5 40 247654797 38.92 40 40 40 0 40 40 1683197 1410855 1722633 1546306 0
+ 5 6362991 -4 40 248214827 39.01 40 40 40 0 40 40 2536861 1167423 1248968 1409739 0
+ 6 6362991 -5 40 248499903 39.05 40 40 40 0 40 40 1598956 1236081 1568608 1959346 0
+ 7 6362991 -4 40 247719760 38.93 40 40 40 0 40 40 1692667 1822140 1496741 1351443 0
+ 8 6362991 -5 40 245745205 38.62 40 40 40 0 40 40 2230936 1343260 1529928 1258867 0
+ 9 6362991 -5 40 245766735 38.62 40 40 40 0 40 40 1702064 1306257 1336511 2018159 0
+ 10 6362991 -5 40 245089706 38.52 40 40 40 0 40 40 1519917 1446370 1450995 1945709 0
+ 11 6362991 -5 40 242641359 38.13 40 40 40 0 40 40 1717434 1282975 1387804 1974778 0
+ 12 6362991 -5 40 242026113 38.04 40 40 40 0 40 40 1662872 1202041 1519721 1978357 0
+ 13 6362991 -5 40 238704245 37.51 40 40 40 0 40 40 1549965 1271411 1973291 1566681 1643
+ 14 6362991 -5 40 235622401 37.03 40 40 40 0 40 40 2101301 1141451 1603990 1515774 475
+ 15 6362991 -5 40 230766669 36.27 40 40 40 0 40 40 2344003 1058571 1440466 1519865 86
+ 16 6362991 -5 40 224466237 35.28 38 40 40 2 35 40 2203515 1026017 1474060 1651582 7817
+ 17 6362991 -5 40 219990002 34.57 34 40 40 6 25 40 1522515 1125455 2159183 1555765 73
+ 18 6362991 -5 40 214104778 33.65 30 40 40 10 15 40 1479795 2068113 1558400 1249337 7346
+ 19 6362991 -5 40 212934712 33.46 30 40 40 10 15 40 1432749 1231352 1769799 1920093 8998
+ 20 6362991 -5 40 212787944 33.44 29 40 40 11 13 40 1311657 1411663 2126316 1513282 73
+ 21 6362991 -5 40 211369187 33.22 28 40 40 12 10 40 1887985 1846300 1300326 1318380 10000
+ 22 6362991 -5 40 213371720 33.53 30 40 40 10 15 40 542299 3446249 516615 1848190 9638
+ 23 6362991 -5 40 221975899 34.89 36 40 40 4 30 40 347679 1233267 926621 3855355 69
+ 24 6362991 -5 40 194378421 30.55 21 40 40 19 -5 40 433560 674358 3262764 1992242 67
+ 25 6362991 -5 40 199773985 31.40 23 40 40 17 -2 40 944760 325595 1322800 3769641 195
+ 26 6362991 -5 40 179404759 28.20 17 34 40 23 -5 40 3457922 156013 1494664 1254293 99
+ 27 6362991 -5 40 163386668 25.68 13 28 40 27 -5 40 1392177 281250 3867895 821491 178
+ 28 6362991 -5 40 156230534 24.55 12 25 40 28 -5 40 907189 981249 4174945 299437 171
+ 29 6362991 -5 40 163236046 25.65 13 28 40 27 -5 40 1097171 3418678 1567013 280008 121
+ 30 6362991 -5 40 151309826 23.78 12 23 40 28 -5 40 3514775 2036194 566277 245613 132
+ 31 6362991 -5 40 141392520 22.22 10 21 40 30 -5 40 1569000 4571357 124732 97721 181
+ 32 6362991 -5 40 143436943 22.54 10 21 40 30 -5 40 1453607 4519441 38176 351107 660
+ 33 6362991 -5 40 114269843 17.96 6 14 30 24 -5 40 3311001 2161254 155505 734297 934
+ 34 6362991 -5 40 140638447 22.10 10 20 40 30 -5 40 1501615 1637357 18113 3205237 669
+ 35 6362991 -5 40 138910532 21.83 10 20 40 30 -5 40 1532519 3495057 23229 1311834 352
+ 36 6362991 -5 40 117158566 18.41 7 15 30 23 -5 40 4074444 1402980 63287 822035 245
+
+
+</help>
+</tool>
+<!-- FASTQ-Statistics is part of the FASTX-toolkit, by A.Gordon (gordon(a)cshl.edu) -->
diff -r 0f97b3048bc3 -r 40c5e1853a66 tools/fastx_toolkit/fastx_renamer.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/fastx_toolkit/fastx_renamer.xml Mon Sep 14 17:03:17 2009 -0400
@@ -0,0 +1,56 @@
+<tool id="cshl_fastx_renamer" name="Rename" version="0.0.11" >
+ <description>sequence identifiers</description>
+ <command>zcat -f $input | fastx_renamer -n $TYPE -o $output -v </command>
+
+ <inputs>
+ <param format="fastqsolexa,fasta,fastqsanger" name="input" type="data" label="FASTQ/A Library to rename" />
+
+ <param name="TYPE" type="select" label="Rename sequence identifiers to">
+ <option value="SEQ">Nucleotides sequence</option>
+ <option value="COUNT">Numeric Counter</option>
+ </param>
+ </inputs>
+
+ <outputs>
+ <data format="input" name="output" metadata_source="input" />
+ </outputs>
+
+<help>
+
+**What it does**
+
+This tool renames the sequence identifiers in a FASTQ/A file.
+
+.. class:: infomark
+
+Use this tool at the beginning of your workflow, as a way to keep the original sequence (before trimming,clipping,barcode-removal, etc).
+
+--------
+
+**Example**
+
+The following Solexa-FASTQ file::
+
+ @CSHL_4_FC042GAMMII_2_1_517_596
+ GGTCAATGATGAGTTGGCACTGTAGGCACCATCAAT
+ +CSHL_4_FC042GAMMII_2_1_517_596
+ 40 40 40 40 40 40 40 40 40 40 38 40 40 40 40 40 14 40 40 40 40 40 36 40 13 14 24 24 9 24 9 40 10 10 15 40
+
+Renamed to **nucleotides sequence**::
+
+ @GGTCAATGATGAGTTGGCACTGTAGGCACCATCAAT
+ GGTCAATGATGAGTTGGCACTGTAGGCACCATCAAT
+ +GGTCAATGATGAGTTGGCACTGTAGGCACCATCAAT
+ 40 40 40 40 40 40 40 40 40 40 38 40 40 40 40 40 14 40 40 40 40 40 36 40 13 14 24 24 9 24 9 40 10 10 15 40
+
+Renamed to **numeric counter**::
+
+ @1
+ GGTCAATGATGAGTTGGCACTGTAGGCACCATCAAT
+ +1
+ 40 40 40 40 40 40 40 40 40 40 38 40 40 40 40 40 14 40 40 40 40 40 36 40 13 14 24 24 9 24 9 40 10 10 15 40
+
+
+</help>
+</tool>
+<!-- FASTQ-to-FASTA is part of the FASTX-toolkit, by A.Gordon (gordon(a)cshl.edu) -->
1
0
14 Sep '09
details: http://www.bx.psu.edu/hg/galaxy/rev/e58e140b89f7
changeset: 2689:e58e140b89f7
user: Kelly Vincent <kpvincent(a)bx.psu.edu>
date: Mon Sep 14 14:54:11 2009 -0400
description:
Updated Bowtie wrapper tool to add a number of threads parameter and remove two unnecessary options
2 file(s) affected in this change:
tools/sr_mapping/bowtie_wrapper.py
tools/sr_mapping/bowtie_wrapper.xml
diffs (198 lines):
diff -r 7f4c8fee3b39 -r e58e140b89f7 tools/sr_mapping/bowtie_wrapper.py
--- a/tools/sr_mapping/bowtie_wrapper.py Mon Sep 14 12:23:16 2009 -0400
+++ b/tools/sr_mapping/bowtie_wrapper.py Mon Sep 14 14:54:11 2009 -0400
@@ -13,6 +13,7 @@
def __main__():
#Parse Command Line
parser = optparse.OptionParser()
+ parser.add_option('', '--threads', dest='threads', help='The number of threads to run')
parser.add_option('', '--input1', dest='input1', help='The (forward or single-end) reads file in Sanger FASTQ format')
parser.add_option('', '--input2', dest='input2', help='The reverse reads file in Sanger FASTQ format')
parser.add_option('', '--output', dest='output', help='The output file')
@@ -35,7 +36,6 @@
parser.add_option('', '--offbase', dest='offbase', help='Number the first base of a reference sequence as n when outputting alignments')
parser.add_option('', '--best', dest='best', help="Whether or not to make Bowtie guarantee that reported singleton alignments are 'best' in terms of stratum and in terms of the quality values at the mismatched positions")
parser.add_option('', '--maxBacktracks', dest='maxBacktracks', help='Maximum number of backtracks permitted when aligning a read')
- parser.add_option('', '--threadMem', dest='threadMem', help='Number of megabytes of memory a given thread is given to store path descriptors in best mode')
parser.add_option('', '--strata', dest='strata', help='Whether or not to report only those alignments that fall in the best stratum if many valid alignments exist and are reportable')
parser.add_option('', '--minInsert', dest='minInsert', help='Minimum insert size for valid paired-end alignments')
parser.add_option('', '--maxInsert', dest='maxInsert', help='Maximum insert size for valid paired-end alignments')
@@ -45,7 +45,6 @@
parser.add_option('', '--reverseAlign', dest='reverseAlign', help='Whether or not to attempt to align the reverse-complement reference strand')
parser.add_option('', '--phased', dest='phased', help='Whether or not it should alternate between using the forward and mirror indexes in a series of phases so that only half of the index is resident in memory at one time')
parser.add_option('', '--offrate', dest='offrate', help='Override the offrate of the index to n')
- parser.add_option('', '--mm', dest='mm', help='Whether or not to use memory-mapped I/O to load the index')
parser.add_option('', '--seed', dest='seed', help='Seed for pseudo-random number generator')
parser.add_option('', '--dbkey', dest='dbkey', help='')
parser.add_option('', '--params', dest='params', help='Whether to use default or specified parameters')
@@ -70,10 +69,10 @@
if options.genomeSource == 'history':
# set up commands
if options.index_settings =='index_pre_set':
- indexing_cmds = ''
+ indexing_cmds = '--quiet'
else:
try:
- indexing_cmds = '%s %s %s %s %s %s %s --offrate %s %s %s %s %s %s %s' % \
+ indexing_cmds = '%s %s %s %s %s %s %s --offrate %s %s %s %s %s %s %s --quiet' % \
(('','--noauto')[options.iauto_b=='set'],
('','--packed')[options.ipacked=='packed'],
('','--bmax %s'%options.ibmax)[options.ibmax!='None' and options.ibmax>=1],
@@ -88,7 +87,7 @@
('','--cutoff %s'%options.icutoff)[int(options.icutoff)>0],
('','--oldpmap')[options.ioldpmap=='yes'])
except ValueError:
- indexing_cmds = ''
+ indexing_cmds = '--quiet'
# make temp directory for placement of indices and copy reference file there
tmp_dir = tempfile.gettempdir()
@@ -97,7 +96,7 @@
except Exception, erf:
stop_err('Error creating temp directory for indexing purposes\n' + str(erf))
options.ref = os.path.join(tmp_dir,os.path.split(options.ref)[1])
- cmd1 = 'cd %s; bowtie-build %s -f %s %s > /dev/null' % (tmp_dir, indexing_cmds, options.ref, options.ref)
+ cmd1 = 'cd %s; bowtie-build %s -f %s %s' % (tmp_dir, indexing_cmds, options.ref, options.ref)
try:
os.system(cmd1)
except Exception, erf:
@@ -106,11 +105,11 @@
# set up aligning and generate aligning command options
# automatically set threads to 8 in both cases
if options.params == 'pre_set':
- aligning_cmds = '-p 8'
+ aligning_cmds = '-p %s --quiet' % options.threads
else:
try:
aligning_cmds = '%s %s %s %s %s %s %s %s %s %s %s %s %s %s ' \
- '%s %s %s %s %s %s %s %s %s %s %s %s %s %s -p 8' % \
+ '%s %s %s %s %s %s %s %s %s %s %s %s -p %s --quiet' % \
(('','-s %s'%options.skip)[options.skip!='None'],
('','-u %s'%options.alignLimit)[int(options.alignLimit)>0],
('','-5 %s'%options.trimH)[int(options.trimH)>=0],
@@ -128,7 +127,6 @@
('','--norc')[options.reverseAlign=='noReverse'],
('','--maxbts %s'%options.maxBacktracks)[options.maxBacktracks!='None' and (options.mismatchSeed=='2' or options.mismatchSeed=='3')],
('','-y')[options.tryHard=='doTryHard'],
- ('','--chunkmbs %s'%options.threadMem)[options.threadMem!='None' and int(options.threadMem)>=0],
('','-k %s'%options.valAlign)[options.valAlign!='None' and int(options.valAlign)>=0],
('','-a')[options.allValAligns=='doAllValAligns' and int(options.allValAligns)>=0],
('','-m %s'%options.suppressAlign)[int(options.suppressAlign)>=0],
@@ -137,18 +135,18 @@
('','-B %s'%options.offbase)[int(options.offbase)>=0],
('','-z %s'%options.phased)[options.phased!='None'],
('','-o %s'%options.offrate)[int(options.offrate)>=0],
- ('','--mm')[options.mm=='doMm'],
- ('','--seed %s'%options.seed)[int(options.seed)>=0])
+ ('','--seed %s'%options.seed)[int(options.seed)>=0],
+ options.threads)
except ValueError:
- aligning_cmds = '-p 8'
+ aligning_cmds = '-p %s --quiet' % options.threads
tmp_out = tempfile.NamedTemporaryFile()
# prepare actual aligning commands
if options.paired == 'paired':
- cmd2 = 'bowtie %s %s -1 %s -2 %s > %s 2> /dev/null' % (aligning_cmds, options.ref, options.input1, options.input2, tmp_out.name)
+ cmd2 = 'bowtie %s %s -1 %s -2 %s > %s' % (aligning_cmds, options.ref, options.input1, options.input2, tmp_out.name)
else:
- cmd2 = 'bowtie %s %s %s > %s 2> /dev/null' % (aligning_cmds, options.ref, options.input1, tmp_out.name)
+ cmd2 = 'bowtie %s %s %s > %s' % (aligning_cmds, options.ref, options.input1, tmp_out.name)
# prepare command to convert bowtie output to sam and alternative
cmd3 = 'bowtie2sam.pl %s > %s' % (tmp_out.name, options.output)
cmd4 = 'cp %s %s' % (tmp_out.name, options.output)
diff -r 7f4c8fee3b39 -r e58e140b89f7 tools/sr_mapping/bowtie_wrapper.xml
--- a/tools/sr_mapping/bowtie_wrapper.xml Mon Sep 14 12:23:16 2009 -0400
+++ b/tools/sr_mapping/bowtie_wrapper.xml Mon Sep 14 14:54:11 2009 -0400
@@ -2,6 +2,7 @@
<description> fast alignment of reads against reference sequence </description>
<command interpreter="python">
bowtie_wrapper.py
+ --threads="8"
--input1=$singlePaired.input1
#if $singlePaired.sPaired == "paired":
--input2=$singlePaired.input2
@@ -33,17 +34,14 @@
--suppressAlign=$singlePaired.params.suppressAlign
--offbase=$singlePaired.params.offbase
--offrate=$singlePaired.params.offrate
- --mm=$singlePaired.params.mm
--seed=$singlePaired.params.seed
--best=$singlePaired.params.bestOption.best
#if $singlePaired.params.bestOption.best == "doBest":
--maxBacktracks=$singlePaired.params.bestOption.maxBacktracks
- --threadMem=$singlePaired.params.bestOption.threadMem
--strata=$singlePaired.params.bestOption.strata
--phased="None"
#else:
--maxBacktracks="None"
- --threadMem="None"
--strata="None"
#if $singlePaired.sPaired =="single":
--phased=$singlePaired.params.bestOption.phased
@@ -83,7 +81,6 @@
--offbase="None"
--best="None"
--maxBacktracks="None"
- --threadMem="None"
--strata="None"
--minInsert="None"
--maxInsert="None"
@@ -93,7 +90,6 @@
--reverseAlign="None"
--phased="None"
--offrate="None"
- --mm="None"
--seed="None"
#end if
#if $refGenomeSource.genomeSource == "history":
@@ -264,7 +260,6 @@
</when>
<when value="doBest">
<param name="maxBacktracks" type="integer" value="800" label="Maximum number of backtracks permitted when aligning a read (--maxbts)" />
- <param name="threadMem" type="integer" value="32" label="Number of megabytes of memory a given thread is given to store path descriptors in best mode (--chunkmbs)" help="If running in best mode, and you run out of memory, try adjusting this" />
<param name="strata" type="select" label="Whether or not to report only those alignments that fall in the best stratum if many valid alignments exist and are reportable (--strata)">
<option value="noStrata">Do not use strata option</option>
<option value="doStrata">Use strata option</option>
@@ -272,10 +267,6 @@
</when>
</conditional> <!-- bestOption -->
<param name="offrate" type="integer" value="-1" label="Override the offrate of the index to n (-o)" help="-1 for default" />
- <param name="mm" type="select" label="Whether or not to use memory-mapped I/O to load the index (--m)">
- <option value="noMm">Use POSIX/C file I/O</option>
- <option value="doMm">Use memory-mapped I/O</option>
- </param>
<param name="seed" type="integer" value="-1" label="Seed for pseudo-random number generator (--seed)" help="-1 for default" />
</when> <!-- full -->
</conditional> <!-- params -->
@@ -339,7 +330,6 @@
</when>
<when value="doBest">
<param name="maxBacktracks" type="integer" value="800" label="Maximum number of backtracks permitted when aligning a read (--maxbts)" />
- <param name="threadMem" type="integer" value="32" label="Number of megabytes of memory a given thread is given to store path descriptors in best mode (--chunkmbs)" help="If running in best mode, and you run out of memory, try adjusting this" />
<param name="strata" type="select" label="Whether or not to report only those alignments that fall in the best stratum if many valid alignments exist and are reportable (--strata)">
<option value="noStrata">Do not use strata option</option>
<option value="doStrata">Use strata option</option>
@@ -347,10 +337,6 @@
</when>
</conditional>
<param name="offrate" type="integer" value="-1" label="Override the offrate of the index to n -o)" help="-1 for default" />
- <param name="mm" type="select" label="Whether or not to use memory-mapped I/O to load the index (--mm)">
- <option value="noMm">Use POSIX/C file I/O</option>
- <option value="doMm">Use memory-mapped I/O</option>
- </param>
<param name="seed" type="integer" value="-1" label="Seed for pseudo-random number generator (--seed)" help="-1 for default" />
</when> <!-- full -->
</conditional> <!-- params -->
@@ -431,10 +417,8 @@
<param name="offbase" value="0" />
<param name="best" value="doBest" />
<param name="maxBacktracks" value="800" />
- <param name="threadMem" value="32" />
<param name="strata" value="noStrata" />
<param name="offrate" value="-1" />
- <param name="mm" value="noMm" />
<param name="seed" value="403" />
<output name="output" ftype="sam" file="bowtie_out2.sam" />
</test>
1
0
details: http://www.bx.psu.edu/hg/galaxy/rev/0f97b3048bc3
changeset: 2690:0f97b3048bc3
user: anton(a)nekrut-mbp.bx.psu.edu
date: Mon Sep 14 15:27:55 2009 -0400
description:
Modifications for fastq splitted help
2 file(s) affected in this change:
tool_conf.xml.sample
tools/metag_tools/split_paired_reads.xml
diffs (23 lines):
diff -r e58e140b89f7 -r 0f97b3048bc3 tool_conf.xml.sample
--- a/tool_conf.xml.sample Mon Sep 14 14:54:11 2009 -0400
+++ b/tool_conf.xml.sample Mon Sep 14 15:27:55 2009 -0400
@@ -338,6 +338,7 @@
<tool file="visualization/genetrack.xml" />
</section>
<section name="SAM Tools" id="samtools">
+ <tool file="samtools/sam_bitwise_flag_filter.xml" />
<tool file="samtools/sam_to_bam.xml" />
<tool file="samtools/sam_merge.xml" />
<tool file="samtools/sam_pileup.xml" />
diff -r e58e140b89f7 -r 0f97b3048bc3 tools/metag_tools/split_paired_reads.xml
--- a/tools/metag_tools/split_paired_reads.xml Mon Sep 14 14:54:11 2009 -0400
+++ b/tools/metag_tools/split_paired_reads.xml Mon Sep 14 15:27:55 2009 -0400
@@ -20,7 +20,7 @@
**What it does**
-This tool splits a single paired-end file in half and returns two files with each ends.
+Splits a single fastq datasret representing paired-end run into two datasets (one for each end). This tool works only for datasets where both ends have **the same** length.
-----
1
0
details: http://www.bx.psu.edu/hg/galaxy/rev/7f4c8fee3b39
changeset: 2688:7f4c8fee3b39
user: Nate Coraor <nate(a)bx.psu.edu>
date: Mon Sep 14 12:23:16 2009 -0400
description:
Fix path mangling in cleanup_datasets.py
1 file(s) affected in this change:
scripts/cleanup_datasets/cleanup_datasets.py
diffs (23 lines):
diff -r a5ee939839eb -r 7f4c8fee3b39 scripts/cleanup_datasets/cleanup_datasets.py
--- a/scripts/cleanup_datasets/cleanup_datasets.py Mon Sep 14 12:11:00 2009 -0400
+++ b/scripts/cleanup_datasets/cleanup_datasets.py Mon Sep 14 12:23:16 2009 -0400
@@ -1,4 +1,8 @@
#!/usr/bin/env python
+
+new_path = [ os.path.join( os.getcwd(), "lib" ) ]
+new_path.extend( sys.path[1:] ) # remove scripts/ from the path
+sys.path = new_path
from galaxy import eggs
import pkg_resources
@@ -8,10 +12,6 @@
from datetime import datetime, timedelta
from time import strftime
from optparse import OptionParser
-
-new_path = [ os.path.join( os.getcwd(), "lib" ) ]
-new_path.extend( sys.path[1:] ) # remove scripts/ from the path
-sys.path = new_path
import galaxy.model.mapping
from galaxy.model.orm import and_, eagerload
1
0
details: http://www.bx.psu.edu/hg/galaxy/rev/a5ee939839eb
changeset: 2687:a5ee939839eb
user: Nate Coraor <nate(a)bx.psu.edu>
date: Mon Sep 14 12:11:00 2009 -0400
description:
Remove session stuff from reports webapp
1 file(s) affected in this change:
lib/galaxy/webapps/reports/buildapp.py
diffs (28 lines):
diff -r d301a67eda40 -r a5ee939839eb lib/galaxy/webapps/reports/buildapp.py
--- a/lib/galaxy/webapps/reports/buildapp.py Mon Sep 14 11:05:36 2009 -0400
+++ b/lib/galaxy/webapps/reports/buildapp.py Mon Sep 14 12:11:00 2009 -0400
@@ -87,17 +87,6 @@
from paste import recursive
app = recursive.RecursiveMiddleware( app, conf )
log.debug( "Enabling 'recursive' middleware" )
- ## # Session middleware puts a session factory into the environment
- ## if asbool( conf.get( 'use_session', True ) ):
- ## store = flup_session.MemorySessionStore()
- ## app = flup_session.SessionMiddleware( store, app )
- ## log.debug( "Enabling 'flup session' middleware" )
- # Beaker session middleware
- if asbool( conf.get( 'use_beaker_session', False ) ):
- pkg_resources.require( "Beaker" )
- import beaker.session
- app = beaker.session.SessionMiddleware( app, conf )
- log.debug( "Enabling 'beaker session' middleware" )
# Various debug middleware that can only be turned on if the debug
# flag is set, either because they are insecure or greatly hurt
# performance
@@ -185,4 +174,4 @@
if isinstance( exc_value, AttributeError ) and exc_value.args[0].startswith( "'Undefined' object has no attribute" ):
return mako.exceptions.html_error_template().render( full=False, css=False )
formatters.append( mako_html_data )
- return formatters
\ No newline at end of file
+ return formatters
1
0
details: http://www.bx.psu.edu/hg/galaxy/rev/355b6844b123
changeset: 2684:355b6844b123
user: jeremy goecks <jeremy.goecks(a)emory.edu>
date: Fri Sep 11 15:04:53 2009 -0400
description:
Merge
0 file(s) affected in this change:
diffs (878 lines):
diff -r 032478337b82 -r 355b6844b123 eggs.ini
--- a/eggs.ini Fri Sep 11 14:57:02 2009 -0400
+++ b/eggs.ini Fri Sep 11 15:04:53 2009 -0400
@@ -31,7 +31,7 @@
elementtree = 1.2.6_20050316
lrucache = 0.2
;lsprof - james
-Mako = 0.2.4
+Mako = 0.2.5
MyghtyUtils = 0.52
nose = 0.9.1
NoseHTML = 0.2
@@ -79,7 +79,7 @@
docutils = http://downloads.sourceforge.net/docutils/docutils-0.4.tar.gz
elementtree = http://effbot.org/downloads/elementtree-1.2.6-20050316.tar.gz
lrucache = http://evan.prodromou.name/lrucache/lrucache-0.2.tar.gz
-Mako = http://www.makotemplates.org/downloads/Mako-0.2.4.tar.gz
+Mako = http://www.makotemplates.org/downloads/Mako-0.2.5.tar.gz
MyghtyUtils = http://cheeseshop.python.org/packages/source/M/MyghtyUtils/MyghtyUtils-0.52…
nose = http://www.somethingaboutorange.com/mrl/projects/nose/nose-0.9.1.tar.gz
NoseHTML = http://dist.g2.bx.psu.edu/nosehtml-0.2.tar.bz2
diff -r 032478337b82 -r 355b6844b123 scripts/cleanup_datasets/cleanup_datasets.py
--- a/scripts/cleanup_datasets/cleanup_datasets.py Fri Sep 11 14:57:02 2009 -0400
+++ b/scripts/cleanup_datasets/cleanup_datasets.py Fri Sep 11 15:04:53 2009 -0400
@@ -1,4 +1,8 @@
#!/usr/bin/env python
+
+from galaxy import eggs
+import pkg_resources
+pkg_resources.require( "SQLAlchemy >= 0.4" )
import sys, os, time, ConfigParser, shutil
from datetime import datetime, timedelta
@@ -9,12 +13,7 @@
new_path.extend( sys.path[1:] ) # remove scripts/ from the path
sys.path = new_path
-from galaxy import eggs
import galaxy.model.mapping
-import pkg_resources
-
-pkg_resources.require( "SQLAlchemy >= 0.4" )
-
from galaxy.model.orm import and_, eagerload
assert sys.version_info[:2] >= ( 2, 4 )
diff -r 032478337b82 -r 355b6844b123 templates/workflow/run.mako
--- a/templates/workflow/run.mako Fri Sep 11 14:57:02 2009 -0400
+++ b/templates/workflow/run.mako Fri Sep 11 15:04:53 2009 -0400
@@ -87,8 +87,7 @@
${param.get_html_field( t, value, other_values ).get_html( str(step.id) + "|" + prefix )}
<input type="hidden" name="${step.id}|__force_update__${prefix}${param.name}" value="true" />
%endif
- %elif isinstance( value, RuntimeValue ) or \
- ( str(step.id) + '|__runtime__' + prefix + param.name ) in incoming:
+ %elif isinstance( value, RuntimeValue ) or ( str(step.id) + '|__runtime__' + prefix + param.name ) in incoming:
## On the first load we may see a RuntimeValue, so we write
## an input field using the initial value for the param.
## Subsequents posts will no longer have the runtime value
diff -r 032478337b82 -r 355b6844b123 test-data/bowtie_in1.fastq
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/bowtie_in1.fastq Fri Sep 11 15:04:53 2009 -0400
@@ -0,0 +1,5 @@
+@HWI-EAS91_1_30788AAXX:1:1:1513:715/1
+GTTTTTTNNGCATAGATGTTTAGTTGTGGTAGTCAG
++/1
+IIIIIII""IIIIIIIIIIIIIIIIIIIDI?II-+I
+
diff -r 032478337b82 -r 355b6844b123 test-data/bowtie_in2.fastq
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/bowtie_in2.fastq Fri Sep 11 15:04:53 2009 -0400
@@ -0,0 +1,4 @@
+@HWI-EAS91_1_30788AAXX:1:2:618:346/1
+TAGACTACGAAAGTGACTTTAATACCTCTGACTACA
++
+IIIIIIIIIIIIIIIIIIIIIIIIIIIII%4II;I3
diff -r 032478337b82 -r 355b6844b123 test-data/bowtie_in3.fastq
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/bowtie_in3.fastq Fri Sep 11 15:04:53 2009 -0400
@@ -0,0 +1,4 @@
+@HWI-EAS91_1_30788AAXX:1:2:618:346/2
+ATAGGCTGAATTAGCAATGGATGGTGGGGTTTATCG
++
+IIIIIIIIIIIIIII9I.II5II6DFIIIIII*I2)
diff -r 032478337b82 -r 355b6844b123 test-data/bowtie_out1.sam
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/bowtie_out1.sam Fri Sep 11 15:04:53 2009 -0400
@@ -0,0 +1,1 @@
+HWI-EAS91_1_30788AAXX:1:1:1513:715 16 chrM 9563 25 36M * 0 0 CTGACTACCACAACTAAACATCTATGCNNAAAAAAC I+-II?IDIIIIIIIIIIIIIIIIIII""IIIIIII NM:i:1 X1:i:1 MD:Z:7N0N27
diff -r 032478337b82 -r 355b6844b123 test-data/bowtie_out2.sam
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/bowtie_out2.sam Fri Sep 11 15:04:53 2009 -0400
@@ -0,0 +1,2 @@
+HWI-EAS91_1_30788AAXX:1:2:618:346 0 chrM 441 25 36M * 0 0 TAGACTACGAAAGTGACTTTAATACCTCTGACTACA IIIIIIIIIIIIIIIIIIIIIIIIIIIII%4II;I3 NM:i:0 X0:i:1 MD:Z:36
+HWI-EAS91_1_30788AAXX:1:2:618:346 16 chrM 652 25 36M * 0 0 CGATAAACCCCACCATCCATTGCTAATTCAGCCTAT )2I*IIIIIIFD6II5II.I9IIIIIIIIIIIIIII NM:i:1 X1:i:1 MD:Z:17A18
diff -r 032478337b82 -r 355b6844b123 tool-data/bowtie_indices.loc.sample
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tool-data/bowtie_indices.loc.sample Fri Sep 11 15:04:53 2009 -0400
@@ -0,0 +1,28 @@
+#This is a sample file distributed with Galaxy that enables tools
+#to use a directory of Bowtie indexed sequences data files. You will need
+#to create these data files and then create a bowtie_indices.loc file
+#similar to this one (store it in this directory ) that points to
+#the directories in which those files are stored. The bowtie_indices.loc
+#file has this format (white space characters are TAB characters):
+#
+#<build> <file_base>
+#
+#So, for example, if you had hg18 indexed stored in
+#/depot/data2/galaxy/bowtie/hg18/,
+#then the bowtie_indices.loc entry would look like this:
+#
+#hg18 /depot/data2/galaxy/bowtie/hg18/hg18
+#
+#and your /depot/data2/galaxy/bowtie/hg18/ directory
+#would contain hg18.*.ebwt files:
+#
+#-rw-r--r-- 1 james universe 830134 2005-09-13 10:12 hg18.1.ebwt
+#-rw-r--r-- 1 james universe 527388 2005-09-13 10:12 hg18.2.ebwt
+#-rw-r--r-- 1 james universe 269808 2005-09-13 10:12 gh18.3.ebwt
+#...etc...
+#
+#Your bowtie_indices.loc file should include an entry per line for
+#each index set you have stored. The "file" in the path does not actually
+#exist, but it is the prefix for the actual index files. For example:
+#
+#hg18 /depot/data2/galaxy/bowtie/hg18/hg18
diff -r 032478337b82 -r 355b6844b123 tool_conf.xml.sample
--- a/tool_conf.xml.sample Fri Sep 11 14:57:02 2009 -0400
+++ b/tool_conf.xml.sample Fri Sep 11 15:04:53 2009 -0400
@@ -332,7 +332,8 @@
<tool file="metag_tools/megablast_xml_parser.xml" />
<tool file="metag_tools/blat_wrapper.xml" />
<tool file="metag_tools/mapping_to_ucsc.xml" />
- </section>
+ <tool file="sr_mapping/bowtie_wrapper.xml" />
+ </section>
<section name="Tracks" id="tracks">
<tool file="visualization/genetrack.xml" />
</section>
diff -r 032478337b82 -r 355b6844b123 tools/sr_mapping/bowtie_wrapper.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/sr_mapping/bowtie_wrapper.py Fri Sep 11 15:04:53 2009 -0400
@@ -0,0 +1,174 @@
+#! /usr/bin/python
+
+"""
+Runs Bowtie on single-end or paired-end data.
+"""
+
+import optparse, os, sys, tempfile
+
+def stop_err( msg ):
+ sys.stderr.write( "%s\n" % msg )
+ sys.exit()
+
+def __main__():
+ #Parse Command Line
+ parser = optparse.OptionParser()
+ parser.add_option('', '--input1', dest='input1', help='The (forward or single-end) reads file in Sanger FASTQ format')
+ parser.add_option('', '--input2', dest='input2', help='The reverse reads file in Sanger FASTQ format')
+ parser.add_option('', '--output', dest='output', help='The output file')
+ parser.add_option('', '--paired', dest='paired', help='Whether the data is single- or paired-end')
+ parser.add_option('', '--genomeSource', dest='genomeSource', help='The type of reference provided')
+ parser.add_option('', '--ref', dest='ref', help='The reference genome to use or index')
+ parser.add_option('', '--skip', dest='skip', help='Skip the first n reads')
+ parser.add_option('', '--alignLimit', dest='alignLimit', help='Only align the first n reads')
+ parser.add_option('', '--trimH', dest='trimH', help='Trim n bases from high-quality (left) end of each read before alignment')
+ parser.add_option('', '--trimL', dest='trimL', help='Trim n bases from low-quality (right) end of each read before alignment')
+ parser.add_option('', '--mismatchSeed', dest='mismatchSeed', help='Maximum number of mismatches permitted in the seed')
+ parser.add_option('', '--mismatchQual', dest='mismatchQual', help='Maximum permitted total of quality values at mismatched read positions')
+ parser.add_option('', '--seedLen', dest='seedLen', help='Seed length')
+ parser.add_option('', '--rounding', dest='rounding', help='Whether or not to round to the nearest 10 and saturating at 30')
+ parser.add_option('', '--maqSoapAlign', dest='maqSoapAlign', help='Choose MAQ- or SOAP-like alignment policy')
+ parser.add_option('', '--tryHard', dest='tryHard', help='Whether or not to try as hard as possible to find valid alignments when they exist')
+ parser.add_option('', '--valAlign', dest='valAlign', help='Report up to n valid arguments per read')
+ parser.add_option('', '--allValAligns', dest='allValAligns', help='Whether or not to report all valid alignments per read')
+ parser.add_option('', '--suppressAlign', dest='suppressAlign', help='Suppress all alignments for a read if more than n reportable alignments exist')
+ parser.add_option('', '--offbase', dest='offbase', help='Number the first base of a reference sequence as n when outputting alignments')
+ parser.add_option('', '--best', dest='best', help="Whether or not to make Bowtie guarantee that reported singleton alignments are 'best' in terms of stratum and in terms of the quality values at the mismatched positions")
+ parser.add_option('', '--maxBacktracks', dest='maxBacktracks', help='Maximum number of backtracks permitted when aligning a read')
+ parser.add_option('', '--threadMem', dest='threadMem', help='Number of megabytes of memory a given thread is given to store path descriptors in best mode')
+ parser.add_option('', '--strata', dest='strata', help='Whether or not to report only those alignments that fall in the best stratum if many valid alignments exist and are reportable')
+ parser.add_option('', '--minInsert', dest='minInsert', help='Minimum insert size for valid paired-end alignments')
+ parser.add_option('', '--maxInsert', dest='maxInsert', help='Maximum insert size for valid paired-end alignments')
+ parser.add_option('', '--mateOrient', dest='mateOrient', help='The upstream/downstream mate orientation for valid paired-end alignment against the forward reference strand')
+ parser.add_option('', '--maxAlignAttempt', dest='maxAlignAttempt', help='Maximum number of attempts Bowtie will make to match an alignment for one mate with an alignment for the opposite mate')
+ parser.add_option('', '--forwardAlign', dest='forwardAlign', help='Whether or not to attempt to align the forward reference strand')
+ parser.add_option('', '--reverseAlign', dest='reverseAlign', help='Whether or not to attempt to align the reverse-complement reference strand')
+ parser.add_option('', '--phased', dest='phased', help='Whether or not it should alternate between using the forward and mirror indexes in a series of phases so that only half of the index is resident in memory at one time')
+ parser.add_option('', '--offrate', dest='offrate', help='Override the offrate of the index to n')
+ parser.add_option('', '--mm', dest='mm', help='Whether or not to use memory-mapped I/O to load the index')
+ parser.add_option('', '--seed', dest='seed', help='Seed for pseudo-random number generator')
+ parser.add_option('', '--dbkey', dest='dbkey', help='')
+ parser.add_option('', '--params', dest='params', help='Whether to use default or specified parameters')
+ parser.add_option('', '--iauto_b', dest='iauto_b', help='Automatic or specified behavior')
+ parser.add_option('', '--ipacked', dest='ipacked', help='Whether or not to use a packed representation for DNA strings')
+ parser.add_option('', '--ibmax', dest='ibmax', help='Maximum number of suffixes allowed in a block')
+ parser.add_option('', '--ibmaxdivn', dest='ibmaxdivn', help='Maximum number of suffixes allowed in a block as a fraction of the length of the reference')
+ parser.add_option('', '--idcv', dest='idcv', help='The period for the difference-cover sample')
+ parser.add_option('', '--inodc', dest='inodc', help='Whether or not to disable the use of the difference-cover sample')
+ parser.add_option('', '--inoref', dest='inoref', help='Whether or not to build the part of the reference index used only in paried-end alignment')
+ parser.add_option('', '--ioffrate', dest='ioffrate', help='How many rows get marked during annotation of some or all of the Burrows-Wheeler rows')
+ parser.add_option('', '--iftab', dest='iftab', help='The size of the lookup table used to calculate an initial Burrows-Wheeler range with respect to the first n characters of the query')
+ parser.add_option('', '--intoa', dest='intoa', help='Whether or not to convert Ns in the reference sequence to As')
+ parser.add_option('', '--iendian', dest='iendian', help='Endianness to use when serializing integers to the index file')
+ parser.add_option('', '--iseed', dest='iseed', help='Seed for the pseudorandom number generator')
+ parser.add_option('', '--icutoff', dest='icutoff', help='Number of first bases of the reference sequence to index')
+ parser.add_option('', '--ioldpmap', dest='ioldpmap', help='Use the scheme for mapping joined reference locations to original reference locations used in versions of Bowtie prior to 0.9.8')
+ parser.add_option('', '--indexSettings', dest='index_settings', help='Whether or not indexing options are to be set')
+ (options, args) = parser.parse_args()
+
+ # index if necessary
+ if options.genomeSource == 'history':
+ # set up commands
+ if options.index_settings =='index_pre_set':
+ indexing_cmds = ''
+ else:
+ try:
+ indexing_cmds = '%s %s %s %s %s %s %s --offrate %s %s %s %s %s %s %s' % \
+ (('','--noauto')[options.iauto_b=='set'],
+ ('','--packed')[options.ipacked=='packed'],
+ ('','--bmax %s'%options.ibmax)[options.ibmax!='None' and options.ibmax>=1],
+ ('','--bmaxdivn %s'%options.ibmaxdivn)[options.ibmaxdivn!='None'],
+ ('','--dcv %s'%options.idcv)[options.idcv!='None'],
+ ('','--nodc')[options.inodc=='nodc'],
+ ('','--noref')[options.inoref=='noref'], options.ioffrate,
+ ('','--ftabchars %s'%options.iftab)[int(options.iftab)>=0],
+ ('','--ntoa')[options.intoa=='yes'],
+ ('--little','--big')[options.iendian=='big'],
+ ('','--seed %s'%options.iseed)[int(options.iseed)>0],
+ ('','--cutoff %s'%options.icutoff)[int(options.icutoff)>0],
+ ('','--oldpmap')[options.ioldpmap=='yes'])
+ except ValueError:
+ indexing_cmds = ''
+
+ # make temp directory for placement of indices and copy reference file there
+ tmp_dir = tempfile.gettempdir()
+ try:
+ os.system('cp %s %s' % (options.ref, tmp_dir))
+ except Exception, erf:
+ stop_err('Error creating temp directory for indexing purposes\n' + str(erf))
+ options.ref = os.path.join(tmp_dir,os.path.split(options.ref)[1])
+ cmd1 = 'cd %s; bowtie-build %s -f %s %s > /dev/null' % (tmp_dir, indexing_cmds, options.ref, options.ref)
+ try:
+ os.system(cmd1)
+ except Exception, erf:
+ stop_err('Error indexing reference sequence\n' + str(erf))
+
+ # set up aligning and generate aligning command options
+ # automatically set threads to 8 in both cases
+ if options.params == 'pre_set':
+ aligning_cmds = '-p 8'
+ else:
+ try:
+ aligning_cmds = '%s %s %s %s %s %s %s %s %s %s %s %s %s %s ' \
+ '%s %s %s %s %s %s %s %s %s %s %s %s %s %s -p 8' % \
+ (('','-s %s'%options.skip)[options.skip!='None'],
+ ('','-u %s'%options.alignLimit)[int(options.alignLimit)>0],
+ ('','-5 %s'%options.trimH)[int(options.trimH)>=0],
+ ('','-3 %s'%options.trimL)[int(options.trimL)>=0],
+ ('','-n %s'%options.mismatchSeed)[options.mismatchSeed=='0' or options.mismatchSeed=='1' or options.mismatchSeed=='2' or options.mismatchSeed=='3'],
+ ('','-e %s'%options.mismatchQual)[int(options.mismatchQual)>=0],
+ ('','-l %s'%options.seedLen)[int(options.seedLen)>=5],
+ ('','--nomaqround')[options.rounding=='noRound'],
+ ('','-v %s'%options.maqSoapAlign)[options.maqSoapAlign!='-1'],
+ ('','-I %s'%options.minInsert)[options.minInsert!='None'],
+ ('','-X %s'%options.maxInsert)[options.maxInsert!='None'],
+ ('','--%s'%options.mateOrient)[options.mateOrient!='None'],
+ ('','--pairtries %s'%options.maxAlignAttempt)[int(options.maxAlignAttempt)>=0],
+ ('','--nofw')[options.forwardAlign=='noForward'],
+ ('','--norc')[options.reverseAlign=='noReverse'],
+ ('','--maxbts %s'%options.maxBacktracks)[options.maxBacktracks!='None' and (options.mismatchSeed=='2' or options.mismatchSeed=='3')],
+ ('','-y')[options.tryHard=='doTryHard'],
+ ('','--chunkmbs %s'%options.threadMem)[options.threadMem!='None' and int(options.threadMem)>=0],
+ ('','-k %s'%options.valAlign)[options.valAlign!='None' and int(options.valAlign)>=0],
+ ('','-a')[options.allValAligns=='doAllValAligns' and int(options.allValAligns)>=0],
+ ('','-m %s'%options.suppressAlign)[int(options.suppressAlign)>=0],
+ ('','--best')[options.best=='doBest'],
+ ('','--strata')[options.strata=='doStrata'],
+ ('','-B %s'%options.offbase)[int(options.offbase)>=0],
+ ('','-z %s'%options.phased)[options.phased!='None'],
+ ('','-o %s'%options.offrate)[int(options.offrate)>=0],
+ ('','--mm')[options.mm=='doMm'],
+ ('','--seed %s'%options.seed)[int(options.seed)>=0])
+ except ValueError:
+ aligning_cmds = '-p 8'
+
+ tmp_out = tempfile.NamedTemporaryFile()
+
+ # prepare actual aligning commands
+ if options.paired == 'paired':
+ cmd2 = 'bowtie %s %s -1 %s -2 %s > %s 2> /dev/null' % (aligning_cmds, options.ref, options.input1, options.input2, tmp_out.name)
+ else:
+ cmd2 = 'bowtie %s %s %s > %s 2> /dev/null' % (aligning_cmds, options.ref, options.input1, tmp_out.name)
+ # prepare command to convert bowtie output to sam and alternative
+ cmd3 = 'bowtie2sam.pl %s > %s' % (tmp_out.name, options.output)
+ cmd4 = 'cp %s %s' % (tmp_out.name, options.output)
+
+ # align
+ try:
+ os.system(cmd2)
+ except Exception, erf:
+ stop_err("Error aligning sequence\n" + str(erf))
+ if len(file(tmp_out.name,'r').read()) > 0:
+ #convert
+ try:
+ os.system(cmd3)
+ except Exception, erf:
+ stop_err('Error converting output to sam format\n' + str(erf))
+ else:
+ try:
+ os.system(cmd4)
+ sys.stdout.write('Alignment file contained no data')
+ except Exception, erf:
+ stop_err('Error producing alignment file. File contained no data.\n' + str(erf))
+
+if __name__=="__main__": __main__()
diff -r 032478337b82 -r 355b6844b123 tools/sr_mapping/bowtie_wrapper.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/sr_mapping/bowtie_wrapper.xml Fri Sep 11 15:04:53 2009 -0400
@@ -0,0 +1,556 @@
+<tool id="bowtie_wrapper" name="Bowtie" version="1.0.0">
+ <description> fast alignment of reads against reference sequence </description>
+ <command interpreter="python">
+ bowtie_wrapper.py
+ --input1=$singlePaired.input1
+ #if $singlePaired.sPaired == "paired":
+ --input2=$singlePaired.input2
+ #else:
+ --input2="None"
+ #end if
+ --output=$output
+ --paired=$singlePaired.sPaired
+ --genomeSource=$refGenomeSource.genomeSource
+ #if $refGenomeSource.genomeSource == "history":
+ --ref=$refGenomeSource.ownFile
+ #else:
+ --ref=$refGenomeSource.indices.value
+ #end if
+ --params=$singlePaired.params.settings_type
+ #if $singlePaired.params.settings_type == "full":
+ --skip=$singlePaired.params.skip
+ --alignLimit=$singlePaired.params.alignLimit
+ --trimH=$singlePaired.params.trimH
+ --trimL=$singlePaired.params.trimL
+ --mismatchSeed=$singlePaired.params.mismatchSeed
+ --mismatchQual=$singlePaired.params.mismatchQual
+ --seedLen=$singlePaired.params.seedLen
+ --rounding=$singlePaired.params.rounding
+ --maqSoapAlign=$singlePaired.params.maqSoapAlign
+ --tryHard=$singlePaired.params.tryHard
+ --valAlign=$singlePaired.params.valAlign
+ --allValAligns=$singlePaired.params.allValAligns
+ --suppressAlign=$singlePaired.params.suppressAlign
+ --offbase=$singlePaired.params.offbase
+ --offrate=$singlePaired.params.offrate
+ --mm=$singlePaired.params.mm
+ --seed=$singlePaired.params.seed
+ --best=$singlePaired.params.bestOption.best
+ #if $singlePaired.params.bestOption.best == "doBest":
+ --maxBacktracks=$singlePaired.params.bestOption.maxBacktracks
+ --threadMem=$singlePaired.params.bestOption.threadMem
+ --strata=$singlePaired.params.bestOption.strata
+ --phased="None"
+ #else:
+ --maxBacktracks="None"
+ --threadMem="None"
+ --strata="None"
+ #if $singlePaired.sPaired =="single":
+ --phased=$singlePaired.params.bestOption.phased
+ #else:
+ --phased="None"
+ #end if
+ #end if
+ #if $singlePaired.sPaired == "single":
+ --minInsert="None"
+ --maxInsert="None"
+ --mateOrient="None"
+ --maxAlignAttempt="None"
+ --forwardAlign="None"
+ --reverseAlign="None"
+ #else:
+ --minInsert=$singlePaired.params.minInsert
+ --maxInsert=$singlePaired.params.maxInsert
+ --mateOrient=$singlePaired.params.mateOrient
+ --maxAlignAttempt=$singlePaired.params.maxAlignAttempt
+ --forwardAlign=$singlePaired.params.forwardAlign
+ --reverseAlign=$singlePaired.params.reverseAlign
+ #end if
+ #else
+ --skip="None"
+ --alignLimit="None"
+ --trimH="None"
+ --trimL="None"
+ --mismatchSeed="None"
+ --mismatchQual="None"
+ --seedLen="None"
+ --rounding="None"
+ --maqSoapAlign="None"
+ --tryHard="None"
+ --valAlign="None"
+ --allValAligns="None"
+ --suppressAlign="None"
+ --offbase="None"
+ --best="None"
+ --maxBacktracks="None"
+ --threadMem="None"
+ --strata="None"
+ --minInsert="None"
+ --maxInsert="None"
+ --mateOrient="None"
+ --maxAlignAttempt="None"
+ --forwardAlign="None"
+ --reverseAlign="None"
+ --phased="None"
+ --offrate="None"
+ --mm="None"
+ --seed="None"
+ #end if
+ #if $refGenomeSource.genomeSource == "history":
+ --dbkey=$dbkey
+ #else:
+ --dbkey="None"
+ #end if
+ #if $refGenomeSource.genomeSource == "history":
+ --indexSettings=$refGenomeSource.indexParams.index_settings
+ #else:
+ --indexSettings="None"
+ #end if
+ #if $refGenomeSource.genomeSource == "history" and $refGenomeSource.indexParams.index_settings == "index_full":
+ --iauto_b=$refGenomeSource.indexParams.auto_behavior.auto_b
+ #if $refGenomeSource.indexParams.auto_behavior.auto_b == "set":
+ --ipacked=$refGenomeSource.indexParams.auto_behavior.packed
+ --ibmax=$refGenomeSource.indexParams.auto_behavior.bmax
+ --ibmaxdivn=$refGenomeSource.indexParams.auto_behavior.bmaxdivn
+ --idcv=$refGenomeSource.indexParams.auto_behavior.dcv
+ #else:
+ --ipacked="None"
+ --ibmax="None"
+ --ibmaxdivn="None"
+ --idcv="None"
+ #end if
+ --inodc=$refGenomeSource.indexParams.nodc
+ --inoref=$refGenomeSource.indexParams.noref
+ --ioffrate=$refGenomeSource.indexParams.offrate
+ --iftab=$refGenomeSource.indexParams.ftab
+ --intoa=$refGenomeSource.indexParams.ntoa
+ --iendian=$refGenomeSource.indexParams.endian
+ --iseed=$refGenomeSource.indexParams.seed
+ --icutoff=$refGenomeSource.indexParams.cutoff
+ --ioldpmap=$refGenomeSource.indexParams.oldpmap
+ #else:
+ --iauto_b="None"
+ --ipacked="None"
+ --ibmax="None"
+ --ibmaxdivn="None"
+ --idcv="None"
+ --inodc="None"
+ --inoref="None"
+ --ioffrate="None"
+ --iftab="None"
+ --intoa="None"
+ --iendian="None"
+ --iseed="None"
+ --icutoff="None"
+ --ioldpmap="None"
+ #end if
+ </command>
+ <inputs>
+ <conditional name="refGenomeSource">
+ <param name="genomeSource" type="select" label="Will you select a reference genome from your history or use a built-in index?" help="Built-ins were indexed using default options">
+ <option value="indexed">Use a built-in index</option>
+ <option value="history">Use one from the history</option>
+ </param>
+ <when value="indexed">
+ <param name="indices" type="select" label="Select a reference genome">
+ <options from_file="bowtie_indices.loc">
+ <column name="value" index="1" />
+ <column name="name" index="0" />
+ <filter type="sort_by" column="0" />
+ </options>
+ </param>
+ </when>
+ <when value="history">
+ <param name="ownFile" type="data" format="fasta" metadata_name="dbkey" label="Select a reference genome" />
+ <conditional name="indexParams">
+ <param name="index_settings" type="select" label="Choose whether to use default options or to set your own">
+ <option value="index_pre_set">Commonly Used</option>
+ <option value="index_full">Full Parameter List</option>
+ </param>
+ <when value="index_pre_set" />
+ <when value="index_full">
+ <conditional name="auto_behavior">
+ <param name="auto_b" type="select" label="Choose to use automatic or specified behavior for some parameters (-a)" help="Allows you to set --packed, --bmax, --bmaxdivn, and --dcv">
+ <option value="auto">Automatic behavior</option>
+ <option value="set">Set values (sets --noauto and allows others to be set)</option>
+ </param>
+ <when value="auto" />
+ <when value="set">
+ <param name="packed" type="select" label="Whether or not to use a packed representation for DNA strings (-p)">
+ <option value="unpacked">Use regular representation</option>
+ <option value="packed">Use packed representation</option>
+ </param>
+ <param name="bmax" type="integer" value="-1" label="Maximum number of suffixes allowed in a block (--bmax)" help="-1 for not specified. Must be at least 1" />
+ <param name="bmaxdivn" type="integer" value="4" label="Maximum number of suffixes allowed in a block as a fraction of the length of the reference (--bmaxdivn)" />
+ <param name="dcv" type="integer" value="1024" label="The period for the difference-cover sample (--dcv)" />
+ </when>
+ </conditional>
+ <param name="nodc" type="select" label="Whether or not to disable the use of the difference-cover sample (--nodc)" help="Suffix sorting becomes quadratic-time in the worst case (a very repetetive reference)">
+ <option value="dc">Use difference-cover sample</option>
+ <option value="nodc">Disable difference-cover sample</option>
+ </param>
+ <param name="noref" type="select" label="Whether or not to build the part of the reference index used only in paired-end alignment (-r)">
+ <option value="ref">Build all index files</option>
+ <option value="noref">Do not build paired-end alignment index files</option>
+ </param>
+ <param name="offrate" type="integer" value="5" label="How many rows get marked during annotation of some or all of the Burrows-Wheeler rows (-o)" />
+ <param name="ftab" type="integer" value="10" label="The size of the lookup table used to calculate an initial Burrows-Wheeler range with respect to the first n characters of the query (-t)" help="ftab is 4^(n+1) bytes" />
+ <param name="ntoa" type="select" label="Whether or not to convert Ns in the reference sequence to As (--ntoa)">
+ <option value="no">Do not convert Ns</option>
+ <option value="yes">Convert Ns to As</option>
+ </param>
+ <param name="endian" type="select" label="Endianness to use when serializing integers to the index file (--big/--little)" help="Little is most appropriate for Intel- and AMD-based architecture">
+ <option value="little">Little</option>
+ <option value="big">Big</option>
+ </param>
+ <param name="seed" type="integer" value="-1" label="Seed for the pseudorandom number generator (--seed)" help="Use -1 to use default" />
+ <param name="cutoff" type="integer" value="-1" label="Number of first bases of the reference sequence to index (--cutoff)" help="Use -1 to use default" />
+ <param name="oldpmap" type="select" label="Use the scheme for mapping joined reference locations to original reference locations used in versions of Bowtie prior to 0.9.8 (--oldpmap)" help="The old scheme uses padding and the new one doesn't">
+ <option value="no">Use the new scheme</option>
+ <option value="yes">Use the old scheme</option>
+ </param>
+ </when> <!-- index_full -->
+ </conditional>
+ </when>
+ </conditional> <!-- refGenomeSource -->
+ <conditional name="singlePaired">
+ <param name="sPaired" type="select" label="Is this library mate-paired?">
+ <option value="single">Single-end</option>
+ <option value="paired">Paired-end</option>
+ </param>
+ <when value="single">
+ <param name="input1" type="data" format="fastqsanger" label="FASTQ file" />
+ <conditional name="params">
+ <param name="settings_type" type="select" label="Bowtie settings to use" help="For most mapping needs use Commonly used settings. If you want full control use Full parameter list">
+ <option value="pre_set">Commonly used</option>
+ <option value="full">Full parameter list</option>
+ </param>
+ <when value="pre_set" />
+ <when value="full">
+ <param name="skip" type="integer" value="0" label="Skip the first n reads (-s)" />
+ <param name="alignLimit" type="integer" value="-1" label="Only align the first n reads (-u)" help="-1 for off" />
+ <param name="trimH" type="integer" value="0" label="Trim n bases from high-quality (left) end of each read before alignment (-5)" />
+ <param name="trimL" type="integer" value="0" label="Trim n bases from low-quality (right) end of each read before alignment (-3)" />
+ <param name="mismatchSeed" type="integer" value="2" label="Maximum number of mismatches permitted in the seed (-n)" help="May be 0, 1, 2, or 3" />
+ <param name="mismatchQual" type="integer" value="70" label="Maximum permitted total of quality values at mismatched read positions (-e)" />
+ <param name="seedLen" type="integer" value="28" label="Seed length (-l)" help="Minimum value is 5" />
+ <param name="rounding" type="select" label="Whether or not to round to the nearest 10 and saturating at 30 (--nomaqround)">
+ <option value="round">Round to nearest 10</option>
+ <option value="noRound">Do not round to nearest 10</option>
+ </param>
+ <param name="maqSoapAlign" type="integer" value="-1" label="Number of mismatches for SOAP-like alignment policy (-v)" help="-1 for default MAQ-like alignment policy" />
+ <param name="tryHard" type="select" label="Whether or not to try as hard as possible to find valid alignments when they exist (-y)" help="Tryhard mode is much slower than regular mode">
+ <option value="noTryHard">Do not try hard</option>
+ <option value="doTryHard">Try hard</option>
+ </param>
+ <param name="valAlign" type="integer" value="1" label="Report up to n valid arguments per read (-k)" />
+ <param name="allValAligns" type="select" label="Whether or not to report all valid alignments per read (-a)">
+ <option value="noAllValAligns">Do not report all valid alignments</option>
+ <option value="doAllValAligns">Report all valid alignments</option>
+ </param>
+ <param name="suppressAlign" type="integer" value="-1" label="Suppress all alignments for a read if more than n reportable alignments exist (-m)" help="-1 for no limit" />
+ <param name="offbase" type="integer" value="0" label="Number the first base of a reference sequence as n when outputting alignments (-B)" />
+ <conditional name="bestOption">
+ <param name="best" type="select" label="Whether or not to make Bowtie guarantee that reported singleton alignments are 'best' in terms of stratum and in terms of the quality values at the mismatched positions (--best)" help="Removes all strand bias. Only affects which alignments are reported by Bowtie. Runs slower with best option">
+ <option value="noBest">Do not use best</option>
+ <option value="doBest">Use best</option>
+ </param>
+ <when value="noBest">
+ <param name="maxBacktracks" type="integer" value="125" label="Maximum number of backtracks permitted when aligning a read (--maxbts)" />
+ <param name="phased" type="select" label="Whether or not it should alternate between using the forward and mirror indexes in a series of phases so that only half of the index is resident in memory at one time (-z)">
+ <option value="noPhased">Don't alternate</option>
+ <option value="doPhased">Do alternate</option>
+ </param>
+ </when>
+ <when value="doBest">
+ <param name="maxBacktracks" type="integer" value="800" label="Maximum number of backtracks permitted when aligning a read (--maxbts)" />
+ <param name="threadMem" type="integer" value="32" label="Number of megabytes of memory a given thread is given to store path descriptors in best mode (--chunkmbs)" help="If running in best mode, and you run out of memory, try adjusting this" />
+ <param name="strata" type="select" label="Whether or not to report only those alignments that fall in the best stratum if many valid alignments exist and are reportable (--strata)">
+ <option value="noStrata">Do not use strata option</option>
+ <option value="doStrata">Use strata option</option>
+ </param>
+ </when>
+ </conditional> <!-- bestOption -->
+ <param name="offrate" type="integer" value="-1" label="Override the offrate of the index to n (-o)" help="-1 for default" />
+ <param name="mm" type="select" label="Whether or not to use memory-mapped I/O to load the index (--m)">
+ <option value="noMm">Use POSIX/C file I/O</option>
+ <option value="doMm">Use memory-mapped I/O</option>
+ </param>
+ <param name="seed" type="integer" value="-1" label="Seed for pseudo-random number generator (--seed)" help="-1 for default" />
+ </when> <!-- full -->
+ </conditional> <!-- params -->
+ </when> <!-- single -->
+ <when value="paired">
+ <param name="input1" type="data" format="fastqsanger" label="Forward FASTQ file" />
+ <param name="input2" type="data" format="fastqsanger" label="Reverse FASTQ file" />
+ <conditional name="params">
+ <param name="settings_type" type="select" label="BWA settings to use" help="For most mapping needs use Commonly used settings. If you want full control use Full parameter list">
+ <option value="pre_set">Commonly used</option>
+ <option value="full">Full parameter list</option>
+ </param>
+ <when value="pre_set" />
+ <when value="full">
+ <param name="skip" type="integer" value="0" label="Skip the first n pairs (-s)" />
+ <param name="alignLimit" type="integer" value="-1" label="Only align the first n pairs (-u)" help="-1 for off" />
+ <param name="trimH" type="integer" value="0" label="Trim n bases from high-quality (left) end of each read before alignment (-5)" />
+ <param name="trimL" type="integer" value="0" label="Trim n bases from low-quality (right) end of each read before alignment (-3)" />
+ <param name="mismatchSeed" type="integer" value="2" label="Maximum number of mismatches permitted in the seed (-n)" help="May be 0, 1, 2, or 3" />
+ <param name="mismatchQual" type="integer" value="70" label="Maximum permitted total of quality values at mismatched read positions (-e)" />
+ <param name="seedLen" type="integer" value="28" label="Seed length (-l)" help="Minimum value is 5" />
+ <param name="rounding" type="select" label="Whether or not to round to the nearest 10 and saturating at 30 (--nomaqround)">
+ <option value="round">Round to nearest 10</option>
+ <option value="noRound">Do not round to nearest 10</option>
+ </param>
+ <param name="maqSoapAlign" type="integer" value="-1" label="Number of mismatches for SOAP-like alignment policy (-v)" help="-1 for default MAQ-like alignment policy" />
+ <param name="minInsert" type="integer" value="0" label="Minimum insert size for valid paired-end alignments (-I)" />
+ <param name="maxInsert" type="integer" value="250" label="Maximum insert size for valid paired-end alignments (-X)" />
+ <param name="mateOrient" type="select" label="The upstream/downstream mate orientation for valid paired-end alignment against the forward reference strand (--fr/--rf/--ff)">
+ <option value="fr">FR (for Illumina)</option>
+ <option value="rf">RF</option>
+ <option value="ff">FF</option>
+ </param>
+ <param name="maxAlignAttempt" type="integer" value="100" label="Maximum number of attempts Bowtie will make to match an alignment for one mate with an alignment for the opposite mate (--pairtries)" />
+ <param name="forwardAlign" type="select" label="Choose whether or not to attempt to align the forward reference strand (--nofw)">
+ <option value="forward">Align against the forward reference strand</option>
+ <option value="noForward">Do not align against the forward reference strand</option>
+ </param>
+ <param name="reverseAlign" type="select" label="Choose whether or not to align against the reverse-complement reference strand (--norc)">
+ <option value="reverse">Align against the reverse-complement reference strand</option>
+ <option value="noReverse">Do not align against the reverse-complement reference strand</option>
+ </param>
+ <param name="tryHard" type="select" label="Whether or not to try as hard as possible to find valid alignments when they exist (-y)" help="Tryhard mode is much slower than regular mode">
+ <option value="noTryHard">Do not try hard</option>
+ <option value="doTryHard">Try hard</option>
+ </param>
+ <param name="valAlign" type="integer" value="1" label="Report up to n valid arguments per pair (-k)" />
+ <param name="allValAligns" type="select" label="Whether or not to report all valid alignments per pair (-a)">
+ <option value="noAllValAligns">Do not report all valid alignments</option>
+ <option value="doAllValAligns">Report all valid alignments</option>
+ </param>
+ <param name="suppressAlign" type="integer" value="-1" label="Suppress all alignments for a pair if more than n reportable alignments exist (-m)" help="-1 for no limit" />
+ <param name="offbase" type="integer" value="0" label="Number the first base of a reference sequence as n when outputting alignments (-B)" />
+ <conditional name="bestOption">
+ <param name="best" type="select" label="Whether or not to make Bowtie guarantee that reported singleton alignments are 'best' in terms of stratum and in terms of the quality values at the mismatched positions (--best)" help="Removes all strand bias. Only affects which alignments are reported by Bowtie. Runs slower with best option">
+ <option value="noBest">Do not use best</option>
+ <option value="doBest">Use best</option>
+ </param>
+ <when value="noBest">
+ <param name="maxBacktracks" type="integer" value="125" label="Maximum number of backtracks permitted when aligning a read (--maxbts)" />
+ </when>
+ <when value="doBest">
+ <param name="maxBacktracks" type="integer" value="800" label="Maximum number of backtracks permitted when aligning a read (--maxbts)" />
+ <param name="threadMem" type="integer" value="32" label="Number of megabytes of memory a given thread is given to store path descriptors in best mode (--chunkmbs)" help="If running in best mode, and you run out of memory, try adjusting this" />
+ <param name="strata" type="select" label="Whether or not to report only those alignments that fall in the best stratum if many valid alignments exist and are reportable (--strata)">
+ <option value="noStrata">Do not use strata option</option>
+ <option value="doStrata">Use strata option</option>
+ </param>
+ </when>
+ </conditional>
+ <param name="offrate" type="integer" value="-1" label="Override the offrate of the index to n -o)" help="-1 for default" />
+ <param name="mm" type="select" label="Whether or not to use memory-mapped I/O to load the index (--mm)">
+ <option value="noMm">Use POSIX/C file I/O</option>
+ <option value="doMm">Use memory-mapped I/O</option>
+ </param>
+ <param name="seed" type="integer" value="-1" label="Seed for pseudo-random number generator (--seed)" help="-1 for default" />
+ </when> <!-- full -->
+ </conditional> <!-- params -->
+ </when> <!-- paired -->
+ </conditional> <!-- singlePaired -->
+ </inputs>
+ <outputs>
+ <data format="sam" name="output" />
+ </outputs>
+ <tests>
+ <test>
+ <param name="genomeSource" value="indexed" />
+ <param name="indices" value="chrM" />
+ <param name="sPaired" value="single" />
+ <param name="input1" ftype="fastqsanger" value="bowtie_in1.fastq" />
+ <param name="settings_type" value="pre_set" />
+ <output name="output" ftype="sam" file="bowtie_out1.sam" />
+ </test>
+ <test>
+ <param name="genomeSource" value="history" />
+ <param name="ownFile" value="chrM.fa" />
+ <param name="index_settings" value="index_pre_set" />
+ <param name="sPaired" value="paired" />
+ <param name="input1" ftype="fastqsanger" value="bowtie_in2.fastq" />
+ <param name="input2" ftype="fastqsanger" value="bowtie_in3.fastq" />
+ <param name="settings_type" value="pre_set" />
+ <output name="output" ftype="sam" file="bowtie_out2.sam" />
+ </test>
+ <test>
+ <param name="genomeSource" value="history" />
+ <param name="ownFile" value="chrM.fa" />
+ <param name="index_settings" value="index_full" />
+ <param name="auto_b" value="set" />
+ <param name="packed" value="unpacked" />
+ <param name="bmax" value="-1" />
+ <param name="bmaxdivn" value="4" />
+ <param name="dcv" value="2048" />
+ <param name="nodc" value="dc" />
+ <param name="noref" value="noref" />
+ <param name="offrate" value="6" />
+ <param name="ftab" value="10" />
+ <param name="ntoa" value="yes" />
+ <param name="endian" value="little" />
+ <param name="seed" value="-1" />
+ <param name="cutoff" value="-1" />
+ <param name="oldpmap" value="no" />
+ <param name="sPaired" value="single" />
+ <param name="input1" ftype="fastqsanger" value="bowtie_in1.fastq" />
+ <param name="settings_type" value="pre_set" />
+ <output name="output" ftype="sam" file="bowtie_out1.sam" />
+ </test>
+ <test>
+ <param name="genomeSource" value="indexed" />
+ <param name="indices" value="chrM" />
+ <param name="sPaired" value="paired" />
+ <param name="input1" ftype="fastqsanger" value="bowtie_in2.fastq" />
+ <param name="input2" ftype="fastqsanger" value="bowtie_in3.fastq" />
+ <param name="settings_type" value="full" />
+ <param name="skip" value="0" />
+ <param name="alignLimit" value="-1" />
+ <param name="trimL" value="0" />
+ <param name="trimH" value="0" />
+ <param name="mismatchSeed" value="3" />
+ <param name="mismatchQual" value="50" />
+ <param name="seedLen" value="10" />
+ <param name="rounding" value="round" />
+ <param name="maqSoapAlign" value="-1" />
+ <param name="minInsert" value="0" />
+ <param name="maxInsert" value="250" />
+ <param name="mateOrient" value="fr" />
+ <param name="maxAlignAttempt" value="100" />
+ <param name="forwardAlign" value="forward" />
+ <param name="reverseAlign" value="reverse" />
+ <param name="tryHard" value="doTryHard" />
+ <param name="valAlign" value="1" />
+ <param name="allValAligns" value="noAllValAligns" />
+ <param name="suppressAlign" value="-1" />
+ <param name="offbase" value="0" />
+ <param name="best" value="doBest" />
+ <param name="maxBacktracks" value="800" />
+ <param name="threadMem" value="32" />
+ <param name="strata" value="noStrata" />
+ <param name="offrate" value="-1" />
+ <param name="mm" value="noMm" />
+ <param name="seed" value="403" />
+ <output name="output" ftype="sam" file="bowtie_out2.sam" />
+ </test>
+ </tests>
+ <help>
+
+**What it does**
+
+Bowtie_ is a short read aligner designed to be ultrafast and memory-efficient. Reads can be as long as 1024 base pairs, though shorter is better. Bowtie produces a specific output format which is converted to SAM by this tool.
+
+.. _Bowtie: http://bowtie-bio.sourceforge.net/index.shtml
+
+------
+
+**Input formats**
+
+Bowtie accepts files in Sanger FASTQ format.
+
+------
+
+**Outputs**
+
+The output is in SAM format, and has the following columns::
+
+ 1 QNAME - Query (pair) NAME
+ 2 FLAG - bitwise FLAG
+ 3 RNAME - Reference sequence NAME
+ 4 POS - 1-based leftmost POSition/coordinate of clipped sequence
+ 5 MAPQ - MAPping Quality (Phred-scaled)
+ 6 CIGAR - extended CIGAR string
+ 7 MRNM - Mate Reference sequence NaMe ('=' if same as RNAME)
+ 8 MPOS - 1-based Mate POSition
+ 9 ISIZE - Inferred insert SIZE
+ 10 SEQ - query SEQuence on the same strand as the reference
+ 11 QUAL - query QUALity (ASCII-33 gives the Phred base quality)
+ 12 OPT - variable OPTional fields in the format TAG:VTYPE:VALU
+
+The flags are as follows::
+
+ Flag - Description
+ 0x0001 - the read is paired in sequencing
+ 0x0002 - the read is mapped in a proper pair
+ 0x0004 - the query sequence itself is unmapped
+ 0x0008 - the mate is unmapped
+ 0x0010 - strand of the query (1 for reverse)
+ 0x0020 - strand of the mate
+ 0x0040 - the read is the first read in a pair
+ 0x0080 - the read is the second read in a pair
+ 0x0100 - the alignment is not primary
+
+It looks like this (scroll sideways to see the entire example)::
+
+ QNAME FLAG RNAME POS MAPQ CIAGR MRNM MPOS ISIZE SEQ QUAL OPT
+ HWI-EAS91_1_30788AAXX:1:1:1761:343 4 * 0 0 * * 0 0 AAAAAAANNAAAAAAAAAAAAAAAAAAAAAAAAAAACNNANNGAGTNGNNNNNNNGCTTCCCACAGNNCTGG hhhhhhh;;hhhhhhhhhhh^hOhhhhghhhfhhhgh;;h;;hhhh;h;;;;;;;hhhhhhghhhh;;Phhh
+ HWI-EAS91_1_30788AAXX:1:1:1578:331 4 * 0 0 * * 0 0 GTATAGANNAATAAGAAAAAAAAAAATGAAGACTTTCNNANNTCTGNANNNNNNNTCTTTTTTCAGNNGTAG hhhhhhh;;hhhhhhhhhhhhhhhhhhhhhhhhhhhh;;h;;hhhh;h;;;;;;;hhhhhhhhhhh;;hhVh
+
+-------
+
+**Bowtie settings**
+
+All of the options have a default value. You can change any of them. Most of the options in Bowtie have been implemented here.
+
+------
+
+**Bowtie parameter list**
+
+This is an exhaustive list of Bowtie options:
+
+For indexing (bowtie-build)::
+ -a No auto behavior. Disable the default behavior where bowtie automatically selects values for --bmax/--dcv/--packed parameters according to the memory available. [off]
+ -p Packing. Use a packed representation for DNA strings. [auto]
+ --bmax <int> Suffix maximum. The maximum number of suffixes allowed in a block. [auto]
+ --bmaxdivn <int> Suffix maximum fraction. The maximum number of suffixes allowed in a block expressed as a fraction of the length of the reference. [4]
+ --dcv <int> Difference-cover sample. Use <int> as the period for the difference-cover sample. [1024]
+ --nodc <int> No difference-cover sample. Disable the difference-cover sample. [off]
+ -r No reference indexes. Do not build the NAME.3.ebwt and NAME.4.ebwt portions of the index, used only for paired-end alignment. [off]
+ -o Offrate. How many Burrows-Wheeler rows get marked by the indexer. The indexer will mark every 2^<int> rows. The marked rows correspond to rows on the genome. [5]
+ -t <int> Ftab. The lookup table used to calculate an initial Burrows-Wheeler range with respect to the first <int> characters of the query. Ftab is 4^<int>+1 bytes. [10]
+ --ntoa N conversion. Convert Ns to As before building the index. Otherwise, Ns are simply excluded from the index and Bowtie will not find alignments that overlap them. [off]
+ --big Endianness. Endianness to use when serializing integers to the index file. [off]
+ --little Endianness. [--little]
+ --seed <int> Random seed. Use <int> as the seed for the pseudo-random number generator. [off]
+ --cutoff <int> Cutoff. Index only the first <int> bases of the reference sequences (cumulative across sequences) and ignore the rest. [off]
+ --oldpmap Use old mapping scheme. Use the padding-based scheme from Bowtie versions before 0.9.8 instead of the current scheme. [off]
+
+For aligning (bowtie)::
+ -s <int> Skip. Do not align the first <int> reads or pairs in the input. [off]
+ -u <int> Align limit. Only align the first <int> reads/pairs from the input. [no limit]
+ -5 <int> High-quality trim. Trim <int> bases from the high-quality (left) end of each read before alignment. [0]
+ -3 <int> Low-quality trim. Trim <int> bases from the low-quality (right) end of each read before alignment. [0]
+ -n <int> Mismatch seed. Maximum number of mismatches permitted in the seed (defined with seed length option). Can be 0, 1, 2, or 3. [2]
+ -e <int> Mismatch quality. Maximum permitted total of quality values at mismatched read positions. Bowtie rounds quality values to the nearest 10 and saturates at 30. [70]
+ -l <int> Seed length. The number of bases on the high-quality end of the read to which the -n ceiling applies. Must be at least 5. [28]
+ --nomaqround Suppress MAQ rounding. Values are internally rounded to the nearest 10 and saturate at 30. This options turns off that rounding. [off]
+ -v <int> MAQ- or SOAP-like alignment policy. This option turns off the default MAQ-like alignment policy in favor of a SOAP-like one. End-to-end alignments with at most <int> mismatches. [off]
+ -I <int> Minimum insert. The minimum insert size for valid paired-end alignments. Does checking on untrimmed reads if -5 or -3 is used. [0]
+ --fr Mate orientation. The upstream/downstream mate orientations for a valid paired-end alignment against the forward reference strand. [--fr]
+ --rf Mate orientation. [off]
+ --ff Mate orientation. [off]
+ -X <int> Maximum insert. The maximum insert size for valid paired-end alignments. Does checking on untrimmed reads if -5 or -3 is used. [250]
+ --pairtries <int> Maximum alignment attempts for paired-end data. [100]
+ --nofw No forward aligning. Choosing this option means that Bowtie will not attempt to align against the forward reference strand. [off]
+ --norc No reverse-complement aligning. Setting this will mean that Bowtie will not attempt to align against the reverse-complement reference strand. [off]
+ --maxbts <int> Maximum backtracks. The maximum number of backtracks permitted when aligning a read in -n 2 or -n 3 mode. [125 without --best] [800 with --best]
+ -y Try hard. Try as hard as possible to find valid alignments when they exist, including paired-end alignments. [off]
+ --chunkmbs <int> Thread memory. The number of megabytes of memory a given thread is given to store path descriptors in --best mode. [32]
+ -k <int> Valid alignments. The number of valid alignments per read or pair. [off]
+ -a All valid alignments. Choosing this means that all valid alignments per read or pair will be reported. [off]
+ -m <int> Suppress alignments. Suppress all alignments for a particular read or pair if more than <int> reportable alignments exist for it. [no limit]
+ --best Best mode. Make Bowtie guarantee that reported singleton alignments are "best" in terms of stratum (the number of mismatches) and quality values at mismatched position. [off]
+ --strata Best strata. When running in best mode, report alignments that fall into the best stratum if there are ones falling into more than one. [off]
+ -B <int> First base number. When outputting alignments, number the first base of a reference sequence as <int>. [0]
+ -z <int> Phased. Alternate between using the forward and mirror indexes in a series of phases such that only one half of the index is resident in memory at one time. Cannot be used with paired-end alignment. [off]
+ -o <int> Offrate override. Override the offrate of the index with <int>. Some row markings are discarded when index read into memory. <int> must be greater than the value used to build the index (default: 5). [off]
+ --mm I/O for index loading. Choosing this option means that memory-mapped I/O will be used to load the index instead of the normal POSIX/C file I/O. Allows memory-efficient parallelization where using -p is not desirable. [off]
+ --seed <int> Random seed. Use <int> as the seed for the pseudo-random number generator. [off]
+
+ </help>
+</tool>
1
0
14 Sep '09
details: http://www.bx.psu.edu/hg/galaxy/rev/d301a67eda40
changeset: 2686:d301a67eda40
user: Greg Von Kuster <greg(a)bx.psu.edu>
date: Mon Sep 14 11:05:36 2009 -0400
description:
Move the data library admin methods to a separate library_admin controller.
23 file(s) affected in this change:
lib/galaxy/web/controllers/admin.py
lib/galaxy/web/controllers/library_admin.py
templates/admin/index.mako
templates/admin/library/browse_libraries.mako
templates/admin/library/browse_library.mako
templates/admin/library/common.mako
templates/admin/library/folder_info.mako
templates/admin/library/folder_permissions.mako
templates/admin/library/ldda_edit_info.mako
templates/admin/library/ldda_info.mako
templates/admin/library/ldda_permissions.mako
templates/admin/library/library_dataset_info.mako
templates/admin/library/library_dataset_permissions.mako
templates/admin/library/library_info.mako
templates/admin/library/library_permissions.mako
templates/admin/library/new_dataset.mako
templates/admin/library/new_folder.mako
templates/admin/library/new_library.mako
templates/admin/library/select_info_template.mako
templates/admin/requests/show_request.mako
test/base/twilltestcase.py
test/functional/test_forms_and_requests.py
test/functional/test_security_and_libraries.py
diffs (truncated from 3482 to 3000 lines):
diff -r f2af04af3caa -r d301a67eda40 lib/galaxy/web/controllers/admin.py
--- a/lib/galaxy/web/controllers/admin.py Fri Sep 11 16:09:02 2009 -0400
+++ b/lib/galaxy/web/controllers/admin.py Mon Sep 14 11:05:36 2009 -0400
@@ -1,15 +1,9 @@
-import shutil, StringIO, operator, urllib, gzip, tempfile, string, sys
+import string, sys
from datetime import datetime, timedelta
from galaxy import util, datatypes
from galaxy.web.base.controller import *
from galaxy.model.orm import *
from galaxy.web.controllers.forms import get_all_forms, get_form_widgets
-# Older py compatibility
-try:
- set()
-except:
- from sets import Set as set
-
import logging
log = logging.getLogger( __name__ )
@@ -673,1188 +667,6 @@
out_groups=out_groups,
msg=msg,
messagetype=messagetype )
-
- # Galaxy Library Stuff
- @web.expose
- @web.require_admin
- def browse_libraries( self, trans, **kwd ):
- params = util.Params( kwd )
- msg = util.restore_text( params.get( 'msg', '' ) )
- messagetype = params.get( 'messagetype', 'done' )
- return trans.fill_template( '/admin/library/browse_libraries.mako',
- libraries=trans.app.model.Library.filter( trans.app.model.Library.table.c.deleted==False ) \
- .order_by( trans.app.model.Library.name ).all(),
- deleted=False,
- show_deleted=False,
- msg=msg,
- messagetype=messagetype )
- @web.expose
- @web.require_admin
- def browse_library( self, trans, **kwd ):
- params = util.Params( kwd )
- msg = util.restore_text( params.get( 'msg', '' ) )
- messagetype = params.get( 'messagetype', 'done' )
- id = params.get( 'id', None )
- deleted = util.string_as_bool( params.get( 'deleted', False ) )
- show_deleted = util.string_as_bool( params.get( 'show_deleted', False ) )
- if not id:
- msg = "You must specify a library id."
- return trans.response.send_redirect( web.url_for( controller='admin',
- action='browse_libraries',
- msg=util.sanitize_text( msg ),
- messagetype='error' ) )
- library = library=trans.app.model.Library.get( id )
- if not library:
- msg = "Invalid library id ( %s )."
- return trans.response.send_redirect( web.url_for( controller='admin',
- action='browse_libraries',
- msg=util.sanitize_text( msg ),
- messagetype='error' ) )
- created_ldda_ids = params.get( 'created_ldda_ids', '' )
- return trans.fill_template( '/admin/library/browse_library.mako',
- library=trans.app.model.Library.get( id ),
- deleted=deleted,
- created_ldda_ids=created_ldda_ids,
- forms=get_all_forms( trans, filter=dict(deleted=False) ),
- msg=msg,
- messagetype=messagetype,
- show_deleted=show_deleted )
- @web.expose
- @web.require_admin
- def library( self, trans, id=None, **kwd ):
- params = util.Params( kwd )
- msg = util.restore_text( params.get( 'msg', '' ) )
- messagetype = params.get( 'messagetype', 'done' )
- if params.get( 'new', False ):
- action = 'new'
- elif params.get( 'delete', False ):
- action = 'delete'
- elif params.get( 'permissions', False ):
- action = 'permissions'
- else:
- action = 'information'
- if not id and not action == 'new':
- msg = "You must specify a library to %s." % action
- return trans.response.send_redirect( web.url_for( controller='admin',
- action='browse_libraries',
- msg=util.sanitize_text( msg ),
- messagetype='error' ) )
- if not action == 'new':
- library = trans.app.model.Library.get( int( id ) )
- if action == 'new':
- if params.new == 'submitted':
- library = trans.app.model.Library( name = util.restore_text( params.name ),
- description = util.restore_text( params.description ) )
- root_folder = trans.app.model.LibraryFolder( name = util.restore_text( params.name ), description = "" )
- root_folder.flush()
- library.root_folder = root_folder
- library.flush()
- msg = "The new library named '%s' has been created" % library.name
- return trans.response.send_redirect( web.url_for( controller='admin',
- action='browse_library',
- id=library.id,
- msg=util.sanitize_text( msg ),
- messagetype='done' ) )
- return trans.fill_template( '/admin/library/new_library.mako', msg=msg, messagetype=messagetype )
- elif action == 'information':
- # See if we have any associated templates
- info_association = library.get_info_association()
- if info_association:
- template = info_association.template
- # See if we have any field contents
- info = info_association.info
- if info:
- widgets = get_form_widgets( trans, template, info.content )
- else:
- widgets = get_form_widgets( trans, template )
- else:
- widgets = []
- if params.get( 'rename_library_button', False ):
- old_name = library.name
- new_name = util.restore_text( params.name )
- new_description = util.restore_text( params.description )
- if not new_name:
- msg = 'Enter a valid name'
- return trans.fill_template( '/admin/library/library_info.mako',
- library=library,
- widgets=widgets,
- msg=msg,
- messagetype='error' )
- else:
- library.name = new_name
- library.description = new_description
- library.flush()
- # Rename the root_folder
- library.root_folder.name = new_name
- library.root_folder.description = new_description
- library.root_folder.flush()
- msg = "Library '%s' has been renamed to '%s'" % ( old_name, new_name )
- return trans.response.send_redirect( web.url_for( controller='admin',
- action='library',
- id=id,
- edit_info=True,
- msg=util.sanitize_text( msg ),
- messagetype='done' ) )
- return trans.fill_template( '/admin/library/library_info.mako',
- library=library,
- widgets=widgets,
- msg=msg,
- messagetype=messagetype )
- elif action == 'delete':
- def delete_folder( library_folder ):
- library_folder.refresh()
- for folder in library_folder.folders:
- delete_folder( folder )
- for library_dataset in library_folder.datasets:
- library_dataset.refresh()
- ldda = library_dataset.library_dataset_dataset_association
- if ldda:
- ldda.refresh()
- # We don't set ldda.dataset.deleted to True here because the cleanup_dataset script
- # will eventually remove it from disk. The purge_library method below sets the dataset
- # to deleted. This allows for the library to be undeleted ( before it is purged ),
- # restoring all of its contents.
- ldda.deleted = True
- ldda.flush()
- library_dataset.deleted = True
- library_dataset.flush()
- library_folder.deleted = True
- library_folder.flush()
- library.refresh()
- delete_folder( library.root_folder )
- library.deleted = True
- library.flush()
- msg = "Library '%s' and all of its contents have been marked deleted" % library.name
- return trans.response.send_redirect( web.url_for( action='browse_libraries', msg=util.sanitize_text( msg ), messagetype='done' ) )
- elif action == 'permissions':
- if params.get( 'update_roles_button', False ):
- # The user clicked the Save button on the 'Associate With Roles' form
- permissions = {}
- for k, v in trans.app.model.Library.permitted_actions.items():
- in_roles = [ trans.app.model.Role.get( x ) for x in util.listify( kwd.get( k + '_in', [] ) ) ]
- permissions[ trans.app.security_agent.get_action( v.action ) ] = in_roles
- trans.app.security_agent.set_all_library_permissions( library, permissions )
- library.refresh()
- # Copy the permissions to the root folder
- trans.app.security_agent.copy_library_permissions( library, library.root_folder )
- msg = "Permissions updated for library '%s'" % library.name
- return trans.response.send_redirect( web.url_for( controller='admin',
- action='library',
- id=id,
- permissions=True,
- msg=util.sanitize_text( msg ),
- messagetype='done' ) )
- return trans.fill_template( '/admin/library/library_permissions.mako',
- library=library,
- msg=msg,
- messagetype=messagetype )
- @web.expose
- @web.require_admin
- def deleted_libraries( self, trans, **kwd ):
- params = util.Params( kwd )
- msg = util.restore_text( params.get( 'msg', '' ) )
- messagetype = params.get( 'messagetype', 'done' )
- libraries=trans.app.model.Library.filter( and_( trans.app.model.Library.table.c.deleted==True,
- trans.app.model.Library.table.c.purged==False ) ) \
- .order_by( trans.app.model.Library.table.c.name ).all()
- return trans.fill_template( '/admin/library/browse_libraries.mako',
- libraries=libraries,
- deleted=True,
- msg=msg,
- messagetype=messagetype,
- show_deleted=True )
- @web.expose
- @web.require_admin
- def purge_library( self, trans, **kwd ):
- params = util.Params( kwd )
- library = trans.app.model.Library.get( int( params.id ) )
- def purge_folder( library_folder ):
- for lf in library_folder.folders:
- purge_folder( lf )
- library_folder.refresh()
- for library_dataset in library_folder.datasets:
- library_dataset.refresh()
- ldda = library_dataset.library_dataset_dataset_association
- if ldda:
- ldda.refresh()
- dataset = ldda.dataset
- dataset.refresh()
- # If the dataset is not associated with any additional undeleted folders, then we can delete it.
- # We don't set dataset.purged to True here because the cleanup_datasets script will do that for
- # us, as well as removing the file from disk.
- #if not dataset.deleted and len( dataset.active_library_associations ) <= 1: # This is our current ldda
- dataset.deleted = True
- dataset.flush()
- ldda.deleted = True
- ldda.flush()
- library_dataset.deleted = True
- library_dataset.flush()
- library_folder.deleted = True
- library_folder.purged = True
- library_folder.flush()
- if not library.deleted:
- msg = "Library '%s' has not been marked deleted, so it cannot be purged" % ( library.name )
- return trans.response.send_redirect( web.url_for( controller='admin',
- action='browse_libraries',
- msg=util.sanitize_text( msg ),
- messagetype='error' ) )
- else:
- purge_folder( library.root_folder )
- library.purged = True
- library.flush()
- msg = "Library '%s' and all of its contents have been purged, datasets will be removed from disk via the cleanup_datasets script" % library.name
- return trans.response.send_redirect( web.url_for( controller='admin',
- action='deleted_libraries',
- msg=util.sanitize_text( msg ),
- messagetype='done' ) )
- @web.expose
- @web.require_admin
- def folder( self, trans, id, library_id, **kwd ):
- params = util.Params( kwd )
- msg = util.restore_text( params.get( 'msg', '' ) )
- messagetype = params.get( 'messagetype', 'done' )
- if params.get( 'new', False ):
- action = 'new'
- elif params.get( 'delete', False ):
- action = 'delete'
- elif params.get( 'permissions', False ):
- action = 'permissions'
- else:
- # 'information' will be the default
- action = 'information'
- folder = trans.app.model.LibraryFolder.get( int( id ) )
- if not folder:
- msg = "Invalid folder specified, id: %s" % str( id )
- return trans.response.send_redirect( web.url_for( controller='admin',
- action='browse_library',
- id=library_id,
- msg=util.sanitize_text( msg ),
- messagetype='error' ) )
- if action == 'new':
- if params.new == 'submitted':
- new_folder = trans.app.model.LibraryFolder( name=util.restore_text( params.name ),
- description=util.restore_text( params.description ) )
- # We are associating the last used genome build with folders, so we will always
- # initialize a new folder with the first dbkey in util.dbnames which is currently
- # ? unspecified (?)
- new_folder.genome_build = util.dbnames.default_value
- folder.add_folder( new_folder )
- new_folder.flush()
- # New folders default to having the same permissions as their parent folder
- trans.app.security_agent.copy_library_permissions( folder, new_folder )
- msg = "New folder named '%s' has been added to the library" % new_folder.name
- return trans.response.send_redirect( web.url_for( controller='admin',
- action='browse_library',
- id=library_id,
- msg=util.sanitize_text( msg ),
- messagetype='done' ) )
- return trans.fill_template( '/admin/library/new_folder.mako',
- library_id=library_id,
- folder=folder,
- msg=msg,
- messagetype=messagetype )
- elif action == 'information':
- # See if we have any associated templates
- info_association = folder.get_info_association()
- if info_association:
- template = info_association.template
- # See if we have any field contents
- info = info_association.info
- if info:
- widgets = get_form_widgets( trans, template, info.content )
- else:
- widgets = get_form_widgets( trans, template )
- else:
- widgets = []
- if params.get( 'rename_folder_button', False ):
- old_name = folder.name
- new_name = util.restore_text( params.name )
- new_description = util.restore_text( params.description )
- if not new_name:
- msg = 'Enter a valid name'
- return trans.fill_template( '/admin/library/folder_info.mako',
- folder=folder,
- library_id=library_id,
- widgets=widgets,
- msg=msg,
- messagetype='error' )
- else:
- folder.name = new_name
- folder.description = new_description
- folder.flush()
- msg = "Folder '%s' has been renamed to '%s'" % ( old_name, new_name )
- return trans.response.send_redirect( web.url_for( controller='admin',
- action='folder',
- id=id,
- library_id=library_id,
- edit_info=True,
- msg=util.sanitize_text( msg ),
- messagetype='done' ) )
- return trans.fill_template( '/admin/library/folder_info.mako',
- folder=folder,
- library_id=library_id,
- widgets=widgets,
- msg=msg,
- messagetype=messagetype )
- elif action == 'delete':
- folder.deleted = True
- folder.flush()
- msg = "Folder '%s' and all of its contents have been marked deleted" % folder.name
- return trans.response.send_redirect( web.url_for( action='browse_library',
- id=library_id,
- msg=util.sanitize_text( msg ),
- messagetype='done' ) )
- elif action =='permissions':
- if params.get( 'update_roles_button', False ):
- # The user clicked the Save button on the 'Associate With Roles' form
- permissions = {}
- for k, v in trans.app.model.Library.permitted_actions.items():
- in_roles = [ trans.app.model.Role.get( int( x ) ) for x in util.listify( params.get( k + '_in', [] ) ) ]
- permissions[ trans.app.security_agent.get_action( v.action ) ] = in_roles
- trans.app.security_agent.set_all_library_permissions( folder, permissions )
- folder.refresh()
- msg = "Permissions updated for folder '%s'" % folder.name
- return trans.response.send_redirect( web.url_for( controller='admin',
- action='folder',
- id=id,
- library_id=library_id,
- permissions=True,
- msg=util.sanitize_text( msg ),
- messagetype='done' ) )
- return trans.fill_template( '/admin/library/folder_permissions.mako',
- folder=folder,
- library_id=library_id,
- msg=msg,
- messagetype=messagetype )
- @web.expose
- @web.require_admin
- def library_dataset( self, trans, id, library_id, **kwd ):
- params = util.Params( kwd )
- msg = util.restore_text( params.get( 'msg', '' ) )
- messagetype = params.get( 'messagetype', 'done' )
- if params.get( 'permissions', False ):
- action = 'permissions'
- else:
- action = 'information'
- library_dataset = trans.app.model.LibraryDataset.get( id )
- if not library_dataset:
- msg = "Invalid library dataset specified, id: %s" %str( id )
- return trans.response.send_redirect( web.url_for( controller='admin',
- action='browse_library',
- id=library_id,
- msg=util.sanitize_text( msg ),
- messagetype='error' ) )
- if action == 'information':
- if params.get( 'edit_attributes_button', False ):
- old_name = library_dataset.name
- new_name = util.restore_text( params.get( 'name', '' ) )
- new_info = util.restore_text( params.get( 'info', '' ) )
- if not new_name:
- msg = 'Enter a valid name'
- messagetype = 'error'
- else:
- library_dataset.name = new_name
- library_dataset.info = new_info
- library_dataset.flush()
- msg = "Dataset '%s' has been renamed to '%s'" % ( old_name, new_name )
- messagetype = 'done'
- return trans.fill_template( '/admin/library/library_dataset_info.mako',
- library_dataset=library_dataset,
- library_id=library_id,
- msg=msg,
- messagetype=messagetype )
- elif action == 'permissions':
- if params.get( 'update_roles_button', False ):
- # The user clicked the Save button on the 'Edit permissions and role associations' form
- permissions = {}
- for k, v in trans.app.model.Library.permitted_actions.items():
- in_roles = [ trans.app.model.Role.get( x ) for x in util.listify( kwd.get( k + '_in', [] ) ) ]
- permissions[ trans.app.security_agent.get_action( v.action ) ] = in_roles
- # Set the LIBRARY permissions on the LibraryDataset
- # NOTE: the LibraryDataset and LibraryDatasetDatasetAssociation will be set with the same permissions
- trans.app.security_agent.set_all_library_permissions( library_dataset, permissions )
- library_dataset.refresh()
- # Set the LIBRARY permissions on the LibraryDatasetDatasetAssociation
- trans.app.security_agent.set_all_library_permissions( library_dataset.library_dataset_dataset_association, permissions )
- library_dataset.library_dataset_dataset_association.refresh()
- msg = 'Permissions and roles have been updated for library dataset %s' % library_dataset.name
- return trans.fill_template( '/admin/library/library_dataset_permissions.mako',
- library_dataset=library_dataset,
- library_id=library_id,
- msg=msg,
- messagetype=messagetype )
- @web.expose
- @web.require_admin
- def library_dataset_dataset_association( self, trans, library_id, folder_id, id=None, **kwd ):
- params = util.Params( kwd )
- msg = util.restore_text( params.get( 'msg', '' ) )
- messagetype = params.get( 'messagetype', 'done' )
- deleted = util.string_as_bool( params.get( 'deleted', False ) )
- show_deleted = util.string_as_bool( params.get( 'show_deleted', False ) )
- dbkey = params.get( 'dbkey', None )
- if isinstance( dbkey, list ):
- last_used_build = dbkey[0]
- else:
- last_used_build = dbkey
- folder = trans.app.model.LibraryFolder.get( folder_id )
- if folder and last_used_build in [ 'None', None, '?' ]:
- last_used_build = folder.genome_build
- replace_id = params.get( 'replace_id', None )
- if replace_id:
- replace_dataset = trans.app.model.LibraryDataset.get( int( replace_id ) )
- if not last_used_build:
- last_used_build = replace_dataset.library_dataset_dataset_association.dbkey
- else:
- replace_dataset = None
- # Let's not overwrite the imported datatypes module with the variable datatypes?
- # The built-in 'id' is overwritten in lots of places as well
- ldatatypes = [ dtype_name for dtype_name, dtype_value in trans.app.datatypes_registry.datatypes_by_extension.iteritems() if dtype_value.allow_datatype_change ]
- ldatatypes.sort()
- if params.get( 'new_dataset_button', False ):
- upload_option = params.get( 'upload_option', 'upload_file' )
- created_ldda_ids = trans.webapp.controllers[ 'library_dataset' ].upload_dataset( trans,
- controller='admin',
- library_id=library_id,
- folder_id=folder_id,
- replace_dataset=replace_dataset,
- **kwd )
- if created_ldda_ids:
- total_added = len( created_ldda_ids.split( ',' ) )
- if replace_dataset:
- msg = "Added %d dataset versions to the library dataset '%s' in the folder '%s'." % ( total_added, replace_dataset.name, folder.name )
- else:
- if not folder.parent:
- # Libraries have the same name as their root_folder
- msg = "Added %d datasets to the library '%s' ( each is selected ). " % ( total_added, folder.name )
- else:
- msg = "Added %d datasets to the folder '%s' ( each is selected ). " % ( total_added, folder.name )
- msg += "Click the Go button at the bottom of this page to edit the permissions on these datasets if necessary."
- messagetype='done'
- else:
- msg = "Upload failed"
- messagetype='error'
- trans.response.send_redirect( web.url_for( controller='admin',
- action='browse_library',
- id=library_id,
- created_ldda_ids=created_ldda_ids,
- msg=util.sanitize_text( msg ),
- messagetype=messagetype ) )
- elif not id or replace_dataset:
- # See if we have any associated templates
- info_association = folder.get_info_association()
- if info_association:
- template = info_association.template
- widgets = get_form_widgets( trans, template )
- else:
- widgets = []
- upload_option = params.get( 'upload_option', 'upload_file' )
- # No dataset(s) specified, so display the upload form. Send list of data formats to the form
- # so the "extension" select list can be populated dynamically
- file_formats = trans.app.datatypes_registry.upload_file_formats
- # Send list of genome builds to the form so the "dbkey" select list can be populated dynamically
- def get_dbkey_options( last_used_build ):
- for dbkey, build_name in util.dbnames:
- yield build_name, dbkey, ( dbkey==last_used_build )
- dbkeys = get_dbkey_options( last_used_build )
- # Send list of roles to the form so the dataset can be associated with 1 or more of them.
- roles = trans.app.model.Role.filter( trans.app.model.Role.table.c.deleted==False ).order_by( trans.app.model.Role.c.name ).all()
- # Send the current history to the form to enable importing datasets from history to library
- history = trans.get_history()
- history.refresh()
- return trans.fill_template( '/admin/library/new_dataset.mako',
- upload_option=upload_option,
- library_id=library_id,
- folder_id=folder_id,
- replace_id=replace_id,
- file_formats=file_formats,
- dbkeys=dbkeys,
- last_used_build=last_used_build,
- roles=roles,
- history=history,
- widgets=widgets,
- msg=msg,
- messagetype=messagetype,
- replace_dataset=replace_dataset )
- else:
- if params.get( 'permissions', False ):
- action = 'permissions'
- elif params.get( 'edit_info', False ):
- action = 'edit_info'
- else:
- action = 'info'
- if id.count( ',' ):
- ids = id.split( ',' )
- id = None
- else:
- ids = None
- if id:
- # ldda_id specified, display attributes form
- ldda = trans.app.model.LibraryDatasetDatasetAssociation.get( id )
- if not ldda:
- msg = "Invalid LibraryDatasetDatasetAssociation specified, id: %s" % str( id )
- return trans.response.send_redirect( web.url_for( controller='admin',
- action='browse_library',
- id=library_id,
- msg=util.sanitize_text( msg ),
- messagetype='error' ) )
- # See if we have any associated templates
- info_association = ldda.get_info_association()
- if info_association:
- template = info_association.template
- # See if we have any field contents
- info = info_association.info
- if info:
- widgets = get_form_widgets( trans, template, info.content )
- else:
- widgets = get_form_widgets( trans, template )
- else:
- widgets = []
- if action == 'permissions':
- if params.get( 'update_roles_button', False ):
- permissions = {}
- accessible = False
- for k, v in trans.app.model.Dataset.permitted_actions.items():
- # TODO: need to handle case where a user has the DATASET_MANAGE_PERMISSIONS permission, but not
- # the DATASET_ACCESS permission, making the former useless. Need to display a warning message.
- in_roles = [ trans.app.model.Role.get( x ) for x in util.listify( params.get( k + '_in', [] ) ) ]
- # At least 1 user must have every role associated with this dataset, or the dataset is inaccessible
- if v == trans.app.security_agent.permitted_actions.DATASET_ACCESS:
- if len( in_roles ) > 1:
- # Get the set of all users that are being associated with the dataset
- in_roles_set = set()
- for role in in_roles:
- in_roles_set.add( role )
- users_set = set()
- for role in in_roles:
- for ura in role.users:
- users_set.add( ura.user )
- # Make sure that at least 1 user has every role being associated with the dataset
- for user in users_set:
- user_roles_set = set()
- for ura in user.roles:
- user_roles_set.add( ura.role )
- if in_roles_set.issubset( user_roles_set ):
- accessible = True
- break
- else:
- accessible = True
- if not accessible and v == trans.app.security_agent.permitted_actions.DATASET_ACCESS:
- # Don't set the permissions for DATASET_ACCESS if inaccessbile, but set all other permissions
- # TODO: keep access permissions as they originally were, rather than automatically making public
- permissions[ trans.app.security_agent.get_action( v.action ) ] = []
- else:
- permissions[ trans.app.security_agent.get_action( v.action ) ] = in_roles
- # Set the DATASET permissions on the Dataset
- trans.app.security_agent.set_all_dataset_permissions( ldda.dataset, permissions )
- ldda.dataset.refresh()
- permissions = {}
- for k, v in trans.app.model.Library.permitted_actions.items():
- in_roles = [ trans.app.model.Role.get( x ) for x in util.listify( kwd.get( k + '_in', [] ) ) ]
- permissions[ trans.app.security_agent.get_action( v.action ) ] = in_roles
- # Set the LIBRARY permissions on the LibraryDataset
- # NOTE: the LibraryDataset and LibraryDatasetDatasetAssociation will be set with the same permissions
- trans.app.security_agent.set_all_library_permissions( ldda.library_dataset, permissions )
- ldda.library_dataset.refresh()
- # Set the LIBRARY permissions on the LibraryDatasetDatasetAssociation
- trans.app.security_agent.set_all_library_permissions( ldda, permissions )
- ldda.refresh()
- if not accessible:
- msg = "At least 1 user must have every role associated with accessing dataset '%s'. " % ldda.name
- msg += "The roles you attempted to associate for access would make this dataset inaccessible by everyone, "
- msg += "so access permissions were not set. All other permissions were updated for the dataset."
- messagetype = 'error'
- else:
- msg = "Permissions updated for dataset '%s'" % ldda.name
- return trans.fill_template( '/admin/library/ldda_permissions.mako',
- ldda=ldda,
- library_id=library_id,
- msg=msg,
- messagetype=messagetype )
- elif action == 'info':
- return trans.fill_template( '/admin/library/ldda_info.mako',
- ldda=ldda,
- library_id=library_id,
- deleted=deleted,
- show_deleted=show_deleted,
- widgets=widgets,
- msg=msg,
- messagetype=messagetype )
- elif action == 'edit_info':
- if params.get( 'change', False ):
- # The user clicked the Save button on the 'Change data type' form
- if ldda.datatype.allow_datatype_change and trans.app.datatypes_registry.get_datatype_by_extension( params.datatype ).allow_datatype_change:
- trans.app.datatypes_registry.change_datatype( ldda, params.datatype )
- trans.app.model.flush()
- msg = "Data type changed for library dataset '%s'" % ldda.name
- return trans.fill_template( "/admin/library/ldda_edit_info.mako",
- ldda=ldda,
- library_id=library_id,
- datatypes=ldatatypes,
- widgets=widgets,
- msg=msg,
- messagetype=messagetype )
- else:
- return trans.show_error_message( "You are unable to change datatypes in this manner. Changing %s to %s is not allowed." % ( ldda.extension, params.datatype ) )
- elif params.get( 'save', False ):
- # The user clicked the Save button on the 'Edit Attributes' form
- old_name = ldda.name
- new_name = util.restore_text( params.get( 'name', '' ) )
- new_info = util.restore_text( params.get( 'info', '' ) )
- new_message = util.restore_text( params.get( 'message', '' ) )
- if not new_name:
- msg = 'Enter a valid name'
- messagetype = 'error'
- else:
- ldda.name = new_name
- ldda.info = new_info
- ldda.message = new_message
- # The following for loop will save all metadata_spec items
- for name, spec in ldda.datatype.metadata_spec.items():
- if spec.get("readonly"):
- continue
- optional = params.get( "is_" + name, None )
- if optional and optional == 'true':
- # optional element... == 'true' actually means it is NOT checked (and therefore ommitted)
- setattr( ldda.metadata, name, None )
- else:
- setattr( ldda.metadata, name, spec.unwrap( params.get ( name, None ) ) )
- ldda.metadata.dbkey = dbkey
- ldda.datatype.after_edit( ldda )
- trans.app.model.flush()
- msg = 'Attributes updated for library dataset %s' % ldda.name
- messagetype = 'done'
- return trans.fill_template( "/admin/library/ldda_edit_info.mako",
- ldda=ldda,
- library_id=library_id,
- datatypes=ldatatypes,
- widgets=widgets,
- msg=msg,
- messagetype=messagetype )
- elif params.get( 'detect', False ):
- # The user clicked the Auto-detect button on the 'Edit Attributes' form
- for name, spec in ldda.datatype.metadata_spec.items():
- # We need to be careful about the attributes we are resetting
- if name not in [ 'name', 'info', 'dbkey' ]:
- if spec.get( 'default' ):
- setattr( ldda.metadata, name, spec.unwrap( spec.get( 'default' ) ) )
- ldda.datatype.set_meta( ldda )
- ldda.datatype.after_edit( ldda )
- trans.app.model.flush()
- msg = 'Attributes updated for library dataset %s' % ldda.name
- return trans.fill_template( "/admin/library/ldda_edit_info.mako",
- ldda=ldda,
- library_id=library_id,
- datatypes=ldatatypes,
- widgets=widgets,
- msg=msg,
- messagetype=messagetype )
- elif params.get( 'delete', False ):
- ldda.deleted = True
- ldda.flush()
- msg = 'Dataset %s has been removed from this library' % ldda.name
- return trans.fill_template( "/admin/library/ldda_edit_info.mako",
- ldda=ldda,
- library_id=library_id,
- datatypes=ldatatypes,
- widgets=widgets,
- msg=msg,
- messagetype=messagetype )
- ldda.datatype.before_edit( ldda )
- if "dbkey" in ldda.datatype.metadata_spec and not ldda.metadata.dbkey:
- # Copy dbkey into metadata, for backwards compatability
- # This looks like it does nothing, but getting the dbkey
- # returns the metadata dbkey unless it is None, in which
- # case it resorts to the old dbkey. Setting the dbkey
- # sets it properly in the metadata
- ldda.metadata.dbkey = ldda.dbkey
- return trans.fill_template( "/admin/library/ldda_edit_info.mako",
- ldda=ldda,
- library_id=library_id,
- datatypes=ldatatypes,
- widgets=widgets,
- msg=msg,
- messagetype=messagetype )
- elif ids:
- # Multiple ids specfied, display permission form, permissions will be updated for all simultaneously.
- lddas = []
- for id in [ int( id ) for id in ids ]:
- ldda = trans.app.model.LibraryDatasetDatasetAssociation.get( id )
- if ldda is None:
- msg = 'You specified an invalid LibraryDatasetDatasetAssociation id: %s' %str( id )
- trans.response.send_redirect( web.url_for( controller='admin',
- action='browse_library',
- id=library_id,
- msg=util.sanitize_text( msg ),
- messagetype='error' ) )
- lddas.append( ldda )
- if len( lddas ) < 2:
- msg = 'You must specify at least two datasets on which to modify permissions, ids you sent: %s' % str( ids )
- trans.response.send_redirect( web.url_for( controller='admin',
- action='browse_library',
- id=library_id,
- msg=util.sanitize_text( msg ),
- messagetype='error' ) )
- if action == 'permissions':
- if params.get( 'update_roles_button', False ):
- permissions = {}
- accessible = False
- for k, v in trans.app.model.Dataset.permitted_actions.items():
- # TODO: need to handle case where a user has the DATASET_MANAGE_PERMISSIONS permission, but not
- # the DATASET_ACCESS permission, making the former useless. Need to display a warning message.
- in_roles = [ trans.app.model.Role.get( x ) for x in util.listify( params.get( k + '_in', [] ) ) ]
- # At least 1 user must have every role associated with this dataset, or the dataset is inaccessible
- if v == trans.app.security_agent.permitted_actions.DATASET_ACCESS:
- if len( in_roles ) > 1:
- # Get the set of all users that are being associated with the dataset
- in_roles_set = set()
- for role in in_roles:
- in_roles_set.add( role )
- users_set = set()
- for role in in_roles:
- for ura in role.users:
- users_set.add( ura.user )
- # Make sure that at least 1 user has every role being associated with the dataset
- for user in users_set:
- user_roles_set = set()
- for ura in user.roles:
- user_roles_set.add( ura.role )
- if in_roles_set.issubset( user_roles_set ):
- accessible = True
- break
- else:
- accessible = True
- if not accessible and v == trans.app.security_agent.permitted_actions.DATASET_ACCESS:
- # Don't set the permissions for DATASET_ACCESS if inaccessbile, but set all other permissions
- # TODO: keep access permissions as they originally were, rather than automatically making public
- permissions[ trans.app.security_agent.get_action( v.action ) ] = []
- else:
- permissions[ trans.app.security_agent.get_action( v.action ) ] = in_roles
- for ldda in lddas:
- # Set the DATASET permissions on the Dataset
- trans.app.security_agent.set_all_dataset_permissions( ldda.dataset, permissions )
- ldda.dataset.refresh()
- permissions = {}
- for k, v in trans.app.model.Library.permitted_actions.items():
- in_roles = [ trans.app.model.Role.get( x ) for x in util.listify( kwd.get( k + '_in', [] ) ) ]
- permissions[ trans.app.security_agent.get_action( v.action ) ] = in_roles
- for ldda in lddas:
- # Set the LIBRARY permissions on the LibraryDataset
- # NOTE: the LibraryDataset and LibraryDatasetDatasetAssociation will be set with the same permissions
- trans.app.security_agent.set_all_library_permissions( ldda.library_dataset, permissions )
- ldda.library_dataset.refresh()
- # Set the LIBRARY permissions on the LibraryDatasetDatasetAssociation
- trans.app.security_agent.set_all_library_permissions( ldda, permissions )
- ldda.refresh()
- if not accessible:
- msg = "At least 1 user must have every role associated with accessing these %d datasets. " % len( lddas )
- msg += "The roles you attempted to associate for access would make these datasets inaccessible by everyone, "
- msg += "so access permissions were not set. All other permissions were updated for the datasets."
- messagetype = 'error'
- else:
- msg = "Permissions have been updated on %d datasets" % len( lddas )
- return trans.fill_template( "/admin/library/ldda_permissions.mako",
- ldda=lddas,
- library_id=library_id,
- msg=msg,
- messagetype=messagetype )
- # Ensure that the permissions across all library items are identical, otherwise we can't update them together.
- check_list = []
- for ldda in lddas:
- permissions = []
- # Check the library level permissions - the permissions on the LibraryDatasetDatasetAssociation
- # will always be the same as the permissions on the associated LibraryDataset, so we only need to
- # check one Library object
- for library_permission in trans.app.security_agent.get_library_dataset_permissions( ldda.library_dataset ):
- if library_permission.action not in permissions:
- permissions.append( library_permission.action )
- for dataset_permission in trans.app.security_agent.get_dataset_permissions( ldda.dataset ):
- if dataset_permission.action not in permissions:
- permissions.append( dataset_permission.action )
- permissions.sort()
- if not check_list:
- check_list = permissions
- if permissions != check_list:
- msg = 'The datasets you selected do not have identical permissions, so they can not be updated together'
- trans.response.send_redirect( web.url_for( controller='admin',
- action='browse_library',
- id=library_id,
- msg=util.sanitize_text( msg ),
- messagetype='error' ) )
- return trans.fill_template( "/admin/library/ldda_permissions.mako",
- ldda=lddas,
- library_id=library_id,
- msg=msg,
- messagetype=messagetype )
- @web.expose
- @web.require_admin
- def add_history_datasets_to_library( self, trans, library_id, folder_id, hda_ids='', **kwd ):
- params = util.Params( kwd )
- msg = util.restore_text( params.get( 'msg', '' ) )
- messagetype = params.get( 'messagetype', 'done' )
- try:
- folder = trans.app.model.LibraryFolder.get( int( folder_id ) )
- except:
- msg = "Invalid folder id: %s" % str( folder_id )
- return trans.response.send_redirect( web.url_for( controller='admin',
- action='browse_library',
- id=library_id,
- msg=util.sanitize_text( msg ),
- messagetype='error' ) )
- replace_id = params.get( 'replace_id', None )
- if replace_id:
- replace_dataset = trans.app.model.LibraryDataset.get( replace_id )
- else:
- replace_dataset = None
- # See if the current history is empty
- history = trans.get_history()
- history.refresh()
- if not history.active_datasets:
- msg = 'Your current history is empty'
- return trans.response.send_redirect( web.url_for( controller='admin',
- action='browse_library',
- id=library_id,
- msg=util.sanitize_text( msg ),
- messagetype='error' ) )
- if params.get( 'add_history_datasets_to_library_button', False ):
- hda_ids = util.listify( hda_ids )
- if hda_ids:
- dataset_names = []
- created_ldda_ids = ''
- for hda_id in hda_ids:
- hda = trans.app.model.HistoryDatasetAssociation.get( hda_id )
- if hda:
- ldda = hda.to_library_dataset_dataset_association( target_folder=folder, replace_dataset=replace_dataset )
- created_ldda_ids = '%s,%s' % ( created_ldda_ids, str( ldda.id ) )
- dataset_names.append( ldda.name )
- if not replace_dataset:
- # If replace_dataset is None, the Library level permissions will be taken from the folder and applied to the new
- # LDDA and LibraryDataset.
- trans.app.security_agent.copy_library_permissions( folder, ldda )
- trans.app.security_agent.copy_library_permissions( folder, ldda.library_dataset )
- # Permissions must be the same on the LibraryDatasetDatasetAssociation and the associated LibraryDataset
- trans.app.security_agent.copy_library_permissions( ldda.library_dataset, ldda )
- else:
- msg = "The requested HistoryDatasetAssociation id %s is invalid" % str( hda_id )
- return trans.response.send_redirect( web.url_for( controller='admin',
- action='browse_library',
- id=library_id,
- msg=util.sanitize_text( msg ),
- messagetype='error' ) )
- if created_ldda_ids:
- created_ldda_ids = created_ldda_ids.lstrip( ',' )
- ldda_id_list = created_ldda_ids.split( ',' )
- total_added = len( ldda_id_list )
- if replace_dataset:
- msg = "Added %d dataset versions to the library dataset '%s' in the folder '%s'." % ( total_added, replace_dataset.name, folder.name )
- else:
- if not folder.parent:
- # Libraries have the same name as their root_folder
- msg = "Added %d datasets to the library '%s' ( each is selected ). " % ( total_added, folder.name )
- else:
- msg = "Added %d datasets to the folder '%s' ( each is selected ). " % ( total_added, folder.name )
- msg += "Click the Go button at the bottom of this page to edit the permissions on these datasets if necessary."
- return trans.response.send_redirect( web.url_for( controller='admin',
- action='browse_library',
- id=library_id,
- created_ldda_ids=created_ldda_ids,
- msg=util.sanitize_text( msg ),
- messagetype='done' ) )
- else:
- msg = 'Select at least one dataset from the list of active datasets in your current history'
- messagetype = 'error'
- last_used_build = folder.genome_build
- upload_option = params.get( 'upload_option', 'import_from_history' )
- # Send list of data formats to the form so the "extension" select list can be populated dynamically
- file_formats = trans.app.datatypes_registry.upload_file_formats
- # Send list of genome builds to the form so the "dbkey" select list can be populated dynamically
- def get_dbkey_options( last_used_build ):
- for dbkey, build_name in util.dbnames:
- yield build_name, dbkey, ( dbkey==last_used_build )
- dbkeys = get_dbkey_options( last_used_build )
- # Send list of roles to the form so the dataset can be associated with 1 or more of them.
- roles = trans.app.model.Role.filter( trans.app.model.Role.table.c.deleted==False ).order_by( trans.app.model.Role.c.name ).all()
- return trans.fill_template( "/admin/library/new_dataset.mako",
- upload_option=upload_option,
- library_id=library_id,
- folder_id=folder_id,
- replace_id=replace_id,
- file_formats=file_formats,
- dbkeys=dbkeys,
- last_used_build=last_used_build,
- roles=roles,
- history=history,
- widgets=widgets,
- msg=msg,
- messagetype=messagetype )
- @web.expose
- @web.require_admin
- def info_template( self, trans, library_id, id=None, folder_id=None, ldda_id=None, **kwd ):
- params = util.Params( kwd )
- msg = util.restore_text( params.get( 'msg', '' ) )
- messagetype = params.get( 'messagetype', 'done' )
- if id:
- library_item = trans.app.model.FormDefinition.get( int( id ) )
- library_item_desc = 'information template'
- response_action = 'info_template'
- response_id = id
- elif folder_id:
- library_item = trans.app.model.LibraryFolder.get( int( folder_id ) )
- library_item_desc = 'folder'
- response_action = 'folder'
- response_id = folder_id
- elif ldda_id:
- library_item = trans.app.model.LibraryDatasetDatasetAssociation.get( int( ldda_id ) )
- library_item_desc = 'library dataset'
- response_action = 'library_dataset_dataset_association'
- response_id = ldda_id
- else:
- library_item = trans.app.model.Library.get( int( library_id ) )
- library_item_desc = 'library'
- response_action = 'browse_library'
- response_id = library_id
- forms = get_all_forms( trans, filter=dict(deleted=False) )
- if not forms:
- msg = "There are no forms on which to base the template, so create a form and "
- msg += "try again to add the information template to the %s." % library_item_desc
- trans.response.send_redirect( web.url_for( controller='forms',
- action='new',
- new=True,
- msg=msg,
- messagetype='done' ) )
- if params.get( 'add', False ):
- if params.get( 'add_info_template_button', False ):
- form = trans.app.model.FormDefinition.get( int( kwd[ 'form_id' ] ) )
- #fields = list( copy.deepcopy( form.fields ) )
- form_values = trans.app.model.FormValues( form, [] )
- form_values.flush()
- if folder_id:
- assoc = trans.app.model.LibraryFolderInfoAssociation( library_item, form, form_values )
- elif ldda_id:
- assoc = trans.app.model.LibraryDatasetDatasetInfoAssociation( library_item, form, form_values )
- else:
- assoc = trans.app.model.LibraryInfoAssociation( library_item, form, form_values )
- assoc.flush()
- msg = 'An information template based on the form "%s" has been added to this %s.' % ( form.name, library_item_desc )
- trans.response.send_redirect( web.url_for( controller='admin',
- action=response_action,
- id=response_id,
- msg=msg,
- message_type='done' ) )
- return trans.fill_template( '/admin/library/select_info_template.mako',
- library_item_name=library_item.name,
- library_item_desc=library_item_desc,
- library_id=library_id,
- folder_id=folder_id,
- ldda_id=ldda_id,
- forms=forms,
- msg=msg,
- messagetype=messagetype )
- @web.expose
- @web.require_admin
- def edit_template_info( self, trans, library_id, num_widgets, library_item_id=None, library_item_type=None, **kwd ):
- params = util.Params( kwd )
- msg = util.restore_text( params.get( 'msg', '' ) )
- messagetype = params.get( 'messagetype', 'done' )
- folder_id = None
- if library_item_type == 'library':
- library_item = trans.app.model.Library.get( library_item_id )
- elif library_item_type == 'library_dataset':
- library_item = trans.app.model.LibraryDataset.get( library_item_id )
- elif library_item_type == 'folder':
- library_item = trans.app.model.LibraryFolder.get( library_item_id )
- elif library_item_type == 'library_dataset_dataset_association':
- library_item = trans.app.model.LibraryDatasetDatasetAssociation.get( library_item_id )
- # This response_action method requires a folder_id
- folder_id = library_item.library_dataset.folder.id
- else:
- msg = "Invalid library item type ( %s ) specified, id ( %s )" % ( str( library_item_type ), str( library_item_id ) )
- return trans.response.send_redirect( web.url_for( controller='admin',
- action='browse_library',
- id=library_id,
- msg=util.sanitize_text( msg ),
- messagetype='error' ) )
- # Save updated template field contents
- field_contents = []
- for index in range( int( num_widgets ) ):
- field_contents.append( util.restore_text( params.get( 'field_%i' % ( index ), '' ) ) )
- if field_contents:
- # Since information templates are inherited, the template fields can be displayed on the information
- # page for a folder or library dataset when it has no info_association object. If the user has added
- # field contents on an inherited template via a parent's info_association, we'll need to create a new
- # form_values and info_association for the current object.
- info_association = library_item.get_info_association( restrict=True )
- if info_association:
- template = info_association.template
- info = info_association.info
- form_values = trans.app.model.FormValues.get( info.id )
- # Update existing content only if it has changed
- if form_values.content != field_contents:
- form_values.content = field_contents
- form_values.flush()
- else:
- # Inherit the next available info_association so we can get the template
- info_association = library_item.get_info_association()
- template = info_association.template
- # Create a new FormValues object
- form_values = trans.app.model.FormValues( template, field_contents )
- form_values.flush()
- # Create a new info_association between the current library item and form_values
- if library_item_type == 'folder':
- info_association = trans.app.model.LibraryFolderInfoAssociation( library_item, template, form_values )
- info_association.flush()
- elif library_item_type == 'library_dataset_dataset_association':
- info_association = trans.app.model.LibraryDatasetDatasetInfoAssociation( library_item, template, form_values )
- info_association.flush()
- msg = 'The information has been updated.'
- return trans.response.send_redirect( web.url_for( controller='admin',
- action=library_item_type,
- id=library_item.id,
- library_id=library_id,
- folder_id=folder_id,
- edit_info=True,
- msg=util.sanitize_text( msg ),
- messagetype='done' ) )
- @web.expose
- @web.require_admin
- def download_dataset_from_folder(self, trans, id, library_id=None, **kwd):
- """Catches the dataset id and displays file contents as directed"""
- # id must refer to a LibraryDatasetDatasetAssociation object
- ldda = trans.app.model.LibraryDatasetDatasetAssociation.get( id )
- if not ldda.dataset:
- msg = 'Invalid LibraryDatasetDatasetAssociation id %s received for file downlaod' % str( id )
- return trans.response.send_redirect( web.url_for( controller='admin',
- action='browse_library',
- id=library_id,
- msg=util.sanitize_text( msg ),
- messagetype='error' ) )
- mime = trans.app.datatypes_registry.get_mimetype_by_extension( ldda.extension.lower() )
- trans.response.set_content_type( mime )
- fStat = os.stat( ldda.file_name )
- trans.response.headers[ 'Content-Length' ] = int( fStat.st_size )
- valid_chars = '.,^_-()[]0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
- fname = ldda.name
- fname = ''.join( c in valid_chars and c or '_' for c in fname )[ 0:150 ]
- trans.response.headers[ "Content-Disposition" ] = "attachment; filename=GalaxyLibraryDataset-%s-[%s]" % ( str( id ), fname )
- try:
- return open( ldda.file_name )
- except:
- msg = 'This dataset contains no content'
- return trans.response.send_redirect( web.url_for( controller='admin',
- action='browse_library',
- id=library_id,
- msg=util.sanitize_text( msg ),
- messagetype='error' ) )
- @web.expose
- @web.require_admin
- def datasets( self, trans, library_id, **kwd ):
- # This method is used by the select list labeled "Perform action on selected datasets"
- # on the admin library browser.
- params = util.Params( kwd )
- msg = util.restore_text( params.get( 'msg', '' ) )
- messagetype = params.get( 'messagetype', 'done' )
- if params.get( 'action_on_datasets_button', False ):
- if not params.ldda_ids:
- msg = "At least one dataset must be selected for %s" % params.action
- trans.response.send_redirect( web.url_for( controller='admin',
- action='browse_library',
- id=library_id,
- msg=util.sanitize_text( msg ),
- messagetype='error' ) )
- ldda_ids = util.listify( params.ldda_ids )
- if params.action == 'edit':
- # We need the folder containing the LibraryDatasetDatasetAssociation(s)
- ldda = trans.app.model.LibraryDatasetDatasetAssociation.get( ldda_ids[0] )
- trans.response.send_redirect( web.url_for( controller='admin',
- action='library_dataset_dataset_association',
- library_id=library_id,
- folder_id=ldda.library_dataset.folder.id,
- id=",".join( ldda_ids ),
- permissions=True,
- msg=util.sanitize_text( msg ),
- messagetype=messagetype ) )
- elif params.action == 'delete':
- for id in ldda_ids:
- ldda = trans.app.model.LibraryDatasetDatasetAssociation.get( id )
- ldda.deleted = True
- ldda.flush()
- msg = "The selected datasets have been removed from this library"
- trans.response.send_redirect( web.url_for( controller='admin',
- action='browse_library',
- id=library_id,
- show_deleted=False,
- msg=util.sanitize_text( msg ),
- messagetype='done' ) )
- else:
- msg = "Action %s is not yet implemented" % str( params.action )
- trans.response.send_redirect( web.url_for( controller='admin',
- action='browse_library',
- id=library_id,
- msg=util.sanitize_text( msg ),
- messagetype='error' ) )
- else:
- trans.response.send_redirect( web.url_for( controller='admin',
- action='browse_library',
- id=library_id,
- msg=util.sanitize_text( msg ),
- messagetype=messagetype ) )
- @web.expose
- @web.require_admin
- def delete_library_item( self, trans, library_id, library_item_id, library_item_type ):
- # This action will handle deleting all types of library items. State is saved for libraries and
- # folders ( i.e., if undeleted, the state of contents of the library or folder will remain, so previously
- # deleted / purged contents will have the same state ). When a library or folder has been deleted for
- # the amount of time defined in the cleanup_datasets.py script, the library or folder and all of its
- # contents will be purged. The association between this method and the cleanup_datasets.py script
- # enables clean maintenance of libraries and library dataset disk files. This is also why the following
- # 3 objects, and not any of the associations ( the cleanup_datasets.py scipot handles everything else ).
- library_item_types = { 'library': trans.app.model.Library,
- 'folder': trans.app.model.LibraryFolder,
- 'library_dataset': trans.app.model.LibraryDataset }
- if library_item_type not in library_item_types:
- msg = 'Bad library_item_type specified: %s' % str( library_item_type )
- messagetype = 'error'
- else:
- if library_item_type == 'library_dataset':
- library_item_desc = 'Dataset'
- else:
- library_item_desc = library_item_type.capitalize()
- library_item = library_item_types[ library_item_type ].get( int( library_item_id ) )
- library_item.deleted = True
- library_item.flush()
- msg = util.sanitize_text( "%s '%s' has been marked deleted" % ( library_item_desc, library_item.name ) )
- messagetype = 'done'
- if library_item_type == 'library':
- return self.browse_libraries( trans, msg=msg, messagetype=messagetype )
- else:
- return self.browse_library( trans, id=library_id , msg=msg, messagetype=messagetype )
- @web.expose
- @web.require_admin
- def undelete_library_item( self, trans, library_id, library_item_id, library_item_type ):
- # This action will handle undeleting all types of library items
- library_item_types = { 'library': trans.app.model.Library,
- 'folder': trans.app.model.LibraryFolder,
- 'library_dataset': trans.app.model.LibraryDataset }
- if library_item_type not in library_item_types:
- msg = 'Bad library_item_type specified: %s' % str( library_item_type )
- messagetype = 'error'
- else:
- if library_item_type == 'library_dataset':
- library_item_desc = 'Dataset'
- else:
- library_item_desc = library_item_type.capitalize()
- library_item = library_item_types[ library_item_type ].get( int( library_item_id ) )
- if library_item.purged:
- msg = '%s %s has been purged, so it cannot be undeleted' % ( library_item_desc, library_item.name )
- messagetype = 'error'
- else:
- library_item.deleted = False
- library_item.flush()
- msg = util.sanitize_text( "%s '%s' has been marked undeleted" % ( library_item_desc, library_item.name ) )
- messagetype = 'done'
- if library_item_type == 'library':
- return self.browse_libraries( trans, msg=msg, messagetype=messagetype )
- else:
- return self.browse_library( trans, id=library_id , msg=msg, messagetype=messagetype )
@web.expose
@web.require_admin
def memdump( self, trans, ids = 'None', sorts = 'None', pages = 'None', new_id = None, new_sort = None, **kwd ):
diff -r f2af04af3caa -r d301a67eda40 lib/galaxy/web/controllers/library_admin.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/galaxy/web/controllers/library_admin.py Mon Sep 14 11:05:36 2009 -0400
@@ -0,0 +1,1195 @@
+import sys
+from galaxy import util
+from galaxy.web.base.controller import *
+from galaxy.model.orm import *
+from galaxy.web.controllers.forms import get_all_forms, get_form_widgets
+# Older py compatibility
+try:
+ set()
+except:
+ from sets import Set as set
+
+import logging
+log = logging.getLogger( __name__ )
+
+class LibraryAdmin( BaseController ):
+ @web.expose
+ @web.require_admin
+ def browse_libraries( self, trans, **kwd ):
+ params = util.Params( kwd )
+ msg = util.restore_text( params.get( 'msg', '' ) )
+ messagetype = params.get( 'messagetype', 'done' )
+ return trans.fill_template( '/admin/library/browse_libraries.mako',
+ libraries=trans.app.model.Library.filter( trans.app.model.Library.table.c.deleted==False ) \
+ .order_by( trans.app.model.Library.name ).all(),
+ deleted=False,
+ show_deleted=False,
+ msg=msg,
+ messagetype=messagetype )
+ @web.expose
+ @web.require_admin
+ def browse_library( self, trans, **kwd ):
+ params = util.Params( kwd )
+ msg = util.restore_text( params.get( 'msg', '' ) )
+ messagetype = params.get( 'messagetype', 'done' )
+ id = params.get( 'id', None )
+ deleted = util.string_as_bool( params.get( 'deleted', False ) )
+ show_deleted = util.string_as_bool( params.get( 'show_deleted', False ) )
+ if not id:
+ msg = "You must specify a library id."
+ return trans.response.send_redirect( web.url_for( controller='library_admin',
+ action='browse_libraries',
+ msg=util.sanitize_text( msg ),
+ messagetype='error' ) )
+ library = library=trans.app.model.Library.get( id )
+ if not library:
+ msg = "Invalid library id ( %s )."
+ return trans.response.send_redirect( web.url_for( controller='library_admin',
+ action='browse_libraries',
+ msg=util.sanitize_text( msg ),
+ messagetype='error' ) )
+ created_ldda_ids = params.get( 'created_ldda_ids', '' )
+ return trans.fill_template( '/admin/library/browse_library.mako',
+ library=trans.app.model.Library.get( id ),
+ deleted=deleted,
+ created_ldda_ids=created_ldda_ids,
+ forms=get_all_forms( trans, filter=dict(deleted=False) ),
+ msg=msg,
+ messagetype=messagetype,
+ show_deleted=show_deleted )
+ @web.expose
+ @web.require_admin
+ def library( self, trans, id=None, **kwd ):
+ params = util.Params( kwd )
+ msg = util.restore_text( params.get( 'msg', '' ) )
+ messagetype = params.get( 'messagetype', 'done' )
+ if params.get( 'new', False ):
+ action = 'new'
+ elif params.get( 'delete', False ):
+ action = 'delete'
+ elif params.get( 'permissions', False ):
+ action = 'permissions'
+ else:
+ action = 'information'
+ if not id and not action == 'new':
+ msg = "You must specify a library to %s." % action
+ return trans.response.send_redirect( web.url_for( controller='library_admin',
+ action='browse_libraries',
+ msg=util.sanitize_text( msg ),
+ messagetype='error' ) )
+ if not action == 'new':
+ library = trans.app.model.Library.get( int( id ) )
+ if action == 'new':
+ if params.new == 'submitted':
+ library = trans.app.model.Library( name = util.restore_text( params.name ),
+ description = util.restore_text( params.description ) )
+ root_folder = trans.app.model.LibraryFolder( name = util.restore_text( params.name ), description = "" )
+ root_folder.flush()
+ library.root_folder = root_folder
+ library.flush()
+ msg = "The new library named '%s' has been created" % library.name
+ return trans.response.send_redirect( web.url_for( controller='library_admin',
+ action='browse_library',
+ id=library.id,
+ msg=util.sanitize_text( msg ),
+ messagetype='done' ) )
+ return trans.fill_template( '/admin/library/new_library.mako', msg=msg, messagetype=messagetype )
+ elif action == 'information':
+ # See if we have any associated templates
+ info_association = library.get_info_association()
+ if info_association:
+ template = info_association.template
+ # See if we have any field contents
+ info = info_association.info
+ if info:
+ widgets = get_form_widgets( trans, template, info.content )
+ else:
+ widgets = get_form_widgets( trans, template )
+ else:
+ widgets = []
+ if params.get( 'rename_library_button', False ):
+ old_name = library.name
+ new_name = util.restore_text( params.name )
+ new_description = util.restore_text( params.description )
+ if not new_name:
+ msg = 'Enter a valid name'
+ return trans.fill_template( '/admin/library/library_info.mako',
+ library=library,
+ widgets=widgets,
+ msg=msg,
+ messagetype='error' )
+ else:
+ library.name = new_name
+ library.description = new_description
+ library.flush()
+ # Rename the root_folder
+ library.root_folder.name = new_name
+ library.root_folder.description = new_description
+ library.root_folder.flush()
+ msg = "Library '%s' has been renamed to '%s'" % ( old_name, new_name )
+ return trans.response.send_redirect( web.url_for( controller='library_admin',
+ action='library',
+ id=id,
+ edit_info=True,
+ msg=util.sanitize_text( msg ),
+ messagetype='done' ) )
+ return trans.fill_template( '/admin/library/library_info.mako',
+ library=library,
+ widgets=widgets,
+ msg=msg,
+ messagetype=messagetype )
+ elif action == 'delete':
+ def delete_folder( library_folder ):
+ library_folder.refresh()
+ for folder in library_folder.folders:
+ delete_folder( folder )
+ for library_dataset in library_folder.datasets:
+ library_dataset.refresh()
+ ldda = library_dataset.library_dataset_dataset_association
+ if ldda:
+ ldda.refresh()
+ # We don't set ldda.dataset.deleted to True here because the cleanup_dataset script
+ # will eventually remove it from disk. The purge_library method below sets the dataset
+ # to deleted. This allows for the library to be undeleted ( before it is purged ),
+ # restoring all of its contents.
+ ldda.deleted = True
+ ldda.flush()
+ library_dataset.deleted = True
+ library_dataset.flush()
+ library_folder.deleted = True
+ library_folder.flush()
+ library.refresh()
+ delete_folder( library.root_folder )
+ library.deleted = True
+ library.flush()
+ msg = "Library '%s' and all of its contents have been marked deleted" % library.name
+ return trans.response.send_redirect( web.url_for( action='browse_libraries', msg=util.sanitize_text( msg ), messagetype='done' ) )
+ elif action == 'permissions':
+ if params.get( 'update_roles_button', False ):
+ # The user clicked the Save button on the 'Associate With Roles' form
+ permissions = {}
+ for k, v in trans.app.model.Library.permitted_actions.items():
+ in_roles = [ trans.app.model.Role.get( x ) for x in util.listify( kwd.get( k + '_in', [] ) ) ]
+ permissions[ trans.app.security_agent.get_action( v.action ) ] = in_roles
+ trans.app.security_agent.set_all_library_permissions( library, permissions )
+ library.refresh()
+ # Copy the permissions to the root folder
+ trans.app.security_agent.copy_library_permissions( library, library.root_folder )
+ msg = "Permissions updated for library '%s'" % library.name
+ return trans.response.send_redirect( web.url_for( controller='library_admin',
+ action='library',
+ id=id,
+ permissions=True,
+ msg=util.sanitize_text( msg ),
+ messagetype='done' ) )
+ return trans.fill_template( '/admin/library/library_permissions.mako',
+ library=library,
+ msg=msg,
+ messagetype=messagetype )
+ @web.expose
+ @web.require_admin
+ def deleted_libraries( self, trans, **kwd ):
+ params = util.Params( kwd )
+ msg = util.restore_text( params.get( 'msg', '' ) )
+ messagetype = params.get( 'messagetype', 'done' )
+ libraries=trans.app.model.Library.filter( and_( trans.app.model.Library.table.c.deleted==True,
+ trans.app.model.Library.table.c.purged==False ) ) \
+ .order_by( trans.app.model.Library.table.c.name ).all()
+ return trans.fill_template( '/admin/library/browse_libraries.mako',
+ libraries=libraries,
+ deleted=True,
+ msg=msg,
+ messagetype=messagetype,
+ show_deleted=True )
+ @web.expose
+ @web.require_admin
+ def purge_library( self, trans, **kwd ):
+ params = util.Params( kwd )
+ library = trans.app.model.Library.get( int( params.id ) )
+ def purge_folder( library_folder ):
+ for lf in library_folder.folders:
+ purge_folder( lf )
+ library_folder.refresh()
+ for library_dataset in library_folder.datasets:
+ library_dataset.refresh()
+ ldda = library_dataset.library_dataset_dataset_association
+ if ldda:
+ ldda.refresh()
+ dataset = ldda.dataset
+ dataset.refresh()
+ # If the dataset is not associated with any additional undeleted folders, then we can delete it.
+ # We don't set dataset.purged to True here because the cleanup_datasets script will do that for
+ # us, as well as removing the file from disk.
+ #if not dataset.deleted and len( dataset.active_library_associations ) <= 1: # This is our current ldda
+ dataset.deleted = True
+ dataset.flush()
+ ldda.deleted = True
+ ldda.flush()
+ library_dataset.deleted = True
+ library_dataset.flush()
+ library_folder.deleted = True
+ library_folder.purged = True
+ library_folder.flush()
+ if not library.deleted:
+ msg = "Library '%s' has not been marked deleted, so it cannot be purged" % ( library.name )
+ return trans.response.send_redirect( web.url_for( controller='library_admin',
+ action='browse_libraries',
+ msg=util.sanitize_text( msg ),
+ messagetype='error' ) )
+ else:
+ purge_folder( library.root_folder )
+ library.purged = True
+ library.flush()
+ msg = "Library '%s' and all of its contents have been purged, datasets will be removed from disk via the cleanup_datasets script" % library.name
+ return trans.response.send_redirect( web.url_for( controller='library_admin',
+ action='deleted_libraries',
+ msg=util.sanitize_text( msg ),
+ messagetype='done' ) )
+ @web.expose
+ @web.require_admin
+ def folder( self, trans, id, library_id, **kwd ):
+ params = util.Params( kwd )
+ msg = util.restore_text( params.get( 'msg', '' ) )
+ messagetype = params.get( 'messagetype', 'done' )
+ if params.get( 'new', False ):
+ action = 'new'
+ elif params.get( 'delete', False ):
+ action = 'delete'
+ elif params.get( 'permissions', False ):
+ action = 'permissions'
+ else:
+ # 'information' will be the default
+ action = 'information'
+ folder = trans.app.model.LibraryFolder.get( int( id ) )
+ if not folder:
+ msg = "Invalid folder specified, id: %s" % str( id )
+ return trans.response.send_redirect( web.url_for( controller='library_admin',
+ action='browse_library',
+ id=library_id,
+ msg=util.sanitize_text( msg ),
+ messagetype='error' ) )
+ if action == 'new':
+ if params.new == 'submitted':
+ new_folder = trans.app.model.LibraryFolder( name=util.restore_text( params.name ),
+ description=util.restore_text( params.description ) )
+ # We are associating the last used genome build with folders, so we will always
+ # initialize a new folder with the first dbkey in util.dbnames which is currently
+ # ? unspecified (?)
+ new_folder.genome_build = util.dbnames.default_value
+ folder.add_folder( new_folder )
+ new_folder.flush()
+ # New folders default to having the same permissions as their parent folder
+ trans.app.security_agent.copy_library_permissions( folder, new_folder )
+ msg = "New folder named '%s' has been added to the library" % new_folder.name
+ return trans.response.send_redirect( web.url_for( controller='library_admin',
+ action='browse_library',
+ id=library_id,
+ msg=util.sanitize_text( msg ),
+ messagetype='done' ) )
+ return trans.fill_template( '/admin/library/new_folder.mako',
+ library_id=library_id,
+ folder=folder,
+ msg=msg,
+ messagetype=messagetype )
+ elif action == 'information':
+ # See if we have any associated templates
+ info_association = folder.get_info_association()
+ if info_association:
+ template = info_association.template
+ # See if we have any field contents
+ info = info_association.info
+ if info:
+ widgets = get_form_widgets( trans, template, info.content )
+ else:
+ widgets = get_form_widgets( trans, template )
+ else:
+ widgets = []
+ if params.get( 'rename_folder_button', False ):
+ old_name = folder.name
+ new_name = util.restore_text( params.name )
+ new_description = util.restore_text( params.description )
+ if not new_name:
+ msg = 'Enter a valid name'
+ return trans.fill_template( '/admin/library/folder_info.mako',
+ folder=folder,
+ library_id=library_id,
+ widgets=widgets,
+ msg=msg,
+ messagetype='error' )
+ else:
+ folder.name = new_name
+ folder.description = new_description
+ folder.flush()
+ msg = "Folder '%s' has been renamed to '%s'" % ( old_name, new_name )
+ return trans.response.send_redirect( web.url_for( controller='library_admin',
+ action='folder',
+ id=id,
+ library_id=library_id,
+ edit_info=True,
+ msg=util.sanitize_text( msg ),
+ messagetype='done' ) )
+ return trans.fill_template( '/admin/library/folder_info.mako',
+ folder=folder,
+ library_id=library_id,
+ widgets=widgets,
+ msg=msg,
+ messagetype=messagetype )
+ elif action == 'delete':
+ folder.deleted = True
+ folder.flush()
+ msg = "Folder '%s' and all of its contents have been marked deleted" % folder.name
+ return trans.response.send_redirect( web.url_for( action='browse_library',
+ id=library_id,
+ msg=util.sanitize_text( msg ),
+ messagetype='done' ) )
+ elif action =='permissions':
+ if params.get( 'update_roles_button', False ):
+ # The user clicked the Save button on the 'Associate With Roles' form
+ permissions = {}
+ for k, v in trans.app.model.Library.permitted_actions.items():
+ in_roles = [ trans.app.model.Role.get( int( x ) ) for x in util.listify( params.get( k + '_in', [] ) ) ]
+ permissions[ trans.app.security_agent.get_action( v.action ) ] = in_roles
+ trans.app.security_agent.set_all_library_permissions( folder, permissions )
+ folder.refresh()
+ msg = "Permissions updated for folder '%s'" % folder.name
+ return trans.response.send_redirect( web.url_for( controller='library_admin',
+ action='folder',
+ id=id,
+ library_id=library_id,
+ permissions=True,
+ msg=util.sanitize_text( msg ),
+ messagetype='done' ) )
+ return trans.fill_template( '/admin/library/folder_permissions.mako',
+ folder=folder,
+ library_id=library_id,
+ msg=msg,
+ messagetype=messagetype )
+ @web.expose
+ @web.require_admin
+ def library_dataset( self, trans, id, library_id, **kwd ):
+ params = util.Params( kwd )
+ msg = util.restore_text( params.get( 'msg', '' ) )
+ messagetype = params.get( 'messagetype', 'done' )
+ if params.get( 'permissions', False ):
+ action = 'permissions'
+ else:
+ action = 'information'
+ library_dataset = trans.app.model.LibraryDataset.get( id )
+ if not library_dataset:
+ msg = "Invalid library dataset specified, id: %s" %str( id )
+ return trans.response.send_redirect( web.url_for( controller='library_admin',
+ action='browse_library',
+ id=library_id,
+ msg=util.sanitize_text( msg ),
+ messagetype='error' ) )
+ if action == 'information':
+ if params.get( 'edit_attributes_button', False ):
+ old_name = library_dataset.name
+ new_name = util.restore_text( params.get( 'name', '' ) )
+ new_info = util.restore_text( params.get( 'info', '' ) )
+ if not new_name:
+ msg = 'Enter a valid name'
+ messagetype = 'error'
+ else:
+ library_dataset.name = new_name
+ library_dataset.info = new_info
+ library_dataset.flush()
+ msg = "Dataset '%s' has been renamed to '%s'" % ( old_name, new_name )
+ messagetype = 'done'
+ return trans.fill_template( '/admin/library/library_dataset_info.mako',
+ library_dataset=library_dataset,
+ library_id=library_id,
+ msg=msg,
+ messagetype=messagetype )
+ elif action == 'permissions':
+ if params.get( 'update_roles_button', False ):
+ # The user clicked the Save button on the 'Edit permissions and role associations' form
+ permissions = {}
+ for k, v in trans.app.model.Library.permitted_actions.items():
+ in_roles = [ trans.app.model.Role.get( x ) for x in util.listify( kwd.get( k + '_in', [] ) ) ]
+ permissions[ trans.app.security_agent.get_action( v.action ) ] = in_roles
+ # Set the LIBRARY permissions on the LibraryDataset
+ # NOTE: the LibraryDataset and LibraryDatasetDatasetAssociation will be set with the same permissions
+ trans.app.security_agent.set_all_library_permissions( library_dataset, permissions )
+ library_dataset.refresh()
+ # Set the LIBRARY permissions on the LibraryDatasetDatasetAssociation
+ trans.app.security_agent.set_all_library_permissions( library_dataset.library_dataset_dataset_association, permissions )
+ library_dataset.library_dataset_dataset_association.refresh()
+ msg = 'Permissions and roles have been updated for library dataset %s' % library_dataset.name
+ return trans.fill_template( '/admin/library/library_dataset_permissions.mako',
+ library_dataset=library_dataset,
+ library_id=library_id,
+ msg=msg,
+ messagetype=messagetype )
+ @web.expose
+ @web.require_admin
+ def library_dataset_dataset_association( self, trans, library_id, folder_id, id=None, **kwd ):
+ params = util.Params( kwd )
+ msg = util.restore_text( params.get( 'msg', '' ) )
+ messagetype = params.get( 'messagetype', 'done' )
+ deleted = util.string_as_bool( params.get( 'deleted', False ) )
+ show_deleted = util.string_as_bool( params.get( 'show_deleted', False ) )
+ dbkey = params.get( 'dbkey', None )
+ if isinstance( dbkey, list ):
+ last_used_build = dbkey[0]
+ else:
+ last_used_build = dbkey
+ folder = trans.app.model.LibraryFolder.get( folder_id )
+ if folder and last_used_build in [ 'None', None, '?' ]:
+ last_used_build = folder.genome_build
+ replace_id = params.get( 'replace_id', None )
+ if replace_id:
+ replace_dataset = trans.app.model.LibraryDataset.get( int( replace_id ) )
+ if not last_used_build:
+ last_used_build = replace_dataset.library_dataset_dataset_association.dbkey
+ else:
+ replace_dataset = None
+ # Let's not overwrite the imported datatypes module with the variable datatypes?
+ # The built-in 'id' is overwritten in lots of places as well
+ ldatatypes = [ dtype_name for dtype_name, dtype_value in trans.app.datatypes_registry.datatypes_by_extension.iteritems() if dtype_value.allow_datatype_change ]
+ ldatatypes.sort()
+ if params.get( 'new_dataset_button', False ):
+ upload_option = params.get( 'upload_option', 'upload_file' )
+ created_ldda_ids = trans.webapp.controllers[ 'library_dataset' ].upload_dataset( trans,
+ controller='library_admin',
+ library_id=library_id,
+ folder_id=folder_id,
+ replace_dataset=replace_dataset,
+ **kwd )
+ if created_ldda_ids:
+ total_added = len( created_ldda_ids.split( ',' ) )
+ if replace_dataset:
+ msg = "Added %d dataset versions to the library dataset '%s' in the folder '%s'." % ( total_added, replace_dataset.name, folder.name )
+ else:
+ if not folder.parent:
+ # Libraries have the same name as their root_folder
+ msg = "Added %d datasets to the library '%s' ( each is selected ). " % ( total_added, folder.name )
+ else:
+ msg = "Added %d datasets to the folder '%s' ( each is selected ). " % ( total_added, folder.name )
+ msg += "Click the Go button at the bottom of this page to edit the permissions on these datasets if necessary."
+ messagetype='done'
+ else:
+ msg = "Upload failed"
+ messagetype='error'
+ trans.response.send_redirect( web.url_for( controller='library_admin',
+ action='browse_library',
+ id=library_id,
+ created_ldda_ids=created_ldda_ids,
+ msg=util.sanitize_text( msg ),
+ messagetype=messagetype ) )
+ elif not id or replace_dataset:
+ # See if we have any associated templates
+ info_association = folder.get_info_association()
+ if info_association:
+ template = info_association.template
+ widgets = get_form_widgets( trans, template )
+ else:
+ widgets = []
+ upload_option = params.get( 'upload_option', 'upload_file' )
+ # No dataset(s) specified, so display the upload form. Send list of data formats to the form
+ # so the "extension" select list can be populated dynamically
+ file_formats = trans.app.datatypes_registry.upload_file_formats
+ # Send list of genome builds to the form so the "dbkey" select list can be populated dynamically
+ def get_dbkey_options( last_used_build ):
+ for dbkey, build_name in util.dbnames:
+ yield build_name, dbkey, ( dbkey==last_used_build )
+ dbkeys = get_dbkey_options( last_used_build )
+ # Send list of roles to the form so the dataset can be associated with 1 or more of them.
+ roles = trans.app.model.Role.filter( trans.app.model.Role.table.c.deleted==False ).order_by( trans.app.model.Role.c.name ).all()
+ # Send the current history to the form to enable importing datasets from history to library
+ history = trans.get_history()
+ history.refresh()
+ return trans.fill_template( '/admin/library/new_dataset.mako',
+ upload_option=upload_option,
+ library_id=library_id,
+ folder_id=folder_id,
+ replace_id=replace_id,
+ file_formats=file_formats,
+ dbkeys=dbkeys,
+ last_used_build=last_used_build,
+ roles=roles,
+ history=history,
+ widgets=widgets,
+ msg=msg,
+ messagetype=messagetype,
+ replace_dataset=replace_dataset )
+ else:
+ if params.get( 'permissions', False ):
+ action = 'permissions'
+ elif params.get( 'edit_info', False ):
+ action = 'edit_info'
+ else:
+ action = 'info'
+ if id.count( ',' ):
+ ids = id.split( ',' )
+ id = None
+ else:
+ ids = None
+ if id:
+ # ldda_id specified, display attributes form
+ ldda = trans.app.model.LibraryDatasetDatasetAssociation.get( id )
+ if not ldda:
+ msg = "Invalid LibraryDatasetDatasetAssociation specified, id: %s" % str( id )
+ return trans.response.send_redirect( web.url_for( controller='library_admin',
+ action='browse_library',
+ id=library_id,
+ msg=util.sanitize_text( msg ),
+ messagetype='error' ) )
+ # See if we have any associated templates
+ info_association = ldda.get_info_association()
+ if info_association:
+ template = info_association.template
+ # See if we have any field contents
+ info = info_association.info
+ if info:
+ widgets = get_form_widgets( trans, template, info.content )
+ else:
+ widgets = get_form_widgets( trans, template )
+ else:
+ widgets = []
+ if action == 'permissions':
+ if params.get( 'update_roles_button', False ):
+ permissions = {}
+ accessible = False
+ for k, v in trans.app.model.Dataset.permitted_actions.items():
+ # TODO: need to handle case where a user has the DATASET_MANAGE_PERMISSIONS permission, but not
+ # the DATASET_ACCESS permission, making the former useless. Need to display a warning message.
+ in_roles = [ trans.app.model.Role.get( x ) for x in util.listify( params.get( k + '_in', [] ) ) ]
+ # At least 1 user must have every role associated with this dataset, or the dataset is inaccessible
+ if v == trans.app.security_agent.permitted_actions.DATASET_ACCESS:
+ if len( in_roles ) > 1:
+ # Get the set of all users that are being associated with the dataset
+ in_roles_set = set()
+ for role in in_roles:
+ in_roles_set.add( role )
+ users_set = set()
+ for role in in_roles:
+ for ura in role.users:
+ users_set.add( ura.user )
+ # Make sure that at least 1 user has every role being associated with the dataset
+ for user in users_set:
+ user_roles_set = set()
+ for ura in user.roles:
+ user_roles_set.add( ura.role )
+ if in_roles_set.issubset( user_roles_set ):
+ accessible = True
+ break
+ else:
+ accessible = True
+ if not accessible and v == trans.app.security_agent.permitted_actions.DATASET_ACCESS:
+ # Don't set the permissions for DATASET_ACCESS if inaccessbile, but set all other permissions
+ # TODO: keep access permissions as they originally were, rather than automatically making public
+ permissions[ trans.app.security_agent.get_action( v.action ) ] = []
+ else:
+ permissions[ trans.app.security_agent.get_action( v.action ) ] = in_roles
+ # Set the DATASET permissions on the Dataset
+ trans.app.security_agent.set_all_dataset_permissions( ldda.dataset, permissions )
+ ldda.dataset.refresh()
+ permissions = {}
+ for k, v in trans.app.model.Library.permitted_actions.items():
+ in_roles = [ trans.app.model.Role.get( x ) for x in util.listify( kwd.get( k + '_in', [] ) ) ]
+ permissions[ trans.app.security_agent.get_action( v.action ) ] = in_roles
+ # Set the LIBRARY permissions on the LibraryDataset
+ # NOTE: the LibraryDataset and LibraryDatasetDatasetAssociation will be set with the same permissions
+ trans.app.security_agent.set_all_library_permissions( ldda.library_dataset, permissions )
+ ldda.library_dataset.refresh()
+ # Set the LIBRARY permissions on the LibraryDatasetDatasetAssociation
+ trans.app.security_agent.set_all_library_permissions( ldda, permissions )
+ ldda.refresh()
+ if not accessible:
+ msg = "At least 1 user must have every role associated with accessing dataset '%s'. " % ldda.name
+ msg += "The roles you attempted to associate for access would make this dataset inaccessible by everyone, "
+ msg += "so access permissions were not set. All other permissions were updated for the dataset."
+ messagetype = 'error'
+ else:
+ msg = "Permissions updated for dataset '%s'" % ldda.name
+ return trans.fill_template( '/admin/library/ldda_permissions.mako',
+ ldda=ldda,
+ library_id=library_id,
+ msg=msg,
+ messagetype=messagetype )
+ elif action == 'info':
+ return trans.fill_template( '/admin/library/ldda_info.mako',
+ ldda=ldda,
+ library_id=library_id,
+ deleted=deleted,
+ show_deleted=show_deleted,
+ widgets=widgets,
+ msg=msg,
+ messagetype=messagetype )
+ elif action == 'edit_info':
+ if params.get( 'change', False ):
+ # The user clicked the Save button on the 'Change data type' form
+ if ldda.datatype.allow_datatype_change and trans.app.datatypes_registry.get_datatype_by_extension( params.datatype ).allow_datatype_change:
+ trans.app.datatypes_registry.change_datatype( ldda, params.datatype )
+ trans.app.model.flush()
+ msg = "Data type changed for library dataset '%s'" % ldda.name
+ return trans.fill_template( "/admin/library/ldda_edit_info.mako",
+ ldda=ldda,
+ library_id=library_id,
+ datatypes=ldatatypes,
+ widgets=widgets,
+ msg=msg,
+ messagetype=messagetype )
+ else:
+ return trans.show_error_message( "You are unable to change datatypes in this manner. Changing %s to %s is not allowed." % ( ldda.extension, params.datatype ) )
+ elif params.get( 'save', False ):
+ # The user clicked the Save button on the 'Edit Attributes' form
+ old_name = ldda.name
+ new_name = util.restore_text( params.get( 'name', '' ) )
+ new_info = util.restore_text( params.get( 'info', '' ) )
+ new_message = util.restore_text( params.get( 'message', '' ) )
+ if not new_name:
+ msg = 'Enter a valid name'
+ messagetype = 'error'
+ else:
+ ldda.name = new_name
+ ldda.info = new_info
+ ldda.message = new_message
+ # The following for loop will save all metadata_spec items
+ for name, spec in ldda.datatype.metadata_spec.items():
+ if spec.get("readonly"):
+ continue
+ optional = params.get( "is_" + name, None )
+ if optional and optional == 'true':
+ # optional element... == 'true' actually means it is NOT checked (and therefore ommitted)
+ setattr( ldda.metadata, name, None )
+ else:
+ setattr( ldda.metadata, name, spec.unwrap( params.get ( name, None ) ) )
+ ldda.metadata.dbkey = dbkey
+ ldda.datatype.after_edit( ldda )
+ trans.app.model.flush()
+ msg = 'Attributes updated for library dataset %s' % ldda.name
+ messagetype = 'done'
+ return trans.fill_template( "/admin/library/ldda_edit_info.mako",
+ ldda=ldda,
+ library_id=library_id,
+ datatypes=ldatatypes,
+ widgets=widgets,
+ msg=msg,
+ messagetype=messagetype )
+ elif params.get( 'detect', False ):
+ # The user clicked the Auto-detect button on the 'Edit Attributes' form
+ for name, spec in ldda.datatype.metadata_spec.items():
+ # We need to be careful about the attributes we are resetting
+ if name not in [ 'name', 'info', 'dbkey' ]:
+ if spec.get( 'default' ):
+ setattr( ldda.metadata, name, spec.unwrap( spec.get( 'default' ) ) )
+ ldda.datatype.set_meta( ldda )
+ ldda.datatype.after_edit( ldda )
+ trans.app.model.flush()
+ msg = 'Attributes updated for library dataset %s' % ldda.name
+ return trans.fill_template( "/admin/library/ldda_edit_info.mako",
+ ldda=ldda,
+ library_id=library_id,
+ datatypes=ldatatypes,
+ widgets=widgets,
+ msg=msg,
+ messagetype=messagetype )
+ elif params.get( 'delete', False ):
+ ldda.deleted = True
+ ldda.flush()
+ msg = 'Dataset %s has been removed from this library' % ldda.name
+ return trans.fill_template( "/admin/library/ldda_edit_info.mako",
+ ldda=ldda,
+ library_id=library_id,
+ datatypes=ldatatypes,
+ widgets=widgets,
+ msg=msg,
+ messagetype=messagetype )
+ ldda.datatype.before_edit( ldda )
+ if "dbkey" in ldda.datatype.metadata_spec and not ldda.metadata.dbkey:
+ # Copy dbkey into metadata, for backwards compatability
+ # This looks like it does nothing, but getting the dbkey
+ # returns the metadata dbkey unless it is None, in which
+ # case it resorts to the old dbkey. Setting the dbkey
+ # sets it properly in the metadata
+ ldda.metadata.dbkey = ldda.dbkey
+ return trans.fill_template( "/admin/library/ldda_edit_info.mako",
+ ldda=ldda,
+ library_id=library_id,
+ datatypes=ldatatypes,
+ widgets=widgets,
+ msg=msg,
+ messagetype=messagetype )
+ elif ids:
+ # Multiple ids specfied, display permission form, permissions will be updated for all simultaneously.
+ lddas = []
+ for id in [ int( id ) for id in ids ]:
+ ldda = trans.app.model.LibraryDatasetDatasetAssociation.get( id )
+ if ldda is None:
+ msg = 'You specified an invalid LibraryDatasetDatasetAssociation id: %s' %str( id )
+ trans.response.send_redirect( web.url_for( controller='library_admin',
+ action='browse_library',
+ id=library_id,
+ msg=util.sanitize_text( msg ),
+ messagetype='error' ) )
+ lddas.append( ldda )
+ if len( lddas ) < 2:
+ msg = 'You must specify at least two datasets on which to modify permissions, ids you sent: %s' % str( ids )
+ trans.response.send_redirect( web.url_for( controller='library_admin',
+ action='browse_library',
+ id=library_id,
+ msg=util.sanitize_text( msg ),
+ messagetype='error' ) )
+ if action == 'permissions':
+ if params.get( 'update_roles_button', False ):
+ permissions = {}
+ accessible = False
+ for k, v in trans.app.model.Dataset.permitted_actions.items():
+ # TODO: need to handle case where a user has the DATASET_MANAGE_PERMISSIONS permission, but not
+ # the DATASET_ACCESS permission, making the former useless. Need to display a warning message.
+ in_roles = [ trans.app.model.Role.get( x ) for x in util.listify( params.get( k + '_in', [] ) ) ]
+ # At least 1 user must have every role associated with this dataset, or the dataset is inaccessible
+ if v == trans.app.security_agent.permitted_actions.DATASET_ACCESS:
+ if len( in_roles ) > 1:
+ # Get the set of all users that are being associated with the dataset
+ in_roles_set = set()
+ for role in in_roles:
+ in_roles_set.add( role )
+ users_set = set()
+ for role in in_roles:
+ for ura in role.users:
+ users_set.add( ura.user )
+ # Make sure that at least 1 user has every role being associated with the dataset
+ for user in users_set:
+ user_roles_set = set()
+ for ura in user.roles:
+ user_roles_set.add( ura.role )
+ if in_roles_set.issubset( user_roles_set ):
+ accessible = True
+ break
+ else:
+ accessible = True
+ if not accessible and v == trans.app.security_agent.permitted_actions.DATASET_ACCESS:
+ # Don't set the permissions for DATASET_ACCESS if inaccessbile, but set all other permissions
+ # TODO: keep access permissions as they originally were, rather than automatically making public
+ permissions[ trans.app.security_agent.get_action( v.action ) ] = []
+ else:
+ permissions[ trans.app.security_agent.get_action( v.action ) ] = in_roles
+ for ldda in lddas:
+ # Set the DATASET permissions on the Dataset
+ trans.app.security_agent.set_all_dataset_permissions( ldda.dataset, permissions )
+ ldda.dataset.refresh()
+ permissions = {}
+ for k, v in trans.app.model.Library.permitted_actions.items():
+ in_roles = [ trans.app.model.Role.get( x ) for x in util.listify( kwd.get( k + '_in', [] ) ) ]
+ permissions[ trans.app.security_agent.get_action( v.action ) ] = in_roles
+ for ldda in lddas:
+ # Set the LIBRARY permissions on the LibraryDataset
+ # NOTE: the LibraryDataset and LibraryDatasetDatasetAssociation will be set with the same permissions
+ trans.app.security_agent.set_all_library_permissions( ldda.library_dataset, permissions )
+ ldda.library_dataset.refresh()
+ # Set the LIBRARY permissions on the LibraryDatasetDatasetAssociation
+ trans.app.security_agent.set_all_library_permissions( ldda, permissions )
+ ldda.refresh()
+ if not accessible:
+ msg = "At least 1 user must have every role associated with accessing these %d datasets. " % len( lddas )
+ msg += "The roles you attempted to associate for access would make these datasets inaccessible by everyone, "
+ msg += "so access permissions were not set. All other permissions were updated for the datasets."
+ messagetype = 'error'
+ else:
+ msg = "Permissions have been updated on %d datasets" % len( lddas )
+ return trans.fill_template( "/admin/library/ldda_permissions.mako",
+ ldda=lddas,
+ library_id=library_id,
+ msg=msg,
+ messagetype=messagetype )
+ # Ensure that the permissions across all library items are identical, otherwise we can't update them together.
+ check_list = []
+ for ldda in lddas:
+ permissions = []
+ # Check the library level permissions - the permissions on the LibraryDatasetDatasetAssociation
+ # will always be the same as the permissions on the associated LibraryDataset, so we only need to
+ # check one Library object
+ for library_permission in trans.app.security_agent.get_library_dataset_permissions( ldda.library_dataset ):
+ if library_permission.action not in permissions:
+ permissions.append( library_permission.action )
+ for dataset_permission in trans.app.security_agent.get_dataset_permissions( ldda.dataset ):
+ if dataset_permission.action not in permissions:
+ permissions.append( dataset_permission.action )
+ permissions.sort()
+ if not check_list:
+ check_list = permissions
+ if permissions != check_list:
+ msg = 'The datasets you selected do not have identical permissions, so they can not be updated together'
+ trans.response.send_redirect( web.url_for( controller='library_admin',
+ action='browse_library',
+ id=library_id,
+ msg=util.sanitize_text( msg ),
+ messagetype='error' ) )
+ return trans.fill_template( "/admin/library/ldda_permissions.mako",
+ ldda=lddas,
+ library_id=library_id,
+ msg=msg,
+ messagetype=messagetype )
+ @web.expose
+ @web.require_admin
+ def add_history_datasets_to_library( self, trans, library_id, folder_id, hda_ids='', **kwd ):
+ params = util.Params( kwd )
+ msg = util.restore_text( params.get( 'msg', '' ) )
+ messagetype = params.get( 'messagetype', 'done' )
+ try:
+ folder = trans.app.model.LibraryFolder.get( int( folder_id ) )
+ except:
+ msg = "Invalid folder id: %s" % str( folder_id )
+ return trans.response.send_redirect( web.url_for( controller='library_admin',
+ action='browse_library',
+ id=library_id,
+ msg=util.sanitize_text( msg ),
+ messagetype='error' ) )
+ replace_id = params.get( 'replace_id', None )
+ if replace_id:
+ replace_dataset = trans.app.model.LibraryDataset.get( replace_id )
+ else:
+ replace_dataset = None
+ # See if the current history is empty
+ history = trans.get_history()
+ history.refresh()
+ if not history.active_datasets:
+ msg = 'Your current history is empty'
+ return trans.response.send_redirect( web.url_for( controller='library_admin',
+ action='browse_library',
+ id=library_id,
+ msg=util.sanitize_text( msg ),
+ messagetype='error' ) )
+ if params.get( 'add_history_datasets_to_library_button', False ):
+ hda_ids = util.listify( hda_ids )
+ if hda_ids:
+ dataset_names = []
+ created_ldda_ids = ''
+ for hda_id in hda_ids:
+ hda = trans.app.model.HistoryDatasetAssociation.get( hda_id )
+ if hda:
+ ldda = hda.to_library_dataset_dataset_association( target_folder=folder, replace_dataset=replace_dataset )
+ created_ldda_ids = '%s,%s' % ( created_ldda_ids, str( ldda.id ) )
+ dataset_names.append( ldda.name )
+ if not replace_dataset:
+ # If replace_dataset is None, the Library level permissions will be taken from the folder and applied to the new
+ # LDDA and LibraryDataset.
+ trans.app.security_agent.copy_library_permissions( folder, ldda )
+ trans.app.security_agent.copy_library_permissions( folder, ldda.library_dataset )
+ # Permissions must be the same on the LibraryDatasetDatasetAssociation and the associated LibraryDataset
+ trans.app.security_agent.copy_library_permissions( ldda.library_dataset, ldda )
+ else:
+ msg = "The requested HistoryDatasetAssociation id %s is invalid" % str( hda_id )
+ return trans.response.send_redirect( web.url_for( controller='library_admin',
+ action='browse_library',
+ id=library_id,
+ msg=util.sanitize_text( msg ),
+ messagetype='error' ) )
+ if created_ldda_ids:
+ created_ldda_ids = created_ldda_ids.lstrip( ',' )
+ ldda_id_list = created_ldda_ids.split( ',' )
+ total_added = len( ldda_id_list )
+ if replace_dataset:
+ msg = "Added %d dataset versions to the library dataset '%s' in the folder '%s'." % ( total_added, replace_dataset.name, folder.name )
+ else:
+ if not folder.parent:
+ # Libraries have the same name as their root_folder
+ msg = "Added %d datasets to the library '%s' ( each is selected ). " % ( total_added, folder.name )
+ else:
+ msg = "Added %d datasets to the folder '%s' ( each is selected ). " % ( total_added, folder.name )
+ msg += "Click the Go button at the bottom of this page to edit the permissions on these datasets if necessary."
+ return trans.response.send_redirect( web.url_for( controller='library_admin',
+ action='browse_library',
+ id=library_id,
+ created_ldda_ids=created_ldda_ids,
+ msg=util.sanitize_text( msg ),
+ messagetype='done' ) )
+ else:
+ msg = 'Select at least one dataset from the list of active datasets in your current history'
+ messagetype = 'error'
+ last_used_build = folder.genome_build
+ upload_option = params.get( 'upload_option', 'import_from_history' )
+ # Send list of data formats to the form so the "extension" select list can be populated dynamically
+ file_formats = trans.app.datatypes_registry.upload_file_formats
+ # Send list of genome builds to the form so the "dbkey" select list can be populated dynamically
+ def get_dbkey_options( last_used_build ):
+ for dbkey, build_name in util.dbnames:
+ yield build_name, dbkey, ( dbkey==last_used_build )
+ dbkeys = get_dbkey_options( last_used_build )
+ # Send list of roles to the form so the dataset can be associated with 1 or more of them.
+ roles = trans.app.model.Role.filter( trans.app.model.Role.table.c.deleted==False ).order_by( trans.app.model.Role.c.name ).all()
+ return trans.fill_template( "/admin/library/new_dataset.mako",
+ upload_option=upload_option,
+ library_id=library_id,
+ folder_id=folder_id,
+ replace_id=replace_id,
+ file_formats=file_formats,
+ dbkeys=dbkeys,
+ last_used_build=last_used_build,
+ roles=roles,
+ history=history,
+ widgets=widgets,
+ msg=msg,
+ messagetype=messagetype )
+ @web.expose
+ @web.require_admin
+ def info_template( self, trans, library_id, id=None, folder_id=None, ldda_id=None, **kwd ):
+ params = util.Params( kwd )
+ msg = util.restore_text( params.get( 'msg', '' ) )
+ messagetype = params.get( 'messagetype', 'done' )
+ if id:
+ library_item = trans.app.model.FormDefinition.get( int( id ) )
+ library_item_desc = 'information template'
+ response_action = 'info_template'
+ response_id = id
+ elif folder_id:
+ library_item = trans.app.model.LibraryFolder.get( int( folder_id ) )
+ library_item_desc = 'folder'
+ response_action = 'folder'
+ response_id = folder_id
+ elif ldda_id:
+ library_item = trans.app.model.LibraryDatasetDatasetAssociation.get( int( ldda_id ) )
+ library_item_desc = 'library dataset'
+ response_action = 'library_dataset_dataset_association'
+ response_id = ldda_id
+ else:
+ library_item = trans.app.model.Library.get( int( library_id ) )
+ library_item_desc = 'library'
+ response_action = 'browse_library'
+ response_id = library_id
+ forms = get_all_forms( trans, filter=dict(deleted=False) )
+ if not forms:
+ msg = "There are no forms on which to base the template, so create a form and "
+ msg += "try again to add the information template to the %s." % library_item_desc
+ trans.response.send_redirect( web.url_for( controller='forms',
+ action='new',
+ new=True,
+ msg=msg,
+ messagetype='done' ) )
+ if params.get( 'add', False ):
+ if params.get( 'add_info_template_button', False ):
+ form = trans.app.model.FormDefinition.get( int( kwd[ 'form_id' ] ) )
+ #fields = list( copy.deepcopy( form.fields ) )
+ form_values = trans.app.model.FormValues( form, [] )
+ form_values.flush()
+ if folder_id:
+ assoc = trans.app.model.LibraryFolderInfoAssociation( library_item, form, form_values )
+ elif ldda_id:
+ assoc = trans.app.model.LibraryDatasetDatasetInfoAssociation( library_item, form, form_values )
+ else:
+ assoc = trans.app.model.LibraryInfoAssociation( library_item, form, form_values )
+ assoc.flush()
+ msg = 'An information template based on the form "%s" has been added to this %s.' % ( form.name, library_item_desc )
+ trans.response.send_redirect( web.url_for( controller='library_admin',
+ action=response_action,
+ id=response_id,
+ msg=msg,
+ message_type='done' ) )
+ return trans.fill_template( '/admin/library/select_info_template.mako',
+ library_item_name=library_item.name,
+ library_item_desc=library_item_desc,
+ library_id=library_id,
+ folder_id=folder_id,
+ ldda_id=ldda_id,
+ forms=forms,
+ msg=msg,
+ messagetype=messagetype )
+ @web.expose
+ @web.require_admin
+ def edit_template_info( self, trans, library_id, num_widgets, library_item_id=None, library_item_type=None, **kwd ):
+ params = util.Params( kwd )
+ msg = util.restore_text( params.get( 'msg', '' ) )
+ messagetype = params.get( 'messagetype', 'done' )
+ folder_id = None
+ if library_item_type == 'library':
+ library_item = trans.app.model.Library.get( library_item_id )
+ elif library_item_type == 'library_dataset':
+ library_item = trans.app.model.LibraryDataset.get( library_item_id )
+ elif library_item_type == 'folder':
+ library_item = trans.app.model.LibraryFolder.get( library_item_id )
+ elif library_item_type == 'library_dataset_dataset_association':
+ library_item = trans.app.model.LibraryDatasetDatasetAssociation.get( library_item_id )
+ # This response_action method requires a folder_id
+ folder_id = library_item.library_dataset.folder.id
+ else:
+ msg = "Invalid library item type ( %s ) specified, id ( %s )" % ( str( library_item_type ), str( library_item_id ) )
+ return trans.response.send_redirect( web.url_for( controller='library_admin',
+ action='browse_library',
+ id=library_id,
+ msg=util.sanitize_text( msg ),
+ messagetype='error' ) )
+ # Save updated template field contents
+ field_contents = []
+ for index in range( int( num_widgets ) ):
+ field_contents.append( util.restore_text( params.get( 'field_%i' % ( index ), '' ) ) )
+ if field_contents:
+ # Since information templates are inherited, the template fields can be displayed on the information
+ # page for a folder or library dataset when it has no info_association object. If the user has added
+ # field contents on an inherited template via a parent's info_association, we'll need to create a new
+ # form_values and info_association for the current object.
+ info_association = library_item.get_info_association( restrict=True )
+ if info_association:
+ template = info_association.template
+ info = info_association.info
+ form_values = trans.app.model.FormValues.get( info.id )
+ # Update existing content only if it has changed
+ if form_values.content != field_contents:
+ form_values.content = field_contents
+ form_values.flush()
+ else:
+ # Inherit the next available info_association so we can get the template
+ info_association = library_item.get_info_association()
+ template = info_association.template
+ # Create a new FormValues object
+ form_values = trans.app.model.FormValues( template, field_contents )
+ form_values.flush()
+ # Create a new info_association between the current library item and form_values
+ if library_item_type == 'folder':
+ info_association = trans.app.model.LibraryFolderInfoAssociation( library_item, template, form_values )
+ info_association.flush()
+ elif library_item_type == 'library_dataset_dataset_association':
+ info_association = trans.app.model.LibraryDatasetDatasetInfoAssociation( library_item, template, form_values )
+ info_association.flush()
+ msg = 'The information has been updated.'
+ return trans.response.send_redirect( web.url_for( controller='library_admin',
+ action=library_item_type,
+ id=library_item.id,
+ library_id=library_id,
+ folder_id=folder_id,
+ edit_info=True,
+ msg=util.sanitize_text( msg ),
+ messagetype='done' ) )
+ @web.expose
+ @web.require_admin
+ def download_dataset_from_folder(self, trans, id, library_id=None, **kwd):
+ """Catches the dataset id and displays file contents as directed"""
+ # id must refer to a LibraryDatasetDatasetAssociation object
+ ldda = trans.app.model.LibraryDatasetDatasetAssociation.get( id )
+ if not ldda.dataset:
+ msg = 'Invalid LibraryDatasetDatasetAssociation id %s received for file downlaod' % str( id )
+ return trans.response.send_redirect( web.url_for( controller='library_admin',
+ action='browse_library',
+ id=library_id,
+ msg=util.sanitize_text( msg ),
+ messagetype='error' ) )
+ mime = trans.app.datatypes_registry.get_mimetype_by_extension( ldda.extension.lower() )
+ trans.response.set_content_type( mime )
+ fStat = os.stat( ldda.file_name )
+ trans.response.headers[ 'Content-Length' ] = int( fStat.st_size )
+ valid_chars = '.,^_-()[]0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
+ fname = ldda.name
+ fname = ''.join( c in valid_chars and c or '_' for c in fname )[ 0:150 ]
+ trans.response.headers[ "Content-Disposition" ] = "attachment; filename=GalaxyLibraryDataset-%s-[%s]" % ( str( id ), fname )
+ try:
+ return open( ldda.file_name )
+ except:
+ msg = 'This dataset contains no content'
+ return trans.response.send_redirect( web.url_for( controller='library_admin',
+ action='browse_library',
+ id=library_id,
+ msg=util.sanitize_text( msg ),
+ messagetype='error' ) )
+ @web.expose
+ @web.require_admin
+ def datasets( self, trans, library_id, **kwd ):
+ # This method is used by the select list labeled "Perform action on selected datasets"
+ # on the admin library browser.
+ params = util.Params( kwd )
+ msg = util.restore_text( params.get( 'msg', '' ) )
+ messagetype = params.get( 'messagetype', 'done' )
+ if params.get( 'action_on_datasets_button', False ):
+ if not params.ldda_ids:
+ msg = "At least one dataset must be selected for %s" % params.action
+ trans.response.send_redirect( web.url_for( controller='library_admin',
+ action='browse_library',
+ id=library_id,
+ msg=util.sanitize_text( msg ),
+ messagetype='error' ) )
+ ldda_ids = util.listify( params.ldda_ids )
+ if params.action == 'edit':
+ # We need the folder containing the LibraryDatasetDatasetAssociation(s)
+ ldda = trans.app.model.LibraryDatasetDatasetAssociation.get( ldda_ids[0] )
+ trans.response.send_redirect( web.url_for( controller='library_admin',
+ action='library_dataset_dataset_association',
+ library_id=library_id,
+ folder_id=ldda.library_dataset.folder.id,
+ id=",".join( ldda_ids ),
+ permissions=True,
+ msg=util.sanitize_text( msg ),
+ messagetype=messagetype ) )
+ elif params.action == 'delete':
+ for id in ldda_ids:
+ ldda = trans.app.model.LibraryDatasetDatasetAssociation.get( id )
+ ldda.deleted = True
+ ldda.flush()
+ msg = "The selected datasets have been removed from this library"
+ trans.response.send_redirect( web.url_for( controller='library_admin',
+ action='browse_library',
+ id=library_id,
+ show_deleted=False,
+ msg=util.sanitize_text( msg ),
+ messagetype='done' ) )
+ else:
+ msg = "Action %s is not yet implemented" % str( params.action )
+ trans.response.send_redirect( web.url_for( controller='library_admin',
+ action='browse_library',
+ id=library_id,
+ msg=util.sanitize_text( msg ),
+ messagetype='error' ) )
+ else:
+ trans.response.send_redirect( web.url_for( controller='library_admin',
+ action='browse_library',
+ id=library_id,
+ msg=util.sanitize_text( msg ),
+ messagetype=messagetype ) )
+ @web.expose
+ @web.require_admin
+ def delete_library_item( self, trans, library_id, library_item_id, library_item_type ):
+ # This action will handle deleting all types of library items. State is saved for libraries and
+ # folders ( i.e., if undeleted, the state of contents of the library or folder will remain, so previously
+ # deleted / purged contents will have the same state ). When a library or folder has been deleted for
+ # the amount of time defined in the cleanup_datasets.py script, the library or folder and all of its
+ # contents will be purged. The association between this method and the cleanup_datasets.py script
+ # enables clean maintenance of libraries and library dataset disk files. This is also why the following
+ # 3 objects, and not any of the associations ( the cleanup_datasets.py scipot handles everything else ).
+ library_item_types = { 'library': trans.app.model.Library,
+ 'folder': trans.app.model.LibraryFolder,
+ 'library_dataset': trans.app.model.LibraryDataset }
+ if library_item_type not in library_item_types:
+ msg = 'Bad library_item_type specified: %s' % str( library_item_type )
+ messagetype = 'error'
+ else:
+ if library_item_type == 'library_dataset':
+ library_item_desc = 'Dataset'
+ else:
+ library_item_desc = library_item_type.capitalize()
+ library_item = library_item_types[ library_item_type ].get( int( library_item_id ) )
+ library_item.deleted = True
+ library_item.flush()
+ msg = util.sanitize_text( "%s '%s' has been marked deleted" % ( library_item_desc, library_item.name ) )
+ messagetype = 'done'
+ if library_item_type == 'library':
+ return self.browse_libraries( trans, msg=msg, messagetype=messagetype )
+ else:
+ return self.browse_library( trans, id=library_id , msg=msg, messagetype=messagetype )
+ @web.expose
+ @web.require_admin
+ def undelete_library_item( self, trans, library_id, library_item_id, library_item_type ):
+ # This action will handle undeleting all types of library items
+ library_item_types = { 'library': trans.app.model.Library,
+ 'folder': trans.app.model.LibraryFolder,
+ 'library_dataset': trans.app.model.LibraryDataset }
+ if library_item_type not in library_item_types:
+ msg = 'Bad library_item_type specified: %s' % str( library_item_type )
+ messagetype = 'error'
+ else:
+ if library_item_type == 'library_dataset':
+ library_item_desc = 'Dataset'
+ else:
+ library_item_desc = library_item_type.capitalize()
+ library_item = library_item_types[ library_item_type ].get( int( library_item_id ) )
+ if library_item.purged:
+ msg = '%s %s has been purged, so it cannot be undeleted' % ( library_item_desc, library_item.name )
+ messagetype = 'error'
+ else:
+ library_item.deleted = False
+ library_item.flush()
+ msg = util.sanitize_text( "%s '%s' has been marked undeleted" % ( library_item_desc, library_item.name ) )
+ messagetype = 'done'
+ if library_item_type == 'library':
+ return self.browse_libraries( trans, msg=msg, messagetype=messagetype )
+ else:
+ return self.browse_library( trans, id=library_id , msg=msg, messagetype=messagetype )
diff -r f2af04af3caa -r d301a67eda40 templates/admin/index.mako
--- a/templates/admin/index.mako Fri Sep 11 16:09:02 2009 -0400
+++ b/templates/admin/index.mako Mon Sep 14 11:05:36 2009 -0400
@@ -89,7 +89,7 @@
</div>
<div class="toolSectionBody">
<div class="toolSectionBg">
- <div class="toolTitle"><a href="${h.url_for( controller='admin', action='browse_libraries' )}" target="galaxy_main">Manage data libraries</a></div>
+ <div class="toolTitle"><a href="${h.url_for( controller='library_admin', action='browse_libraries' )}" target="galaxy_main">Manage data libraries</a></div>
</div>
</div>
<div class="toolSectionPad"></div>
diff -r f2af04af3caa -r d301a67eda40 templates/admin/library/browse_libraries.mako
--- a/templates/admin/library/browse_libraries.mako Fri Sep 11 16:09:02 2009 -0400
+++ b/templates/admin/library/browse_libraries.mako Mon Sep 14 11:05:36 2009 -0400
@@ -13,10 +13,10 @@
<ul class="manage-table-actions">
%if not deleted:
<li>
- <a class="action-button" href="${h.url_for( controller='admin', action='library', new=True )}"><span>Create a new data library</span></a>
+ <a class="action-button" href="${h.url_for( controller='library_admin', action='library', new=True )}"><span>Create a new data library</span></a>
</li>
<li>
- <a class="action-button" href="${h.url_for( controller='admin', action='deleted_libraries' )}"><span>Manage deleted libraries</span></a>
+ <a class="action-button" href="${h.url_for( controller='library_admin', action='deleted_libraries' )}"><span>Manage deleted libraries</span></a>
</li>
%endif
</ul>
@@ -42,7 +42,7 @@
<tbody>
%for library in libraries:
<tr class="libraryRow libraryOrFolderRow" id="libraryRow">
- <td><a href="${h.url_for( controller='admin', action='browse_library', id=library.id, deleted=deleted, show_deleted=show_deleted )}">${library.name}</a></td>
+ <td><a href="${h.url_for( controller='library_admin', action='browse_library', id=library.id, deleted=deleted, show_deleted=show_deleted )}">${library.name}</a></td>
<td><i>${library.description}</i></td>
</tr>
%endfor
diff -r f2af04af3caa -r d301a67eda40 templates/admin/library/browse_library.mako
--- a/templates/admin/library/browse_library.mako Fri Sep 11 16:09:02 2009 -0400
+++ b/templates/admin/library/browse_library.mako Mon Sep 14 11:05:36 2009 -0400
@@ -97,26 +97,26 @@
<input type="checkbox" name="ldda_ids" value="${ldda.id}"/>
%endif
<span class="libraryItemDeleted-${ldda.deleted}">
- <a href="${h.url_for( controller='admin', action='library_dataset_dataset_association', library_id=library.id, folder_id=folder.id, id=ldda.id, info=True, deleted=deleted, show_deleted=show_deleted )}"><b>${ldda.name[:50]}</b></a>
+ <a href="${h.url_for( controller='library_admin', action='library_dataset_dataset_association', library_id=library.id, folder_id=folder.id, id=ldda.id, info=True, deleted=deleted, show_deleted=show_deleted )}"><b>${ldda.name[:50]}</b></a>
</span>
<a id="dataset-${ldda.id}-popup" class="popup-arrow" style="display: none;">▼</a>
%if not library.deleted and not folder.deleted and not library_dataset.deleted:
<div popupmenu="dataset-${ldda.id}-popup">
- <a class="action-button" href="${h.url_for( controller='admin', action='library_dataset_dataset_association', library_id=library.id, folder_id=folder.id, id=ldda.id, edit_info=True )}">Edit this dataset's information</a>
+ <a class="action-button" href="${h.url_for( controller='library_admin', action='library_dataset_dataset_association', library_id=library.id, folder_id=folder.id, id=ldda.id, edit_info=True )}">Edit this dataset's information</a>
## We're disabling the ability to add templates at the LDDA and LibraryDataset level, but will leave this here for possible future use
- ##<a class="action-button" href="${h.url_for( controller='admin', action='info_template', library_id=library.id, library_dataset_id=library_dataset.id, new_template=True )}">Add an information template to this dataset</a>
- <a class="action-button" href="${h.url_for( controller='admin', action='library_dataset_dataset_association', library_id=library.id, folder_id=folder.id, id=ldda.id, permissions=True )}">Edit this dataset's permissions</a>
+ ##<a class="action-button" href="${h.url_for( controller='library_admin', action='info_template', library_id=library.id, library_dataset_id=library_dataset.id, new_template=True )}">Add an information template to this dataset</a>
+ <a class="action-button" href="${h.url_for( controller='library_admin', action='library_dataset_dataset_association', library_id=library.id, folder_id=folder.id, id=ldda.id, permissions=True )}">Edit this dataset's permissions</a>
%if current_version:
- <a class="action-button" href="${h.url_for( controller='admin', action='library_dataset_dataset_association', library_id=library.id, folder_id=folder.id, replace_id=library_dataset.id )}">Upload a new version of this dataset</a>
+ <a class="action-button" href="${h.url_for( controller='library_admin', action='library_dataset_dataset_association', library_id=library.id, folder_id=folder.id, replace_id=library_dataset.id )}">Upload a new version of this dataset</a>
%endif
%if ldda.has_data:
- <a class="action-button" href="${h.url_for( controller='admin', action='download_dataset_from_folder', id=ldda.id, library_id=library.id )}">Download this dataset</a>
+ <a class="action-button" href="${h.url_for( controller='library_admin', action='download_dataset_from_folder', id=ldda.id, library_id=library.id )}">Download this dataset</a>
%endif
- <a class="action-button" confirm="Click OK to delete dataset '${ldda.name}'." href="${h.url_for( controller='admin', action='delete_library_item', library_id=library.id, library_item_id=library_dataset.id, library_item_type='library_dataset' )}">Delete this dataset</a>
+ <a class="action-button" confirm="Click OK to delete dataset '${ldda.name}'." href="${h.url_for( controller='library_admin', action='delete_library_item', library_id=library.id, library_item_id=library_dataset.id, library_item_type='library_dataset' )}">Delete this dataset</a>
</div>
%elif not library.deleted and not folder.deleted and library_dataset.deleted:
<div popupmenu="dataset-${ldda.id}-popup">
- <a class="action-button" href="${h.url_for( controller='admin', action='undelete_library_item', library_id=library.id, library_item_id=library_dataset.id, library_item_type='library_dataset' )}">Undelete this dataset</a>
+ <a class="action-button" href="${h.url_for( controller='library_admin', action='undelete_library_item', library_id=library.id, library_item_id=library_dataset.id, library_item_type='library_dataset' )}">Undelete this dataset</a>
</div>
%endif
</td>
@@ -156,23 +156,23 @@
%endif
%if not folder.deleted:
<div popupmenu="folder-${folder.id}-popup">
- <a class="action-button" href="${h.url_for( controller='admin', action='library_dataset_dataset_association', library_id=library_id, folder_id=folder.id )}">Add datasets to this folder</a>
- <a class="action-button" href="${h.url_for( controller='admin', action='folder', new=True, id=folder.id, library_id=library_id )}">Create a new sub-folder in this folder</a>
- <a class="action-button" href="${h.url_for( controller='admin', action='folder', information=True, id=folder.id, library_id=library_id )}">Edit this folder's information</a>
+ <a class="action-button" href="${h.url_for( controller='library_admin', action='library_dataset_dataset_association', library_id=library_id, folder_id=folder.id )}">Add datasets to this folder</a>
+ <a class="action-button" href="${h.url_for( controller='library_admin', action='folder', new=True, id=folder.id, library_id=library_id )}">Create a new sub-folder in this folder</a>
+ <a class="action-button" href="${h.url_for( controller='library_admin', action='folder', information=True, id=folder.id, library_id=library_id )}">Edit this folder's information</a>
## Editing templates disabled until we determine optimal approach to re-linking library item to new version of form definition
##%if folder.info_association:
## <% form_id = folder.info_association[0].template.id %>
## <a class="action-button" href="${h.url_for( controller='forms', action='edit', form_id=form_id, show_form=True )}">Edit this folder's information template</a>
##%else:
%if not folder.info_association:
- <a class="action-button" href="${h.url_for( controller='admin', action='info_template', library_id=library.id, folder_id=folder.id, add=True )}">Add an information template to this folder</a>
+ <a class="action-button" href="${h.url_for( controller='library_admin', action='info_template', library_id=library.id, folder_id=folder.id, add=True )}">Add an information template to this folder</a>
%endif
- <a class="action-button" href="${h.url_for( controller='admin', action='folder', permissions=True, id=folder.id, library_id=library_id )}">Edit this folder's permissions</a>
- <a class="action-button" confirm="Click OK to delete the folder '${folder.name}.'" href="${h.url_for( controller='admin', action='delete_library_item', library_id=library_id, library_item_id=folder.id, library_item_type='folder' )}">Delete this folder and its contents</a>
+ <a class="action-button" href="${h.url_for( controller='library_admin', action='folder', permissions=True, id=folder.id, library_id=library_id )}">Edit this folder's permissions</a>
+ <a class="action-button" confirm="Click OK to delete the folder '${folder.name}.'" href="${h.url_for( controller='library_admin', action='delete_library_item', library_id=library_id, library_item_id=folder.id, library_item_type='folder' )}">Delete this folder and its contents</a>
</div>
%elif not deleted and folder.deleted and not folder.purged:
<div popupmenu="folder-${folder.id}-popup">
- <a class="action-button" href="${h.url_for( controller='admin', action='undelete_library_item', library_id=library_id, library_item_id=folder.id, library_item_type='folder' )}">Undelete this folder</a>
+ <a class="action-button" href="${h.url_for( controller='library_admin', action='undelete_library_item', library_id=library_id, library_item_id=folder.id, library_item_type='folder' )}">Undelete this folder</a>
</div>
%endif
</li>
@@ -216,10 +216,10 @@
<ul class="manage-table-actions">
%if not deleted:
<li>
- <a class="action-button" href="${h.url_for( controller='admin', action='library_dataset_dataset_association', library_id=library.id, folder_id=library.root_folder.id )}"><span>Add datasets to this data library</span></a>
+ <a class="action-button" href="${h.url_for( controller='library_admin', action='library_dataset_dataset_association', library_id=library.id, folder_id=library.root_folder.id )}"><span>Add datasets to this data library</span></a>
</li>
<li>
- <a class="action-button" href="${h.url_for( controller='admin', action='folder', new=True, id=library.root_folder.id, library_id=library.id )}">Add a folder to this data library</a>
+ <a class="action-button" href="${h.url_for( controller='library_admin', action='folder', new=True, id=library.root_folder.id, library_id=library.id )}">Add a folder to this data library</a>
</li>
%endif
</ul>
@@ -228,7 +228,7 @@
${render_msg( msg, messagetype )}
%endif
-<form name="update_multiple_datasets" action="${h.url_for( controller='admin', action='datasets', library_id=library.id )}" onSubmit="javascript:return checkForm();" method="post">
+<form name="update_multiple_datasets" action="${h.url_for( controller='library_admin', action='datasets', library_id=library.id )}" onSubmit="javascript:return checkForm();" method="post">
<ul>
<li class="libraryRow libraryOrFolderRow" id="libraryRow">
<div class="rowTitle">
@@ -244,24 +244,24 @@
<a id="library-${library.id}-popup" class="popup-arrow" style="display: none;">▼</a>
<div popupmenu="library-${library.id}-popup">
%if not deleted:
- <a class="action-button" href="${h.url_for( controller='admin', action='library', id=library.id, information=True )}">Edit this data library's information</a>
+ <a class="action-button" href="${h.url_for( controller='library_admin', action='library', id=library.id, information=True )}">Edit this data library's information</a>
## Editing templates disabled until we determine optimal approach to re-linking library item to new version of form definition
##%if library.info_association:
## <% form_id = library.info_association[0].template.id %>
## <a class="action-button" href="${h.url_for( controller='forms', action='edit', form_id=form_id, show_form=True )}">Edit this data library's information template</a>
##%else:
%if not library.info_association:
- <a class="action-button" href="${h.url_for( controller='admin', action='info_template', library_id=library.id, add=True )}">Add an information template to this data library</a>
+ <a class="action-button" href="${h.url_for( controller='library_admin', action='info_template', library_id=library.id, add=True )}">Add an information template to this data library</a>
%endif
- <a class="action-button" href="${h.url_for( controller='admin', action='library', id=library.id, permissions=True )}">Edit this data library's permissions</a>
- <a class="action-button" confirm="Click OK to delete the library named '${library.name}'." href="${h.url_for( controller='admin', action='delete_library_item', library_id=library.id, library_item_id=library.id, library_item_type='library' )}">Delete this data library and its contents</a>
+ <a class="action-button" href="${h.url_for( controller='library_admin', action='library', id=library.id, permissions=True )}">Edit this data library's permissions</a>
+ <a class="action-button" confirm="Click OK to delete the library named '${library.name}'." href="${h.url_for( controller='library_admin', action='delete_library_item', library_id=library.id, library_item_id=library.id, library_item_type='library' )}">Delete this data library and its contents</a>
%if show_deleted:
- <a class="action-button" href="${h.url_for( controller='admin', action='browse_library', id=library.id, show_deleted=False )}">Hide deleted data library items</a>
+ <a class="action-button" href="${h.url_for( controller='library_admin', action='browse_library', id=library.id, show_deleted=False )}">Hide deleted data library items</a>
%else:
- <a class="action-button" href="${h.url_for( controller='admin', action='browse_library', id=library.id, show_deleted=True )}">Show deleted data library items</a>
+ <a class="action-button" href="${h.url_for( controller='library_admin', action='browse_library', id=library.id, show_deleted=True )}">Show deleted data library items</a>
%endif
%elif not library.purged:
- <a class="action-button" href="${h.url_for( controller='admin', action='undelete_library_item', library_id=library.id, library_item_id=library.id, library_item_type='library' )}">Undelete this data library</a>
+ <a class="action-button" href="${h.url_for( controller='library_admin', action='undelete_library_item', library_id=library.id, library_item_id=library.id, library_item_type='library' )}">Undelete this data library</a>
%endif
</div>
</th>
diff -r f2af04af3caa -r d301a67eda40 templates/admin/library/common.mako
--- a/templates/admin/library/common.mako Fri Sep 11 16:09:02 2009 -0400
+++ b/templates/admin/library/common.mako Mon Sep 14 11:05:36 2009 -0400
@@ -22,7 +22,7 @@
<div class="toolFormTitle">Other information about ${library_item_desc} ${library_item.name}</div>
<div class="toolFormBody">
%if editable:
- <form name="edit_info" action="${h.url_for( controller='admin', action='edit_template_info', library_id=library_id, num_widgets=len( widgets ) )}" method="post">
+ <form name="edit_info" action="${h.url_for( controller='library_admin', action='edit_template_info', library_id=library_id, num_widgets=len( widgets ) )}" method="post">
<input type="hidden" name="library_item_id" value="${library_item.id}"/>
<input type="hidden" name="library_item_type" value="${library_item_type}"/>
%for i, field in enumerate( widgets ):
diff -r f2af04af3caa -r d301a67eda40 templates/admin/library/folder_info.mako
--- a/templates/admin/library/folder_info.mako Fri Sep 11 16:09:02 2009 -0400
+++ b/templates/admin/library/folder_info.mako Mon Sep 14 11:05:36 2009 -0400
@@ -5,7 +5,7 @@
<br/><br/>
<ul class="manage-table-actions">
<li>
- <a class="action-button" href="${h.url_for( controller='admin', action='browse_library', id=library_id )}"><span>Browse this data library</span></a>
+ <a class="action-button" href="${h.url_for( controller='library_admin', action='browse_library', id=library_id )}"><span>Browse this data library</span></a>
</li>
</ul>
@@ -16,7 +16,7 @@
<div class="toolForm">
<div class="toolFormTitle">Edit folder name and description</div>
<div class="toolFormBody">
- <form name="folder" action="${h.url_for( controller='admin', action='folder', information=True, id=folder.id, library_id=library_id )}" method="post" >
+ <form name="folder" action="${h.url_for( controller='library_admin', action='folder', information=True, id=folder.id, library_id=library_id )}" method="post" >
<div class="form-row">
<label>Name:</label>
<input type="text" name="name" value="${folder.name}" size="40"/>
diff -r f2af04af3caa -r d301a67eda40 templates/admin/library/folder_permissions.mako
--- a/templates/admin/library/folder_permissions.mako Fri Sep 11 16:09:02 2009 -0400
+++ b/templates/admin/library/folder_permissions.mako Mon Sep 14 11:05:36 2009 -0400
@@ -5,7 +5,7 @@
<br/><br/>
<ul class="manage-table-actions">
<li>
- <a class="action-button" href="${h.url_for( controller='admin', action='browse_library', id=library_id )}"><span>Browse this data library</span></a>
+ <a class="action-button" href="${h.url_for( controller='library_admin', action='browse_library', id=library_id )}"><span>Browse this data library</span></a>
</li>
</ul>
@@ -17,4 +17,4 @@
roles = trans.app.model.Role.filter( trans.app.model.Role.table.c.deleted==False ).order_by( trans.app.model.Role.table.c.name ).all()
%>
-${render_permission_form( folder, folder.name, h.url_for( controller='admin', action='folder', id=folder.id, library_id=library_id, permissions=True ), roles )}
+${render_permission_form( folder, folder.name, h.url_for( controller='library_admin', action='folder', id=folder.id, library_id=library_id, permissions=True ), roles )}
diff -r f2af04af3caa -r d301a67eda40 templates/admin/library/ldda_edit_info.mako
--- a/templates/admin/library/ldda_edit_info.mako Fri Sep 11 16:09:02 2009 -0400
+++ b/templates/admin/library/ldda_edit_info.mako Mon Sep 14 11:05:36 2009 -0400
@@ -12,7 +12,7 @@
<ul class="manage-table-actions">
<li>
- <a class="action-button" href="${h.url_for( controller='admin', action='browse_library', id=library_id )}"><span>Browse this data library</span></a>
+ <a class="action-button" href="${h.url_for( controller='library_admin', action='browse_library', id=library_id )}"><span>Browse this data library</span></a>
</li>
</ul>
@@ -35,7 +35,7 @@
<div class="toolForm">
<div class="toolFormTitle">Edit attributes of ${ldda.name}</div>
<div class="toolFormBody">
- <form name="edit_attributes" action="${h.url_for( controller='admin', action='library_dataset_dataset_association', library_id=library_id, folder_id=ldda.library_dataset.folder.id, edit_info=True )}" method="post">
+ <form name="edit_attributes" action="${h.url_for( controller='library_admin', action='library_dataset_dataset_association', library_id=library_id, folder_id=ldda.library_dataset.folder.id, edit_info=True )}" method="post">
<input type="hidden" name="id" value="${ldda.id}"/>
<br/>
<div class="form-row">
@@ -73,7 +73,7 @@
<input type="submit" name="save" value="Save"/>
</div>
</form>
- <form name="auto_detect" action="${h.url_for( controller='admin', action='library_dataset_dataset_association', library_id=library_id, folder_id=ldda.library_dataset.folder.id, edit_info=True )}" method="post">
+ <form name="auto_detect" action="${h.url_for( controller='library_admin', action='library_dataset_dataset_association', library_id=library_id, folder_id=ldda.library_dataset.folder.id, edit_info=True )}" method="post">
<div class="form-row">
<input type="hidden" name="id" value="${ldda.id}"/>
<input type="submit" name="detect" value="Auto-detect"/>
@@ -89,7 +89,7 @@
<div class="toolFormTitle">Change data type of ${ldda.name}</div>
<div class="toolFormBody">
%if ldda.datatype.allow_datatype_change:
- <form name="change_datatype" action="${h.url_for( controller='admin', action='library_dataset_dataset_association', library_id=library_id, folder_id=ldda.library_dataset.folder.id, edit_info=True )}" method="post">
+ <form name="change_datatype" action="${h.url_for( controller='library_admin', action='library_dataset_dataset_association', library_id=library_id, folder_id=ldda.library_dataset.folder.id, edit_info=True )}" method="post">
<input type="hidden" name="id" value="${ldda.id}"/>
<div class="form-row">
<label>New Type:</label>
diff -r f2af04af3caa -r d301a67eda40 templates/admin/library/ldda_info.mako
--- a/templates/admin/library/ldda_info.mako Fri Sep 11 16:09:02 2009 -0400
+++ b/templates/admin/library/ldda_info.mako Mon Sep 14 11:05:36 2009 -0400
@@ -20,7 +20,7 @@
<ul class="manage-table-actions">
<li>
- <a class="action-button" href="${h.url_for( controller='admin', action='browse_library', id=library_id, deleted=library.deleted, show_deleted=show_deleted )}"><span>Browse this data library</span></a>
+ <a class="action-button" href="${h.url_for( controller='library_admin', action='browse_library', id=library_id, deleted=library.deleted, show_deleted=show_deleted )}"><span>Browse this data library</span></a>
</li>
</ul>
@@ -41,18 +41,18 @@
%if not library.deleted and not ldda.library_dataset.folder.deleted and not ldda.deleted:
<a id="dataset-${ldda.id}-popup" class="popup-arrow" style="display: none;">▼</a>
<div popupmenu="dataset-${ldda.id}-popup">
- <a class="action-button" href="${h.url_for( controller='admin', action='library_dataset_dataset_association', library_id=library_id, folder_id=ldda.library_dataset.folder.id, id=ldda.id, edit_info=True )}">Edit this dataset's information</a>
+ <a class="action-button" href="${h.url_for( controller='library_admin', action='library_dataset_dataset_association', library_id=library_id, folder_id=ldda.library_dataset.folder.id, id=ldda.id, edit_info=True )}">Edit this dataset's information</a>
## We're disabling the ability to add templates at the LDDA and LibraryDataset level, but will leave this here for possible future use
- ##<a class="action-button" href="${h.url_for( controller='admin', action='info_template', library_id=library_id, library_dataset_id=ldda.library_dataset.id, new_template=True )}">Add an information template to this dataset</a>
- <a class="action-button" href="${h.url_for( controller='admin', action='library_dataset_dataset_association', library_id=library_id, folder_id=ldda.library_dataset.folder.id, id=ldda.id, permissions=True )}">Edit this dataset's permissions</a>
+ ##<a class="action-button" href="${h.url_for( controller='library_admin', action='info_template', library_id=library_id, library_dataset_id=ldda.library_dataset.id, new_template=True )}">Add an information template to this dataset</a>
+ <a class="action-button" href="${h.url_for( controller='library_admin', action='library_dataset_dataset_association', library_id=library_id, folder_id=ldda.library_dataset.folder.id, id=ldda.id, permissions=True )}">Edit this dataset's permissions</a>
%if current_version:
- <a class="action-button" href="${h.url_for( controller='admin', action='library_dataset_dataset_association', library_id=library_id, folder_id=ldda.library_dataset.folder.id, replace_id=ldda.library_dataset.id )}">Upload a new version of this dataset</a>
+ <a class="action-button" href="${h.url_for( controller='library_admin', action='library_dataset_dataset_association', library_id=library_id, folder_id=ldda.library_dataset.folder.id, replace_id=ldda.library_dataset.id )}">Upload a new version of this dataset</a>
%endif
%if ldda.has_data:
- <a class="action-button" href="${h.url_for( controller='admin', action='download_dataset_from_folder', id=ldda.id, library_id=library_id )}">Download this dataset</a>
+ <a class="action-button" href="${h.url_for( controller='library_admin', action='download_dataset_from_folder', id=ldda.id, library_id=library_id )}">Download this dataset</a>
%endif
%if not library.deleted and not ldda.library_dataset.folder.deleted and not ldda.deleted:
- <a class="action-button" confirm="Click OK to remove dataset '${ldda.name}'?" href="${h.url_for( controller='admin', action='library_dataset_dataset_association', library_id=library_id, folder_id=ldda.library_dataset.folder.id, id=ldda.id, delete=True )}">Delete this dataset</a>
+ <a class="action-button" confirm="Click OK to remove dataset '${ldda.name}'?" href="${h.url_for( controller='library_admin', action='library_dataset_dataset_association', library_id=library_id, folder_id=ldda.library_dataset.folder.id, id=ldda.id, delete=True )}">Delete this dataset</a>
%endif
</div>
%endif
@@ -104,7 +104,7 @@
<div class="toolFormTitle">Expired versions of ${ldda.name}</div>
%for expired_ldda in expired_lddas:
<div class="form-row">
- <a href="${h.url_for( controller='admin', action='library_dataset_dataset_association', library_id=library_id, folder_id=expired_ldda.library_dataset.folder.id, id=expired_ldda.id, info=True )}">${expired_ldda.name}</a>
+ <a href="${h.url_for( controller='library_admin', action='library_dataset_dataset_association', library_id=library_id, folder_id=expired_ldda.library_dataset.folder.id, id=expired_ldda.id, info=True )}">${expired_ldda.name}</a>
</div>
%endfor
%endif
diff -r f2af04af3caa -r d301a67eda40 templates/admin/library/ldda_permissions.mako
--- a/templates/admin/library/ldda_permissions.mako Fri Sep 11 16:09:02 2009 -0400
+++ b/templates/admin/library/ldda_permissions.mako Mon Sep 14 11:05:36 2009 -0400
@@ -15,7 +15,7 @@
<br/><br/>
<ul class="manage-table-actions">
<li>
- <a class="action-button" href="${h.url_for( controller='admin', action='browse_library', id=library_id )}"><span>Browse this data library</span></a>
+ <a class="action-button" href="${h.url_for( controller='library_admin', action='browse_library', id=library_id )}"><span>Browse this data library</span></a>
</li>
</ul>
@@ -35,7 +35,7 @@
<a id="ldda-${ldd_assoc.id}-popup" class="popup-arrow" style="display: none;">▼</a>
</div>
<div popupmenu="ldd_assoc-${ldd_assoc.id}-popup">
- <a class="action-button" href="${h.url_for( controller='admin', action='library_dataset', id=ldd_assoc.library_dataset_id, library_id=library_id )}">Manage this dataset's versions</a>
+ <a class="action-button" href="${h.url_for( controller='library_admin', action='library_dataset', id=ldd_assoc.library_dataset_id, library_id=library_id )}">Manage this dataset's versions</a>
</div>
</td>
<td>
@@ -59,4 +59,4 @@
%endif
<% ldda_ids = ",".join( [ str( d.id ) for d in lddas ] ) %>
-${render_permission_form( lddas[0], name_str, h.url_for( controller='admin', action='library_dataset_dataset_association', library_id=library_id, folder_id=lddas[0].library_dataset.folder.id, id=ldda_ids, permissions=True ), roles )}
+${render_permission_form( lddas[0], name_str, h.url_for( controller='library_admin', action='library_dataset_dataset_association', library_id=library_id, folder_id=lddas[0].library_dataset.folder.id, id=ldda_ids, permissions=True ), roles )}
diff -r f2af04af3caa -r d301a67eda40 templates/admin/library/library_dataset_info.mako
--- a/templates/admin/library/library_dataset_info.mako Fri Sep 11 16:09:02 2009 -0400
+++ b/templates/admin/library/library_dataset_info.mako Mon Sep 14 11:05:36 2009 -0400
@@ -11,7 +11,7 @@
<ul class="manage-table-actions">
<li>
- <a class="action-button" href="${h.url_for( controller='admin', action='browse_library', id=library_id )}"><span>Browse this data library</span></a>
+ <a class="action-button" href="${h.url_for( controller='library_admin', action='browse_library', id=library_id )}"><span>Browse this data library</span></a>
</li>
</ul>
@@ -22,7 +22,7 @@
<div class="toolForm">
<div class="toolFormTitle">Edit attributes of ${library_dataset.name}</div>
<div class="toolFormBody">
- <form name="edit_attributes" action="${h.url_for( controller='admin', action='library_dataset' )}" method="post">
+ <form name="edit_attributes" action="${h.url_for( controller='library_admin', action='library_dataset' )}" method="post">
<input type="hidden" name="id" value="${library_dataset.id}"/>
<div class="form-row">
<label>Name:</label>
diff -r f2af04af3caa -r d301a67eda40 templates/admin/library/library_dataset_permissions.mako
--- a/templates/admin/library/library_dataset_permissions.mako Fri Sep 11 16:09:02 2009 -0400
+++ b/templates/admin/library/library_dataset_permissions.mako Mon Sep 14 11:05:36 2009 -0400
@@ -11,7 +11,7 @@
<ul class="manage-table-actions">
<li>
- <a class="action-button" href="${h.url_for( controller='admin', action='browse_library', id=library_id )}"><span>Browse this data library</span></a>
+ <a class="action-button" href="${h.url_for( controller='library_admin', action='browse_library', id=library_id )}"><span>Browse this data library</span></a>
</li>
</ul>
@@ -23,4 +23,4 @@
roles = trans.app.model.Role.filter( trans.app.model.Role.table.c.deleted==False ).order_by( trans.app.model.Role.table.c.name ).all()
%>
-${render_permission_form( library_dataset, library_dataset.name, h.url_for( controller='admin', action='library_dataset', id=library_dataset.id, library_id=library_id, permissions=True ), roles )}
+${render_permission_form( library_dataset, library_dataset.name, h.url_for( controller='library_admin', action='library_dataset', id=library_dataset.id, library_id=library_id, permissions=True ), roles )}
diff -r f2af04af3caa -r d301a67eda40 templates/admin/library/library_info.mako
--- a/templates/admin/library/library_info.mako Fri Sep 11 16:09:02 2009 -0400
+++ b/templates/admin/library/library_info.mako Mon Sep 14 11:05:36 2009 -0400
@@ -5,7 +5,7 @@
<br/><br/>
<ul class="manage-table-actions">
<li>
- <a class="action-button" href="${h.url_for( controller='admin', action='browse_library', id=library.id )}"><span>Browse this data library</span></a>
+ <a class="action-button" href="${h.url_for( controller='library_admin', action='browse_library', id=library.id )}"><span>Browse this data library</span></a>
</li>
</ul>
@@ -16,7 +16,7 @@
<div class="toolForm">
<div class="toolFormTitle">Change library name and description</div>
<div class="toolFormBody">
- <form name="library" action="${h.url_for( controller='admin', action='library', information=True, id=library.id )}" method="post" >
+ <form name="library" action="${h.url_for( controller='library_admin', action='library', information=True, id=library.id )}" method="post" >
<div class="form-row">
<label>Name:</label>
<div style="float: left; width: 250px; margin-right: 10px;">
diff -r f2af04af3caa -r d301a67eda40 templates/admin/library/library_permissions.mako
--- a/templates/admin/library/library_permissions.mako Fri Sep 11 16:09:02 2009 -0400
+++ b/templates/admin/library/library_permissions.mako Mon Sep 14 11:05:36 2009 -0400
@@ -5,7 +5,7 @@
<br/><br/>
<ul class="manage-table-actions">
<li>
- <a class="action-button" href="${h.url_for( controller='admin', action='browse_library', id=library.id )}"><span>Browse this data library</span></a>
+ <a class="action-button" href="${h.url_for( controller='library_admin', action='browse_library', id=library.id )}"><span>Browse this data library</span></a>
</li>
</ul>
diff -r f2af04af3caa -r d301a67eda40 templates/admin/library/new_dataset.mako
--- a/templates/admin/library/new_dataset.mako Fri Sep 11 16:09:02 2009 -0400
+++ b/templates/admin/library/new_dataset.mako Mon Sep 14 11:05:36 2009 -0400
@@ -7,16 +7,16 @@
<b>Create new data library datasets</b>
<a id="upload-librarydataset--popup" class="popup-arrow" style="display: none;">▼</a>
<div popupmenu="upload-librarydataset--popup">
- <a class="action-button" href="${h.url_for( controller='admin', action='library_dataset_dataset_association', library_id=library_id, folder_id=folder_id, replace_id=replace_id, upload_option='upload_file' )}">Upload files</a>
+ <a class="action-button" href="${h.url_for( controller='library_admin', action='library_dataset_dataset_association', library_id=library_id, folder_id=folder_id, replace_id=replace_id, upload_option='upload_file' )}">Upload files</a>
%if trans.app.config.library_import_dir and os.path.exists( trans.app.config.library_import_dir ):
- <a class="action-button" href="${h.url_for( controller='admin', action='library_dataset_dataset_association', library_id=library_id, folder_id=folder_id, replace_id=replace_id, upload_option='upload_directory' )}">Upload directory of files</a>
+ <a class="action-button" href="${h.url_for( controller='library_admin', action='library_dataset_dataset_association', library_id=library_id, folder_id=folder_id, replace_id=replace_id, upload_option='upload_directory' )}">Upload directory of files</a>
%endif
- <a class="action-button" href="${h.url_for( controller='admin', action='library_dataset_dataset_association', library_id=library_id, folder_id=folder_id, replace_id=replace_id, upload_option='import_from_history' )}">Import datasets from your current history</a>
+ <a class="action-button" href="${h.url_for( controller='library_admin', action='library_dataset_dataset_association', library_id=library_id, folder_id=folder_id, replace_id=replace_id, upload_option='import_from_history' )}">Import datasets from your current history</a>
</div>
<br/><br/>
<ul class="manage-table-actions">
<li>
- <a class="action-button" href="${h.url_for( controller='admin', action='browse_library', id=library_id )}"><span>Browse this data library</span></a>
+ <a class="action-button" href="${h.url_for( controller='library_admin', action='browse_library', id=library_id )}"><span>Browse this data library</span></a>
</li>
</ul>
@@ -32,13 +32,13 @@
<div class="toolFormTitle">Upload a directory of files</div>
%endif
<div class="toolFormBody">
- <form name="tool_form" action="${h.url_for( controller='admin', action='library_dataset_dataset_association', library_id=library_id )}" enctype="multipart/form-data" method="post">
+ <form name="tool_form" action="${h.url_for( controller='library_admin', action='library_dataset_dataset_association', library_id=library_id )}" enctype="multipart/form-data" method="post">
<input type="hidden" name="folder_id" value="${folder_id}"/>
<input type="hidden" name="upload_option" value="${upload_option}"/>
%if replace_dataset:
<input type="hidden" name="replace_id" value="${replace_dataset.id}"/>
<div class="form-row">
- You are currently selecting a new file to replace '<a href="${h.url_for( controller='admin', action='library_dataset_dataset_association', library_id=library_id, folder_id=folder_id, id=replace_dataset.library_dataset_dataset_association.id )}">${replace_dataset.name}</a>'.
+ You are currently selecting a new file to replace '<a href="${h.url_for( controller='library_admin', action='library_dataset_dataset_association', library_id=library_id, folder_id=folder_id, id=replace_dataset.library_dataset_dataset_association.id )}">${replace_dataset.name}</a>'.
<div style="clear: both"></div>
</div>
%endif
@@ -184,13 +184,13 @@
<div class="toolFormTitle">Active datasets in your current history (${history.name})</div>
<div class="toolFormBody">
%if history and history.active_datasets:
- <form name="add_history_datasets_to_library" action="${h.url_for( controller='admin', action='add_history_datasets_to_library', library_id=library_id )}" enctype="multipart/form-data" method="post">
+ <form name="add_history_datasets_to_library" action="${h.url_for( controller='library_admin', action='add_history_datasets_to_library', library_id=library_id )}" enctype="multipart/form-data" method="post">
<input type="hidden" name="folder_id" value="${folder_id}"/>
<input type="hidden" name="upload_option" value="${upload_option}"/>
%if replace_dataset:
<input type="hidden" name="replace_id" value="${replace_dataset.id}"/>
<div class="form-row">
- You are currently selecting a new file to replace '<a href="${h.url_for( controller='admin', action='library_dataset_dataset_association', library_id=library_id, folder_id=folder_id, id=replace_dataset.library_dataset_dataset_association.id )}">${replace_dataset.name}</a>'.
+ You are currently selecting a new file to replace '<a href="${h.url_for( controller='library_admin', action='library_dataset_dataset_association', library_id=library_id, folder_id=folder_id, id=replace_dataset.library_dataset_dataset_association.id )}">${replace_dataset.name}</a>'.
<div style="clear: both"></div>
</div>
%endif
diff -r f2af04af3caa -r d301a67eda40 templates/admin/library/new_folder.mako
--- a/templates/admin/library/new_folder.mako Fri Sep 11 16:09:02 2009 -0400
+++ b/templates/admin/library/new_folder.mako Mon Sep 14 11:05:36 2009 -0400
@@ -4,7 +4,7 @@
<br/<br/>
<ul class="manage-table-actions">
<li>
- <a class="action-button" href="${h.url_for( controller='admin', action='browse_library', id=library_id )}"><span>Browse this data library</span></a>
+ <a class="action-button" href="${h.url_for( controller='library_admin', action='browse_library', id=library_id )}"><span>Browse this data library</span></a>
</li>
</ul>
@@ -15,7 +15,7 @@
<div class="toolForm">
<div class="toolFormTitle">Create a new folder</div>
<div class="toolFormBody">
- <form name="folder" action="${h.url_for( controller='admin', action='folder', id=folder.id, library_id=library_id )}" method="post" >
+ <form name="folder" action="${h.url_for( controller='library_admin', action='folder', id=folder.id, library_id=library_id )}" method="post" >
<div class="form-row">
<label>Name:</label>
<div style="float: left; width: 250px; margin-right: 10px;">
diff -r f2af04af3caa -r d301a67eda40 templates/admin/library/new_library.mako
--- a/templates/admin/library/new_library.mako Fri Sep 11 16:09:02 2009 -0400
+++ b/templates/admin/library/new_library.mako Mon Sep 14 11:05:36 2009 -0400
@@ -8,7 +8,7 @@
<div class="toolForm">
<div class="toolFormTitle">Create a new data library</div>
<div class="toolFormBody">
- <form name="library" action="${h.url_for( controller='admin', action='library' )}" method="post" >
+ <form name="library" action="${h.url_for( controller='library_admin', action='library' )}" method="post" >
<div class="form-row">
<label>Name:</label>
<div style="float: left; width: 250px; margin-right: 10px;">
diff -r f2af04af3caa -r d301a67eda40 templates/admin/library/select_info_template.mako
--- a/templates/admin/library/select_info_template.mako Fri Sep 11 16:09:02 2009 -0400
+++ b/templates/admin/library/select_info_template.mako Mon Sep 14 11:05:36 2009 -0400
@@ -4,7 +4,7 @@
<br/><br/>
<ul class="manage-table-actions">
<li>
- <a class="action-button" href="${h.url_for( controller='admin', action='browse_library', id=library_id )}"><span>Browse this data library</span></a>
+ <a class="action-button" href="${h.url_for( controller='library_admin', action='browse_library', id=library_id )}"><span>Browse this data library</span></a>
</li>
</ul>
@@ -14,7 +14,7 @@
<div class="toolForm">
<div class="toolFormTitle">Select a form on which to base the template for the ${library_item_desc} '${library_item_name}'</div>
- <form name="new_info_template" action="${h.url_for( controller='admin', action='info_template', add=True )}" method="post" >
+ <form name="new_info_template" action="${h.url_for( controller='library_admin', action='info_template', add=True )}" method="post" >
<div class="toolFormBody">
<div class="form-row">
<input type="hidden" name="library_id" value="${library_id}"/>
diff -r f2af04af3caa -r d301a67eda40 templates/admin/requests/show_request.mako
--- a/templates/admin/requests/show_request.mako Fri Sep 11 16:09:02 2009 -0400
+++ b/templates/admin/requests/show_request.mako Mon Sep 14 11:05:36 2009 -0400
@@ -80,7 +80,7 @@
<i>None</i>
%else:
%if rd['label'] == 'Data library':
- <a href="${h.url_for( controller='admin', action='browse_library', id=request.library.id )}">${rd['value']}</a>
+ <a href="${h.url_for( controller='library_admin', action='browse_library', id=request.library.id )}">${rd['value']}</a>
%else:
${rd['value']}
%endif
diff -r f2af04af3caa -r d301a67eda40 test/base/twilltestcase.py
--- a/test/base/twilltestcase.py Fri Sep 11 16:09:02 2009 -0400
+++ b/test/base/twilltestcase.py Mon Sep 14 11:05:36 2009 -0400
@@ -1139,14 +1139,14 @@
def create_library( self, name='Library One', description='This is Library One' ):
"""Create a new library"""
self.home()
- self.visit_url( "%s/admin/library?new=True" % self.url )
+ self.visit_url( "%s/library_admin/library?new=True" % self.url )
self.check_page_for_string( 'Create a new data library' )
tc.fv( "1", "1", name ) # form field 1 is the field named name...
tc.fv( "1", "2", description ) # form field 1 is the field named name...
tc.submit( "create_library_button" )
self.home()
def set_library_permissions( self, library_id, library_name, role_id, permissions_in, permissions_out ):
- url = "admin/library?id=%s&permissions=True&update_roles_button=Save" % ( library_id )
+ url = "library_admin/library?id=%s&permissions=True&update_roles_button=Save" % ( library_id )
for po in permissions_out:
key = '%s_out' % po
url ="%s&%s=%s" % ( url, key, str( role_id ) )
@@ -1161,10 +1161,10 @@
def rename_library( self, library_id, old_name, name='Library One Renamed', description='This is Library One Re-described' ):
"""Rename a library"""
self.home()
- self.visit_url( "%s/admin/library?information=True&id=%s" % ( self.url, library_id ) )
+ self.visit_url( "%s/library_admin/library?information=True&id=%s" % ( self.url, library_id ) )
self.check_page_for_string( 'Change library name and description' )
# Since twill barfs on the form submisson, we ar forced to simulate it
- url = "%s/admin/library?information=True&id=%s&rename_library_button=Save&description=%s&name=%s" % \
+ url = "%s/library_admin/library?information=True&id=%s&rename_library_button=Save&description=%s&name=%s" % \
( self.url, library_id, description.replace( ' ', '+' ), name.replace( ' ', '+' ) )
self.home()
self.visit_url( url )
@@ -1174,7 +1174,7 @@
def add_library_info_template( self, library_id, library_name, form_id, form_name ):
"""Add a new info template to a library"""
self.home()
- url = "%s/admin/info_template?library_id=%s&add=True" % ( self.url, library_id )
+ url = "%s/library_admin/info_template?library_id=%s&add=True" % ( self.url, library_id )
self.visit_url( url )
self.check_page_for_string ( "Select a form on which to base the template" )
tc.fv( '1', 'library_id', library_id )
@@ -1184,7 +1184,7 @@
def edit_library_info( self, library_id, library_name, ele_1_field_name, ele_1_contents, ele_2_field_name, ele_2_contents ):
"""Add information to a library using an existing template with 2 elements"""
self.home()
- self.visit_url( "%s/admin/library?information=True&id=%s" % ( self.url, library_id ) )
+ self.visit_url( "%s/library_admin/library?information=True&id=%s" % ( self.url, library_id ) )
check_str = 'Other information about library %s' % library_name
self.check_page_for_string( check_str )
tc.fv( '2', ele_1_field_name, ele_1_contents )
@@ -1195,7 +1195,7 @@
ele_desc_1, desc_1, ele_name_2, name_2, ele_desc_2, desc_2 ):
"""Edit an existing library info template"""
self.home()
- url = "%s/admin/info_template?library_id=%s&id=%s&edit_template=True" % ( self.url, library_id, id )
+ url = "%s/library_admin/info_template?library_id=%s&id=%s&edit_template=True" % ( self.url, library_id, id )
self.visit_url( url )
self.check_page_for_string ( 'Edit template' )
tc.fv( '1', 'id', id )
@@ -1213,7 +1213,7 @@
name='Folder Template 1', ele_name_0='Fu', ele_help_0='', ele_name_1='Bar', ele_help_1='' ):
"""Add a new info template to a folder"""
self.home()
- url = "%s/admin/info_template?library_id=%s&folder_id=%s&new_template=True&num_fields=2&create_info_template_button=Go" % \
+ url = "%s/library_admin/info_template?library_id=%s&folder_id=%s&new_template=True&num_fields=2&create_info_template_button=Go" % \
( self.url, library_id, folder_id )
self.home()
self.visit_url( url )
@@ -1232,7 +1232,7 @@
def add_folder( self, library_id, folder_id, name='Folder One', description='This is Folder One' ):
"""Create a new folder"""
self.home()
- self.visit_url( "%s/admin/folder?library_id=%s&id=%s&new=True" % ( self.url, library_id, folder_id ) )
+ self.visit_url( "%s/library_admin/folder?library_id=%s&id=%s&new=True" % ( self.url, library_id, folder_id ) )
1
0
details: http://www.bx.psu.edu/hg/galaxy/rev/f2af04af3caa
changeset: 2685:f2af04af3caa
user: Kanwei Li <kanwei(a)gmail.com>
date: Fri Sep 11 16:09:02 2009 -0400
description:
Add tool_conf.xml.main that was removed
1 file(s) affected in this change:
tool_conf.xml.main
diffs (267 lines):
diff -r 355b6844b123 -r f2af04af3caa tool_conf.xml.main
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tool_conf.xml.main Fri Sep 11 16:09:02 2009 -0400
@@ -0,0 +1,263 @@
+<?xml version="1.0"?>
+<toolbox>
+ <section name="Get Data" id="getext">
+ <tool file="data_source/upload.xml"/>
+ <tool file="data_source/ucsc_tablebrowser.xml" />
+ <tool file="data_source/ucsc_tablebrowser_archaea.xml" />
+ <tool file="data_source/microbial_import.xml" />
+ <tool file="data_source/biomart.xml" />
+ <tool file="data_source/gramene_mart.xml" />
+ <tool file="data_source/flymine.xml" />
+ <tool file="data_source/encode_db.xml" />
+ <tool file="data_source/epigraph_import.xml" />
+ </section>
+ <section name="Send Data" id="send">
+ <tool file="data_destination/epigraph.xml" />
+ </section>
+ <section name="ENCODE Tools" id="EncodeTools">
+ <tool file="encode/gencode_partition.xml" />
+ <tool file="encode/random_intervals.xml" />
+ </section>
+ <section name="Lift-Over" id="liftOver">
+ <tool file="extract/liftOver_wrapper.xml" />
+ </section>
+ <section name="Text Manipulation" id="textutil">
+ <tool file="filters/fixedValueColumn.xml" />
+ <tool file="stats/column_maker.xml" />
+ <tool file="filters/catWrapper.xml" />
+ <tool file="filters/condense_characters.xml" />
+ <tool file="filters/convert_characters.xml" />
+ <tool file="filters/CreateInterval.xml" />
+ <tool file="filters/cutWrapper.xml" />
+ <tool file="filters/changeCase.xml" />
+ <tool file="filters/pasteWrapper.xml" />
+ <tool file="filters/remove_beginning.xml" />
+ <tool file="filters/headWrapper.xml" />
+ <tool file="filters/tailWrapper.xml" />
+ </section>
+ <section name="Convert Formats" id="convert">
+ <tool file="filters/bed2gff.xml" />
+ <tool file="fasta_tools/fasta_to_tabular.xml" />
+ <tool file="filters/gff2bed.xml" />
+ <tool file="maf/maf_to_bed.xml" />
+ <tool file="maf/maf_to_fasta.xml" />
+ <tool file="fasta_tools/tabular_to_fasta.xml" />
+ </section>
+ <section name="FASTA manipulation" id="fasta_manipulation">
+ <tool file="fasta_tools/fasta_compute_length.xml" />
+ <tool file="fasta_tools/fasta_filter_by_length.xml" />
+ <tool file="fasta_tools/fasta_concatenate_by_species.xml" />
+ <tool file="fasta_tools/fasta_to_tabular.xml" />
+ <tool file="fasta_tools/tabular_to_fasta.xml" />
+ </section>
+ <section name="Filter and Sort" id="filter">
+ <tool file="stats/filtering.xml" />
+ <tool file="filters/sorter.xml" />
+ <tool file="filters/grep.xml" />
+ </section>
+ <section name="Join, Subtract and Group" id="group">
+ <tool file="filters/joiner.xml" />
+ <tool file="filters/compare.xml"/>
+ <tool file="new_operations/subtract_query.xml"/>
+ <tool file="stats/grouping.xml" />
+ </section>
+ <section name="Extract Features" id="features">
+ <tool file="filters/ucsc_gene_bed_to_exon_bed.xml" />
+ <tool file="extract/extract_GFF_Features.xml" />
+ </section>
+ <section name="Fetch Sequences" id="fetchSeq">
+ <tool file="extract/extract_genomic_dna.xml" />
+ </section>
+ <section name="Fetch Alignments" id="fetchAlign">
+ <tool file="maf/interval2maf_pairwise.xml" />
+ <tool file="maf/interval2maf.xml" />
+ <tool file="maf/interval_maf_to_merged_fasta.xml" />
+ <tool file="maf/genebed_maf_to_fasta.xml"/>
+ <tool file="maf/maf_stats.xml"/>
+ <tool file="maf/maf_thread_for_species.xml"/>
+ <tool file="maf/maf_limit_to_species.xml"/>
+ <tool file="maf/maf_limit_size.xml"/>
+ <tool file="maf/maf_by_block_number.xml"/>
+ <tool file="maf/maf_filter.xml"/>
+ <!--
+ <tool file="maf/maf_reverse_complement.xml"/>
+ -->
+ </section>
+ <section name="Get Genomic Scores" id="scores">
+ <tool file="stats/wiggle_to_simple.xml" />
+ <tool file="stats/aggregate_binned_scores_in_intervals.xml" />
+ <tool file="extract/phastOdds/phastOdds_tool.xml" />
+ </section>
+ <section name="Operate on Genomic Intervals" id="bxops">
+ <tool file="new_operations/intersect.xml" />
+ <tool file="new_operations/subtract.xml" />
+ <tool file="new_operations/merge.xml" />
+ <tool file="new_operations/concat.xml" />
+ <tool file="new_operations/basecoverage.xml" />
+ <tool file="new_operations/coverage.xml" />
+ <tool file="new_operations/complement.xml" />
+ <tool file="new_operations/cluster.xml" id="cluster" />
+ <tool file="new_operations/join.xml" />
+ <tool file="new_operations/get_flanks.xml" />
+ <tool file="new_operations/flanking_features.xml" />
+ <tool file="annotation_profiler/annotation_profiler.xml" />
+ </section>
+ <section name="Statistics" id="stats">
+ <tool file="stats/gsummary.xml" />
+ <tool file="filters/uniq.xml" />
+ <tool file="stats/cor.xml" />
+ </section>
+ <section name="Graph/Display Data" id="plots">
+ <tool file="plotting/histogram2.xml" />
+ <tool file="plotting/scatterplot.xml" />
+ <tool file="plotting/xy_plot.xml" />
+ <tool file="visualization/GMAJ.xml" />
+ <tool file="visualization/build_ucsc_custom_track.xml" />
+ </section>
+ <section name="Regional Variation" id="regVar">
+ <tool file="regVariation/windowSplitter.xml" />
+ <tool file="regVariation/featureCounter.xml" />
+ <tool file="regVariation/quality_filter.xml" />
+ <tool file="regVariation/maf_cpg_filter.xml" />
+ <tool file="regVariation/getIndels_2way.xml" />
+ <tool file="regVariation/getIndels_3way.xml" />
+ <tool file="regVariation/getIndelRates_3way.xml" />
+ <tool file="regVariation/substitutions.xml" />
+ <tool file="regVariation/substitution_rates.xml" />
+ <tool file="regVariation/microsats_alignment_level.xml" />
+ <tool file="regVariation/microsats_mutability.xml" />
+ </section>
+ <section name="Multiple regression" id="multReg">
+ <tool file="regVariation/linear_regression.xml" />
+ <tool file="regVariation/best_regression_subsets.xml" />
+ <tool file="regVariation/rcve.xml" />
+ </section>
+ <section name="Evolution: HyPhy" id="hyphy">
+ <tool file="hyphy/hyphy_branch_lengths_wrapper.xml" />
+ <tool file="hyphy/hyphy_nj_tree_wrapper.xml" />
+ <tool file="hyphy/hyphy_dnds_wrapper.xml" />
+ </section>
+ <section name="Metagenomic analyses" id="tax_manipulation">
+ <tool file="taxonomy/gi2taxonomy.xml" />
+ <tool file="taxonomy/t2t_report.xml" />
+ <tool file="taxonomy/t2ps_wrapper.xml" />
+ <tool file="taxonomy/find_diag_hits.xml" />
+ <tool file="taxonomy/lca.xml" />
+ <tool file="taxonomy/poisson2test.xml" />
+ </section>
+ <section name="Short Read Analysis" id="short_read_analysis">
+ <tool file="metag_tools/short_reads_figure_score.xml" />
+ <tool file="metag_tools/short_reads_trim_seq.xml" />
+ <tool file="metag_tools/megablast_wrapper.xml" />
+ <tool file="metag_tools/megablast_xml_parser.xml" />
+ </section>
+ <section name="EMBOSS" id="EMBOSSLite">
+ <tool file="emboss_5/emboss_antigenic.xml" />
+ <tool file="emboss_5/emboss_backtranseq.xml" />
+ <tool file="emboss_5/emboss_banana.xml" />
+ <tool file="emboss_5/emboss_biosed.xml" />
+ <tool file="emboss_5/emboss_btwisted.xml" />
+ <tool file="emboss_5/emboss_cai_custom.xml" />
+ <tool file="emboss_5/emboss_cai.xml" />
+ <tool file="emboss_5/emboss_chaos.xml" />
+ <tool file="emboss_5/emboss_charge.xml" />
+ <tool file="emboss_5/emboss_checktrans.xml" />
+ <tool file="emboss_5/emboss_chips.xml" />
+ <tool file="emboss_5/emboss_cirdna.xml" />
+ <tool file="emboss_5/emboss_codcmp.xml" />
+ <tool file="emboss_5/emboss_coderet.xml" />
+ <tool file="emboss_5/emboss_compseq.xml" />
+ <tool file="emboss_5/emboss_cpgplot.xml" />
+ <tool file="emboss_5/emboss_cpgreport.xml" />
+ <tool file="emboss_5/emboss_cusp.xml" />
+ <tool file="emboss_5/emboss_cutseq.xml" />
+ <tool file="emboss_5/emboss_dan.xml" />
+ <tool file="emboss_5/emboss_degapseq.xml" />
+ <tool file="emboss_5/emboss_descseq.xml" />
+ <tool file="emboss_5/emboss_diffseq.xml" />
+ <tool file="emboss_5/emboss_digest.xml" />
+ <tool file="emboss_5/emboss_dotmatcher.xml" />
+ <tool file="emboss_5/emboss_dotpath.xml" />
+ <tool file="emboss_5/emboss_dottup.xml" />
+ <tool file="emboss_5/emboss_dreg.xml" />
+ <tool file="emboss_5/emboss_einverted.xml" />
+ <tool file="emboss_5/emboss_epestfind.xml" />
+ <tool file="emboss_5/emboss_equicktandem.xml" />
+ <tool file="emboss_5/emboss_est2genome.xml" />
+ <tool file="emboss_5/emboss_etandem.xml" />
+ <tool file="emboss_5/emboss_extractfeat.xml" />
+ <tool file="emboss_5/emboss_extractseq.xml" />
+ <tool file="emboss_5/emboss_freak.xml" />
+ <tool file="emboss_5/emboss_fuzznuc.xml" />
+ <tool file="emboss_5/emboss_fuzzpro.xml" />
+ <tool file="emboss_5/emboss_fuzztran.xml" />
+ <tool file="emboss_5/emboss_garnier.xml" />
+ <tool file="emboss_5/emboss_geecee.xml" />
+ <tool file="emboss_5/emboss_getorf.xml" />
+ <tool file="emboss_5/emboss_helixturnhelix.xml" />
+ <tool file="emboss_5/emboss_hmoment.xml" />
+ <tool file="emboss_5/emboss_iep.xml" />
+ <tool file="emboss_5/emboss_infoseq.xml" />
+ <tool file="emboss_5/emboss_isochore.xml" />
+ <tool file="emboss_5/emboss_lindna.xml" />
+ <tool file="emboss_5/emboss_marscan.xml" />
+ <tool file="emboss_5/emboss_maskfeat.xml" />
+ <tool file="emboss_5/emboss_maskseq.xml" />
+ <tool file="emboss_5/emboss_matcher.xml" />
+ <tool file="emboss_5/emboss_megamerger.xml" />
+ <tool file="emboss_5/emboss_merger.xml" />
+ <tool file="emboss_5/emboss_msbar.xml" />
+ <tool file="emboss_5/emboss_needle.xml" />
+ <tool file="emboss_5/emboss_newcpgreport.xml" />
+ <tool file="emboss_5/emboss_newcpgseek.xml" />
+ <tool file="emboss_5/emboss_newseq.xml" />
+ <tool file="emboss_5/emboss_noreturn.xml" />
+ <tool file="emboss_5/emboss_notseq.xml" />
+ <tool file="emboss_5/emboss_nthseq.xml" />
+ <tool file="emboss_5/emboss_octanol.xml" />
+ <tool file="emboss_5/emboss_oddcomp.xml" />
+ <tool file="emboss_5/emboss_palindrome.xml" />
+ <tool file="emboss_5/emboss_pasteseq.xml" />
+ <tool file="emboss_5/emboss_patmatdb.xml" />
+ <tool file="emboss_5/emboss_pepcoil.xml" />
+ <tool file="emboss_5/emboss_pepinfo.xml" />
+ <tool file="emboss_5/emboss_pepnet.xml" />
+ <tool file="emboss_5/emboss_pepstats.xml" />
+ <tool file="emboss_5/emboss_pepwheel.xml" />
+ <tool file="emboss_5/emboss_pepwindow.xml" />
+ <tool file="emboss_5/emboss_pepwindowall.xml" />
+ <tool file="emboss_5/emboss_plotcon.xml" />
+ <tool file="emboss_5/emboss_plotorf.xml" />
+ <tool file="emboss_5/emboss_polydot.xml" />
+ <tool file="emboss_5/emboss_preg.xml" />
+ <tool file="emboss_5/emboss_prettyplot.xml" />
+ <tool file="emboss_5/emboss_prettyseq.xml" />
+ <tool file="emboss_5/emboss_primersearch.xml" />
+ <tool file="emboss_5/emboss_revseq.xml" />
+ <tool file="emboss_5/emboss_seqmatchall.xml" />
+ <tool file="emboss_5/emboss_seqret.xml" />
+ <tool file="emboss_5/emboss_showfeat.xml" />
+ <tool file="emboss_5/emboss_shuffleseq.xml" />
+ <tool file="emboss_5/emboss_sigcleave.xml" />
+ <tool file="emboss_5/emboss_sirna.xml" />
+ <tool file="emboss_5/emboss_sixpack.xml" />
+ <tool file="emboss_5/emboss_skipseq.xml" />
+ <tool file="emboss_5/emboss_splitter.xml" />
+ <tool file="emboss_5/emboss_supermatcher.xml" />
+ <tool file="emboss_5/emboss_syco.xml" />
+ <tool file="emboss_5/emboss_tcode.xml" />
+ <tool file="emboss_5/emboss_textsearch.xml" />
+ <tool file="emboss_5/emboss_tmap.xml" />
+ <tool file="emboss_5/emboss_tranalign.xml" />
+ <tool file="emboss_5/emboss_transeq.xml" />
+ <tool file="emboss_5/emboss_trimest.xml" />
+ <tool file="emboss_5/emboss_trimseq.xml" />
+ <tool file="emboss_5/emboss_twofeat.xml" />
+ <tool file="emboss_5/emboss_union.xml" />
+ <tool file="emboss_5/emboss_vectorstrip.xml" />
+ <tool file="emboss_5/emboss_water.xml" />
+ <tool file="emboss_5/emboss_wobble.xml" />
+ <tool file="emboss_5/emboss_wordcount.xml" />
+ <tool file="emboss_5/emboss_wordmatch.xml" />
+ </section>
+</toolbox>
1
0