galaxy-commits
Threads by month
- ----- 2025 -----
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- 15302 discussions

commit/galaxy-central: jgoecks: Clone annotation and tags when cloning workflows.
by Bitbucket 18 May '11
by Bitbucket 18 May '11
18 May '11
1 new changeset in galaxy-central:
http://bitbucket.org/galaxy/galaxy-central/changeset/ffba3d4a66d5/
changeset: r5580:ffba3d4a66d5
user: jgoecks
date: 2011-05-18 22:48:02
summary: Clone annotation and tags when cloning workflows.
affected #: 3 files (1.3 KB)
--- a/lib/galaxy/model/mapping.py Tue May 17 21:31:34 2011 -0400
+++ b/lib/galaxy/model/mapping.py Wed May 18 16:48:02 2011 -0400
@@ -1469,7 +1469,12 @@
latest_workflow=relation( Workflow, post_update=True,
primaryjoin=( StoredWorkflow.table.c.latest_workflow_id == Workflow.table.c.id ),
lazy=False ),
- tags=relation( StoredWorkflowTagAssociation, order_by=StoredWorkflowTagAssociation.table.c.id, backref="stored_workflows" ),
+ tags=relation( StoredWorkflowTagAssociation, order_by=StoredWorkflowTagAssociation.table.c.id, backref="stored_workflows" ),
+ owner_tags=relation( StoredWorkflowTagAssociation,
+ primaryjoin=and_( StoredWorkflow.table.c.id == StoredWorkflowTagAssociation.table.c.stored_workflow_id,
+ StoredWorkflow.table.c.user_id == StoredWorkflowTagAssociation.table.c.user_id ),
+ foreign_keys=[StoredWorkflowTagAssociation.table.c.user_id],
+ order_by=StoredWorkflowTagAssociation.table.c.id ),
annotations=relation( StoredWorkflowAnnotationAssociation, order_by=StoredWorkflowAnnotationAssociation.table.c.id, backref="stored_workflows" ),
ratings=relation( StoredWorkflowRatingAssociation, order_by=StoredWorkflowRatingAssociation.table.c.id, backref="stored_workflows" ) )
)
--- a/lib/galaxy/web/controllers/workflow.py Tue May 17 21:31:34 2011 -0400
+++ b/lib/galaxy/web/controllers/workflow.py Wed May 18 16:48:02 2011 -0400
@@ -586,6 +586,7 @@
@web.expose
@web.require_login( "use Galaxy workflows" )
def clone( self, trans, id ):
+ # Get workflow to clone.
stored = self.get_stored_workflow( trans, id, check_ownership=False )
user = trans.get_user()
if stored.user == user:
@@ -595,9 +596,24 @@
.filter_by( user=user, stored_workflow=stored ).count() == 0:
error( "Workflow is not owned by or shared with current user" )
owner = False
+
+ # Clone.
new_stored = model.StoredWorkflow()
new_stored.name = "Clone of '%s'" % stored.name
new_stored.latest_workflow = stored.latest_workflow
+ # Clone annotation.
+ annotation_obj = self.get_item_annotation_obj( trans.sa_session, stored.user, stored )
+ if annotation_obj:
+ self.add_item_annotation( trans.sa_session, trans.get_user(), new_stored, annotation_obj.annotation )
+ # Clone tags.
+ for swta in stored.owner_tags:
+ new_swta = model.StoredWorkflowTagAssociation()
+ new_swta.tag = swta.tag
+ new_swta.user = trans.user
+ new_swta.user_tname = swta.user_tname
+ new_swta.user_value = swta.user_value
+ new_swta.value = swta.value
+ new_stored.tags.append( new_swta )
if not owner:
new_stored.name += " shared by '%s'" % stored.user.email
new_stored.user = user
--- a/templates/tagging_common.mako Tue May 17 21:31:34 2011 -0400
+++ b/templates/tagging_common.mako Wed May 18 16:48:02 2011 -0400
@@ -126,7 +126,7 @@
tagged_item_id = str( trans.security.encode_id ( tagged_item.id ) )
elt_id = int ( floor ( random()*maxint ) )
- # Get list of user's item tags. TODO: this could be moved to a database query for speed purposes.
+ # Get list of user's item tags. TODO: implement owner_tags for all taggable objects and use here.
item_tags = [ tag for tag in tagged_item.tags if ( tag.user == user ) ]
%>
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0

commit/galaxy-central: kellyv: Cleaned up help text across Picard tools (and FastQC) to standardize style as much as possible
by Bitbucket 17 May '11
by Bitbucket 17 May '11
17 May '11
1 new changeset in galaxy-central:
http://bitbucket.org/galaxy/galaxy-central/changeset/bee3d356198a/
changeset: r5579:bee3d356198a
user: kellyv
date: 2011-05-18 03:31:34
summary: Cleaned up help text across Picard tools (and FastQC) to standardize style as much as possible
affected #: 12 files (2.2 KB)
--- a/tools/picard/picard_AddOrReplaceReadGroups.xml Tue May 17 18:41:12 2011 -0400
+++ b/tools/picard/picard_AddOrReplaceReadGroups.xml Tue May 17 21:31:34 2011 -0400
@@ -98,12 +98,13 @@
**Purpose**
-Add or Replace Read Groups in an input bam or sam file
+Add or Replace Read Groups in an input bam or sam file.
**Picard documentation**
-This is a Galaxy interface for the Picard-tools_ tool AddOrReplaceReadGroups. Picard-tools is supported through the SAMTools_ project.
+This is a Galaxy interface for the external package Picard-tools_ tool AddOrReplaceReadGroups_. Picard-tools is supported through the SAMTools_ project.
+ .. _AddOrReplaceReadGroups: http://picard.sourceforge.net/command-line-overview.shtml#AddOrReplaceReadG…
.. _Picard-tools: http://picard.sourceforge.net/index.shtml
.. _SAMTools: http://samtools.sourceforge.net/
@@ -129,12 +130,12 @@
RGPL=String Read Group platform (e.g. illumina, solid)
RGPU=String Read Group platform unit (eg. run barcode)
RGSM=String Read Group sample name
+ RGID=String Read Group ID; Default value: null (empty)
AddOrReplaceReadGroups OPTIONAL parameters::
Option (Type) Description
- RGID=String Read Group ID; Default value: null (empty)
RGCN=String Read Group sequencing center name; Default value: null (empty)
RGDS=String Read Group description Default value: null (empty)
--- a/tools/picard/picard_BamIndexStats.xml Tue May 17 18:41:12 2011 -0400
+++ b/tools/picard/picard_BamIndexStats.xml Tue May 17 21:31:34 2011 -0400
@@ -43,8 +43,9 @@
**Picard documentation**
-This is a Galaxy wrapper for BamIndexStats, a part of Picard-tools_, which is closely related to SAMTools_.
+This is a Galaxy wrapper for BamIndexStats_, a part of the external package Picard-tools_, which is supported by the SAMTools_ project.
+ .. _BamIndexStats: http://picard.sourceforge.net/command-line-overview.shtml#BamIndexStats
.. _Picard-tools: http://picard.sourceforge.net/index.shtml
.. _SAMTools: http://samtools.sourceforge.net/
@@ -56,7 +57,8 @@
**Outputs**
-The output from this tool is a simple text file.
+This tool outputs an HTML file that contains links to the actual metrics results, as well
+as a log file with info on the exact command run.
------
@@ -83,13 +85,13 @@
read7 163 chr7 302 255 10M1D10M5I76M = 1 -201 NCGCGGCATCNCGATTTCTTTCCGCAGCTAACCTCCCGACAGATCGGCAGCGCGTCGTGTAGGTTATTATGGTACATCTTGTCGTGCGGCNAGAGCATACA I/15445666651/566666553+2/14/I/555512+3/)-'/-I-'*+))*''13+3)'//++''/'))/3+I*5++)I'2+I+/*I-II*)I-./1'1 RG:Z:0
read8 165 * 0 0 * chr7 1 0 NCGCGGCATCNCGATTTCTTTCCGCAGCTAACCTCCCGACAGATCGGCAGCGCGTCGTGTAGGTTATTATGGTACATCTTGTCGTGCGGCNAGAGCATACA I/15445666651/566666553+2/14/I/555512+3/)-'/-I-'*+))*''13+3)'//++''/'))/3+I*5++)I'2+I+/*I-II*)I-./1'1 RG:Z:0
-The following file will be produced::
+The following metrics file will be produced::
- chr1 length= 101 Aligned= 0 Unaligned= 0
- chr7 length= 404 Aligned= 7 Unaligned= 0
- chr8 length= 202 Aligned= 0 Unaligned= 0
- chr10 length= 303 Aligned= 0 Unaligned= 0
- chr14 length= 505 Aligned= 0 Unaligned= 0
+ chr1 length= 101 Aligned= 0 Unaligned= 0
+ chr7 length= 404 Aligned= 7 Unaligned= 0
+ chr8 length= 202 Aligned= 0 Unaligned= 0
+ chr10 length= 303 Aligned= 0 Unaligned= 0
+ chr14 length= 505 Aligned= 0 Unaligned= 0
NoCoordinateCount= 1
</help>
--- a/tools/picard/picard_ReorderSam.xml Tue May 17 18:41:12 2011 -0400
+++ b/tools/picard/picard_ReorderSam.xml Tue May 17 21:31:34 2011 -0400
@@ -110,8 +110,9 @@
**Picard documentation**
-This is a Galaxy interface for Picard-tools_'s ReorderSam tool, a part of Picard-tools_, which is supported by SAMTools_.
+This is a Galaxy interface for Picard-tools_ tool ReorderSam_, a part of the external package Picard-tools_, which is supported by the SAMTools_ project.
+ .. _ReorderSam: http://picard.sourceforge.net/command-line-overview.shtml#ReorderSam
.. _Picard-tools: http://picard.sourceforge.net/index.shtml
.. _SAMTools: http://samtools.sourceforge.net/
--- a/tools/picard/picard_ReplaceSamHeader.xml Tue May 17 18:41:12 2011 -0400
+++ b/tools/picard/picard_ReplaceSamHeader.xml Tue May 17 21:31:34 2011 -0400
@@ -67,8 +67,9 @@
**Picard documentation**
-This is a Galaxy interface to the Picard-tools_'s ReplaceSamHeader tools, which is supported by SAMTools_.
+This is a Galaxy interface to the external package Picard-tools_ tool ReplaceSamHeader_, which is supported by the SAMTools_ project.
+ .. _ReplaceSamHeader: http://picard.sourceforge.net/command-line-overview.shtml#ReplaceSamHeader
.. _Picard-tools: http://picard.sourceforge.net/index.shtml
.. _SAMTools: http://samtools.sourceforge.net/
--- a/tools/picard/rgPicardASMetrics.xml Tue May 17 18:41:12 2011 -0400
+++ b/tools/picard/rgPicardASMetrics.xml Tue May 17 21:31:34 2011 -0400
@@ -95,30 +95,29 @@
**Summary**
-This Galaxy tool uses Picard to report measures of alignment
-Picard is supported through the SamTools project.
-This tool wraps Picard and is supported through the galaxy-bugs mailing list
-or by providing comments through the report form that appears automatically
-if a tool fails unexpectedly when you run it in Galaxy.
+This Galaxy tool uses Picard to report measures of alignment.
-All the Picard tools are freely available and are documented
-at http://picard.sourceforge.net/command-line-overview.shtml#CollectAlignmentS…
-Some of that material is consolidated below from the Picard documentation
+**Picard documentation**
+
+This is a Galaxy wrapper for CollectAlignmentSummaryMetrics_, a part of the external package Picard-tools_, which is supported by the SAMTools_ project.
+
+ .. _CollectAlignmentSummaryMetrics: http://picard.sourceforge.net/command-line-overview.shtml#CollectAlignmentS…
+ .. _Picard-tools: http://picard.sourceforge.net/index.shtml
+ .. _SAMTools: http://samtools.sourceforge.net/
-----
.. class:: infomark
-**Picard Documentation**
+**Inputs, outputs, and parameters**
The Picard documentation (reformatted for Galaxy) says:
-***Collect Alignment Summary Metrics***
+**Collect Alignment Summary Metrics**
- Reads a SAM or BAM file and writes a file containing summary alignment metrics.
+Reads a SAM or BAM file and writes a file containing summary alignment metrics.
.. csv-table:: ASMDoc
-
:header-rows: 1
Option,Description
@@ -173,16 +172,6 @@
There is a clean sam tool - but only filters what it ignores. The lenient flag allows reads to be discarded if they're empty or don't map.
This seems an awful strategy but unfortunately may be needed to run an analysis using badly behaved external packages.
------
-
-.. class:: infomark
-
-**Attribution**
-
-Picard and Samtools go together. They are external to and completely independent of Galaxy. We acknowledge that all credit for
-their methods and contribution are due to them.
-
-
</help></tool>
--- a/tools/picard/rgPicardFixMate.xml Tue May 17 18:41:12 2011 -0400
+++ b/tools/picard/rgPicardFixMate.xml Tue May 17 21:31:34 2011 -0400
@@ -46,6 +46,12 @@
.. class:: infomark
+**Purpose**
+
+Ensure that all mate-pair information is in sync between each read and it's mate pair.
+
+.. class:: warningmark
+
**Useful for paired data only**
Likely won't do anything helpful for single end sequence data
@@ -53,9 +59,14 @@
the data you choose are valid (paired end) sam or bam data - unless you trust this
tool not to harm your data.
-**Purpose**
+**Picard documentation**
-Ensure that all mate-pair information is in sync between each read and it's mate pair.
+This is a Galaxy wrapper for FixMateInformation_, a part of the external package Picard-tools_, which is supported by the SAMTools_ project.
+
+ .. _FixMateInformation: http://picard.sourceforge.net/command-line-overview.shtml#FixMateInformation
+ .. _Picard-tools: http://picard.sourceforge.net/index.shtml
+ .. _SAMTools: http://samtools.sourceforge.net/
+
**Why you might want to use this tool**
@@ -77,7 +88,7 @@
.. class:: infomark
-**From the Picard documentation**
+**Inputs, outputs, and parameters**
.. csv-table:: Fixmate
@@ -89,20 +100,6 @@
"SORT_ORDER=SortOrder","Optional sort order if the OUTPUT file should be sorted differently than the INPUT file. Default value: null. Possible values: {unsorted, queryname, coordinate}"
"CREATE_MD5_FILE=Boolean","Whether to create an MD5 digest for any BAM files created. Default value: false"
------
-
-.. class:: infomark
-
-**Attributions**
-
-Picard is supported through the SamTools project.
-This tool wraps Picard and is supported through the galaxy-bugs mailing list
-or by providing comments through the report form that appears automatically
-if a tool fails unexpectedly when you run it in Galaxy.
-
-All the Picard tools are freely available and are documented
-at http://picard.sourceforge.net/command-line-overview.shtml
-
</help></tool>
--- a/tools/picard/rgPicardGCBiasMetrics.xml Tue May 17 18:41:12 2011 -0400
+++ b/tools/picard/rgPicardGCBiasMetrics.xml Tue May 17 21:31:34 2011 -0400
@@ -89,35 +89,36 @@
**Summary**
This Galaxy tool uses Picard to report measures of GC bias.
-Picard is supported through the SamTools project.
-This tool wraps Picard and is supported through the galaxy-bugs mailing list
-or by providing comments through the report form that appears automatically
-if a tool fails unexpectedly when you run it in Galaxy.
-All the Picard tools are freely available and are documented
-at http://picard.sourceforge.net/command-line-overview.shtml#CollectAlignmentS…
+**Picard documentation**
+
+This is a Galaxy wrapper for CollectGcBiasMetrics_, a part of the external package Picard-tools_, which is supported by the SAMTools_ project.
+
+ .. _CollectGcBiasMetrics: http://picard.sourceforge.net/command-line-overview.shtml#CollectGcBiasMetr…
+ .. _Picard-tools: http://picard.sourceforge.net/index.shtml
+ .. _SAMTools: http://samtools.sourceforge.net/
+
-----
.. class:: infomark
-**Picard Documentation**
+**Inputs, outputs, and parameters**
The Picard documentation (reformatted for Galaxy) says:
.. csv-table:: GC Bias Doc
:header-rows: 1
- Option,Description
- "REFERENCE_SEQUENCE=File","The reference sequence fasta file. Required."
- "INPUT=File","The BAM or SAM file containing aligned reads. Required."
- "OUTPUT=File","The text file to write the metrics table to. Required."
- "CHART_OUTPUT=File","The PDF file to render the chart to. Required."
- "SUMMARY_OUTPUT=File","The text file to write summary metrics to. Default value: null."
- "WINDOW_SIZE=Integer","The size of windows on the genome that are used to bin reads. Default value: 100."
- "MINIMUM_GENOME_FRACTION=Double","For summary metrics, exclude GC windows that include less than this fraction of the genome. Default value: 1.0E-5."
- "CREATE_MD5_FILE=Boolean","Whether to create an MD5 digest for any BAM files created. Default value: false."
-
+ Option,Description
+ "REFERENCE_SEQUENCE=File","The reference sequence fasta file. Required."
+ "INPUT=File","The BAM or SAM file containing aligned reads. Required."
+ "OUTPUT=File","The text file to write the metrics table to. Required."
+ "CHART_OUTPUT=File","The PDF file to render the chart to. Required."
+ "SUMMARY_OUTPUT=File","The text file to write summary metrics to. Default value: null."
+ "WINDOW_SIZE=Integer","The size of windows on the genome that are used to bin reads. Default value: 100."
+ "MINIMUM_GENOME_FRACTION=Double","For summary metrics, exclude GC windows that include less than this fraction of the genome. Default value: 1.0E-5."
+ "CREATE_MD5_FILE=Boolean","Whether to create an MD5 digest for any BAM files created. Default value: false."
GcBiasDetailMetrics
@@ -136,7 +137,6 @@
.. class:: infomark
-
**Typical tool invocation without Galaxy is on a command line - eg:**
java -jar /share/shared/galaxy/tool-data/shared/jars/CollectGcBiasMetrics.jar REFERENCE_SEQUENCE="hg18.fasta"
@@ -151,15 +151,5 @@
This seems an awful strategy but unfortunately may be needed to run an analysis
using badly behaved external packages.
------
-
-.. class:: infomark
-
-**Attributions**
-
-Picard and Samtools go together.
-They are external to and completely independent of Galaxy. We acknowledge that all credit for
-their methods and contribution are due to them.
-
</help></tool>
--- a/tools/picard/rgPicardHsMetrics.xml Tue May 17 18:41:12 2011 -0400
+++ b/tools/picard/rgPicardHsMetrics.xml Tue May 17 21:31:34 2011 -0400
@@ -40,21 +40,27 @@
**Summary**
-This tool provides a Galaxy interface to one of the Picard tools freely
-available at http://picard.sourceforge.net/command-line-overview.shtml#CalculateHsMetrics
+Calculates a set of Hybrid Selection specific metrics from an aligned SAM or BAM file.
+
+**Picard documentation**
+
+This is a Galaxy wrapper for CalculateHsMetrics_, a part of the external package Picard-tools_, which is supported by the SAMTools_ project.
+
+ .. _CalculateHsMetrics: http://picard.sourceforge.net/command-line-overview.shtml#CalculateHsMetrics
+ .. _Picard-tools: http://picard.sourceforge.net/index.shtml
+ .. _SAMTools: http://samtools.sourceforge.net/
+
-----
.. class:: infomark
-**Picard Documentation**
+**Inputs, outputs, and parameters**
-Picard documentation says:
-
+Picard documentation says (reformatted for Galaxy):
Calculates a set of Hybrid Selection specific metrics from an aligned SAM or BAM file.
-
.. csv-table:: HsDoc
:header-rows: 1
@@ -125,20 +131,5 @@
The lenient flag means reads are discarded if empty or off the end of the map - or whatever. Suggestions for
improvement are welcome.
------
-
-.. class:: infomark
-
-**Attribution**
-
-This tool takes interval files in the usual Galaxy interval (bed) format as bait and target sequences rather than
-the special format Picard requires - the tool provides reliable reformatting for Picard.
-
-Picard is a project associated with the SamTools project.
-This Galaxy tool uses part of Picard to report measures of hybridization selection in your
-aligned short read sequence data. Sequence data must be chosen from the sam/bam format files in your current history.
-Target and bait files must be selected from the UCSC BED format in your current history.
-
-
</help></tool>
--- a/tools/picard/rgPicardInsertSize.xml Tue May 17 18:41:12 2011 -0400
+++ b/tools/picard/rgPicardInsertSize.xml Tue May 17 21:31:34 2011 -0400
@@ -41,16 +41,30 @@
**Purpose**
-This tool works for PAIRED DATA ONLY and can be expected to fail for single end data.
+Reads a SAM or BAM file and describes the distribution
+of insert size (excluding duplicates) with metrics and a histogram plot.
-Reads a SAM or BAM file and describes the distribution
-of insert size (excluding duplicates). Generates a histogram plot.
+.. class:: warningmark
+
+**Useful for paired data only**
+
+This tool works for paired data only and can be expected to fail for single end data.
+
+**Picard documentation**
+
+This is a Galaxy wrapper for CollectInsertSizeMetrics_, a part of the external package Picard-tools_, which is supported by the SAMTools_ project.
+
+ .. _CollectInsertSizeMetrics: http://picard.sourceforge.net/command-line-overview.shtml#CollectInsertSize…
+ .. _Picard-tools: http://picard.sourceforge.net/index.shtml
+ .. _SAMTools: http://samtools.sourceforge.net/
-----
.. class:: infomark
-**From the Picard documentation**
+**Inputs, outputs, and parameters**
+
+Picard documentation says (reformatted for Galaxy):
.. csv-table:: Insert size metrics docs
:header-rows: 1
@@ -65,21 +79,5 @@
"STOP_AFTER=Integer","Stop after processing N reads, mainly for debugging. Default value: 0."
"CREATE_MD5_FILE=Boolean","Whether to create an MD5 digest for any BAM files created. Default value: false."
-
------
-
-.. class:: infomark
-
-**Attributions**
-
-Picard is supported through the SamTools project.
-This tool wraps Picard and is supported through the galaxy-bugs mailing list
-or by providing comments through the report form that appears automatically
-if a tool fails unexpectedly when you run it in Galaxy.
-
-All the Picard tools are freely available and are documented
-at http://picard.sourceforge.net/command-line-overview.shtml
-
-
</help></tool>
--- a/tools/picard/rgPicardLibComplexity.xml Tue May 17 18:41:12 2011 -0400
+++ b/tools/picard/rgPicardLibComplexity.xml Tue May 17 21:31:34 2011 -0400
@@ -55,42 +55,51 @@
**Purpose**
- EstimateLibraryComplexity
- Attempts to estimate library complexity from sequence alone.
- Does so by sorting all reads by the first N bases (5 by default) of each read and then
- comparing reads with the first N bases identical to each other for duplicates. Reads are considered to be
- duplicates if they match each other with no gaps and an overall mismatch rate less than or equal to MAX_DIFF_RATE (0.03 by default).
+Attempts to estimate library complexity from sequence alone.
+Does so by sorting all reads by the first N bases (5 by default) of each read and then
+comparing reads with the first N bases identical to each other for duplicates. Reads are considered to be
+duplicates if they match each other with no gaps and an overall mismatch rate less than or equal to MAX_DIFF_RATE (0.03 by default).
- Reads of poor quality are filtered out so as to provide a more accurate estimate.
- The filtering removes reads with any no-calls in the first N bases or with a mean base quality lower than
- MIN_MEAN_QUALITY across either the first or second read.
+Reads of poor quality are filtered out so as to provide a more accurate estimate.
+The filtering removes reads with any no-calls in the first N bases or with a mean base quality lower than
+MIN_MEAN_QUALITY across either the first or second read.
- The algorithm attempts to detect optical duplicates separately from PCR duplicates and excludes these in the
- calculation of library size. Also, since there is no alignment to screen out technical reads one
- further filter is applied on the data. After examining all reads a histogram is built of
- [#reads in duplicate set -> #of duplicate sets];
- all bins that contain exactly one duplicate set are then removed from the histogram as outliers before library size is estimated.
+The algorithm attempts to detect optical duplicates separately from PCR duplicates and excludes these in the
+calculation of library size. Also, since there is no alignment to screen out technical reads one
+further filter is applied on the data. After examining all reads a histogram is built of
+[#reads in duplicate set -> #of duplicate sets]; all bins that contain exactly one duplicate set are
+then removed from the histogram as outliers before library size is estimated.
+
+**Picard documentation**
+
+This is a Galaxy wrapper for EstimateLibraryComplexity_, a part of the external package Picard-tools_, which is supported by the SAMTools_ project.
+
+ .. _EstimateLibraryComplexity: http://picard.sourceforge.net/command-line-overview.shtml#EstimateLibraryCo…
+ .. _Picard-tools: http://picard.sourceforge.net/index.shtml
+ .. _SAMTools: http://samtools.sourceforge.net/
+
**Why you might want to use this tool**
- This tool provides a Galaxy interface to one of the Picard tools.
- If you need to estimate library complexity from sequences, the Picard tool may help.
+This tool provides a Galaxy interface to one of the Picard tools.
+If you need to estimate library complexity from sequences, the Picard tool may help.
**Note on the Regular Expression**
- (from the Picard docs)
- This tool requires a valid regular expression to parse out the read names in the incoming SAM or BAM file.
- These values are used to estimate the rate of optical duplication in order to give a more accurate estimated library size.
- The regular expression should contain three capture groups for the three variables, in order.
- Default value: [a-zA-Z0-9]+:[0-9]:([0-9]+):([0-9]+):([0-9]+).*.
-
+(from the Picard docs)
+This tool requires a valid regular expression to parse out the read names in the incoming SAM or BAM file.
+These values are used to estimate the rate of optical duplication in order to give a more accurate estimated library size.
+The regular expression should contain three capture groups for the three variables, in order.
+Default value: [a-zA-Z0-9]+:[0-9]:([0-9]+):([0-9]+):([0-9]+).*.
-----
.. class:: infomark
-**From the Picard documentation**
+**Inputs, outputs, and parameters**
+
+Picard documentation says (reformatted for Galaxy):
.. csv-table:: Estimate complexity docs
:header-rows: 1
@@ -105,21 +114,6 @@
"OPTICAL_DUPLICATE_PIXEL_DISTANCE=Integer","The maximum offset between two duplicte clusters in order to consider them optical duplicates. This should usually be set to some fairly small number (e.g. 5-10 pixels) unless using later versions of the Illumina pipeline that multiply pixel values by 10, in which case 50-100 is more normal. Default value: 100"
"CREATE_MD5_FILE=Boolean","Whether to create an MD5 digest for any BAM files created. Default value: false. This option can be set to 'null' to clear the default value. "
-
------
-
-.. class:: infomark
-
-**Attributions**
-
-Picard is supported through the SamTools project.
-This tool wraps Picard and is supported through the galaxy-bugs mailing list
-Please help us by completing the report form that appears automatically
-if a tool fails unexpectedly when you run it in Galaxy.
-
-All the Picard tools are freely available and are documented
-at http://picard.sourceforge.net/command-line-overview.shtml#CollectInsertSize…
-
</help></tool>
--- a/tools/picard/rgPicardMarkDups.xml Tue May 17 18:41:12 2011 -0400
+++ b/tools/picard/rgPicardMarkDups.xml Tue May 17 21:31:34 2011 -0400
@@ -56,7 +56,7 @@
<param name="remDups" value="true" /><param name="assumeSorted" value="true" /><param name="readRegex" value="[a-zA-Z0-9]+:[0-9]:([0-9]+):([0-9]+):([0-9]+).*" />
- <param name="optDupeDist" value="100" />
+ <param name="optDupeDist" value="100" /><output name="out_file" file="picard_output_markdups_remdupes.bam" ftype="bam" compare="diff" /><output name="html_file" file="picard_output_markdups_sortedpairsam.html" ftype="html" lines_diff="75" /></test>
@@ -68,9 +68,19 @@
**Purpose**
-MarkDuplicates
+Marks all duplicate reads in a provided sam or bam file and either removes them or flags them.
-**From the Picard documentation**
+**Picard documentation**
+
+This is a Galaxy interface to the external package Picard-tools_ tool MarkDuplicates, which is supported by the SAMTools_ project.
+
+ .. _MarkDuplicates: http://picard.sourceforge.net/command-line-overview.shtml#MarkDuplicates
+ .. _Picard-tools: http://picard.sourceforge.net/index.shtml
+ .. _SAMTools: http://samtools.sourceforge.net/
+
+**Inputs, outputs, and parameters**
+
+Picard documentation says (reformatted for Galaxy):
.. csv-table:: Mark Duplicates docs
:header-rows: 1
@@ -86,7 +96,6 @@
"READ_NAME_REGEX=String","Regular expression that can be used to parse read names in the incoming SAM file. Read names are parsed to extract three variables: tile/region, x coordinate and y coordinate. "
"OPTICAL_DUPLICATE_PIXEL_DISTANCE=Integer","The maximum offset between two duplicte clusters in order to consider them optical duplicates. This should usually be set to some fairly small number (e.g. 5-10 pixels) unless using later versions of the Illumina pipeline that multiply pixel values by 10, in which case 50-100 is more normal. Default value: 100"
-
**Note on the Regular Expression**
(from the Picard docs)
@@ -105,19 +114,6 @@
This tool provides a Galaxy interface to one of the Picard tools.
If you need to estimate library complexity from sequences, the Picard tool may help.
------
-
-.. class:: infomark
-
-**Attributions**
-
-Picard is supported through the SamTools project.
-This tool wraps Picard and is supported through the galaxy-bugs mailing list
-or by providing comments through the report form that appears automatically
-if a tool fails unexpectedly when you run it in Galaxy.
-
-All the Picard tools are freely available and are documented
-at http://picard.sourceforge.net/command-line-overview.shtml#CollectInsertSize…
</help></tool>
--- a/tools/rgenetics/rgFastQC.xml Tue May 17 18:41:12 2011 -0400
+++ b/tools/rgenetics/rgFastQC.xml Tue May 17 21:31:34 2011 -0400
@@ -6,7 +6,9 @@
-c "$contaminants"
#end if
</command>
-<requirements><requirement type="package">FastQC</requirement></requirements>
+ <requirements>
+ <requirement type="package">FastQC</requirement>
+ </requirements><inputs><param format="fastqsanger,fastq,bam,sam" name="input_file" type="data" label="Short read data from your current history" /><param name="out_prefix" value="FastQC" type="text" label="Title for the output file - to remind you what the job was for" size="80" />
@@ -30,35 +32,57 @@
**Purpose**
-FastQC aims to provide a simple way to do some quality control checks on raw sequence data coming from high throughput sequencing pipelines.
-It provides a modular set of analyses which you can use to give a quick impression of whether your data has any problems of
+FastQC aims to provide a simple way to do some quality control checks on raw
+sequence data coming from high throughput sequencing pipelines.
+It provides a modular set of analyses which you can use to give a quick
+impression of whether your data has any problems of
which you should be aware before doing any further analysis.
-The main functions of FastQC are
+The main functions of FastQC are:
-Import of data from BAM, SAM or FastQ files (any variant)
-Providing a quick overview to tell you in which areas there may be problems
-Summary graphs and tables to quickly assess your data
-Export of results to an HTML based permanent report
-Offline operation to allow automated generation of reports without running the interactive application
+- Import of data from BAM, SAM or FastQ files (any variant)
+- Providing a quick overview to tell you in which areas there may be problems
+- Summary graphs and tables to quickly assess your data
+- Export of results to an HTML based permanent report
+- Offline operation to allow automated generation of reports without running the interactive application
+
+**FastQC documentation**
+
+This is a Galaxy interface to the external package FastQC_.
+Specific documentation on FastQC can be found on that site.
+FastQC incorporates the Picard-tools_ libraries for sam/bam processing.
+
+ .. _FastQC: http://www.bioinformatics.bbsrc.ac.uk/projects/fastqc/
+ .. _Picard-tools: http://picard.sourceforge.net/index.shtml
+
+The contaminants file parameter was borrowed from the independently developed
+fastqcwrapper contributed to the Galaxy Community Tool Shed by J. Johnson.
-----
.. class:: infomark
-**Attribution**
+**Inputs and outputs**
-FastQC comes from http://www.bioinformatics.bbsrc.ac.uk/projects/fastqc/
-Please see that site for all documentation - this is just a Galaxy wrapper.
-This tool wraps the fastqc package to report some QC metrics on fastq, groomed fastq (fastqsanger) in Galaxy
+This wrapper will accept any fastq file as well as sam or bam as the primary file to check.
+It will also take an optional file containing a list of contaminants information, in the form of
+a tab-delimited file with 2 columns, name and sequence.
-This Galaxy tool wrapper is part of the rgenetics toolkit.
+The tool produces a single HTML output file that contains all of the results, including the following:
-Contaminants file parameter borrowed from the independently
-developed fastqcwrapper_ contributed to the galaxy community tool shed
-by j johnson
+- Basic Statistics
+- Per base sequence quality
+- Per sequence quality scores
+- Per base sequence content
+- Per base GC content
+- Per sequence GC content
+- Per base N content
+- Sequence Length Distribution
+- Sequence Duplication Levels
+- Overrepresented sequences
+- Kmer Content
-.. _fastqcwrapper: http%3A//community.g2.bx.psu.edu/tool/browse_tools%3F%26webapp%3Dcommunity%26operation%3Dview_tool%26id%3D256f9f17b153ce60
+All except Basic Statistics and Overrepresented sequences are plots.
</help></tool>
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0
1 new changeset in galaxy-central:
http://bitbucket.org/galaxy/galaxy-central/changeset/d2ba41bec611/
changeset: r5578:d2ba41bec611
user: kanwei
date: 2011-05-18 00:41:12
summary: Fix data.py typo. Fixes #543
affected #: 1 file (1 byte)
--- a/lib/galaxy/datatypes/data.py Tue May 17 13:14:15 2011 -0400
+++ b/lib/galaxy/datatypes/data.py Tue May 17 18:41:12 2011 -0400
@@ -84,7 +84,7 @@
def get_raw_data( self, dataset ):
"""Returns the full data. To stream it open the file_name and read/write as needed"""
try:
- return file(datset.file_name, 'rb').read(-1)
+ return file(dataset.file_name, 'rb').read(-1)
except OSError, e:
log.exception('%s reading a file that does not exist %s' % (self.__class__.__name__, dataset.file_name))
return ''
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0

17 May '11
1 new changeset in galaxy-central:
http://bitbucket.org/galaxy/galaxy-central/changeset/59a2bee2b725/
changeset: r5577:59a2bee2b725
user: fubar
date: 2011-05-17 19:14:15
summary: grr - more vanity attribution removed
affected #: 1 file (298 bytes)
--- a/tools/picard/rgPicardFixMate.xml Tue May 17 13:04:35 2011 -0400
+++ b/tools/picard/rgPicardFixMate.xml Tue May 17 13:14:15 2011 -0400
@@ -103,13 +103,6 @@
All the Picard tools are freely available and are documented
at http://picard.sourceforge.net/command-line-overview.shtml
-Written by and copyright Ross Lazarus, ross.lazarus at gmail etc, September 2010
-Code cleaned up and the ugliest hacks repaired by Raphael Lullis.
-Kelly Vincent wrote the first version of picard_wrapper.py that now incorporates that code.
-
-It takes a village of programmers to wrap a picard tool
-
-
</help></tool>
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0
2 new changesets in galaxy-central:
http://bitbucket.org/galaxy/galaxy-central/changeset/eec910f20a4e/
changeset: r5575:eec910f20a4e
user: fubar
date: 2011-05-17 18:52:24
summary: separated ngs picard tools and removed fastqc wrapper lgpl annotation
affected #: 2 files (192 bytes)
--- a/tool_conf.xml.sample Tue May 17 12:14:32 2011 -0400
+++ b/tool_conf.xml.sample Tue May 17 12:52:24 2011 -0400
@@ -242,19 +242,6 @@
<section name="NGS: QC and manipulation" id="NGS_QC"><label text="FastQC: fastq/sam/bam" id="fastqcsambam" /><tool file="rgenetics/rgFastQC.xml" />
- <label text="QC/Metrics for sam/bam" id="qcsambam"/>
- <tool file="picard/picard_BamIndexStats.xml" />
- <tool file="picard/rgPicardASMetrics.xml" />
- <tool file="picard/rgPicardGCBiasMetrics.xml" />
- <tool file="picard/rgPicardLibComplexity.xml" />
- <tool file="picard/rgPicardInsertSize.xml" />
- <tool file="picard/rgPicardHsMetrics.xml" />
- <label text="bam/sam Cleaning" id="picard-tools" />
- <tool file="picard/picard_AddOrReplaceReadGroups.xml" />
- <tool file="picard/picard_ReorderSam.xml" />
- <tool file="picard/picard_ReplaceSamHeader.xml" />
- <tool file="picard/rgPicardFixMate.xml" />
- <tool file="picard/rgPicardMarkDups.xml" /><label text="Illumina fastq" id="illumina" /><tool file="fastq/fastq_groomer.xml" /><tool file="fastq/fastq_paired_end_splitter.xml" />
@@ -293,6 +280,21 @@
<tool file="fastx_toolkit/fastx_reverse_complement.xml" /><tool file="fastx_toolkit/fastx_trimmer.xml" /></section>
+ <section name="NGS: Picard (beta)" id="picard_beta">
+ <label text="QC/Metrics for sam/bam" id="qcsambam"/>
+ <tool file="picard/picard_BamIndexStats.xml" />
+ <tool file="picard/rgPicardASMetrics.xml" />
+ <tool file="picard/rgPicardGCBiasMetrics.xml" />
+ <tool file="picard/rgPicardLibComplexity.xml" />
+ <tool file="picard/rgPicardInsertSize.xml" />
+ <tool file="picard/rgPicardHsMetrics.xml" />
+ <label text="bam/sam Cleaning" id="picard-clean" />
+ <tool file="picard/picard_AddOrReplaceReadGroups.xml" />
+ <tool file="picard/picard_ReorderSam.xml" />
+ <tool file="picard/picard_ReplaceSamHeader.xml" />
+ <tool file="picard/rgPicardFixMate.xml" />
+ <tool file="picard/rgPicardMarkDups.xml" />
+ </section><!--
Keep this section commented until it includes tools that
will be hosted on test/main. The velvet wrappers have been
--- a/tools/rgenetics/rgFastQC.xml Tue May 17 12:14:32 2011 -0400
+++ b/tools/rgenetics/rgFastQC.xml Tue May 17 12:52:24 2011 -0400
@@ -55,15 +55,10 @@
This Galaxy tool wrapper is part of the rgenetics toolkit.
Contaminants file parameter borrowed from the independently
-developed fastqcwrapper contributed to the galaxy community tool shed
+developed fastqcwrapper_ contributed to the galaxy community tool shed
by j johnson
-copyright Ross Lazarus at g mail dot com 2011
-Licensed under the LGPL_
-
.. _fastqcwrapper: http%3A//community.g2.bx.psu.edu/tool/browse_tools%3F%26webapp%3Dcommunity%26operation%3Dview_tool%26id%3D256f9f17b153ce60
-.. _LGPL: http://www.gnu.org/copyleft/lesser.html
-
</help></tool>
http://bitbucket.org/galaxy/galaxy-central/changeset/fa0480c6a01d/
changeset: r5576:fa0480c6a01d
user: fubar
date: 2011-05-17 19:04:35
summary: cleaned up picard tool names - own section so (picard) was redundant
affected #: 12 files (349 bytes)
--- a/tools/picard/picard_AddOrReplaceReadGroups.xml Tue May 17 12:52:24 2011 -0400
+++ b/tools/picard/picard_AddOrReplaceReadGroups.xml Tue May 17 13:04:35 2011 -0400
@@ -1,6 +1,5 @@
-<tool name="Add or Replace Groups:" id="picard_ARRG" version="0.2.0">
+<tool name="Add or Replace Groups" id="picard_ARRG" version="0.2.0"><requirements><requirement type="package">picard</requirement></requirements>
- <description>(Picard)</description><command interpreter="python">
picard_wrapper.py
--input="$inputFile"
--- a/tools/picard/picard_BamIndexStats.xml Tue May 17 12:52:24 2011 -0400
+++ b/tools/picard/picard_BamIndexStats.xml Tue May 17 13:04:35 2011 -0400
@@ -1,6 +1,5 @@
-<tool name="BAM Index Statistics:" id="picard_BamIndexStats" version="0.2.0">
+<tool name="BAM Index Statistics" id="picard_BamIndexStats" version="0.2.0"><requirements><requirement type="package">picard</requirement></requirements>
- <description>(Picard)</description><command interpreter="python">
picard_wrapper.py
--input "$input_file"
--- a/tools/picard/picard_MarkDuplicates.xml Tue May 17 12:52:24 2011 -0400
+++ b/tools/picard/picard_MarkDuplicates.xml Tue May 17 13:04:35 2011 -0400
@@ -1,5 +1,4 @@
-<tool name="Mark Duplicates:" id="picard_MarkDuplicates" version="0.01">
- <description>(Picard)</description>
+<tool name="Mark Duplicates" id="picard_MarkDuplicates" version="0.01"><command interpreter="python">
picard_wrapper.py
--input="$input_file"
--- a/tools/picard/picard_ReorderSam.xml Tue May 17 12:52:24 2011 -0400
+++ b/tools/picard/picard_ReorderSam.xml Tue May 17 13:04:35 2011 -0400
@@ -1,6 +1,5 @@
-<tool name="Reorder SAM:" id="picard_ReorderSam" version="0.3.0">
+<tool name="Reorder SAM" id="picard_ReorderSam" version="0.3.0"><requirements><requirement type="package">picard</requirement></requirements>
- <description>(Picard)</description><command interpreter="python">
picard_wrapper.py
--input=$inputFile
--- a/tools/picard/picard_ReplaceSamHeader.xml Tue May 17 12:52:24 2011 -0400
+++ b/tools/picard/picard_ReplaceSamHeader.xml Tue May 17 13:04:35 2011 -0400
@@ -1,6 +1,5 @@
-<tool name="Replace Sam Header:" id="picard_ReplaceSamHeader" version="0.2.0">
+<tool name="Replace Sam Header" id="picard_ReplaceSamHeader" version="0.2.0"><requirements><requirement type="package">picard</requirement></requirements>
- <description>(Picard)</description><command interpreter="python">
picard_wrapper.py
--input "$inputFile"
--- a/tools/picard/rgPicardASMetrics.xml Tue May 17 12:52:24 2011 -0400
+++ b/tools/picard/rgPicardASMetrics.xml Tue May 17 13:04:35 2011 -0400
@@ -1,5 +1,4 @@
-<tool name="Sam/bam Alignment Summary Metrics:" id="PicardASMetrics" version="0.03">
- <description>(Picard)</description>
+<tool name="Sam/bam Alignment Summary Metrics" id="PicardASMetrics" version="0.03"><command interpreter="python">
picard_wrapper.py -i "$input_file" -d "$html_file.files_path" -t "$html_file"
--assumesorted "$sorted" -b "$bisulphite" --adaptors "$adaptors" --maxinsert "$maxinsert" -n "$out_prefix"
--- a/tools/picard/rgPicardFixMate.xml Tue May 17 12:52:24 2011 -0400
+++ b/tools/picard/rgPicardFixMate.xml Tue May 17 13:04:35 2011 -0400
@@ -1,4 +1,4 @@
-<tool name="Paired Read Mate Fixer:" id="rgPicFixMate" version="0.2.0">
+<tool name="Paired Read Mate Fixer" id="rgPicFixMate" version="0.2.0"><description>for paired data</description><command interpreter="python">
picard_wrapper.py -i "$input_file" -o "$out_file" --tmpdir "${__new_file_path__}" -n "$out_prefix"
--- a/tools/picard/rgPicardGCBiasMetrics.xml Tue May 17 12:52:24 2011 -0400
+++ b/tools/picard/rgPicardGCBiasMetrics.xml Tue May 17 13:04:35 2011 -0400
@@ -1,5 +1,4 @@
-<tool name="Sam/bam GC Bias Metrics:" id="PicardGCBiasMetrics" version="0.01">
- <description>(Picard)</description>
+<tool name="Sam/bam GC Bias Metrics" id="PicardGCBiasMetrics" version="0.01"><command interpreter="python">
picard_wrapper.py -i "$input_file" -d "$html_file.files_path" -t "$html_file"
--windowsize "$windowsize" --mingenomefrac "$mingenomefrac" -n "$out_prefix" --tmpdir "${__new_file_path__}"
--- a/tools/picard/rgPicardHsMetrics.xml Tue May 17 12:52:24 2011 -0400
+++ b/tools/picard/rgPicardHsMetrics.xml Tue May 17 13:04:35 2011 -0400
@@ -1,4 +1,4 @@
-<tool name="Sam/bam Hybrid Selection Metrics:" id="PicardHsMetrics" version="0.01">
+<tool name="Sam/bam Hybrid Selection Metrics" id="PicardHsMetrics" version="0.01"><description>For (eg exome) targeted data</description><command interpreter="python">
--- a/tools/picard/rgPicardInsertSize.xml Tue May 17 12:52:24 2011 -0400
+++ b/tools/picard/rgPicardInsertSize.xml Tue May 17 13:04:35 2011 -0400
@@ -1,4 +1,4 @@
-<tool name="Insertion size metrics:" id="PicardInsertSize" version="0.3.0">
+<tool name="Insertion size metrics" id="PicardInsertSize" version="0.3.0"><description>for PAIRED data</description><requirements><requirement type="package">picard</requirement></requirements><command interpreter="python">
--- a/tools/picard/rgPicardLibComplexity.xml Tue May 17 12:52:24 2011 -0400
+++ b/tools/picard/rgPicardLibComplexity.xml Tue May 17 13:04:35 2011 -0400
@@ -1,5 +1,4 @@
-<tool name="Estimate Library Complexity:" id="rgEstLibComp" version="0.01">
- <description>(Picard)</description>
+<tool name="Estimate Library Complexity" id="rgEstLibComp" version="0.01"><command interpreter="python">
picard_wrapper.py -i "$input_file" -n "$out_prefix" --tmpdir "${__new_file_path__}" --minid "$minIDbases"
--maxdiff "$maxDiff" --minmeanq "$minMeanQ" --readregex "$readRegex" --optdupdist "$optDupeDist"
--- a/tools/picard/rgPicardMarkDups.xml Tue May 17 12:52:24 2011 -0400
+++ b/tools/picard/rgPicardMarkDups.xml Tue May 17 13:04:35 2011 -0400
@@ -1,5 +1,4 @@
-<tool name="Mark Duplicates:" id="rgPicardMarkDups" version="0.01">
- <description>(Picard)</description>
+<tool name="Mark Duplicate reads" id="rgPicardMarkDups" version="0.01"><command interpreter="python">
picard_wrapper.py -i "$input_file" -n "$out_prefix" --tmpdir "${__new_file_path__}" -o "$out_file"
--remdups "$remDups" --assumesorted "$assumeSorted" --readregex "$readRegex" --optdupdist "$optDupeDist"
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0
3 new changesets in galaxy-central:
http://bitbucket.org/galaxy/galaxy-central/changeset/67e2f1881067/
changeset: r5572:67e2f1881067
user: fubar
date: 2011-05-17 16:29:06
summary: amerkinized spelin' and removed copyright notices on some picard tool forms
affected #: 7 files (3.3 KB)
--- a/tools/picard/rgPicardASMetrics.xml Tue May 17 01:57:04 2011 -0400
+++ b/tools/picard/rgPicardASMetrics.xml Tue May 17 10:29:06 2011 -0400
@@ -183,24 +183,6 @@
Picard and Samtools go together. They are external to and completely independent of Galaxy. We acknowledge that all credit for
their methods and contribution are due to them.
-Here, you can apply Picard tools through Galaxy which you may find much easier than through the native Picard command line interface.
-
-
-
------
-
-.. class:: infomark
-
-**Copyright**
-
-This Galaxy tool is a component of the rgenetics toolkit.
-
-Written by and copyright Ross Lazarus, ross.lazarus at gmail etc, September 2010
-
-All rgenetics artefacts are available licensed under the LGPL_
-Other dependencies are licensed at the author's discretion - please see each individual package for details
-
- .. _LGPL: http://www.gnu.org/copyleft/lesser.html
</help></tool>
--- a/tools/picard/rgPicardFixMate.xml Tue May 17 01:57:04 2011 -0400
+++ b/tools/picard/rgPicardFixMate.xml Tue May 17 10:29:06 2011 -0400
@@ -101,7 +101,7 @@
if a tool fails unexpectedly when you run it in Galaxy.
All the Picard tools are freely available and are documented
-at http://picard.sourceforge.net/command-line-overview.shtml#CollectAlignmentS…
+at http://picard.sourceforge.net/command-line-overview.shtml
Written by and copyright Ross Lazarus, ross.lazarus at gmail etc, September 2010
Code cleaned up and the ugliest hacks repaired by Raphael Lullis.
@@ -109,18 +109,6 @@
It takes a village of programmers to wrap a picard tool
------
-
-.. class:: infomark
-
-**Copyright**
-
-This Galaxy tool is a component of the rgenetics toolkit.
-
-All rgenetics artefacts are available licensed under the LGPL_
-Other dependencies are licensed at the author's discretion - please see each individual package for details
-
- .. _LGPL: http://www.gnu.org/copyleft/lesser.html
</help></tool>
--- a/tools/picard/rgPicardGCBiasMetrics.xml Tue May 17 01:57:04 2011 -0400
+++ b/tools/picard/rgPicardGCBiasMetrics.xml Tue May 17 10:29:06 2011 -0400
@@ -162,22 +162,5 @@
They are external to and completely independent of Galaxy. We acknowledge that all credit for
their methods and contribution are due to them.
-Here, you can apply Picard tools through Galaxy which might be easier than through the native Picard command line interface.
-
-
------
-
-.. class:: infomark
-
-**Copyright**
-
-This Galaxy tool is a component of the rgenetics toolkit.
-
-Written by and copyright Ross Lazarus, ross.lazarus at gmail etc, September 2010
-All rgenetics artefacts are available licensed under the LGPL_
-Other dependencies are licensed at the author's discretion - please see each individual package for details
-
- .. _LGPL: http://www.gnu.org/copyleft/lesser.html
-
</help></tool>
--- a/tools/picard/rgPicardHsMetrics.xml Tue May 17 01:57:04 2011 -0400
+++ b/tools/picard/rgPicardHsMetrics.xml Tue May 17 10:29:06 2011 -0400
@@ -1,5 +1,5 @@
<tool name="Sam/bam Hybrid Selection Metrics:" id="PicardHsMetrics" version="0.01">
- <description>For (eg exome) targetted data</description>
+ <description>For (eg exome) targeted data</description><command interpreter="python">
picard_wrapper.py -i "$input_file" -d "$html_file.files_path" -t "$html_file" --datatype "$input_file.ext"
@@ -139,19 +139,6 @@
aligned short read sequence data. Sequence data must be chosen from the sam/bam format files in your current history.
Target and bait files must be selected from the UCSC BED format in your current history.
------
-
-.. class:: infomark
-
-**Copyright**
-
-This is part of the rgenetics toolkit.
-
-Written by Ross Lazarus 2010
-All rgenetics artefacts are available licensed under the LGPL_
-Other dependencies are licensed at the author's discretion - please see each individual package for details
-
- .. _LGPL: http://www.gnu.org/copyleft/lesser.html
</help></tool>
--- a/tools/picard/rgPicardInsertSize.xml Tue May 17 01:57:04 2011 -0400
+++ b/tools/picard/rgPicardInsertSize.xml Tue May 17 10:29:06 2011 -0400
@@ -78,23 +78,8 @@
if a tool fails unexpectedly when you run it in Galaxy.
All the Picard tools are freely available and are documented
-at http://picard.sourceforge.net/command-line-overview.shtml#CollectInsertSize…
+at http://picard.sourceforge.net/command-line-overview.shtml
-Here, you can apply Picard tools through Galaxy which might be easier than through the native Picard command line interface.
-
------
-
-.. class:: infomark
-
-**Copyright**
-
-This Galaxy tool is a component of the rgenetics toolkit.
-
-Written by and copyright Ross Lazarus, ross.lazarus at gmail etc, September 2010
-Code cleaned up and the ugliest hacks repaired by Raphael Lullis
-
-All rgenetics artifacts are available licensed under the LGPL
-Other dependencies are licensed at the author's discretion - please see each individual package for details
</help></tool>
--- a/tools/picard/rgPicardLibComplexity.xml Tue May 17 01:57:04 2011 -0400
+++ b/tools/picard/rgPicardLibComplexity.xml Tue May 17 10:29:06 2011 -0400
@@ -121,22 +121,6 @@
All the Picard tools are freely available and are documented
at http://picard.sourceforge.net/command-line-overview.shtml#CollectInsertSize…
------
-
-.. class:: infomark
-
-**Copyright**
-
-This Galaxy tool is a component of the rgenetics toolkit.
-
-Written by and copyright Ross Lazarus, ross.lazarus at gmail etc, September 2010
-Code cleaned up and the ugliest hacks repaired by Raphael Lullis
-
-All rgenetics artefacts are available licensed under the LGPL_
-Other dependencies are licensed at the author's discretion - please see each individual package for details
-
- .. _LGPL: http://www.gnu.org/copyleft/lesser.html
-
</help></tool>
--- a/tools/picard/rgPicardMarkDups.xml Tue May 17 01:57:04 2011 -0400
+++ b/tools/picard/rgPicardMarkDups.xml Tue May 17 10:29:06 2011 -0400
@@ -120,24 +120,6 @@
All the Picard tools are freely available and are documented
at http://picard.sourceforge.net/command-line-overview.shtml#CollectInsertSize…
-Here, you can apply Picard tools through Galaxy which might be easier than through the native Picard command line interface.
-
------
-
-.. class:: infomark
-
-**Copyright**
-
-This Galaxy tool is a component of the rgenetics toolkit.
-
-Written by and copyright Ross Lazarus, ross.lazarus at gmail etc, September 2010
-Code cleaned up and the ugliest hacks repaired by Raphael Lullis
-
-All rgenetics artifacts are available licensed under the LGPL_
-Other dependencies are licensed at the author's discretion - please see each individual package for details
-
-.. _LGPL: http://www.gnu.org/copyleft/lesser.html
-
</help></tool>
http://bitbucket.org/galaxy/galaxy-central/changeset/d6a905426210/
changeset: r5573:d6a905426210
user: fubar
date: 2011-05-17 17:39:52
summary: branch merge
affected #: 2 files (331 bytes)
--- a/tools/ngs_rna/cufflinks_wrapper.py Tue May 17 10:29:06 2011 -0400
+++ b/tools/ngs_rna/cufflinks_wrapper.py Tue May 17 11:39:52 2011 -0400
@@ -34,9 +34,12 @@
where each end is 50bp, you should set -r to be 200. The default is 45bp.')
parser.add_option( '-G', '--GTF', dest='GTF', help='Tells Cufflinks to use the supplied reference annotation to estimate isoform expression. It will not assemble novel transcripts, and the program will ignore alignments not structurally compatible with any reference transcript.' )
- # Normalization options.
+ # Normalization options.
parser.add_option( "-N", "--quartile-normalization", dest="do_normalization", action="store_true" )
+ # Wrapper / Galaxy options.
+ parser.add_option( '-A', '--assembled-isoforms-output', dest='assembled_isoforms_output_file', help='Assembled isoforms output file; formate is GTF.' )
+
# Advanced Options:
parser.add_option( '--num-importance-samples', dest='num_importance_samples', help='Sets the number of importance samples generated for each locus during abundance estimation. Default: 1000' )
parser.add_option( '--max-mle-iterations', dest='max_mle_iterations', help='Sets the number of iterations allowed during maximum likelihood estimation of abundances. Default: 5000' )
@@ -136,6 +139,9 @@
except OverflowError:
pass
tmp_stderr.close()
+
+ # Copy outputs.
+ shutil.copyfile( "transcripts.gtf" , options.assembled_isoforms_output_file )
# Error checking.
if returncode != 0:
--- a/tools/ngs_rna/cufflinks_wrapper.xml Tue May 17 10:29:06 2011 -0400
+++ b/tools/ngs_rna/cufflinks_wrapper.xml Tue May 17 11:39:52 2011 -0400
@@ -6,6 +6,7 @@
<command interpreter="python">
cufflinks_wrapper.py
--input=$input
+ --assembled-isoforms-output=$assembled_isoforms
--num-threads="4"
-I $max_intron_len
-F $min_isoform_fraction
@@ -95,7 +96,7 @@
<outputs><data format="tabular" name="genes_expression" label="${tool.name} on ${on_string}: gene expression" from_work_dir="genes.fpkm_tracking"/><data format="tabular" name="transcripts_expression" label="${tool.name} on ${on_string}: transcript expression" from_work_dir="isoforms.fpkm_tracking"/>
- <data format="gtf" name="assembled_isoforms" label="${tool.name} on ${on_string}: assembled transcripts" from_work_dir="transcripts.gtf"/>
+ <data format="gtf" name="assembled_isoforms" label="${tool.name} on ${on_string}: assembled transcripts"/></outputs><tests>
http://bitbucket.org/galaxy/galaxy-central/changeset/56b4c606cfd5/
changeset: r5574:56b4c606cfd5
user: fubar
date: 2011-05-17 18:14:32
summary: branch merge with Kelly's fixes
affected #: 5 files (16.5 KB)
--- a/tools/maf/genebed_maf_to_fasta.xml Tue May 17 11:39:52 2011 -0400
+++ b/tools/maf/genebed_maf_to_fasta.xml Tue May 17 12:14:32 2011 -0400
@@ -8,6 +8,7 @@
<inputs><param name="input1" type="data" format="bed" label="Gene BED File"><validator type="unspecified_build" />
+ <validator type="expression" message="Input must be in BED12 format.">value.metadata.columns >= 12</validator><!-- allow 12+ columns, not as strict as possible. TODO: only list bed files with 12+ columns --></param><conditional name="maf_source_type"><param name="maf_source" type="select" label="MAF Source">
--- a/tools/maf/interval2maf.xml Tue May 17 11:39:52 2011 -0400
+++ b/tools/maf/interval2maf.xml Tue May 17 12:14:32 2011 -0400
@@ -55,7 +55,7 @@
</when></conditional><conditional name="split_blocks_by_species_selector">
- <param name="split_blocks_by_species" type="select" label="Split blocks by species" help="See the Split MAF blocks by Species tool for more information.">
+ <param name="split_blocks_by_species" type="select" label="Split blocks by species" help="Not usually applicable. See help below for more information."><option value="split_blocks_by_species">Split by species</option><option value="dont_split_blocks_by_species" selected="true">Do not split</option></param>
@@ -112,5 +112,176 @@
.. image:: ./static/images/maf_icons/interval2maf.png
+-------
+
+**Split blocks by species**
+
+This option examines each MAF block for multiple occurrences of a species in a single block. When this occurs, a block is split into multiple blocks where every combination of one sequence per species per block is represented.
+
+The interface for this option has two inputs:
+
+ * **MAF file to split**. Choose multiple alignments from history to be split by species.
+ * **Collapse empty alignment columns**. Should alignment columns containing only gaps in the new blocks be removed.
+
+
+
+**Example 1**: **Collapse empty alignment columns is Yes**:
+
+For the following alignment::
+
+ ##maf version=1
+ a score=2047408.0
+ s species1.chr1 147984545 85 + 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTTGTCCTCAG
+ s species1.chr1 147984545 83 - 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTT--GTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTTGTCCTCAG
+ s species1.chr1 147984645 79 + 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTT------AG
+ s species1.chr1 147984645 79 - 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTC---GGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTTGTC---AG
+ s species2.chr1 129723125 85 + 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTCGTCCTCAG
+ s species2.chr1 129723125 83 - 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCT--GGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTCGTCCTCAG
+ s species2.chr1 129723925 79 + 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTC------AG
+ s species3.chr3 68255714 76 - 258222147 ATGGCGTCCGCCTCCTCAGGGCCAGCGGC---GGCGGGGTTTTCACCCCTTGATTCCGGGGTCCCTGCCGGTACCGC------AG
+
+the tool will create **a single** history item containing 12 alignment blocks (notice that no columns contain only gaps)::
+
+ ##maf version=1
+ a score=2047408.0
+ s species1.chr1 147984545 85 + 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTTGTCCTCAG
+ s species2.chr1 129723125 85 + 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTCGTCCTCAG
+ s species3.chr3 68255714 76 - 258222147 ATGGCGTCCGCCTCCTCAGGGCCAGCGGC---GGCGGGGTTTTCACCCCTTGATTCCGGGGTCCCTGCCGGTACCGC------AG
+
+ a score=2047408.0
+ s species1.chr1 147984545 83 - 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTT--GTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTTGTCCTCAG
+ s species2.chr1 129723125 85 + 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTCGTCCTCAG
+ s species3.chr3 68255714 76 - 258222147 ATGGCGTCCGCCTCCTCAGGGCCAGCGGC---GGCGGGGTTTTCACCCCTTGATTCCGGGGTCCCTGCCGGTACCGC------AG
+
+ a score=2047408.0
+ s species1.chr1 147984645 79 + 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTT------AG
+ s species2.chr1 129723125 85 + 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTCGTCCTCAG
+ s species3.chr3 68255714 76 - 258222147 ATGGCGTCCGCCTCCTCAGGGCCAGCGGC---GGCGGGGTTTTCACCCCTTGATTCCGGGGTCCCTGCCGGTACCGC------AG
+
+ a score=2047408.0
+ s species1.chr1 147984645 79 - 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTC---GGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTTGTC---AG
+ s species2.chr1 129723125 85 + 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTCGTCCTCAG
+ s species3.chr3 68255714 76 - 258222147 ATGGCGTCCGCCTCCTCAGGGCCAGCGGC---GGCGGGGTTTTCACCCCTTGATTCCGGGGTCCCTGCCGGTACCGC------AG
+
+ a score=2047408.0
+ s species1.chr1 147984545 85 + 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTTGTCCTCAG
+ s species2.chr1 129723125 83 - 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCT--GGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTCGTCCTCAG
+ s species3.chr3 68255714 76 - 258222147 ATGGCGTCCGCCTCCTCAGGGCCAGCGGC---GGCGGGGTTTTCACCCCTTGATTCCGGGGTCCCTGCCGGTACCGC------AG
+
+ a score=2047408.0
+ s species1.chr1 147984545 83 - 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTT-GTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTTGTCCTCAG
+ s species2.chr1 129723125 83 - 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCT-GGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTCGTCCTCAG
+ s species3.chr3 68255714 76 - 258222147 ATGGCGTCCGCCTCCTCAGGGCCAGCGGC--GGCGGGGTTTTCACCCCTTGATTCCGGGGTCCCTGCCGGTACCGC------AG
+
+ a score=2047408.0
+ s species1.chr1 147984645 79 + 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTT------AG
+ s species2.chr1 129723125 83 - 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCT--GGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTCGTCCTCAG
+ s species3.chr3 68255714 76 - 258222147 ATGGCGTCCGCCTCCTCAGGGCCAGCGGC---GGCGGGGTTTTCACCCCTTGATTCCGGGGTCCCTGCCGGTACCGC------AG
+
+ a score=2047408.0
+ s species1.chr1 147984645 79 - 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTC-GGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTTGTC---AG
+ s species2.chr1 129723125 83 - 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTCGTCCTCAG
+ s species3.chr3 68255714 76 - 258222147 ATGGCGTCCGCCTCCTCAGGGCCAGCGGC-GGCGGGGTTTTCACCCCTTGATTCCGGGGTCCCTGCCGGTACCGC------AG
+
+ a score=2047408.0
+ s species1.chr1 147984545 85 + 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTTGTCCTCAG
+ s species2.chr1 129723925 79 + 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTC------AG
+ s species3.chr3 68255714 76 - 258222147 ATGGCGTCCGCCTCCTCAGGGCCAGCGGC---GGCGGGGTTTTCACCCCTTGATTCCGGGGTCCCTGCCGGTACCGC------AG
+
+ a score=2047408.0
+ s species1.chr1 147984545 83 - 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTT--GTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTTGTCCTCAG
+ s species2.chr1 129723925 79 + 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTC------AG
+ s species3.chr3 68255714 76 - 258222147 ATGGCGTCCGCCTCCTCAGGGCCAGCGGC---GGCGGGGTTTTCACCCCTTGATTCCGGGGTCCCTGCCGGTACCGC------AG
+
+ a score=2047408.0
+ s species1.chr1 147984645 79 + 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTTAG
+ s species2.chr1 129723925 79 + 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTCAG
+ s species3.chr3 68255714 76 - 258222147 ATGGCGTCCGCCTCCTCAGGGCCAGCGGC---GGCGGGGTTTTCACCCCTTGATTCCGGGGTCCCTGCCGGTACCGCAG
+
+ a score=2047408.0
+ s species1.chr1 147984645 79 - 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTC---GGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTTGTCAG
+ s species2.chr1 129723925 79 + 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTC---AG
+ s species3.chr3 68255714 76 - 258222147 ATGGCGTCCGCCTCCTCAGGGCCAGCGGC---GGCGGGGTTTTCACCCCTTGATTCCGGGGTCCCTGCCGGTACCGC---AG
+
+
+
+**Example 2**: **Collapse empty alignment columns is No**:
+
+For the following alignment::
+
+ ##maf version=1
+ a score=2047408.0
+ s species1.chr1 147984545 85 + 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTTGTCCTCAG
+ s species1.chr1 147984545 83 - 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTT--GTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTTGTCCTCAG
+ s species1.chr1 147984645 79 + 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTT------AG
+ s species1.chr1 147984645 79 - 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTC---GGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTTGTC---AG
+ s species2.chr1 129723125 85 + 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTCGTCCTCAG
+ s species2.chr1 129723125 83 - 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCT--GGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTCGTCCTCAG
+ s species2.chr1 129723925 79 + 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTC------AG
+ s species3.chr3 68255714 76 - 258222147 ATGGCGTCCGCCTCCTCAGGGCCAGCGGC---GGCGGGGTTTTCACCCCTTGATTCCGGGGTCCCTGCCGGTACCGC------AG
+
+the tool will create **a single** history item containing 12 alignment blocks (notice that some columns contain only gaps)::
+
+ ##maf version=1
+ a score=2047408.0
+ s species1.chr1 147984545 85 + 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTTGTCCTCAG
+ s species2.chr1 129723125 85 + 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTCGTCCTCAG
+ s species3.chr3 68255714 76 - 258222147 ATGGCGTCCGCCTCCTCAGGGCCAGCGGC---GGCGGGGTTTTCACCCCTTGATTCCGGGGTCCCTGCCGGTACCGC------AG
+
+ a score=2047408.0
+ s species1.chr1 147984545 83 - 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTT--GTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTTGTCCTCAG
+ s species2.chr1 129723125 85 + 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTCGTCCTCAG
+ s species3.chr3 68255714 76 - 258222147 ATGGCGTCCGCCTCCTCAGGGCCAGCGGC---GGCGGGGTTTTCACCCCTTGATTCCGGGGTCCCTGCCGGTACCGC------AG
+
+ a score=2047408.0
+ s species1.chr1 147984645 79 + 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTT------AG
+ s species2.chr1 129723125 85 + 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTCGTCCTCAG
+ s species3.chr3 68255714 76 - 258222147 ATGGCGTCCGCCTCCTCAGGGCCAGCGGC---GGCGGGGTTTTCACCCCTTGATTCCGGGGTCCCTGCCGGTACCGC------AG
+
+ a score=2047408.0
+ s species1.chr1 147984645 79 - 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTC---GGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTTGTC---AG
+ s species2.chr1 129723125 85 + 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTCGTCCTCAG
+ s species3.chr3 68255714 76 - 258222147 ATGGCGTCCGCCTCCTCAGGGCCAGCGGC---GGCGGGGTTTTCACCCCTTGATTCCGGGGTCCCTGCCGGTACCGC------AG
+
+ a score=2047408.0
+ s species1.chr1 147984545 85 + 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTTGTCCTCAG
+ s species2.chr1 129723125 83 - 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCT--GGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTCGTCCTCAG
+ s species3.chr3 68255714 76 - 258222147 ATGGCGTCCGCCTCCTCAGGGCCAGCGGC---GGCGGGGTTTTCACCCCTTGATTCCGGGGTCCCTGCCGGTACCGC------AG
+
+ a score=2047408.0
+ s species1.chr1 147984545 83 - 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTT--GTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTTGTCCTCAG
+ s species2.chr1 129723125 83 - 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCT--GGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTCGTCCTCAG
+ s species3.chr3 68255714 76 - 258222147 ATGGCGTCCGCCTCCTCAGGGCCAGCGGC---GGCGGGGTTTTCACCCCTTGATTCCGGGGTCCCTGCCGGTACCGC------AG
+
+ a score=2047408.0
+ s species1.chr1 147984645 79 + 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTT------AG
+ s species2.chr1 129723125 83 - 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCT--GGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTCGTCCTCAG
+ s species3.chr3 68255714 76 - 258222147 ATGGCGTCCGCCTCCTCAGGGCCAGCGGC---GGCGGGGTTTTCACCCCTTGATTCCGGGGTCCCTGCCGGTACCGC------AG
+
+ a score=2047408.0
+ s species1.chr1 147984645 79 - 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTC---GGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTTGTC---AG
+ s species2.chr1 129723125 83 - 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCT--GGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTCGTCCTCAG
+ s species3.chr3 68255714 76 - 258222147 ATGGCGTCCGCCTCCTCAGGGCCAGCGGC---GGCGGGGTTTTCACCCCTTGATTCCGGGGTCCCTGCCGGTACCGC------AG
+
+ a score=2047408.0
+ s species1.chr1 147984545 85 + 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTTGTCCTCAG
+ s species2.chr1 129723925 79 + 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTC------AG
+ s species3.chr3 68255714 76 - 258222147 ATGGCGTCCGCCTCCTCAGGGCCAGCGGC---GGCGGGGTTTTCACCCCTTGATTCCGGGGTCCCTGCCGGTACCGC------AG
+
+ a score=2047408.0
+ s species1.chr1 147984545 83 - 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTT--GTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTTGTCCTCAG
+ s species2.chr1 129723925 79 + 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTC------AG
+ s species3.chr3 68255714 76 - 258222147 ATGGCGTCCGCCTCCTCAGGGCCAGCGGC---GGCGGGGTTTTCACCCCTTGATTCCGGGGTCCCTGCCGGTACCGC------AG
+
+ a score=2047408.0
+ s species1.chr1 147984645 79 + 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTT------AG
+ s species2.chr1 129723925 79 + 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTC------AG
+ s species3.chr3 68255714 76 - 258222147 ATGGCGTCCGCCTCCTCAGGGCCAGCGGC---GGCGGGGTTTTCACCCCTTGATTCCGGGGTCCCTGCCGGTACCGC------AG
+
+ a score=2047408.0
+ s species1.chr1 147984645 79 - 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTC---GGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTTGTC---AG
+ s species2.chr1 129723925 79 + 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTC------AG
+ s species3.chr3 68255714 76 - 258222147 ATGGCGTCCGCCTCCTCAGGGCCAGCGGC---GGCGGGGTTTTCACCCCTTGATTCCGGGGTCCCTGCCGGTACCGC------AG
+
</help></tool>
--- a/tools/maf/maf_to_bed.xml Tue May 17 11:39:52 2011 -0400
+++ b/tools/maf/maf_to_bed.xml Tue May 17 12:14:32 2011 -0400
@@ -1,5 +1,5 @@
<tool id="MAF_To_BED1" name="Maf to BED" force_history_refresh="True">
- <description>Converts a MAF formated file to the BED format</description>
+ <description>Converts a MAF formatted file to the BED format</description><command interpreter="python">maf_to_bed.py $input1 $out_file1 $species $complete_blocks $__new_file_path__</command><inputs><param format="maf" name="input1" type="data" label="MAF file to convert"/>
--- a/tools/maf/maf_to_fasta.xml Tue May 17 11:39:52 2011 -0400
+++ b/tools/maf/maf_to_fasta.xml Tue May 17 12:14:32 2011 -0400
@@ -1,5 +1,5 @@
<tool id="MAF_To_Fasta1" name="MAF to FASTA" version="1.0.1">
- <description>Converts a MAF formated file to FASTA format</description>
+ <description>Converts a MAF formatted file to FASTA format</description><command interpreter="python">
#if $fasta_target_type.fasta_type == "multiple" #maf_to_fasta_multiple_sets.py $input1 $out_file1 $fasta_target_type.species $fasta_target_type.complete_blocks
#else #maf_to_fasta_concat.py $fasta_target_type.species $input1 $out_file1
--- a/tools/ngs_rna/tophat_wrapper.xml Tue May 17 11:39:52 2011 -0400
+++ b/tools/ngs_rna/tophat_wrapper.xml Tue May 17 12:14:32 2011 -0400
@@ -1,4 +1,4 @@
-<tool id="tophat" name="Tophat" version="1.2.0">
+<tool id="tophat" name="Tophat" version="1.2.1"><description>Find splice junctions using RNA-seq data</description><requirements><requirement type="package">tophat</requirement>
@@ -100,7 +100,7 @@
--seg-length=$singlePaired.pParams.seg_length
--library-type=$singlePaired.pParams.library_type
- ## Indel search.
+ ## Indel search.
#if $singlePaired.pParams.indel_search.allow_indel_search == "Yes":
--allow-indels
--max-insertion-length $singlePaired.pParams.indel_search.max_insertion_length
@@ -386,6 +386,23 @@
( singlePaired['pParams']['indel_search']['allow_indel_search'] == 'Yes' ) )
)
</filter>
+ <actions>
+ <conditional name="refGenomeSource.genomeSource">
+ <when value="indexed">
+ <action type="metadata" name="dbkey">
+ <option type="from_data_table" name="tophat_indexes" column="1" offset="0">
+ <filter type="param_value" column="0" value="#" compare="startswith" keep="False"/>
+ <filter type="param_value" ref="refGenomeSource.index" column="0"/>
+ </option>
+ </action>
+ </when>
+ <when value="history">
+ <action type="metadata" name="dbkey">
+ <option type="from_param" name="refGenomeSource.ownFile" param_attribute="dbkey" />
+ </action>
+ </when>
+ </conditional>
+ </actions></data><data format="bed" name="deletions" label="${tool.name} on ${on_string}: deletions" from_work_dir="tophat_out/deletions.bed"><filter>
@@ -396,9 +413,62 @@
( singlePaired['pParams']['indel_search']['allow_indel_search'] == 'Yes' ) )
)
</filter>
+ <actions>
+ <conditional name="refGenomeSource.genomeSource">
+ <when value="indexed">
+ <action type="metadata" name="dbkey">
+ <option type="from_data_table" name="tophat_indexes" column="1" offset="0">
+ <filter type="param_value" column="0" value="#" compare="startswith" keep="False"/>
+ <filter type="param_value" ref="refGenomeSource.index" column="0"/>
+ </option>
+ </action>
+ </when>
+ <when value="history">
+ <action type="metadata" name="dbkey">
+ <option type="from_param" name="refGenomeSource.ownFile" param_attribute="dbkey" />
+ </action>
+ </when>
+ </conditional>
+ </actions></data>
- <data format="bed" name="junctions" label="${tool.name} on ${on_string}: splice junctions"/>
- <data format="bam" name="accepted_hits" label="${tool.name} on ${on_string}: accepted_hits"/>
+ <data format="bed" name="junctions" label="${tool.name} on ${on_string}: splice junctions">
+ <actions>
+ <conditional name="refGenomeSource.genomeSource">
+ <when value="indexed">
+ <action type="metadata" name="dbkey">
+ <option type="from_data_table" name="tophat_indexes" column="1" offset="0">
+ <filter type="param_value" column="0" value="#" compare="startswith" keep="False"/>
+ <filter type="param_value" ref="refGenomeSource.index" column="0"/>
+ </option>
+ </action>
+ </when>
+ <when value="history">
+ <action type="metadata" name="dbkey">
+ <option type="from_param" name="refGenomeSource.ownFile" param_attribute="dbkey" />
+ </action>
+ </when>
+ </conditional>
+ </actions>
+ </data>
+ <data format="bam" name="accepted_hits" label="${tool.name} on ${on_string}: accepted_hits">
+ <actions>
+ <conditional name="refGenomeSource.genomeSource">
+ <when value="indexed">
+ <action type="metadata" name="dbkey">
+ <option type="from_data_table" name="tophat_indexes" column="1" offset="0">
+ <filter type="param_value" column="0" value="#" compare="startswith" keep="False"/>
+ <filter type="param_value" ref="refGenomeSource.index" column="0"/>
+ </option>
+ </action>
+ </when>
+ <when value="history">
+ <action type="metadata" name="dbkey">
+ <option type="from_param" name="refGenomeSource.ownFile" param_attribute="dbkey" />
+ </action>
+ </when>
+ </conditional>
+ </actions>
+ </data></outputs><tests>
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0
1 new changeset in galaxy-central:
http://bitbucket.org/galaxy/galaxy-central/changeset/3c898577b4ee/
changeset: r5571:3c898577b4ee
user: dan
date: 2011-05-17 18:07:25
summary: Update tool help for some MAF tools.
affected #: 4 files (13.1 KB)
--- a/tools/maf/genebed_maf_to_fasta.xml Tue May 17 12:05:07 2011 -0400
+++ b/tools/maf/genebed_maf_to_fasta.xml Tue May 17 12:07:25 2011 -0400
@@ -8,6 +8,7 @@
<inputs><param name="input1" type="data" format="bed" label="Gene BED File"><validator type="unspecified_build" />
+ <validator type="expression" message="Input must be in BED12 format.">value.metadata.columns >= 12</validator><!-- allow 12+ columns, not as strict as possible. TODO: only list bed files with 12+ columns --></param><conditional name="maf_source_type"><param name="maf_source" type="select" label="MAF Source">
--- a/tools/maf/interval2maf.xml Tue May 17 12:05:07 2011 -0400
+++ b/tools/maf/interval2maf.xml Tue May 17 12:07:25 2011 -0400
@@ -55,7 +55,7 @@
</when></conditional><conditional name="split_blocks_by_species_selector">
- <param name="split_blocks_by_species" type="select" label="Split blocks by species" help="See the Split MAF blocks by Species tool for more information.">
+ <param name="split_blocks_by_species" type="select" label="Split blocks by species" help="Not usually applicable. See help below for more information."><option value="split_blocks_by_species">Split by species</option><option value="dont_split_blocks_by_species" selected="true">Do not split</option></param>
@@ -112,5 +112,176 @@
.. image:: ./static/images/maf_icons/interval2maf.png
+-------
+
+**Split blocks by species**
+
+This option examines each MAF block for multiple occurrences of a species in a single block. When this occurs, a block is split into multiple blocks where every combination of one sequence per species per block is represented.
+
+The interface for this option has two inputs:
+
+ * **MAF file to split**. Choose multiple alignments from history to be split by species.
+ * **Collapse empty alignment columns**. Should alignment columns containing only gaps in the new blocks be removed.
+
+
+
+**Example 1**: **Collapse empty alignment columns is Yes**:
+
+For the following alignment::
+
+ ##maf version=1
+ a score=2047408.0
+ s species1.chr1 147984545 85 + 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTTGTCCTCAG
+ s species1.chr1 147984545 83 - 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTT--GTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTTGTCCTCAG
+ s species1.chr1 147984645 79 + 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTT------AG
+ s species1.chr1 147984645 79 - 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTC---GGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTTGTC---AG
+ s species2.chr1 129723125 85 + 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTCGTCCTCAG
+ s species2.chr1 129723125 83 - 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCT--GGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTCGTCCTCAG
+ s species2.chr1 129723925 79 + 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTC------AG
+ s species3.chr3 68255714 76 - 258222147 ATGGCGTCCGCCTCCTCAGGGCCAGCGGC---GGCGGGGTTTTCACCCCTTGATTCCGGGGTCCCTGCCGGTACCGC------AG
+
+the tool will create **a single** history item containing 12 alignment blocks (notice that no columns contain only gaps)::
+
+ ##maf version=1
+ a score=2047408.0
+ s species1.chr1 147984545 85 + 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTTGTCCTCAG
+ s species2.chr1 129723125 85 + 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTCGTCCTCAG
+ s species3.chr3 68255714 76 - 258222147 ATGGCGTCCGCCTCCTCAGGGCCAGCGGC---GGCGGGGTTTTCACCCCTTGATTCCGGGGTCCCTGCCGGTACCGC------AG
+
+ a score=2047408.0
+ s species1.chr1 147984545 83 - 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTT--GTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTTGTCCTCAG
+ s species2.chr1 129723125 85 + 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTCGTCCTCAG
+ s species3.chr3 68255714 76 - 258222147 ATGGCGTCCGCCTCCTCAGGGCCAGCGGC---GGCGGGGTTTTCACCCCTTGATTCCGGGGTCCCTGCCGGTACCGC------AG
+
+ a score=2047408.0
+ s species1.chr1 147984645 79 + 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTT------AG
+ s species2.chr1 129723125 85 + 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTCGTCCTCAG
+ s species3.chr3 68255714 76 - 258222147 ATGGCGTCCGCCTCCTCAGGGCCAGCGGC---GGCGGGGTTTTCACCCCTTGATTCCGGGGTCCCTGCCGGTACCGC------AG
+
+ a score=2047408.0
+ s species1.chr1 147984645 79 - 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTC---GGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTTGTC---AG
+ s species2.chr1 129723125 85 + 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTCGTCCTCAG
+ s species3.chr3 68255714 76 - 258222147 ATGGCGTCCGCCTCCTCAGGGCCAGCGGC---GGCGGGGTTTTCACCCCTTGATTCCGGGGTCCCTGCCGGTACCGC------AG
+
+ a score=2047408.0
+ s species1.chr1 147984545 85 + 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTTGTCCTCAG
+ s species2.chr1 129723125 83 - 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCT--GGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTCGTCCTCAG
+ s species3.chr3 68255714 76 - 258222147 ATGGCGTCCGCCTCCTCAGGGCCAGCGGC---GGCGGGGTTTTCACCCCTTGATTCCGGGGTCCCTGCCGGTACCGC------AG
+
+ a score=2047408.0
+ s species1.chr1 147984545 83 - 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTT-GTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTTGTCCTCAG
+ s species2.chr1 129723125 83 - 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCT-GGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTCGTCCTCAG
+ s species3.chr3 68255714 76 - 258222147 ATGGCGTCCGCCTCCTCAGGGCCAGCGGC--GGCGGGGTTTTCACCCCTTGATTCCGGGGTCCCTGCCGGTACCGC------AG
+
+ a score=2047408.0
+ s species1.chr1 147984645 79 + 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTT------AG
+ s species2.chr1 129723125 83 - 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCT--GGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTCGTCCTCAG
+ s species3.chr3 68255714 76 - 258222147 ATGGCGTCCGCCTCCTCAGGGCCAGCGGC---GGCGGGGTTTTCACCCCTTGATTCCGGGGTCCCTGCCGGTACCGC------AG
+
+ a score=2047408.0
+ s species1.chr1 147984645 79 - 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTC-GGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTTGTC---AG
+ s species2.chr1 129723125 83 - 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTCGTCCTCAG
+ s species3.chr3 68255714 76 - 258222147 ATGGCGTCCGCCTCCTCAGGGCCAGCGGC-GGCGGGGTTTTCACCCCTTGATTCCGGGGTCCCTGCCGGTACCGC------AG
+
+ a score=2047408.0
+ s species1.chr1 147984545 85 + 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTTGTCCTCAG
+ s species2.chr1 129723925 79 + 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTC------AG
+ s species3.chr3 68255714 76 - 258222147 ATGGCGTCCGCCTCCTCAGGGCCAGCGGC---GGCGGGGTTTTCACCCCTTGATTCCGGGGTCCCTGCCGGTACCGC------AG
+
+ a score=2047408.0
+ s species1.chr1 147984545 83 - 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTT--GTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTTGTCCTCAG
+ s species2.chr1 129723925 79 + 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTC------AG
+ s species3.chr3 68255714 76 - 258222147 ATGGCGTCCGCCTCCTCAGGGCCAGCGGC---GGCGGGGTTTTCACCCCTTGATTCCGGGGTCCCTGCCGGTACCGC------AG
+
+ a score=2047408.0
+ s species1.chr1 147984645 79 + 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTTAG
+ s species2.chr1 129723925 79 + 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTCAG
+ s species3.chr3 68255714 76 - 258222147 ATGGCGTCCGCCTCCTCAGGGCCAGCGGC---GGCGGGGTTTTCACCCCTTGATTCCGGGGTCCCTGCCGGTACCGCAG
+
+ a score=2047408.0
+ s species1.chr1 147984645 79 - 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTC---GGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTTGTCAG
+ s species2.chr1 129723925 79 + 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTC---AG
+ s species3.chr3 68255714 76 - 258222147 ATGGCGTCCGCCTCCTCAGGGCCAGCGGC---GGCGGGGTTTTCACCCCTTGATTCCGGGGTCCCTGCCGGTACCGC---AG
+
+
+
+**Example 2**: **Collapse empty alignment columns is No**:
+
+For the following alignment::
+
+ ##maf version=1
+ a score=2047408.0
+ s species1.chr1 147984545 85 + 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTTGTCCTCAG
+ s species1.chr1 147984545 83 - 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTT--GTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTTGTCCTCAG
+ s species1.chr1 147984645 79 + 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTT------AG
+ s species1.chr1 147984645 79 - 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTC---GGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTTGTC---AG
+ s species2.chr1 129723125 85 + 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTCGTCCTCAG
+ s species2.chr1 129723125 83 - 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCT--GGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTCGTCCTCAG
+ s species2.chr1 129723925 79 + 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTC------AG
+ s species3.chr3 68255714 76 - 258222147 ATGGCGTCCGCCTCCTCAGGGCCAGCGGC---GGCGGGGTTTTCACCCCTTGATTCCGGGGTCCCTGCCGGTACCGC------AG
+
+the tool will create **a single** history item containing 12 alignment blocks (notice that some columns contain only gaps)::
+
+ ##maf version=1
+ a score=2047408.0
+ s species1.chr1 147984545 85 + 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTTGTCCTCAG
+ s species2.chr1 129723125 85 + 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTCGTCCTCAG
+ s species3.chr3 68255714 76 - 258222147 ATGGCGTCCGCCTCCTCAGGGCCAGCGGC---GGCGGGGTTTTCACCCCTTGATTCCGGGGTCCCTGCCGGTACCGC------AG
+
+ a score=2047408.0
+ s species1.chr1 147984545 83 - 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTT--GTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTTGTCCTCAG
+ s species2.chr1 129723125 85 + 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTCGTCCTCAG
+ s species3.chr3 68255714 76 - 258222147 ATGGCGTCCGCCTCCTCAGGGCCAGCGGC---GGCGGGGTTTTCACCCCTTGATTCCGGGGTCCCTGCCGGTACCGC------AG
+
+ a score=2047408.0
+ s species1.chr1 147984645 79 + 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTT------AG
+ s species2.chr1 129723125 85 + 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTCGTCCTCAG
+ s species3.chr3 68255714 76 - 258222147 ATGGCGTCCGCCTCCTCAGGGCCAGCGGC---GGCGGGGTTTTCACCCCTTGATTCCGGGGTCCCTGCCGGTACCGC------AG
+
+ a score=2047408.0
+ s species1.chr1 147984645 79 - 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTC---GGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTTGTC---AG
+ s species2.chr1 129723125 85 + 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTCGTCCTCAG
+ s species3.chr3 68255714 76 - 258222147 ATGGCGTCCGCCTCCTCAGGGCCAGCGGC---GGCGGGGTTTTCACCCCTTGATTCCGGGGTCCCTGCCGGTACCGC------AG
+
+ a score=2047408.0
+ s species1.chr1 147984545 85 + 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTTGTCCTCAG
+ s species2.chr1 129723125 83 - 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCT--GGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTCGTCCTCAG
+ s species3.chr3 68255714 76 - 258222147 ATGGCGTCCGCCTCCTCAGGGCCAGCGGC---GGCGGGGTTTTCACCCCTTGATTCCGGGGTCCCTGCCGGTACCGC------AG
+
+ a score=2047408.0
+ s species1.chr1 147984545 83 - 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTT--GTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTTGTCCTCAG
+ s species2.chr1 129723125 83 - 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCT--GGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTCGTCCTCAG
+ s species3.chr3 68255714 76 - 258222147 ATGGCGTCCGCCTCCTCAGGGCCAGCGGC---GGCGGGGTTTTCACCCCTTGATTCCGGGGTCCCTGCCGGTACCGC------AG
+
+ a score=2047408.0
+ s species1.chr1 147984645 79 + 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTT------AG
+ s species2.chr1 129723125 83 - 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCT--GGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTCGTCCTCAG
+ s species3.chr3 68255714 76 - 258222147 ATGGCGTCCGCCTCCTCAGGGCCAGCGGC---GGCGGGGTTTTCACCCCTTGATTCCGGGGTCCCTGCCGGTACCGC------AG
+
+ a score=2047408.0
+ s species1.chr1 147984645 79 - 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTC---GGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTTGTC---AG
+ s species2.chr1 129723125 83 - 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCT--GGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTCGTCCTCAG
+ s species3.chr3 68255714 76 - 258222147 ATGGCGTCCGCCTCCTCAGGGCCAGCGGC---GGCGGGGTTTTCACCCCTTGATTCCGGGGTCCCTGCCGGTACCGC------AG
+
+ a score=2047408.0
+ s species1.chr1 147984545 85 + 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTTGTCCTCAG
+ s species2.chr1 129723925 79 + 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTC------AG
+ s species3.chr3 68255714 76 - 258222147 ATGGCGTCCGCCTCCTCAGGGCCAGCGGC---GGCGGGGTTTTCACCCCTTGATTCCGGGGTCCCTGCCGGTACCGC------AG
+
+ a score=2047408.0
+ s species1.chr1 147984545 83 - 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTT--GTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTTGTCCTCAG
+ s species2.chr1 129723925 79 + 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTC------AG
+ s species3.chr3 68255714 76 - 258222147 ATGGCGTCCGCCTCCTCAGGGCCAGCGGC---GGCGGGGTTTTCACCCCTTGATTCCGGGGTCCCTGCCGGTACCGC------AG
+
+ a score=2047408.0
+ s species1.chr1 147984645 79 + 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTT------AG
+ s species2.chr1 129723925 79 + 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTC------AG
+ s species3.chr3 68255714 76 - 258222147 ATGGCGTCCGCCTCCTCAGGGCCAGCGGC---GGCGGGGTTTTCACCCCTTGATTCCGGGGTCCCTGCCGGTACCGC------AG
+
+ a score=2047408.0
+ s species1.chr1 147984645 79 - 245522847 ATGGCGTCGGCCTCCTCCGGGCCGTCGTC---GGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTTGTC---AG
+ s species2.chr1 129723925 79 + 229575298 ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTC------AG
+ s species3.chr3 68255714 76 - 258222147 ATGGCGTCCGCCTCCTCAGGGCCAGCGGC---GGCGGGGTTTTCACCCCTTGATTCCGGGGTCCCTGCCGGTACCGC------AG
+
</help></tool>
--- a/tools/maf/maf_to_bed.xml Tue May 17 12:05:07 2011 -0400
+++ b/tools/maf/maf_to_bed.xml Tue May 17 12:07:25 2011 -0400
@@ -1,5 +1,5 @@
<tool id="MAF_To_BED1" name="Maf to BED" force_history_refresh="True">
- <description>Converts a MAF formated file to the BED format</description>
+ <description>Converts a MAF formatted file to the BED format</description><command interpreter="python">maf_to_bed.py $input1 $out_file1 $species $complete_blocks $__new_file_path__</command><inputs><param format="maf" name="input1" type="data" label="MAF file to convert"/>
--- a/tools/maf/maf_to_fasta.xml Tue May 17 12:05:07 2011 -0400
+++ b/tools/maf/maf_to_fasta.xml Tue May 17 12:07:25 2011 -0400
@@ -1,5 +1,5 @@
<tool id="MAF_To_Fasta1" name="MAF to FASTA" version="1.0.1">
- <description>Converts a MAF formated file to FASTA format</description>
+ <description>Converts a MAF formatted file to FASTA format</description><command interpreter="python">
#if $fasta_target_type.fasta_type == "multiple" #maf_to_fasta_multiple_sets.py $input1 $out_file1 $fasta_target_type.species $fasta_target_type.complete_blocks
#else #maf_to_fasta_concat.py $fasta_target_type.species $input1 $out_file1
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0

commit/galaxy-central: kellyv: Modified Tophat wrapper so dbkey will be properly set both for built-in and history references
by Bitbucket 17 May '11
by Bitbucket 17 May '11
17 May '11
1 new changeset in galaxy-central:
http://bitbucket.org/galaxy/galaxy-central/changeset/0c1251f25c6b/
changeset: r5570:0c1251f25c6b
user: kellyv
date: 2011-05-17 18:05:07
summary: Modified Tophat wrapper so dbkey will be properly set both for built-in and history references
affected #: 1 file (3.4 KB)
--- a/tools/ngs_rna/tophat_wrapper.xml Tue May 17 11:21:26 2011 -0400
+++ b/tools/ngs_rna/tophat_wrapper.xml Tue May 17 12:05:07 2011 -0400
@@ -1,4 +1,4 @@
-<tool id="tophat" name="Tophat" version="1.2.0">
+<tool id="tophat" name="Tophat" version="1.2.1"><description>Find splice junctions using RNA-seq data</description><requirements><requirement type="package">tophat</requirement>
@@ -100,7 +100,7 @@
--seg-length=$singlePaired.pParams.seg_length
--library-type=$singlePaired.pParams.library_type
- ## Indel search.
+ ## Indel search.
#if $singlePaired.pParams.indel_search.allow_indel_search == "Yes":
--allow-indels
--max-insertion-length $singlePaired.pParams.indel_search.max_insertion_length
@@ -386,6 +386,23 @@
( singlePaired['pParams']['indel_search']['allow_indel_search'] == 'Yes' ) )
)
</filter>
+ <actions>
+ <conditional name="refGenomeSource.genomeSource">
+ <when value="indexed">
+ <action type="metadata" name="dbkey">
+ <option type="from_data_table" name="tophat_indexes" column="1" offset="0">
+ <filter type="param_value" column="0" value="#" compare="startswith" keep="False"/>
+ <filter type="param_value" ref="refGenomeSource.index" column="0"/>
+ </option>
+ </action>
+ </when>
+ <when value="history">
+ <action type="metadata" name="dbkey">
+ <option type="from_param" name="refGenomeSource.ownFile" param_attribute="dbkey" />
+ </action>
+ </when>
+ </conditional>
+ </actions></data><data format="bed" name="deletions" label="${tool.name} on ${on_string}: deletions" from_work_dir="tophat_out/deletions.bed"><filter>
@@ -396,9 +413,62 @@
( singlePaired['pParams']['indel_search']['allow_indel_search'] == 'Yes' ) )
)
</filter>
+ <actions>
+ <conditional name="refGenomeSource.genomeSource">
+ <when value="indexed">
+ <action type="metadata" name="dbkey">
+ <option type="from_data_table" name="tophat_indexes" column="1" offset="0">
+ <filter type="param_value" column="0" value="#" compare="startswith" keep="False"/>
+ <filter type="param_value" ref="refGenomeSource.index" column="0"/>
+ </option>
+ </action>
+ </when>
+ <when value="history">
+ <action type="metadata" name="dbkey">
+ <option type="from_param" name="refGenomeSource.ownFile" param_attribute="dbkey" />
+ </action>
+ </when>
+ </conditional>
+ </actions></data>
- <data format="bed" name="junctions" label="${tool.name} on ${on_string}: splice junctions"/>
- <data format="bam" name="accepted_hits" label="${tool.name} on ${on_string}: accepted_hits"/>
+ <data format="bed" name="junctions" label="${tool.name} on ${on_string}: splice junctions">
+ <actions>
+ <conditional name="refGenomeSource.genomeSource">
+ <when value="indexed">
+ <action type="metadata" name="dbkey">
+ <option type="from_data_table" name="tophat_indexes" column="1" offset="0">
+ <filter type="param_value" column="0" value="#" compare="startswith" keep="False"/>
+ <filter type="param_value" ref="refGenomeSource.index" column="0"/>
+ </option>
+ </action>
+ </when>
+ <when value="history">
+ <action type="metadata" name="dbkey">
+ <option type="from_param" name="refGenomeSource.ownFile" param_attribute="dbkey" />
+ </action>
+ </when>
+ </conditional>
+ </actions>
+ </data>
+ <data format="bam" name="accepted_hits" label="${tool.name} on ${on_string}: accepted_hits">
+ <actions>
+ <conditional name="refGenomeSource.genomeSource">
+ <when value="indexed">
+ <action type="metadata" name="dbkey">
+ <option type="from_data_table" name="tophat_indexes" column="1" offset="0">
+ <filter type="param_value" column="0" value="#" compare="startswith" keep="False"/>
+ <filter type="param_value" ref="refGenomeSource.index" column="0"/>
+ </option>
+ </action>
+ </when>
+ <when value="history">
+ <action type="metadata" name="dbkey">
+ <option type="from_param" name="refGenomeSource.ownFile" param_attribute="dbkey" />
+ </action>
+ </when>
+ </conditional>
+ </actions>
+ </data></outputs><tests>
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0

commit/galaxy-central: jgoecks: Enable Cufflinks to work when setting metadata externally.
by Bitbucket 17 May '11
by Bitbucket 17 May '11
17 May '11
1 new changeset in galaxy-central:
http://bitbucket.org/galaxy/galaxy-central/changeset/ccef03be136b/
changeset: r5569:ccef03be136b
user: jgoecks
date: 2011-05-17 17:21:26
summary: Enable Cufflinks to work when setting metadata externally.
affected #: 2 files (331 bytes)
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0
1 new changeset in galaxy-central:
http://bitbucket.org/galaxy/galaxy-central/changeset/39a034c36baa/
changeset: r5568:39a034c36baa
user: kellyv
date: 2011-05-17 07:57:04
summary: Numerous updates to Picard tools: Cleaned up and standardized wrapper's Python code, removing redundant variables and using the same ones in different segment of code when possible; Changed sam/bam outputs to be bam by default and use change_format if user requests sam and removed redundant output parameters; Got tests passing for AddOrReplaceReadGroups; Relaxed the matching constraints for output for BamIndexStats and InsertSize wrappers Standardized on the parameter output-format rather than newformat to indicate sam preference over bam
affected #: 14 files (2.5 KB)
--- a/test-data/picard_ARRG_output1.sam Mon May 16 17:08:06 2011 -0400
+++ b/test-data/picard_ARRG_output1.sam Tue May 17 01:57:04 2011 -0400
@@ -3,22 +3,22 @@
@SQ SN:chr2 LN:100001
@SQ SN:chr3 LN:10001
@SQ SN:chr4 LN:1001
-@RG ID:1 PL:illumina PU:plat LB:lib SM:sam1
-bar:record:4 77 chr1 1 0 * * 0 0 AAAAAAAAAAAAA 1111111111111 RG:Z:1
-bar:record:6 77 chr1 1 0 * * 0 0 AAAAAAAAAAAAA 1111111111111 RG:Z:1
-bar:record:1 77 chr1 10 0 * * 0 0 AAAAAAAAAAAAA 1111111111111 RG:Z:1
-bar:record:3 77 chr1 10 0 * * 0 0 AAAAAAAAAAAAA 1111111111111 RG:Z:1
-bar:record:1 141 chr1 20 0 * * 0 0 CCCCCCCCCCCCC 2222222222222 RG:Z:1
-bar:record:7 77 chr1 20 0 * * 0 0 AAAAAAAAAAAAA 1111111111111 RG:Z:1
-bar:record:8 77 chr1 30 0 * * 0 0 AAAAAAAAAAAAA 1111111111111 RG:Z:1
-bar:record:4 141 chr1 40 0 * * 0 0 CCCCCCCCCCCCC 2222222222222 RG:Z:1
-bar:record:5 77 chr1 40 0 * * 0 0 AAAAAAAAAAAAA 1111111111111 RG:Z:1
-bar:record:6 141 chr1 50 0 * * 0 0 CCCCCCCCCCCCC 2222222222222 RG:Z:1
-bar:record:2 77 chr2 10 0 * * 0 0 AAAAAAAAAAAAA 1111111111111 RG:Z:1
-bar:record:2 141 chr2 30 0 * * 0 0 CCCCCCCCCCCCC 2222222222222 RG:Z:1
-bar:record:3 141 chr3 20 0 * * 0 0 CCCCCCCCCCCCC 2222222222222 RG:Z:1
-bar:record:8 141 chr3 20 0 * * 0 0 CCCCCCCCCCCCC 2222222222222 RG:Z:1
-bar:record:5 141 chr3 40 0 * * 0 0 CCCCCCCCCCCCC 2222222222222 RG:Z:1
-bar:record:9 77 chr4 10 0 * * 0 0 AAAAAAAAAAAAA 1111111111111 RG:Z:1
-bar:record:7 141 chr4 20 0 * * 0 0 CCCCCCCCCCCCC 2222222222222 RG:Z:1
-bar:record:9 141 chr4 60 0 * * 0 0 CCCCCCCCCCCCC 2222222222222 RG:Z:1
+@RG ID:one PL:illumina PU:peaewe LB:lib SM:sam1
+bar:record:4 77 chr1 1 0 * * 0 0 AAAAAAAAAAAAA 1111111111111 RG:Z:one
+bar:record:6 77 chr1 1 0 * * 0 0 AAAAAAAAAAAAA 1111111111111 RG:Z:one
+bar:record:1 77 chr1 10 0 * * 0 0 AAAAAAAAAAAAA 1111111111111 RG:Z:one
+bar:record:3 77 chr1 10 0 * * 0 0 AAAAAAAAAAAAA 1111111111111 RG:Z:one
+bar:record:1 141 chr1 20 0 * * 0 0 CCCCCCCCCCCCC 2222222222222 RG:Z:one
+bar:record:7 77 chr1 20 0 * * 0 0 AAAAAAAAAAAAA 1111111111111 RG:Z:one
+bar:record:8 77 chr1 30 0 * * 0 0 AAAAAAAAAAAAA 1111111111111 RG:Z:one
+bar:record:4 141 chr1 40 0 * * 0 0 CCCCCCCCCCCCC 2222222222222 RG:Z:one
+bar:record:5 77 chr1 40 0 * * 0 0 AAAAAAAAAAAAA 1111111111111 RG:Z:one
+bar:record:6 141 chr1 50 0 * * 0 0 CCCCCCCCCCCCC 2222222222222 RG:Z:one
+bar:record:2 77 chr2 10 0 * * 0 0 AAAAAAAAAAAAA 1111111111111 RG:Z:one
+bar:record:2 141 chr2 30 0 * * 0 0 CCCCCCCCCCCCC 2222222222222 RG:Z:one
+bar:record:3 141 chr3 20 0 * * 0 0 CCCCCCCCCCCCC 2222222222222 RG:Z:one
+bar:record:8 141 chr3 20 0 * * 0 0 CCCCCCCCCCCCC 2222222222222 RG:Z:one
+bar:record:5 141 chr3 40 0 * * 0 0 CCCCCCCCCCCCC 2222222222222 RG:Z:one
+bar:record:9 77 chr4 10 0 * * 0 0 AAAAAAAAAAAAA 1111111111111 RG:Z:one
+bar:record:7 141 chr4 20 0 * * 0 0 CCCCCCCCCCCCC 2222222222222 RG:Z:one
+bar:record:9 141 chr4 60 0 * * 0 0 CCCCCCCCCCCCC 2222222222222 RG:Z:one
--- a/test-data/picard_ARRG_output2.sam Mon May 16 17:08:06 2011 -0400
+++ b/test-data/picard_ARRG_output2.sam Tue May 17 01:57:04 2011 -0400
@@ -2,14 +2,23 @@
@SQ SN:chr1 LN:10001
@SQ SN:chr2 LN:100001
@SQ SN:chr3 LN:10001
+@SQ SN:chr4 LN:1001
@RG ID:M5 PL:IL PU:PLAT LB:LIB DS:description with spaces SM:smp CN:FamousCenter
bar:record:4 77 chr1 1 0 * * 0 0 AAAAAAAAAAAAA 1111111111111 RG:Z:M5
+bar:record:6 77 chr1 1 0 * * 0 0 AAAAAAAAAAAAA 1111111111111 RG:Z:M5
bar:record:1 77 chr1 10 0 * * 0 0 AAAAAAAAAAAAA 1111111111111 RG:Z:M5
bar:record:3 77 chr1 10 0 * * 0 0 AAAAAAAAAAAAA 1111111111111 RG:Z:M5
bar:record:1 141 chr1 20 0 * * 0 0 CCCCCCCCCCCCC 2222222222222 RG:Z:M5
+bar:record:7 77 chr1 20 0 * * 0 0 AAAAAAAAAAAAA 1111111111111 RG:Z:M5
+bar:record:8 77 chr1 30 0 * * 0 0 AAAAAAAAAAAAA 1111111111111 RG:Z:M5
bar:record:4 141 chr1 40 0 * * 0 0 CCCCCCCCCCCCC 2222222222222 RG:Z:M5
bar:record:5 77 chr1 40 0 * * 0 0 AAAAAAAAAAAAA 1111111111111 RG:Z:M5
+bar:record:6 141 chr1 50 0 * * 0 0 CCCCCCCCCCCCC 2222222222222 RG:Z:M5
bar:record:2 77 chr2 10 0 * * 0 0 AAAAAAAAAAAAA 1111111111111 RG:Z:M5
bar:record:2 141 chr2 30 0 * * 0 0 CCCCCCCCCCCCC 2222222222222 RG:Z:M5
bar:record:3 141 chr3 20 0 * * 0 0 CCCCCCCCCCCCC 2222222222222 RG:Z:M5
+bar:record:8 141 chr3 20 0 * * 0 0 CCCCCCCCCCCCC 2222222222222 RG:Z:M5
bar:record:5 141 chr3 40 0 * * 0 0 CCCCCCCCCCCCC 2222222222222 RG:Z:M5
+bar:record:9 77 chr4 10 0 * * 0 0 AAAAAAAAAAAAA 1111111111111 RG:Z:M5
+bar:record:7 141 chr4 20 0 * * 0 0 CCCCCCCCCCCCC 2222222222222 RG:Z:M5
+bar:record:9 141 chr4 60 0 * * 0 0 CCCCCCCCCCCCC 2222222222222 RG:Z:M5
--- a/test-data/picard_BIS_output1.txt Mon May 16 17:08:06 2011 -0400
+++ b/test-data/picard_BIS_output1.txt Tue May 17 01:57:04 2011 -0400
@@ -13,8 +13,8 @@
<body><div class="document">
Galaxy tool BamIndexStats run at 12/05/2011 14:18:06</b><br/><b>The following output files were created (click the filename to view/download a copy):</b><hr/><table>
+<tr><td><a href="BamIndexStats.log">BamIndexStats.log</a></td></tr><tr><td><a href="BamIndexStats.metrics.txt">BamIndexStats.metrics.txt</a></td></tr>
-<tr><td><a href="BamIndexStats.log">BamIndexStats.log</a></td></tr></table><p/><b>Picard on line resources</b><ul><li><a href="http://picard.sourceforge.net/index.shtml">Click here for Picard Documentation</a></li>
--- a/test-data/picard_BIS_output2.txt Mon May 16 17:08:06 2011 -0400
+++ b/test-data/picard_BIS_output2.txt Tue May 17 01:57:04 2011 -0400
@@ -13,8 +13,8 @@
<body><div class="document">
Galaxy tool BamIndexStats run at 12/05/2011 14:18:22</b><br/><b>The following output files were created (click the filename to view/download a copy):</b><hr/><table>
+<tr><td><a href="BamIndexStats.log">BamIndexStats.log</a></td></tr><tr><td><a href="BamIndexStats.metrics.txt">BamIndexStats.metrics.txt</a></td></tr>
-<tr><td><a href="BamIndexStats.log">BamIndexStats.log</a></td></tr></table><p/><b>Picard on line resources</b><ul><li><a href="http://picard.sourceforge.net/index.shtml">Click here for Picard Documentation</a></li>
--- a/tools/picard/picard_AddOrReplaceReadGroups.xml Mon May 16 17:08:06 2011 -0400
+++ b/tools/picard/picard_AddOrReplaceReadGroups.xml Tue May 17 01:57:04 2011 -0400
@@ -1,4 +1,4 @@
-<tool name="Add or Replace Groups:" id="picard_ARRG" version="0.01">
+<tool name="Add or Replace Groups:" id="picard_ARRG" version="0.2.0"><requirements><requirement type="package">picard</requirement></requirements><description>(Picard)</description><command interpreter="python">
@@ -8,18 +8,14 @@
--rg-pl="$rgpl"
--rg-pu="$rgpu"
--rg-sm="$rgsm"
+ --rg-id="$rgid"
--rg-opts=${readGroupOpts.rgOpts}
#if $readGroupOpts.rgOpts == "full"
- --rg-id="$readGroupOpts.rgid"
--rg-cn="$readGroupOpts.rgcn"
--rg-ds="$readGroupOpts.rgds"
#end if
--output-format=$outputFormat
- #if str( $outputFormat ) == "sam"
- --output-sam=$outFileSam
- #else if str( $outputFormat ) == "bam"
- --output-sam=$outFileBam
- #end if
+ --output=$outFile
-j "${GALAXY_DATA_INDEX_DIR}/shared/jars/AddOrReplaceReadGroups.jar"
</command><inputs>
@@ -29,14 +25,14 @@
<param name="rgpl" value="" type="text" label="Read group platform" help="illumina, solid, etc." /><param name="rgpu" value="" type="text" label="Read group platform unit" help="like run barcode, etc." /><param name="rgsm" value="" type="text" label="Read group sample name" />
+ <param name="rgid" value="1" type="text" label="Read group ID" help="Picard will use a value of '1' if nothing provided" /><conditional name="readGroupOpts">
- <param name="rgOpts" type="select" label="Specify additional (optional) arguments" help="Allows you to set RGID, RGCN, and RGDS">
+ <param name="rgOpts" type="select" label="Specify additional (optional) arguments" help="Allows you to set RGCN and RGDS."><option value="preSet">Use pre-set defaults</option><option value="full">Set optional arguments</option></param><when value="preSet" /><when value="full">
- <param name="rgid" value="" type="text" label="Read group ID" /><param name="rgcn" value="" type="text" label="Read group sequencing center name" help="Leave set to <null> for default (none)" /><param name="rgds" value="" type="text" label="Read group description" help="Leave set to <null> for default (none)" /></when>
@@ -44,70 +40,58 @@
<param name="outputFormat" type="boolean" checked="True" truevalue="bam" falsevalue="sam" label="Output bam instead of sam" help="Uncheck for sam output" /></inputs><outputs>
- <data name="outFileSam" format="sam" label="${tool.name} on ${on_string}: sam with read groups replaced">
- <filter>outputFormat is False</filter>
- </data>
- <data name="outFileBam" format="bam" label="${tool.name} on ${on_string}: bam with read groups replaced">
- <filter>outputFormat is True</filter>
+ <data name="outFile" format="bam" label="${tool.name} on ${on_string}: ${outputFormat} with read groups replaced">
+ <change_format>
+ <when input="outputFormat" value="sam" format="sam" />
+ </change_format></data></outputs><tests><test>
- <!-- Command:
- java -jar AddOrReplaceReadGroups.jar VALIDATION_STRINGENCY=LENIENT I=picard_input_input1.sam O=picard_ARG_output1.sam RGLB=lib RGPL=illumina RGPU=plat RGSM=sam1
+ <!-- Command for replacing read groups in bam:
+ java -jar AddOrReplaceReadGroups.jar VALIDATION_STRINGENCY=LENIENT I=test-data/picard_ARRG_input1.bam O=picard_ARRG_output1.sam RGID=one RGLB=lib RGPL=illumina RGPU=peaewe RGSM=sam1
+ -->
+ <param name="inputFile" value="picard_ARRG_input1.bam" />
+ <param name="rglb" value="lib" />
+ <param name="rgpl" value="illumina" />
+ <param name="rgpu" value="peaewe" />
+ <param name="rgsm" value="sam1" />
+ <param name="rgid" value="one" />
+ <param name="rgOpts" value="preSet" />
+ <param name="outputFormat" value="False" />
+ <output name="outFile" file="picard_ARRG_output1.sam" ftype="sam" />
+ </test>
+ <test>
+ <!-- Command for replacing read groups in sam:
+ java -jar AddOrReplaceReadGroups.jar VALIDATION_STRINGENCY=LENIENT I=test-data/picard_ARRG_input1.sam O=picard_ARRG_output2.sam RGLB=LIB RGPL=IL RGPU=PLAT RGSM=smp RGID=M5 RGCN=FamousCenter RGDS="description with spaces"
+ picard_ARRG_input1.bam can be created from picard_ARRG_input1.sam
--><param name="inputFile" value="picard_ARRG_input1.sam" />
- <param name="rglb" value="lib" />
- <param name="rgpl" value="illumina" />
- <param name="rgpu" value="plat" />
- <param name="rgsm" value="sam1" />
- <param name="rgOpts" value="preSet" />
- <param name="outputFormat" value="sam" />
- <output name="outFileSam" file="picard_ARRG_output1.sam" />
- </test>
- <!-- Functional tests with Picard bam outputs currently aren't working
- <test>
- -->
- <!-- Command:
- java -jar AddOrReplaceReadGroups.jar VALIDATION_STRINGENCY=LENIENT I=picard_ARRG_input1.bam O=picard_ARRG_output2.sam RGLB=LIB RGPL=IL RGPU=PLAT RGSM=smp RGID=M5 RGCN=FamousCenter RGDS="description with spaces"
- picard_ARRG_input1.bam can be created from picard_ARRG_input1.sam
- -->
- <!--
- <param name="inputFile" value="picard_ARRG_input1.bam" />
- <param name="sortOrder" value="" /><param name="rglb" value="LIB" /><param name="rgpl" value="IL" /><param name="rgpu" value="PLAT" /><param name="rgsm" value="smp" />
+ <param name="rgid" value="M5" /><param name="rgOpts" value="full" />
- <param name="rgid" value="M5" /><param name="rgcn" value="FamousCenter" /><param name="rgds" value="description with spaces" />
- <param name="outputFormat" value="sam" />
- <output name="outFileSam" ftype="picard_ARRG_output2.sam" />
+ <param name="outputFormat" value="False" />
+ <output name="outFile" file="picard_ARRG_output2.sam" ftype="sam" /></test>
- -->
- <!-- Functional tests with Picard bam outputs currently aren't working
<test>
- -->
- <!-- Command:
- java -jar AddOrReplaceReadGroups.jar VALIDATION_STRINGENCY=LENIENT I=picard_ARRG_input1.sam O=picard_ARRG_output2.bam RGLB=LIB RGPL=IL RGPU=PLAT RGSM=smp RGID=M5 RGCN=FamousCenter RGDS="description with spaces"
+ <!-- Command for adding read groups in sam:
+ java -jar AddOrReplaceReadGroups.jar VALIDATION_STRINGENCY=LENIENT I=test-data/picard_ARRG_input2.sam O=picard_ARRG_output3.bam RGID=M6 RGLB=LIB RGPL=IL RGPU=PLAT RGSM=smp1
-->
- <!--
- <param name="inputFile" value="picard_ARRG_input1.sam" />
- <param name="sortOrder" value="" />
+ <param name="inputFile" value="picard_ARRG_input2.sam" /><param name="rglb" value="LIB" /><param name="rgpl" value="IL" /><param name="rgpu" value="PLAT" />
- <param name="rgsm" value="smp" />
- <param name="rgOpts" value="full" />
- <param name="rgid" value="M5" />
- <param name="rgcn" value="FamousCenter" />
- <param name="rgds" value="description with spaces" />
- <param name="outputFormat" value="bam" />
- <output name="outFileBam" ftype="picard_ARRG_output2.bam" />
+ <param name="rgsm" value="smp1" />
+ <param name="rgid" value="M6" />
+ <param name="rgOpts" value="preSet" />
+ <param name="outputFormat" value="True" />
+ <output name="outFile" file="picard_ARRG_output3.bam" ftype="bam" /></test>
- --></tests><help>
--- a/tools/picard/picard_BamIndexStats.xml Mon May 16 17:08:06 2011 -0400
+++ b/tools/picard/picard_BamIndexStats.xml Tue May 17 01:57:04 2011 -0400
@@ -1,4 +1,4 @@
-<tool name="BAM Index Statistics:" id="picard_BamIndexStats" version="0.01">
+<tool name="BAM Index Statistics:" id="picard_BamIndexStats" version="0.2.0"><requirements><requirement type="package">picard</requirement></requirements><description>(Picard)</description><command interpreter="python">
@@ -23,7 +23,7 @@
picard_input_tiny_coord.bam can be created from picard_input_tiny_coord.sam
--><param name="input_file" value="picard_input_tiny_coord.bam" ftype="bam" />
- <output name="htmlfile" file="picard_BIS_output1.txt" ftype="html" lines_diff="12"/>
+ <output name="htmlfile" file="picard_BIS_output1.txt" ftype="html" compare="contains" lines_diff="12"/></test><test><!-- Command
@@ -31,7 +31,7 @@
picard_BIS_input1.bam can be created from picard_BIS_input1.sam
--><param name="input_file" value="picard_BIS_input1.bam" ftype="bam" />
- <output name="htmlfile" file="picard_BIS_output2.txt" ftype="html" lines_diff="12" />
+ <output name="htmlfile" file="picard_BIS_output2.txt" ftype="html" compare="contains" lines_diff="12" /></test></tests><help>
--- a/tools/picard/picard_ReorderSam.xml Mon May 16 17:08:06 2011 -0400
+++ b/tools/picard/picard_ReorderSam.xml Tue May 17 01:57:04 2011 -0400
@@ -1,22 +1,22 @@
-<tool name="Reorder SAM:" id="picard_ReorderSam" version="0.02">
+<tool name="Reorder SAM:" id="picard_ReorderSam" version="0.3.0"><requirements><requirement type="package">picard</requirement></requirements><description>(Picard)</description><command interpreter="python">
- picard_wrapper.py -d "$html_file.files_path" -t "$html_file" --input=$inputFile
+ picard_wrapper.py
+ --input=$inputFile
#if $source.indexSource == "built-in"
--ref="${ filter( lambda x: str( x[0] ) == str( $source.ref ), $__app__.tool_data_tables[ 'picard_indexes' ].get_fields() )[0][-1] }"
#else
- --ref-file=$source.refFile
+ --ref-file=$refFile
--species-name=$source.speciesName
--build-name=$source.buildName
--trunc-names=$source.truncateSeqNames
#end if
--allow-inc-dict-concord=$allowIncDictConcord
--allow-contig-len-discord=$allowContigLenDiscord
- --newformat=$outputFormat
- --output="$out_file"
+ --output-format=$outputFormat
+ --output=$outFile
-j "${GALAXY_DATA_INDEX_DIR}/shared/jars/ReorderSam.jar"
- --picard-cmd="ReorderSam"
</command><inputs><param format="bam,sam" name="inputFile" type="data" label="The sam or bam file in your current history whose header you want to replace"
@@ -42,25 +42,21 @@
<param name="allowContigLenDiscord" type="boolean" checked="False" truevalue="true" falsevalue="false" label="Allow contig length discordance?" help="This is dangerous--don't check it unless you know exactly what you're doing!" /><param name="outputFormat" type="boolean" checked="True" truevalue="bam" falsevalue="sam" label="Output bam instead of sam" help="Uncheck for sam output" /></inputs>
- <outputs>
- <data format="html" name="html_file" label="ReorderBam_on_${on_string}.html" />
- <data format="bam" name="out_file" label="ReorderBam_on_${on_string}.${outputFormat}">
- <change_format>
- <when input="outputFormat" value="sam" format="sam" />
- </change_format>
+ <outputs>
+ <data name="outFile" format="bam" label="${tool.name} on ${on_string}: reordered ${outputFormat}">
+ <change_format>
+ <when input="outputFormat" value="sam" format="sam" />
+ </change_format></data></outputs><tests>
- <!-- Functional tests with Picard bam outputs currently aren't working
<test>
- --><!-- Commands:
cp test-data/phiX.fasta .
samtools faidx phiX.fasta
java -jar CreateSequenceDictionary.jar R=phiX.fasta O=phiX.dict URI=phiX.fasta TRUNCATE_NAMES_AT_WHITESPACE=false SPECIES=phiX174
java -jar ReorderSam.jar VALIDATION_STRINGENCY=LENIENT I=test-data/picard_RS_input1.bam O=picard_RS_output1.bam REFERENCE=phiX.fasta ALLOW_INCOMPLETE_DICT_CONCORDANCE=false ALLOW_CONTIG_LENGTH_DISCORDANCE=false
-->
- <!--
<param name="inputFile" value="picard_RS_input1.bam" /><param name="indexSource" value="history" /><param name="refFile" value="phiX.fasta" />
@@ -69,10 +65,9 @@
<param name="truncateSeqNames" value="false" /><param name="allowIncDictConcord" value="false" /><param name="allowContigLenDiscord" value="false" />
- <param name="outputFormat" value="bam" />
- <output name="outFileBam" file="picard_RS_output1.bam" ftype="bam" lines_diff="2" />
+ <param name="outputFormat" value="True" />
+ <output name="outFile" file="picard_RS_output1.bam" ftype="bam" lines_diff="4" compare="contains" /></test>
- --><test><!-- Command:
java -jar ReorderSam.jar VALIDATION_STRINGENCY=LENIENT I=test-data/picard_RS_input2.sam O=picard_RS_output2.sam REFERENCE=/path/to/phiX/picard_index/phiX.fa ALLOW_INCOMPLETE_DICT_CONCORDANCE=false ALLOW_CONTIG_LENGTH_DISCORDANCE=false
@@ -83,8 +78,8 @@
<param name="ref" value="phiX" /><param name="allowIncDictConcord" value="false" /><param name="allowContigLenDiscord" value="false" />
- <param name="outputFormat" value="sam" />
- <output name="outFileSam" file="picard_RS_output2.sam" ftype="sam" lines_diff="2" />
+ <param name="outputFormat" value="False" />
+ <output name="outFile" file="picard_RS_output2.sam" ftype="sam" lines_diff="4" sort="True" /></test><test><!-- Commands:
@@ -102,8 +97,8 @@
<param name="truncateSeqNames" value="true" /><param name="allowIncDictConcord" value="true" /><param name="allowContigLenDiscord" value="false" />
- <param name="outputFormat" value="sam" />
- <output name="outFileSam" file="picard_RS_output3.sam" ftype="sam" lines_diff="12" sort="True" />
+ <param name="outputFormat" value="False" />
+ <output name="outFile" file="picard_RS_output3.sam" ftype="sam" lines_diff="12" sort="True" /></test></tests><help>
--- a/tools/picard/picard_ReplaceSamHeader.xml Mon May 16 17:08:06 2011 -0400
+++ b/tools/picard/picard_ReplaceSamHeader.xml Tue May 17 01:57:04 2011 -0400
@@ -1,14 +1,10 @@
-<tool name="Replace Sam Header:" id="picard_ReplaceSamHeader" version="0.0.1">
+<tool name="Replace Sam Header:" id="picard_ReplaceSamHeader" version="0.2.0"><requirements><requirement type="package">picard</requirement></requirements><description>(Picard)</description><command interpreter="python">
picard_wrapper.py
--input "$inputFile"
- #if str( $outputFormat ) == "sam"
- -o "$outFileSam"
- #else if str( $outputFormat ) == "bam"
- -o "$outFileBam"
- #end if
+ -o $outFile
--header-file $headerFile
--output-format $outputFormat
-j "${GALAXY_DATA_INDEX_DIR}/shared/jars/ReplaceSamHeader.jar"
@@ -19,17 +15,13 @@
help="If the select list is empty, you need to upload or import some aligned short read data from a shared library" /><param format="bam,sam" name="headerFile" type="data" label="sam or bam file from which header will be read"
help="If the select list is empty, you need to upload or import some aligned short read data from a shared library" />
- <param name="outputFormat" type="select" label="Output format - use bam to save space please">
- <option value="bam" selected="true">Binary (compressed) bam</option>
- <option value="sam">Uncompressed, space hungry sam</option>
- </param>
+ <param name="outputFormat" type="boolean" checked="True" truevalue="bam" falsevalue="sam" label="Output bam instead of sam" help="Uncheck for sam output" /></inputs><outputs>
- <data name="outFileSam" format="sam" label="${tool.name} on ${on_string}: sam with replaced header">
- <filter>outputFormat == 'sam'</filter>
- </data>
- <data name="outFileBam" format="bam" label="${tool.name} on ${on_string}: bam with replaced header">
- <filter>outputFormat == 'bam'</filter>
+ <data name="outFile" format="bam" label="${tool.name} on ${on_string}: ${outputFormat} with replaced header">
+ <change_format>
+ <when input="outputFormat" value="sam" format="sam" />
+ </change_format></data></outputs><tests>
@@ -40,8 +32,8 @@
--><param name="inputFile" value="picard_input_tiny_coord.bam" ftype="bam" /><param name="headerFile" value="picard_RSH_input1.bam" ftype="bam" />
- <param name="outputFormat" value="sam" />
- <output name="outFileSam" file="picard_RSH_output1.sam" ftype="sam" />
+ <param name="outputFormat" value="False" />
+ <output name="outFile" file="picard_RSH_output1.sam" ftype="sam" /></test><test><!-- Command:
@@ -50,22 +42,18 @@
--><param name="inputFile" value="picard_input_tiny_coord.sam" ftype="sam" /><param name="headerFile" value="picard_RSH_input1.bam" ftype="bam" />
- <param name="outputFormat" value="sam" />
- <output name="outFileSam" file="picard_RSH_output2.sam" ftype="sam" />
+ <param name="outputFormat" value="False" />
+ <output name="outFile" file="picard_RSH_output2.sam" ftype="sam" /></test>
- <!-- Functional tests with Picard bam outputs currently aren't working
<test>
- --><!-- Command:
java -jar ReplaceSamHeader.jar VALIDATION_STRINGENCY=LENIENT I=test-data/picard_input_tiny_coord.sam HEADER=test-data/picard_RSH_input1.sam O=picard_RSH_output2.bam
-->
- <!--
<param name="inputFile" value="picard_input_tiny_coord.sam" ftype="sam" /><param name="headerFile" value="picard_RSH_input1.sam" ftype="sam" />
- <param name="outputFormat" value="bam" />
- <output name="outFileBam" file="picard_RSH_output2.bam" ftype="bam" />
+ <param name="outputFormat" value="True" />
+ <output name="outFile" file="picard_RSH_output2.bam" ftype="bam" /></test>
- --></tests><help>
--- a/tools/picard/picard_wrapper.py Mon May 16 17:08:06 2011 -0400
+++ b/tools/picard/picard_wrapper.py Tue May 17 01:57:04 2011 -0400
@@ -36,7 +36,7 @@
"""
return time.strftime('%d/%m/%Y %H:%M:%S', time.localtime(time.time()))
-
+
class PicardBase():
"""
simple base class with some utilities for Picard
@@ -84,7 +84,7 @@
def readLarge(self,fname=None):
- """ read a potentially huge file..
+ """ read a potentially huge file.
"""
try:
# get stderr, allowing for case where it's very large
@@ -152,15 +152,15 @@
cl = ['samtools view -h -b -S -o ',tempbam,infile]
tlog,stdouts = self.runCL(cl,outdir)
return tlog,tempbam
-
- def bamToSam(self,infile=None,outdir=None):
- """
- use samtools view to convert bam to sam
- """
- fd,tempsam = tempfile.mkstemp(dir=outdir,suffix='rgutilsTemp.sam')
- cl = ['samtools view -h -o ',tempsam,infile]
- tlog,stdouts = self.runCL(cl,outdir)
- return tlog,tempsam
+
+ #def bamToSam(self,infile=None,outdir=None):
+ # """
+ # use samtools view to convert bam to sam
+ # """
+ # fd,tempsam = tempfile.mkstemp(dir=outdir,suffix='rgutilsTemp.sam')
+ # cl = ['samtools view -h -o ',tempsam,infile]
+ # tlog,stdouts = self.runCL(cl,outdir)
+ # return tlog,tempsam
def sortSam(self, infile=None,outfile=None,outdir=None):
"""
@@ -264,7 +264,7 @@
if llen > maxloglines:
n = min(50,int(maxloglines/2))
rlog += l[:n]
- rlog.append('------------ ## %d rows deleted ## --------------\n' % (llen-maxloglines))
+ rlog.append('------------ ## %d rows deleted ## --------------\n' % (llen-maxloglines))
rlog += l[-n:]
else:
rlog += l
@@ -303,8 +303,7 @@
o.write(''.join(head))
o.write(''.join(bed))
o.close()
- return outf
-
+ return outf
def cleanSam(self, insam=None, newsam=None, picardErrors=[],outformat=None):
"""
@@ -369,9 +368,7 @@
op.add_option('-j','--jar',default='')
op.add_option('','--picard-cmd',default=None)
# Many tools
- op.add_option( '', '--output-txt', dest='output_txt', help='Output file in text format' )
op.add_option( '', '--output-format', dest='output_format', help='Output format' )
- op.add_option( '', '--output-sam', dest='output_sam', help='Output file in SAM or BAM format' )
op.add_option( '', '--bai-file', dest='bai_file', help='The path to the index file for the input bam file' )
op.add_option( '', '--ref', dest='ref', help='Built-in reference with fasta and dict file', default=None )
# CreateSequenceDictionary
@@ -390,7 +387,6 @@
op.add_option('', '--maxinsert', default="20")
op.add_option('', '--adaptors', action='append', type="string")
# FixMateInformation and validate
- op.add_option('','--newformat', default='bam')
# CollectGcBiasMetrics
op.add_option('', '--windowsize', default='100')
op.add_option('', '--mingenomefrac', default='0.00001')
@@ -437,10 +433,10 @@
# set ref and dict files to use (create if necessary)
ref_file_name = opts.ref
- if opts.ref_file <> None:
+ if opts.ref_file <> None:
csd = 'CreateSequenceDictionary'
realjarpath = os.path.split(opts.jar)[0]
- jarpath = os.path.join(realjarpath,'%s.jar' % csd) # for refseq
+ jarpath = os.path.join(realjarpath,'%s.jar' % csd) # for refseq
tmp_ref_fd, tmp_ref_name = tempfile.mkstemp( dir=opts.tmpdir , prefix = pic.picname)
ref_file_name = '%s.fasta' % tmp_ref_name
# build dict
@@ -460,6 +456,15 @@
s = pic.runPic(jarpath, cl)
# run relevant command(s)
+ # define temporary output
+ # if output is sam, it must have that extension, otherwise bam will be produced
+ # specify sam or bam file with extension
+ if opts.output_format == 'sam':
+ suff = '.sam'
+ else:
+ suff = ''
+ tmp_fd, tempout = tempfile.mkstemp( dir=opts.tmpdir, suffix=suff )
+
cl = ['VALIDATION_STRINGENCY=LENIENT',]
if pic.picname == 'AddOrReplaceReadGroups':
@@ -468,22 +473,22 @@
# input
cl.append('INPUT=%s' % opts.input)
# outputs
- cl.append('OUTPUT=%s' % opts.output)
+ cl.append('OUTPUT=%s' % tempout)
# required read groups
cl.append('RGLB="%s"' % opts.rg_library)
cl.append('RGPL="%s"' % opts.rg_platform)
cl.append('RGPU="%s"' % opts.rg_plat_unit)
cl.append('RGSM="%s"' % opts.rg_sample)
+ if opts.rg_id:
+ cl.append('RGID="%s"' % opts.rg_id)
# optional read groups
- if opts.rg_opts == 'full':
- if opts.rg_id:
- cl.append('RGID="%s"' % opts.rg_id)
- if opts.rg_seq_center:
- cl.append('RGCN="%s"' % opts.rg_seq_center)
- if opts.rg_desc:
- cl.append('RGDS="%s"' % opts.rg_desc)
- s = pic.runPic(opts.jar, cl)
-
+ if opts.rg_seq_center:
+ cl.append('RGCN="%s"' % opts.rg_seq_center)
+ if opts.rg_desc:
+ cl.append('RGDS="%s"' % opts.rg_desc)
+ pic.runPic(opts.jar, cl)
+ haveTempout = True
+
elif pic.picname == 'BamIndexStats':
tmp_fd, tmp_name = tempfile.mkstemp( dir=tmp_dir )
tmp_bam_name = '%s.bam' % tmp_name
@@ -494,7 +499,7 @@
pic.delme.append(tmp_bam_name)
pic.delme.append(tmp_bai_name)
pic.delme.append(tmp_name)
- s = pic.runPic( opts.jar, cl )
+ s = pic.runPic( opts.jar, cl )
f = open(pic.metricsOut,'a')
f.write(s) # got this on stdout from runCl
f.write('\n')
@@ -525,7 +530,7 @@
except:
s = '## unable to symlink %s to %s - different devices? May need to replace with shutil.copy'
info = s
- shutil.copy(ref_file_name,fakefasta)
+ shutil.copy(ref_file_name,fakefasta)
pic.delme.append(fakefasta)
cl.append('ASSUME_SORTED=%s' % opts.assumesorted)
adaptorseqs = ''.join([' ADAPTER_SEQUENCE=%s' % x for x in opts.adaptors])
@@ -555,14 +560,14 @@
except:
s = '## unable to symlink %s to %s - different devices? May need to replace with shutil.copy'
info = s
- shutil.copy(ref_file_name,fakefasta)
+ shutil.copy(ref_file_name,fakefasta)
pic.delme.append(fakefasta)
x = 'rgPicardGCBiasMetrics'
pdfname = '%s.pdf' % x
jpgname = '%s.jpg' % x
tempout = os.path.join(opts.outdir,'rgPicardGCBiasMetrics.out')
temppdf = os.path.join(opts.outdir,pdfname)
- cl.append('R=%s' % fakefasta)
+ cl.append('R=%s' % fakefasta)
cl.append('WINDOW_SIZE=%s' % opts.windowsize)
cl.append('MINIMUM_GENOME_FRACTION=%s' % opts.mingenomefrac)
cl.append('INPUT=%s' % opts.input)
@@ -587,7 +592,7 @@
histpdf = 'InsertSizeHist.pdf'
cl.append('I=%s' % opts.input)
cl.append('O=%s' % pic.metricsOut)
- cl.append('HISTOGRAM_FILE=%s' % histpdf)
+ cl.append('HISTOGRAM_FILE=%s' % histpdf)
if opts.taillimit <> '0':
cl.append('TAIL_LIMIT=%s' % opts.taillimit)
if opts.histwidth <> '0':
@@ -623,9 +628,8 @@
# maximum offset between two duplicate clusters
cl.append('OPTICAL_DUPLICATE_PIXEL_DISTANCE=%s' % opts.optdupdist)
pic.runPic(opts.jar, cl)
-
+
elif pic.picname == 'FixMateInformation':
- tmp_fd, tempout = tempfile.mkstemp( dir=opts.tmpdir,prefix='FixMateTempOut')
cl.append('I=%s' % opts.input)
cl.append('O=%s' % tempout)
cl.append('SORT_ORDER=%s' % opts.sortorder)
@@ -633,7 +637,6 @@
haveTempout = True
elif pic.picname == 'ReorderSam':
- tmp_fd, tempout = tempfile.mkstemp( dir=opts.tmpdir,prefix='ReOrderTempOut')
# input
cl.append('INPUT=%s' % opts.input)
# output
@@ -650,18 +653,13 @@
haveTempout = True
elif pic.picname == 'ReplaceSamHeader':
- tmp_fd, tempout = tempfile.mkstemp( dir=opts.tmpdir,prefix='RSHTempOut')
cl.append('INPUT=%s' % opts.input)
cl.append('OUTPUT=%s' % tempout)
cl.append('HEADER=%s' % opts.header_file)
- s = pic.runPic(opts.jar, cl)
- if opts.output_format == 'sam':
- tlog,newsam = pic.bamToSam(tempout,opts.tmpdir)
- shutil.move(newsam,opts.output)
- else:
- shutil.move(tempout,opts.output)
-
- elif pic.picname == "CalculateHsMetrics":
+ pic.runPic(opts.jar, cl)
+ haveTempout = True
+
+ elif pic.picname == 'CalculateHsMetrics':
maxloglines = 100
baitfname = os.path.join(opts.outdir,'rgPicardHsMetrics.bait')
targetfname = os.path.join(opts.outdir,'rgPicardHsMetrics.target')
@@ -675,9 +673,9 @@
cl.append('INPUT=%s' % os.path.abspath(opts.input))
cl.append('OUTPUT=%s' % pic.metricsOut)
cl.append('TMP_DIR=%s' % opts.tmpdir)
- pic.runPic(opts.jar,cl)
+ pic.runPic(opts.jar,cl)
- elif pic.picname == "ValidateSamFile":
+ elif pic.picname == 'ValidateSamFile':
import pysam
doTranspose = False
sortedfile = os.path.join(opts.outdir,'rgValidate.sorted')
@@ -710,14 +708,12 @@
if opts.bisulphite.lower() <> 'false':
cl.append('IS_BISULFITE_SEQUENCED=true')
if opts.ref <> None or opts.ref_file <> None:
- cl.append('R=%s' % ref_file_name)
- pic.runPic(opts.jar,cl)
- if opts.datatype == 'sam':
+ cl.append('R=%s' % ref_file_name)
+ pic.runPic(opts.jar,cl)
+ if opts.datatype == 'sam':
pic.delme.append(tempbam)
newsam = opts.output
- outformat = 'bam'
- if opts.newformat == 'sam':
- outformat = 'sam'
+ outformat = 'bam'
pe = open(pic.metricsOut,'r').readlines()
pic.cleanSam(insam=sortedfile, newsam=newsam, picardErrors=pe,outformat=outformat)
pic.delme.append(sortedfile) # not wanted
@@ -729,11 +725,7 @@
if haveTempout:
# Some Picard tools produced a potentially intermediate bam file.
# Either just move to final location or create sam
- if opts.newformat == 'sam':
- tlog, tempsam = pic.bamToSam( tempout, opts.outdir )
- shutil.move(tempsam,os.path.abspath(opts.output))
- else:
- shutil.move(tempout, os.path.abspath(opts.output))
+ shutil.move(tempout, os.path.abspath(opts.output))
if opts.htmlout <> None or doFix: # return a pretty html page
pic.fixPicardOutputs(transpose=doTranspose,maxloglines=maxloglines)
--- a/tools/picard/rgPicardFixMate.xml Mon May 16 17:08:06 2011 -0400
+++ b/tools/picard/rgPicardFixMate.xml Tue May 17 01:57:04 2011 -0400
@@ -1,8 +1,8 @@
-<tool name="Paired Read Mate Fixer:" id="rgPicFixMate" version="0.01">
+<tool name="Paired Read Mate Fixer:" id="rgPicFixMate" version="0.2.0"><description>for paired data</description><command interpreter="python">
picard_wrapper.py -i "$input_file" -o "$out_file" --tmpdir "${__new_file_path__}" -n "$out_prefix"
- --newformat "$newformat" -j "${GALAXY_DATA_INDEX_DIR}/shared/jars/FixMateInformation.jar" --sortorder "$sortOrder"
+ --output-format "$outputFormat" -j "${GALAXY_DATA_INDEX_DIR}/shared/jars/FixMateInformation.jar" --sortorder "$sortOrder"
</command><requirements><requirement type="package">picard</requirement></requirements><inputs>
@@ -16,15 +16,12 @@
</param><param name="out_prefix" value="Fix Mate" type="text"
label="Title for the output file - use this remind you what the job was for" size="80" />
- <param name="newformat" type="select" label="Output file format" size="2">
- <option value="bam" selected="true">Bam format</option>
- <option value="sam">Sam format</option>
- </param>
+ <param name="outputFormat" type="boolean" checked="True" truevalue="bam" falsevalue="sam" label="Output bam instead of sam" help="Uncheck for sam output" /></inputs><outputs>
- <data format="bam" name="out_file" label="SortBam_${out_prefix}.${newformat}">
+ <data format="bam" name="out_file" label="${tool.name} on ${on_string}: ${outputFormat} with fixed mates"><change_format>
- <when input="newformat" value="sam" format="sam" />
+ <when input="outputFormat" value="sam" format="sam" /></change_format></data></outputs>
@@ -32,14 +29,14 @@
<test><param name="input_file" value="picard_input_sorted_pair.sam" /><param name="sortOrder" value="coordinate" />
- <param name="newformat" value="bam" />
+ <param name="outputFormat" value="True" /><param name="out_prefix" value="Test FixMate" /><output name="out_file" file="picard_output_fixmate_sorted_pair.bam" ftype="bam" /></test><test><param name="input_file" value="picard_input_sorted_pair.sam" /><param name="sortOrder" value="coordinate" />
- <param name="newformat" value="sam" />
+ <param name="outputFormat" value="False" /><param name="out_prefix" value="Test FixMate" /><output name="out_file" file="picard_output_fixmate_sorted_pair.sam" ftype="sam" /></test>
--- a/tools/picard/rgPicardInsertSize.xml Mon May 16 17:08:06 2011 -0400
+++ b/tools/picard/rgPicardInsertSize.xml Tue May 17 01:57:04 2011 -0400
@@ -1,4 +1,4 @@
-<tool name="Insertion size metrics:" id="PicardInsertSize" version="0.02">
+<tool name="Insertion size metrics:" id="PicardInsertSize" version="0.3.0"><description>for PAIRED data</description><requirements><requirement type="package">picard</requirement></requirements><command interpreter="python">
@@ -31,7 +31,7 @@
<param name="tailLimit" value="10000" /><param name="histWidth" value="0" /><param name="minPct" value="0.01" />
- <output name="html_file" file="picard_output_insertsize_tinysam.html" ftype="html" lines_diff="35" />
+ <output name="html_file" file="picard_output_insertsize_tinysam.html" ftype="html" compare="contains" lines_diff="40" /></test></tests><help>
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0

commit/galaxy-central: kanwei: trackster: Refactor LineTrack overflow, fix it to work better for Line and Filled modes
by Bitbucket 16 May '11
by Bitbucket 16 May '11
16 May '11
1 new changeset in galaxy-central:
http://bitbucket.org/galaxy/galaxy-central/changeset/a66255ab6b93/
changeset: r5567:a66255ab6b93
user: kanwei
date: 2011-05-16 23:08:06
summary: trackster: Refactor LineTrack overflow, fix it to work better for Line and Filled modes
affected #: 2 files (679 bytes)
--- a/lib/galaxy/visualization/tracks/data_providers.py Mon May 16 10:03:47 2011 -0400
+++ b/lib/galaxy/visualization/tracks/data_providers.py Mon May 16 17:08:06 2011 -0400
@@ -336,7 +336,8 @@
num_points = (end-start) / 1280
if num_points < 1:
num_points = end - start
- num_points = max(num_points, 10)
+ else:
+ num_points = min(num_points, 500)
data = bbi.query(chrom, start, end, num_points)
f.close()
--- a/static/scripts/trackster.js Mon May 16 10:03:47 2011 -0400
+++ b/static/scripts/trackster.js Mon May 16 17:08:06 2011 -0400
@@ -3062,14 +3062,13 @@
// Pixel position of 0 on the y axis
var y_zero = Math.round( height + min_value / vertical_range * height );
- // Line at 0.0
+ // Horizontal line to denote x-axis
if ( mode !== "Intensity" ) {
ctx.fillStyle = "#aaa";
ctx.fillRect( 0, y_zero, width, 1 );
}
ctx.beginPath();
- ctx.fillStyle = this.prefs.color;
var x_scaled, y, delta_x_px;
if (data.length > 1) {
delta_x_px = Math.ceil((data[1][0] - data[0][0]) * w_scale);
@@ -3077,8 +3076,10 @@
delta_x_px = 10;
}
for (var i = 0, len = data.length; i < len; i++) {
+ ctx.fillStyle = this.prefs.color;
x_scaled = Math.round((data[i][0] - view_start) * w_scale);
y = data[i][1];
+ var top_overflow = false, bot_overflow = false;
if (y === null) {
if (in_path && mode === "Filled") {
ctx.lineTo(x_scaled, height_px);
@@ -3087,8 +3088,10 @@
continue;
}
if (y < min_value) {
+ bot_overflow = true;
y = min_value;
} else if (y > max_value) {
+ top_overflow = true;
y = max_value;
}
@@ -3116,6 +3119,24 @@
}
}
}
+ // Draw lines at boundaries if overflowing min or max
+ ctx.fillStyle = this.prefs.overflow_color;
+ if (top_overflow || bot_overflow) {
+ var overflow_x;
+ if (mode === "Histogram" || mode === "Intensity") {
+ overflow_x = delta_x_px;
+ } else { // Line and Filled, which are points
+ x_scaled -= 2; // Move it over to the left so it's centered on the point
+ overflow_x = 4;
+ }
+ if (top_overflow) {
+ ctx.fillRect(x_scaled, 0, overflow_x, 3);
+ }
+ if (bot_overflow) {
+ ctx.fillRect(x_scaled, height_px - 3, overflow_x, 3);
+ }
+ }
+ ctx.fillStyle = this.prefs.color;
}
if (mode === "Filled") {
if (in_path) {
@@ -3127,38 +3148,6 @@
ctx.stroke();
}
- // Draw lines at bounderies if overflowing min or max
- var overflow_min_start = -1,
- overflow_max_start = -1;
- ctx.fillStyle = this.prefs.overflow_color;
- var last_x_scaled;
- for (var i = 0, len = data.length; i < len; i++) {
- y = data[i][1];
- x_scaled = Math.round((data[i][0] - view_start) * w_scale);
-
- // If we are in a min/max run, check if it should be ended
- if ( overflow_max_start >= 0 && ( y === null || y < max_value ) ) {
- // Value does not exist or is in valid range, any overflow ends
- ctx.fillRect( overflow_max_start, 0, last_x_scaled + delta_x_px - overflow_max_start, 2 );
- overflow_max_start = -1;
- } else if ( overflow_min_start >= 0 && ( y === null || y > min_value ) ) {
- // Draw bottom overflow bar
- ctx.fillRect( overflow_min_start, height - 2, last_x_scaled + delta_x_px - overflow_min_start, 2 );
- overflow_min_start = -1;
- }
-
- // Now check if we should start a new one (this may happen on the same
- // base as above if switching between min/max)
- if ( y !== null && y > max_value && overflow_max_start < 0 ) {
- // Top overflows and we are not already in a run of overflow
- overflow_max_start = x_scaled;
- } else if ( y !== null && y < min_value && overflow_min_start < 0 ) {
- // Bottom overflows and we are not already in a run
- overflow_min_start = x_scaled;
- }
- last_x_scaled = x_scaled;
- }
-
ctx.restore();
}
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0
2 new changesets in galaxy-central:
http://bitbucket.org/galaxy/galaxy-central/changeset/0d6acef66750/
changeset: r5565:0d6acef66750
user: fubar
date: 2011-05-16 15:12:19
summary: repairs to rgfakePed tool for generating null genotype data - since removing the _code.py trick of renaming composite file components means all of the parts (eg map and ped) acquire the default name of RgeneticsData, that's what the tool has to create - rather than sensibly named components based on the title - since only way to fix this wart is to reintroduce a bigger wart using the post execution hook, decided to just go with that default base_name to make things more sustanable in the long term
affected #: 3 files (594 bytes)
--- a/test-data/rgtestouts/rgfakePed/rgfakePedtest1.lped Fri May 13 21:24:03 2011 -0400
+++ b/test-data/rgtestouts/rgfakePed/rgfakePedtest1.lped Mon May 16 09:12:19 2011 -0400
@@ -9,8 +9,8 @@
</head><body><div class="document">
-<li><a href="rgfakePedtest1.ped">rgfakePedtest1.ped</a></li>
-<li><a href="rgfakePedtest1.map">rgfakePedtest1.map</a></li>
-<br><h3>This is simulated null genotype data generated by Rgenetics!</h3>rgfakePed.py called with command line:<br><pre>/share/shared/galaxy/tools/rgenetics/rgfakePed.py --title rgfakePedtest1 -o /share/shared/galaxy/test-data/rgtestouts/rgfakePed/rgfakePedtest1.lped -p /share/shared/galaxy/test-data/rgtestouts/rgfakePed -c 20 -n 40 -s 10 -w 0 -v 0 -l pbed -d T -m 0 -M 0
+<li><a href="RgeneticsData.map">RgeneticsData.map</a></li>
+<li><a href="RgeneticsData.ped">RgeneticsData.ped</a></li>
+<br><h3>This is simulated null genotype data generated by Rgenetics!</h3>rgfakePed.py called with command line:<br><pre>/udd/rerla/galaxy-central/tools/rgenetics/rgfakePed.py --title rgfakePedtest1 -o /export/tmp/tmpy7a643/database/files/000/dataset_1.dat -p /udd/rerla/galaxy-central/database/job_working_directory/1/dataset_1_files -c 20 -n 40 -s 10 -w 0.0 -v 0 -l L -d T -m 0.0 -M 0.0
</pre></div></body></html>
\ No newline at end of file
--- a/tools/rgenetics/rgfakePed.py Fri May 13 21:24:03 2011 -0400
+++ b/tools/rgenetics/rgfakePed.py Mon May 16 09:12:19 2011 -0400
@@ -1,103 +1,103 @@
-#! /usr/local/bin/python2.4
-# pedigree data faker
-# specifically designed for scalability testing of
-# Shaun Purcel's PLINK package
-# derived from John Ziniti's original suggestion
-# allele frequency spectrum and random mating added
-# ross lazarus me fecit january 13 2007
-# copyright ross lazarus 2007
-# without psyco
-# generates about 10k snp genotypes in 2k subjects (666 trios) per minute or so.
-# so 500k (a billion genotypes), at about 4 trios/min will a couple of hours to generate
-# psyco makes it literally twice as quick!!
-# all rights reserved except as granted under the terms of the LGPL
-# see http://www.gnu.org/licenses/lgpl.html
-# for a copy of the license you receive with this software
-# and for your rights and obligations
-# especially if you wish to modify or redistribute this code
-# january 19 added random missingness inducer
-# currently about 15M genos/minute without psyco, 30M/minute with
-# so a billion genos should take about 40 minutes with psyco or 80 without...
-# added mendel error generator jan 23 rml
-
-
+#! /usr/local/bin/python2.4
+# pedigree data faker
+# specifically designed for scalability testing of
+# Shaun Purcel's PLINK package
+# derived from John Ziniti's original suggestion
+# allele frequency spectrum and random mating added
+# ross lazarus me fecit january 13 2007
+# copyright ross lazarus 2007
+# without psyco
+# generates about 10k snp genotypes in 2k subjects (666 trios) per minute or so.
+# so 500k (a billion genotypes), at about 4 trios/min will a couple of hours to generate
+# psyco makes it literally twice as quick!!
+# all rights reserved except as granted under the terms of the LGPL
+# see http://www.gnu.org/licenses/lgpl.html
+# for a copy of the license you receive with this software
+# and for your rights and obligations
+# especially if you wish to modify or redistribute this code
+# january 19 added random missingness inducer
+# currently about 15M genos/minute without psyco, 30M/minute with
+# so a billion genos should take about 40 minutes with psyco or 80 without...
+# added mendel error generator jan 23 rml
+
+
import random,sys,time,os,string
-
-from optparse import OptionParser
-
-
-width = 500000
-ALLELES = ['1','2','3','4']
-prog = os.path.split(sys.argv[0])[-1]
-debug = 0
-
-"""Natural-order sorting, supporting embedded numbers.
-# found at http://lists.canonical.org/pipermail/kragen-hacks/2005-October/000419.html
-note test code there removed to conserve brain space
-foo9bar2 < foo10bar2 < foo10bar10
-
-"""
-import random, re, sys
-
-def natsort_key(item):
- chunks = re.split('(\d+(?:\.\d+)?)', item)
- for ii in range(len(chunks)):
- if chunks[ii] and chunks[ii][0] in '0123456789':
- if '.' in chunks[ii]: numtype = float
- else: numtype = int
- # wrap in tuple with '0' to explicitly specify numbers come first
- chunks[ii] = (0, numtype(chunks[ii]))
- else:
- chunks[ii] = (1, chunks[ii])
- return (chunks, item)
-
-def natsort(seq):
- "Sort a sequence of text strings in a reasonable order."
- alist = [item for item in seq]
- alist.sort(key=natsort_key)
- return alist
-
-
-def makeUniformMAFdist(low=0.02, high=0.5):
- """Fake a non-uniform maf distribution to make the data
- more interesting. Provide uniform 0.02-0.5 distribution"""
- MAFdistribution = []
- for i in xrange(int(100*low),int(100*high)+1):
- freq = i/100.0 # uniform
- MAFdistribution.append(freq)
- return MAFdistribution
-
-def makeTriangularMAFdist(low=0.02, high=0.5, beta=5):
- """Fake a non-uniform maf distribution to make the data
- more interesting - more rare alleles """
- MAFdistribution = []
- for i in xrange(int(100*low),int(100*high)+1):
- freq = (51 - i)/100.0 # large numbers of small allele freqs
- for j in range(beta*i): # or i*i for crude exponential distribution
- MAFdistribution.append(freq)
- return MAFdistribution
-
-def makeFbathead(rslist=[], chromlist=[], poslist=[], width=100000):
- """header row
- """
- res = ['%s_%s_%s' % (chromlist[x], poslist[x], rslist[x]) for x in range(len(rslist))]
- return ' '.join(res)
-
-def makeMap( width=500000, MAFdistribution=[], useGP=False):
- """make snp allele and frequency tables for consistent generation"""
- usegp = 1
- snpdb = 'snp126'
- hgdb = 'hg18'
- alleles = []
- freqs = []
- rslist = []
- chromlist = []
- poslist = []
- for snp in range(width):
- random.shuffle(ALLELES)
- alleles.append(ALLELES[0:2]) # need two DIFFERENT alleles!
+
+from optparse import OptionParser
+
+defbasename="RgeneticsData"
+width = 500000
+ALLELES = ['1','2','3','4']
+prog = os.path.split(sys.argv[0])[-1]
+debug = 0
+
+"""Natural-order sorting, supporting embedded numbers.
+# found at http://lists.canonical.org/pipermail/kragen-hacks/2005-October/000419.html
+note test code there removed to conserve brain space
+foo9bar2 < foo10bar2 < foo10bar10
+
+"""
+import random, re, sys
+
+def natsort_key(item):
+ chunks = re.split('(\d+(?:\.\d+)?)', item)
+ for ii in range(len(chunks)):
+ if chunks[ii] and chunks[ii][0] in '0123456789':
+ if '.' in chunks[ii]: numtype = float
+ else: numtype = int
+ # wrap in tuple with '0' to explicitly specify numbers come first
+ chunks[ii] = (0, numtype(chunks[ii]))
+ else:
+ chunks[ii] = (1, chunks[ii])
+ return (chunks, item)
+
+def natsort(seq):
+ "Sort a sequence of text strings in a reasonable order."
+ alist = [item for item in seq]
+ alist.sort(key=natsort_key)
+ return alist
+
+
+def makeUniformMAFdist(low=0.02, high=0.5):
+ """Fake a non-uniform maf distribution to make the data
+ more interesting. Provide uniform 0.02-0.5 distribution"""
+ MAFdistribution = []
+ for i in xrange(int(100*low),int(100*high)+1):
+ freq = i/100.0 # uniform
+ MAFdistribution.append(freq)
+ return MAFdistribution
+
+def makeTriangularMAFdist(low=0.02, high=0.5, beta=5):
+ """Fake a non-uniform maf distribution to make the data
+ more interesting - more rare alleles """
+ MAFdistribution = []
+ for i in xrange(int(100*low),int(100*high)+1):
+ freq = (51 - i)/100.0 # large numbers of small allele freqs
+ for j in range(beta*i): # or i*i for crude exponential distribution
+ MAFdistribution.append(freq)
+ return MAFdistribution
+
+def makeFbathead(rslist=[], chromlist=[], poslist=[], width=100000):
+ """header row
+ """
+ res = ['%s_%s_%s' % (chromlist[x], poslist[x], rslist[x]) for x in range(len(rslist))]
+ return ' '.join(res)
+
+def makeMap( width=500000, MAFdistribution=[], useGP=False):
+ """make snp allele and frequency tables for consistent generation"""
+ usegp = 1
+ snpdb = 'snp126'
+ hgdb = 'hg18'
+ alleles = []
+ freqs = []
+ rslist = []
+ chromlist = []
+ poslist = []
+ for snp in range(width):
+ random.shuffle(ALLELES)
+ alleles.append(ALLELES[0:2]) # need two DIFFERENT alleles!
freqs.append(random.choice(MAFdistribution)) # more rare alleles
- if useGP:
+ if useGP:
try:
import MySQLdb
genome = MySQLdb.Connect('localhost', 'hg18', 'G3gn0m3')
@@ -106,402 +106,402 @@
if debug:
print 'cannot connect to local copy of golden path'
usegp = 0
- if usegp and useGP: # urrrgghh getting snps into chrom offset order is complicated....
- curs.execute('use %s' % hgdb)
- print 'Collecting %d real rs numbers - this may take a while' % width
- # get a random draw of enough reasonable (hapmap) snps with frequency data
- s = '''select distinct chrom,chromEnd, name from %s where avHet > 0 and chrom not like '%%random'
- group by name order by rand() limit %d''' % (snpdb,width)
- curs.execute(s)
- reslist = curs.fetchall()
- reslist = ['%s\t%09d\t%s' % (x[3:],y,z) for x,y,z in reslist] # get rid of chr
- reslist = natsort(reslist)
- for s in reslist:
- chrom,pos,rs = s.split('\t')
- rslist.append(rs)
- chromlist.append(chrom)
- poslist.append(pos)
- else:
- chrom = '1'
- for snp in range(width):
- pos = '%d' % (1000*snp)
- rs = 'rs00%d' % snp
- rslist.append(rs)
- chromlist.append(chrom)
- poslist.append(pos)
- return alleles,freqs, rslist, chromlist, poslist
-
-def writeMap(fprefix = '', fpath='./', rslist=[], chromlist=[], poslist=[], width = 500000):
- """make a faked plink compatible map file - fbat files
+ if usegp and useGP: # urrrgghh getting snps into chrom offset order is complicated....
+ curs.execute('use %s' % hgdb)
+ print 'Collecting %d real rs numbers - this may take a while' % width
+ # get a random draw of enough reasonable (hapmap) snps with frequency data
+ s = '''select distinct chrom,chromEnd, name from %s where avHet > 0 and chrom not like '%%random'
+ group by name order by rand() limit %d''' % (snpdb,width)
+ curs.execute(s)
+ reslist = curs.fetchall()
+ reslist = ['%s\t%09d\t%s' % (x[3:],y,z) for x,y,z in reslist] # get rid of chr
+ reslist = natsort(reslist)
+ for s in reslist:
+ chrom,pos,rs = s.split('\t')
+ rslist.append(rs)
+ chromlist.append(chrom)
+ poslist.append(pos)
+ else:
+ chrom = '1'
+ for snp in range(width):
+ pos = '%d' % (1000*snp)
+ rs = 'rs00%d' % snp
+ rslist.append(rs)
+ chromlist.append(chrom)
+ poslist.append(pos)
+ return alleles,freqs, rslist, chromlist, poslist
+
+def writeMap(fprefix = '', fpath='./', rslist=[], chromlist=[], poslist=[], width = 500000):
+ """make a faked plink compatible map file - fbat files
have the map written as a header line"""
outf = '%s.map'% (fprefix)
- outf = os.path.join(fpath,outf)
- amap = open(outf, 'w')
- res = ['%s\t%s\t0\t%s' % (chromlist[x],rslist[x],poslist[x]) for x in range(len(rslist))]
- res.append('')
- amap.write('\n'.join(res))
- amap.close()
-
-def makeMissing(genos=[], missrate = 0.03, missval = '0'):
- """impose some random missingness"""
- nsnps = len(genos)
- for snp in range(nsnps): # ignore first 6 columns
- if random.random() <= missrate:
- genos[snp] = '%s %s' % (missval,missval)
- return genos
-
-def makeTriomissing(genos=[], missrate = 0.03, missval = '0'):
- """impose some random missingness on a trio - moth eaten like real data"""
- for person in (0,1):
- nsnps = len(genos[person])
- for snp in range(nsnps):
- for person in [0,1,2]:
- if random.random() <= missrate:
- genos[person][snp] = '%s %s' % (missval,missval)
- return genos
-
-
-def makeTriomendel(p1g=(0,0),p2g=(0,0), kiddip = (0,0)):
- """impose some random mendels on a trio
- there are 8 of the 9 mating types we can simulate reasonable errors for
- Note, since random mating dual het parents can produce any genotype we can't generate an interesting
- error for them, so the overall mendel rate will be lower than mendrate, depending on
- allele frequency..."""
- if p1g[0] <> p1g[1] and p2g[0] <> p2g[1]: # both parents het
- return kiddip # cannot simulate a mendel error - anything is legal!
- elif (p1g[0] <> p1g[1]): # p1 is het parent so p2 must be hom
- if p2g[0] == 0: # - make child p2 opposite hom for error
- kiddip = (1,1)
- else:
- kiddip = (0,0)
- elif (p2g[0] <> p2g[1]): # p2 is het parent so p1 must be hom
- if p1g[0] == 0: # - make child p1 opposite hom for error
- kiddip = (1,1)
- else:
- kiddip = (0,0)
- elif (p1g[0] == p1g[1]): # p1 is hom parent and if we get here p2 must also be hom
- if p1g[0] == p2g[0]: # both parents are same hom - make child either het or opposite hom for error
- if random.random() <= 0.5:
- kiddip = (0,1)
- else:
- if p1g[0] == 0:
- kiddip = (1,1)
- else:
- kiddip = (0,0)
- else: # parents are opposite hom - return any hom as an error
- if random.random() <= 0.5:
- kiddip = (0,0)
- else:
- kiddip = (1,1)
- return kiddip
-
-
-
-
-def makeFam(width=100, freqs={}, alleles={}, trio=1, missrate=0.03, missval='0', mendrate=0.0):
- """this family is a simple trio, constructed by random mating two random genotypes
- TODO: why not generate from chromosomes - eg hapmap
- set each haplotype locus according to the conditional
- probability implied by the surrounding loci - eg use both neighboring pairs, triplets
- and quads as observed in hapmap ceu"""
- dadped = '%d 1 0 0 1 1 %s'
- mumped = '%d 2 0 0 2 1 %s' # a mother is a mum where I come from :)
- kidped = '%d 3 1 2 %d %d %s'
- family = [] # result accumulator
- sex = random.choice((1,2)) # for the kid
- affected = random.choice((1,2))
- genos = [[],[],[]] # dad, mum, kid - 0/1 for common,rare initially, then xform to alleles
- # parent1...kidn lists of 0/1 for common,rare initially, then xformed to alleles
- for snp in xrange(width):
- f = freqs[snp]
- for i in range(2): # do dad and mum
- p = random.random()
- a1 = a2 = 0
- if p <= f: # a rare allele
- a1 = 1
- p = random.random()
- if p <= f: # a rare allele
- a2 = 1
- if a1 > a2:
- a1,a2 = a2,a1 # so ordering consistent - 00,01,11
- dip = (a1,a2)
- genos[i].append(dip) # tuples of 0,1
- a1 = random.choice(genos[0][snp]) # dad gamete
- a2 = random.choice(genos[1][snp]) # mum gamete
- if a1 > a2:
- a1,a2 = a2,a1 # so ordering consistent - 00,01,11
- kiddip = (a1,a2) # NSFW mating!
- genos[2].append(kiddip)
- if mendrate > 0:
- if random.random() <= mendrate:
- genos[2][snp] = makeTriomendel(genos[0][snp],genos[1][snp], kiddip)
- achoice = alleles[snp]
- for g in genos: # now convert to alleles using allele dict
- a1 = achoice[g[snp][0]] # get allele letter
- a2 = achoice[g[snp][1]]
- g[snp] = '%s %s' % (a1,a2)
- if missrate > 0:
- genos = makeTriomissing(genos=genos,missrate=missrate, missval=missval)
- family.append(dadped % (trio,' '.join(genos[0]))) # create a row for each member of trio
- family.append(mumped % (trio,' '.join(genos[1])))
- family.append(kidped % (trio,sex,affected,' '.join(genos[2])))
- return family
-
-def makePerson(width=100, aff=1, freqs={}, alleles={}, id=1, missrate = 0.03, missval='0'):
- """make an entire genotype vector for an independent subject"""
- sex = random.choice((1,2))
- if not aff:
- aff = random.choice((1,2))
- genos = [] #0/1 for common,rare initially, then xform to alleles
- family = []
- personped = '%d 1 0 0 %d %d %s'
- poly = (0,1)
- for snp in xrange(width):
- achoice = alleles[snp]
- f = freqs[snp]
- p = random.random()
- a1 = a2 = 0
- if p <= f: # a rare allele
- a1 = 1
- p = random.random()
- if p <= f: # a rare allele
- a2 = 1
- if a1 > a2:
- a1,a2 = a2,a1 # so ordering consistent - 00,01,11
- a1 = achoice[a1] # get allele letter
- a2 = achoice[a2]
- g = '%s %s' % (a1,a2)
- genos.append(g)
- if missrate > 0.0:
- genos = makeMissing(genos=genos,missrate=missrate, missval=missval)
- family.append(personped % (id,sex,aff,' '.join(genos)))
- return family
-
-def makeHapmap(fprefix= 'fakebigped',width=100, aff=[], freqs={},
- alleles={}, nsubj = 2000, trios = True, mendrate=0.03, missrate = 0.03, missval='0'):
- """ fake a hapmap file and a pedigree file for eg haploview
- this is arranged as the transpose of a ped file - cols are subjects, rows are markers
- so we need to generate differently since we can't do the transpose in ram reliably for
- a few billion genotypes...
- """
- outheadprefix = 'rs# alleles chrom pos strand assembly# center protLSID assayLSID panelLSID QCcode %s'
- cfake5 = ["illumina","urn:LSID:illumina.hapmap.org:Protocol:Golden_Gate_1.0.0:1",
-"urn:LSID:illumina.hapmap.org:Assay:27741:1","urn:lsid:dcc.hapmap.org:Panel:CEPH-30-trios:1","QC+"]
- yfake5 = ["illumina","urn:LSID:illumina.hapmap.org:Protocol:Golden_Gate_1.0.0:1",
-"urn:LSID:illumina.hapmap.org:Assay:27741:1","urn:LSID:dcc.hapmap.org:Panel:Yoruba-30-trios:1","QC+"]
- sampids = ids
- if trios:
- ts = '%d trios' % int(nsubj/3.)
- else:
- ts = '%d unrelated subjects' % nsubj
- res = ['#%s fake hapmap file %d snps and %s, faked by %s' % (timenow(), width, ts, prog),]
- res.append('# ross lazarus me fecit')
- res.append(outheadprefix % ' '.join(sampids)) # make a header compatible with hapmap extracts
- outf = open('%s.hmap' % (fprefix), 'w')
- started = time.time()
- if trios:
- ntrios = int(nsubj/3.)
- for n in ntrios: # each is a dict
- row = copy.copy(cfake5) # get first fields
- row = map(str,row)
- if race == "YRI":
- row += yfake5
- elif race == 'CEU':
- row += cfake5
- else:
- row += ['NA' for x in range(5)] # 5 dummy fields = center protLSID assayLSID panelLSID QCcode
- row += [''.join(sorted(line[x])) for x in sampids] # the genotypes in header (sorted) sample id order
- res.append(' '.join(row))
- res.append('')
- outfname = '%s_%s_%s_%dkb.geno' % (gene,probeid,race,2*flank/1000)
- f = file(outfname,'w')
- f.write('\n'.join(res))
- f.close()
- print '### %s: Wrote %d lines to %s' % (timenow(), len(res),outfname)
-
-
+ outf = os.path.join(fpath,outf)
+ amap = open(outf, 'w')
+ res = ['%s\t%s\t0\t%s' % (chromlist[x],rslist[x],poslist[x]) for x in range(len(rslist))]
+ res.append('')
+ amap.write('\n'.join(res))
+ amap.close()
+
+def makeMissing(genos=[], missrate = 0.03, missval = '0'):
+ """impose some random missingness"""
+ nsnps = len(genos)
+ for snp in range(nsnps): # ignore first 6 columns
+ if random.random() <= missrate:
+ genos[snp] = '%s %s' % (missval,missval)
+ return genos
+
+def makeTriomissing(genos=[], missrate = 0.03, missval = '0'):
+ """impose some random missingness on a trio - moth eaten like real data"""
+ for person in (0,1):
+ nsnps = len(genos[person])
+ for snp in range(nsnps):
+ for person in [0,1,2]:
+ if random.random() <= missrate:
+ genos[person][snp] = '%s %s' % (missval,missval)
+ return genos
+
+
+def makeTriomendel(p1g=(0,0),p2g=(0,0), kiddip = (0,0)):
+ """impose some random mendels on a trio
+ there are 8 of the 9 mating types we can simulate reasonable errors for
+ Note, since random mating dual het parents can produce any genotype we can't generate an interesting
+ error for them, so the overall mendel rate will be lower than mendrate, depending on
+ allele frequency..."""
+ if p1g[0] <> p1g[1] and p2g[0] <> p2g[1]: # both parents het
+ return kiddip # cannot simulate a mendel error - anything is legal!
+ elif (p1g[0] <> p1g[1]): # p1 is het parent so p2 must be hom
+ if p2g[0] == 0: # - make child p2 opposite hom for error
+ kiddip = (1,1)
+ else:
+ kiddip = (0,0)
+ elif (p2g[0] <> p2g[1]): # p2 is het parent so p1 must be hom
+ if p1g[0] == 0: # - make child p1 opposite hom for error
+ kiddip = (1,1)
+ else:
+ kiddip = (0,0)
+ elif (p1g[0] == p1g[1]): # p1 is hom parent and if we get here p2 must also be hom
+ if p1g[0] == p2g[0]: # both parents are same hom - make child either het or opposite hom for error
+ if random.random() <= 0.5:
+ kiddip = (0,1)
+ else:
+ if p1g[0] == 0:
+ kiddip = (1,1)
+ else:
+ kiddip = (0,0)
+ else: # parents are opposite hom - return any hom as an error
+ if random.random() <= 0.5:
+ kiddip = (0,0)
+ else:
+ kiddip = (1,1)
+ return kiddip
+
+
+
+
+def makeFam(width=100, freqs={}, alleles={}, trio=1, missrate=0.03, missval='0', mendrate=0.0):
+ """this family is a simple trio, constructed by random mating two random genotypes
+ TODO: why not generate from chromosomes - eg hapmap
+ set each haplotype locus according to the conditional
+ probability implied by the surrounding loci - eg use both neighboring pairs, triplets
+ and quads as observed in hapmap ceu"""
+ dadped = '%d 1 0 0 1 1 %s'
+ mumped = '%d 2 0 0 2 1 %s' # a mother is a mum where I come from :)
+ kidped = '%d 3 1 2 %d %d %s'
+ family = [] # result accumulator
+ sex = random.choice((1,2)) # for the kid
+ affected = random.choice((1,2))
+ genos = [[],[],[]] # dad, mum, kid - 0/1 for common,rare initially, then xform to alleles
+ # parent1...kidn lists of 0/1 for common,rare initially, then xformed to alleles
+ for snp in xrange(width):
+ f = freqs[snp]
+ for i in range(2): # do dad and mum
+ p = random.random()
+ a1 = a2 = 0
+ if p <= f: # a rare allele
+ a1 = 1
+ p = random.random()
+ if p <= f: # a rare allele
+ a2 = 1
+ if a1 > a2:
+ a1,a2 = a2,a1 # so ordering consistent - 00,01,11
+ dip = (a1,a2)
+ genos[i].append(dip) # tuples of 0,1
+ a1 = random.choice(genos[0][snp]) # dad gamete
+ a2 = random.choice(genos[1][snp]) # mum gamete
+ if a1 > a2:
+ a1,a2 = a2,a1 # so ordering consistent - 00,01,11
+ kiddip = (a1,a2) # NSFW mating!
+ genos[2].append(kiddip)
+ if mendrate > 0:
+ if random.random() <= mendrate:
+ genos[2][snp] = makeTriomendel(genos[0][snp],genos[1][snp], kiddip)
+ achoice = alleles[snp]
+ for g in genos: # now convert to alleles using allele dict
+ a1 = achoice[g[snp][0]] # get allele letter
+ a2 = achoice[g[snp][1]]
+ g[snp] = '%s %s' % (a1,a2)
+ if missrate > 0:
+ genos = makeTriomissing(genos=genos,missrate=missrate, missval=missval)
+ family.append(dadped % (trio,' '.join(genos[0]))) # create a row for each member of trio
+ family.append(mumped % (trio,' '.join(genos[1])))
+ family.append(kidped % (trio,sex,affected,' '.join(genos[2])))
+ return family
+
+def makePerson(width=100, aff=1, freqs={}, alleles={}, id=1, missrate = 0.03, missval='0'):
+ """make an entire genotype vector for an independent subject"""
+ sex = random.choice((1,2))
+ if not aff:
+ aff = random.choice((1,2))
+ genos = [] #0/1 for common,rare initially, then xform to alleles
+ family = []
+ personped = '%d 1 0 0 %d %d %s'
+ poly = (0,1)
+ for snp in xrange(width):
+ achoice = alleles[snp]
+ f = freqs[snp]
+ p = random.random()
+ a1 = a2 = 0
+ if p <= f: # a rare allele
+ a1 = 1
+ p = random.random()
+ if p <= f: # a rare allele
+ a2 = 1
+ if a1 > a2:
+ a1,a2 = a2,a1 # so ordering consistent - 00,01,11
+ a1 = achoice[a1] # get allele letter
+ a2 = achoice[a2]
+ g = '%s %s' % (a1,a2)
+ genos.append(g)
+ if missrate > 0.0:
+ genos = makeMissing(genos=genos,missrate=missrate, missval=missval)
+ family.append(personped % (id,sex,aff,' '.join(genos)))
+ return family
+
+def makeHapmap(fprefix= 'fakebigped',width=100, aff=[], freqs={},
+ alleles={}, nsubj = 2000, trios = True, mendrate=0.03, missrate = 0.03, missval='0'):
+ """ fake a hapmap file and a pedigree file for eg haploview
+ this is arranged as the transpose of a ped file - cols are subjects, rows are markers
+ so we need to generate differently since we can't do the transpose in ram reliably for
+ a few billion genotypes...
+ """
+ outheadprefix = 'rs# alleles chrom pos strand assembly# center protLSID assayLSID panelLSID QCcode %s'
+ cfake5 = ["illumina","urn:LSID:illumina.hapmap.org:Protocol:Golden_Gate_1.0.0:1",
+"urn:LSID:illumina.hapmap.org:Assay:27741:1","urn:lsid:dcc.hapmap.org:Panel:CEPH-30-trios:1","QC+"]
+ yfake5 = ["illumina","urn:LSID:illumina.hapmap.org:Protocol:Golden_Gate_1.0.0:1",
+"urn:LSID:illumina.hapmap.org:Assay:27741:1","urn:LSID:dcc.hapmap.org:Panel:Yoruba-30-trios:1","QC+"]
+ sampids = ids
+ if trios:
+ ts = '%d trios' % int(nsubj/3.)
+ else:
+ ts = '%d unrelated subjects' % nsubj
+ res = ['#%s fake hapmap file %d snps and %s, faked by %s' % (timenow(), width, ts, prog),]
+ res.append('# ross lazarus me fecit')
+ res.append(outheadprefix % ' '.join(sampids)) # make a header compatible with hapmap extracts
+ outf = open('%s.hmap' % (fprefix), 'w')
+ started = time.time()
+ if trios:
+ ntrios = int(nsubj/3.)
+ for n in ntrios: # each is a dict
+ row = copy.copy(cfake5) # get first fields
+ row = map(str,row)
+ if race == "YRI":
+ row += yfake5
+ elif race == 'CEU':
+ row += cfake5
+ else:
+ row += ['NA' for x in range(5)] # 5 dummy fields = center protLSID assayLSID panelLSID QCcode
+ row += [''.join(sorted(line[x])) for x in sampids] # the genotypes in header (sorted) sample id order
+ res.append(' '.join(row))
+ res.append('')
+ outfname = '%s_%s_%s_%dkb.geno' % (gene,probeid,race,2*flank/1000)
+ f = file(outfname,'w')
+ f.write('\n'.join(res))
+ f.close()
+ print '### %s: Wrote %d lines to %s' % (timenow(), len(res),outfname)
+
+
def makePed(fprefix= 'fakebigped', fpath='./',
- width=500000, nsubj=2000, MAFdistribution=[],alleles={},
- freqs={}, fbatstyle=True, mendrate = 0.0, missrate = 0.03, missval='0',fbathead=''):
- """fake trios with mendel consistent random mating genotypes in offspring
- with consistent alleles and MAFs for the sample"""
- res = []
- if fbatstyle: # add a header row with the marker names
+ width=500000, nsubj=2000, MAFdistribution=[],alleles={},
+ freqs={}, fbatstyle=True, mendrate = 0.0, missrate = 0.03, missval='0',fbathead=''):
+ """fake trios with mendel consistent random mating genotypes in offspring
+ with consistent alleles and MAFs for the sample"""
+ res = []
+ if fbatstyle: # add a header row with the marker names
res.append(fbathead) # header row for fbat
outfname = '%s.ped'% (fprefix)
outfname = os.path.join(fpath,outfname)
- outf = open(outfname,'w')
- ntrios = int(nsubj/3.)
- outf = open(outfile, 'w')
- started = time.time()
- for trio in xrange(ntrios):
- family = makeFam(width=width, freqs=freqs, alleles=alleles, trio=trio,
- missrate = missrate, mendrate=mendrate, missval=missval)
- res += family
- if (trio + 1) % 10 == 0: # write out to keep ram requirements reasonable
- if (trio + 1) % 50 == 0: # show progress
- dur = time.time() - started
- if dur == 0:
- dur = 1.0
- print 'Trio: %d, %4.1f genos/sec at %6.1f sec' % (trio + 1, width*trio*3/dur, dur)
- outf.write('\n'.join(res))
- outf.write('\n')
- res = []
- if len(res) > 0: # some left
- outf.write('\n'.join(res))
- outf.write('\n')
- outf.close()
+ outf = open(outfname,'w')
+ ntrios = int(nsubj/3.)
+ outf = open(outfile, 'w')
+ started = time.time()
+ for trio in xrange(ntrios):
+ family = makeFam(width=width, freqs=freqs, alleles=alleles, trio=trio,
+ missrate = missrate, mendrate=mendrate, missval=missval)
+ res += family
+ if (trio + 1) % 10 == 0: # write out to keep ram requirements reasonable
+ if (trio + 1) % 50 == 0: # show progress
+ dur = time.time() - started
+ if dur == 0:
+ dur = 1.0
+ print 'Trio: %d, %4.1f genos/sec at %6.1f sec' % (trio + 1, width*trio*3/dur, dur)
+ outf.write('\n'.join(res))
+ outf.write('\n')
+ res = []
+ if len(res) > 0: # some left
+ outf.write('\n'.join(res))
+ outf.write('\n')
+ outf.close()
if debug:
- print '##makeped : %6.1f seconds total runtime' % (time.time() - started)
-
+ print '##makeped : %6.1f seconds total runtime' % (time.time() - started)
+
def makeIndep(fprefix = 'fakebigped', fpath='./',
- width=500000, Nunaff=1000, Naff=1000, MAFdistribution=[],
- alleles={}, freqs={}, fbatstyle=True, missrate = 0.03, missval='0',fbathead=''):
- """fake a random sample from a random mating sample
- with consistent alleles and MAFs"""
- res = []
- Ntot = Nunaff + Naff
- status = [1,]*Nunaff
+ width=500000, Nunaff=1000, Naff=1000, MAFdistribution=[],
+ alleles={}, freqs={}, fbatstyle=True, missrate = 0.03, missval='0',fbathead=''):
+ """fake a random sample from a random mating sample
+ with consistent alleles and MAFs"""
+ res = []
+ Ntot = Nunaff + Naff
+ status = [1,]*Nunaff
status += [2,]*Nunaff
outf = '%s.ped' % (fprefix)
- outf = os.path.join(fpath,outf)
- outf = open(outf, 'w')
- started = time.time()
- #sample = personMaker(width=width, affs=status, freqs=freqs, alleles=alleles, Ntomake=Ntot)
- if fbatstyle: # add a header row with the marker names
- res.append(fbathead) # header row for fbat
- for id in xrange(Ntot):
- if id < Nunaff:
- aff = 1
- else:
- aff = 2
- family = makePerson(width=width, aff=aff, freqs=freqs, alleles=alleles, id=id+1)
- res += family
- if (id % 50 == 0): # write out to keep ram requirements reasonable
- if (id % 200 == 0): # show progress
- dur = time.time() - started
- if dur == 0:
- dur = 1.0
- print 'Id: %d, %4.1f genos/sec at %6.1f sec' % (id, width*id/dur, dur)
- outf.write('\n'.join(res))
- outf.write('\n')
- res = []
- if len(res) > 0: # some left
- outf.write('\n'.join(res))
- outf.write('\n')
- outf.close()
- print '## makeindep: %6.1f seconds total runtime' % (time.time() - started)
-
-u = """
-Generate either trios or independent subjects with a prespecified
-number of random alleles and a uniform or triangular MAF distribution for
-stress testing. No LD is simulated - alleles are random. Offspring for
-trios are generated by random mating the random parental alleles so there are
-no Mendelian errors unless the -M option is used. Mendelian errors are generated
-randomly according to the possible errors given the parental mating type although
-this is fresh code and not guaranteed to work quite right yet - comments welcomed
-
-Enquiries to ross.lazarus(a)gmail.com
-
-eg to generate 700 trios with 500k snps, use:
-fakebigped.py -n 2100 -s 500000
-or to generate 500 independent cases and 500 controls with 100k snps and 0.02 missingness (MCAR), use:
-fakebigped.py -c 500 -n 1000 -s 100000 -m 0.02
-
-fakebigped.py -o myfake -m 0.05 -s 100000 -n 2000
-will make fbat compatible myfake.ped with 100k markers in
-666 trios (total close to 2000 subjects), a uniform MAF distribution and about 5% MCAR missing
-
-fakebigped.py -o myfake -m 0.05 -s 100000 -n 2000 -M 0.05
-will make fbat compatible myfake.ped with 100k markers in
-666 trios (total close to 2000 subjects), a uniform MAF distribution,
-about 5% Mendelian errors and about 5% MCAR missing
-
-
-fakebigped.py -o myfakecc -m 0.05 -s 100000 -n 2000 -c 1000 -l
-will make plink compatible myfakecc.ped and myfakecc.map (that's what the -l option does),
-with 100k markers in 1000 cases and 1000 controls (affection status 2 and 1 respectively),
-a triangular MAF distribution (more rare alleles) and about 5% MCAR missing
-
-You should see about 1/4 million genotypes/second so about an hour for a
-500k snps in 2k subjects and about a 4GB ped file - these are BIG!!
-
-"""
-
-import sys, os, glob
-
-galhtmlprefix = """<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Galaxy %s tool output - see http://g2.trac.bx.psu.edu/" />
-<title></title>
-<link rel="stylesheet" href="/static/style/base.css" type="text/css" />
-</head>
-<body>
-<div class="document">
-"""
-
-
-def doImport(outfile=None,outpath=None):
- """ import into one of the new html composite data types for Rgenetics
- Dan Blankenberg with mods by Ross Lazarus
- October 2007
- """
- flist = glob.glob(os.path.join(outpath,'*'))
- outf = open(outfile,'w')
- outf.write(galhtmlprefix % prog)
- for i, data in enumerate( flist ):
- outf.write('<li><a href="%s">%s</a></li>\n' % (os.path.split(data)[-1],os.path.split(data)[-1]))
+ outf = os.path.join(fpath,outf)
+ outf = open(outf, 'w')
+ started = time.time()
+ #sample = personMaker(width=width, affs=status, freqs=freqs, alleles=alleles, Ntomake=Ntot)
+ if fbatstyle: # add a header row with the marker names
+ res.append(fbathead) # header row for fbat
+ for id in xrange(Ntot):
+ if id < Nunaff:
+ aff = 1
+ else:
+ aff = 2
+ family = makePerson(width=width, aff=aff, freqs=freqs, alleles=alleles, id=id+1)
+ res += family
+ if (id % 50 == 0): # write out to keep ram requirements reasonable
+ if (id % 200 == 0): # show progress
+ dur = time.time() - started
+ if dur == 0:
+ dur = 1.0
+ print 'Id: %d, %4.1f genos/sec at %6.1f sec' % (id, width*id/dur, dur)
+ outf.write('\n'.join(res))
+ outf.write('\n')
+ res = []
+ if len(res) > 0: # some left
+ outf.write('\n'.join(res))
+ outf.write('\n')
+ outf.close()
+ print '## makeindep: %6.1f seconds total runtime' % (time.time() - started)
+
+u = """
+Generate either trios or independent subjects with a prespecified
+number of random alleles and a uniform or triangular MAF distribution for
+stress testing. No LD is simulated - alleles are random. Offspring for
+trios are generated by random mating the random parental alleles so there are
+no Mendelian errors unless the -M option is used. Mendelian errors are generated
+randomly according to the possible errors given the parental mating type although
+this is fresh code and not guaranteed to work quite right yet - comments welcomed
+
+Enquiries to ross.lazarus(a)gmail.com
+
+eg to generate 700 trios with 500k snps, use:
+fakebigped.py -n 2100 -s 500000
+or to generate 500 independent cases and 500 controls with 100k snps and 0.02 missingness (MCAR), use:
+fakebigped.py -c 500 -n 1000 -s 100000 -m 0.02
+
+fakebigped.py -o myfake -m 0.05 -s 100000 -n 2000
+will make fbat compatible myfake.ped with 100k markers in
+666 trios (total close to 2000 subjects), a uniform MAF distribution and about 5% MCAR missing
+
+fakebigped.py -o myfake -m 0.05 -s 100000 -n 2000 -M 0.05
+will make fbat compatible myfake.ped with 100k markers in
+666 trios (total close to 2000 subjects), a uniform MAF distribution,
+about 5% Mendelian errors and about 5% MCAR missing
+
+
+fakebigped.py -o myfakecc -m 0.05 -s 100000 -n 2000 -c 1000 -l
+will make plink compatible myfakecc.ped and myfakecc.map (that's what the -l option does),
+with 100k markers in 1000 cases and 1000 controls (affection status 2 and 1 respectively),
+a triangular MAF distribution (more rare alleles) and about 5% MCAR missing
+
+You should see about 1/4 million genotypes/second so about an hour for a
+500k snps in 2k subjects and about a 4GB ped file - these are BIG!!
+
+"""
+
+import sys, os, glob
+
+galhtmlprefix = """<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Galaxy %s tool output - see http://g2.trac.bx.psu.edu/" />
+<title></title>
+<link rel="stylesheet" href="/static/style/base.css" type="text/css" />
+</head>
+<body>
+<div class="document">
+"""
+
+
+def doImport(outfile=None,outpath=None):
+ """ import into one of the new html composite data types for Rgenetics
+ Dan Blankenberg with mods by Ross Lazarus
+ October 2007
+ """
+ flist = glob.glob(os.path.join(outpath,'*'))
+ outf = open(outfile,'w')
+ outf.write(galhtmlprefix % prog)
+ for i, data in enumerate( flist ):
+ outf.write('<li><a href="%s">%s</a></li>\n' % (os.path.split(data)[-1],os.path.split(data)[-1]))
outf.write('<br><h3>This is simulated null genotype data generated by Rgenetics!</h3>')
outf.write('%s called with command line:<br><pre>' % prog)
outf.write(' '.join(sys.argv))
- outf.write('\n</pre>\n')
- outf.write("</div></body></html>")
- outf.close()
-
-
-
-if __name__ == "__main__":
- """
- """
- parser = OptionParser(usage=u, version="%prog 0.01")
- a = parser.add_option
- a("-n","--nsubjects",type="int",dest="Ntot",
- help="nsubj: total number of subjects",default=2000)
- a("-t","--title",dest="title",
- help="title: file basename for outputs",default='fakeped')
- a("-c","--cases",type="int",dest="Naff",
- help="number of cases: independent subjects with status set to 2 (ie cases). If not set, NTOT/3 trios will be generated", default = 0)
- a("-s","--snps",dest="width",type="int",
- help="snps: total number of snps per subject", default=1000)
- a("-d","--distribution",dest="MAFdist",default="Uniform",
- help="MAF distribution - default is Uniform, can be Triangular")
- a("-o","--outf",dest="outf",
- help="Output file", default = 'fakeped')
- a("-p","--outpath",dest="outpath",
- help="Path for output files", default = './')
- a("-l","--pLink",dest="outstyle", default='L',
- help="Ped files as for Plink - no header, separate Map file - default is Plink style")
- a("-w","--loWmaf", type="float", dest="lowmaf", default=0.01, help="Lower limit for SNP MAF (minor allele freq)")
- a("-m","--missing",dest="missrate",type="float",
- help="missing: probability of missing MCAR - default 0.0", default=0.0)
- a("-v","--valmiss",dest="missval",
- help="missing character: Missing allele code - usually 0 or N - default 0", default="0")
- a("-M","--Mendelrate",dest="mendrate",type="float",
- help="Mendelian error rate: probability of a mendel error per trio, default=0.0", default=0.0)
- a("-H","--noHGRS",dest="useHG",type="int",
- help="Use local copy of UCSC snp126 database to generate real rs numbers", default=True)
- (options,args) = parser.parse_args()
- low = options.lowmaf
+ outf.write('\n</pre>\n')
+ outf.write("</div></body></html>")
+ outf.close()
+
+
+
+if __name__ == "__main__":
+ """
+ """
+ parser = OptionParser(usage=u, version="%prog 0.01")
+ a = parser.add_option
+ a("-n","--nsubjects",type="int",dest="Ntot",
+ help="nsubj: total number of subjects",default=2000)
+ a("-t","--title",dest="title",
+ help="title: file basename for outputs",default='fakeped')
+ a("-c","--cases",type="int",dest="Naff",
+ help="number of cases: independent subjects with status set to 2 (ie cases). If not set, NTOT/3 trios will be generated", default = 0)
+ a("-s","--snps",dest="width",type="int",
+ help="snps: total number of snps per subject", default=1000)
+ a("-d","--distribution",dest="MAFdist",default="Uniform",
+ help="MAF distribution - default is Uniform, can be Triangular")
+ a("-o","--outf",dest="outf",
+ help="Output file", default = 'fakeped')
+ a("-p","--outpath",dest="outpath",
+ help="Path for output files", default = './')
+ a("-l","--pLink",dest="outstyle", default='L',
+ help="Ped files as for Plink - no header, separate Map file - default is Plink style")
+ a("-w","--loWmaf", type="float", dest="lowmaf", default=0.01, help="Lower limit for SNP MAF (minor allele freq)")
+ a("-m","--missing",dest="missrate",type="float",
+ help="missing: probability of missing MCAR - default 0.0", default=0.0)
+ a("-v","--valmiss",dest="missval",
+ help="missing character: Missing allele code - usually 0 or N - default 0", default="0")
+ a("-M","--Mendelrate",dest="mendrate",type="float",
+ help="Mendelian error rate: probability of a mendel error per trio, default=0.0", default=0.0)
+ a("-H","--noHGRS",dest="useHG",type="int",
+ help="Use local copy of UCSC snp126 database to generate real rs numbers", default=True)
+ (options,args) = parser.parse_args()
+ low = options.lowmaf
try:
os.makedirs(options.outpath)
except:
pass
- if options.MAFdist.upper() == 'U':
- mafDist = makeUniformMAFdist(low=low, high=0.5)
- else:
+ if options.MAFdist.upper() == 'U':
+ mafDist = makeUniformMAFdist(low=low, high=0.5)
+ else:
mafDist = makeTriangularMAFdist(low=low, high=0.5, beta=5)
alleles,freqs, rslist, chromlist, poslist = makeMap(width=int(options.width),
MAFdistribution=mafDist, useGP=False)
@@ -511,25 +511,25 @@
title = string.translate(options.title,trantab)
if options.outstyle == 'F':
- fbatstyle = True
- fbathead = makeFbathead(rslist=rslist, chromlist=chromlist, poslist=poslist, width=options.width)
+ fbatstyle = True
+ fbathead = makeFbathead(rslist=rslist, chromlist=chromlist, poslist=poslist, width=options.width)
else:
- fbatstyle = False
- writeMap(fprefix=title, rslist=rslist, fpath=options.outpath,
- chromlist=chromlist, poslist=poslist, width=options.width)
- if options.Naff > 0: # make case control data
- makeIndep(fprefix = title, fpath=options.outpath,
- width=options.width, Nunaff=options.Ntot-options.Naff,
- Naff=options.Naff, MAFdistribution=mafDist,alleles=alleles, freqs=freqs,
- fbatstyle=fbatstyle, missrate=options.missrate, missval=options.missval,
- fbathead=fbathead)
- else:
- makePed(fprefix=options.fprefix, fpath=options.fpath,
- width=options.width, MAFdistribution=mafDist, nsubj=options.Ntot,
- alleles=alleles, freqs=freqs, fbatstyle=fbatstyle, missrate=options.missrate,
- mendrate=options.mendrate, missval=options.missval,
+ fbatstyle = False
+ writeMap(fprefix=defbasename, rslist=rslist, fpath=options.outpath,
+ chromlist=chromlist, poslist=poslist, width=options.width)
+ if options.Naff > 0: # make case control data
+ makeIndep(fprefix = defbasename, fpath=options.outpath,
+ width=options.width, Nunaff=options.Ntot-options.Naff,
+ Naff=options.Naff, MAFdistribution=mafDist,alleles=alleles, freqs=freqs,
+ fbatstyle=fbatstyle, missrate=options.missrate, missval=options.missval,
fbathead=fbathead)
- doImport(outfile=options.outf,outpath=options.outpath)
-
-
-
+ else:
+ makePed(fprefix=defbasename, fpath=options.fpath,
+ width=options.width, MAFdistribution=mafDist, nsubj=options.Ntot,
+ alleles=alleles, freqs=freqs, fbatstyle=fbatstyle, missrate=options.missrate,
+ mendrate=options.mendrate, missval=options.missval,
+ fbathead=fbathead)
+ doImport(outfile=options.outf,outpath=options.outpath)
+
+
+
--- a/tools/rgenetics/rgfakePed.xml Fri May 13 21:24:03 2011 -0400
+++ b/tools/rgenetics/rgfakePed.xml Mon May 16 09:12:19 2011 -0400
@@ -1,14 +1,13 @@
-<tool id="rgfakePed1" name="Null genotypes">
+<tool id="rgfakePed1" name="Null genotypes" version="0.02"><description>for testing</description><command interpreter="python">rgfakePed.py --title '$title'
-o '$out_file1' -p '$out_file1.files_path' -c '$ncases' -n '$ntotal'
-s '$nsnp' -w '$lowmaf' -v '$missingValue' -l '$outFormat'
-d '$mafdist' -m '$missingRate' -M '$mendelRate' </command><inputs>
- <page><param name="title"
- type="text"
+ type="text" value="Fake_test_geno_data"
help="Name for outputs from this job"
label="Descriptive short name"/><param name="ntotal"
@@ -55,11 +54,10 @@
help = "Missing allele value"
label="Missing value for an allele for the output ped file"/>
- </page></inputs><outputs>
- <data format="lped" name="out_file1" label="${title}.lped" />
+ <data format="lped" name="out_file1" label="${title}.lped"/></outputs><tests><test>
@@ -74,8 +72,8 @@
<param name="mendelRate" value="0" /><param name="missingValue" value="0" /><output name='out_file1' file='rgtestouts/rgfakePed/rgfakePedtest1.lped' ftype='lped' compare="diff" lines_diff='5'>
- <extra_files type="file" name='rgfakePedtest1.ped' value="rgtestouts/rgfakePed/rgfakePedtest1.ped" compare="diff" lines_diff='80'/>
- <extra_files type="file" name='rgfakePedtest1.map' value="rgtestouts/rgfakePed/rgfakePedtest1.map" compare="diff" />
+ <extra_files type="file" name='RgeneticsData.ped' value="rgtestouts/rgfakePed/rgfakePedtest1.ped" compare="diff" lines_diff='80'/>
+ <extra_files type="file" name='RgeneticsData.map' value="rgtestouts/rgfakePed/rgfakePedtest1.map" compare="diff" /></output></test></tests>
@@ -100,11 +98,15 @@
This tool is very experimental
-**Attribution**
+.. class:: infomark
+
+**Attribution and Licensing**
+
Designed and written for the Rgenetics Galaxy tools
copyright Ross Lazarus 2007 (ross.lazarus(a)gmail.com)
-Licensed under the terms of the LGPL
-as documented http://www.gnu.org/licenses/lgpl.html
+Licensed under the terms of the _LGPL
+
+ .. _LGPL: http://www.gnu.org/copyleft/lesser.html
</help></tool>
http://bitbucket.org/galaxy/galaxy-central/changeset/2790f54a4fe7/
changeset: r5566:2790f54a4fe7
user: fubar
date: 2011-05-16 16:03:47
summary: removed python2.4 from rgfakePed.py
affected #: 1 file (161 bytes)
--- a/tools/rgenetics/rgfakePed.py Mon May 16 09:12:19 2011 -0400
+++ b/tools/rgenetics/rgfakePed.py Mon May 16 10:03:47 2011 -0400
@@ -1,4 +1,6 @@
-#! /usr/local/bin/python2.4
+# modified may 2011 to name components (map/ped) as RgeneticsData to align with default base_name
+# otherwise downstream tools fail
+# modified march 2011 to remove post execution hook
# pedigree data faker
# specifically designed for scalability testing of
# Shaun Purcel's PLINK package
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0
2 new changesets in galaxy-central:
http://bitbucket.org/galaxy/galaxy-central/changeset/7e460794a191/
changeset: r5563:7e460794a191
user: fubar
date: 2011-05-14 02:46:38
summary: picard wrapper typo fixed
affected #: 1 file (8 bytes)
--- a/tools/picard/picard_wrapper.py Fri May 13 17:12:44 2011 -0400
+++ b/tools/picard/picard_wrapper.py Fri May 13 20:46:38 2011 -0400
@@ -219,8 +219,8 @@
else:
tdat = ['\t'.join(x).strip() for x in dat] # back to strings :(
tdat = ['<tr class="d%d"><td colspan="2">%s</td></tr>\n' % ((i+len(heads)) % 2,x) for i,x in enumerate(tdat)]
- res += tdat
- dat = []
+ res += tdat
+ dat = []
res.append('</table>\n')
return res
http://bitbucket.org/galaxy/galaxy-central/changeset/56be3f4871cd/
changeset: r5564:56be3f4871cd
user: fubar
date: 2011-05-14 03:24:03
summary: reverting reorder test outputs - PhiX reference used to generate them seems different from that on the buildbot
affected #: 2 files (3.7 KB)
--- a/test-data/picard_RS_output2.sam Fri May 13 20:46:38 2011 -0400
+++ b/test-data/picard_RS_output2.sam Fri May 13 21:24:03 2011 -0400
@@ -0,0 +1,22 @@
+@HD VN:1.0 SO:unsorted
+@SQ SN:phiX174 LN:5386 UR:file:/afs/bx.psu.edu/user/kpvincent/working/phiX.fa M5:f479307bca04825e98008f37e4f6251a
+@PG ID:Bowtie VN:0.12.7 CL:"bowtie -q -p 4 -S --phred33-quals /genome/phiX/bowtie_index/phiX dataset_437.dat"
+HWI-EAS91_1_30788AAXX:1:1:1761:343/1 0 phiX174 5 255 50M * 0 0 TTTATCGCTTCCATGACGCAGAAGTTAACACTTTCGGATATTTCTGATGA IIIIIII""IIIIIIIIIII?I0IIIIHIIIGIIIII0II?I""IIIIII XA:i:0 MD:Z:50 NM:i:0
+HWI-EAS91_1_30788AAXX:1:1:1647:512/1 0 phiX174 401 255 50M * 0 0 TACTGAACAATCCGTACGTTTCCAGACCGCTTTGGCCTCTATTAAGCTCA IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII"IIIIIII000IIII XA:i:0 MD:Z:50 NM:i:0
+HWI-EAS91_1_30788AAXX:1:1:1578:331/1 0 phiX174 209 255 50M * 0 0 TGTCAAAAACTGACGCGTTGGATGAGGAGAAGTGGCTTAATATGCTTGGC IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII"IIIIIII000IIII XA:i:0 MD:Z:50 NM:i:0
+HWI-EAS91_1_30788AAXX:1:1:1746:351/1 0 phiX174 1218 255 50M * 0 0 CTCATCGTCACGTTTATGGTGAACAGTGGATTAAGTTCATGAAGGATGGT IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII"IIIIIII000IIII XA:i:0 MD:Z:50 NM:i:0
+HWI-EAS91_1_30788AAXX:1:1:1582:633/1 0 phiX174 1517 255 50M * 0 0 CCGCTTCCTCCTGAGACTGAGCTTTCTCGCCAAATGACGACTTCTACCAC IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII"IIIIIII000IIII XA:i:0 MD:Z:50 NM:i:0
+HWI-EAS91_1_30788AAXX:1:1:1599:330/1 0 phiX174 803 255 50M * 0 0 AGAAGAAAACGTGCGTCAAAAATTACGTGCAGAAGGAGTGATGTAATGTC IIIIIII""IIIIIIIIIIIIIIIIIII<III@II"IIIIIII000IIII XA:i:0 MD:Z:50 NM:i:0
+HWI-EAS91_1_30788AAXX:1:1:1598:534/1 0 phiX174 1717 255 50M * 0 0 GCGCTCTAATCTCTGGGCATCTGGCTATGATGTTGATGGAACTGACCAAA IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII"IIIIIII000IIII XA:i:0 MD:Z:50 NM:i:0
+HWI-EAS91_1_30788AAXX:1:1:1749:466/1 0 phiX174 2201 255 50M * 0 0 TTGCAGTGGAATAGTCAGGTTAAATTTAATGTGACCGTTTATCGCAATCT IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII"IIIIIII000IIII XA:i:0 MD:Z:50 NM:i:0
+HWI-EAS91_1_30788AAXX:1:1:1570:620/1 4 * 0 0 * * 0 0 GAGTAACAAAGTAAAGTTTGGACCGTTTTTGTCTCGTGCTCGTCGCTGCG IIIIIII""IIIIIIIIIIIIIBIIIIIIIIIIII"IIIIIII000IIII XM:i:0
+HWI-EAS91_1_30788AAXX:1:1:1629:446/1 0 phiX174 2301 255 50M * 0 0 AGGTTATAACGCCGAAGCGGTAAAAATTTTAATTTTTGCCGCTGAGGGGT IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII"IIIIIII000IIII XA:i:0 MD:Z:50 NM:i:0
+HWI-EAS91_1_30788AAXX:1:1:1763:587/1 0 phiX174 2501 255 50M * 0 0 AAGCTACATCGTCAACGTTATATTTTGATAGTTTGACGGTTAATGCTGGT IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII"IIIIIII000IIII XA:i:0 MD:Z:50 NM:i:0
+HWI-EAS91_1_30788AAXX:1:1:1616:363/1 0 phiX174 2718 255 50M * 0 0 TGTTTATCCTTTGAATGGTCGCCATGATGGTGGTTATTATACCGTCAAGG IIIIIII""IIIIIIIIIIIIIIIIIIIIIIDIII"IIIIIII000IIII XA:i:0 MD:Z:50 NM:i:0
+HWI-EAS91_1_30788AAXX:1:1:1572:270/1 0 phiX174 3518 255 50M * 0 0 TGAGATGCTTGCTTATCAACAGAAGGAGTCTACTGCTCGCGTTGCGTCTA IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII"IIIIIII000IIII XA:i:0 MD:Z:50 NM:i:0
+HWI-EAS91_1_30788AAXX:1:1:1768:715/1 0 phiX174 3118 255 50M * 0 0 ACCCTGATGAGGCCGCCCCTAGTTTTGTTTCTGGTGCTATGGCTAAAGCT IIIIIII""IIIIIIIIIIIIIDIIIIIIIIIIII"IIIIIII000IIII XA:i:0 MD:Z:50 NM:i:0
+HWI-EAS91_1_30788AAXX:1:1:1785:1272/1 0 phiX174 3818 255 50M * 0 0 TATTTTTCATGGTATTGATAAAGCTGTTGCCGATACTTGGAACAATTTCT III""""""IIIIIIIII""FI"IIII""II+ICI"IIIIIII000IIII XA:i:0 MD:Z:50 NM:i:0
+HWI-EAS91_1_30788AAXX:1:1:1673:514/1 0 phiX174 4018 255 50M * 0 0 ATTATTTTGACTTTGAGCGTATCGAGGCTCTTAAACCTGCTATTGAGGCT IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIII1"IIIIIII000IIII XA:i:0 MD:Z:50 NM:i:0
+HWI-EAS91_1_30788AAXX:1:1:1652:270/1 4 * 0 0 * * 0 0 AGCGTAAAGGCGCTCGTCTTTGGTATGTAGGACTTTGCATTGTTTAATTG IIIIIII""IIIIIIIIIIIIIIIIIIIIIII6II"IIIIIII000IIII XM:i:0
+HWI-EAS91_1_30788AAXX:1:1:1572:324/1 4 * 0 0 * * 0 0 AAGGTGCTTAAATTCGTGGGTCCTGAGCTGGCGACCCTGTTTTGTATGGC IIIIIII""IIIIIIIIIIIIIIIIIIII+7I05I"IIIIIII000IIII XM:i:0
+HWI-EAS91_1_30788AAXX:1:1:1634:330/1 0 phiX174 4418 255 50M * 0 0 GGATATTCGCGATGAGTATAATTACCCCAAAAAGAAAGGTATTAAGGATG IIIIIII""IIIIIIIIIIIIIIIIIIIIIII8II"IIIIIII000IIII XA:i:0 MD:Z:50 NM:i:0
--- a/test-data/picard_RS_output3.sam Fri May 13 20:46:38 2011 -0400
+++ b/test-data/picard_RS_output3.sam Fri May 13 21:24:03 2011 -0400
@@ -1,26 +1,26 @@
@HD VN:1.0 SO:unsorted
-@SQ SN:phiX1 LN:1120 UR:dataset_5.dat AS:phiX_buildBlah1.1 M5:40156fecb557ec9a4e0e7d0d5379d346 SP:phiX174
-@SQ SN:phiX2 LN:1190 UR:dataset_5.dat AS:phiX_buildBlah1.1 M5:3ecdb3921cbd184296cefdc675595fc1 SP:phiX174
-@SQ SN:phiX3 LN:1330 UR:dataset_5.dat AS:phiX_buildBlah1.1 M5:60435b7625ee8862e4af3e839b195198 SP:phiX174
-@SQ SN:phiX4 LN:910 UR:dataset_5.dat AS:phiX_buildBlah1.1 M5:ae8509d7b91ed64a44dd718513b1fd06 SP:phiX174
-@SQ SN:phiX5 LN:828 UR:dataset_5.dat AS:phiX_buildBlah1.1 M5:459c70115963cbce5021cac2bc9dfbd1 SP:phiX174
+@SQ SN:phiX1 LN:1120 UR:picard_RS_input4.fasta AS:phiX_buildBlah1.1 M5:40156fecb557ec9a4e0e7d0d5379d346 SP:phiX174
+@SQ SN:phiX2 LN:1190 UR:picard_RS_input4.fasta AS:phiX_buildBlah1.1 M5:3ecdb3921cbd184296cefdc675595fc1 SP:phiX174
+@SQ SN:phiX3 LN:1330 UR:picard_RS_input4.fasta AS:phiX_buildBlah1.1 M5:60435b7625ee8862e4af3e839b195198 SP:phiX174
+@SQ SN:phiX4 LN:910 UR:picard_RS_input4.fasta AS:phiX_buildBlah1.1 M5:ae8509d7b91ed64a44dd718513b1fd06 SP:phiX174
+@SQ SN:phiX5 LN:828 UR:picard_RS_input4.fasta AS:phiX_buildBlah1.1 M5:459c70115963cbce5021cac2bc9dfbd1 SP:phiX174
@PG ID:Bowtie VN:0.12.7 CL:"bowtie -q -p 4 -S --phred33-quals /tmp/tmp1E6jpl/tmpDg42o9 dataset_437.dat"
-HWI-EAS91_1_30788AAXX:1:1:1761:343/1 0 phiX1 5 255 50M * 0 0 TTTATCGCTTCCATGACGCAGAAGTTAACACTTTCGGATATTTCTGATGA IIIIIII""IIIIIIIIIII?I0IIIIHIIIGIIIII0II?I""IIIIII XA:i:0 MD:Z:50 NM:i:0
+HWI-EAS91_1_30788AAXX:1:1:1570:620/1 4 * 0 0 * * 0 0 GAGTAACAAAGTAAAGTTTGGACCGTTTTTGTCTCGTGCTCGTCGCTGCG IIIIIII""IIIIIIIIIIIIIBIIIIIIIIIIII"IIIIIII000IIII XM:i:0
+HWI-EAS91_1_30788AAXX:1:1:1572:270/1 0 phiX3 1208 255 50M * 0 0 TGAGATGCTTGCTTATCAACAGAAGGAGTCTACTGCTCGCGTTGCGTCTA IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII"IIIIIII000IIII XA:i:0 MD:Z:50 NM:i:0
+HWI-EAS91_1_30788AAXX:1:1:1572:324/1 4 * 0 0 * * 0 0 AAGGTGCTTAAATTCGTGGGTCCTGAGCTGGCGACCCTGTTTTGTATGGC IIIIIII""IIIIIIIIIIIIIIIIIIII+7I05I"IIIIIII000IIII XM:i:0
HWI-EAS91_1_30788AAXX:1:1:1578:331/1 0 phiX1 209 255 50M * 0 0 TGTCAAAAACTGACGCGTTGGATGAGGAGAAGTGGCTTAATATGCTTGGC IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII"IIIIIII000IIII XA:i:0 MD:Z:50 NM:i:0
-HWI-EAS91_1_30788AAXX:1:1:1647:512/1 0 phiX1 401 255 50M * 0 0 TACTGAACAATCCGTACGTTTCCAGACCGCTTTGGCCTCTATTAAGCTCA IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII"IIIIIII000IIII XA:i:0 MD:Z:50 NM:i:0
-HWI-EAS91_1_30788AAXX:1:1:1599:330/1 0 phiX1 803 255 50M * 0 0 AGAAGAAAACGTGCGTCAAAAATTACGTGCAGAAGGAGTGATGTAATGTC IIIIIII""IIIIIIIIIIIIIIIIIII<III@II"IIIIIII000IIII XA:i:0 MD:Z:30G19 NM:i:1
-HWI-EAS91_1_30788AAXX:1:1:1746:351/1 0 phiX2 98 255 50M * 0 0 CTCATCGTCACGTTTATGGTGAACAGTGGATTAAGTTCATGAAGGATGGT IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII"IIIIIII000IIII XA:i:0 MD:Z:50 NM:i:0
HWI-EAS91_1_30788AAXX:1:1:1582:633/1 0 phiX2 397 255 50M * 0 0 CCGCTTCCTCCTGAGACTGAGCTTTCTCGCCAAATGACGACTTCTACCAC IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII"IIIIIII000IIII XA:i:0 MD:Z:50 NM:i:0
HWI-EAS91_1_30788AAXX:1:1:1598:534/1 0 phiX2 597 255 50M * 0 0 GCGCTCTAATCTCTGGGCATCTGGCTATGATGTTGATGGAACTGACCAAA IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII"IIIIIII000IIII XA:i:0 MD:Z:50 NM:i:0
+HWI-EAS91_1_30788AAXX:1:1:1599:330/1 0 phiX1 803 255 50M * 0 0 AGAAGAAAACGTGCGTCAAAAATTACGTGCAGAAGGAGTGATGTAATGTC IIIIIII""IIIIIIIIIIIIIIIIIII<III@II"IIIIIII000IIII XA:i:0 MD:Z:30G19 NM:i:1
+HWI-EAS91_1_30788AAXX:1:1:1616:363/1 0 phiX3 408 255 50M * 0 0 TGTTTATCCTTTGAATGGTCGCCATGATGGTGGTTATTATACCGTCAAGG IIIIIII""IIIIIIIIIIIIIIIIIIIIIIDIII"IIIIIII000IIII XA:i:0 MD:Z:50 NM:i:0
+HWI-EAS91_1_30788AAXX:1:1:1629:446/1 4 * 0 0 * * 0 0 AGGTTATAACGCCGAAGCGGTAAAAATTTTAATTTTTGCCGCTGAGGGGT IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII"IIIIIII000IIII XM:i:0
+HWI-EAS91_1_30788AAXX:1:1:1634:330/1 0 phiX4 778 255 50M * 0 0 GGATATTCGCGATGAGTATAATTACCCCAAAAAGAAAGGTATTAAGGATG IIIIIII""IIIIIIIIIIIIIIIIIIIIIII8II"IIIIIII000IIII XA:i:0 MD:Z:50 NM:i:0
+HWI-EAS91_1_30788AAXX:1:1:1647:512/1 0 phiX1 401 255 50M * 0 0 TACTGAACAATCCGTACGTTTCCAGACCGCTTTGGCCTCTATTAAGCTCA IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII"IIIIIII000IIII XA:i:0 MD:Z:50 NM:i:0
+HWI-EAS91_1_30788AAXX:1:1:1652:270/1 4 * 0 0 * * 0 0 AGCGTAAAGGCGCTCGTCTTTGGTATGTAGGACTTTGCATTGTTTAATTG IIIIIII""IIIIIIIIIIIIIIIIIIIIIII6II"IIIIIII000IIII XM:i:0
+HWI-EAS91_1_30788AAXX:1:1:1673:514/1 0 phiX4 378 255 50M * 0 0 ATTATTTTGACTTTGAGCGTATCGAGGCTCTTAAACCTGCTATTGAGGCT IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIII1"IIIIIII000IIII XA:i:0 MD:Z:50 NM:i:0
+HWI-EAS91_1_30788AAXX:1:1:1746:351/1 0 phiX2 98 255 50M * 0 0 CTCATCGTCACGTTTATGGTGAACAGTGGATTAAGTTCATGAAGGATGGT IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII"IIIIIII000IIII XA:i:0 MD:Z:50 NM:i:0
HWI-EAS91_1_30788AAXX:1:1:1749:466/1 0 phiX2 1081 255 50M * 0 0 TTGCAGTGGAATAGTCAGGTTAAATTTAATGTGACCGTTTATCGCAATCT IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII"IIIIIII000IIII XA:i:0 MD:Z:50 NM:i:0
+HWI-EAS91_1_30788AAXX:1:1:1761:343/1 0 phiX1 5 255 50M * 0 0 TTTATCGCTTCCATGACGCAGAAGTTAACACTTTCGGATATTTCTGATGA IIIIIII""IIIIIIIIIII?I0IIIIHIIIGIIIII0II?I""IIIIII XA:i:0 MD:Z:50 NM:i:0
HWI-EAS91_1_30788AAXX:1:1:1763:587/1 0 phiX3 191 255 50M * 0 0 AAGCTACATCGTCAACGTTATATTTTGATAGTTTGACGGTTAATGCTGGT IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII"IIIIIII000IIII XA:i:0 MD:Z:50 NM:i:0
-HWI-EAS91_1_30788AAXX:1:1:1616:363/1 0 phiX3 408 255 50M * 0 0 TGTTTATCCTTTGAATGGTCGCCATGATGGTGGTTATTATACCGTCAAGG IIIIIII""IIIIIIIIIIIIIIIIIIIIIIDIII"IIIIIII000IIII XA:i:0 MD:Z:50 NM:i:0
HWI-EAS91_1_30788AAXX:1:1:1768:715/1 0 phiX3 808 255 50M * 0 0 ACCCTGATGAGGCCGCCCCTAGTTTTGTTTCTGGTGCTATGGCTAAAGCT IIIIIII""IIIIIIIIIIIIIDIIIIIIIIIIII"IIIIIII000IIII XA:i:0 MD:Z:50 NM:i:0
-HWI-EAS91_1_30788AAXX:1:1:1572:270/1 0 phiX3 1208 255 50M * 0 0 TGAGATGCTTGCTTATCAACAGAAGGAGTCTACTGCTCGCGTTGCGTCTA IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII"IIIIIII000IIII XA:i:0 MD:Z:50 NM:i:0
HWI-EAS91_1_30788AAXX:1:1:1785:1272/1 0 phiX4 178 255 50M * 0 0 TATTTTTCATGGTATTGATAAAGCTGTTGCCGATACTTGGAACAATTTCT III""""""IIIIIIIII""FI"IIII""II+ICI"IIIIIII000IIII XA:i:0 MD:Z:50 NM:i:0
-HWI-EAS91_1_30788AAXX:1:1:1673:514/1 0 phiX4 378 255 50M * 0 0 ATTATTTTGACTTTGAGCGTATCGAGGCTCTTAAACCTGCTATTGAGGCT IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIII1"IIIIIII000IIII XA:i:0 MD:Z:50 NM:i:0
-HWI-EAS91_1_30788AAXX:1:1:1634:330/1 0 phiX4 778 255 50M * 0 0 GGATATTCGCGATGAGTATAATTACCCCAAAAAGAAAGGTATTAAGGATG IIIIIII""IIIIIIIIIIIIIIIIIIIIIII8II"IIIIIII000IIII XA:i:0 MD:Z:50 NM:i:0
-HWI-EAS91_1_30788AAXX:1:1:1570:620/1 4 * 0 0 * * 0 0 GAGTAACAAAGTAAAGTTTGGACCGTTTTTGTCTCGTGCTCGTCGCTGCG IIIIIII""IIIIIIIIIIIIIBIIIIIIIIIIII"IIIIIII000IIII XM:i:0
-HWI-EAS91_1_30788AAXX:1:1:1572:324/1 4 * 0 0 * * 0 0 AAGGTGCTTAAATTCGTGGGTCCTGAGCTGGCGACCCTGTTTTGTATGGC IIIIIII""IIIIIIIIIIIIIIIIIIII+7I05I"IIIIIII000IIII XM:i:0
-HWI-EAS91_1_30788AAXX:1:1:1652:270/1 4 * 0 0 * * 0 0 AGCGTAAAGGCGCTCGTCTTTGGTATGTAGGACTTTGCATTGTTTAATTG IIIIIII""IIIIIIIIIIIIIIIIIIIIIII6II"IIIIIII000IIII XM:i:0
-HWI-EAS91_1_30788AAXX:1:1:1629:446/1 4 * 0 0 * * 0 0 AGGTTATAACGCCGAAGCGGTAAAAATTTTAATTTTTGCCGCTGAGGGGT IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII"IIIIIII000IIII XM:i:0
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0
4 new changesets in galaxy-central:
http://bitbucket.org/galaxy/galaxy-central/changeset/2748be87612d/
changeset: r5559:2748be87612d
user: fubar
date: 2011-05-13 21:23:32
summary: Reordersam fails silently if contig names do not match so added an html log where this can be seen easily. Updated insertsize test
affected #: 4 files (1.2 KB)
--- a/test-data/picard_output_insertsize_tinysam.html Fri May 13 10:02:28 2011 -0400
+++ b/test-data/picard_output_insertsize_tinysam.html Fri May 13 15:23:32 2011 -0400
@@ -12,7 +12,7 @@
</head><body><div class="document">
-Galaxy tool CollectInsertSizeMetrics run at 12/05/2011 14:33:49</b><br/><table cellpadding="10"><tr><td>
+Galaxy tool CollectInsertSizeMetrics run at 13/05/2011 15:20:46</b><br/><table cellpadding="10"><tr><td><a href="InsertSizeHist.pdf"><img src="InsertSizeHist.jpg" title="Click image preview for a print quality PDF version" hspace="10" align="middle"></a></tr></td></table><b>The following output files were created (click the filename to view/download a copy):</b><hr/><table>
@@ -26,46 +26,27 @@
<li><a href="http://picard.sourceforge.net/picard-metric-definitions.shtml">Click here for Picard Metrics definitions</a></li></ul><hr/><b>Picard output (transposed to make it easier to see)</b><hr/><table cellpadding="3" >
-<tr class="d0"><td colspan="2">## net.sf.picard.metrics.StringHeader</td></tr><tr class="d1"><td colspan="2"># net.sf.picard.analysis.CollectInsertSizeMetrics HISTOGRAM_FILE=InsertSizeHist.pdf TAIL_LIMIT=10000 MINIMUM_PCT=0.01 INPUT=/tmp/6729253.1.all.q/tmpM5wI_h/database/files/001/dataset_1092.dat OUTPUT=/udd/rerla/galaxy-central/database/job_working_directory/1028/dataset_1093_files/CollectInsertSizeMetrics.metrics.txt VALIDATION_STRINGENCY=LENIENT ASSUME_SORTED=true STOP_AFTER=0 TMP_DIR=/tmp/rerla VERBOSITY=INFO QUIET=false COMPRESSION_LEVEL=5 MAX_RECORDS_IN_RAM=500000 CREATE_INDEX=false CREATE_MD5_FILE=false</td></tr><tr class="d0"><td colspan="2">## net.sf.picard.metrics.StringHeader</td></tr><tr class="d1"><td colspan="2"># Started on: Thu May 12 14:33:48 EDT 2011</td></tr><tr class="d0"><td colspan="2">## METRICS CLASS net.sf.picard.analysis.InsertSizeMetrics</td></tr><tr class="d0"><td>MEDIAN_INSERT_SIZE</td><td>96 </td></tr>
-<tr class="d1"><td>MIN_INSERT_SIZE</td><td>96 </td></tr>
-<tr class="d0"><td>MAX_INSERT_SIZE</td><td>96 </td></tr>
-<tr class="d1"><td>MEAN_INSERT_SIZE</td><td>96 </td></tr>
-<tr class="d0"><td>STANDARD_DEVIATION</td><td>? </td></tr>
-<tr class="d1"><td>READ_PAIRS</td><td>1 </td></tr>
-<tr class="d0"><td>PAIR_ORIENTATION</td><td>FR </td></tr>
-<tr class="d1"><td>WIDTH_OF_10_PERCENT</td><td>1 </td></tr>
-<tr class="d0"><td>WIDTH_OF_20_PERCENT</td><td>1 </td></tr>
-<tr class="d1"><td>WIDTH_OF_30_PERCENT</td><td>1 </td></tr>
-<tr class="d0"><td>WIDTH_OF_40_PERCENT</td><td>1 </td></tr>
-<tr class="d1"><td>WIDTH_OF_50_PERCENT</td><td>1 </td></tr>
-<tr class="d0"><td>WIDTH_OF_60_PERCENT</td><td>1 </td></tr>
-<tr class="d1"><td>WIDTH_OF_70_PERCENT</td><td>1 </td></tr>
-<tr class="d0"><td>WIDTH_OF_80_PERCENT</td><td>1 </td></tr>
-<tr class="d1"><td>WIDTH_OF_90_PERCENT</td><td>1 </td></tr>
-<tr class="d0"><td>WIDTH_OF_99_PERCENT
-</td><td>1
- </td></tr>
-<tr class="d0"><td colspan="2">## HISTOGRAM java.lang.Integer</td></tr><tr class="d0"><td colspan="2">insert_size fr_count rf_count</td></tr>
-<tr class="d1"><td colspan="2">96 1 0</td></tr>
-<tr class="d0"><td colspan="2">201 0 1</td></tr>
+<tr class="d0"><td colspan="2">## net.sf.picard.metrics.StringHeader</td></tr><tr class="d1"><td colspan="2"># net.sf.picard.analysis.CollectInsertSizeMetrics HISTOGRAM_FILE=InsertSizeHist.pdf TAIL_LIMIT=10000 MINIMUM_PCT=0.01 INPUT=/dev/shm/tmpHpwBHW/database/files/000/dataset_1.dat OUTPUT=/udd/rerla/rgalaxy/database/job_working_directory/2/dataset_2_files/CollectInsertSizeMetrics.metrics.txt VALIDATION_STRINGENCY=LENIENT ASSUME_SORTED=true STOP_AFTER=0 TMP_DIR=/tmp/rerla VERBOSITY=INFO QUIET=false COMPRESSION_LEVEL=5 MAX_RECORDS_IN_RAM=500000 CREATE_INDEX=false CREATE_MD5_FILE=false</td></tr><tr class="d0"><td colspan="2">## net.sf.picard.metrics.StringHeader</td></tr><tr class="d1"><td colspan="2"># Started on: Fri May 13 15:20:45 EDT 2011</td></tr><tr class="d0"><td colspan="2">## METRICS CLASS net.sf.picard.analysis.InsertSizeMetrics</td></tr><tr class="d1"><td colspan="2">## HISTOGRAM java.lang.Integer</td></tr><tr class="d0"><td colspan="2">MEDIAN_INSERT_SIZE MIN_INSERT_SIZE MAX_INSERT_SIZE MEAN_INSERT_SIZE STANDARD_DEVIATION READ_PAIRS PAIR_ORIENTATION WIDTH_OF_10_PERCENT WIDTH_OF_20_PERCENT WIDTH_OF_30_PERCENT WIDTH_OF_40_PERCENT WIDTH_OF_50_PERCENT WIDTH_OF_60_PERCENT WIDTH_OF_70_PERCENT WIDTH_OF_80_PERCENT WIDTH_OF_90_PERCENT WIDTH_OF_99_PERCENT</td></tr>
+<tr class="d1"><td colspan="2">96 96 96 96 ? 1 FR 1 1 1 1 1 1 1 1 1 1</td></tr>
+<tr class="d0"><td colspan="2">201 201 201 201 ? 1 RF 1 1 1 1 1 1 1 1 1 1</td></tr>
+<tr class="d1"><td colspan="2">insert_size fr_count rf_count</td></tr>
+<tr class="d0"><td colspan="2">96 1 0</td></tr>
+<tr class="d1"><td colspan="2">201 0 1</td></tr></table><b>Picard Tool Run Log</b><hr/>
-<pre>Thu, 12 May 2011 14:33:48 INFO
- ## executing java -Xmx2g -jar /udd/rerla/galaxy-central/tool-data/shared/jars/CollectInsertSizeMetrics.jar VALIDATION_STRINGENCY=LENIENT I=/tmp/6729253.1.all.q/tmpM5wI_h/database/files/001/dataset_1092.dat O=/udd/rerla/galaxy-central/database/job_working_directory/1028/dataset_1093_files/CollectInsertSizeMetrics.metrics.txt HISTOGRAM_FILE=InsertSizeHist.pdf TAIL_LIMIT=10000 MINIMUM_PCT=0.01 returned status 0 and stderr:
-[Thu May 12 14:33:48 EDT 2011] net.sf.picard.analysis.CollectInsertSizeMetrics HISTOGRAM_FILE=InsertSizeHist.pdf TAIL_LIMIT=10000 MINIMUM_PCT=0.01 INPUT=/tmp/6729253.1.all.q/tmpM5wI_h/database/files/001/dataset_1092.dat OUTPUT=/udd/rerla/galaxy-central/database/job_working_directory/1028/dataset_1093_files/CollectInsertSizeMetrics.metrics.txt VALIDATION_STRINGENCY=LENIENT ASSUME_SORTED=true STOP_AFTER=0 TMP_DIR=/tmp/rerla VERBOSITY=INFO QUIET=false COMPRESSION_LEVEL=5 MAX_RECORDS_IN_RAM=500000 CREATE_INDEX=false CREATE_MD5_FILE=false
-WARNING 2011-05-12 14:33:48 SinglePassSamProgram File reports sort order 'queryname', assuming it's coordinate sorted anyway.
-INFO 2011-05-12 14:33:48 ProcessExecutor [1] "FR = red" "RF = blue"
-INFO 2011-05-12 14:33:48 ProcessExecutor null device
-INFO 2011-05-12 14:33:48 ProcessExecutor 1
-[Thu May 12 14:33:48 EDT 2011] net.sf.picard.analysis.CollectInsertSizeMetrics done.
+<pre>INFO:root:## executing java -Xmx2g -jar /udd/rerla/rgalaxy/tool-data/shared/jars/CollectInsertSizeMetrics.jar VALIDATION_STRINGENCY=LENIENT I=/dev/shm/tmpHpwBHW/database/files/000/dataset_1.dat O=/udd/rerla/rgalaxy/database/job_working_directory/2/dataset_2_files/CollectInsertSizeMetrics.metrics.txt HISTOGRAM_FILE=InsertSizeHist.pdf TAIL_LIMIT=10000 MINIMUM_PCT=0.01 returned status 0 and stderr:
+[Fri May 13 15:20:45 EDT 2011] net.sf.picard.analysis.CollectInsertSizeMetrics HISTOGRAM_FILE=InsertSizeHist.pdf TAIL_LIMIT=10000 MINIMUM_PCT=0.01 INPUT=/dev/shm/tmpHpwBHW/database/files/000/dataset_1.dat OUTPUT=/udd/rerla/rgalaxy/database/job_working_directory/2/dataset_2_files/CollectInsertSizeMetrics.metrics.txt VALIDATION_STRINGENCY=LENIENT ASSUME_SORTED=true STOP_AFTER=0 TMP_DIR=/tmp/rerla VERBOSITY=INFO QUIET=false COMPRESSION_LEVEL=5 MAX_RECORDS_IN_RAM=500000 CREATE_INDEX=false CREATE_MD5_FILE=false
+WARNING 2011-05-13 15:20:45 SinglePassSamProgram File reports sort order 'queryname', assuming it's coordinate sorted anyway.
+INFO 2011-05-13 15:20:46 ProcessExecutor [1] "FR = red" "RF = blue"
+INFO 2011-05-13 15:20:46 ProcessExecutor null device
+INFO 2011-05-13 15:20:46 ProcessExecutor 1
+[Fri May 13 15:20:46 EDT 2011] net.sf.picard.analysis.CollectInsertSizeMetrics done.
Runtime.totalMemory()=9109504
-Thu, 12 May 2011 14:33:49 INFO
- ## executing mogrify -format jpg -resize x400 /udd/rerla/galaxy-central/database/job_working_directory/1028/dataset_1093_files/InsertSizeHist.pdf returned status 0 and nothing on stderr
+INFO:root:## executing mogrify -format jpg -resize x400 /udd/rerla/rgalaxy/database/job_working_directory/2/dataset_2_files/InsertSizeHist.pdf returned status 0 and nothing on stderr
-Thu, 12 May 2011 14:33:49 INFO
- ## executing mogrify -format jpg -resize x400 /udd/rerla/galaxy-central/database/job_working_directory/1028/dataset_1093_files/InsertSizeHist.pdf returned status 0 and nothing on stderr
+INFO:root:## executing mogrify -format jpg -resize x400 /udd/rerla/rgalaxy/database/job_working_directory/2/dataset_2_files/InsertSizeHist.pdf returned status 0 and nothing on stderr
</pre><hr/>The freely available <a href="http://picard.sourceforge.net/command-line-overview.shtml">Picard software</a>
generated all outputs reported here running as a <a href="http://getgalaxy.org">Galaxy</a> tool</div></body></html>
--- a/tools/picard/picard_ReorderSam.xml Fri May 13 10:02:28 2011 -0400
+++ b/tools/picard/picard_ReorderSam.xml Fri May 13 15:23:32 2011 -0400
@@ -1,9 +1,8 @@
-<tool name="Reorder SAM:" id="picard_ReorderSam" version="0.01">
+<tool name="Reorder SAM:" id="picard_ReorderSam" version="0.02"><requirements><requirement type="package">picard</requirement></requirements><description>(Picard)</description><command interpreter="python">
- picard_wrapper.py
- --input=$inputFile
+ picard_wrapper.py -d "$html_file.files_path" -t "$html_file" --input=$inputFile
#if $source.indexSource == "built-in"
--ref="${ filter( lambda x: str( x[0] ) == str( $source.ref ), $__app__.tool_data_tables[ 'picard_indexes' ].get_fields() )[0][-1] }"
#else
@@ -15,11 +14,7 @@
--allow-inc-dict-concord=$allowIncDictConcord
--allow-contig-len-discord=$allowContigLenDiscord
--output-format=$outputFormat
- #if str( $outputFormat ) == "sam"
- --output=$outFileSam
- #else if str( $outputFormat ) == "bam"
- --output=$outFileBam
- #end if
+ --output="$out_file"
-j "${GALAXY_DATA_INDEX_DIR}/shared/jars/ReorderSam.jar"
--picard-cmd="ReorderSam"
</command>
@@ -47,12 +42,12 @@
<param name="allowContigLenDiscord" type="boolean" checked="False" truevalue="true" falsevalue="false" label="Allow contig length discordance?" help="This is dangerous--don't check it unless you know exactly what you're doing!" /><param name="outputFormat" type="boolean" checked="True" truevalue="bam" falsevalue="sam" label="Output bam instead of sam" help="Uncheck for sam output" /></inputs>
- <outputs>
- <data name="outFileSam" format="sam" label="${tool.name} on ${on_string}: reordered sam">
- <filter>outputFormat is False</filter>
- </data>
- <data name="outFileBam" format="bam" label="${tool.name} on ${on_string}: reordered bam">
- <filter>outputFormat is True</filter>
+ <outputs>
+ <data format="html" name="html_file" label="ReorderBam_on_${on_string}.html" />
+ <data format="bam" name="out_file" label="ReorderBam_on_${on_string}.${outputFormat}">
+ <change_format>
+ <when input="outputFormat" value="sam" format="sam" />
+ </change_format></data></outputs><tests>
--- a/tools/picard/picard_wrapper.py Fri May 13 10:02:28 2011 -0400
+++ b/tools/picard/picard_wrapper.py Fri May 13 15:23:32 2011 -0400
@@ -50,7 +50,7 @@
assert opts <> None, 'PicardBase needs opts at init'
self.opts = opts
if self.opts.outdir == None:
- self.opts.outdir = self.opts.tmpdir # fixmate has no html file eg
+ self.opts.outdir = os.getcwd() # fixmate has no html file eg so use temp dir
assert self.opts.outdir <> None,'## PicardBase needs a temp directory if no output directory passed in'
self.picname = self.baseName(opts.jar)
if self.picname.startswith('picard'):
@@ -78,10 +78,7 @@
def setLogging(self,logfname="picard_wrapper.log"):
"""setup a logger
"""
- today=timenow()
logging.basicConfig(level=logging.INFO,
- format='%(asctime)s %(levelname)s\n %(message)s',
- datefmt='%a, %d %b %Y %H:%M:%S',
filename=logfname,
filemode='a')
@@ -145,6 +142,7 @@
runme.append('-jar %s' % jar)
runme += cl
s,stdout = self.runCL(cl=runme, output_dir=self.opts.outdir)
+ print '##s=',s,'\n##stdout=',stdout
return stdout
def samToBam(self,infile=None,outdir=None):
@@ -211,27 +209,39 @@
dat.append(srow) # want lists
if row.startswith('## HISTOGRAM'):
thist = True
- if row.strip() == '' or i == lastr: # last line or blank means write a segment
- if len(heads) > 0:
- hres = ['<tr class="d%d"><td colspan="2">%s</td></tr>' % (i % 2,x) for i,x in enumerate(heads)]
- res += hres
- heads = []
- if len(dat) > 0:
- if transpose and not thist:
- tdat = map(None,*dat) # transpose an arbitrary list of lists
- tdat = ['<tr class="d%d"><td>%s</td><td>%s </td></tr>\n' % ((i+len(heads)) % 2,x[0],x[1]) for i,x in enumerate(tdat) if i < maxrows]
- missing = len(tdat) - maxrows
- if missing > 0:
- tdat.append('<tr><td colspan="2">...WARNING: %d rows deleted..see raw file %s for entire output</td></tr>' % (missing,os.path.basename(picout)))
- else:
- if thist or not transpose:
- dat = ['\t'.join(x).strip() for x in dat] # back to strings :(
- tdat = ['<tr class="d%d"><td colspan="2">%s</td></tr>\n' % ((i+len(heads)) % 2,x) for i,x in enumerate(dat) if i < maxrows]
- missing = len(tdat) - maxrows
- if missing > 0:
- tdat.append('<tr><td>...WARNING: %d rows deleted..see raw file %s for entire output</td></tr>' % (missing,os.path.basename(self.metricsOut)))
- res += tdat
- dat = []
+ if len(heads) > 0:
+ hres = ['<tr class="d%d"><td colspan="2">%s</td></tr>' % (i % 2,x) for i,x in enumerate(heads)]
+ res += hres
+ heads = []
+ if len(dat) > 0:
+ dropRows = len(dat) - maxrows
+ n = 0
+ if dropRows > 0:
+ n = int(maxrows/2)
+ if transpose and not thist:
+ tdat = map(None,*dat) # transpose an arbitrary list of lists
+ if dropRows > 0:
+ dat = tdat[:n]
+ dat.append(('<b>...%d rows not shown - see log...</b>',''))
+ dat += tdat[-n:]
+ else:
+ dat = tdat
+ tdat = ['<tr class="d%d"><td>%s</td><td>%s </td></tr>\n' % ((i+len(heads)) % 2,x[0],x[1]) for i,x in enumerate(dat)]
+ if dropRows > 0:
+ tdat.append('<tr><td colspan="2">## WARNING: %d rows deleted..see raw file %s for entire output</td></tr>' % (dropRows,os.path.basename(picout)))
+ else:
+ if dropRows > 0:
+ tdat = dat[:n]
+ tdat.append(('<b>...%d rows not shown - see log...</b>' % dropRows,''))
+ tdat += dat[-n:]
+ else:
+ tdat = dat
+ dat = ['\t'.join(x).strip() for x in tdat] # back to strings :(
+ tdat = ['<tr class="d%d"><td colspan="2">%s</td></tr>\n' % ((i+len(heads)) % 2,x) for i,x in enumerate(dat)]
+ if dropRows > 0:
+ tdat.append('<tr><td>## WARNING: %d rows deleted..see raw file %s for entire output</td></tr>' % (dropRows,os.path.basename(self.metricsOut)))
+ res += tdat
+ dat = []
res.append('</table>\n')
return res
@@ -273,11 +283,15 @@
res.append('<b>Picard Tool Run Log</b><hr/>\n')
rlog = ['<pre>',]
if llen > maxloglines:
- rlog += l[:maxloglines]
- rlog.append('\n<b>## WARNING - %d log lines truncated - %s contains entire output' % (llen - maxloglines,self.log_filename))
+ n = min(50,int(maxloglines/2))
+ rlog += l[:n]
+ rlog.append('------------ ## %d rows deleted ## --------------\n' % (llen-maxloglines))
+ rlog += l[-n:]
else:
rlog += l
rlog.append('</pre>')
+ if llen > maxloglines:
+ rlog.append('\n<b>## WARNING - %d log lines truncated - <a href="%s">%s</a> contains entire output</b>' % (llen - maxloglines,self.log_filename,self.log_filename))
res += rlog
else:
res.append("### Odd, Picard left no log file %s - must have really barfed badly?\n" % self.log_filename)
--- a/tools/picard/rgPicardInsertSize.xml Fri May 13 10:02:28 2011 -0400
+++ b/tools/picard/rgPicardInsertSize.xml Fri May 13 15:23:32 2011 -0400
@@ -1,11 +1,11 @@
-<tool name="Insertion size metrics:" id="rgPicInsertSize" version="0.01">
+<tool name="Insertion size metrics:" id="PicardInsertSize" version="0.02"><description>for PAIRED data</description>
+ <requirements><requirement type="package">picard</requirement></requirements><command interpreter="python">
picard_wrapper.py -i "$input_file" -n "$out_prefix" --tmpdir "${__new_file_path__}" --taillimit "$tailLimit"
--histwidth "$histWidth" --minpct "$minPct"
-j "${GALAXY_DATA_INDEX_DIR}/shared/jars/CollectInsertSizeMetrics.jar" -d "$html_file.files_path" -t "$html_file"
</command>
- <requirements><requirement type="package">picard</requirement></requirements><inputs><param format="bam,sam" name="input_file" type="data" label="Input: sam or bam format short read data in your current history"
help="If the select list is empty, you need to upload or import some aligned short read data from a shared library"/>
http://bitbucket.org/galaxy/galaxy-central/changeset/a7832bbcd110/
changeset: r5560:a7832bbcd110
user: fubar
date: 2011-05-13 22:54:31
summary: Picard reorder test fix and parameter changes
affected #: 3 files (1.1 KB)
--- a/test-data/picard_RS_output3.sam Fri May 13 15:23:32 2011 -0400
+++ b/test-data/picard_RS_output3.sam Fri May 13 16:54:31 2011 -0400
@@ -1,26 +1,26 @@
@HD VN:1.0 SO:unsorted
-@SQ SN:phiX1 LN:1120 UR:picard_RS_input4.fasta AS:phiX_buildBlah1.1 M5:40156fecb557ec9a4e0e7d0d5379d346 SP:phiX174
-@SQ SN:phiX2 LN:1190 UR:picard_RS_input4.fasta AS:phiX_buildBlah1.1 M5:3ecdb3921cbd184296cefdc675595fc1 SP:phiX174
-@SQ SN:phiX3 LN:1330 UR:picard_RS_input4.fasta AS:phiX_buildBlah1.1 M5:60435b7625ee8862e4af3e839b195198 SP:phiX174
-@SQ SN:phiX4 LN:910 UR:picard_RS_input4.fasta AS:phiX_buildBlah1.1 M5:ae8509d7b91ed64a44dd718513b1fd06 SP:phiX174
-@SQ SN:phiX5 LN:828 UR:picard_RS_input4.fasta AS:phiX_buildBlah1.1 M5:459c70115963cbce5021cac2bc9dfbd1 SP:phiX174
+@SQ SN:phiX1 LN:1120 UR:dataset_3.dat AS:phiX_buildBlah1.1 M5:40156fecb557ec9a4e0e7d0d5379d346 SP:phiX174
+@SQ SN:phiX2 LN:1190 UR:dataset_3.dat AS:phiX_buildBlah1.1 M5:3ecdb3921cbd184296cefdc675595fc1 SP:phiX174
+@SQ SN:phiX3 LN:1330 UR:dataset_3.dat AS:phiX_buildBlah1.1 M5:60435b7625ee8862e4af3e839b195198 SP:phiX174
+@SQ SN:phiX4 LN:910 UR:dataset_3.dat AS:phiX_buildBlah1.1 M5:ae8509d7b91ed64a44dd718513b1fd06 SP:phiX174
+@SQ SN:phiX5 LN:828 UR:dataset_3.dat AS:phiX_buildBlah1.1 M5:459c70115963cbce5021cac2bc9dfbd1 SP:phiX174
@PG ID:Bowtie VN:0.12.7 CL:"bowtie -q -p 4 -S --phred33-quals /tmp/tmp1E6jpl/tmpDg42o9 dataset_437.dat"
-HWI-EAS91_1_30788AAXX:1:1:1570:620/1 4 * 0 0 * * 0 0 GAGTAACAAAGTAAAGTTTGGACCGTTTTTGTCTCGTGCTCGTCGCTGCG IIIIIII""IIIIIIIIIIIIIBIIIIIIIIIIII"IIIIIII000IIII XM:i:0
-HWI-EAS91_1_30788AAXX:1:1:1572:270/1 0 phiX3 1208 255 50M * 0 0 TGAGATGCTTGCTTATCAACAGAAGGAGTCTACTGCTCGCGTTGCGTCTA IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII"IIIIIII000IIII XA:i:0 MD:Z:50 NM:i:0
-HWI-EAS91_1_30788AAXX:1:1:1572:324/1 4 * 0 0 * * 0 0 AAGGTGCTTAAATTCGTGGGTCCTGAGCTGGCGACCCTGTTTTGTATGGC IIIIIII""IIIIIIIIIIIIIIIIIIII+7I05I"IIIIIII000IIII XM:i:0
+HWI-EAS91_1_30788AAXX:1:1:1761:343/1 0 phiX1 5 255 50M * 0 0 TTTATCGCTTCCATGACGCAGAAGTTAACACTTTCGGATATTTCTGATGA IIIIIII""IIIIIIIIIII?I0IIIIHIIIGIIIII0II?I""IIIIII XA:i:0 MD:Z:50 NM:i:0
HWI-EAS91_1_30788AAXX:1:1:1578:331/1 0 phiX1 209 255 50M * 0 0 TGTCAAAAACTGACGCGTTGGATGAGGAGAAGTGGCTTAATATGCTTGGC IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII"IIIIIII000IIII XA:i:0 MD:Z:50 NM:i:0
+HWI-EAS91_1_30788AAXX:1:1:1647:512/1 0 phiX1 401 255 50M * 0 0 TACTGAACAATCCGTACGTTTCCAGACCGCTTTGGCCTCTATTAAGCTCA IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII"IIIIIII000IIII XA:i:0 MD:Z:50 NM:i:0
+HWI-EAS91_1_30788AAXX:1:1:1599:330/1 0 phiX1 803 255 50M * 0 0 AGAAGAAAACGTGCGTCAAAAATTACGTGCAGAAGGAGTGATGTAATGTC IIIIIII""IIIIIIIIIIIIIIIIIII<III@II"IIIIIII000IIII XA:i:0 MD:Z:30G19 NM:i:1
+HWI-EAS91_1_30788AAXX:1:1:1746:351/1 0 phiX2 98 255 50M * 0 0 CTCATCGTCACGTTTATGGTGAACAGTGGATTAAGTTCATGAAGGATGGT IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII"IIIIIII000IIII XA:i:0 MD:Z:50 NM:i:0
HWI-EAS91_1_30788AAXX:1:1:1582:633/1 0 phiX2 397 255 50M * 0 0 CCGCTTCCTCCTGAGACTGAGCTTTCTCGCCAAATGACGACTTCTACCAC IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII"IIIIIII000IIII XA:i:0 MD:Z:50 NM:i:0
HWI-EAS91_1_30788AAXX:1:1:1598:534/1 0 phiX2 597 255 50M * 0 0 GCGCTCTAATCTCTGGGCATCTGGCTATGATGTTGATGGAACTGACCAAA IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII"IIIIIII000IIII XA:i:0 MD:Z:50 NM:i:0
-HWI-EAS91_1_30788AAXX:1:1:1599:330/1 0 phiX1 803 255 50M * 0 0 AGAAGAAAACGTGCGTCAAAAATTACGTGCAGAAGGAGTGATGTAATGTC IIIIIII""IIIIIIIIIIIIIIIIIII<III@II"IIIIIII000IIII XA:i:0 MD:Z:30G19 NM:i:1
+HWI-EAS91_1_30788AAXX:1:1:1749:466/1 0 phiX2 1081 255 50M * 0 0 TTGCAGTGGAATAGTCAGGTTAAATTTAATGTGACCGTTTATCGCAATCT IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII"IIIIIII000IIII XA:i:0 MD:Z:50 NM:i:0
+HWI-EAS91_1_30788AAXX:1:1:1763:587/1 0 phiX3 191 255 50M * 0 0 AAGCTACATCGTCAACGTTATATTTTGATAGTTTGACGGTTAATGCTGGT IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII"IIIIIII000IIII XA:i:0 MD:Z:50 NM:i:0
HWI-EAS91_1_30788AAXX:1:1:1616:363/1 0 phiX3 408 255 50M * 0 0 TGTTTATCCTTTGAATGGTCGCCATGATGGTGGTTATTATACCGTCAAGG IIIIIII""IIIIIIIIIIIIIIIIIIIIIIDIII"IIIIIII000IIII XA:i:0 MD:Z:50 NM:i:0
+HWI-EAS91_1_30788AAXX:1:1:1768:715/1 0 phiX3 808 255 50M * 0 0 ACCCTGATGAGGCCGCCCCTAGTTTTGTTTCTGGTGCTATGGCTAAAGCT IIIIIII""IIIIIIIIIIIIIDIIIIIIIIIIII"IIIIIII000IIII XA:i:0 MD:Z:50 NM:i:0
+HWI-EAS91_1_30788AAXX:1:1:1572:270/1 0 phiX3 1208 255 50M * 0 0 TGAGATGCTTGCTTATCAACAGAAGGAGTCTACTGCTCGCGTTGCGTCTA IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII"IIIIIII000IIII XA:i:0 MD:Z:50 NM:i:0
+HWI-EAS91_1_30788AAXX:1:1:1785:1272/1 0 phiX4 178 255 50M * 0 0 TATTTTTCATGGTATTGATAAAGCTGTTGCCGATACTTGGAACAATTTCT III""""""IIIIIIIII""FI"IIII""II+ICI"IIIIIII000IIII XA:i:0 MD:Z:50 NM:i:0
+HWI-EAS91_1_30788AAXX:1:1:1673:514/1 0 phiX4 378 255 50M * 0 0 ATTATTTTGACTTTGAGCGTATCGAGGCTCTTAAACCTGCTATTGAGGCT IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIII1"IIIIIII000IIII XA:i:0 MD:Z:50 NM:i:0
+HWI-EAS91_1_30788AAXX:1:1:1634:330/1 0 phiX4 778 255 50M * 0 0 GGATATTCGCGATGAGTATAATTACCCCAAAAAGAAAGGTATTAAGGATG IIIIIII""IIIIIIIIIIIIIIIIIIIIIII8II"IIIIIII000IIII XA:i:0 MD:Z:50 NM:i:0
+HWI-EAS91_1_30788AAXX:1:1:1570:620/1 4 * 0 0 * * 0 0 GAGTAACAAAGTAAAGTTTGGACCGTTTTTGTCTCGTGCTCGTCGCTGCG IIIIIII""IIIIIIIIIIIIIBIIIIIIIIIIII"IIIIIII000IIII XM:i:0
+HWI-EAS91_1_30788AAXX:1:1:1572:324/1 4 * 0 0 * * 0 0 AAGGTGCTTAAATTCGTGGGTCCTGAGCTGGCGACCCTGTTTTGTATGGC IIIIIII""IIIIIIIIIIIIIIIIIIII+7I05I"IIIIIII000IIII XM:i:0
+HWI-EAS91_1_30788AAXX:1:1:1652:270/1 4 * 0 0 * * 0 0 AGCGTAAAGGCGCTCGTCTTTGGTATGTAGGACTTTGCATTGTTTAATTG IIIIIII""IIIIIIIIIIIIIIIIIIIIIII6II"IIIIIII000IIII XM:i:0
HWI-EAS91_1_30788AAXX:1:1:1629:446/1 4 * 0 0 * * 0 0 AGGTTATAACGCCGAAGCGGTAAAAATTTTAATTTTTGCCGCTGAGGGGT IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII"IIIIIII000IIII XM:i:0
-HWI-EAS91_1_30788AAXX:1:1:1634:330/1 0 phiX4 778 255 50M * 0 0 GGATATTCGCGATGAGTATAATTACCCCAAAAAGAAAGGTATTAAGGATG IIIIIII""IIIIIIIIIIIIIIIIIIIIIII8II"IIIIIII000IIII XA:i:0 MD:Z:50 NM:i:0
-HWI-EAS91_1_30788AAXX:1:1:1647:512/1 0 phiX1 401 255 50M * 0 0 TACTGAACAATCCGTACGTTTCCAGACCGCTTTGGCCTCTATTAAGCTCA IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII"IIIIIII000IIII XA:i:0 MD:Z:50 NM:i:0
-HWI-EAS91_1_30788AAXX:1:1:1652:270/1 4 * 0 0 * * 0 0 AGCGTAAAGGCGCTCGTCTTTGGTATGTAGGACTTTGCATTGTTTAATTG IIIIIII""IIIIIIIIIIIIIIIIIIIIIII6II"IIIIIII000IIII XM:i:0
-HWI-EAS91_1_30788AAXX:1:1:1673:514/1 0 phiX4 378 255 50M * 0 0 ATTATTTTGACTTTGAGCGTATCGAGGCTCTTAAACCTGCTATTGAGGCT IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIII1"IIIIIII000IIII XA:i:0 MD:Z:50 NM:i:0
-HWI-EAS91_1_30788AAXX:1:1:1746:351/1 0 phiX2 98 255 50M * 0 0 CTCATCGTCACGTTTATGGTGAACAGTGGATTAAGTTCATGAAGGATGGT IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII"IIIIIII000IIII XA:i:0 MD:Z:50 NM:i:0
-HWI-EAS91_1_30788AAXX:1:1:1749:466/1 0 phiX2 1081 255 50M * 0 0 TTGCAGTGGAATAGTCAGGTTAAATTTAATGTGACCGTTTATCGCAATCT IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII"IIIIIII000IIII XA:i:0 MD:Z:50 NM:i:0
-HWI-EAS91_1_30788AAXX:1:1:1761:343/1 0 phiX1 5 255 50M * 0 0 TTTATCGCTTCCATGACGCAGAAGTTAACACTTTCGGATATTTCTGATGA IIIIIII""IIIIIIIIIII?I0IIIIHIIIGIIIII0II?I""IIIIII XA:i:0 MD:Z:50 NM:i:0
-HWI-EAS91_1_30788AAXX:1:1:1763:587/1 0 phiX3 191 255 50M * 0 0 AAGCTACATCGTCAACGTTATATTTTGATAGTTTGACGGTTAATGCTGGT IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII"IIIIIII000IIII XA:i:0 MD:Z:50 NM:i:0
-HWI-EAS91_1_30788AAXX:1:1:1768:715/1 0 phiX3 808 255 50M * 0 0 ACCCTGATGAGGCCGCCCCTAGTTTTGTTTCTGGTGCTATGGCTAAAGCT IIIIIII""IIIIIIIIIIIIIDIIIIIIIIIIII"IIIIIII000IIII XA:i:0 MD:Z:50 NM:i:0
-HWI-EAS91_1_30788AAXX:1:1:1785:1272/1 0 phiX4 178 255 50M * 0 0 TATTTTTCATGGTATTGATAAAGCTGTTGCCGATACTTGGAACAATTTCT III""""""IIIIIIIII""FI"IIII""II+ICI"IIIIIII000IIII XA:i:0 MD:Z:50 NM:i:0
--- a/tools/picard/picard_ReorderSam.xml Fri May 13 15:23:32 2011 -0400
+++ b/tools/picard/picard_ReorderSam.xml Fri May 13 16:54:31 2011 -0400
@@ -6,14 +6,14 @@
#if $source.indexSource == "built-in"
--ref="${ filter( lambda x: str( x[0] ) == str( $source.ref ), $__app__.tool_data_tables[ 'picard_indexes' ].get_fields() )[0][-1] }"
#else
- --ref-file=$refFile
+ --ref-file=$source.refFile
--species-name=$source.speciesName
--build-name=$source.buildName
--trunc-names=$source.truncateSeqNames
#end if
--allow-inc-dict-concord=$allowIncDictConcord
--allow-contig-len-discord=$allowContigLenDiscord
- --output-format=$outputFormat
+ --newformat=$outputFormat
--output="$out_file"
-j "${GALAXY_DATA_INDEX_DIR}/shared/jars/ReorderSam.jar"
--picard-cmd="ReorderSam"
--- a/tools/picard/picard_wrapper.py Fri May 13 15:23:32 2011 -0400
+++ b/tools/picard/picard_wrapper.py Fri May 13 16:54:31 2011 -0400
@@ -142,7 +142,6 @@
runme.append('-jar %s' % jar)
runme += cl
s,stdout = self.runCL(cl=runme, output_dir=self.opts.outdir)
- print '##s=',s,'\n##stdout=',stdout
return stdout
def samToBam(self,infile=None,outdir=None):
@@ -214,32 +213,12 @@
res += hres
heads = []
if len(dat) > 0:
- dropRows = len(dat) - maxrows
- n = 0
- if dropRows > 0:
- n = int(maxrows/2)
if transpose and not thist:
tdat = map(None,*dat) # transpose an arbitrary list of lists
- if dropRows > 0:
- dat = tdat[:n]
- dat.append(('<b>...%d rows not shown - see log...</b>',''))
- dat += tdat[-n:]
- else:
- dat = tdat
- tdat = ['<tr class="d%d"><td>%s</td><td>%s </td></tr>\n' % ((i+len(heads)) % 2,x[0],x[1]) for i,x in enumerate(dat)]
- if dropRows > 0:
- tdat.append('<tr><td colspan="2">## WARNING: %d rows deleted..see raw file %s for entire output</td></tr>' % (dropRows,os.path.basename(picout)))
+ tdat = ['<tr class="d%d"><td>%s</td><td>%s </td></tr>\n' % ((i+len(heads)) % 2,x[0],x[1]) for i,x in enumerate(tdat)]
else:
- if dropRows > 0:
- tdat = dat[:n]
- tdat.append(('<b>...%d rows not shown - see log...</b>' % dropRows,''))
- tdat += dat[-n:]
- else:
- tdat = dat
- dat = ['\t'.join(x).strip() for x in tdat] # back to strings :(
- tdat = ['<tr class="d%d"><td colspan="2">%s</td></tr>\n' % ((i+len(heads)) % 2,x) for i,x in enumerate(dat)]
- if dropRows > 0:
- tdat.append('<tr><td>## WARNING: %d rows deleted..see raw file %s for entire output</td></tr>' % (dropRows,os.path.basename(self.metricsOut)))
+ tdat = ['\t'.join(x).strip() for x in dat] # back to strings :(
+ tdat = ['<tr class="d%d"><td colspan="2">%s</td></tr>\n' % ((i+len(heads)) % 2,x) for i,x in enumerate(tdat)]
res += tdat
dat = []
res.append('</table>\n')
@@ -654,10 +633,11 @@
haveTempout = True
elif pic.picname == 'ReorderSam':
+ tmp_fd, tempout = tempfile.mkstemp( dir=opts.tmpdir,prefix='ReOrderTempOut')
# input
cl.append('INPUT=%s' % opts.input)
# output
- cl.append('OUTPUT=%s' % opts.output)
+ cl.append('OUTPUT=%s' % tempout)
# reference
cl.append('REFERENCE=%s' % ref_file_name)
# incomplete dict concordance
@@ -667,6 +647,7 @@
if opts.allow_contig_len_discord == 'true':
cl.append('ALLOW_CONTIG_LENGTH_DISCORDANCE=true')
pic.runPic(opts.jar, cl)
+ haveTempout = True
elif pic.picname == 'ReplaceSamHeader':
tmp_fd, tempout = tempfile.mkstemp( dir=opts.tmpdir,prefix='RSHTempOut')
http://bitbucket.org/galaxy/galaxy-central/changeset/ec0cc878d423/
changeset: r5561:ec0cc878d423
user: fubar
date: 2011-05-13 23:12:19
summary: finally have picard reorder tests working
affected #: 2 files (3.7 KB)
--- a/test-data/picard_RS_output2.sam Fri May 13 16:54:31 2011 -0400
+++ b/test-data/picard_RS_output2.sam Fri May 13 17:12:19 2011 -0400
@@ -1,22 +0,0 @@
-@HD VN:1.0 SO:unsorted
-@SQ SN:phiX174 LN:5386 UR:file:/afs/bx.psu.edu/user/kpvincent/working/phiX.fa M5:f479307bca04825e98008f37e4f6251a
-@PG ID:Bowtie VN:0.12.7 CL:"bowtie -q -p 4 -S --phred33-quals /genome/phiX/bowtie_index/phiX dataset_437.dat"
-HWI-EAS91_1_30788AAXX:1:1:1761:343/1 0 phiX174 5 255 50M * 0 0 TTTATCGCTTCCATGACGCAGAAGTTAACACTTTCGGATATTTCTGATGA IIIIIII""IIIIIIIIIII?I0IIIIHIIIGIIIII0II?I""IIIIII XA:i:0 MD:Z:50 NM:i:0
-HWI-EAS91_1_30788AAXX:1:1:1647:512/1 0 phiX174 401 255 50M * 0 0 TACTGAACAATCCGTACGTTTCCAGACCGCTTTGGCCTCTATTAAGCTCA IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII"IIIIIII000IIII XA:i:0 MD:Z:50 NM:i:0
-HWI-EAS91_1_30788AAXX:1:1:1578:331/1 0 phiX174 209 255 50M * 0 0 TGTCAAAAACTGACGCGTTGGATGAGGAGAAGTGGCTTAATATGCTTGGC IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII"IIIIIII000IIII XA:i:0 MD:Z:50 NM:i:0
-HWI-EAS91_1_30788AAXX:1:1:1746:351/1 0 phiX174 1218 255 50M * 0 0 CTCATCGTCACGTTTATGGTGAACAGTGGATTAAGTTCATGAAGGATGGT IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII"IIIIIII000IIII XA:i:0 MD:Z:50 NM:i:0
-HWI-EAS91_1_30788AAXX:1:1:1582:633/1 0 phiX174 1517 255 50M * 0 0 CCGCTTCCTCCTGAGACTGAGCTTTCTCGCCAAATGACGACTTCTACCAC IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII"IIIIIII000IIII XA:i:0 MD:Z:50 NM:i:0
-HWI-EAS91_1_30788AAXX:1:1:1599:330/1 0 phiX174 803 255 50M * 0 0 AGAAGAAAACGTGCGTCAAAAATTACGTGCAGAAGGAGTGATGTAATGTC IIIIIII""IIIIIIIIIIIIIIIIIII<III@II"IIIIIII000IIII XA:i:0 MD:Z:50 NM:i:0
-HWI-EAS91_1_30788AAXX:1:1:1598:534/1 0 phiX174 1717 255 50M * 0 0 GCGCTCTAATCTCTGGGCATCTGGCTATGATGTTGATGGAACTGACCAAA IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII"IIIIIII000IIII XA:i:0 MD:Z:50 NM:i:0
-HWI-EAS91_1_30788AAXX:1:1:1749:466/1 0 phiX174 2201 255 50M * 0 0 TTGCAGTGGAATAGTCAGGTTAAATTTAATGTGACCGTTTATCGCAATCT IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII"IIIIIII000IIII XA:i:0 MD:Z:50 NM:i:0
-HWI-EAS91_1_30788AAXX:1:1:1570:620/1 4 * 0 0 * * 0 0 GAGTAACAAAGTAAAGTTTGGACCGTTTTTGTCTCGTGCTCGTCGCTGCG IIIIIII""IIIIIIIIIIIIIBIIIIIIIIIIII"IIIIIII000IIII XM:i:0
-HWI-EAS91_1_30788AAXX:1:1:1629:446/1 0 phiX174 2301 255 50M * 0 0 AGGTTATAACGCCGAAGCGGTAAAAATTTTAATTTTTGCCGCTGAGGGGT IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII"IIIIIII000IIII XA:i:0 MD:Z:50 NM:i:0
-HWI-EAS91_1_30788AAXX:1:1:1763:587/1 0 phiX174 2501 255 50M * 0 0 AAGCTACATCGTCAACGTTATATTTTGATAGTTTGACGGTTAATGCTGGT IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII"IIIIIII000IIII XA:i:0 MD:Z:50 NM:i:0
-HWI-EAS91_1_30788AAXX:1:1:1616:363/1 0 phiX174 2718 255 50M * 0 0 TGTTTATCCTTTGAATGGTCGCCATGATGGTGGTTATTATACCGTCAAGG IIIIIII""IIIIIIIIIIIIIIIIIIIIIIDIII"IIIIIII000IIII XA:i:0 MD:Z:50 NM:i:0
-HWI-EAS91_1_30788AAXX:1:1:1572:270/1 0 phiX174 3518 255 50M * 0 0 TGAGATGCTTGCTTATCAACAGAAGGAGTCTACTGCTCGCGTTGCGTCTA IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII"IIIIIII000IIII XA:i:0 MD:Z:50 NM:i:0
-HWI-EAS91_1_30788AAXX:1:1:1768:715/1 0 phiX174 3118 255 50M * 0 0 ACCCTGATGAGGCCGCCCCTAGTTTTGTTTCTGGTGCTATGGCTAAAGCT IIIIIII""IIIIIIIIIIIIIDIIIIIIIIIIII"IIIIIII000IIII XA:i:0 MD:Z:50 NM:i:0
-HWI-EAS91_1_30788AAXX:1:1:1785:1272/1 0 phiX174 3818 255 50M * 0 0 TATTTTTCATGGTATTGATAAAGCTGTTGCCGATACTTGGAACAATTTCT III""""""IIIIIIIII""FI"IIII""II+ICI"IIIIIII000IIII XA:i:0 MD:Z:50 NM:i:0
-HWI-EAS91_1_30788AAXX:1:1:1673:514/1 0 phiX174 4018 255 50M * 0 0 ATTATTTTGACTTTGAGCGTATCGAGGCTCTTAAACCTGCTATTGAGGCT IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIII1"IIIIIII000IIII XA:i:0 MD:Z:50 NM:i:0
-HWI-EAS91_1_30788AAXX:1:1:1652:270/1 4 * 0 0 * * 0 0 AGCGTAAAGGCGCTCGTCTTTGGTATGTAGGACTTTGCATTGTTTAATTG IIIIIII""IIIIIIIIIIIIIIIIIIIIIII6II"IIIIIII000IIII XM:i:0
-HWI-EAS91_1_30788AAXX:1:1:1572:324/1 4 * 0 0 * * 0 0 AAGGTGCTTAAATTCGTGGGTCCTGAGCTGGCGACCCTGTTTTGTATGGC IIIIIII""IIIIIIIIIIIIIIIIIIII+7I05I"IIIIIII000IIII XM:i:0
-HWI-EAS91_1_30788AAXX:1:1:1634:330/1 0 phiX174 4418 255 50M * 0 0 GGATATTCGCGATGAGTATAATTACCCCAAAAAGAAAGGTATTAAGGATG IIIIIII""IIIIIIIIIIIIIIIIIIIIIII8II"IIIIIII000IIII XA:i:0 MD:Z:50 NM:i:0
--- a/test-data/picard_RS_output3.sam Fri May 13 16:54:31 2011 -0400
+++ b/test-data/picard_RS_output3.sam Fri May 13 17:12:19 2011 -0400
@@ -1,9 +1,9 @@
@HD VN:1.0 SO:unsorted
-@SQ SN:phiX1 LN:1120 UR:dataset_3.dat AS:phiX_buildBlah1.1 M5:40156fecb557ec9a4e0e7d0d5379d346 SP:phiX174
-@SQ SN:phiX2 LN:1190 UR:dataset_3.dat AS:phiX_buildBlah1.1 M5:3ecdb3921cbd184296cefdc675595fc1 SP:phiX174
-@SQ SN:phiX3 LN:1330 UR:dataset_3.dat AS:phiX_buildBlah1.1 M5:60435b7625ee8862e4af3e839b195198 SP:phiX174
-@SQ SN:phiX4 LN:910 UR:dataset_3.dat AS:phiX_buildBlah1.1 M5:ae8509d7b91ed64a44dd718513b1fd06 SP:phiX174
-@SQ SN:phiX5 LN:828 UR:dataset_3.dat AS:phiX_buildBlah1.1 M5:459c70115963cbce5021cac2bc9dfbd1 SP:phiX174
+@SQ SN:phiX1 LN:1120 UR:dataset_5.dat AS:phiX_buildBlah1.1 M5:40156fecb557ec9a4e0e7d0d5379d346 SP:phiX174
+@SQ SN:phiX2 LN:1190 UR:dataset_5.dat AS:phiX_buildBlah1.1 M5:3ecdb3921cbd184296cefdc675595fc1 SP:phiX174
+@SQ SN:phiX3 LN:1330 UR:dataset_5.dat AS:phiX_buildBlah1.1 M5:60435b7625ee8862e4af3e839b195198 SP:phiX174
+@SQ SN:phiX4 LN:910 UR:dataset_5.dat AS:phiX_buildBlah1.1 M5:ae8509d7b91ed64a44dd718513b1fd06 SP:phiX174
+@SQ SN:phiX5 LN:828 UR:dataset_5.dat AS:phiX_buildBlah1.1 M5:459c70115963cbce5021cac2bc9dfbd1 SP:phiX174
@PG ID:Bowtie VN:0.12.7 CL:"bowtie -q -p 4 -S --phred33-quals /tmp/tmp1E6jpl/tmpDg42o9 dataset_437.dat"
HWI-EAS91_1_30788AAXX:1:1:1761:343/1 0 phiX1 5 255 50M * 0 0 TTTATCGCTTCCATGACGCAGAAGTTAACACTTTCGGATATTTCTGATGA IIIIIII""IIIIIIIIIII?I0IIIIHIIIGIIIII0II?I""IIIIII XA:i:0 MD:Z:50 NM:i:0
HWI-EAS91_1_30788AAXX:1:1:1578:331/1 0 phiX1 209 255 50M * 0 0 TGTCAAAAACTGACGCGTTGGATGAGGAGAAGTGGCTTAATATGCTTGGC IIIIIII""IIIIIIIIIIIIIIIIIIIIIIIIII"IIIIIII000IIII XA:i:0 MD:Z:50 NM:i:0
http://bitbucket.org/galaxy/galaxy-central/changeset/a4a9c884b805/
changeset: r5562:a4a9c884b805
user: fubar
date: 2011-05-13 23:12:44
summary: branch merge
affected #: 2 files (67 bytes)
--- a/lib/galaxy/visualization/tracks/data_providers.py Fri May 13 17:12:19 2011 -0400
+++ b/lib/galaxy/visualization/tracks/data_providers.py Fri May 13 17:12:44 2011 -0400
@@ -332,10 +332,11 @@
# The first zoom level for BBI files is 640. If too much is requested, it will look at each block instead
# of summaries. The calculation done is: zoom <> (end-start)/num_points/2.
# Thus, the optimal number of points is (end-start)/num_points/2 = 640
- # num_points = (end-start) / 1280
+ # num_points = (end-start) / 1280
num_points = (end-start) / 1280
- if (end - start) < num_points:
+ if num_points < 1:
num_points = end - start
+ num_points = max(num_points, 10)
data = bbi.query(chrom, start, end, num_points)
f.close()
--- a/static/scripts/trackster.js Fri May 13 17:12:19 2011 -0400
+++ b/static/scripts/trackster.js Fri May 13 17:12:44 2011 -0400
@@ -181,6 +181,7 @@
// Other constants.
DENSITY = 200,
+ RESOLUTION = 5,
FEATURE_LEVELS = 10,
DEFAULT_DATA_QUERY_WAIT = 5000,
// Maximum number of chromosomes that are selectable at any one time.
@@ -762,7 +763,7 @@
this.high = Math.ceil(high);
// 10^log10(range / DENSITY) Close approximation for browser window, assuming DENSITY = window width
- this.resolution = Math.pow( 10, Math.ceil( Math.log( (this.high - this.low) / DENSITY ) / Math.LN10 ) );
+ this.resolution = Math.pow( RESOLUTION, Math.ceil( Math.log( (this.high - this.low) / DENSITY ) / Math.log(RESOLUTION) ) );
this.zoom_res = Math.pow( FEATURE_LEVELS, Math.max(0,Math.ceil( Math.log( this.resolution, FEATURE_LEVELS ) / Math.log(FEATURE_LEVELS) )));
// Overview
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0

commit/galaxy-central: kanwei: trackster: tweak resolution, fix LineTrack data bug
by Bitbucket 13 May '11
by Bitbucket 13 May '11
13 May '11
1 new changeset in galaxy-central:
http://bitbucket.org/galaxy/galaxy-central/changeset/c0e7ba8bfd57/
changeset: r5558:c0e7ba8bfd57
user: kanwei
date: 2011-05-13 22:49:43
summary: trackster: tweak resolution, fix LineTrack data bug
affected #: 2 files (67 bytes)
--- a/lib/galaxy/visualization/tracks/data_providers.py Fri May 13 10:02:28 2011 -0400
+++ b/lib/galaxy/visualization/tracks/data_providers.py Fri May 13 16:49:43 2011 -0400
@@ -332,10 +332,11 @@
# The first zoom level for BBI files is 640. If too much is requested, it will look at each block instead
# of summaries. The calculation done is: zoom <> (end-start)/num_points/2.
# Thus, the optimal number of points is (end-start)/num_points/2 = 640
- # num_points = (end-start) / 1280
+ # num_points = (end-start) / 1280
num_points = (end-start) / 1280
- if (end - start) < num_points:
+ if num_points < 1:
num_points = end - start
+ num_points = max(num_points, 10)
data = bbi.query(chrom, start, end, num_points)
f.close()
--- a/static/scripts/trackster.js Fri May 13 10:02:28 2011 -0400
+++ b/static/scripts/trackster.js Fri May 13 16:49:43 2011 -0400
@@ -181,6 +181,7 @@
// Other constants.
DENSITY = 200,
+ RESOLUTION = 5,
FEATURE_LEVELS = 10,
DEFAULT_DATA_QUERY_WAIT = 5000,
// Maximum number of chromosomes that are selectable at any one time.
@@ -762,7 +763,7 @@
this.high = Math.ceil(high);
// 10^log10(range / DENSITY) Close approximation for browser window, assuming DENSITY = window width
- this.resolution = Math.pow( 10, Math.ceil( Math.log( (this.high - this.low) / DENSITY ) / Math.LN10 ) );
+ this.resolution = Math.pow( RESOLUTION, Math.ceil( Math.log( (this.high - this.low) / DENSITY ) / Math.log(RESOLUTION) ) );
this.zoom_res = Math.pow( FEATURE_LEVELS, Math.max(0,Math.ceil( Math.log( this.resolution, FEATURE_LEVELS ) / Math.log(FEATURE_LEVELS) )));
// Overview
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0
5 new changesets in galaxy-central:
http://bitbucket.org/galaxy/galaxy-central/changeset/7c3d155fae75/
changeset: r5552:7c3d155fae75
user: fubar
date: 2011-05-12 15:56:01
summary: Picard wrapper modified to use python logging module for all logging
affected #: 2 files (419 bytes)
--- a/test-data/picard_output_alignment_summary_metrics.html Wed May 11 16:02:06 2011 -0400
+++ b/test-data/picard_output_alignment_summary_metrics.html Thu May 12 09:56:01 2011 -0400
@@ -6,54 +6,56 @@
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Galaxy CollectAlignmentSummaryMetrics tool output - see http://getgalaxy.org/" />
+<meta name="generator" content="Galaxy picard_wrapper tool output - see http://getgalaxy.org/" /><title></title><link rel="stylesheet" href="/static/style/base.css" type="text/css" /></head><body><div class="document">
-Galaxy tool wrapper picard_wrapper at 09/05/2011 11:03:41</b><br/><b>The following output files were created (click the filename to view/download a copy):</b><hr/><table>
+Galaxy tool CollectAlignmentSummaryMetrics run at 11/05/2011 23:16:24</b><br/><b>The following output files were created (click the filename to view/download a copy):</b><hr/><table><tr><td><a href="CollectAlignmentSummaryMetrics.log">CollectAlignmentSummaryMetrics.log</a></td></tr><tr><td><a href="CollectAlignmentSummaryMetrics.metrics.txt">CollectAlignmentSummaryMetrics.metrics.txt</a></td></tr></table><p/>
-<b>Picard on line resources:</b><ul>
+<b>Picard on line resources</b><ul><li><a href="http://picard.sourceforge.net/index.shtml">Click here for Picard Documentation</a></li><li><a href="http://picard.sourceforge.net/picard-metric-definitions.shtml">Click here for Picard Metrics definitions</a></li></ul><hr/><b>Picard output (transposed to make it easier to see)</b><hr/><table cellpadding="3" >
-<tr class="d0"><td>## net.sf.picard.metrics.StringHeader</td></tr><tr class="d1"><td># net.sf.picard.analysis.CollectAlignmentSummaryMetrics MAX_INSERT_SIZE=100000 ADAPTER_SEQUENCE=[AATGATACGGCGACCACCGAGATCTACACTCTTTCCCTACACGACGCTCTTCCGATCT, AGATCGGAAGAGCTCGTATGCCGTCTTCTGCTTG, AATGATACGGCGACCACCGAGATCTACACTCTTTCCCTACACGACGCTCTTCCGATCT, AGATCGGAAGAGCGGTTCAGCAGGAATGCCGAGACCGATCTCGTATGCCGTCTTCTGCTTG, AATGATACGGCGACCACCGAGATCTACACTCTTTCCCTACACGACGCTCTTCCGATCT, AGATCGGAAGAGCACACGTCTGAACTCCAGTCACNNNNNNNNATCTCGTATGCCGTCTTCTGCTTG, IS_BISULFITE_SEQUENCED=false] INPUT=/export/tmp/tmpBrCiH5/database/files/000/dataset_2.dat OUTPUT=/udd/rerla/galaxy-central/database/job_working_directory/3/dataset_3_files/CollectAlignmentSummaryMetrics.metrics.txt REFERENCE_SEQUENCE=/udd/rerla/galaxy-central/database/job_working_directory/3/dataset_3_files/CollectAlignmentSummaryMetricsDXFFCP.fasta_fake.fasta ASSUME_SORTED=true TMP_DIR=/tmp VALIDATION_STRINGENCY=LENIENT IS_BISULFITE_SEQUENCED=false STOP_AFTER=0 VERBOSITY=INFO QUIET=false COMPRESSION_LEVEL=5 MAX_RECORDS_IN_RAM=500000 CREATE_INDEX=false CREATE_MD5_FILE=false</td></tr><tr class="d0"><td>## net.sf.picard.metrics.StringHeader</td></tr><tr class="d1"><td># Started on: Mon May 09 11:03:41 EDT 2011</td></tr><tr class="d0"><td>## METRICS CLASS net.sf.picard.analysis.AlignmentSummaryMetrics</td></tr><tr class="d0"><td>CATEGORY</td><td>FIRST_OF_PAIR</td></tr>
-<tr class="d1"><td>TOTAL_READS</td><td>4</td></tr>
-<tr class="d0"><td>PF_READS</td><td>4</td></tr>
-<tr class="d1"><td>PCT_PF_READS</td><td>1</td></tr>
-<tr class="d0"><td>PF_NOISE_READS</td><td>0</td></tr>
-<tr class="d1"><td>PF_READS_ALIGNED</td><td>4</td></tr>
-<tr class="d0"><td>PCT_PF_READS_ALIGNED</td><td>1</td></tr>
-<tr class="d1"><td>PF_HQ_ALIGNED_READS</td><td>4</td></tr>
-<tr class="d0"><td>PF_HQ_ALIGNED_BASES</td><td>404</td></tr>
-<tr class="d1"><td>PF_HQ_ALIGNED_Q20_BASES</td><td>28</td></tr>
-<tr class="d0"><td>PF_HQ_MEDIAN_MISMATCHES</td><td>78</td></tr>
-<tr class="d1"><td>PF_HQ_ERROR_RATE</td><td>0.777228</td></tr>
-<tr class="d0"><td>MEAN_READ_LENGTH</td><td>101</td></tr>
-<tr class="d1"><td>READS_ALIGNED_IN_PAIRS</td><td>3</td></tr>
-<tr class="d0"><td>PCT_READS_ALIGNED_IN_PAIRS</td><td>0.75</td></tr>
-<tr class="d1"><td>BAD_CYCLES</td><td>63</td></tr>
-<tr class="d0"><td>STRAND_BALANCE</td><td>0.25</td></tr>
-<tr class="d1"><td>PCT_CHIMERAS</td><td>0</td></tr>
+<tr class="d0"><td colspan="2">## net.sf.picard.metrics.StringHeader</td></tr><tr class="d1"><td colspan="2"># net.sf.picard.analysis.CollectAlignmentSummaryMetrics MAX_INSERT_SIZE=100000 ADAPTER_SEQUENCE=[AATGATACGGCGACCACCGAGATCTACACTCTTTCCCTACACGACGCTCTTCCGATCT, AGATCGGAAGAGCTCGTATGCCGTCTTCTGCTTG, AATGATACGGCGACCACCGAGATCTACACTCTTTCCCTACACGACGCTCTTCCGATCT, AGATCGGAAGAGCGGTTCAGCAGGAATGCCGAGACCGATCTCGTATGCCGTCTTCTGCTTG, AATGATACGGCGACCACCGAGATCTACACTCTTTCCCTACACGACGCTCTTCCGATCT, AGATCGGAAGAGCACACGTCTGAACTCCAGTCACNNNNNNNNATCTCGTATGCCGTCTTCTGCTTG, IS_BISULFITE_SEQUENCED=false] INPUT=/export/tmp/tmp1-mt_l/database/files/000/dataset_2.dat OUTPUT=/udd/rerla/galaxy-central/database/job_working_directory/3/dataset_3_files/CollectAlignmentSummaryMetrics.metrics.txt REFERENCE_SEQUENCE=/udd/rerla/galaxy-central/database/job_working_directory/3/dataset_3_files/CollectAlignmentSummaryMetricsZJS8q6.fasta_fake.fasta ASSUME_SORTED=true TMP_DIR=/tmp VALIDATION_STRINGENCY=LENIENT IS_BISULFITE_SEQUENCED=false STOP_AFTER=0 VERBOSITY=INFO QUIET=false COMPRESSION_LEVEL=5 MAX_RECORDS_IN_RAM=500000 CREATE_INDEX=false CREATE_MD5_FILE=false</td></tr><tr class="d0"><td colspan="2">## net.sf.picard.metrics.StringHeader</td></tr><tr class="d1"><td colspan="2"># Started on: Wed May 11 23:16:24 EDT 2011</td></tr><tr class="d0"><td colspan="2">## METRICS CLASS net.sf.picard.analysis.AlignmentSummaryMetrics</td></tr><tr class="d0"><td>CATEGORY</td><td>FIRST_OF_PAIR </td></tr>
+<tr class="d1"><td>TOTAL_READS</td><td>4 </td></tr>
+<tr class="d0"><td>PF_READS</td><td>4 </td></tr>
+<tr class="d1"><td>PCT_PF_READS</td><td>1 </td></tr>
+<tr class="d0"><td>PF_NOISE_READS</td><td>0 </td></tr>
+<tr class="d1"><td>PF_READS_ALIGNED</td><td>4 </td></tr>
+<tr class="d0"><td>PCT_PF_READS_ALIGNED</td><td>1 </td></tr>
+<tr class="d1"><td>PF_HQ_ALIGNED_READS</td><td>4 </td></tr>
+<tr class="d0"><td>PF_HQ_ALIGNED_BASES</td><td>404 </td></tr>
+<tr class="d1"><td>PF_HQ_ALIGNED_Q20_BASES</td><td>28 </td></tr>
+<tr class="d0"><td>PF_HQ_MEDIAN_MISMATCHES</td><td>78 </td></tr>
+<tr class="d1"><td>PF_HQ_ERROR_RATE</td><td>0.777228 </td></tr>
+<tr class="d0"><td>MEAN_READ_LENGTH</td><td>101 </td></tr>
+<tr class="d1"><td>READS_ALIGNED_IN_PAIRS</td><td>3 </td></tr>
+<tr class="d0"><td>PCT_READS_ALIGNED_IN_PAIRS</td><td>0.75 </td></tr>
+<tr class="d1"><td>BAD_CYCLES</td><td>63 </td></tr>
+<tr class="d0"><td>STRAND_BALANCE</td><td>0.25 </td></tr>
+<tr class="d1"><td>PCT_CHIMERAS</td><td>0 </td></tr><tr class="d0"><td>PCT_ADAPTER
</td><td>0
-</td></tr>
+ </td></tr></table>
-<b>Picard log</b><hr/>
-<pre>## executing java -Xmx2g -jar /udd/rerla/galaxy-central/tool-data/shared/jars/CreateSequenceDictionary.jar REFERENCE=/tmp/CollectAlignmentSummaryMetricsDXFFCP.fasta OUTPUT=/tmp/CollectAlignmentSummaryMetricsDXFFCP.dict URI=dataset_1.dat TRUNCATE_NAMES_AT_WHITESPACE=None returned status 0 and stderr:
-[Mon May 09 11:03:40 EDT 2011] net.sf.picard.sam.CreateSequenceDictionary REFERENCE=/tmp/CollectAlignmentSummaryMetricsDXFFCP.fasta OUTPUT=/tmp/CollectAlignmentSummaryMetricsDXFFCP.dict URI=dataset_1.dat TRUNCATE_NAMES_AT_WHITESPACE=false NUM_SEQUENCES=2147483647 TMP_DIR=/tmp/rerla VERBOSITY=INFO QUIET=false VALIDATION_STRINGENCY=STRICT COMPRESSION_LEVEL=5 MAX_RECORDS_IN_RAM=500000 CREATE_INDEX=false CREATE_MD5_FILE=false
-[Mon May 09 11:03:40 EDT 2011] net.sf.picard.sam.CreateSequenceDictionary done.
+<b>Picard Tool Run Log</b><hr/>
+<pre>Wed, 11 May 2011 23:16:24 INFO
+ ## executing java -Xmx2g -jar /udd/rerla/galaxy-central/tool-data/shared/jars/CreateSequenceDictionary.jar REFERENCE=/tmp/CollectAlignmentSummaryMetricsZJS8q6.fasta OUTPUT=/tmp/CollectAlignmentSummaryMetricsZJS8q6.dict URI=dataset_1.dat TRUNCATE_NAMES_AT_WHITESPACE=None returned status 0 and stderr:
+[Wed May 11 23:16:24 EDT 2011] net.sf.picard.sam.CreateSequenceDictionary REFERENCE=/tmp/CollectAlignmentSummaryMetricsZJS8q6.fasta OUTPUT=/tmp/CollectAlignmentSummaryMetricsZJS8q6.dict URI=dataset_1.dat TRUNCATE_NAMES_AT_WHITESPACE=false NUM_SEQUENCES=2147483647 TMP_DIR=/tmp/rerla VERBOSITY=INFO QUIET=false VALIDATION_STRINGENCY=STRICT COMPRESSION_LEVEL=5 MAX_RECORDS_IN_RAM=500000 CREATE_INDEX=false CREATE_MD5_FILE=false
+[Wed May 11 23:16:24 EDT 2011] net.sf.picard.sam.CreateSequenceDictionary done.
Runtime.totalMemory()=9109504
-## executing java -Xmx2g -jar /udd/rerla/galaxy-central/tool-data/shared/jars/CollectAlignmentSummaryMetrics.jar VALIDATION_STRINGENCY=LENIENT ASSUME_SORTED=true ADAPTER_SEQUENCE= IS_BISULFITE_SEQUENCED=false MAX_INSERT_SIZE=100000 OUTPUT=/udd/rerla/galaxy-central/database/job_working_directory/3/dataset_3_files/CollectAlignmentSummaryMetrics.metrics.txt R=/udd/rerla/galaxy-central/database/job_working_directory/3/dataset_3_files/CollectAlignmentSummaryMetricsDXFFCP.fasta_fake.fasta TMP_DIR=/tmp INPUT=/export/tmp/tmpBrCiH5/database/files/000/dataset_2.dat returned status 0 and stderr:
-[Mon May 09 11:03:41 EDT 2011] net.sf.picard.analysis.CollectAlignmentSummaryMetrics MAX_INSERT_SIZE=100000 ADAPTER_SEQUENCE=[AATGATACGGCGACCACCGAGATCTACACTCTTTCCCTACACGACGCTCTTCCGATCT, AGATCGGAAGAGCTCGTATGCCGTCTTCTGCTTG, AATGATACGGCGACCACCGAGATCTACACTCTTTCCCTACACGACGCTCTTCCGATCT, AGATCGGAAGAGCGGTTCAGCAGGAATGCCGAGACCGATCTCGTATGCCGTCTTCTGCTTG, AATGATACGGCGACCACCGAGATCTACACTCTTTCCCTACACGACGCTCTTCCGATCT, AGATCGGAAGAGCACACGTCTGAACTCCAGTCACNNNNNNNNATCTCGTATGCCGTCTTCTGCTTG, IS_BISULFITE_SEQUENCED=false] INPUT=/export/tmp/tmpBrCiH5/database/files/000/dataset_2.dat OUTPUT=/udd/rerla/galaxy-central/database/job_working_directory/3/dataset_3_files/CollectAlignmentSummaryMetrics.metrics.txt REFERENCE_SEQUENCE=/udd/rerla/galaxy-central/database/job_working_directory/3/dataset_3_files/CollectAlignmentSummaryMetricsDXFFCP.fasta_fake.fasta ASSUME_SORTED=true TMP_DIR=/tmp VALIDATION_STRINGENCY=LENIENT IS_BISULFITE_SEQUENCED=false STOP_AFTER=0 VERBOSITY=INFO QUIET=false COMPRESSION_LEVEL=5 MAX_RECORDS_IN_RAM=500000 CREATE_INDEX=false CREATE_MD5_FILE=false
-WARNING 2011-05-09 11:03:41 SinglePassSamProgram File reports sort order 'queryname', assuming it's coordinate sorted anyway.
-[Mon May 09 11:03:41 EDT 2011] net.sf.picard.analysis.CollectAlignmentSummaryMetrics done.
+Wed, 11 May 2011 23:16:24 INFO
+ ## executing java -Xmx2g -jar /udd/rerla/galaxy-central/tool-data/shared/jars/CollectAlignmentSummaryMetrics.jar VALIDATION_STRINGENCY=LENIENT ASSUME_SORTED=true ADAPTER_SEQUENCE= IS_BISULFITE_SEQUENCED=false MAX_INSERT_SIZE=100000 OUTPUT=/udd/rerla/galaxy-central/database/job_working_directory/3/dataset_3_files/CollectAlignmentSummaryMetrics.metrics.txt R=/udd/rerla/galaxy-central/database/job_working_directory/3/dataset_3_files/CollectAlignmentSummaryMetricsZJS8q6.fasta_fake.fasta TMP_DIR=/tmp INPUT=/export/tmp/tmp1-mt_l/database/files/000/dataset_2.dat returned status 0 and stderr:
+[Wed May 11 23:16:24 EDT 2011] net.sf.picard.analysis.CollectAlignmentSummaryMetrics MAX_INSERT_SIZE=100000 ADAPTER_SEQUENCE=[AATGATACGGCGACCACCGAGATCTACACTCTTTCCCTACACGACGCTCTTCCGATCT, AGATCGGAAGAGCTCGTATGCCGTCTTCTGCTTG, AATGATACGGCGACCACCGAGATCTACACTCTTTCCCTACACGACGCTCTTCCGATCT, AGATCGGAAGAGCGGTTCAGCAGGAATGCCGAGACCGATCTCGTATGCCGTCTTCTGCTTG, AATGATACGGCGACCACCGAGATCTACACTCTTTCCCTACACGACGCTCTTCCGATCT, AGATCGGAAGAGCACACGTCTGAACTCCAGTCACNNNNNNNNATCTCGTATGCCGTCTTCTGCTTG, IS_BISULFITE_SEQUENCED=false] INPUT=/export/tmp/tmp1-mt_l/database/files/000/dataset_2.dat OUTPUT=/udd/rerla/galaxy-central/database/job_working_directory/3/dataset_3_files/CollectAlignmentSummaryMetrics.metrics.txt REFERENCE_SEQUENCE=/udd/rerla/galaxy-central/database/job_working_directory/3/dataset_3_files/CollectAlignmentSummaryMetricsZJS8q6.fasta_fake.fasta ASSUME_SORTED=true TMP_DIR=/tmp VALIDATION_STRINGENCY=LENIENT IS_BISULFITE_SEQUENCED=false STOP_AFTER=0 VERBOSITY=INFO QUIET=false COMPRESSION_LEVEL=5 MAX_RECORDS_IN_RAM=500000 CREATE_INDEX=false CREATE_MD5_FILE=false
+WARNING 2011-05-11 23:16:24 SinglePassSamProgram File reports sort order 'queryname', assuming it's coordinate sorted anyway.
+[Wed May 11 23:16:24 EDT 2011] net.sf.picard.analysis.CollectAlignmentSummaryMetrics done.
Runtime.totalMemory()=9109504
--- a/tools/picard/picard_wrapper.py Wed May 11 16:02:06 2011 -0400
+++ b/tools/picard/picard_wrapper.py Thu May 12 09:56:01 2011 -0400
@@ -8,7 +8,7 @@
see http://www.gnu.org/copyleft/lesser.html
"""
-import optparse, os, sys, subprocess, tempfile, shutil, time
+import optparse, os, sys, subprocess, tempfile, shutil, time, logging
galhtmlprefix = """<?xml version="1.0" encoding="utf-8" ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
@@ -22,7 +22,7 @@
<body><div class="document">
"""
-galhtmlattr = """Galaxy tool wrapper %s at %s</b><br/>"""
+galhtmlattr = """Galaxy tool %s run at %s</b><br/>"""
galhtmlpostfix = """</div></body></html>\n"""
@@ -68,12 +68,24 @@
os.makedirs(opts.tmpdir)
except:
pass
- self.log_filename = os.path.join(opts.outdir,'%s.log' % self.picname)
+ self.log_filename = os.path.join(self.opts.outdir,'%s.log' % self.picname)
self.metricsOut = os.path.join(opts.outdir,'%s.metrics.txt' % self.picname)
+ self.setLogging(logfname=self.log_filename)
def baseName(self,name=None):
return os.path.splitext(os.path.basename(name))[0]
+ def setLogging(self,logfname="picard_wrapper.log"):
+ """setup a logger
+ """
+ today=timenow()
+ logging.basicConfig(level=logging.INFO,
+ format='%(asctime)s %(levelname)s\n %(message)s',
+ datefmt='%a, %d %b %Y %H:%M:%S',
+ filename=logfname,
+ filemode='a')
+
+
def readLarge(self,fname=None):
""" read a potentially huge file..
"""
@@ -120,6 +132,7 @@
s = '## executing %s returned status %d and stderr: \n%s\n' % (cl,rval,stderrs)
else:
s = '## executing %s returned status %d and nothing on stderr\n' % (cl,rval)
+ logging.info(s)
os.unlink(templog) # always
os.unlink(temperr) # always
return s, stdouts # sometimes this is an output
@@ -132,10 +145,6 @@
runme.append('-jar %s' % jar)
runme += cl
s,stdout = self.runCL(cl=runme, output_dir=self.opts.outdir)
- lf = open(self.log_filename,'a')
- lf.write(s)
- lf.write('\n')
- lf.close()
return stdout
def samToBam(self,infile=None,outdir=None):
@@ -180,7 +189,7 @@
except:
r = []
if len(r) > 0:
- res.append('<b>Picard on line resources:</b><ul>\n')
+ res.append('<b>Picard on line resources</b><ul>\n')
res.append('<li><a href="http://picard.sourceforge.net/index.shtml">Click here for Picard Documentation</a></li>\n')
res.append('<li><a href="http://picard.sourceforge.net/picard-metric-definitions.shtml">Click here for Picard Metrics definitions</a></li></ul><hr/>\n')
if transpose:
@@ -204,20 +213,20 @@
thist = True
if row.strip() == '' or i == lastr: # last line or blank means write a segment
if len(heads) > 0:
- hres = ['<tr class="d%d"><td>%s</td></tr>' % (i % 2,x) for i,x in enumerate(heads)]
+ hres = ['<tr class="d%d"><td colspan="2">%s</td></tr>' % (i % 2,x) for i,x in enumerate(heads)]
res += hres
heads = []
if len(dat) > 0:
if transpose and not thist:
tdat = map(None,*dat) # transpose an arbitrary list of lists
- tdat = ['<tr class="d%d"><td>%s</td><td>%s</td></tr>\n' % ((i+len(heads)) % 2,x[0],x[1]) for i,x in enumerate(tdat) if i < maxrows]
+ tdat = ['<tr class="d%d"><td>%s</td><td>%s </td></tr>\n' % ((i+len(heads)) % 2,x[0],x[1]) for i,x in enumerate(tdat) if i < maxrows]
missing = len(tdat) - maxrows
if missing > 0:
tdat.append('<tr><td colspan="2">...WARNING: %d rows deleted..see raw file %s for entire output</td></tr>' % (missing,os.path.basename(picout)))
else:
if thist or not transpose:
dat = ['\t'.join(x).strip() for x in dat] # back to strings :(
- tdat = ['<tr class="d%d"><td>%s</td></tr>\n' % ((i+len(heads)) % 2,x) for i,x in enumerate(dat) if i < maxrows]
+ tdat = ['<tr class="d%d"><td colspan="2">%s</td></tr>\n' % ((i+len(heads)) % 2,x) for i,x in enumerate(dat) if i < maxrows]
missing = len(tdat) - maxrows
if missing > 0:
tdat.append('<tr><td>...WARNING: %d rows deleted..see raw file %s for entire output</td></tr>' % (missing,os.path.basename(self.metricsOut)))
@@ -231,14 +240,15 @@
picard produces long hard to read tab header files
make them available but present them transposed for readability
"""
+ logging.shutdown()
self.cleanup() # remove temp files stored in delme
rstyle="""<style type="text/css">
tr.d0 td {background-color: oldlace; color: black;}
tr.d1 td {background-color: aliceblue; color: black;}
</style>"""
res = [rstyle,]
- res.append(galhtmlprefix % self.picname)
- res.append(galhtmlattr % (self.progname,timenow()))
+ res.append(galhtmlprefix % self.progname)
+ res.append(galhtmlattr % (self.picname,timenow()))
flist = [x for x in os.listdir(self.opts.outdir) if not x.startswith('.')]
pdflist = [x for x in flist if os.path.splitext(x)[-1].lower() == '.pdf']
if len(pdflist) > 0: # assumes all pdfs come with thumbnail .jpgs
@@ -260,7 +270,7 @@
l = open(self.log_filename,'r').readlines()
llen = len(l)
if llen > 0:
- res.append('<b>Picard log</b><hr/>\n')
+ res.append('<b>Picard Tool Run Log</b><hr/>\n')
rlog = ['<pre>',]
if llen > maxloglines:
rlog += l[:maxloglines]
@@ -295,9 +305,7 @@
self.runCL(cl=cl,output_dir=self.opts.outdir)
head = open(thead,'r').readlines()
s = '## got %d rows of header\n' % (len(head))
- lf = open(self.log_filename,'a')
- lf.write(s)
- lf.close()
+ logging.info(s)
o = open(outf,'w')
o.write(''.join(head))
o.write(''.join(bed))
@@ -344,10 +352,7 @@
infile.close()
if newsam:
shutil.copy(insam,newsam)
- lf = open(self.log_filename,'a')
- lf.write(info)
- lf.write('\n')
- lf.close()
+ logging.info(info)
@@ -606,13 +611,9 @@
s += 'so please double check that your input data really is paired-end NGS data.<br/>\n'
s += 'If your input was paired data this may be a bug worth reporting to the galaxy-bugs list\n<br/>'
stdouts = ''
- lf = open(pic.log_filename,'a')
- lf.write(s)
- lf.write('\n')
+ logging.info(s)
if len(stdouts) > 0:
- lf.write(stdouts)
- lf.write('\n')
- lf.close()
+ logging.info(stdouts)
elif pic.picname == 'MarkDuplicates':
# assume sorted even if header says otherwise
http://bitbucket.org/galaxy/galaxy-central/changeset/60ce33ea8e41/
changeset: r5553:60ce33ea8e41
user: fubar
date: 2011-05-12 22:48:31
summary: update some test outputs for picard
affected #: 2 files (212 bytes)
--- a/test-data/picard_BIS_output1.txt Thu May 12 09:56:01 2011 -0400
+++ b/test-data/picard_BIS_output1.txt Thu May 12 16:48:31 2011 -0400
@@ -6,30 +6,31 @@
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Galaxy BamIndexStats tool output - see http://getgalaxy.org/" />
+<meta name="generator" content="Galaxy picard_wrapper tool output - see http://getgalaxy.org/" /><title></title><link rel="stylesheet" href="/static/style/base.css" type="text/css" /></head><body><div class="document">
-Galaxy tool wrapper picard_wrapper at 09/05/2011 13:04:11</b><br/><b>The following output files were created (click the filename to view/download a copy):</b><hr/><table>
+Galaxy tool BamIndexStats run at 12/05/2011 14:18:06</b><br/><b>The following output files were created (click the filename to view/download a copy):</b><hr/><table><tr><td><a href="BamIndexStats.metrics.txt">BamIndexStats.metrics.txt</a></td></tr><tr><td><a href="BamIndexStats.log">BamIndexStats.log</a></td></tr></table><p/>
-<b>Picard on line resources:</b><ul>
+<b>Picard on line resources</b><ul><li><a href="http://picard.sourceforge.net/index.shtml">Click here for Picard Documentation</a></li><li><a href="http://picard.sourceforge.net/picard-metric-definitions.shtml">Click here for Picard Metrics definitions</a></li></ul><hr/><b>Picard output</b><hr/><table cellpadding="3" >
-<tr class="d0"><td>chr1 length= 101 Aligned= 0 Unaligned= 0</td></tr>
-<tr class="d1"><td>chr7 length= 404 Aligned= 7 Unaligned= 0</td></tr>
-<tr class="d0"><td>chr8 length= 202 Aligned= 0 Unaligned= 0</td></tr>
-<tr class="d1"><td>NoCoordinateCount= 1</td></tr>
+<tr class="d0"><td colspan="2">chr1 length= 101 Aligned= 0 Unaligned= 0</td></tr>
+<tr class="d1"><td colspan="2">chr7 length= 404 Aligned= 7 Unaligned= 0</td></tr>
+<tr class="d0"><td colspan="2">chr8 length= 202 Aligned= 0 Unaligned= 0</td></tr>
+<tr class="d1"><td colspan="2">NoCoordinateCount= 1</td></tr></table>
-<b>Picard log</b><hr/>
-<pre>## executing java -Xmx2g -jar /udd/rerla/galaxy-central/tool-data/shared/jars/BamIndexStats.jar VALIDATION_STRINGENCY=LENIENT INPUT=/udd/rerla/galaxy-central/database/job_working_directory/2/dataset_2_files/tmpMiaCgO.bam returned status 0 and stderr:
-[Mon May 09 13:04:11 EDT 2011] net.sf.picard.sam.BamIndexStats INPUT=/udd/rerla/galaxy-central/database/job_working_directory/2/dataset_2_files/tmpMiaCgO.bam VALIDATION_STRINGENCY=LENIENT TMP_DIR=/tmp/rerla VERBOSITY=INFO QUIET=false COMPRESSION_LEVEL=5 MAX_RECORDS_IN_RAM=500000 CREATE_INDEX=false CREATE_MD5_FILE=false
-[Mon May 09 13:04:11 EDT 2011] net.sf.picard.sam.BamIndexStats done.
+<b>Picard Tool Run Log</b><hr/>
+<pre>Thu, 12 May 2011 14:18:06 INFO
+ ## executing java -Xmx2g -jar /udd/rerla/galaxy-central/tool-data/shared/jars/BamIndexStats.jar VALIDATION_STRINGENCY=LENIENT INPUT=/udd/rerla/galaxy-central/database/job_working_directory/955/dataset_1015_files/tmp45bd_D.bam returned status 0 and stderr:
+[Thu May 12 14:18:06 EDT 2011] net.sf.picard.sam.BamIndexStats INPUT=/udd/rerla/galaxy-central/database/job_working_directory/955/dataset_1015_files/tmp45bd_D.bam VALIDATION_STRINGENCY=LENIENT TMP_DIR=/tmp/rerla VERBOSITY=INFO QUIET=false COMPRESSION_LEVEL=5 MAX_RECORDS_IN_RAM=500000 CREATE_INDEX=false CREATE_MD5_FILE=false
+[Thu May 12 14:18:06 EDT 2011] net.sf.picard.sam.BamIndexStats done.
Runtime.totalMemory()=9109504
--- a/test-data/picard_BIS_output2.txt Thu May 12 09:56:01 2011 -0400
+++ b/test-data/picard_BIS_output2.txt Thu May 12 16:48:31 2011 -0400
@@ -6,32 +6,33 @@
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Galaxy BamIndexStats tool output - see http://getgalaxy.org/" />
+<meta name="generator" content="Galaxy picard_wrapper tool output - see http://getgalaxy.org/" /><title></title><link rel="stylesheet" href="/static/style/base.css" type="text/css" /></head><body><div class="document">
-Galaxy tool wrapper picard_wrapper at 09/05/2011 13:04:21</b><br/><b>The following output files were created (click the filename to view/download a copy):</b><hr/><table>
+Galaxy tool BamIndexStats run at 12/05/2011 14:18:22</b><br/><b>The following output files were created (click the filename to view/download a copy):</b><hr/><table><tr><td><a href="BamIndexStats.metrics.txt">BamIndexStats.metrics.txt</a></td></tr><tr><td><a href="BamIndexStats.log">BamIndexStats.log</a></td></tr></table><p/>
-<b>Picard on line resources:</b><ul>
+<b>Picard on line resources</b><ul><li><a href="http://picard.sourceforge.net/index.shtml">Click here for Picard Documentation</a></li><li><a href="http://picard.sourceforge.net/picard-metric-definitions.shtml">Click here for Picard Metrics definitions</a></li></ul><hr/><b>Picard output</b><hr/><table cellpadding="3" >
-<tr class="d0"><td>chr1 length= 101 Aligned= 0 Unaligned= 0</td></tr>
-<tr class="d1"><td>chr7 length= 404 Aligned= 7 Unaligned= 0</td></tr>
-<tr class="d0"><td>chr8 length= 202 Aligned= 0 Unaligned= 0</td></tr>
-<tr class="d1"><td>chr10 length= 303 Aligned= 0 Unaligned= 0</td></tr>
-<tr class="d0"><td>chr14 length= 505 Aligned= 0 Unaligned= 0</td></tr>
-<tr class="d1"><td>NoCoordinateCount= 1</td></tr>
+<tr class="d0"><td colspan="2">chr1 length= 101 Aligned= 0 Unaligned= 0</td></tr>
+<tr class="d1"><td colspan="2">chr7 length= 404 Aligned= 7 Unaligned= 0</td></tr>
+<tr class="d0"><td colspan="2">chr8 length= 202 Aligned= 0 Unaligned= 0</td></tr>
+<tr class="d1"><td colspan="2">chr10 length= 303 Aligned= 0 Unaligned= 0</td></tr>
+<tr class="d0"><td colspan="2">chr14 length= 505 Aligned= 0 Unaligned= 0</td></tr>
+<tr class="d1"><td colspan="2">NoCoordinateCount= 1</td></tr></table>
-<b>Picard log</b><hr/>
-<pre>## executing java -Xmx2g -jar /udd/rerla/galaxy-central/tool-data/shared/jars/BamIndexStats.jar VALIDATION_STRINGENCY=LENIENT INPUT=/udd/rerla/galaxy-central/database/job_working_directory/4/dataset_4_files/tmpB_J8W5.bam returned status 0 and stderr:
-[Mon May 09 13:04:21 EDT 2011] net.sf.picard.sam.BamIndexStats INPUT=/udd/rerla/galaxy-central/database/job_working_directory/4/dataset_4_files/tmpB_J8W5.bam VALIDATION_STRINGENCY=LENIENT TMP_DIR=/tmp/rerla VERBOSITY=INFO QUIET=false COMPRESSION_LEVEL=5 MAX_RECORDS_IN_RAM=500000 CREATE_INDEX=false CREATE_MD5_FILE=false
-[Mon May 09 13:04:21 EDT 2011] net.sf.picard.sam.BamIndexStats done.
+<b>Picard Tool Run Log</b><hr/>
+<pre>Thu, 12 May 2011 14:18:22 INFO
+ ## executing java -Xmx2g -jar /udd/rerla/galaxy-central/tool-data/shared/jars/BamIndexStats.jar VALIDATION_STRINGENCY=LENIENT INPUT=/udd/rerla/galaxy-central/database/job_working_directory/957/dataset_1017_files/tmpqXGksN.bam returned status 0 and stderr:
+[Thu May 12 14:18:21 EDT 2011] net.sf.picard.sam.BamIndexStats INPUT=/udd/rerla/galaxy-central/database/job_working_directory/957/dataset_1017_files/tmpqXGksN.bam VALIDATION_STRINGENCY=LENIENT TMP_DIR=/tmp/rerla VERBOSITY=INFO QUIET=false COMPRESSION_LEVEL=5 MAX_RECORDS_IN_RAM=500000 CREATE_INDEX=false CREATE_MD5_FILE=false
+[Thu May 12 14:18:22 EDT 2011] net.sf.picard.sam.BamIndexStats done.
Runtime.totalMemory()=9109504
http://bitbucket.org/galaxy/galaxy-central/changeset/c53834f418c9/
changeset: r5554:c53834f418c9
user: fubar
date: 2011-05-12 22:48:45
summary: branch merge
affected #: 7 files (405 bytes)
--- a/buildbot_setup.sh Thu May 12 16:48:31 2011 -0400
+++ b/buildbot_setup.sh Thu May 12 16:48:45 2011 -0400
@@ -61,6 +61,7 @@
/galaxy/data/location/srma_index.loc
/galaxy/data/taxonomy
/galaxy/data/location/twobit.loc
+/galaxy/software/tool-data/gatk
"
SAMPLES="
@@ -135,4 +136,7 @@
echo "Setting up test data location files"
python test-data-repo/location/make_location.py
+echo "Appending tool-data/shared/ucsc/builds.txt.buildbot to tool-data/shared/ucsc/builds.txt"
+cat tool-data/shared/ucsc/builds.txt.buildbot >> tool-data/shared/ucsc/builds.txt
+
python ./scripts/fetch_eggs.py all
--- a/test-data/gatk/gatk_analyze_covariates/gatk_analyze_covariates_out_1.html Thu May 12 16:48:31 2011 -0400
+++ b/test-data/gatk/gatk_analyze_covariates/gatk_analyze_covariates_out_1.html Thu May 12 16:48:45 2011 -0400
@@ -1,1 +1,17 @@
-<html><head><title>Galaxy - GATK Output</title></head><body><p/><ul><li><a href="A Fake phiX Sample.CycleCovariate.dat">A Fake phiX Sample.CycleCovariate.dat</a></li><li><a href="A Fake phiX Sample.DinucCovariate.dat">A Fake phiX Sample.DinucCovariate.dat</a></li><li><a href="A Fake phiX Sample.HomopolymerCovariate.dat">A Fake phiX Sample.HomopolymerCovariate.dat</a></li><li><a href="A Fake phiX Sample.MinimumNQSCovariate.dat">A Fake phiX Sample.MinimumNQSCovariate.dat</a></li><li><a href="A Fake phiX Sample.PositionCovariate.dat">A Fake phiX Sample.PositionCovariate.dat</a></li><li><a href="A Fake phiX Sample.QualityScoreCovariate.dat">A Fake phiX Sample.QualityScoreCovariate.dat</a></li><li><a href="A.qual_diff_v_Fake.pdf">A.qual_diff_v_Fake.pdf</a></li></ul></body></html>
\ No newline at end of file
+<html>
+<head>
+<title>Galaxy - GATK Output</title>
+</head>
+<body>
+<p/>
+<ul>
+<li><a href="A Fake phiX Sample.CycleCovariate.dat">A Fake phiX Sample.CycleCovariate.dat</a></li>
+<li><a href="A Fake phiX Sample.DinucCovariate.dat">A Fake phiX Sample.DinucCovariate.dat</a></li>
+<li><a href="A Fake phiX Sample.HomopolymerCovariate.dat">A Fake phiX Sample.HomopolymerCovariate.dat</a></li>
+<li><a href="A Fake phiX Sample.MinimumNQSCovariate.dat">A Fake phiX Sample.MinimumNQSCovariate.dat</a></li>
+<li><a href="A Fake phiX Sample.PositionCovariate.dat">A Fake phiX Sample.PositionCovariate.dat</a></li>
+<li><a href="A Fake phiX Sample.QualityScoreCovariate.dat">A Fake phiX Sample.QualityScoreCovariate.dat</a></li>
+<li><a href="A.qual_diff_v_Fake.pdf">A.qual_diff_v_Fake.pdf</a></li>
+</ul>
+</body>
+</html>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tool-data/shared/ucsc/builds.txt.buildbot Thu May 12 16:48:45 2011 -0400
@@ -0,0 +1,1 @@
+chrM equCab2 chrM (chrM)
--- a/tools/gatk/gatk_wrapper.py Thu May 12 16:48:31 2011 -0400
+++ b/tools/gatk/gatk_wrapper.py Thu May 12 16:48:45 2011 -0400
@@ -37,10 +37,10 @@
return None
def html_report_from_directory( html_out, dir ):
- html_out.write( '<html><head><title>Galaxy - GATK Output</title></head><body><p/><ul>' )
- for fname in os.listdir( dir ):
- html_out.write( '<li><a href="%s">%s</a></li>' % ( fname, fname ) )
- html_out.write( '</ul></body></html>' )
+ html_out.write( '<html>\n<head>\n<title>Galaxy - GATK Output</title>\n</head>\n<body>\n<p/>\n<ul>\n' )
+ for fname in sorted( os.listdir( dir ) ):
+ html_out.write( '<li><a href="%s">%s</a></li>\n' % ( fname, fname ) )
+ html_out.write( '</ul>\n</body>\n</html>\n' )
def __main__():
#Parse Command Line
--- a/tools/picard/picard_AddOrReplaceReadGroups.xml Thu May 12 16:48:31 2011 -0400
+++ b/tools/picard/picard_AddOrReplaceReadGroups.xml Thu May 12 16:48:45 2011 -0400
@@ -63,7 +63,7 @@
<param name="rgsm" value="sam1" /><param name="rgOpts" value="preSet" /><param name="outputFormat" value="sam" />
- <output name="outFileSam" ftype="picard_ARRG_output1.sam" />
+ <output name="outFileSam" file="picard_ARRG_output1.sam" /></test><!-- Functional tests with Picard bam outputs currently aren't working
<test>
--- a/tools/sr_mapping/bwa_color_wrapper.xml Thu May 12 16:48:31 2011 -0400
+++ b/tools/sr_mapping/bwa_color_wrapper.xml Thu May 12 16:48:45 2011 -0400
@@ -137,23 +137,23 @@
<option value="no">No</option></param><when value="yes">
- <param name="rgid" type="text" size="25" label="Read group identifier. Each @RG line must have a unique ID. The value of ID is used in the RG
+ <param name="rgid" type="text" size="25" label="Read group identifier (ID). Each @RG line must have a unique ID. The value of ID is used in the RG
tags of alignment records. Must be unique among all read groups in header section." help="Required if RG specified. Read group
IDs may be modified when merging SAM files in order to handle collisions." />
- <param name="rgcn" type="text" size="25" label="Sequencing center that produced the read" help="Optional" />
- <param name="rgds" type="text" size="25" label="Description" help="Optional" />
- <param name="rgdt" type="text" size="25" label="Date that run was produced (ISO8601 format date or date/time, like YYYY-MM-DD)" help="Optional" />
- <param name="rgfo" type="text" size="25" label="Flow order. The array of nucleotide bases that correspond to the nucleotides used for each
-flow of each read." help="Optional. Multi-base flows are encoded in IUPAC format, and non-nucleotide flows by
+ <param name="rgcn" type="text" size="25" label="Sequencing center that produced the read (CN)" help="Optional" />
+ <param name="rgds" type="text" size="25" label="Description (DS)" help="Optional" />
+ <param name="rgdt" type="text" size="25" label="Date that run was produced (DT)" help="Optional. ISO8601 format date or date/time, like YYYY-MM-DD" />
+ <param name="rgfo" type="text" size="25" label="Flow order (FO). The array of nucleotide bases that correspond to the nucleotides used for each
+flow of each read." help="Optional. Multi-base flows are encoded in IUPAC format, and non-nucleotide flows by
various other characters. Format : /\*|[ACMGRSVTWYHKDBN]+/" />
- <param name="rgks" type="text" size="25" label="The array of nucleotide bases that correspond to the key sequence of each read" help="Optional" />
- <param name="rglb" type="text" size="25" label="Library name" help="Required if RG specified" />
- <param name="rgpg" type="text" size="25" label="Programs used for processing the read group" help="Optional" />
- <param name="rgpi" type="text" size="25" label="Predicted median insert size" help="Optional" />
- <param name="rgpl" type="text" size="25" label="Platform/technology used to produce the reads. Valid values : CAPILLARY, LS454, ILLUMINA,
-SOLID, HELICOS, IONTORRENT and PACBIO" help="Required if RG specified" />
- <param name="rgpu" type="text" size="25" label="Platform unit (e.g. flowcell-barcode.lane for Illumina or slide for SOLiD). Unique identifier." help="Optional" />
- <param name="rgsm" type="text" size="25" label="Sample. Use pool name where a pool is being sequenced" help="Required if RG specified" />
+ <param name="rgks" type="text" size="25" label="The array of nucleotide bases that correspond to the key sequence of each read (KS)" help="Optional" />
+ <param name="rglb" type="text" size="25" label="Library name (LB)" help="Required if RG specified" />
+ <param name="rgpg" type="text" size="25" label="Programs used for processing the read group (PG)" help="Optional" />
+ <param name="rgpi" type="text" size="25" label="Predicted median insert size (PI)" help="Optional" />
+ <param name="rgpl" type="text" size="25" label="Platform/technology used to produce the reads (PL)" help="Required if RG specified. Valid values : CAPILLARY, LS454, ILLUMINA,
+SOLID, HELICOS, IONTORRENT and PACBIO" />
+ <param name="rgpu" type="text" size="25" label="Platform unit (PU)" help="Optional. Unique identifier (e.g. flowcell-barcode.lane for Illumina or slide for SOLiD)" />
+ <param name="rgsm" type="text" size="25" label="Sample (SM)" help="Required if RG specified. Use pool name where a pool is being sequenced" /></when><when value="no" /></conditional>
--- a/tools/sr_mapping/bwa_wrapper.xml Thu May 12 16:48:31 2011 -0400
+++ b/tools/sr_mapping/bwa_wrapper.xml Thu May 12 16:48:45 2011 -0400
@@ -130,23 +130,23 @@
<option value="no">No</option></param><when value="yes">
- <param name="rgid" type="text" size="25" label="Read group identifier. Each @RG line must have a unique ID. The value of ID is used in the RG
+ <param name="rgid" type="text" size="25" label="Read group identifier (ID). Each @RG line must have a unique ID. The value of ID is used in the RG
tags of alignment records. Must be unique among all read groups in header section." help="Required if RG specified. Read group
IDs may be modified when merging SAM files in order to handle collisions." />
- <param name="rgcn" type="text" size="25" label="Sequencing center that produced the read" help="Optional" />
- <param name="rgds" type="text" size="25" label="Description" help="Optional" />
- <param name="rgdt" type="text" size="25" label="Date that run was produced (ISO8601 format date or date/time, like YYYY-MM-DD)" help="Optional" />
- <param name="rgfo" type="text" size="25" label="Flow order. The array of nucleotide bases that correspond to the nucleotides used for each
+ <param name="rgcn" type="text" size="25" label="Sequencing center that produced the read (CN)" help="Optional" />
+ <param name="rgds" type="text" size="25" label="Description (DS)" help="Optional" />
+ <param name="rgdt" type="text" size="25" label="Date that run was produced (DT)" help="Optional. ISO8601 format date or date/time, like YYYY-MM-DD" />
+ <param name="rgfo" type="text" size="25" label="Flow order (FO). The array of nucleotide bases that correspond to the nucleotides used for each
flow of each read." help="Optional. Multi-base flows are encoded in IUPAC format, and non-nucleotide flows by
various other characters. Format : /\*|[ACMGRSVTWYHKDBN]+/" />
- <param name="rgks" type="text" size="25" label="The array of nucleotide bases that correspond to the key sequence of each read" help="Optional" />
- <param name="rglb" type="text" size="25" label="Library name" help="Required if RG specified" />
- <param name="rgpg" type="text" size="25" label="Programs used for processing the read group" help="Optional" />
- <param name="rgpi" type="text" size="25" label="Predicted median insert size" help="Optional" />
- <param name="rgpl" type="text" size="25" label="Platform/technology used to produce the reads. Valid values : CAPILLARY, LS454, ILLUMINA,
-SOLID, HELICOS, IONTORRENT and PACBIO" help="Required if RG specified" />
- <param name="rgpu" type="text" size="25" label="Platform unit (e.g. flowcell-barcode.lane for Illumina or slide for SOLiD). Unique identifier." help="Optional" />
- <param name="rgsm" type="text" size="25" label="Sample. Use pool name where a pool is being sequenced" help="Required if RG specified" />
+ <param name="rgks" type="text" size="25" label="The array of nucleotide bases that correspond to the key sequence of each read (KS)" help="Optional" />
+ <param name="rglb" type="text" size="25" label="Library name (LB)" help="Required if RG specified" />
+ <param name="rgpg" type="text" size="25" label="Programs used for processing the read group (PG)" help="Optional" />
+ <param name="rgpi" type="text" size="25" label="Predicted median insert size (PI)" help="Optional" />
+ <param name="rgpl" type="text" size="25" label="Platform/technology used to produce the reads (PL)" help="Required if RG specified. Valid values : CAPILLARY, LS454, ILLUMINA,
+SOLID, HELICOS, IONTORRENT and PACBIO" />
+ <param name="rgpu" type="text" size="25" label="Platform unit (PU)" help="Optional. Unique identifier (e.g. flowcell-barcode.lane for Illumina or slide for SOLiD)" />
+ <param name="rgsm" type="text" size="25" label="Sample (SM)" help="Required if RG specified. Use pool name where a pool is being sequenced" /></when><when value="no" /></conditional>
http://bitbucket.org/galaxy/galaxy-central/changeset/eddee43cb8e6/
changeset: r5555:eddee43cb8e6
user: fubar
date: 2011-05-12 22:53:11
summary: more fixes for tests related to new logging method for picard tools
affected #: 2 files (1.7 KB)
--- a/test-data/picard_output_insertsize_tinysam.html Thu May 12 16:48:45 2011 -0400
+++ b/test-data/picard_output_insertsize_tinysam.html Thu May 12 16:53:11 2011 -0400
@@ -6,17 +6,18 @@
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Galaxy picard tool output - see http://getgalaxy.org/" />
+<meta name="generator" content="Galaxy picard_wrapper tool output - see http://getgalaxy.org/" /><title></title><link rel="stylesheet" href="/static/style/base.css" type="text/css" /></head><body><div class="document">
-<b><a href="http://rgenetics.org">Galaxy Rgenetics</a> tool output picard run at 24/04/2011 13:22:02</b><br/><table cellpadding="10"><tr><td>
+Galaxy tool CollectInsertSizeMetrics run at 12/05/2011 14:33:49</b><br/><table cellpadding="10"><tr><td><a href="InsertSizeHist.pdf"><img src="InsertSizeHist.jpg" title="Click image preview for a print quality PDF version" hspace="10" align="middle"></a></tr></td></table><b>The following output files were created (click the filename to view/download a copy):</b><hr/><table><tr><td><a href="CollectInsertSizeMetrics.metrics.txt">CollectInsertSizeMetrics.metrics.txt</a></td></tr>
+<tr><td><a href="CollectInsertSizeMetrics.log">CollectInsertSizeMetrics.log</a></td></tr><tr><td><a href="InsertSizeHist.pdf">InsertSizeHist.pdf</a></td></tr><tr><td><a href="InsertSizeHist.jpg">InsertSizeHist.jpg</a></td></tr></table><p/>
@@ -25,41 +26,46 @@
<li><a href="http://picard.sourceforge.net/picard-metric-definitions.shtml">Click here for Picard Metrics definitions</a></li></ul><hr/><b>Picard output (transposed to make it easier to see)</b><hr/><table cellpadding="3" >
-<tr class="d0"><td>## net.sf.picard.metrics.StringHeader</td></tr><tr class="d1"><td># net.sf.picard.analysis.CollectInsertSizeMetrics HISTOGRAM_FILE=InsertSizeHist.pdf TAIL_LIMIT=10000 MINIMUM_PCT=0.01 INPUT=/dev/shm/tmpwOFdMU/database/files/000/dataset_1.dat OUTPUT=/udd/rerla/rgalaxy/database/job_working_directory/2/dataset_2_files/CollectInsertSizeMetrics.metrics.txt VALIDATION_STRINGENCY=LENIENT ASSUME_SORTED=true STOP_AFTER=0 TMP_DIR=/tmp/rerla VERBOSITY=INFO QUIET=false COMPRESSION_LEVEL=5 MAX_RECORDS_IN_RAM=500000 CREATE_INDEX=false CREATE_MD5_FILE=false</td></tr><tr class="d0"><td>## net.sf.picard.metrics.StringHeader</td></tr><tr class="d1"><td># Started on: Sun Apr 24 13:22:01 EDT 2011</td></tr><tr class="d0"><td>## METRICS CLASS net.sf.picard.analysis.InsertSizeMetrics</td></tr><tr class="d0"><td>MEDIAN_INSERT_SIZE</td><td>96</td></tr>
-<tr class="d1"><td>MIN_INSERT_SIZE</td><td>96</td></tr>
-<tr class="d0"><td>MAX_INSERT_SIZE</td><td>96</td></tr>
-<tr class="d1"><td>MEAN_INSERT_SIZE</td><td>96</td></tr>
-<tr class="d0"><td>STANDARD_DEVIATION</td><td>?</td></tr>
-<tr class="d1"><td>READ_PAIRS</td><td>1</td></tr>
-<tr class="d0"><td>PAIR_ORIENTATION</td><td>FR</td></tr>
-<tr class="d1"><td>WIDTH_OF_10_PERCENT</td><td>1</td></tr>
-<tr class="d0"><td>WIDTH_OF_20_PERCENT</td><td>1</td></tr>
-<tr class="d1"><td>WIDTH_OF_30_PERCENT</td><td>1</td></tr>
-<tr class="d0"><td>WIDTH_OF_40_PERCENT</td><td>1</td></tr>
-<tr class="d1"><td>WIDTH_OF_50_PERCENT</td><td>1</td></tr>
-<tr class="d0"><td>WIDTH_OF_60_PERCENT</td><td>1</td></tr>
-<tr class="d1"><td>WIDTH_OF_70_PERCENT</td><td>1</td></tr>
-<tr class="d0"><td>WIDTH_OF_80_PERCENT</td><td>1</td></tr>
-<tr class="d1"><td>WIDTH_OF_90_PERCENT</td><td>1</td></tr>
+<tr class="d0"><td colspan="2">## net.sf.picard.metrics.StringHeader</td></tr><tr class="d1"><td colspan="2"># net.sf.picard.analysis.CollectInsertSizeMetrics HISTOGRAM_FILE=InsertSizeHist.pdf TAIL_LIMIT=10000 MINIMUM_PCT=0.01 INPUT=/tmp/6729253.1.all.q/tmpM5wI_h/database/files/001/dataset_1092.dat OUTPUT=/udd/rerla/galaxy-central/database/job_working_directory/1028/dataset_1093_files/CollectInsertSizeMetrics.metrics.txt VALIDATION_STRINGENCY=LENIENT ASSUME_SORTED=true STOP_AFTER=0 TMP_DIR=/tmp/rerla VERBOSITY=INFO QUIET=false COMPRESSION_LEVEL=5 MAX_RECORDS_IN_RAM=500000 CREATE_INDEX=false CREATE_MD5_FILE=false</td></tr><tr class="d0"><td colspan="2">## net.sf.picard.metrics.StringHeader</td></tr><tr class="d1"><td colspan="2"># Started on: Thu May 12 14:33:48 EDT 2011</td></tr><tr class="d0"><td colspan="2">## METRICS CLASS net.sf.picard.analysis.InsertSizeMetrics</td></tr><tr class="d0"><td>MEDIAN_INSERT_SIZE</td><td>96 </td></tr>
+<tr class="d1"><td>MIN_INSERT_SIZE</td><td>96 </td></tr>
+<tr class="d0"><td>MAX_INSERT_SIZE</td><td>96 </td></tr>
+<tr class="d1"><td>MEAN_INSERT_SIZE</td><td>96 </td></tr>
+<tr class="d0"><td>STANDARD_DEVIATION</td><td>? </td></tr>
+<tr class="d1"><td>READ_PAIRS</td><td>1 </td></tr>
+<tr class="d0"><td>PAIR_ORIENTATION</td><td>FR </td></tr>
+<tr class="d1"><td>WIDTH_OF_10_PERCENT</td><td>1 </td></tr>
+<tr class="d0"><td>WIDTH_OF_20_PERCENT</td><td>1 </td></tr>
+<tr class="d1"><td>WIDTH_OF_30_PERCENT</td><td>1 </td></tr>
+<tr class="d0"><td>WIDTH_OF_40_PERCENT</td><td>1 </td></tr>
+<tr class="d1"><td>WIDTH_OF_50_PERCENT</td><td>1 </td></tr>
+<tr class="d0"><td>WIDTH_OF_60_PERCENT</td><td>1 </td></tr>
+<tr class="d1"><td>WIDTH_OF_70_PERCENT</td><td>1 </td></tr>
+<tr class="d0"><td>WIDTH_OF_80_PERCENT</td><td>1 </td></tr>
+<tr class="d1"><td>WIDTH_OF_90_PERCENT</td><td>1 </td></tr><tr class="d0"><td>WIDTH_OF_99_PERCENT
</td><td>1
-</td></tr>
-<tr class="d0"><td>## HISTOGRAM java.lang.Integer</td></tr><tr class="d0"><td>insert_size fr_count rf_count</td></tr>
-<tr class="d1"><td>96 1 0</td></tr>
-<tr class="d0"><td>201 0 1</td></tr>
+ </td></tr>
+<tr class="d0"><td colspan="2">## HISTOGRAM java.lang.Integer</td></tr><tr class="d0"><td colspan="2">insert_size fr_count rf_count</td></tr>
+<tr class="d1"><td colspan="2">96 1 0</td></tr>
+<tr class="d0"><td colspan="2">201 0 1</td></tr></table>
-<b>Picard log</b><hr/>
-<pre>## executing java -Xmx2g -jar /udd/rerla/rgalaxy/tool-data/shared/jars/CollectInsertSizeMetrics.jar VALIDATION_STRINGENCY=LENIENT I=/dev/shm/tmpwOFdMU/database/files/000/dataset_1.dat O=/udd/rerla/rgalaxy/database/job_working_directory/2/dataset_2_files/CollectInsertSizeMetrics.metrics.txt HISTOGRAM_FILE=InsertSizeHist.pdf TAIL_LIMIT=10000 MINIMUM_PCT=0.01 returned status 0 and stderr:
-[Sun Apr 24 13:22:01 EDT 2011] net.sf.picard.analysis.CollectInsertSizeMetrics HISTOGRAM_FILE=InsertSizeHist.pdf TAIL_LIMIT=10000 MINIMUM_PCT=0.01 INPUT=/dev/shm/tmpwOFdMU/database/files/000/dataset_1.dat OUTPUT=/udd/rerla/rgalaxy/database/job_working_directory/2/dataset_2_files/CollectInsertSizeMetrics.metrics.txt VALIDATION_STRINGENCY=LENIENT ASSUME_SORTED=true STOP_AFTER=0 TMP_DIR=/tmp/rerla VERBOSITY=INFO QUIET=false COMPRESSION_LEVEL=5 MAX_RECORDS_IN_RAM=500000 CREATE_INDEX=false CREATE_MD5_FILE=false
-WARNING 2011-04-24 13:22:01 SinglePassSamProgram File reports sort order 'queryname', assuming it's coordinate sorted anyway.
-INFO 2011-04-24 13:22:01 ProcessExecutor [1] "FR = red" "RF = blue"
-INFO 2011-04-24 13:22:01 ProcessExecutor null device
-INFO 2011-04-24 13:22:01 ProcessExecutor 1
-[Sun Apr 24 13:22:01 EDT 2011] net.sf.picard.analysis.CollectInsertSizeMetrics done.
+<b>Picard Tool Run Log</b><hr/>
+<pre>Thu, 12 May 2011 14:33:48 INFO
+ ## executing java -Xmx2g -jar /udd/rerla/galaxy-central/tool-data/shared/jars/CollectInsertSizeMetrics.jar VALIDATION_STRINGENCY=LENIENT I=/tmp/6729253.1.all.q/tmpM5wI_h/database/files/001/dataset_1092.dat O=/udd/rerla/galaxy-central/database/job_working_directory/1028/dataset_1093_files/CollectInsertSizeMetrics.metrics.txt HISTOGRAM_FILE=InsertSizeHist.pdf TAIL_LIMIT=10000 MINIMUM_PCT=0.01 returned status 0 and stderr:
+[Thu May 12 14:33:48 EDT 2011] net.sf.picard.analysis.CollectInsertSizeMetrics HISTOGRAM_FILE=InsertSizeHist.pdf TAIL_LIMIT=10000 MINIMUM_PCT=0.01 INPUT=/tmp/6729253.1.all.q/tmpM5wI_h/database/files/001/dataset_1092.dat OUTPUT=/udd/rerla/galaxy-central/database/job_working_directory/1028/dataset_1093_files/CollectInsertSizeMetrics.metrics.txt VALIDATION_STRINGENCY=LENIENT ASSUME_SORTED=true STOP_AFTER=0 TMP_DIR=/tmp/rerla VERBOSITY=INFO QUIET=false COMPRESSION_LEVEL=5 MAX_RECORDS_IN_RAM=500000 CREATE_INDEX=false CREATE_MD5_FILE=false
+WARNING 2011-05-12 14:33:48 SinglePassSamProgram File reports sort order 'queryname', assuming it's coordinate sorted anyway.
+INFO 2011-05-12 14:33:48 ProcessExecutor [1] "FR = red" "RF = blue"
+INFO 2011-05-12 14:33:48 ProcessExecutor null device
+INFO 2011-05-12 14:33:48 ProcessExecutor 1
+[Thu May 12 14:33:48 EDT 2011] net.sf.picard.analysis.CollectInsertSizeMetrics done.
Runtime.totalMemory()=9109504
-## executing mogrify -format jpg -resize x400 /udd/rerla/rgalaxy/database/job_working_directory/2/dataset_2_files/InsertSizeHist.pdf returned status 0 and nothing on stderr
+Thu, 12 May 2011 14:33:49 INFO
+ ## executing mogrify -format jpg -resize x400 /udd/rerla/galaxy-central/database/job_working_directory/1028/dataset_1093_files/InsertSizeHist.pdf returned status 0 and nothing on stderr
+
+Thu, 12 May 2011 14:33:49 INFO
+ ## executing mogrify -format jpg -resize x400 /udd/rerla/galaxy-central/database/job_working_directory/1028/dataset_1093_files/InsertSizeHist.pdf returned status 0 and nothing on stderr
</pre><hr/>The freely available <a href="http://picard.sourceforge.net/command-line-overview.shtml">Picard software</a>
generated all outputs reported here running as a <a href="http://getgalaxy.org">Galaxy</a> tool</div></body></html>
--- a/test-data/picard_output_markdups_sortedpairsam.html Thu May 12 16:48:45 2011 -0400
+++ b/test-data/picard_output_markdups_sortedpairsam.html Thu May 12 16:53:11 2011 -0400
@@ -6,156 +6,155 @@
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Galaxy rgPicardMarkDups.py tool output - see http://g2.trac.bx.psu.edu/" />
+<meta name="generator" content="Galaxy picard_wrapper tool output - see http://getgalaxy.org/" /><title></title><link rel="stylesheet" href="/static/style/base.css" type="text/css" /></head><body><div class="document">
-<b><a href="http://rgenetics.org">Galaxy Rgenetics</a> tool output rgPicardMarkDups.py run at 22/04/2011 22:31:48</b><br/><b>Running this Galaxy tool produced the following output files (click the filename to view/download a copy).</b><hr/><table>
-<tr><td><a href="rgPicardMarkDupsout.txt">rgPicardMarkDupsout.txt</a></td></tr>
+Galaxy tool MarkDuplicates run at 12/05/2011 14:34:29</b><br/><b>The following output files were created (click the filename to view/download a copy):</b><hr/><table>
+<tr><td><a href="MarkDuplicates.log">MarkDuplicates.log</a></td></tr>
+<tr><td><a href="MarkDuplicates.metrics.txt">MarkDuplicates.metrics.txt</a></td></tr></table><p/><b>Picard on line resources</b><ul><li><a href="http://picard.sourceforge.net/index.shtml">Click here for Picard Documentation</a></li><li><a href="http://picard.sourceforge.net/picard-metric-definitions.shtml">Click here for Picard Metrics definitions</a></li></ul><hr/><b>Picard output (transposed to make it easier to see)</b><hr/><table cellpadding="3" >
-<tr class="d0"><td>## net.sf.picard.metrics.StringHeader</td></tr><tr class="d1"><td># net.sf.picard.sam.MarkDuplicates INPUT=/dev/shm/tmpk9pvdq/database/files/000/dataset_1.dat OUTPUT=/dev/shm/tmpk9pvdq/database/files/000/dataset_2.dat METRICS_FILE=/udd/rerla/rgalaxy/database/job_working_directory/2/dataset_3_files/rgPicardMarkDupsout.txt ASSUME_SORTED=true READ_NAME_REGEX=[a-zA-Z0-9]+:[0-9]:([0-9]+):([0-9]+):([0-9]+).* OPTICAL_DUPLICATE_PIXEL_DISTANCE=100 VALIDATION_STRINGENCY=LENIENT REMOVE_DUPLICATES=false MAX_SEQUENCES_FOR_DISK_READ_ENDS_MAP=50000 MAX_FILE_HANDLES_FOR_READ_ENDS_MAP=8000 TMP_DIR=/tmp/rerla VERBOSITY=INFO QUIET=false COMPRESSION_LEVEL=5 MAX_RECORDS_IN_RAM=500000 CREATE_INDEX=false CREATE_MD5_FILE=false</td></tr><tr class="d0"><td>## net.sf.picard.metrics.StringHeader</td></tr><tr class="d1"><td># Started on: Fri Apr 22 22:31:46 EDT 2011</td></tr><tr class="d0"><td>## METRICS CLASS net.sf.picard.sam.DuplicationMetrics</td></tr><tr class="d0"><td>LIBRARY</td><td></td></tr>
-<tr class="d1"><td>UNPAIRED_READS_EXAMINED</td><td>1</td></tr>
-<tr class="d0"><td>READ_PAIRS_EXAMINED</td><td>3</td></tr>
-<tr class="d1"><td>UNMAPPED_READS</td><td>1</td></tr>
-<tr class="d0"><td>UNPAIRED_READ_DUPLICATES</td><td>1</td></tr>
-<tr class="d1"><td>READ_PAIR_DUPLICATES</td><td>1</td></tr>
-<tr class="d0"><td>READ_PAIR_OPTICAL_DUPLICATES</td><td>0</td></tr>
-<tr class="d1"><td>PERCENT_DUPLICATION</td><td>0.428571</td></tr>
+<tr class="d0"><td colspan="2">## net.sf.picard.metrics.StringHeader</td></tr><tr class="d1"><td colspan="2"># net.sf.picard.sam.MarkDuplicates INPUT=/tmp/6729253.1.all.q/tmpM5wI_h/database/files/001/dataset_1097.dat OUTPUT=/tmp/6729253.1.all.q/tmpM5wI_h/database/files/001/dataset_1098.dat METRICS_FILE=/udd/rerla/galaxy-central/database/job_working_directory/1032/dataset_1099_files/MarkDuplicates.metrics.txt REMOVE_DUPLICATES=true ASSUME_SORTED=true READ_NAME_REGEX=[a-zA-Z0-9]+:[0-9]:([0-9]+):([0-9]+):([0-9]+).* OPTICAL_DUPLICATE_PIXEL_DISTANCE=100 VALIDATION_STRINGENCY=LENIENT MAX_SEQUENCES_FOR_DISK_READ_ENDS_MAP=50000 MAX_FILE_HANDLES_FOR_READ_ENDS_MAP=8000 TMP_DIR=/tmp/rerla VERBOSITY=INFO QUIET=false COMPRESSION_LEVEL=5 MAX_RECORDS_IN_RAM=500000 CREATE_INDEX=false CREATE_MD5_FILE=false</td></tr><tr class="d0"><td colspan="2">## net.sf.picard.metrics.StringHeader</td></tr><tr class="d1"><td colspan="2"># Started on: Thu May 12 14:34:28 EDT 2011</td></tr><tr class="d0"><td colspan="2">## METRICS CLASS net.sf.picard.sam.DuplicationMetrics</td></tr><tr class="d0"><td>LIBRARY</td><td> </td></tr>
+<tr class="d1"><td>UNPAIRED_READS_EXAMINED</td><td>1 </td></tr>
+<tr class="d0"><td>READ_PAIRS_EXAMINED</td><td>3 </td></tr>
+<tr class="d1"><td>UNMAPPED_READS</td><td>1 </td></tr>
+<tr class="d0"><td>UNPAIRED_READ_DUPLICATES</td><td>1 </td></tr>
+<tr class="d1"><td>READ_PAIR_DUPLICATES</td><td>1 </td></tr>
+<tr class="d0"><td>READ_PAIR_OPTICAL_DUPLICATES</td><td>0 </td></tr>
+<tr class="d1"><td>PERCENT_DUPLICATION</td><td>0.428571 </td></tr><tr class="d0"><td>ESTIMATED_LIBRARY_SIZE
</td><td>3
-</td></tr>
-<tr class="d0"><td>## HISTOGRAM java.lang.Double</td></tr><tr class="d0"><td>BIN VALUE</td></tr>
-<tr class="d1"><td>1.0 0.948181</td></tr>
-<tr class="d0"><td>2.0 1.296997</td></tr>
-<tr class="d1"><td>3.0 1.425319</td></tr>
-<tr class="d0"><td>4.0 1.472527</td></tr>
-<tr class="d1"><td>5.0 1.489893</td></tr>
-<tr class="d0"><td>6.0 1.496282</td></tr>
-<tr class="d1"><td>7.0 1.498632</td></tr>
-<tr class="d0"><td>8.0 1.499497</td></tr>
-<tr class="d1"><td>9.0 1.499815</td></tr>
-<tr class="d0"><td>10.0 1.499932</td></tr>
-<tr class="d1"><td>11.0 1.499975</td></tr>
-<tr class="d0"><td>12.0 1.499991</td></tr>
-<tr class="d1"><td>13.0 1.499997</td></tr>
-<tr class="d0"><td>14.0 1.499999</td></tr>
-<tr class="d1"><td>15.0 1.5</td></tr>
-<tr class="d0"><td>16.0 1.5</td></tr>
-<tr class="d1"><td>17.0 1.5</td></tr>
-<tr class="d0"><td>18.0 1.5</td></tr>
-<tr class="d1"><td>19.0 1.5</td></tr>
-<tr class="d0"><td>20.0 1.5</td></tr>
-<tr class="d1"><td>21.0 1.5</td></tr>
-<tr class="d0"><td>22.0 1.5</td></tr>
-<tr class="d1"><td>23.0 1.5</td></tr>
-<tr class="d0"><td>24.0 1.5</td></tr>
-<tr class="d1"><td>25.0 1.5</td></tr>
-<tr class="d0"><td>26.0 1.5</td></tr>
-<tr class="d1"><td>27.0 1.5</td></tr>
-<tr class="d0"><td>28.0 1.5</td></tr>
-<tr class="d1"><td>29.0 1.5</td></tr>
-<tr class="d0"><td>30.0 1.5</td></tr>
-<tr class="d1"><td>31.0 1.5</td></tr>
-<tr class="d0"><td>32.0 1.5</td></tr>
-<tr class="d1"><td>33.0 1.5</td></tr>
-<tr class="d0"><td>34.0 1.5</td></tr>
-<tr class="d1"><td>35.0 1.5</td></tr>
-<tr class="d0"><td>36.0 1.5</td></tr>
-<tr class="d1"><td>37.0 1.5</td></tr>
-<tr class="d0"><td>38.0 1.5</td></tr>
-<tr class="d1"><td>39.0 1.5</td></tr>
-<tr class="d0"><td>40.0 1.5</td></tr>
-<tr class="d1"><td>41.0 1.5</td></tr>
-<tr class="d0"><td>42.0 1.5</td></tr>
-<tr class="d1"><td>43.0 1.5</td></tr>
-<tr class="d0"><td>44.0 1.5</td></tr>
-<tr class="d1"><td>45.0 1.5</td></tr>
-<tr class="d0"><td>46.0 1.5</td></tr>
-<tr class="d1"><td>47.0 1.5</td></tr>
-<tr class="d0"><td>48.0 1.5</td></tr>
-<tr class="d1"><td>49.0 1.5</td></tr>
-<tr class="d0"><td>50.0 1.5</td></tr>
-<tr class="d1"><td>51.0 1.5</td></tr>
-<tr class="d0"><td>52.0 1.5</td></tr>
-<tr class="d1"><td>53.0 1.5</td></tr>
-<tr class="d0"><td>54.0 1.5</td></tr>
-<tr class="d1"><td>55.0 1.5</td></tr>
-<tr class="d0"><td>56.0 1.5</td></tr>
-<tr class="d1"><td>57.0 1.5</td></tr>
-<tr class="d0"><td>58.0 1.5</td></tr>
-<tr class="d1"><td>59.0 1.5</td></tr>
-<tr class="d0"><td>60.0 1.5</td></tr>
-<tr class="d1"><td>61.0 1.5</td></tr>
-<tr class="d0"><td>62.0 1.5</td></tr>
-<tr class="d1"><td>63.0 1.5</td></tr>
-<tr class="d0"><td>64.0 1.5</td></tr>
-<tr class="d1"><td>65.0 1.5</td></tr>
-<tr class="d0"><td>66.0 1.5</td></tr>
-<tr class="d1"><td>67.0 1.5</td></tr>
-<tr class="d0"><td>68.0 1.5</td></tr>
-<tr class="d1"><td>69.0 1.5</td></tr>
-<tr class="d0"><td>70.0 1.5</td></tr>
-<tr class="d1"><td>71.0 1.5</td></tr>
-<tr class="d0"><td>72.0 1.5</td></tr>
-<tr class="d1"><td>73.0 1.5</td></tr>
-<tr class="d0"><td>74.0 1.5</td></tr>
-<tr class="d1"><td>75.0 1.5</td></tr>
-<tr class="d0"><td>76.0 1.5</td></tr>
-<tr class="d1"><td>77.0 1.5</td></tr>
-<tr class="d0"><td>78.0 1.5</td></tr>
-<tr class="d1"><td>79.0 1.5</td></tr>
-<tr class="d0"><td>80.0 1.5</td></tr>
-<tr class="d1"><td>81.0 1.5</td></tr>
-<tr class="d0"><td>82.0 1.5</td></tr>
-<tr class="d1"><td>83.0 1.5</td></tr>
-<tr class="d0"><td>84.0 1.5</td></tr>
-<tr class="d1"><td>85.0 1.5</td></tr>
-<tr class="d0"><td>86.0 1.5</td></tr>
-<tr class="d1"><td>87.0 1.5</td></tr>
-<tr class="d0"><td>88.0 1.5</td></tr>
-<tr class="d1"><td>89.0 1.5</td></tr>
-<tr class="d0"><td>90.0 1.5</td></tr>
-<tr class="d1"><td>91.0 1.5</td></tr>
-<tr class="d0"><td>92.0 1.5</td></tr>
-<tr class="d1"><td>93.0 1.5</td></tr>
-<tr class="d0"><td>94.0 1.5</td></tr>
-<tr class="d1"><td>95.0 1.5</td></tr>
-<tr class="d0"><td>96.0 1.5</td></tr>
-<tr class="d1"><td>97.0 1.5</td></tr>
-<tr class="d0"><td>98.0 1.5</td></tr>
-<tr class="d1"><td>99.0 1.5</td></tr>
-<tr class="d0"><td>100.0 1.5</td></tr>
+ </td></tr>
+<tr class="d0"><td colspan="2">## HISTOGRAM java.lang.Double</td></tr><tr class="d0"><td colspan="2">BIN VALUE</td></tr>
+<tr class="d1"><td colspan="2">1.0 0.948181</td></tr>
+<tr class="d0"><td colspan="2">2.0 1.296997</td></tr>
+<tr class="d1"><td colspan="2">3.0 1.425319</td></tr>
+<tr class="d0"><td colspan="2">4.0 1.472527</td></tr>
+<tr class="d1"><td colspan="2">5.0 1.489893</td></tr>
+<tr class="d0"><td colspan="2">6.0 1.496282</td></tr>
+<tr class="d1"><td colspan="2">7.0 1.498632</td></tr>
+<tr class="d0"><td colspan="2">8.0 1.499497</td></tr>
+<tr class="d1"><td colspan="2">9.0 1.499815</td></tr>
+<tr class="d0"><td colspan="2">10.0 1.499932</td></tr>
+<tr class="d1"><td colspan="2">11.0 1.499975</td></tr>
+<tr class="d0"><td colspan="2">12.0 1.499991</td></tr>
+<tr class="d1"><td colspan="2">13.0 1.499997</td></tr>
+<tr class="d0"><td colspan="2">14.0 1.499999</td></tr>
+<tr class="d1"><td colspan="2">15.0 1.5</td></tr>
+<tr class="d0"><td colspan="2">16.0 1.5</td></tr>
+<tr class="d1"><td colspan="2">17.0 1.5</td></tr>
+<tr class="d0"><td colspan="2">18.0 1.5</td></tr>
+<tr class="d1"><td colspan="2">19.0 1.5</td></tr>
+<tr class="d0"><td colspan="2">20.0 1.5</td></tr>
+<tr class="d1"><td colspan="2">21.0 1.5</td></tr>
+<tr class="d0"><td colspan="2">22.0 1.5</td></tr>
+<tr class="d1"><td colspan="2">23.0 1.5</td></tr>
+<tr class="d0"><td colspan="2">24.0 1.5</td></tr>
+<tr class="d1"><td colspan="2">25.0 1.5</td></tr>
+<tr class="d0"><td colspan="2">26.0 1.5</td></tr>
+<tr class="d1"><td colspan="2">27.0 1.5</td></tr>
+<tr class="d0"><td colspan="2">28.0 1.5</td></tr>
+<tr class="d1"><td colspan="2">29.0 1.5</td></tr>
+<tr class="d0"><td colspan="2">30.0 1.5</td></tr>
+<tr class="d1"><td colspan="2">31.0 1.5</td></tr>
+<tr class="d0"><td colspan="2">32.0 1.5</td></tr>
+<tr class="d1"><td colspan="2">33.0 1.5</td></tr>
+<tr class="d0"><td colspan="2">34.0 1.5</td></tr>
+<tr class="d1"><td colspan="2">35.0 1.5</td></tr>
+<tr class="d0"><td colspan="2">36.0 1.5</td></tr>
+<tr class="d1"><td colspan="2">37.0 1.5</td></tr>
+<tr class="d0"><td colspan="2">38.0 1.5</td></tr>
+<tr class="d1"><td colspan="2">39.0 1.5</td></tr>
+<tr class="d0"><td colspan="2">40.0 1.5</td></tr>
+<tr class="d1"><td colspan="2">41.0 1.5</td></tr>
+<tr class="d0"><td colspan="2">42.0 1.5</td></tr>
+<tr class="d1"><td colspan="2">43.0 1.5</td></tr>
+<tr class="d0"><td colspan="2">44.0 1.5</td></tr>
+<tr class="d1"><td colspan="2">45.0 1.5</td></tr>
+<tr class="d0"><td colspan="2">46.0 1.5</td></tr>
+<tr class="d1"><td colspan="2">47.0 1.5</td></tr>
+<tr class="d0"><td colspan="2">48.0 1.5</td></tr>
+<tr class="d1"><td colspan="2">49.0 1.5</td></tr>
+<tr class="d0"><td colspan="2">50.0 1.5</td></tr>
+<tr class="d1"><td colspan="2">51.0 1.5</td></tr>
+<tr class="d0"><td colspan="2">52.0 1.5</td></tr>
+<tr class="d1"><td colspan="2">53.0 1.5</td></tr>
+<tr class="d0"><td colspan="2">54.0 1.5</td></tr>
+<tr class="d1"><td colspan="2">55.0 1.5</td></tr>
+<tr class="d0"><td colspan="2">56.0 1.5</td></tr>
+<tr class="d1"><td colspan="2">57.0 1.5</td></tr>
+<tr class="d0"><td colspan="2">58.0 1.5</td></tr>
+<tr class="d1"><td colspan="2">59.0 1.5</td></tr>
+<tr class="d0"><td colspan="2">60.0 1.5</td></tr>
+<tr class="d1"><td colspan="2">61.0 1.5</td></tr>
+<tr class="d0"><td colspan="2">62.0 1.5</td></tr>
+<tr class="d1"><td colspan="2">63.0 1.5</td></tr>
+<tr class="d0"><td colspan="2">64.0 1.5</td></tr>
+<tr class="d1"><td colspan="2">65.0 1.5</td></tr>
+<tr class="d0"><td colspan="2">66.0 1.5</td></tr>
+<tr class="d1"><td colspan="2">67.0 1.5</td></tr>
+<tr class="d0"><td colspan="2">68.0 1.5</td></tr>
+<tr class="d1"><td colspan="2">69.0 1.5</td></tr>
+<tr class="d0"><td colspan="2">70.0 1.5</td></tr>
+<tr class="d1"><td colspan="2">71.0 1.5</td></tr>
+<tr class="d0"><td colspan="2">72.0 1.5</td></tr>
+<tr class="d1"><td colspan="2">73.0 1.5</td></tr>
+<tr class="d0"><td colspan="2">74.0 1.5</td></tr>
+<tr class="d1"><td colspan="2">75.0 1.5</td></tr>
+<tr class="d0"><td colspan="2">76.0 1.5</td></tr>
+<tr class="d1"><td colspan="2">77.0 1.5</td></tr>
+<tr class="d0"><td colspan="2">78.0 1.5</td></tr>
+<tr class="d1"><td colspan="2">79.0 1.5</td></tr>
+<tr class="d0"><td colspan="2">80.0 1.5</td></tr>
+<tr class="d1"><td colspan="2">81.0 1.5</td></tr>
+<tr class="d0"><td colspan="2">82.0 1.5</td></tr>
+<tr class="d1"><td colspan="2">83.0 1.5</td></tr>
+<tr class="d0"><td colspan="2">84.0 1.5</td></tr>
+<tr class="d1"><td colspan="2">85.0 1.5</td></tr>
+<tr class="d0"><td colspan="2">86.0 1.5</td></tr>
+<tr class="d1"><td colspan="2">87.0 1.5</td></tr>
+<tr class="d0"><td colspan="2">88.0 1.5</td></tr>
+<tr class="d1"><td colspan="2">89.0 1.5</td></tr>
+<tr class="d0"><td colspan="2">90.0 1.5</td></tr>
+<tr class="d1"><td colspan="2">91.0 1.5</td></tr>
+<tr class="d0"><td colspan="2">92.0 1.5</td></tr>
+<tr class="d1"><td colspan="2">93.0 1.5</td></tr>
+<tr class="d0"><td colspan="2">94.0 1.5</td></tr>
+<tr class="d1"><td colspan="2">95.0 1.5</td></tr>
+<tr class="d0"><td colspan="2">96.0 1.5</td></tr>
+<tr class="d1"><td colspan="2">97.0 1.5</td></tr>
+<tr class="d0"><td colspan="2">98.0 1.5</td></tr>
+<tr class="d1"><td colspan="2">99.0 1.5</td></tr></table>
-<b>Picard log</b><hr/>
-<pre>## executing java -Xmx2g -jar /udd/rerla/rgalaxy/tool-data/shared/jars/MarkDuplicates.jar I=/dev/shm/tmpk9pvdq/database/files/000/dataset_1.dat VALIDATION_STRINGENCY=LENIENT O=/dev/shm/tmpk9pvdq/database/files/000/dataset_2.dat READ_NAME_REGEX="[a-zA-Z0-9]+:[0-9]:([0-9]+):([0-9]+):([0-9]+).*" ASSUME_SORTED=true M=/udd/rerla/rgalaxy/database/job_working_directory/2/dataset_3_files/rgPicardMarkDupsout.txt OPTICAL_DUPLICATE_PIXEL_DISTANCE=100 returned status 0 and log (stdout/stderr) records:
-[Fri Apr 22 22:31:46 EDT 2011] net.sf.picard.sam.MarkDuplicates INPUT=/dev/shm/tmpk9pvdq/database/files/000/dataset_1.dat OUTPUT=/dev/shm/tmpk9pvdq/database/files/000/dataset_2.dat METRICS_FILE=/udd/rerla/rgalaxy/database/job_working_directory/2/dataset_3_files/rgPicardMarkDupsout.txt ASSUME_SORTED=true READ_NAME_REGEX=[a-zA-Z0-9]+:[0-9]:([0-9]+):([0-9]+):([0-9]+).* OPTICAL_DUPLICATE_PIXEL_DISTANCE=100 VALIDATION_STRINGENCY=LENIENT REMOVE_DUPLICATES=false MAX_SEQUENCES_FOR_DISK_READ_ENDS_MAP=50000 MAX_FILE_HANDLES_FOR_READ_ENDS_MAP=8000 TMP_DIR=/tmp/rerla VERBOSITY=INFO QUIET=false COMPRESSION_LEVEL=5 MAX_RECORDS_IN_RAM=500000 CREATE_INDEX=false CREATE_MD5_FILE=false
-INFO 2011-04-22 22:31:46 MarkDuplicates Start of doWork freeMemory: 8633664; totalMemory: 9109504; maxMemory: 1908932608
-INFO 2011-04-22 22:31:46 MarkDuplicates Reading input file and constructing read end information.
-INFO 2011-04-22 22:31:46 MarkDuplicates Will retain up to 7575129 data points before spilling to disk.
-INFO 2011-04-22 22:31:46 MarkDuplicates Read 7 records. 0 pairs never matched.
-INFO 2011-04-22 22:31:46 MarkDuplicates After buildSortedReadEndLists freeMemory: 8197920; totalMemory: 130351104; maxMemory: 1908932608
-INFO 2011-04-22 22:31:46 MarkDuplicates Will retain up to 59654144 duplicate indices before spilling to disk.
-INFO 2011-04-22 22:31:47 MarkDuplicates Traversing read pair information and detecting duplicates.
-INFO 2011-04-22 22:31:47 MarkDuplicates Traversing fragment information and detecting duplicates.
-INFO 2011-04-22 22:31:47 MarkDuplicates Sorting list of duplicate records.
-INFO 2011-04-22 22:31:47 MarkDuplicates After generateDuplicateIndexes freeMemory: 129603512; totalMemory: 607649792; maxMemory: 1908932608
-INFO 2011-04-22 22:31:47 MarkDuplicates Marking 3 records as duplicates.
-INFO 2011-04-22 22:31:47 MarkDuplicates Found 0 optical duplicate clusters.
-INFO 2011-04-22 22:31:48 MarkDuplicates Before output close freeMemory: 129348680; totalMemory: 607649792; maxMemory: 1908932608
-INFO 2011-04-22 22:31:48 MarkDuplicates After output close freeMemory: 129348440; totalMemory: 607649792; maxMemory: 1908932608
-[Fri Apr 22 22:31:48 EDT 2011] net.sf.picard.sam.MarkDuplicates done.
+<b>Picard Tool Run Log</b><hr/>
+<pre>Thu, 12 May 2011 14:34:29 INFO
+ ## executing java -Xmx2g -jar /udd/rerla/galaxy-central/tool-data/shared/jars/MarkDuplicates.jar VALIDATION_STRINGENCY=LENIENT ASSUME_SORTED=true INPUT=/tmp/6729253.1.all.q/tmpM5wI_h/database/files/001/dataset_1097.dat OUTPUT=/tmp/6729253.1.all.q/tmpM5wI_h/database/files/001/dataset_1098.dat METRICS_FILE=/udd/rerla/galaxy-central/database/job_working_directory/1032/dataset_1099_files/MarkDuplicates.metrics.txt REMOVE_DUPLICATES=true READ_NAME_REGEX="[a-zA-Z0-9]+:[0-9]:([0-9]+):([0-9]+):([0-9]+).*" OPTICAL_DUPLICATE_PIXEL_DISTANCE=100 returned status 0 and stderr:
+[Thu May 12 14:34:28 EDT 2011] net.sf.picard.sam.MarkDuplicates INPUT=/tmp/6729253.1.all.q/tmpM5wI_h/database/files/001/dataset_1097.dat OUTPUT=/tmp/6729253.1.all.q/tmpM5wI_h/database/files/001/dataset_1098.dat METRICS_FILE=/udd/rerla/galaxy-central/database/job_working_directory/1032/dataset_1099_files/MarkDuplicates.metrics.txt REMOVE_DUPLICATES=true ASSUME_SORTED=true READ_NAME_REGEX=[a-zA-Z0-9]+:[0-9]:([0-9]+):([0-9]+):([0-9]+).* OPTICAL_DUPLICATE_PIXEL_DISTANCE=100 VALIDATION_STRINGENCY=LENIENT MAX_SEQUENCES_FOR_DISK_READ_ENDS_MAP=50000 MAX_FILE_HANDLES_FOR_READ_ENDS_MAP=8000 TMP_DIR=/tmp/rerla VERBOSITY=INFO QUIET=false COMPRESSION_LEVEL=5 MAX_RECORDS_IN_RAM=500000 CREATE_INDEX=false CREATE_MD5_FILE=false
+INFO 2011-05-12 14:34:28 MarkDuplicates Start of doWork freeMemory: 8644632; totalMemory: 9109504; maxMemory: 1908932608
+INFO 2011-05-12 14:34:28 MarkDuplicates Reading input file and constructing read end information.
+INFO 2011-05-12 14:34:28 MarkDuplicates Will retain up to 7575129 data points before spilling to disk.
+INFO 2011-05-12 14:34:28 MarkDuplicates Read 7 records. 0 pairs never matched.
+INFO 2011-05-12 14:34:29 MarkDuplicates After buildSortedReadEndLists freeMemory: 8316168; totalMemory: 130351104; maxMemory: 1908932608
+INFO 2011-05-12 14:34:29 MarkDuplicates Will retain up to 59654144 duplicate indices before spilling to disk.
+INFO 2011-05-12 14:34:29 MarkDuplicates Traversing read pair information and detecting duplicates.
+INFO 2011-05-12 14:34:29 MarkDuplicates Traversing fragment information and detecting duplicates.
+INFO 2011-05-12 14:34:29 MarkDuplicates Sorting list of duplicate records.
+INFO 2011-05-12 14:34:29 MarkDuplicates After generateDuplicateIndexes freeMemory: 129615120; totalMemory: 607649792; maxMemory: 1908932608
+INFO 2011-05-12 14:34:29 MarkDuplicates Marking 3 records as duplicates.
+INFO 2011-05-12 14:34:29 MarkDuplicates Found 0 optical duplicate clusters.
+INFO 2011-05-12 14:34:29 MarkDuplicates Before output close freeMemory: 128997520; totalMemory: 607649792; maxMemory: 1908932608
+INFO 2011-05-12 14:34:29 MarkDuplicates After output close freeMemory: 128997280; totalMemory: 607649792; maxMemory: 1908932608
+[Thu May 12 14:34:29 EDT 2011] net.sf.picard.sam.MarkDuplicates done.
Runtime.totalMemory()=607649792
</pre><hr/>The freely available <a href="http://picard.sourceforge.net/command-line-overview.shtml">Picard software</a>
-generated all outputs reported here, using this command line:<br/>
-<pre>java -Xmx2g -jar /udd/rerla/rgalaxy/tool-data/shared/jars/MarkDuplicates.jar I=/dev/shm/tmpk9pvdq/database/files/000/dataset_1.dat VALIDATION_STRINGENCY=LENIENT O=/dev/shm/tmpk9pvdq/database/files/000/dataset_2.dat READ_NAME_REGEX="[a-zA-Z0-9]+:[0-9]:([0-9]+):([0-9]+):([0-9]+).*" ASSUME_SORTED=true M=/udd/rerla/rgalaxy/database/job_working_directory/2/dataset_3_files/rgPicardMarkDupsout.txt OPTICAL_DUPLICATE_PIXEL_DISTANCE=100</pre>
-</div></body></html>
+generated all outputs reported here running as a <a href="http://getgalaxy.org">Galaxy</a> tool</div></body></html>
http://bitbucket.org/galaxy/galaxy-central/changeset/e8531528b65c/
changeset: r5556:e8531528b65c
user: fubar
date: 2011-05-13 14:32:35
summary: branch merge
affected #: 7 files (7.8 KB)
--- a/lib/galaxy/tools/__init__.py Thu May 12 16:53:11 2011 -0400
+++ b/lib/galaxy/tools/__init__.py Fri May 13 08:32:35 2011 -0400
@@ -917,7 +917,7 @@
else:
input.visit_inputs( "", value[input.name], callback )
- def handle_input( self, trans, incoming ):
+ def handle_input( self, trans, incoming, history=None ):
"""
Process incoming parameters for this tool from the dict `incoming`,
update the tool state (or create if none existed), and either return
@@ -966,7 +966,7 @@
return "tool_form.mako", dict( errors=errors, tool_state=state, incoming=incoming, error_message=error_message )
# If we've completed the last page we can execute the tool
elif state.page == self.last_page:
- _, out_data = self.execute( trans, incoming=params )
+ _, out_data = self.execute( trans, incoming=params, history=history )
try:
assert isinstance( out_data, odict )
return 'tool_executed.mako', dict( out_data=out_data )
--- a/lib/galaxy/visualization/tracks/data_providers.py Thu May 12 16:53:11 2011 -0400
+++ b/lib/galaxy/visualization/tracks/data_providers.py Fri May 13 08:32:35 2011 -0400
@@ -395,13 +395,22 @@
filter_col = 8
if isinstance( self.original_dataset.datatype, Gff ):
# Can filter by score and GTF attributes.
- filters = [ { 'name': 'Score', 'type': 'int', 'index': filter_col } ]
+ filters = [ { 'name': 'Score',
+ 'type': 'int',
+ 'index': filter_col,
+ 'tool_id': 'Filter1',
+ 'tool_exp_name': 'c5' } ]
filter_col += 1
if isinstance( self.original_dataset.datatype, Gtf ):
# Create filters based on dataset metadata.
for name, a_type in self.original_dataset.metadata.attribute_types.items():
if a_type in [ 'int', 'float' ]:
- filters.append( { 'name': name, 'type': a_type, 'index': filter_col } )
+ filters.append(
+ { 'name': name,
+ 'type': a_type,
+ 'index': filter_col,
+ 'tool_id': 'gff_filter_by_attribute',
+ 'tool_exp_name': name } )
filter_col += 1
'''
@@ -426,7 +435,12 @@
'''
elif isinstance( self.original_dataset.datatype, Bed ):
# Can filter by score column only.
- filters = [ { 'name': 'Score', 'type': 'int', 'index': filter_col } ]
+ filters = [ { 'name': 'Score',
+ 'type': 'int',
+ 'index': filter_col,
+ 'tool_id': 'Filter1',
+ 'tool_exp_name': 'c5'
+ } ]
return filters
--- a/lib/galaxy/web/controllers/tracks.py Thu May 12 16:53:11 2011 -0400
+++ b/lib/galaxy/web/controllers/tracks.py Fri May 13 08:32:35 2011 -0400
@@ -26,7 +26,8 @@
NO_CONVERTER = "no converter",
NO_TOOL = "no tool",
DATA = "data",
- ERROR = "error"
+ ERROR = "error",
+ OK = "ok"
)
class NameColumn( grids.TextColumn ):
@@ -643,13 +644,60 @@
@web.expose
def list_tracks( self, trans, **kwargs ):
return self.tracks_grid( trans, **kwargs )
+
+ @web.expose
+ def run_tool( self, trans, tool_id, target_dataset_id, **kwargs ):
+ """
+ Run a tool. This method serves as a general purpose way to run tools asynchronously.
+ """
+
+ #
+ # Set target history (the history that tool will use for outputs) using
+ # target dataset. If user owns dataset, put new data in original
+ # dataset's history; if user does not own dataset (and hence is accessing
+ # dataset via sharing), put new data in user's current history.
+ #
+ target_dataset = self.get_dataset( trans, target_dataset_id, check_ownership=False, check_accessible=True )
+ if target_dataset.history.user == trans.user:
+ target_history = target_dataset.history
+ else:
+ target_history = trans.get_history( create=True )
+
+ # HACK: tools require unencoded parameters but kwargs are typically
+ # encoded, so try decoding all parameter values.
+ for key, value in kwargs.items():
+ try:
+ value = trans.security.decode_id( value )
+ kwargs[ key ] = value
+ except:
+ pass
+
+ #
+ # Execute tool.
+ #
+ tool = trans.app.toolbox.tools_by_id.get( tool_id, None )
+ if not tool:
+ return messages.NO_TOOL
+
+ # HACK: add run button so that tool.handle_input will run tool.
+ kwargs['runtool_btn'] = 'Execute'
+ params = util.Params( kwargs, sanitize = False )
+ print target_history.name
+ template, vars = tool.handle_input( trans, params.__dict__, history=target_history )
+
+ # TODO: parse output and send response.
+ return messages.OK
@web.expose
- def run_tool( self, trans, dataset_id, tool_id, chrom=None, low=None, high=None, **kwargs ):
- """
- Run a tool on a subset of input data to produce a new output dataset that
- corresponds to a dataset that a user is currently viewing.
+ def rerun_tool( self, trans, dataset_id, tool_id, chrom=None, low=None, high=None, **kwargs ):
"""
+ Rerun a tool to produce a new output dataset that corresponds to a
+ dataset that a user is currently viewing.
+ """
+
+ #
+ # TODO: refactor to use same code as run_tool.
+ #
# Run tool on region if region is specificied.
run_on_region = False
--- a/static/scripts/packed/trackster.js Thu May 12 16:53:11 2011 -0400
+++ b/static/scripts/packed/trackster.js Fri May 13 08:32:35 2011 -0400
@@ -1,1 +1,1 @@
-var class_module=function(b,a){var c=function(){var f=arguments[0];for(var e=1;e<arguments.length;e++){var d=arguments[e];for(key in d){f[key]=d[key]}}return f};a.extend=c};var BEFORE=1001,CONTAINS=1002,OVERLAP_START=1003,OVERLAP_END=1004,CONTAINED_BY=1005,AFTER=1006;var compute_overlap=function(e,b){var g=e[0],f=e[1],d=b[0],c=b[1],a;if(g<d){if(f<d){a=BEFORE}else{if(f<=c){a=OVERLAP_START}else{a=CONTAINS}}}else{if(g>c){a=AFTER}else{if(f<=c){a=CONTAINED_BY}else{a=OVERLAP_END}}}return a};var is_overlap=function(c,b){var a=compute_overlap(c,b);return(a!==BEFORE&&a!==AFTER)};var trackster_module=function(f,S){var n=f("class").extend,p=f("slotting"),H=f("painters");var Y=function(Z,aa){this.document=Z;this.default_font=aa!==undefined?aa:"9px Monaco, Lucida Console, monospace";this.dummy_canvas=this.new_canvas();this.dummy_context=this.dummy_canvas.getContext("2d");this.dummy_context.font=this.default_font;this.char_width_px=this.dummy_context.measureText("A").width;this.patterns={};this.load_pattern("right_strand","/visualization/strand_right.png");this.load_pattern("left_strand","/visualization/strand_left.png");this.load_pattern("right_strand_inv","/visualization/strand_right_inv.png");this.load_pattern("left_strand_inv","/visualization/strand_left_inv.png")};n(Y.prototype,{load_pattern:function(Z,ad){var aa=this.patterns,ab=this.dummy_context,ac=new Image();ac.src=image_path+ad;ac.onload=function(){aa[Z]=ab.createPattern(ac,"repeat")}},get_pattern:function(Z){return this.patterns[Z]},new_canvas:function(){var Z=this.document.createElement("canvas");if(window.G_vmlCanvasManager){G_vmlCanvasManager.initElement(Z)}Z.manager=this;return Z}});var B=function(Z,aa){Z.bind("drag",{handle:aa,relative:true},function(ae,af){var ad=$(this).parent();var ac=ad.children();var ab;for(ab=0;ab<ac.length;ab++){if(af.offsetY<$(ac.get(ab)).position().top){break}}if(ab===ac.length){if(this!==ac.get(ab-1)){ad.append(this)}}else{if(this!==ac.get(ab)){$(this).insertBefore(ac.get(ab))}}})};S.sortable=B;var C=9,z=10,N=C+2,w=100,E=12000,L=200,s=10,G=5000,t=100,m="There was an error in indexing this dataset. ",F="A converter for this dataset is not installed. Please check your datatypes_conf.xml file.",A="No data for this chrom/contig.",q="Currently indexing... please wait",v="Tool cannot be rerun: ",a="Loading data...",T="Ready for display",d=10,r=5,y=5;function u(Z){return Math.round(Z*1000)/1000}var c=function(Z){this.num_elements=Z;this.clear()};n(c.prototype,{get:function(aa){var Z=this.key_ary.indexOf(aa);if(Z!==-1){this.move_key_to_end(aa,Z)}return this.obj_cache[aa]},set:function(aa,ab){if(!this.obj_cache[aa]){if(this.key_ary.length>=this.num_elements){var Z=this.key_ary.shift();delete this.obj_cache[Z]}this.key_ary.push(aa)}this.obj_cache[aa]=ab;return ab},move_key_to_end:function(aa,Z){this.key_ary.splice(Z,1);this.key_ary.push(aa)},clear:function(){this.obj_cache={};this.key_ary=[]},size:function(){return this.key_ary.length}});var M=function(aa,Z,ab){c.call(this,aa);this.track=Z;this.subset=(ab!==undefined?ab:true)};n(M.prototype,c.prototype,{load_data:function(ah,ai,ad,ag,aa,af){var ac={chrom:ah,low:ai,high:ad,mode:ag,resolution:aa,dataset_id:this.track.dataset_id,hda_ldda:this.track.hda_ldda};$.extend(ac,af);if(this.track.filters_manager){var aj=[];var Z=this.track.filters_manager.filters;for(var ae=0;ae<Z.length;ae++){aj[aj.length]=Z[ae].name}ac.filter_cols=JSON.stringify(aj)}var ab=this;return $.getJSON(this.track.data_url,ac,function(ak){ab.set_data(ai,ad,ag,ak)})},get_data:function(ab,Z,ae,af,aa,ad){var ac=this.get(this.gen_key(Z,ae,af));if(ac){return ac}ac=this.load_data(ab,Z,ae,af,aa,ad);this.set_data(Z,ae,af,ac);return ac},set_data:function(aa,ab,ac,Z){return this.set(this.gen_key(aa,ab,ac),Z)},gen_key:function(Z,ab,ac){var aa=Z+"_"+ab+"_"+ac;return aa},split_key:function(Z){return Z.split("_")}});var D=function(aa,Z,ab){M.call(this,aa,Z,ab)};n(D.prototype,M.prototype,c.prototype,{load_data:function(ab,Z,ad,ae,aa,ac){if(aa>1){return}return M.prototype.load_data.call(this,ab,Z,ad,ae,aa,ac)}});var X=function(Z,ac,ab,aa,ad){this.container=Z;this.chrom=null;this.vis_id=ab;this.dbkey=aa;this.title=ac;this.tracks=[];this.label_tracks=[];this.max_low=0;this.max_high=0;this.num_tracks=0;this.track_id_counter=0;this.zoom_factor=3;this.min_separation=30;this.has_changes=false;this.init(ad);this.canvas_manager=new Y(Z.get(0).ownerDocument);this.reset()};n(X.prototype,{init:function(ac){var ab=this.container,Z=this;this.top_container=$("<div/>").addClass("top-container").appendTo(ab);this.content_div=$("<div/>").addClass("content").css("position","relative").appendTo(ab);this.bottom_container=$("<div/>").addClass("bottom-container").appendTo(ab);this.top_labeltrack=$("<div/>").addClass("top-labeltrack").appendTo(this.top_container);this.viewport_container=$("<div/>").addClass("viewport-container").addClass("viewport-container").appendTo(this.content_div);this.intro_div=$("<div/>").addClass("intro").text("Select a chrom from the dropdown below").hide();this.nav_labeltrack=$("<div/>").addClass("nav-labeltrack").appendTo(this.bottom_container);this.nav_container=$("<div/>").addClass("nav-container").prependTo(this.top_container);this.nav=$("<div/>").addClass("nav").appendTo(this.nav_container);this.overview=$("<div/>").addClass("overview").appendTo(this.bottom_container);this.overview_viewport=$("<div/>").addClass("overview-viewport").appendTo(this.overview);this.overview_close=$("<a href='javascript:void(0);'>Close Overview</a>").addClass("overview-close").hide().appendTo(this.overview_viewport);this.overview_highlight=$("<div/>").addClass("overview-highlight").hide().appendTo(this.overview_viewport);this.overview_box_background=$("<div/>").addClass("overview-boxback").appendTo(this.overview_viewport);this.overview_box=$("<div/>").addClass("overview-box").appendTo(this.overview_viewport);this.default_overview_height=this.overview_box.height();this.nav_controls=$("<div/>").addClass("nav-controls").appendTo(this.nav);this.chrom_select=$("<select/>").attr({name:"chrom"}).css("width","15em").addClass("no-autocomplete").append("<option value=''>Loading</option>").appendTo(this.nav_controls);var aa=function(ad){if(ad.type==="focusout"||(ad.keyCode||ad.which)===13||(ad.keyCode||ad.which)===27){if((ad.keyCode||ad.which)!==27){Z.go_to($(this).val())}$(this).hide();$(this).val("");Z.location_span.show();Z.chrom_select.show()}};this.nav_input=$("<input/>").addClass("nav-input").hide().bind("keyup focusout",aa).appendTo(this.nav_controls);this.location_span=$("<span/>").addClass("location").appendTo(this.nav_controls);this.location_span.bind("click",function(){Z.location_span.hide();Z.chrom_select.hide();Z.nav_input.val(Z.chrom+":"+Z.low+"-"+Z.high);Z.nav_input.css("display","inline-block");Z.nav_input.select();Z.nav_input.focus()});if(this.vis_id!==undefined){this.hidden_input=$("<input/>").attr("type","hidden").val(this.vis_id).appendTo(this.nav_controls)}this.zo_link=$("<a id='zoom-out' />").click(function(){Z.zoom_out();Z.redraw()}).appendTo(this.nav_controls);this.zi_link=$("<a id='zoom-in' />").click(function(){Z.zoom_in();Z.redraw()}).appendTo(this.nav_controls);this.load_chroms({low:0},ac);this.chrom_select.bind("change",function(){Z.change_chrom(Z.chrom_select.val())});this.intro_div.show();this.content_div.bind("click",function(ad){$(this).find("input").trigger("blur")});this.content_div.bind("dblclick",function(ad){Z.zoom_in(ad.pageX,this.viewport_container)});this.overview_box.bind("dragstart",function(ad,ae){this.current_x=ae.offsetX}).bind("drag",function(ad,af){var ag=af.offsetX-this.current_x;this.current_x=af.offsetX;var ae=Math.round(ag/Z.viewport_container.width()*(Z.max_high-Z.max_low));Z.move_delta(-ae)});this.overview_close.bind("click",function(){for(var ae=0,ad=Z.tracks.length;ae<ad;ae++){Z.tracks[ae].is_overview=false}$(this).siblings().filter("canvas").remove();$(this).parent().css("height",Z.overview_box.height());Z.overview_highlight.hide();$(this).hide()});this.viewport_container.bind("draginit",function(ad,ae){if(ad.clientX>Z.viewport_container.width()-16){return false}}).bind("dragstart",function(ad,ae){ae.original_low=Z.low;ae.current_height=ad.clientY;ae.current_x=ae.offsetX}).bind("drag",function(af,ah){var ad=$(this);var ai=ah.offsetX-ah.current_x;var ae=ad.scrollTop()-(af.clientY-ah.current_height);ad.scrollTop(ae);ah.current_height=af.clientY;ah.current_x=ah.offsetX;var ag=Math.round(ai/Z.viewport_container.width()*(Z.high-Z.low));Z.move_delta(ag)}).bind("mousewheel",function(af,ah,ae,ad){if(ae){var ag=Math.round(-ae/Z.viewport_container.width()*(Z.high-Z.low));Z.move_delta(ag)}});this.top_labeltrack.bind("dragstart",function(ad,ae){return $("<div />").css({height:Z.content_div.height()+Z.top_labeltrack.height()+Z.nav_labeltrack.height()+1,top:"0px",position:"absolute","background-color":"#ccf",opacity:0.5,"z-index":1000}).appendTo($(this))}).bind("drag",function(ah,ai){$(ai.proxy).css({left:Math.min(ah.pageX,ai.startX),width:Math.abs(ah.pageX-ai.startX)});var ae=Math.min(ah.pageX,ai.startX)-Z.container.offset().left,ad=Math.max(ah.pageX,ai.startX)-Z.container.offset().left,ag=(Z.high-Z.low),af=Z.viewport_container.width();Z.update_location(Math.round(ae/af*ag)+Z.low,Math.round(ad/af*ag)+Z.low)}).bind("dragend",function(ai,aj){var ae=Math.min(ai.pageX,aj.startX),ad=Math.max(ai.pageX,aj.startX),ag=(Z.high-Z.low),af=Z.viewport_container.width(),ah=Z.low;Z.low=Math.round(ae/af*ag)+ah;Z.high=Math.round(ad/af*ag)+ah;$(aj.proxy).remove();Z.redraw()});this.add_label_track(new W(this,this.top_labeltrack));this.add_label_track(new W(this,this.nav_labeltrack));$(window).bind("resize",function(){Z.resize_window()});$(document).bind("redraw",function(){Z.redraw()});this.reset();$(window).trigger("resize")},update_location:function(Z,aa){this.location_span.text(commatize(Z)+" - "+commatize(aa));this.nav_input.val(this.chrom+":"+commatize(Z)+"-"+commatize(aa))},load_chroms:function(aa,ab){aa.num=t;$.extend(aa,(this.vis_id!==undefined?{vis_id:this.vis_id}:{dbkey:this.dbkey}));var Z=this;$.ajax({url:chrom_url,data:aa,dataType:"json",success:function(ad){if(ad.chrom_info.length===0){alert("Invalid chromosome: "+aa.chrom);return}if(ad.reference){Z.add_label_track(new x(Z))}Z.chrom_data=ad.chrom_info;var ag='<option value="">Select Chrom/Contig</option>';for(var af=0,ac=Z.chrom_data.length;af<ac;af++){var ae=Z.chrom_data[af].chrom;ag+='<option value="'+ae+'">'+ae+"</option>"}if(ad.prev_chroms){ag+='<option value="previous">Previous '+t+"</option>"}if(ad.next_chroms){ag+='<option value="next">Next '+t+"</option>"}Z.chrom_select.html(ag);if(ab){ab()}Z.chrom_start_index=ad.start_index},error:function(){alert("Could not load chroms for this dbkey:",Z.dbkey)}})},change_chrom:function(ad,aa,af){if(!ad||ad==="None"){return}var ac=this;if(ad==="previous"){ac.load_chroms({low:this.chrom_start_index-t});return}if(ad==="next"){ac.load_chroms({low:this.chrom_start_index+t});return}var ae=$.grep(ac.chrom_data,function(ah,ai){return ah.chrom===ad})[0];if(ae===undefined){ac.load_chroms({chrom:ad},function(){ac.change_chrom(ad,aa,af)});return}else{if(ad!==ac.chrom){ac.chrom=ad;if(!ac.chrom){ac.intro_div.show()}else{ac.intro_div.hide()}ac.chrom_select.val(ac.chrom);ac.max_high=ae.len-1;ac.reset();ac.redraw(true);for(var ag=0,Z=ac.tracks.length;ag<Z;ag++){var ab=ac.tracks[ag];if(ab.init){ab.init()}}}if(aa!==undefined&&af!==undefined){ac.low=Math.max(aa,0);ac.high=Math.min(af,ac.max_high)}ac.reset_overview();ac.redraw()}},go_to:function(ad){var ah=this,Z,ac,aa=ad.split(":"),af=aa[0],ag=aa[1];if(ag!==undefined){try{var ae=ag.split("-");Z=parseInt(ae[0].replace(/,/g,""),10);ac=parseInt(ae[1].replace(/,/g,""),10)}catch(ab){return false}}ah.change_chrom(af,Z,ac)},move_fraction:function(ab){var Z=this;var aa=Z.high-Z.low;this.move_delta(ab*aa)},move_delta:function(ab){var Z=this;var aa=Z.high-Z.low;if(Z.low-ab<Z.max_low){Z.low=Z.max_low;Z.high=Z.max_low+aa}else{if(Z.high-ab>Z.max_high){Z.high=Z.max_high;Z.low=Z.max_high-aa}else{Z.high-=ab;Z.low-=ab}}Z.redraw()},add_track:function(Z){Z.view=this;Z.track_id=this.track_id_counter;this.tracks.push(Z);if(Z.init){Z.init()}Z.container_div.attr("id","track_"+Z.track_id);B(Z.container_div,".draghandle");this.track_id_counter+=1;this.num_tracks+=1},add_label_track:function(Z){Z.view=this;this.label_tracks.push(Z)},remove_track:function(Z){this.has_changes=true;Z.container_div.fadeOut("slow",function(){$(this).remove()});delete this.tracks[this.tracks.indexOf(Z)];this.num_tracks-=1},reset:function(){this.low=this.max_low;this.high=this.max_high;this.viewport_container.find(".yaxislabel").remove()},redraw:function(ag){var af=this.high-this.low,ae=this.low,aa=this.high;if(ae<this.max_low){ae=this.max_low}if(aa>this.max_high){aa=this.max_high}if(this.high!==0&&af<this.min_separation){aa=ae+this.min_separation}this.low=Math.floor(ae);this.high=Math.ceil(aa);this.resolution=Math.pow(10,Math.ceil(Math.log((this.high-this.low)/L)/Math.LN10));this.zoom_res=Math.pow(s,Math.max(0,Math.ceil(Math.log(this.resolution,s)/Math.log(s))));var Z=(this.low/(this.max_high-this.max_low)*this.overview_viewport.width())||0;var ad=((this.high-this.low)/(this.max_high-this.max_low)*this.overview_viewport.width())||0;var ah=13;this.overview_box.css({left:Z,width:Math.max(ah,ad)}).show();if(ad<ah){this.overview_box.css("left",Z-(ah-ad)/2)}if(this.overview_highlight){this.overview_highlight.css({left:Z,width:ad})}this.update_location(this.low,this.high);if(!ag){for(var ab=0,ac=this.tracks.length;ab<ac;ab++){if(this.tracks[ab]&&this.tracks[ab].enabled){this.tracks[ab].draw()}}for(ab=0,ac=this.label_tracks.length;ab<ac;ab++){this.label_tracks[ab].draw()}}},zoom_in:function(aa,ab){if(this.max_high===0||this.high-this.low<this.min_separation){return}var ac=this.high-this.low,ad=ac/2+this.low,Z=(ac/this.zoom_factor)/2;if(aa){ad=aa/this.viewport_container.width()*(this.high-this.low)+this.low}this.low=Math.round(ad-Z);this.high=Math.round(ad+Z);this.redraw()},zoom_out:function(){if(this.max_high===0){return}var aa=this.high-this.low,ab=aa/2+this.low,Z=(aa*this.zoom_factor)/2;this.low=Math.round(ab-Z);this.high=Math.round(ab+Z);this.redraw()},resize_window:function(){this.viewport_container.height(this.container.height()-this.top_container.height()-this.bottom_container.height());this.nav_container.width(this.container.width());this.redraw()},reset_overview:function(){this.overview_viewport.find("canvas").remove();this.overview_viewport.height(this.default_overview_height);this.overview_box.height(this.default_overview_height);this.overview_close.hide();this.overview_highlight.hide()}});var o=function(ab,af){this.track=ab;this.name=af.name;this.params=[];var am=af.params;for(var ac=0;ac<am.length;ac++){var ah=am[ac],aa=ah.name,al=ah.label,ad=unescape(ah.html),an=ah.value,aj=ah.type;if(aj==="number"){this.params[this.params.length]=new g(aa,al,ad,an,ah.min,ah.max)}else{if(aj=="select"){this.params[this.params.length]=new J(aa,al,ad,an)}else{console.log("WARNING: unrecognized tool parameter type:",aa,aj)}}}this.parent_div=$("<div/>").addClass("dynamic-tool").hide();this.parent_div.bind("drag",function(ap){ap.stopPropagation()}).bind("click",function(ap){ap.stopPropagation()}).bind("dblclick",function(ap){ap.stopPropagation()});var ak=$("<div class='tool-name'>").appendTo(this.parent_div).text(this.name);var ai=this.params;var ag=this;$.each(this.params,function(aq,au){var at=$("<div>").addClass("param-row").appendTo(ag.parent_div);var ap=$("<div>").addClass("param-label").text(au.label).appendTo(at);var ar=$("<div/>").addClass("slider").html(au.html).appendTo(at);ar.find(":input").val(au.value);$("<div style='clear: both;'/>").appendTo(at)});this.parent_div.find("input").click(function(){$(this).select()});var ao=$("<div>").addClass("param-row").appendTo(this.parent_div);var ae=$("<input type='submit'>").attr("value","Run on complete dataset").appendTo(ao);var Z=$("<input type='submit'>").attr("value","Run on visible region").css("margin-left","3em").appendTo(ao);var ag=this;Z.click(function(){ag.run_on_region()});ae.click(function(){ag.run_on_dataset()})};n(o.prototype,{get_param_values_dict:function(){var Z={};this.parent_div.find(":input").each(function(){var aa=$(this).attr("name"),ab=$(this).val();Z[aa]=JSON.stringify(ab)});return Z},get_param_values:function(){var aa=[];var Z={};this.parent_div.find(":input").each(function(){var ab=$(this).attr("name"),ac=$(this).val();if(ab){aa[aa.length]=ac}});return aa},run_on_dataset:function(){var Z=this;Z.run({dataset_id:this.track.original_dataset_id,tool_id:Z.name},function(aa){show_modal(Z.name+" is Running",Z.name+" is running on the complete dataset. Tool outputs are in dataset's history.",{Close:hide_modal})})},run_on_region:function(){var Z={dataset_id:this.track.original_dataset_id,chrom:this.track.view.chrom,low:this.track.view.low,high:this.track.view.high,tool_id:this.name},ab=this.track,aa=Z.tool_id+ab.tool_region_and_parameters_str(Z.chrom,Z.low,Z.high),ac;if(ab.track_type==="FeatureTrack"){ac=new P(aa,view,ab.hda_ldda,undefined,{},{},ab)}this.track.add_track(ac);ac.content_div.text("Starting job.");this.run(Z,function(ad){ac.dataset_id=ad.dataset_id;ac.content_div.text("Running job.");ac.init()})},run:function(aa,ab){$.extend(aa,this.get_param_values_dict());var Z=function(){$.getJSON(run_tool_url,aa,function(ac){if(ac==="no converter"){new_track.container_div.addClass("error");new_track.content_div.text(F)}else{if(ac.error){new_track.container_div.addClass("error");new_track.content_div.text(v+ac.message)}else{if(ac==="pending"){new_track.container_div.addClass("pending");new_track.content_div.text("Converting input data so that it can be easily reused.");setTimeout(Z,2000)}else{ab(ac)}}}})};Z()}});var J=function(aa,Z,ab,ac){this.name=aa;this.label=Z;this.html=ab;this.value=ac};var g=function(ab,aa,ad,ae,ac,Z){J.call(this,ab,aa,ad,ae);this.min=ac;this.max=Z};var h=function(aa,Z,ab){this.name=aa;this.index=Z;this.value=ab};var Q=function(aa,Z){this.name=aa;this.index=Z;this.low=-Number.MAX_VALUE;this.high=Number.MAX_VALUE;this.min=Number.MAX_VALUE;this.max=-Number.MAX_VALUE;this.slider=null;this.slider_label=null};n(Q.prototype,{applies_to:function(Z){if(Z.length>this.index){return true}return false},keep:function(Z){if(!this.applies_to(Z)){return true}var aa=parseInt(Z[this.index]);return(isNaN(aa)||(aa>=this.low&&aa<=this.high))},update_attrs:function(aa){var Z=false;if(!this.applies_to(aa)){return Z}if(aa[this.index]<this.min){this.min=Math.floor(aa[this.index]);Z=true}if(aa[this.index]>this.max){this.max=Math.ceil(aa[this.index]);Z=true}return Z},update_ui_elt:function(){var ab=function(ae,ac){var ad=ac-ae;return(ad<=2?0.01:1)};var aa=this.slider.slider("option","min"),Z=this.slider.slider("option","max");if(this.min<aa||this.max>Z){this.slider.slider("option","min",this.min);this.slider.slider("option","max",this.max);this.slider.slider("option","step",ab(this.min,this.max));this.slider.slider("option","values",[this.min,this.max])}}});var V=function(ab,ah){this.track=ab;this.filters=[];for(var ad=0;ad<ah.length;ad++){var Z=ah[ad];var aa=Z.name,ag=Z.type,ae=Z.index;if(ag==="int"||ag==="float"){this.filters[ad]=new Q(aa,ae)}else{this.filters[ad]=new h(aa,ae,ag)}}var af=function(ai,aj,ak){ai.click(function(){var al=aj.text();max=parseFloat(ak.slider("option","max")),input_size=(max<=1?4:max<=1000000?max.toString().length:6),multi_value=false;if(ak.slider("option","values")){input_size=2*input_size+1;multi_value=true}aj.text("");$("<input type='text'/>").attr("size",input_size).attr("maxlength",input_size).attr("value",al).appendTo(aj).focus().select().click(function(am){am.stopPropagation()}).blur(function(){$(this).remove();aj.text(al)}).keyup(function(aq){if(aq.keyCode===27){$(this).trigger("blur")}else{if(aq.keyCode===13){var ao=ak.slider("option","min"),am=ak.slider("option","max"),ap=function(ar){return(isNaN(ar)||ar>am||ar<ao)},an=$(this).val();if(!multi_value){an=parseFloat(an);if(ap(an)){alert("Parameter value must be in the range ["+ao+"-"+am+"]");return $(this)}}else{an=an.split("-");an=[parseFloat(an[0]),parseFloat(an[1])];if(ap(an[0])||ap(an[1])){alert("Parameter value must be in the range ["+ao+"-"+am+"]");return $(this)}}ak.slider((multi_value?"values":"value"),an)}}})})};this.parent_div=$("<div/>").addClass("filters").hide();this.parent_div.bind("drag",function(ai){ai.stopPropagation()}).bind("click",function(ai){ai.stopPropagation()}).bind("dblclick",function(ai){ai.stopPropagation()}).bind("keydown",function(ai){ai.stopPropagation()});var ac=this;$.each(this.filters,function(ao,aj){var al=$("<div/>").addClass("slider-row").appendTo(ac.parent_div);var ai=$("<div/>").addClass("slider-label").appendTo(al);var aq=$("<span/>").addClass("slider-name").text(aj.name+" ").appendTo(ai);var ak=$("<span/>");var am=$("<span/>").addClass("slider-value").appendTo(ai).append("[").append(ak).append("]");var ap=$("<div/>").addClass("slider").appendTo(al);aj.control_element=$("<div/>").attr("id",aj.name+"-filter-control").appendTo(ap);var an=[0,0];aj.control_element.slider({range:true,min:Number.MAX_VALUE,max:-Number.MIN_VALUE,values:[0,0],slide:function(ar,at){an=at.values;ak.text(at.values[0]+"-"+at.values[1]);setTimeout(function(){if(at.values[0]==an[0]&&at.values[1]==an[1]){var au=at.values;ak.text(au[0]+"-"+au[1]);aj.low=au[0];aj.high=au[1];ac.track.draw(true,true)}},50)},change:function(ar,at){aj.control_element.slider("option","slide").call(aj.control_element,ar,at)}});aj.slider=aj.control_element;aj.slider_label=ak;af(am,ak,aj.control_element);$("<div style='clear: both;'/>").appendTo(al)})};var U=function(Z){this.track=Z.track;this.params=Z.params;this.values={};if(Z.saved_values){this.restore_values(Z.saved_values)}this.onchange=Z.onchange};n(U.prototype,{restore_values:function(Z){var aa=this;$.each(this.params,function(ab,ac){if(Z[ac.key]!==undefined){aa.values[ac.key]=Z[ac.key]}else{aa.values[ac.key]=ac.default_value}})},build_form:function(){var aa=this;var Z=$("<div />");$.each(this.params,function(ae,ac){if(!ac.hidden){var ab="param_"+ae;var aj=$("<div class='form-row' />").appendTo(Z);aj.append($("<label />").attr("for",ab).text(ac.label+":"));if(ac.type==="bool"){aj.append($('<input type="checkbox" />').attr("id",ab).attr("name",ab).attr("checked",aa.values[ac.key]))}else{if(ac.type==="color"){var ag=aa.values[ac.key];var af=$("<input />").attr("id",ab).attr("name",ab).val(ag);var ah=$("<div class='tipsy tipsy-north' style='position: absolute;' />").hide();var ad=$("<div style='background-color: black; padding: 10px;'></div>").appendTo(ah);var ai=$("<div/>").appendTo(ad).farbtastic({width:100,height:100,callback:af,color:ag});$("<div />").append(af).append(ah).appendTo(aj).bind("click",function(ak){ah.css({left:$(this).position().left+($(af).width()/2)-60,top:$(this).position().top+$(this.height)}).show();$(document).bind("click.color-picker",function(){ah.hide();$(document).unbind("click.color-picker")});ak.stopPropagation()})}else{aj.append($("<input />").attr("id",ab).attr("name",ab).val(aa.values[ac.key]))}}}});return Z},update_from_form:function(Z){var ab=this;var aa=false;$.each(this.params,function(ac,ae){if(!ae.hidden){var af="param_"+ac;var ad=Z.find("#"+af).val();if(ae.type==="float"){ad=parseFloat(ad)}else{if(ae.type==="int"){ad=parseInt(ad)}else{if(ae.type==="bool"){ad=Z.find("#"+af).is(":checked")}}}if(ad!==ab.values[ae.key]){ab.values[ae.key]=ad;aa=true}}});if(aa){this.onchange()}}});var b=function(ab,aa,Z){this.index=ab;this.resolution=aa;this.canvas=$("<div class='track-tile'/>").append(Z)};var l=function(ab,aa,Z,ac){b.call(this,ab,aa,Z);this.max_val=ac};var K=function(ab,aa,Z){b.call(this,ab,aa,Z)};var j=function(aa,Z,ad,ab,ac){this.name=aa;this.view=Z;this.parent_element=ad;this.data_url=(ab?ab:default_data_url);this.data_url_extra_params={};this.data_query_wait=(ac?ac:G);this.dataset_check_url=converted_datasets_state_url;this.container_div=$("<div />").addClass("track").css("position","relative");if(!this.hidden){this.header_div=$("<div class='track-header' />").appendTo(this.container_div);if(this.view.editor){this.drag_div=$("<div class='draghandle' />").appendTo(this.header_div)}this.name_div=$("<div class='menubutton popup' />").appendTo(this.header_div);this.name_div.text(this.name);this.name_div.attr("id",this.name.replace(/\s+/g,"-").replace(/[^a-zA-Z0-9\-]/g,"").toLowerCase())}this.content_div=$("<div class='track-content'>").appendTo(this.container_div);this.parent_element.append(this.container_div)};n(j.prototype,{init:function(){var Z=this;Z.enabled=false;Z.tile_cache.clear();Z.data_cache.clear();Z.initial_canvas=undefined;Z.content_div.css("height","auto");Z.container_div.removeClass("nodata error pending");if(!Z.dataset_id){return}$.getJSON(converted_datasets_state_url,{hda_ldda:Z.hda_ldda,dataset_id:Z.dataset_id,chrom:Z.view.chrom},function(aa){if(!aa||aa==="error"||aa.kind==="error"){Z.container_div.addClass("error");Z.content_div.text(m);if(aa.message){var ac=Z.view.tracks.indexOf(Z);var ab=$(" <a href='javascript:void(0);'></a>").text("View error").bind("click",function(){show_modal("Trackster Error","<pre>"+aa.message+"</pre>",{Close:hide_modal})});Z.content_div.append(ab)}}else{if(aa==="no converter"){Z.container_div.addClass("error");Z.content_div.text(F)}else{if(aa==="no data"||(aa.data!==undefined&&(aa.data===null||aa.data.length===0))){Z.container_div.addClass("nodata");Z.content_div.text(A)}else{if(aa==="pending"){Z.container_div.addClass("pending");Z.content_div.text(q);setTimeout(function(){Z.init()},Z.data_query_wait)}else{if(aa.status==="data"){if(aa.valid_chroms){Z.valid_chroms=aa.valid_chroms;Z.make_name_popup_menu()}Z.content_div.text(T);if(Z.view.chrom){Z.content_div.text("");Z.content_div.css("height",Z.height_px+"px");Z.enabled=true;$.when(Z.predraw_init()).done(function(){Z.container_div.removeClass("nodata error pending");Z.draw()})}}}}}}})},predraw_init:function(){},update_name:function(Z){this.old_name=this.name;this.name=Z;this.name_div.text(this.name)},revert_name:function(){this.name=this.old_name;this.name_div.text(this.name)}});var I=function(ah,af,ai){var aa=this,aj=aa.view;this.filters_manager=(ah!==undefined?new V(this,ah):undefined);this.filters_available=false;this.filters_visible=false;this.tool=(af!==undefined&&obj_length(af)>0?new o(this,af):undefined);this.parent_track=ai;this.child_tracks=[];if(aa.hidden){return}if(this.parent_track){this.header_div.find(".draghandle").removeClass("draghandle").addClass("child-track-icon").addClass("icon-button");this.parent_element.addClass("child-track");this.tool=undefined}aa.child_tracks_container=$("<div/>").addClass("child-tracks-container").hide();aa.container_div.append(aa.child_tracks_container);if(this.filters_manager){this.filters_div=this.filters_manager.parent_div;this.header_div.after(this.filters_div)}if(this.tool){this.dynamic_tool_div=this.tool.parent_div;this.header_div.after(this.dynamic_tool_div)}if(aa.display_modes!==undefined){if(aa.mode_div===undefined){aa.mode_div=$("<div class='right-float menubutton popup' />").appendTo(aa.header_div);var ac=(aa.track_config&&aa.track_config.values.mode?aa.track_config.values.mode:aa.display_modes[0]);aa.mode=ac;aa.mode_div.text(ac);var ab=function(ak){aa.mode_div.text(ak);aa.mode=ak;aa.track_config.values.mode=ak;aa.tile_cache.clear();aa.draw()};var Z={};for(var ad=0,ag=aa.display_modes.length;ad<ag;ad++){var ae=aa.display_modes[ad];Z[ae]=function(ak){return function(){ab(ak)}}(ae)}make_popupmenu(aa.mode_div,Z)}else{aa.mode_div.hide()}}this.make_name_popup_menu()};n(I.prototype,j.prototype,{make_name_popup_menu:function(){var aa=this;var Z={};Z["Edit configuration"]=function(){var ag=function(){hide_modal();$(window).unbind("keypress.check_enter_esc")},ae=function(){aa.track_config.update_from_form($(".dialog-box"));hide_modal();$(window).unbind("keypress.check_enter_esc")},af=function(ah){if((ah.keyCode||ah.which)===27){ag()}else{if((ah.keyCode||ah.which)===13){ae()}}};$(window).bind("keypress.check_enter_esc",af);show_modal("Configure Track",aa.track_config.build_form(),{Cancel:ag,OK:ae})};if(aa.filters_available>0){var ad=(aa.filters_div.is(":visible")?"Hide filters":"Show filters");Z[ad]=function(){aa.filters_visible=(aa.filters_div.is(":visible"));aa.filters_div.toggle();aa.make_name_popup_menu()}}if(aa.tool){var ad=(aa.dynamic_tool_div.is(":visible")?"Hide tool":"Show tool");Z[ad]=function(){if(!aa.dynamic_tool_div.is(":visible")){aa.update_name(aa.name+aa.tool_region_and_parameters_str())}else{menu_option_text="Show dynamic tool";aa.revert_name()}aa.dynamic_tool_div.toggle();aa.make_name_popup_menu()}}if(aa.valid_chroms){Z["List chrom/contigs with data"]=function(){show_modal("Chrom/contigs with data","<p>"+aa.valid_chroms.join("<br/>")+"</p>",{Close:function(){hide_modal()}})}}var ab=view;var ac=function(){$("#no-tracks").show()};if(this.parent_track){ab=this.parent_track;ac=function(){}}Z.Remove=function(){ab.remove_track(aa);if(ab.num_tracks===0){ac()}};make_popupmenu(aa.name_div,Z)},draw:function(Z,ab){var at=this.view.low,af=this.view.high,ah=af-at,aj=this.view.container.width(),ad=aj/ah,ak=this.view.resolution,ac=$("<div style='position: relative;'></div>"),al=function(av,aw,au){return av+"_"+aw+"_"+au};if(!ab){this.content_div.children().remove()}this.content_div.append(ac);this.max_height=0;var an=Math.floor(at/ak/L);var ae=[];var ao=0;while((an*L*ak)<af){var ar=al(aj,ad,an);var ag=this.tile_cache.get(ar);var ap=an*L*this.view.resolution;var aa=ap+L*this.view.resolution;if(!Z&&ag){ae[ae.length]=ag;this.show_tile(ag,ac,ap,ad)}else{this.delayed_draw(Z,ar,an,ak,ac,ad,ae)}an+=1;ao++}var ai=this;var aq=setInterval(function(){if(ae.length===ao){clearInterval(aq);if(ab){var ax=ai.content_div.children();var ay=false;for(var aw=ax.length-1,aC=0;aw>=aC;aw--){var av=$(ax[aw]);if(ay){av.remove()}else{if(av.children().length!==0){ay=true}}}}if(ai.track_type=="FeatureTrack"&&ai.mode=="Histogram"){var aB=-1;for(var aw=0;aw<ae.length;aw++){var aE=ae[aw].max_val;if(aE>aB){aB=aE}}for(var aw=0;aw<ae.length;aw++){if(ae[aw].max_val!==aB){var aD=ae[aw];aD.canvas.remove();ai.delayed_draw(true,al(aj,ad,aD.index),aD.index,aD.resolution,ac,ad,[],{max:aB})}}}if(ai.filters_manager){var au=ai.filters_manager.filters;for(var aA=0;aA<au.length;aA++){au[aA].update_ui_elt()}var az=false;if(ai.example_feature){for(var aA=0;aA<au.length;aA++){if(au[aA].applies_to(ai.example_feature)){az=true;break}}}if(ai.filters_available!==az){ai.filters_available=az;if(!ai.filters_available){ai.filters_div.hide()}ai.make_name_popup_menu()}}}},50);for(var am=0;am<this.child_tracks.length;am++){this.child_tracks[am].draw(Z,ab)}},delayed_draw:function(aa,ah,ab,ad,ai,al,aj,ae){var ac=this,af=ab*L*ad,ak=af+L*ad;var ag=function(au,am,ao,an,ar,at,ap){var aq=ac.draw_tile(am,ao,an,at,ap);ac.tile_cache.set(ah,aq);if(aq===undefined){return}ac.show_tile(aq,ar,af,at);aj[aj.length]=aq};var Z=setTimeout(function(){if(af<=ac.view.high&&ak>=ac.view.low){var am=(aa?undefined:ac.tile_cache.get(ah));if(am){ac.show_tile(am,ai,af,al);aj[aj.length]=am}else{$.when(ac.data_cache.get_data(view.chrom,af,ak,ac.mode,ad,ac.data_url_extra_params)).then(function(an){n(an,ae);if(view.reference_track&&al>view.canvas_manager.char_width_px){$.when(view.reference_track.data_cache.get_data(view.chrom,af,ak,ac.mode,ad,view.reference_track.data_url_extra_params)).then(function(ao){ag(Z,an,ad,ab,ai,al,ao)})}else{ag(Z,an,ad,ab,ai,al)}})}}},50)},show_tile:function(ac,af,ad,ag){var aa=this;var ab=this.view.high-this.view.low,ae=(ad-this.view.low)*ag;if(this.left_offset){ae-=this.left_offset}var Z=ac.canvas;Z.css({position:"absolute",top:0,left:ae,height:""});af.append(Z);aa.max_height=Math.max(aa.max_height,Z.height());aa.content_div.css("height",aa.max_height+"px");af.children().css("height",aa.max_height+"px")},set_overview:function(){var Z=this.view;if(this.initial_canvas&&this.is_overview){Z.overview_close.show();Z.overview_viewport.append(this.initial_canvas);Z.overview_highlight.show().height(this.initial_canvas.height());Z.overview_viewport.height(this.initial_canvas.height()+Z.overview_box.height())}$(window).trigger("resize")},tool_region_and_parameters_str:function(ab,Z,ac){var aa=this,ad=(ab!==undefined&&Z!==undefined&&ac!==undefined?ab+":"+Z+"-"+ac:"all");return" - region=["+ad+"], parameters=["+aa.tool.get_param_values().join(", ")+"]"},add_track:function(Z){Z.track_id=this.track_id+"_"+this.child_tracks.length;Z.container_div.attr("id","track_"+Z.track_id);this.child_tracks_container.append(Z.container_div);B(Z.container_div,".child-track-icon");if(!$(this.child_tracks_container).is(":visible")){this.child_tracks_container.show()}this.child_tracks.push(Z);this.view.has_changes=true},remove_track:function(Z){Z.container_div.fadeOut("slow",function(){$(this).remove()})}});var W=function(Z,aa){this.track_type="LabelTrack";this.hidden=true;j.call(this,null,Z,aa);this.container_div.addClass("label-track")};n(W.prototype,j.prototype,{draw:function(){var ab=this.view,ac=ab.high-ab.low,af=Math.floor(Math.pow(10,Math.floor(Math.log(ac)/Math.log(10)))),Z=Math.floor(ab.low/af)*af,ad=this.view.container.width(),aa=$("<div style='position: relative; height: 1.3em;'></div>");while(Z<ab.high){var ae=(Z-ab.low)/ac*ad;aa.append($("<div class='label'>"+commatize(Z)+"</div>").css({position:"absolute",left:ae-1}));Z+=af}this.content_div.children(":first").remove();this.content_div.append(aa)}});var x=function(Z){this.track_type="ReferenceTrack";this.hidden=true;j.call(this,null,Z,Z.top_labeltrack);I.call(this);Z.reference_track=this;this.left_offset=200;this.height_px=12;this.container_div.addClass("reference-track");this.content_div.css("background","none");this.content_div.css("min-height","0px");this.content_div.css("border","none");this.data_url=reference_url;this.data_url_extra_params={dbkey:Z.dbkey};this.data_cache=new D(y,this,false);this.tile_cache=new c(r)};n(x.prototype,I.prototype,{draw_tile:function(ah,ae,aa,aj){var ad=this,ab=L*ae;if(aj>this.view.canvas_manager.char_width_px){if(ah===null){ad.content_div.css("height","0px");return}var ac=this.view.canvas_manager.new_canvas();var ai=ac.getContext("2d");ac.width=Math.ceil(ab*aj+ad.left_offset);ac.height=ad.height_px;ai.font=ai.canvas.manager.default_font;ai.textAlign="center";for(var af=0,ag=ah.length;af<ag;af++){var Z=Math.round(af*aj);ai.fillText(ah[af],Z+ad.left_offset,10)}return new b(aa,ae,ac)}this.content_div.css("height","0px")}});var k=function(ad,ab,ae,Z,ac){var aa=this;this.track_type="LineTrack";this.display_modes=["Histogram","Line","Filled","Intensity"];this.mode="Histogram";j.call(this,ad,ab,ab.viewport_container);I.call(this);this.min_height_px=16;this.max_height_px=400;this.height_px=80;this.hda_ldda=ae;this.dataset_id=Z;this.original_dataset_id=Z;this.data_cache=new M(y,this);this.tile_cache=new c(r);this.track_config=new U({track:this,params:[{key:"color",label:"Color",type:"color",default_value:"black"},{key:"min_value",label:"Min Value",type:"float",default_value:undefined},{key:"max_value",label:"Max Value",type:"float",default_value:undefined},{key:"mode",type:"string",default_value:this.mode,hidden:true},{key:"height",type:"int",default_value:this.height_px,hidden:true}],saved_values:ac,onchange:function(){aa.vertical_range=aa.prefs.max_value-aa.prefs.min_value;$("#linetrack_"+aa.track_id+"_minval").text(aa.prefs.min_value);$("#linetrack_"+aa.track_id+"_maxval").text(aa.prefs.max_value);aa.tile_cache.clear();aa.draw()}});this.prefs=this.track_config.values;this.height_px=this.track_config.values.height;this.vertical_range=this.track_config.values.max_value-this.track_config.values.min_value;this.add_resize_handle()};n(k.prototype,I.prototype,{add_resize_handle:function(){var Z=this;var ac=false;var ab=false;var aa=$("<div class='track-resize'>");$(Z.container_div).hover(function(){ac=true;aa.show()},function(){ac=false;if(!ab){aa.hide()}});aa.hide().bind("dragstart",function(ad,ae){ab=true;ae.original_height=$(Z.content_div).height()}).bind("drag",function(ae,af){var ad=Math.min(Math.max(af.original_height+af.deltaY,Z.min_height_px),Z.max_height_px);$(Z.content_div).css("height",ad);Z.height_px=ad;Z.draw(true)}).bind("dragend",function(ad,ae){Z.tile_cache.clear();ab=false;if(!ac){aa.hide()}Z.track_config.values.height=Z.height_px}).appendTo(Z.container_div)},predraw_init:function(){var Z=this,aa=Z.view.tracks.indexOf(Z);Z.vertical_range=undefined;return $.getJSON(Z.data_url,{stats:true,chrom:Z.view.chrom,low:null,high:null,hda_ldda:Z.hda_ldda,dataset_id:Z.dataset_id},function(ab){Z.container_div.addClass("line-track");var ad=ab.data;if(isNaN(parseFloat(Z.prefs.min_value))||isNaN(parseFloat(Z.prefs.max_value))){Z.prefs.min_value=ad.min;Z.prefs.max_value=ad.max;$("#track_"+aa+"_minval").val(Z.prefs.min_value);$("#track_"+aa+"_maxval").val(Z.prefs.max_value)}Z.vertical_range=Z.prefs.max_value-Z.prefs.min_value;Z.total_frequency=ad.total_frequency;Z.container_div.find(".yaxislabel").remove();var ae=$("<div />").addClass("yaxislabel").attr("id","linetrack_"+aa+"_minval").text(u(Z.prefs.min_value));var ac=$("<div />").addClass("yaxislabel").attr("id","linetrack_"+aa+"_maxval").text(u(Z.prefs.max_value));ac.css({position:"absolute",top:"24px",left:"10px"});ac.prependTo(Z.container_div);ae.css({position:"absolute",bottom:"2px",left:"10px"});ae.prependTo(Z.container_div)})},draw_tile:function(aj,ad,aa,ai){if(this.vertical_range===undefined){return}var ae=aa*L*ad,ac=L*ad,Z=Math.ceil(ac*ai),ag=this.height_px;var ab=this.view.canvas_manager.new_canvas();ab.width=Z,ab.height=ag;var ah=ab.getContext("2d");var af=new H.LinePainter(aj.data,ae,ae+ac,this.prefs,this.mode);af.draw(ah,Z,ag);return new b(ac,ad,ab)}});var e=function(Z,ae,ad,ah,ag,ab,ac,af){var aa=this;this.track_type="FeatureTrack";this.display_modes=["Auto","Histogram","Dense","Squish","Pack"];this.track_config=new U({track:this,params:[{key:"block_color",label:"Block color",type:"color",default_value:"#444"},{key:"label_color",label:"Label color",type:"color",default_value:"black"},{key:"show_counts",label:"Show summary counts",type:"bool",default_value:true},{key:"mode",type:"string",default_value:this.mode,hidden:true},],saved_values:ag,onchange:function(){aa.tile_cache.clear();aa.draw()}});this.prefs=this.track_config.values;j.call(this,Z,ae,ae.viewport_container);I.call(this,ab,ac,af);this.height_px=0;this.container_div.addClass("feature-track");this.hda_ldda=ad;this.dataset_id=ah;this.original_dataset_id=ah;this.show_labels_scale=0.001;this.showing_details=false;this.summary_draw_height=30;this.inc_slots={};this.start_end_dct={};this.tile_cache=new c(d);this.data_cache=new M(20,this);this.left_offset=200;this.painter=H.LinkedFeaturePainter};n(e.prototype,I.prototype,{update_auto_mode:function(Z){if(this.mode=="Auto"){if(Z=="no_detail"){Z="feature spans"}else{if(Z=="summary_tree"){Z="coverage histogram"}}this.mode_div.text("Auto ("+Z+")")}},incremental_slots:function(ad,aa,ac){var ab=this.view.canvas_manager.dummy_context,Z=this.inc_slots[ad];if(!Z||(Z.mode!==ac)){Z=new (p.FeatureSlotter)(ad,ac==="Pack",w,function(ae){return ab.measureText(ae)});Z.mode=ac;this.inc_slots[ad]=Z}return Z.slot_features(aa)},get_summary_tree_data:function(ad,ag,ab,ao){if(ao>ab-ag){ao=ab-ag}var ak=Math.floor((ab-ag)/ao),an=[],ac=0;var ae=0,af=0,aj,am=0,ah=[],al,ai;var aa=function(ar,aq,at,ap){ar[0]=aq+at*ap;ar[1]=aq+(at+1)*ap};while(am<ao&&ae!==ad.length){var Z=false;for(;am<ao&&!Z;am++){aa(ah,ag,am,ak);for(af=ae;af<ad.length;af++){aj=ad[af].slice(1,3);if(is_overlap(aj,ah)){Z=true;break}}if(Z){break}}data_start_index=af;an[an.length]=al=[ah[0],0];for(;af<ad.length;af++){aj=ad[af].slice(1,3);if(is_overlap(aj,ah)){al[1]++}else{break}}if(al[1]>ac){ac=al[1]}am++}return{max:ac,delta:ak,data:an}},draw_tile:function(am,av,az,ai,ac){var ar=this,aB=az*L*av,aa=(az+1)*L*av,ao=aa-aB,at=Math.ceil(ao*ai),aq=this.mode,aF=25,ad=this.left_offset,an,ae;if(aq==="Auto"){if(am.dataset_type==="summary_tree"){aq=am.dataset_type}else{if(am.extra_info==="no_detail"){aq="no_detail"}else{var aE=am.data;if(this.view.high-this.view.low>E){aq="Squish"}else{aq="Pack"}}}this.update_auto_mode(aq)}if(aq==="summary_tree"||aq==="Histogram"){ae=this.summary_draw_height;this.container_div.find(".yaxislabel").remove();var Z=$("<div />").addClass("yaxislabel");Z.text(am.max);Z.css({position:"absolute",top:"22px",left:"10px",color:this.prefs.label_color});Z.prependTo(this.container_div);var ab=this.view.canvas_manager.new_canvas();ab.width=at+ad;ab.height=ae+N;if(am.dataset_type!="summary_tree"){var aj=this.get_summary_tree_data(am.data,aB,aa,200);if(am.max){aj.max=am.max}am=aj}var aC=new H.SummaryTreePainter(am,aB,aa,this.prefs);var au=ab.getContext("2d");au.translate(ad,N);aC.draw(au,at,ae);return new l(az,av,ab,am.max)}var an,ag=1;if(aq==="no_detail"||aq==="Squish"||aq==="Pack"){ag=this.incremental_slots(ai,am.data,aq);an=this.inc_slots[ai].slots}var ah=[];if(am.data){var ak=this.filters_manager.filters;for(var aw=0,ay=am.data.length;aw<ay;aw++){var af=am.data[aw];var ax=false;var al;for(var aA=0,aD=ak.length;aA<aD;aA++){al=ak[aA];al.update_attrs(af);if(!al.keep(af)){ax=true;break}}if(!ax){ah.push(af)}}}var aC=new (this.painter)(ah,aB,aa,this.prefs,aq,ac);var ae=aC.get_required_height(ag)+z;var ab=this.view.canvas_manager.new_canvas();ab.width=at+ad;ab.height=ae;var au=ab.getContext("2d");au.fillStyle=this.prefs.block_color;au.font=au.canvas.manager.default_font;au.textAlign="right";this.container_div.find(".yaxislabel").remove();if(am.message){$(ab).css({"border-top":"1px solid red"});au.fillStyle="red";au.textAlign="left";var ap=au.textBaseline;au.textBaseline="top";au.fillText(am.message,ad,0);au.textBaseline=ap;if(!am.data){return new b(az,av,ab,ae)}}this.example_feature=(am.data.length?am.data[0]:undefined);au.translate(ad,z);aC.draw(au,at,ae,an);return new K(az,av,ab)}});var O=function(ac,aa,ae,Z,ab,ad){e.call(this,ac,aa,ae,Z,ab,ad);this.track_type="VcfTrack";this.painter=H.VariantPainter};n(O.prototype,I.prototype,e.prototype);var R=function(ac,aa,ae,Z,ab,ad){e.call(this,ac,aa,ae,Z,ab,ad);this.track_config=new U({track:this,params:[{key:"block_color",label:"Block color",type:"color",default_value:"#444"},{key:"label_color",label:"Label color",type:"color",default_value:"black"},{key:"show_insertions",label:"Show insertions",type:"bool",default_value:false},{key:"show_differences",label:"Show differences only",type:"bool",default_value:true},{key:"show_counts",label:"Show summary counts",type:"bool",default_value:true},{key:"mode",type:"string",default_value:this.mode,hidden:true},],saved_values:ab,onchange:function(){this.track.tile_cache.clear();this.track.draw()}});this.prefs=this.track_config.values;this.track_type="ReadTrack";this.painter=H.ReadPainter;this.make_name_popup_menu()};n(R.prototype,I.prototype,e.prototype);var P=function(ad,ab,af,Z,ac,ae,aa){e.call(this,ad,ab,af,Z,ac,ae,{},aa);this.track_type="ToolDataFeatureTrack";this.data_url=raw_data_url;this.data_query_wait=1000;this.dataset_check_url=dataset_state_url};n(P.prototype,I.prototype,e.prototype,{predraw_init:function(){var aa=this;var Z=function(){if(aa.data_cache.size()===0){setTimeout(Z,300)}else{aa.data_url=default_data_url;aa.data_query_wait=G;aa.dataset_state_url=converted_datasets_state_url;$.getJSON(aa.dataset_state_url,{dataset_id:aa.dataset_id,hda_ldda:aa.hda_ldda},function(ab){})}};Z()}});S.View=X;S.LineTrack=k;S.FeatureTrack=e;S.ReadTrack=R};var slotting_module=function(c,b){var e=c("class").extend;var d=2,a=5;b.FeatureSlotter=function(j,h,f,g){this.slots={};this.start_end_dct={};this.w_scale=j;this.include_label=h;this.max_rows=f;this.measureText=g};e(b.FeatureSlotter.prototype,{slot_features:function(m){var p=this.w_scale,s=this.slots,h=this.start_end_dct,y=[],A=[],n=0,z=this.max_rows;for(var w=0,x=m.length;w<x;w++){var l=m[w],o=l[0];if(s[o]!==undefined){n=Math.max(n,s[o]);A.push(s[o])}else{y.push(w)}}var q=function(G,H){for(var F=0;F<=z;F++){var D=false,I=h[F];if(I!==undefined){for(var C=0,E=I.length;C<E;C++){var B=I[C];if(H>B[0]&&G<B[1]){D=true;break}}}if(!D){return F}}return -1};for(var w=0,x=y.length;w<x;w++){var l=m[y[w]],o=l[0],u=l[1],f=l[2],r=l[3],g=Math.floor(u*p),k=Math.ceil(f*p),v=this.measureText(r).width,j;if(r!==undefined&&this.include_label){v+=(d+a);if(g-v>=0){g-=v;j="left"}else{k+=v;j="right"}}var t=q(g,k);if(t>=0){if(h[t]===undefined){h[t]=[]}h[t].push([g,k]);s[o]=t;n=Math.max(n,t)}else{}}return n+1}})};var painters_module=function(j,w){var t=j("class").extend;var o=function(H,z,F,y,E,C){if(C===undefined){C=4}var B=y-z;var A=E-F;var D=Math.floor(Math.sqrt(B*B+A*A)/C);var I=B/D;var G=A/D;var x;for(x=0;x<D;x++,z+=I,F+=G){if(x%2!==0){continue}H.fillRect(z,F,C,1)}};var p=function(A,z,x,D){var C=z-D/2,B=z+D/2,E=x-Math.sqrt(D*3/2);A.beginPath();A.moveTo(C,E);A.lineTo(B,E);A.lineTo(z,x);A.lineTo(C,E);A.strokeStyle=this.fillStyle;A.fill();A.stroke();A.closePath()};var m=function(z,B,x,y,A){this.data=z;this.view_start=B;this.view_end=x;this.prefs=t({},this.default_prefs,y);this.mode=A};m.prototype.default_prefs={};var u=function(z,B,x,y,A){m.call(this,z,B,x,y,A)};u.prototype.default_prefs={show_counts:false};u.prototype.draw=function(M,z,L){var E=this.view_start,O=this.view_end-this.view_start,N=z/O;var J=this.data.data,I=this.data.delta,G=this.data.max,B=L;delta_x_px=Math.ceil(I*N);M.save();for(var C=0,D=J.length;C<D;C++){var H=Math.floor((J[C][0]-E)*N);var F=J[C][1];if(!F){continue}var K=F/G*L;if(F!==0&&K<1){K=1}M.fillStyle=this.prefs.block_color;M.fillRect(H,B-K,delta_x_px,K);var A=4;if(this.prefs.show_counts&&(M.measureText(F).width+A)<delta_x_px){M.fillStyle=this.prefs.label_color;M.textAlign="center";M.fillText(F,H+(delta_x_px/2),10)}}M.restore()};var c=function(x,B,D,E,z){m.call(this,x,B,D,E,z);if(this.prefs.min_value===undefined){var F=Infinity;for(var y=0,A=this.data.length;y<A;y++){F=Math.min(F,this.data[y][1])}this.prefs.min_value=F}if(this.prefs.max_value===undefined){var C=-Infinity;for(var y=0,A=this.data.length;y<A;y++){C=Math.max(C,this.data[y][1])}this.prefs.max_value=C}};c.prototype.default_prefs={min_value:undefined,max_value:undefined,mode:"Histogram",color:"#000",overflow_color:"#F66"};c.prototype.draw=function(O,N,L){var F=false,H=this.prefs.min_value,D=this.prefs.max_value,K=D-H,z=L,A=this.view_start,M=this.view_end-this.view_start,B=N/M,I=this.mode,S=this.data;O.save();var T=Math.round(L+H/K*L);if(I!=="Intensity"){O.fillStyle="#aaa";O.fillRect(0,T,N,1)}O.beginPath();O.fillStyle=this.prefs.color;var R,E,C;if(S.length>1){C=Math.ceil((S[1][0]-S[0][0])*B)}else{C=10}for(var P=0,Q=S.length;P<Q;P++){R=Math.round((S[P][0]-A)*B);E=S[P][1];if(E===null){if(F&&I==="Filled"){O.lineTo(R,z)}F=false;continue}if(E<H){E=H}else{if(E>D){E=D}}if(I==="Histogram"){E=Math.round(E/K*z);O.fillRect(R,T,C,-E)}else{if(I==="Intensity"){E=255-Math.floor((E-H)/K*255);O.fillStyle="rgb("+E+","+E+","+E+")";O.fillRect(R,0,C,z)}else{E=Math.round(z-(E-H)/K*z);if(F){O.lineTo(R,E)}else{F=true;if(I==="Filled"){O.moveTo(R,z);O.lineTo(R,E)}else{O.moveTo(R,E)}}}}}if(I==="Filled"){if(F){O.lineTo(R,T);O.lineTo(0,T)}O.fill()}else{O.stroke()}var x=-1,J=-1;O.fillStyle=this.prefs.overflow_color;var G;for(var P=0,Q=S.length;P<Q;P++){E=S[P][1];R=Math.round((S[P][0]-A)*B);if(J>=0&&(E===null||E<D)){O.fillRect(J,0,G+C-J,2);J=-1}else{if(x>=0&&(E===null||E>H)){O.fillRect(x,L-2,G+C-x,2);x=-1}}if(E!==null&&E>D&&J<0){J=R}else{if(E!==null&&E<H&&x<0){x=R}}G=R}O.restore()};var n=function(z,B,x,y,A){m.call(this,z,B,x,y,A)};n.prototype.default_prefs={block_color:"#FFF",connector_color:"#FFF"};t(n.prototype,{get_required_height:function(y){var x=y_scale=this.get_row_height(),z=this.mode;if(z==="no_detail"||z==="Squish"||z==="Pack"){x=y*y_scale}return x+Math.max(Math.round(y_scale/2),5)},draw:function(J,A,I,F){var D=this.data,G=this.view_start,K=this.view_end;J.save();J.fillStyle=this.prefs.block_color;J.textAlign="right";var N=this.view_end-this.view_start,M=A/N,z=this.get_row_height();for(var C=0,E=D.length;C<E;C++){var L=D[C],B=L[0],x=L[1],y=L[2],H=(F&&F[B]!==undefined?F[B]:null);if((x<K&&y>G)&&(this.mode=="Dense"||H!==null)){this.draw_element(J,this.mode,L,H,G,K,M,z,A)}}J.restore()}});var d=10,h=3,l=5,v=10,f=1,r=3,e=3,a=9,k=2,g="#ccc";var q=function(z,B,x,y,A){n.call(this,z,B,x,y,A)};t(q.prototype,n.prototype,{get_row_height:function(){var y=this.mode,x;if(y==="Dense"){x=d}else{if(y==="no_detail"){x=h}else{if(y==="Squish"){x=l}else{x=v}}}return x},draw_element:function(J,C,R,E,L,ab,af,ag,x){var O=R[0],ad=R[1],V=R[2],M=R[3],W=Math.floor(Math.max(0,(ad-L)*af)),K=Math.ceil(Math.min(x,Math.max(0,(V-L)*af))),U=(C==="Dense"?0:(0+E))*ag,I,Z,N=null,ah=null,A=this.prefs.block_color,Y=this.prefs.label_color;if(C=="Dense"){E=1}if(C==="no_detail"){J.fillStyle=A;J.fillRect(W,U+5,K-W,f)}else{var H=R[4],T=R[5],X=R[6],B=R[7];if(T&&X){N=Math.floor(Math.max(0,(T-L)*af));ah=Math.ceil(Math.min(x,Math.max(0,(X-L)*af)))}var ae,P;if(C==="Squish"||C==="Dense"){ae=1;P=e}else{ae=5;P=a}if(!B){if(R.strand){if(R.strand==="+"){J.fillStyle=J.canvas.manager.get_pattern("right_strand_inv")}else{if(R.strand==="-"){J.fillStyle=J.canvas.manager.get_pattern("left_strand_inv")}}}else{J.fillStyle=A}J.fillRect(W,U,K-W,P)}else{var G,Q;if(C==="Squish"||C==="Dense"){J.fillStyle=g;G=U+Math.floor(e/2)+1;Q=1}else{if(H){var G=U;var Q=P;if(H==="+"){J.fillStyle=J.canvas.manager.get_pattern("right_strand")}else{if(H==="-"){J.fillStyle=J.canvas.manager.get_pattern("left_strand")}}}else{J.fillStyle=g;G+=(e/2)+1;Q=1}}J.fillRect(W,G,K-W,Q);for(var ac=0,z=B.length;ac<z;ac++){var D=B[ac],y=Math.floor(Math.max(0,(D[0]-L)*af)),S=Math.ceil(Math.min(x,Math.max((D[1]-L)*af)));if(y>S){continue}J.fillStyle=A;J.fillRect(y,U+(P-ae)/2+1,S-y,ae);if(N!==undefined&&X>T&&!(y>ah||S<N)){var aa=Math.max(y,N),F=Math.min(S,ah);J.fillRect(aa,U+1,F-aa,P);if(B.length==1&&C=="Pack"){if(H==="+"){J.fillStyle=J.canvas.manager.get_pattern("right_strand_inv")}else{if(H==="-"){J.fillStyle=J.canvas.manager.get_pattern("left_strand_inv")}}if(aa+14<F){aa+=2;F-=2}J.fillRect(aa,U+1,F-aa,P)}}}}if(C==="Pack"&&ad>L){J.fillStyle=Y;if(L===0&&W-J.measureText(M).width<0){J.textAlign="left";J.fillText(M,K+k,U+8)}else{J.textAlign="right";J.fillText(M,W-k,U+8)}J.fillStyle=A}}}});var b=function(z,B,x,y,A){n.call(this,z,B,x,y,A)};t(b.prototype,n.prototype,{draw_element:function(Q,L,F,B,T,z,I,R,O){var F=data[i],H=F[0],P=F[1],A=F[2],K=F[3],D=Math.floor(Math.max(0,(P-T)*I)),G=Math.ceil(Math.min(O,Math.max(0,(A-T)*I))),C=(L==="Dense"?0:(0+B))*R,x,U,y=null,J=null;if(no_label){Q.fillStyle=block_color;Q.fillRect(D+left_offset,C+5,G-D,1)}else{var S=F[4],N=F[5],E=F[6];x=9;U=1;Q.fillRect(D+left_offset,C,G-D,x);if(L!=="Dense"&&K!==undefined&&P>T){Q.fillStyle=label_color;if(T===0&&D-Q.measureText(K).width<0){Q.textAlign="left";Q.fillText(K,G+2+left_offset,C+8)}else{Q.textAlign="right";Q.fillText(K,D-2+left_offset,C+8)}Q.fillStyle=block_color}var M=S+" / "+N;if(P>T&&Q.measureText(M).width<(G-D)){Q.fillStyle="white";Q.textAlign="center";Q.fillText(M,left_offset+D+(G-D)/2,C+8);Q.fillStyle=block_color}}}});var s=function(A,C,x,z,B,y){n.call(this,A,C,x,z,B);this.ref_seq=y};s.prototype.default_prefs=t({},n.prototype.default_prefs,{show_insertions:false});t(s.prototype,n.prototype,{get_row_height:function(){var x,y=this.mode;if(y==="Dense"){x=d}else{if(y==="Squish"){x=l}else{x=v;if(this.prefs.show_insertions){x*=2}}}return x},draw_read:function(T,O,K,Y,z,S,H,E,D){T.textAlign="center";var R=this,y=[Y,z],N=0,U=0,Q=0;ref_seq=this.ref_seq,char_width_px=T.canvas.manager.char_width_px;var ad=[];if((O==="Pack"||this.mode==="Auto")&&E!==undefined&&K>char_width_px){Q=Math.round(K/2)}if(!H){H=[[0,E.length]]}for(var L=0,W=H.length;L<W;L++){var I=H[L],A="MIDNSHP=X"[I[0]],M=I[1];if(A==="H"||A==="S"){N-=M}var F=S+N,ac=Math.floor(Math.max(0,(F-Y)*K)),G=Math.floor(Math.max(0,(F+M-Y)*K));if(ac===G){G+=1}switch(A){case"H":break;case"S":case"M":case"=":if(is_overlap([F,F+M],y)){var P=E.slice(U,U+M);if(Q>0){T.fillStyle=this.prefs.block_color;T.fillRect(ac-Q,D+1,G-ac,9);T.fillStyle=g;for(var aa=0,x=P.length;aa<x;aa++){if(this.prefs.show_differences&&ref_seq){var J=ref_seq[F-Y+aa];if(!J||J.toLowerCase()===P[aa].toLowerCase()){continue}}if(F+aa>=Y&&F+aa<=z){var ab=Math.floor(Math.max(0,(F+aa-Y)*K));T.fillText(P[aa],ab,D+9)}}}else{T.fillStyle=this.prefs.block_color;T.fillRect(ac,D+4,G-ac,e)}}U+=M;N+=M;break;case"N":T.fillStyle=g;T.fillRect(ac-Q,D+5,G-ac,1);N+=M;break;case"D":T.fillStyle="red";T.fillRect(ac-Q,D+4,G-ac,3);N+=M;break;case"P":break;case"I":var X=ac-Q;if(is_overlap([F,F+M],y)){var P=E.slice(U,U+M);if(this.prefs.show_insertions){var C=ac-(G-ac)/2;if((O==="Pack"||this.mode==="Auto")&&E!==undefined&&K>char_width_px){T.fillStyle="yellow";T.fillRect(C-Q,D-9,G-ac,9);ad[ad.length]={type:"triangle",data:[X,D+4,5]};T.fillStyle=g;switch(seq_tile_overlap){case (OVERLAP_START):P=P.slice(Y-F);break;case (OVERLAP_END):P=P.slice(0,F-z);break;case (CONTAINED_BY):break;case (CONTAINS):P=P.slice(Y-F,F-z);break}for(var aa=0,x=P.length;aa<x;aa++){var ab=Math.floor(Math.max(0,(F+aa-Y)*K));T.fillText(P[aa],ab-(G-ac)/2,D)}}else{T.fillStyle="yellow";T.fillRect(C,D+(this.mode!=="Dense"?2:5),G-ac,(O!=="Dense"?e:r))}}else{if((O==="Pack"||this.mode==="Auto")&&E!==undefined&&K>char_width_px){ad[ad.length]={type:"text",data:[P.length,X,D+9]}}else{}}}U+=M;break;case"X":U+=M;break}}T.fillStyle="yellow";var Z,B,ae;for(var V=0;V<ad.length;V++){Z=ad[V];B=Z.type;ae=Z.data;if(B==="text"){T.save();T.font="bold "+T.font;T.fillText(ae[0],ae[1],ae[2]);T.restore()}else{if(B=="triangle"){p(T,ae[0],ae[1],ae[2])}}}},draw_element:function(Q,L,D,A,T,y,H,R,O){var G=D[0],P=D[1],z=D[2],I=D[3],C=Math.floor(Math.max(0,(P-T)*H)),E=Math.ceil(Math.min(O,Math.max(0,(z-T)*H))),B=(L==="Dense"?0:(0+A))*R,U=this.prefs.block_color,F=this.prefs.label_color,N=0;if((L==="Pack"||this.mode==="Auto")&&H>Q.canvas.manager.char_width_px){var N=Math.round(H/2)}Q.fillStyle=U;if(D[5] instanceof Array){var M=Math.floor(Math.max(0,(D[4][0]-T)*H)),K=Math.ceil(Math.min(O,Math.max(0,(D[4][1]-T)*H))),J=Math.floor(Math.max(0,(D[5][0]-T)*H)),x=Math.ceil(Math.min(O,Math.max(0,(D[5][1]-T)*H)));if(D[4][1]>=T&&D[4][0]<=y&&D[4][2]){this.draw_read(Q,L,H,T,y,D[4][0],D[4][2],D[4][3],B)}if(D[5][1]>=T&&D[5][0]<=y&&D[5][2]){this.draw_read(Q,L,H,T,y,D[5][0],D[5][2],D[5][3],B)}if(J>K){Q.fillStyle=g;o(Q,K-N,B+5,J-N,B+5)}}else{Q.fillStyle=U;this.draw_read(Q,L,H,T,y,P,D[4],D[5],B)}if(L==="Pack"&&P>T){Q.fillStyle=this.prefs.label_color;var S=1;if(S===0&&C-Q.measureText(I).width<0){Q.textAlign="left";Q.fillText(I,E+k-N,B+8)}else{Q.textAlign="right";Q.fillText(I,C-k-N,B+8)}Q.fillStyle=U}}});w.SummaryTreePainter=u;w.LinePainter=c;w.LinkedFeaturePainter=q;w.ReadPainter=s;w.VariantPainter=b};(function(d){var c={};var b=function(e){return c[e]};var a=function(f,g){var e={};g(b,e);c[f]=e};a("class",class_module);a("slotting",slotting_module);a("painters",painters_module);a("trackster",trackster_module);for(key in c.trackster){d[key]=c.trackster[key]}})(window);
\ No newline at end of file
+var class_module=function(b,a){var c=function(){var f=arguments[0];for(var e=1;e<arguments.length;e++){var d=arguments[e];for(key in d){f[key]=d[key]}}return f};a.extend=c};var BEFORE=1001,CONTAINS=1002,OVERLAP_START=1003,OVERLAP_END=1004,CONTAINED_BY=1005,AFTER=1006;var compute_overlap=function(e,b){var g=e[0],f=e[1],d=b[0],c=b[1],a;if(g<d){if(f<d){a=BEFORE}else{if(f<=c){a=OVERLAP_START}else{a=CONTAINS}}}else{if(g>c){a=AFTER}else{if(f<=c){a=CONTAINED_BY}else{a=OVERLAP_END}}}return a};var is_overlap=function(c,b){var a=compute_overlap(c,b);return(a!==BEFORE&&a!==AFTER)};var trackster_module=function(f,S){var n=f("class").extend,p=f("slotting"),H=f("painters");var Y=function(Z,aa){this.document=Z;this.default_font=aa!==undefined?aa:"9px Monaco, Lucida Console, monospace";this.dummy_canvas=this.new_canvas();this.dummy_context=this.dummy_canvas.getContext("2d");this.dummy_context.font=this.default_font;this.char_width_px=this.dummy_context.measureText("A").width;this.patterns={};this.load_pattern("right_strand","/visualization/strand_right.png");this.load_pattern("left_strand","/visualization/strand_left.png");this.load_pattern("right_strand_inv","/visualization/strand_right_inv.png");this.load_pattern("left_strand_inv","/visualization/strand_left_inv.png")};n(Y.prototype,{load_pattern:function(Z,ad){var aa=this.patterns,ab=this.dummy_context,ac=new Image();ac.src=image_path+ad;ac.onload=function(){aa[Z]=ab.createPattern(ac,"repeat")}},get_pattern:function(Z){return this.patterns[Z]},new_canvas:function(){var Z=this.document.createElement("canvas");if(window.G_vmlCanvasManager){G_vmlCanvasManager.initElement(Z)}Z.manager=this;return Z}});var B=function(Z,aa){Z.bind("drag",{handle:aa,relative:true},function(ae,af){var ad=$(this).parent();var ac=ad.children();var ab;for(ab=0;ab<ac.length;ab++){if(af.offsetY<$(ac.get(ab)).position().top){break}}if(ab===ac.length){if(this!==ac.get(ab-1)){ad.append(this)}}else{if(this!==ac.get(ab)){$(this).insertBefore(ac.get(ab))}}}).bind("dragstart",function(){$(this).css({"border-top":"1px solid blue","border-bottom":"1px solid blue"})}).bind("dragend",function(){$(this).css("border","0px")})};S.sortable=B;var C=9,z=10,N=C+2,w=100,E=12000,L=200,s=10,G=5000,t=100,m="There was an error in indexing this dataset. ",F="A converter for this dataset is not installed. Please check your datatypes_conf.xml file.",A="No data for this chrom/contig.",q="Currently indexing... please wait",v="Tool cannot be rerun: ",a="Loading data...",T="Ready for display",d=10,r=5,y=5;function u(Z){return Math.round(Z*1000)/1000}var c=function(Z){this.num_elements=Z;this.clear()};n(c.prototype,{get:function(aa){var Z=this.key_ary.indexOf(aa);if(Z!==-1){this.move_key_to_end(aa,Z)}return this.obj_cache[aa]},set:function(aa,ab){if(!this.obj_cache[aa]){if(this.key_ary.length>=this.num_elements){var Z=this.key_ary.shift();delete this.obj_cache[Z]}this.key_ary.push(aa)}this.obj_cache[aa]=ab;return ab},move_key_to_end:function(aa,Z){this.key_ary.splice(Z,1);this.key_ary.push(aa)},clear:function(){this.obj_cache={};this.key_ary=[]},size:function(){return this.key_ary.length}});var M=function(aa,Z,ab){c.call(this,aa);this.track=Z;this.subset=(ab!==undefined?ab:true)};n(M.prototype,c.prototype,{load_data:function(ah,ai,ad,ag,aa,af){var ac={chrom:ah,low:ai,high:ad,mode:ag,resolution:aa,dataset_id:this.track.dataset_id,hda_ldda:this.track.hda_ldda};$.extend(ac,af);if(this.track.filters_manager){var aj=[];var Z=this.track.filters_manager.filters;for(var ae=0;ae<Z.length;ae++){aj[aj.length]=Z[ae].name}ac.filter_cols=JSON.stringify(aj)}var ab=this;return $.getJSON(this.track.data_url,ac,function(ak){ab.set_data(ai,ad,ag,ak)})},get_data:function(ab,Z,ae,af,aa,ad){var ac=this.get(this.gen_key(Z,ae,af));if(ac){return ac}ac=this.load_data(ab,Z,ae,af,aa,ad);this.set_data(Z,ae,af,ac);return ac},set_data:function(aa,ab,ac,Z){return this.set(this.gen_key(aa,ab,ac),Z)},gen_key:function(Z,ab,ac){var aa=Z+"_"+ab+"_"+ac;return aa},split_key:function(Z){return Z.split("_")}});var D=function(aa,Z,ab){M.call(this,aa,Z,ab)};n(D.prototype,M.prototype,c.prototype,{load_data:function(ab,Z,ad,ae,aa,ac){if(aa>1){return}return M.prototype.load_data.call(this,ab,Z,ad,ae,aa,ac)}});var X=function(Z,ac,ab,aa,ad){this.container=Z;this.chrom=null;this.vis_id=ab;this.dbkey=aa;this.title=ac;this.tracks=[];this.label_tracks=[];this.max_low=0;this.max_high=0;this.num_tracks=0;this.track_id_counter=0;this.zoom_factor=3;this.min_separation=30;this.has_changes=false;this.init(ad);this.canvas_manager=new Y(Z.get(0).ownerDocument);this.reset()};n(X.prototype,{init:function(ac){var ab=this.container,Z=this;this.top_container=$("<div/>").addClass("top-container").appendTo(ab);this.content_div=$("<div/>").addClass("content").css("position","relative").appendTo(ab);this.bottom_container=$("<div/>").addClass("bottom-container").appendTo(ab);this.top_labeltrack=$("<div/>").addClass("top-labeltrack").appendTo(this.top_container);this.viewport_container=$("<div/>").addClass("viewport-container").addClass("viewport-container").appendTo(this.content_div);this.intro_div=$("<div/>").addClass("intro").text("Select a chrom from the dropdown below").hide();this.nav_labeltrack=$("<div/>").addClass("nav-labeltrack").appendTo(this.bottom_container);this.nav_container=$("<div/>").addClass("nav-container").prependTo(this.top_container);this.nav=$("<div/>").addClass("nav").appendTo(this.nav_container);this.overview=$("<div/>").addClass("overview").appendTo(this.bottom_container);this.overview_viewport=$("<div/>").addClass("overview-viewport").appendTo(this.overview);this.overview_close=$("<a href='javascript:void(0);'>Close Overview</a>").addClass("overview-close").hide().appendTo(this.overview_viewport);this.overview_highlight=$("<div/>").addClass("overview-highlight").hide().appendTo(this.overview_viewport);this.overview_box_background=$("<div/>").addClass("overview-boxback").appendTo(this.overview_viewport);this.overview_box=$("<div/>").addClass("overview-box").appendTo(this.overview_viewport);this.default_overview_height=this.overview_box.height();this.nav_controls=$("<div/>").addClass("nav-controls").appendTo(this.nav);this.chrom_select=$("<select/>").attr({name:"chrom"}).css("width","15em").addClass("no-autocomplete").append("<option value=''>Loading</option>").appendTo(this.nav_controls);var aa=function(ad){if(ad.type==="focusout"||(ad.keyCode||ad.which)===13||(ad.keyCode||ad.which)===27){if((ad.keyCode||ad.which)!==27){Z.go_to($(this).val())}$(this).hide();$(this).val("");Z.location_span.show();Z.chrom_select.show()}};this.nav_input=$("<input/>").addClass("nav-input").hide().bind("keyup focusout",aa).appendTo(this.nav_controls);this.location_span=$("<span/>").addClass("location").appendTo(this.nav_controls);this.location_span.bind("click",function(){Z.location_span.hide();Z.chrom_select.hide();Z.nav_input.val(Z.chrom+":"+Z.low+"-"+Z.high);Z.nav_input.css("display","inline-block");Z.nav_input.select();Z.nav_input.focus()});if(this.vis_id!==undefined){this.hidden_input=$("<input/>").attr("type","hidden").val(this.vis_id).appendTo(this.nav_controls)}this.zo_link=$("<a id='zoom-out' />").click(function(){Z.zoom_out();Z.redraw()}).appendTo(this.nav_controls);this.zi_link=$("<a id='zoom-in' />").click(function(){Z.zoom_in();Z.redraw()}).appendTo(this.nav_controls);this.load_chroms({low:0},ac);this.chrom_select.bind("change",function(){Z.change_chrom(Z.chrom_select.val())});this.intro_div.show();this.content_div.bind("click",function(ad){$(this).find("input").trigger("blur")});this.content_div.bind("dblclick",function(ad){Z.zoom_in(ad.pageX,this.viewport_container)});this.overview_box.bind("dragstart",function(ad,ae){this.current_x=ae.offsetX}).bind("drag",function(ad,af){var ag=af.offsetX-this.current_x;this.current_x=af.offsetX;var ae=Math.round(ag/Z.viewport_container.width()*(Z.max_high-Z.max_low));Z.move_delta(-ae)});this.overview_close.bind("click",function(){for(var ae=0,ad=Z.tracks.length;ae<ad;ae++){Z.tracks[ae].is_overview=false}$(this).siblings().filter("canvas").remove();$(this).parent().css("height",Z.overview_box.height());Z.overview_highlight.hide();$(this).hide()});this.viewport_container.bind("draginit",function(ad,ae){if(ad.clientX>Z.viewport_container.width()-16){return false}}).bind("dragstart",function(ad,ae){ae.original_low=Z.low;ae.current_height=ad.clientY;ae.current_x=ae.offsetX}).bind("drag",function(af,ah){var ad=$(this);var ai=ah.offsetX-ah.current_x;var ae=ad.scrollTop()-(af.clientY-ah.current_height);ad.scrollTop(ae);ah.current_height=af.clientY;ah.current_x=ah.offsetX;var ag=Math.round(ai/Z.viewport_container.width()*(Z.high-Z.low));Z.move_delta(ag)}).bind("mousewheel",function(af,ah,ae,ad){if(ae){var ag=Math.round(-ae/Z.viewport_container.width()*(Z.high-Z.low));Z.move_delta(ag)}});this.top_labeltrack.bind("dragstart",function(ad,ae){return $("<div />").css({height:Z.content_div.height()+Z.top_labeltrack.height()+Z.nav_labeltrack.height()+1,top:"0px",position:"absolute","background-color":"#ccf",opacity:0.5,"z-index":1000}).appendTo($(this))}).bind("drag",function(ah,ai){$(ai.proxy).css({left:Math.min(ah.pageX,ai.startX),width:Math.abs(ah.pageX-ai.startX)});var ae=Math.min(ah.pageX,ai.startX)-Z.container.offset().left,ad=Math.max(ah.pageX,ai.startX)-Z.container.offset().left,ag=(Z.high-Z.low),af=Z.viewport_container.width();Z.update_location(Math.round(ae/af*ag)+Z.low,Math.round(ad/af*ag)+Z.low)}).bind("dragend",function(ai,aj){var ae=Math.min(ai.pageX,aj.startX),ad=Math.max(ai.pageX,aj.startX),ag=(Z.high-Z.low),af=Z.viewport_container.width(),ah=Z.low;Z.low=Math.round(ae/af*ag)+ah;Z.high=Math.round(ad/af*ag)+ah;$(aj.proxy).remove();Z.redraw()});this.add_label_track(new W(this,this.top_labeltrack));this.add_label_track(new W(this,this.nav_labeltrack));$(window).bind("resize",function(){Z.resize_window()});$(document).bind("redraw",function(){Z.redraw()});this.reset();$(window).trigger("resize")},update_location:function(Z,aa){this.location_span.text(commatize(Z)+" - "+commatize(aa));this.nav_input.val(this.chrom+":"+commatize(Z)+"-"+commatize(aa))},load_chroms:function(aa,ab){aa.num=t;$.extend(aa,(this.vis_id!==undefined?{vis_id:this.vis_id}:{dbkey:this.dbkey}));var Z=this;$.ajax({url:chrom_url,data:aa,dataType:"json",success:function(ad){if(ad.chrom_info.length===0){alert("Invalid chromosome: "+aa.chrom);return}if(ad.reference){Z.add_label_track(new x(Z))}Z.chrom_data=ad.chrom_info;var ag='<option value="">Select Chrom/Contig</option>';for(var af=0,ac=Z.chrom_data.length;af<ac;af++){var ae=Z.chrom_data[af].chrom;ag+='<option value="'+ae+'">'+ae+"</option>"}if(ad.prev_chroms){ag+='<option value="previous">Previous '+t+"</option>"}if(ad.next_chroms){ag+='<option value="next">Next '+t+"</option>"}Z.chrom_select.html(ag);if(ab){ab()}Z.chrom_start_index=ad.start_index},error:function(){alert("Could not load chroms for this dbkey:",Z.dbkey)}})},change_chrom:function(ad,aa,af){if(!ad||ad==="None"){return}var ac=this;if(ad==="previous"){ac.load_chroms({low:this.chrom_start_index-t});return}if(ad==="next"){ac.load_chroms({low:this.chrom_start_index+t});return}var ae=$.grep(ac.chrom_data,function(ah,ai){return ah.chrom===ad})[0];if(ae===undefined){ac.load_chroms({chrom:ad},function(){ac.change_chrom(ad,aa,af)});return}else{if(ad!==ac.chrom){ac.chrom=ad;if(!ac.chrom){ac.intro_div.show()}else{ac.intro_div.hide()}ac.chrom_select.val(ac.chrom);ac.max_high=ae.len-1;ac.reset();ac.redraw(true);for(var ag=0,Z=ac.tracks.length;ag<Z;ag++){var ab=ac.tracks[ag];if(ab.init){ab.init()}}}if(aa!==undefined&&af!==undefined){ac.low=Math.max(aa,0);ac.high=Math.min(af,ac.max_high)}ac.reset_overview();ac.redraw()}},go_to:function(ad){var ah=this,Z,ac,aa=ad.split(":"),af=aa[0],ag=aa[1];if(ag!==undefined){try{var ae=ag.split("-");Z=parseInt(ae[0].replace(/,/g,""),10);ac=parseInt(ae[1].replace(/,/g,""),10)}catch(ab){return false}}ah.change_chrom(af,Z,ac)},move_fraction:function(ab){var Z=this;var aa=Z.high-Z.low;this.move_delta(ab*aa)},move_delta:function(ab){var Z=this;var aa=Z.high-Z.low;if(Z.low-ab<Z.max_low){Z.low=Z.max_low;Z.high=Z.max_low+aa}else{if(Z.high-ab>Z.max_high){Z.high=Z.max_high;Z.low=Z.max_high-aa}else{Z.high-=ab;Z.low-=ab}}Z.redraw()},add_track:function(Z){Z.view=this;Z.track_id=this.track_id_counter;this.tracks.push(Z);if(Z.init){Z.init()}Z.container_div.attr("id","track_"+Z.track_id);B(Z.container_div,".draghandle");this.track_id_counter+=1;this.num_tracks+=1},add_label_track:function(Z){Z.view=this;this.label_tracks.push(Z)},remove_track:function(Z){this.has_changes=true;Z.container_div.fadeOut("slow",function(){$(this).remove()});delete this.tracks[this.tracks.indexOf(Z)];this.num_tracks-=1},reset:function(){this.low=this.max_low;this.high=this.max_high;this.viewport_container.find(".yaxislabel").remove()},redraw:function(ag){var af=this.high-this.low,ae=this.low,aa=this.high;if(ae<this.max_low){ae=this.max_low}if(aa>this.max_high){aa=this.max_high}if(this.high!==0&&af<this.min_separation){aa=ae+this.min_separation}this.low=Math.floor(ae);this.high=Math.ceil(aa);this.resolution=Math.pow(10,Math.ceil(Math.log((this.high-this.low)/L)/Math.LN10));this.zoom_res=Math.pow(s,Math.max(0,Math.ceil(Math.log(this.resolution,s)/Math.log(s))));var Z=(this.low/(this.max_high-this.max_low)*this.overview_viewport.width())||0;var ad=((this.high-this.low)/(this.max_high-this.max_low)*this.overview_viewport.width())||0;var ah=13;this.overview_box.css({left:Z,width:Math.max(ah,ad)}).show();if(ad<ah){this.overview_box.css("left",Z-(ah-ad)/2)}if(this.overview_highlight){this.overview_highlight.css({left:Z,width:ad})}this.update_location(this.low,this.high);if(!ag){for(var ab=0,ac=this.tracks.length;ab<ac;ab++){if(this.tracks[ab]&&this.tracks[ab].enabled){this.tracks[ab].draw()}}for(ab=0,ac=this.label_tracks.length;ab<ac;ab++){this.label_tracks[ab].draw()}}},zoom_in:function(aa,ab){if(this.max_high===0||this.high-this.low<this.min_separation){return}var ac=this.high-this.low,ad=ac/2+this.low,Z=(ac/this.zoom_factor)/2;if(aa){ad=aa/this.viewport_container.width()*(this.high-this.low)+this.low}this.low=Math.round(ad-Z);this.high=Math.round(ad+Z);this.redraw()},zoom_out:function(){if(this.max_high===0){return}var aa=this.high-this.low,ab=aa/2+this.low,Z=(aa*this.zoom_factor)/2;this.low=Math.round(ab-Z);this.high=Math.round(ab+Z);this.redraw()},resize_window:function(){this.viewport_container.height(this.container.height()-this.top_container.height()-this.bottom_container.height());this.nav_container.width(this.container.width());this.redraw()},reset_overview:function(){this.overview_viewport.find("canvas").remove();this.overview_viewport.height(this.default_overview_height);this.overview_box.height(this.default_overview_height);this.overview_close.hide();this.overview_highlight.hide()}});var o=function(ab,af){this.track=ab;this.name=af.name;this.params=[];var am=af.params;for(var ac=0;ac<am.length;ac++){var ah=am[ac],aa=ah.name,al=ah.label,ad=unescape(ah.html),an=ah.value,aj=ah.type;if(aj==="number"){this.params[this.params.length]=new g(aa,al,ad,an,ah.min,ah.max)}else{if(aj=="select"){this.params[this.params.length]=new J(aa,al,ad,an)}else{console.log("WARNING: unrecognized tool parameter type:",aa,aj)}}}this.parent_div=$("<div/>").addClass("dynamic-tool").hide();this.parent_div.bind("drag",function(ap){ap.stopPropagation()}).bind("click",function(ap){ap.stopPropagation()}).bind("dblclick",function(ap){ap.stopPropagation()});var ak=$("<div class='tool-name'>").appendTo(this.parent_div).text(this.name);var ai=this.params;var ag=this;$.each(this.params,function(aq,au){var at=$("<div>").addClass("param-row").appendTo(ag.parent_div);var ap=$("<div>").addClass("param-label").text(au.label).appendTo(at);var ar=$("<div/>").addClass("slider").html(au.html).appendTo(at);ar.find(":input").val(au.value);$("<div style='clear: both;'/>").appendTo(at)});this.parent_div.find("input").click(function(){$(this).select()});var ao=$("<div>").addClass("param-row").appendTo(this.parent_div);var ae=$("<input type='submit'>").attr("value","Run on complete dataset").appendTo(ao);var Z=$("<input type='submit'>").attr("value","Run on visible region").css("margin-left","3em").appendTo(ao);var ag=this;Z.click(function(){ag.run_on_region()});ae.click(function(){ag.run_on_dataset()})};n(o.prototype,{get_param_values_dict:function(){var Z={};this.parent_div.find(":input").each(function(){var aa=$(this).attr("name"),ab=$(this).val();Z[aa]=JSON.stringify(ab)});return Z},get_param_values:function(){var aa=[];var Z={};this.parent_div.find(":input").each(function(){var ab=$(this).attr("name"),ac=$(this).val();if(ab){aa[aa.length]=ac}});return aa},run_on_dataset:function(){var Z=this;Z.run({dataset_id:this.track.original_dataset_id,tool_id:Z.name},function(aa){show_modal(Z.name+" is Running",Z.name+" is running on the complete dataset. Tool outputs are in dataset's history.",{Close:hide_modal})})},run_on_region:function(){var Z={dataset_id:this.track.original_dataset_id,chrom:this.track.view.chrom,low:this.track.view.low,high:this.track.view.high,tool_id:this.name},ab=this.track,aa=Z.tool_id+ab.tool_region_and_parameters_str(Z.chrom,Z.low,Z.high),ac;if(ab.track_type==="FeatureTrack"){ac=new P(aa,view,ab.hda_ldda,undefined,{},{},ab)}this.track.add_track(ac);ac.content_div.text("Starting job.");this.run(Z,function(ad){ac.dataset_id=ad.dataset_id;ac.content_div.text("Running job.");ac.init()})},run:function(aa,ab){$.extend(aa,this.get_param_values_dict());var Z=function(){$.getJSON(rerun_tool_url,aa,function(ac){if(ac==="no converter"){new_track.container_div.addClass("error");new_track.content_div.text(F)}else{if(ac.error){new_track.container_div.addClass("error");new_track.content_div.text(v+ac.message)}else{if(ac==="pending"){new_track.container_div.addClass("pending");new_track.content_div.text("Converting input data so that it can be easily reused.");setTimeout(Z,2000)}else{ab(ac)}}}})};Z()}});var J=function(aa,Z,ab,ac){this.name=aa;this.label=Z;this.html=ab;this.value=ac};var g=function(ab,aa,ad,ae,ac,Z){J.call(this,ab,aa,ad,ae);this.min=ac;this.max=Z};var h=function(aa,Z,ab,ac){this.name=aa;this.index=Z;this.tool_id=ab;this.tool_exp_name=ac};var Q=function(aa,Z,ab,ac){h.call(this,aa,Z,ab,ac);this.low=-Number.MAX_VALUE;this.high=Number.MAX_VALUE;this.min=Number.MAX_VALUE;this.max=-Number.MAX_VALUE;this.slider=null;this.slider_label=null};n(Q.prototype,{applies_to:function(Z){if(Z.length>this.index){return true}return false},keep:function(Z){if(!this.applies_to(Z)){return true}var aa=parseInt(Z[this.index]);return(isNaN(aa)||(aa>=this.low&&aa<=this.high))},update_attrs:function(aa){var Z=false;if(!this.applies_to(aa)){return Z}if(aa[this.index]<this.min){this.min=Math.floor(aa[this.index]);Z=true}if(aa[this.index]>this.max){this.max=Math.ceil(aa[this.index]);Z=true}return Z},update_ui_elt:function(){var ab=function(ae,ac){var ad=ac-ae;return(ad<=2?0.01:1)};var aa=this.slider.slider("option","min"),Z=this.slider.slider("option","max");if(this.min<aa||this.max>Z){this.slider.slider("option","min",this.min);this.slider.slider("option","max",this.max);this.slider.slider("option","step",ab(this.min,this.max));this.slider.slider("option","values",[this.min,this.max])}}});var V=function(ab,ak){this.track=ab;this.filters=[];for(var af=0;af<ak.length;af++){var Z=ak[af],aa=Z.name,aj=Z.type,ah=Z.index,am=Z.tool_id,ac=Z.tool_exp_name;if(aj==="int"||aj==="float"){this.filters[af]=new Q(aa,ah,am,ac)}else{console.log("ERROR: unsupported filter: ",aa,aj)}}var ai=function(an,ao,ap){an.click(function(){var aq=ao.text();max=parseFloat(ap.slider("option","max")),input_size=(max<=1?4:max<=1000000?max.toString().length:6),multi_value=false;if(ap.slider("option","values")){input_size=2*input_size+1;multi_value=true}ao.text("");$("<input type='text'/>").attr("size",input_size).attr("maxlength",input_size).attr("value",aq).appendTo(ao).focus().select().click(function(ar){ar.stopPropagation()}).blur(function(){$(this).remove();ao.text(aq)}).keyup(function(aw){if(aw.keyCode===27){$(this).trigger("blur")}else{if(aw.keyCode===13){var au=ap.slider("option","min"),ar=ap.slider("option","max"),av=function(ax){return(isNaN(ax)||ax>ar||ax<au)},at=$(this).val();if(!multi_value){at=parseFloat(at);if(av(at)){alert("Parameter value must be in the range ["+au+"-"+ar+"]");return $(this)}}else{at=at.split("-");at=[parseFloat(at[0]),parseFloat(at[1])];if(av(at[0])||av(at[1])){alert("Parameter value must be in the range ["+au+"-"+ar+"]");return $(this)}}ap.slider((multi_value?"values":"value"),at)}}})})};this.parent_div=$("<div/>").addClass("filters").hide();this.parent_div.bind("drag",function(an){an.stopPropagation()}).bind("click",function(an){an.stopPropagation()}).bind("dblclick",function(an){an.stopPropagation()}).bind("keydown",function(an){an.stopPropagation()});var ad=this;$.each(this.filters,function(au,ao){var aq=$("<div/>").addClass("slider-row").appendTo(ad.parent_div);var an=$("<div/>").addClass("slider-label").appendTo(aq);var aw=$("<span/>").addClass("slider-name").text(ao.name+" ").appendTo(an);var ap=$("<span/>");var ar=$("<span/>").addClass("slider-value").appendTo(an).append("[").append(ap).append("]");var av=$("<div/>").addClass("slider").appendTo(aq);ao.control_element=$("<div/>").attr("id",ao.name+"-filter-control").appendTo(av);var at=[0,0];ao.control_element.slider({range:true,min:Number.MAX_VALUE,max:-Number.MIN_VALUE,values:[0,0],slide:function(ax,ay){at=ay.values;ap.text(ay.values[0]+"-"+ay.values[1]);setTimeout(function(){if(ay.values[0]==at[0]&&ay.values[1]==at[1]){var az=ay.values;ap.text(az[0]+"-"+az[1]);ao.low=az[0];ao.high=az[1];ad.track.draw(true,true)}},50)},change:function(ax,ay){ao.control_element.slider("option","slide").call(ao.control_element,ax,ay)}});ao.slider=ao.control_element;ao.slider_label=ap;ai(ar,ap,ao.control_element);$("<div style='clear: both;'/>").appendTo(aq)});if(this.filters.length!=0){var al=$("<div>").addClass("param-row").appendTo(this.parent_div);var ag=$("<input type='submit'>").attr("value","Run on complete dataset").appendTo(al);var ae=this;ag.click(function(){ae.run_on_dataset()})}};n(V.prototype,{reset_filters:function(){for(var Z=0;Z<this.filters.length;Z++){filter=this.filters[Z];filter.slider.slider("option","values",[filter.min,filter.max])}},run_on_dataset:function(){var ag=function(al,aj,ak){if(!(aj in al)){al[aj]=ak}return al[aj]};var ad={},aa,ac,ae;for(var af=0;af<this.filters.length;af++){aa=this.filters[af];if(aa.tool_id){if(aa.min!=aa.low){ac=ag(ad,aa.tool_id,[]);ac[ac.length]=aa.tool_exp_name+" >= "+aa.low}if(aa.max!=aa.high){ac=ag(ad,aa.tool_id,[]);ac[ac.length]=aa.tool_exp_name+" <= "+aa.high}}}for(var ai in ad){var Z=ad[ai],ab="("+Z.join(") and (")+")",ah={cond:ab,input:this.track.dataset_id,target_dataset_id:this.track.dataset_id,tool_id:ai};$.getJSON(run_tool_url,ah,function(aj){if(aj.error){new_track.container_div.addClass("error");new_track.content_div.text(v+aj.message)}else{show_modal("Filter Dataset",ai+" is running on the complete dataset. Tool outputs are in dataset's history.",{Close:hide_modal})}})}}});var U=function(Z){this.track=Z.track;this.params=Z.params;this.values={};if(Z.saved_values){this.restore_values(Z.saved_values)}this.onchange=Z.onchange};n(U.prototype,{restore_values:function(Z){var aa=this;$.each(this.params,function(ab,ac){if(Z[ac.key]!==undefined){aa.values[ac.key]=Z[ac.key]}else{aa.values[ac.key]=ac.default_value}})},build_form:function(){var aa=this;var Z=$("<div />");$.each(this.params,function(ae,ac){if(!ac.hidden){var ab="param_"+ae;var aj=$("<div class='form-row' />").appendTo(Z);aj.append($("<label />").attr("for",ab).text(ac.label+":"));if(ac.type==="bool"){aj.append($('<input type="checkbox" />').attr("id",ab).attr("name",ab).attr("checked",aa.values[ac.key]))}else{if(ac.type==="color"){var ag=aa.values[ac.key];var af=$("<input />").attr("id",ab).attr("name",ab).val(ag);var ah=$("<div class='tipsy tipsy-north' style='position: absolute;' />").hide();var ad=$("<div style='background-color: black; padding: 10px;'></div>").appendTo(ah);var ai=$("<div/>").appendTo(ad).farbtastic({width:100,height:100,callback:af,color:ag});$("<div />").append(af).append(ah).appendTo(aj).bind("click",function(ak){ah.css({left:$(this).position().left+($(af).width()/2)-60,top:$(this).position().top+$(this.height)}).show();$(document).bind("click.color-picker",function(){ah.hide();$(document).unbind("click.color-picker")});ak.stopPropagation()})}else{aj.append($("<input />").attr("id",ab).attr("name",ab).val(aa.values[ac.key]))}}}});return Z},update_from_form:function(Z){var ab=this;var aa=false;$.each(this.params,function(ac,ae){if(!ae.hidden){var af="param_"+ac;var ad=Z.find("#"+af).val();if(ae.type==="float"){ad=parseFloat(ad)}else{if(ae.type==="int"){ad=parseInt(ad)}else{if(ae.type==="bool"){ad=Z.find("#"+af).is(":checked")}}}if(ad!==ab.values[ae.key]){ab.values[ae.key]=ad;aa=true}}});if(aa){this.onchange()}}});var b=function(ab,aa,Z){this.index=ab;this.resolution=aa;this.canvas=$("<div class='track-tile'/>").append(Z)};var l=function(ab,aa,Z,ac){b.call(this,ab,aa,Z);this.max_val=ac};var K=function(ab,aa,Z){b.call(this,ab,aa,Z)};var j=function(aa,Z,ad,ab,ac){this.name=aa;this.view=Z;this.parent_element=ad;this.data_url=(ab?ab:default_data_url);this.data_url_extra_params={};this.data_query_wait=(ac?ac:G);this.dataset_check_url=converted_datasets_state_url;this.container_div=$("<div />").addClass("track").css("position","relative");if(!this.hidden){this.header_div=$("<div class='track-header' />").appendTo(this.container_div);if(this.view.editor){this.drag_div=$("<div class='draghandle' />").appendTo(this.header_div)}this.name_div=$("<div class='menubutton popup' />").appendTo(this.header_div);this.name_div.text(this.name);this.name_div.attr("id",this.name.replace(/\s+/g,"-").replace(/[^a-zA-Z0-9\-]/g,"").toLowerCase())}this.content_div=$("<div class='track-content'>").appendTo(this.container_div);this.parent_element.append(this.container_div)};n(j.prototype,{init:function(){var Z=this;Z.enabled=false;Z.tile_cache.clear();Z.data_cache.clear();Z.initial_canvas=undefined;Z.content_div.css("height","auto");Z.container_div.removeClass("nodata error pending");if(!Z.dataset_id){return}$.getJSON(converted_datasets_state_url,{hda_ldda:Z.hda_ldda,dataset_id:Z.dataset_id,chrom:Z.view.chrom},function(aa){if(!aa||aa==="error"||aa.kind==="error"){Z.container_div.addClass("error");Z.content_div.text(m);if(aa.message){var ac=Z.view.tracks.indexOf(Z);var ab=$(" <a href='javascript:void(0);'></a>").text("View error").bind("click",function(){show_modal("Trackster Error","<pre>"+aa.message+"</pre>",{Close:hide_modal})});Z.content_div.append(ab)}}else{if(aa==="no converter"){Z.container_div.addClass("error");Z.content_div.text(F)}else{if(aa==="no data"||(aa.data!==undefined&&(aa.data===null||aa.data.length===0))){Z.container_div.addClass("nodata");Z.content_div.text(A)}else{if(aa==="pending"){Z.container_div.addClass("pending");Z.content_div.text(q);setTimeout(function(){Z.init()},Z.data_query_wait)}else{if(aa.status==="data"){if(aa.valid_chroms){Z.valid_chroms=aa.valid_chroms;Z.make_name_popup_menu()}Z.content_div.text(T);if(Z.view.chrom){Z.content_div.text("");Z.content_div.css("height",Z.height_px+"px");Z.enabled=true;$.when(Z.predraw_init()).done(function(){Z.container_div.removeClass("nodata error pending");Z.draw()})}}}}}}})},predraw_init:function(){},update_name:function(Z){this.old_name=this.name;this.name=Z;this.name_div.text(this.name)},revert_name:function(){this.name=this.old_name;this.name_div.text(this.name)}});var I=function(ah,af,ai){var aa=this,aj=aa.view;this.filters_manager=(ah!==undefined?new V(this,ah):undefined);this.filters_available=false;this.filters_visible=false;this.tool=(af!==undefined&&obj_length(af)>0?new o(this,af):undefined);this.parent_track=ai;this.child_tracks=[];if(aa.hidden){return}if(this.parent_track){this.header_div.find(".draghandle").removeClass("draghandle").addClass("child-track-icon").addClass("icon-button");this.parent_element.addClass("child-track");this.tool=undefined}aa.child_tracks_container=$("<div/>").addClass("child-tracks-container").hide();aa.container_div.append(aa.child_tracks_container);if(this.filters_manager){this.filters_div=this.filters_manager.parent_div;this.header_div.after(this.filters_div)}if(this.tool){this.dynamic_tool_div=this.tool.parent_div;this.header_div.after(this.dynamic_tool_div)}if(aa.display_modes!==undefined){if(aa.mode_div===undefined){aa.mode_div=$("<div class='right-float menubutton popup' />").appendTo(aa.header_div);var ac=(aa.track_config&&aa.track_config.values.mode?aa.track_config.values.mode:aa.display_modes[0]);aa.mode=ac;aa.mode_div.text(ac);var ab=function(ak){aa.mode_div.text(ak);aa.mode=ak;aa.track_config.values.mode=ak;aa.tile_cache.clear();aa.draw()};var Z={};for(var ad=0,ag=aa.display_modes.length;ad<ag;ad++){var ae=aa.display_modes[ad];Z[ae]=function(ak){return function(){ab(ak)}}(ae)}make_popupmenu(aa.mode_div,Z)}else{aa.mode_div.hide()}}this.make_name_popup_menu()};n(I.prototype,j.prototype,{make_name_popup_menu:function(){var aa=this;var Z={};Z["Edit configuration"]=function(){var ag=function(){hide_modal();$(window).unbind("keypress.check_enter_esc")},ae=function(){aa.track_config.update_from_form($(".dialog-box"));hide_modal();$(window).unbind("keypress.check_enter_esc")},af=function(ah){if((ah.keyCode||ah.which)===27){ag()}else{if((ah.keyCode||ah.which)===13){ae()}}};$(window).bind("keypress.check_enter_esc",af);show_modal("Configure Track",aa.track_config.build_form(),{Cancel:ag,OK:ae})};if(aa.filters_available>0){var ad=(aa.filters_div.is(":visible")?"Hide filters":"Show filters");Z[ad]=function(){aa.filters_visible=(aa.filters_div.is(":visible"));if(aa.filters_visible){aa.filters_manager.reset_filters()}aa.filters_div.toggle();aa.make_name_popup_menu()}}if(aa.tool){var ad=(aa.dynamic_tool_div.is(":visible")?"Hide tool":"Show tool");Z[ad]=function(){if(!aa.dynamic_tool_div.is(":visible")){aa.update_name(aa.name+aa.tool_region_and_parameters_str())}else{menu_option_text="Show dynamic tool";aa.revert_name()}aa.dynamic_tool_div.toggle();aa.make_name_popup_menu()}}if(aa.valid_chroms){Z["List chrom/contigs with data"]=function(){show_modal("Chrom/contigs with data","<p>"+aa.valid_chroms.join("<br/>")+"</p>",{Close:function(){hide_modal()}})}}var ab=view;var ac=function(){$("#no-tracks").show()};if(this.parent_track){ab=this.parent_track;ac=function(){}}Z.Remove=function(){ab.remove_track(aa);if(ab.num_tracks===0){ac()}};make_popupmenu(aa.name_div,Z)},draw:function(Z,ab){var at=this.view.low,af=this.view.high,ah=af-at,aj=this.view.container.width(),ad=aj/ah,ak=this.view.resolution,ac=$("<div style='position: relative;'></div>"),al=function(av,aw,au){return av+"_"+aw+"_"+au};if(!ab){this.content_div.children().remove()}this.content_div.append(ac);this.max_height=0;var an=Math.floor(at/ak/L);var ae=[];var ao=0;while((an*L*ak)<af){var ar=al(aj,ad,an);var ag=this.tile_cache.get(ar);var ap=an*L*this.view.resolution;var aa=ap+L*this.view.resolution;if(!Z&&ag){ae[ae.length]=ag;this.show_tile(ag,ac,ap,ad)}else{this.delayed_draw(Z,ar,an,ak,ac,ad,ae)}an+=1;ao++}var ai=this;var aq=setInterval(function(){if(ae.length===ao){clearInterval(aq);if(ab){var ax=ai.content_div.children();var ay=false;for(var aw=ax.length-1,aC=0;aw>=aC;aw--){var av=$(ax[aw]);if(ay){av.remove()}else{if(av.children().length!==0){ay=true}}}}if(ai.track_type=="FeatureTrack"&&ai.mode=="Histogram"){var aB=-1;for(var aw=0;aw<ae.length;aw++){var aE=ae[aw].max_val;if(aE>aB){aB=aE}}for(var aw=0;aw<ae.length;aw++){if(ae[aw].max_val!==aB){var aD=ae[aw];aD.canvas.remove();ai.delayed_draw(true,al(aj,ad,aD.index),aD.index,aD.resolution,ac,ad,[],{max:aB})}}}if(ai.filters_manager){var au=ai.filters_manager.filters;for(var aA=0;aA<au.length;aA++){au[aA].update_ui_elt()}var az=false;if(ai.example_feature){for(var aA=0;aA<au.length;aA++){if(au[aA].applies_to(ai.example_feature)){az=true;break}}}if(ai.filters_available!==az){ai.filters_available=az;if(!ai.filters_available){ai.filters_div.hide()}ai.make_name_popup_menu()}}}},50);for(var am=0;am<this.child_tracks.length;am++){this.child_tracks[am].draw(Z,ab)}},delayed_draw:function(aa,ah,ab,ad,ai,al,aj,ae){var ac=this,af=ab*L*ad,ak=af+L*ad;var ag=function(au,am,ao,an,ar,at,ap){var aq=ac.draw_tile(am,ao,an,at,ap);ac.tile_cache.set(ah,aq);if(aq===undefined){return}ac.show_tile(aq,ar,af,at);aj[aj.length]=aq};var Z=setTimeout(function(){if(af<=ac.view.high&&ak>=ac.view.low){var am=(aa?undefined:ac.tile_cache.get(ah));if(am){ac.show_tile(am,ai,af,al);aj[aj.length]=am}else{$.when(ac.data_cache.get_data(view.chrom,af,ak,ac.mode,ad,ac.data_url_extra_params)).then(function(an){n(an,ae);if(view.reference_track&&al>view.canvas_manager.char_width_px){$.when(view.reference_track.data_cache.get_data(view.chrom,af,ak,ac.mode,ad,view.reference_track.data_url_extra_params)).then(function(ao){ag(Z,an,ad,ab,ai,al,ao)})}else{ag(Z,an,ad,ab,ai,al)}})}}},50)},show_tile:function(ac,af,ad,ag){var aa=this;var ab=this.view.high-this.view.low,ae=(ad-this.view.low)*ag;if(this.left_offset){ae-=this.left_offset}var Z=ac.canvas;Z.css({position:"absolute",top:0,left:ae,height:""});af.append(Z);aa.max_height=Math.max(aa.max_height,Z.height());aa.content_div.css("height",aa.max_height+"px");af.children().css("height",aa.max_height+"px")},set_overview:function(){var Z=this.view;if(this.initial_canvas&&this.is_overview){Z.overview_close.show();Z.overview_viewport.append(this.initial_canvas);Z.overview_highlight.show().height(this.initial_canvas.height());Z.overview_viewport.height(this.initial_canvas.height()+Z.overview_box.height())}$(window).trigger("resize")},tool_region_and_parameters_str:function(ab,Z,ac){var aa=this,ad=(ab!==undefined&&Z!==undefined&&ac!==undefined?ab+":"+Z+"-"+ac:"all");return" - region=["+ad+"], parameters=["+aa.tool.get_param_values().join(", ")+"]"},add_track:function(Z){Z.track_id=this.track_id+"_"+this.child_tracks.length;Z.container_div.attr("id","track_"+Z.track_id);this.child_tracks_container.append(Z.container_div);B(Z.container_div,".child-track-icon");if(!$(this.child_tracks_container).is(":visible")){this.child_tracks_container.show()}this.child_tracks.push(Z);this.view.has_changes=true},remove_track:function(Z){Z.container_div.fadeOut("slow",function(){$(this).remove()})}});var W=function(Z,aa){this.track_type="LabelTrack";this.hidden=true;j.call(this,null,Z,aa);this.container_div.addClass("label-track")};n(W.prototype,j.prototype,{draw:function(){var ab=this.view,ac=ab.high-ab.low,af=Math.floor(Math.pow(10,Math.floor(Math.log(ac)/Math.log(10)))),Z=Math.floor(ab.low/af)*af,ad=this.view.container.width(),aa=$("<div style='position: relative; height: 1.3em;'></div>");while(Z<ab.high){var ae=(Z-ab.low)/ac*ad;aa.append($("<div class='label'>"+commatize(Z)+"</div>").css({position:"absolute",left:ae-1}));Z+=af}this.content_div.children(":first").remove();this.content_div.append(aa)}});var x=function(Z){this.track_type="ReferenceTrack";this.hidden=true;j.call(this,null,Z,Z.top_labeltrack);I.call(this);Z.reference_track=this;this.left_offset=200;this.height_px=12;this.container_div.addClass("reference-track");this.content_div.css("background","none");this.content_div.css("min-height","0px");this.content_div.css("border","none");this.data_url=reference_url;this.data_url_extra_params={dbkey:Z.dbkey};this.data_cache=new D(y,this,false);this.tile_cache=new c(r)};n(x.prototype,I.prototype,{draw_tile:function(ah,ae,aa,aj){var ad=this,ab=L*ae;if(aj>this.view.canvas_manager.char_width_px){if(ah===null){ad.content_div.css("height","0px");return}var ac=this.view.canvas_manager.new_canvas();var ai=ac.getContext("2d");ac.width=Math.ceil(ab*aj+ad.left_offset);ac.height=ad.height_px;ai.font=ai.canvas.manager.default_font;ai.textAlign="center";for(var af=0,ag=ah.length;af<ag;af++){var Z=Math.round(af*aj);ai.fillText(ah[af],Z+ad.left_offset,10)}return new b(aa,ae,ac)}this.content_div.css("height","0px")}});var k=function(ad,ab,ae,Z,ac){var aa=this;this.track_type="LineTrack";this.display_modes=["Histogram","Line","Filled","Intensity"];this.mode="Histogram";j.call(this,ad,ab,ab.viewport_container);I.call(this);this.min_height_px=16;this.max_height_px=400;this.height_px=80;this.hda_ldda=ae;this.dataset_id=Z;this.original_dataset_id=Z;this.data_cache=new M(y,this);this.tile_cache=new c(r);this.track_config=new U({track:this,params:[{key:"color",label:"Color",type:"color",default_value:"black"},{key:"min_value",label:"Min Value",type:"float",default_value:undefined},{key:"max_value",label:"Max Value",type:"float",default_value:undefined},{key:"mode",type:"string",default_value:this.mode,hidden:true},{key:"height",type:"int",default_value:this.height_px,hidden:true}],saved_values:ac,onchange:function(){aa.vertical_range=aa.prefs.max_value-aa.prefs.min_value;$("#linetrack_"+aa.track_id+"_minval").text(aa.prefs.min_value);$("#linetrack_"+aa.track_id+"_maxval").text(aa.prefs.max_value);aa.tile_cache.clear();aa.draw()}});this.prefs=this.track_config.values;this.height_px=this.track_config.values.height;this.vertical_range=this.track_config.values.max_value-this.track_config.values.min_value;this.add_resize_handle()};n(k.prototype,I.prototype,{add_resize_handle:function(){var Z=this;var ac=false;var ab=false;var aa=$("<div class='track-resize'>");$(Z.container_div).hover(function(){ac=true;aa.show()},function(){ac=false;if(!ab){aa.hide()}});aa.hide().bind("dragstart",function(ad,ae){ab=true;ae.original_height=$(Z.content_div).height()}).bind("drag",function(ae,af){var ad=Math.min(Math.max(af.original_height+af.deltaY,Z.min_height_px),Z.max_height_px);$(Z.content_div).css("height",ad);Z.height_px=ad;Z.draw(true)}).bind("dragend",function(ad,ae){Z.tile_cache.clear();ab=false;if(!ac){aa.hide()}Z.track_config.values.height=Z.height_px}).appendTo(Z.container_div)},predraw_init:function(){var Z=this,aa=Z.view.tracks.indexOf(Z);Z.vertical_range=undefined;return $.getJSON(Z.data_url,{stats:true,chrom:Z.view.chrom,low:null,high:null,hda_ldda:Z.hda_ldda,dataset_id:Z.dataset_id},function(ab){Z.container_div.addClass("line-track");var ad=ab.data;if(isNaN(parseFloat(Z.prefs.min_value))||isNaN(parseFloat(Z.prefs.max_value))){Z.prefs.min_value=ad.min;Z.prefs.max_value=ad.max;$("#track_"+aa+"_minval").val(Z.prefs.min_value);$("#track_"+aa+"_maxval").val(Z.prefs.max_value)}Z.vertical_range=Z.prefs.max_value-Z.prefs.min_value;Z.total_frequency=ad.total_frequency;Z.container_div.find(".yaxislabel").remove();var ae=$("<div />").addClass("yaxislabel").attr("id","linetrack_"+aa+"_minval").text(u(Z.prefs.min_value));var ac=$("<div />").addClass("yaxislabel").attr("id","linetrack_"+aa+"_maxval").text(u(Z.prefs.max_value));ac.css({position:"absolute",top:"24px",left:"10px"});ac.prependTo(Z.container_div);ae.css({position:"absolute",bottom:"2px",left:"10px"});ae.prependTo(Z.container_div)})},draw_tile:function(aj,ad,aa,ai){if(this.vertical_range===undefined){return}var ae=aa*L*ad,ac=L*ad,Z=Math.ceil(ac*ai),ag=this.height_px;var ab=this.view.canvas_manager.new_canvas();ab.width=Z,ab.height=ag;var ah=ab.getContext("2d");var af=new H.LinePainter(aj.data,ae,ae+ac,this.prefs,this.mode);af.draw(ah,Z,ag);return new b(ac,ad,ab)}});var e=function(Z,ae,ad,ah,ag,ab,ac,af){var aa=this;this.track_type="FeatureTrack";this.display_modes=["Auto","Histogram","Dense","Squish","Pack"];this.track_config=new U({track:this,params:[{key:"block_color",label:"Block color",type:"color",default_value:"#444"},{key:"label_color",label:"Label color",type:"color",default_value:"black"},{key:"show_counts",label:"Show summary counts",type:"bool",default_value:true},{key:"mode",type:"string",default_value:this.mode,hidden:true},],saved_values:ag,onchange:function(){aa.tile_cache.clear();aa.draw()}});this.prefs=this.track_config.values;j.call(this,Z,ae,ae.viewport_container);I.call(this,ab,ac,af);this.height_px=0;this.container_div.addClass("feature-track");this.hda_ldda=ad;this.dataset_id=ah;this.original_dataset_id=ah;this.show_labels_scale=0.001;this.showing_details=false;this.summary_draw_height=30;this.inc_slots={};this.start_end_dct={};this.tile_cache=new c(d);this.data_cache=new M(20,this);this.left_offset=200;this.painter=H.LinkedFeaturePainter};n(e.prototype,I.prototype,{update_auto_mode:function(Z){if(this.mode=="Auto"){if(Z=="no_detail"){Z="feature spans"}else{if(Z=="summary_tree"){Z="coverage histogram"}}this.mode_div.text("Auto ("+Z+")")}},incremental_slots:function(ad,aa,ac){var ab=this.view.canvas_manager.dummy_context,Z=this.inc_slots[ad];if(!Z||(Z.mode!==ac)){Z=new (p.FeatureSlotter)(ad,ac==="Pack",w,function(ae){return ab.measureText(ae)});Z.mode=ac;this.inc_slots[ad]=Z}return Z.slot_features(aa)},get_summary_tree_data:function(ad,ag,ab,ao){if(ao>ab-ag){ao=ab-ag}var ak=Math.floor((ab-ag)/ao),an=[],ac=0;var ae=0,af=0,aj,am=0,ah=[],al,ai;var aa=function(ar,aq,at,ap){ar[0]=aq+at*ap;ar[1]=aq+(at+1)*ap};while(am<ao&&ae!==ad.length){var Z=false;for(;am<ao&&!Z;am++){aa(ah,ag,am,ak);for(af=ae;af<ad.length;af++){aj=ad[af].slice(1,3);if(is_overlap(aj,ah)){Z=true;break}}if(Z){break}}data_start_index=af;an[an.length]=al=[ah[0],0];for(;af<ad.length;af++){aj=ad[af].slice(1,3);if(is_overlap(aj,ah)){al[1]++}else{break}}if(al[1]>ac){ac=al[1]}am++}return{max:ac,delta:ak,data:an}},draw_tile:function(am,av,az,ai,ac){var ar=this,aB=az*L*av,aa=(az+1)*L*av,ao=aa-aB,at=Math.ceil(ao*ai),aq=this.mode,aF=25,ad=this.left_offset,an,ae;if(aq==="Auto"){if(am.dataset_type==="summary_tree"){aq=am.dataset_type}else{if(am.extra_info==="no_detail"){aq="no_detail"}else{var aE=am.data;if(this.view.high-this.view.low>E){aq="Squish"}else{aq="Pack"}}}this.update_auto_mode(aq)}if(aq==="summary_tree"||aq==="Histogram"){ae=this.summary_draw_height;this.container_div.find(".yaxislabel").remove();var Z=$("<div />").addClass("yaxislabel");Z.text(am.max);Z.css({position:"absolute",top:"24px",left:"10px",color:this.prefs.label_color});Z.prependTo(this.container_div);var ab=this.view.canvas_manager.new_canvas();ab.width=at+ad;ab.height=ae+N;if(am.dataset_type!="summary_tree"){var aj=this.get_summary_tree_data(am.data,aB,aa,200);if(am.max){aj.max=am.max}am=aj}var aC=new H.SummaryTreePainter(am,aB,aa,this.prefs);var au=ab.getContext("2d");au.translate(ad,N);aC.draw(au,at,ae);return new l(az,av,ab,am.max)}var an,ag=1;if(aq==="no_detail"||aq==="Squish"||aq==="Pack"){ag=this.incremental_slots(ai,am.data,aq);an=this.inc_slots[ai].slots}var ah=[];if(am.data){var ak=this.filters_manager.filters;for(var aw=0,ay=am.data.length;aw<ay;aw++){var af=am.data[aw];var ax=false;var al;for(var aA=0,aD=ak.length;aA<aD;aA++){al=ak[aA];al.update_attrs(af);if(!al.keep(af)){ax=true;break}}if(!ax){ah.push(af)}}}var aC=new (this.painter)(ah,aB,aa,this.prefs,aq,ac);var ae=aC.get_required_height(ag)+z;var ab=this.view.canvas_manager.new_canvas();ab.width=at+ad;ab.height=ae;var au=ab.getContext("2d");au.fillStyle=this.prefs.block_color;au.font=au.canvas.manager.default_font;au.textAlign="right";this.container_div.find(".yaxislabel").remove();if(am.message){au.fillStyle="red";au.textAlign="left";var ap=au.textBaseline;au.textBaseline="top";au.fillRect(ad,0,ab.width-ad,1);au.fillText(am.message,ad,2);au.textBaseline=ap;if(!am.data){return new b(az,av,ab,ae)}}this.example_feature=(am.data.length?am.data[0]:undefined);au.translate(ad,z);aC.draw(au,at,ae,an);return new K(az,av,ab)}});var O=function(ac,aa,ae,Z,ab,ad){e.call(this,ac,aa,ae,Z,ab,ad);this.track_type="VcfTrack";this.painter=H.VariantPainter};n(O.prototype,I.prototype,e.prototype);var R=function(ac,aa,ae,Z,ab,ad){e.call(this,ac,aa,ae,Z,ab,ad);this.track_config=new U({track:this,params:[{key:"block_color",label:"Block color",type:"color",default_value:"#444"},{key:"label_color",label:"Label color",type:"color",default_value:"black"},{key:"show_insertions",label:"Show insertions",type:"bool",default_value:false},{key:"show_differences",label:"Show differences only",type:"bool",default_value:true},{key:"show_counts",label:"Show summary counts",type:"bool",default_value:true},{key:"mode",type:"string",default_value:this.mode,hidden:true},],saved_values:ab,onchange:function(){this.track.tile_cache.clear();this.track.draw()}});this.prefs=this.track_config.values;this.track_type="ReadTrack";this.painter=H.ReadPainter;this.make_name_popup_menu()};n(R.prototype,I.prototype,e.prototype);var P=function(ad,ab,af,Z,ac,ae,aa){e.call(this,ad,ab,af,Z,ac,ae,{},aa);this.track_type="ToolDataFeatureTrack";this.data_url=raw_data_url;this.data_query_wait=1000;this.dataset_check_url=dataset_state_url};n(P.prototype,I.prototype,e.prototype,{predraw_init:function(){var aa=this;var Z=function(){if(aa.data_cache.size()===0){setTimeout(Z,300)}else{aa.data_url=default_data_url;aa.data_query_wait=G;aa.dataset_state_url=converted_datasets_state_url;$.getJSON(aa.dataset_state_url,{dataset_id:aa.dataset_id,hda_ldda:aa.hda_ldda},function(ab){})}};Z()}});S.View=X;S.LineTrack=k;S.FeatureTrack=e;S.ReadTrack=R};var slotting_module=function(c,b){var e=c("class").extend;var d=2,a=5;b.FeatureSlotter=function(j,h,f,g){this.slots={};this.start_end_dct={};this.w_scale=j;this.include_label=h;this.max_rows=f;this.measureText=g};e(b.FeatureSlotter.prototype,{slot_features:function(m){var p=this.w_scale,s=this.slots,h=this.start_end_dct,y=[],A=[],n=0,z=this.max_rows;for(var w=0,x=m.length;w<x;w++){var l=m[w],o=l[0];if(s[o]!==undefined){n=Math.max(n,s[o]);A.push(s[o])}else{y.push(w)}}var q=function(G,H){for(var F=0;F<=z;F++){var D=false,I=h[F];if(I!==undefined){for(var C=0,E=I.length;C<E;C++){var B=I[C];if(H>B[0]&&G<B[1]){D=true;break}}}if(!D){return F}}return -1};for(var w=0,x=y.length;w<x;w++){var l=m[y[w]],o=l[0],u=l[1],f=l[2],r=l[3],g=Math.floor(u*p),k=Math.ceil(f*p),v=this.measureText(r).width,j;if(r!==undefined&&this.include_label){v+=(d+a);if(g-v>=0){g-=v;j="left"}else{k+=v;j="right"}}var t=q(g,k);if(t>=0){if(h[t]===undefined){h[t]=[]}h[t].push([g,k]);s[o]=t;n=Math.max(n,t)}else{}}return n+1}})};var painters_module=function(j,w){var t=j("class").extend;var o=function(H,z,F,y,E,C){if(C===undefined){C=4}var B=y-z;var A=E-F;var D=Math.floor(Math.sqrt(B*B+A*A)/C);var I=B/D;var G=A/D;var x;for(x=0;x<D;x++,z+=I,F+=G){if(x%2!==0){continue}H.fillRect(z,F,C,1)}};var p=function(A,z,x,D){var C=z-D/2,B=z+D/2,E=x-Math.sqrt(D*3/2);A.beginPath();A.moveTo(C,E);A.lineTo(B,E);A.lineTo(z,x);A.lineTo(C,E);A.strokeStyle=this.fillStyle;A.fill();A.stroke();A.closePath()};var m=function(z,B,x,y,A){this.data=z;this.view_start=B;this.view_end=x;this.prefs=t({},this.default_prefs,y);this.mode=A};m.prototype.default_prefs={};var u=function(z,B,x,y,A){m.call(this,z,B,x,y,A)};u.prototype.default_prefs={show_counts:false};u.prototype.draw=function(M,z,L){var E=this.view_start,O=this.view_end-this.view_start,N=z/O;var J=this.data.data,I=this.data.delta,G=this.data.max,B=L;delta_x_px=Math.ceil(I*N);M.save();for(var C=0,D=J.length;C<D;C++){var H=Math.floor((J[C][0]-E)*N);var F=J[C][1];if(!F){continue}var K=F/G*L;if(F!==0&&K<1){K=1}M.fillStyle=this.prefs.block_color;M.fillRect(H,B-K,delta_x_px,K);var A=4;if(this.prefs.show_counts&&(M.measureText(F).width+A)<delta_x_px){M.fillStyle=this.prefs.label_color;M.textAlign="center";M.fillText(F,H+(delta_x_px/2),10)}}M.restore()};var c=function(x,B,D,E,z){m.call(this,x,B,D,E,z);if(this.prefs.min_value===undefined){var F=Infinity;for(var y=0,A=this.data.length;y<A;y++){F=Math.min(F,this.data[y][1])}this.prefs.min_value=F}if(this.prefs.max_value===undefined){var C=-Infinity;for(var y=0,A=this.data.length;y<A;y++){C=Math.max(C,this.data[y][1])}this.prefs.max_value=C}};c.prototype.default_prefs={min_value:undefined,max_value:undefined,mode:"Histogram",color:"#000",overflow_color:"#F66"};c.prototype.draw=function(O,N,L){var F=false,H=this.prefs.min_value,D=this.prefs.max_value,K=D-H,z=L,A=this.view_start,M=this.view_end-this.view_start,B=N/M,I=this.mode,S=this.data;O.save();var T=Math.round(L+H/K*L);if(I!=="Intensity"){O.fillStyle="#aaa";O.fillRect(0,T,N,1)}O.beginPath();O.fillStyle=this.prefs.color;var R,E,C;if(S.length>1){C=Math.ceil((S[1][0]-S[0][0])*B)}else{C=10}for(var P=0,Q=S.length;P<Q;P++){R=Math.round((S[P][0]-A)*B);E=S[P][1];if(E===null){if(F&&I==="Filled"){O.lineTo(R,z)}F=false;continue}if(E<H){E=H}else{if(E>D){E=D}}if(I==="Histogram"){E=Math.round(E/K*z);O.fillRect(R,T,C,-E)}else{if(I==="Intensity"){E=255-Math.floor((E-H)/K*255);O.fillStyle="rgb("+E+","+E+","+E+")";O.fillRect(R,0,C,z)}else{E=Math.round(z-(E-H)/K*z);if(F){O.lineTo(R,E)}else{F=true;if(I==="Filled"){O.moveTo(R,z);O.lineTo(R,E)}else{O.moveTo(R,E)}}}}}if(I==="Filled"){if(F){O.lineTo(R,T);O.lineTo(0,T)}O.fill()}else{O.stroke()}var x=-1,J=-1;O.fillStyle=this.prefs.overflow_color;var G;for(var P=0,Q=S.length;P<Q;P++){E=S[P][1];R=Math.round((S[P][0]-A)*B);if(J>=0&&(E===null||E<D)){O.fillRect(J,0,G+C-J,2);J=-1}else{if(x>=0&&(E===null||E>H)){O.fillRect(x,L-2,G+C-x,2);x=-1}}if(E!==null&&E>D&&J<0){J=R}else{if(E!==null&&E<H&&x<0){x=R}}G=R}O.restore()};var n=function(z,B,x,y,A){m.call(this,z,B,x,y,A)};n.prototype.default_prefs={block_color:"#FFF",connector_color:"#FFF"};t(n.prototype,{get_required_height:function(y){var x=y_scale=this.get_row_height(),z=this.mode;if(z==="no_detail"||z==="Squish"||z==="Pack"){x=y*y_scale}return x+Math.max(Math.round(y_scale/2),5)},draw:function(J,A,I,F){var D=this.data,G=this.view_start,K=this.view_end;J.save();J.fillStyle=this.prefs.block_color;J.textAlign="right";var N=this.view_end-this.view_start,M=A/N,z=this.get_row_height();for(var C=0,E=D.length;C<E;C++){var L=D[C],B=L[0],x=L[1],y=L[2],H=(F&&F[B]!==undefined?F[B]:null);if((x<K&&y>G)&&(this.mode=="Dense"||H!==null)){this.draw_element(J,this.mode,L,H,G,K,M,z,A)}}J.restore()}});var d=10,h=3,l=5,v=10,f=1,r=3,e=3,a=9,k=2,g="#ccc";var q=function(z,B,x,y,A){n.call(this,z,B,x,y,A)};t(q.prototype,n.prototype,{get_row_height:function(){var y=this.mode,x;if(y==="Dense"){x=d}else{if(y==="no_detail"){x=h}else{if(y==="Squish"){x=l}else{x=v}}}return x},draw_element:function(J,C,R,E,L,ab,af,ag,x){var O=R[0],ad=R[1],V=R[2],M=R[3],W=Math.floor(Math.max(0,(ad-L)*af)),K=Math.ceil(Math.min(x,Math.max(0,(V-L)*af))),U=(C==="Dense"?0:(0+E))*ag,I,Z,N=null,ah=null,A=this.prefs.block_color,Y=this.prefs.label_color;if(C=="Dense"){E=1}if(C==="no_detail"){J.fillStyle=A;J.fillRect(W,U+5,K-W,f)}else{var H=R[4],T=R[5],X=R[6],B=R[7];if(T&&X){N=Math.floor(Math.max(0,(T-L)*af));ah=Math.ceil(Math.min(x,Math.max(0,(X-L)*af)))}var ae,P;if(C==="Squish"||C==="Dense"){ae=1;P=e}else{ae=5;P=a}if(!B){if(R.strand){if(R.strand==="+"){J.fillStyle=J.canvas.manager.get_pattern("right_strand_inv")}else{if(R.strand==="-"){J.fillStyle=J.canvas.manager.get_pattern("left_strand_inv")}}}else{J.fillStyle=A}J.fillRect(W,U,K-W,P)}else{var G,Q;if(C==="Squish"||C==="Dense"){J.fillStyle=g;G=U+Math.floor(e/2)+1;Q=1}else{if(H){var G=U;var Q=P;if(H==="+"){J.fillStyle=J.canvas.manager.get_pattern("right_strand")}else{if(H==="-"){J.fillStyle=J.canvas.manager.get_pattern("left_strand")}}}else{J.fillStyle=g;G+=(e/2)+1;Q=1}}J.fillRect(W,G,K-W,Q);for(var ac=0,z=B.length;ac<z;ac++){var D=B[ac],y=Math.floor(Math.max(0,(D[0]-L)*af)),S=Math.ceil(Math.min(x,Math.max((D[1]-L)*af)));if(y>S){continue}J.fillStyle=A;J.fillRect(y,U+(P-ae)/2+1,S-y,ae);if(N!==undefined&&X>T&&!(y>ah||S<N)){var aa=Math.max(y,N),F=Math.min(S,ah);J.fillRect(aa,U+1,F-aa,P);if(B.length==1&&C=="Pack"){if(H==="+"){J.fillStyle=J.canvas.manager.get_pattern("right_strand_inv")}else{if(H==="-"){J.fillStyle=J.canvas.manager.get_pattern("left_strand_inv")}}if(aa+14<F){aa+=2;F-=2}J.fillRect(aa,U+1,F-aa,P)}}}}if(C==="Pack"&&ad>L){J.fillStyle=Y;if(L===0&&W-J.measureText(M).width<0){J.textAlign="left";J.fillText(M,K+k,U+8)}else{J.textAlign="right";J.fillText(M,W-k,U+8)}J.fillStyle=A}}}});var b=function(z,B,x,y,A){n.call(this,z,B,x,y,A)};t(b.prototype,n.prototype,{draw_element:function(Q,L,F,B,T,z,I,R,O){var F=data[i],H=F[0],P=F[1],A=F[2],K=F[3],D=Math.floor(Math.max(0,(P-T)*I)),G=Math.ceil(Math.min(O,Math.max(0,(A-T)*I))),C=(L==="Dense"?0:(0+B))*R,x,U,y=null,J=null;if(no_label){Q.fillStyle=block_color;Q.fillRect(D+left_offset,C+5,G-D,1)}else{var S=F[4],N=F[5],E=F[6];x=9;U=1;Q.fillRect(D+left_offset,C,G-D,x);if(L!=="Dense"&&K!==undefined&&P>T){Q.fillStyle=label_color;if(T===0&&D-Q.measureText(K).width<0){Q.textAlign="left";Q.fillText(K,G+2+left_offset,C+8)}else{Q.textAlign="right";Q.fillText(K,D-2+left_offset,C+8)}Q.fillStyle=block_color}var M=S+" / "+N;if(P>T&&Q.measureText(M).width<(G-D)){Q.fillStyle="white";Q.textAlign="center";Q.fillText(M,left_offset+D+(G-D)/2,C+8);Q.fillStyle=block_color}}}});var s=function(A,C,x,z,B,y){n.call(this,A,C,x,z,B);this.ref_seq=y};s.prototype.default_prefs=t({},n.prototype.default_prefs,{show_insertions:false});t(s.prototype,n.prototype,{get_row_height:function(){var x,y=this.mode;if(y==="Dense"){x=d}else{if(y==="Squish"){x=l}else{x=v;if(this.prefs.show_insertions){x*=2}}}return x},draw_read:function(T,O,K,Y,z,S,H,E,D){T.textAlign="center";var R=this,y=[Y,z],N=0,U=0,Q=0;ref_seq=this.ref_seq,char_width_px=T.canvas.manager.char_width_px;var ad=[];if((O==="Pack"||this.mode==="Auto")&&E!==undefined&&K>char_width_px){Q=Math.round(K/2)}if(!H){H=[[0,E.length]]}for(var L=0,W=H.length;L<W;L++){var I=H[L],A="MIDNSHP=X"[I[0]],M=I[1];if(A==="H"||A==="S"){N-=M}var F=S+N,ac=Math.floor(Math.max(0,(F-Y)*K)),G=Math.floor(Math.max(0,(F+M-Y)*K));if(ac===G){G+=1}switch(A){case"H":break;case"S":case"M":case"=":if(is_overlap([F,F+M],y)){var P=E.slice(U,U+M);if(Q>0){T.fillStyle=this.prefs.block_color;T.fillRect(ac-Q,D+1,G-ac,9);T.fillStyle=g;for(var aa=0,x=P.length;aa<x;aa++){if(this.prefs.show_differences&&ref_seq){var J=ref_seq[F-Y+aa];if(!J||J.toLowerCase()===P[aa].toLowerCase()){continue}}if(F+aa>=Y&&F+aa<=z){var ab=Math.floor(Math.max(0,(F+aa-Y)*K));T.fillText(P[aa],ab,D+9)}}}else{T.fillStyle=this.prefs.block_color;T.fillRect(ac,D+4,G-ac,e)}}U+=M;N+=M;break;case"N":T.fillStyle=g;T.fillRect(ac-Q,D+5,G-ac,1);N+=M;break;case"D":T.fillStyle="red";T.fillRect(ac-Q,D+4,G-ac,3);N+=M;break;case"P":break;case"I":var X=ac-Q;if(is_overlap([F,F+M],y)){var P=E.slice(U,U+M);if(this.prefs.show_insertions){var C=ac-(G-ac)/2;if((O==="Pack"||this.mode==="Auto")&&E!==undefined&&K>char_width_px){T.fillStyle="yellow";T.fillRect(C-Q,D-9,G-ac,9);ad[ad.length]={type:"triangle",data:[X,D+4,5]};T.fillStyle=g;switch(seq_tile_overlap){case (OVERLAP_START):P=P.slice(Y-F);break;case (OVERLAP_END):P=P.slice(0,F-z);break;case (CONTAINED_BY):break;case (CONTAINS):P=P.slice(Y-F,F-z);break}for(var aa=0,x=P.length;aa<x;aa++){var ab=Math.floor(Math.max(0,(F+aa-Y)*K));T.fillText(P[aa],ab-(G-ac)/2,D)}}else{T.fillStyle="yellow";T.fillRect(C,D+(this.mode!=="Dense"?2:5),G-ac,(O!=="Dense"?e:r))}}else{if((O==="Pack"||this.mode==="Auto")&&E!==undefined&&K>char_width_px){ad[ad.length]={type:"text",data:[P.length,X,D+9]}}else{}}}U+=M;break;case"X":U+=M;break}}T.fillStyle="yellow";var Z,B,ae;for(var V=0;V<ad.length;V++){Z=ad[V];B=Z.type;ae=Z.data;if(B==="text"){T.save();T.font="bold "+T.font;T.fillText(ae[0],ae[1],ae[2]);T.restore()}else{if(B=="triangle"){p(T,ae[0],ae[1],ae[2])}}}},draw_element:function(Q,L,D,A,T,y,H,R,O){var G=D[0],P=D[1],z=D[2],I=D[3],C=Math.floor(Math.max(0,(P-T)*H)),E=Math.ceil(Math.min(O,Math.max(0,(z-T)*H))),B=(L==="Dense"?0:(0+A))*R,U=this.prefs.block_color,F=this.prefs.label_color,N=0;if((L==="Pack"||this.mode==="Auto")&&H>Q.canvas.manager.char_width_px){var N=Math.round(H/2)}Q.fillStyle=U;if(D[5] instanceof Array){var M=Math.floor(Math.max(0,(D[4][0]-T)*H)),K=Math.ceil(Math.min(O,Math.max(0,(D[4][1]-T)*H))),J=Math.floor(Math.max(0,(D[5][0]-T)*H)),x=Math.ceil(Math.min(O,Math.max(0,(D[5][1]-T)*H)));if(D[4][1]>=T&&D[4][0]<=y&&D[4][2]){this.draw_read(Q,L,H,T,y,D[4][0],D[4][2],D[4][3],B)}if(D[5][1]>=T&&D[5][0]<=y&&D[5][2]){this.draw_read(Q,L,H,T,y,D[5][0],D[5][2],D[5][3],B)}if(J>K){Q.fillStyle=g;o(Q,K-N,B+5,J-N,B+5)}}else{Q.fillStyle=U;this.draw_read(Q,L,H,T,y,P,D[4],D[5],B)}if(L==="Pack"&&P>T){Q.fillStyle=this.prefs.label_color;var S=1;if(S===0&&C-Q.measureText(I).width<0){Q.textAlign="left";Q.fillText(I,E+k-N,B+8)}else{Q.textAlign="right";Q.fillText(I,C-k-N,B+8)}Q.fillStyle=U}}});w.SummaryTreePainter=u;w.LinePainter=c;w.LinkedFeaturePainter=q;w.ReadPainter=s;w.VariantPainter=b};(function(d){var c={};var b=function(e){return c[e]};var a=function(f,g){var e={};g(b,e);c[f]=e};a("class",class_module);a("slotting",slotting_module);a("painters",painters_module);a("trackster",trackster_module);for(key in c.trackster){d[key]=c.trackster[key]}})(window);
\ No newline at end of file
--- a/static/scripts/trackster.js Thu May 12 16:53:11 2011 -0400
+++ b/static/scripts/trackster.js Fri May 13 08:32:35 2011 -0400
@@ -999,8 +999,9 @@
$.extend(url_params, this.get_param_values_dict());
// Run tool.
+ // TODO: rewrite to use $.when():
var json_run_tool = function() {
- $.getJSON(run_tool_url, url_params, function(response) {
+ $.getJSON(rerun_tool_url, url_params, function(response) {
if (response === "no converter") {
// No converter available for input datasets, so cannot run tool.
new_track.container_div.addClass("error");
@@ -1046,18 +1047,19 @@
/**
* Filters that enable users to show/hide data points dynamically.
*/
-var Filter = function(name, index, value) {
+var Filter = function(name, index, tool_id, tool_exp_name) {
this.name = name;
+ // Index into payload to filter.
this.index = index;
- this.value = value;
+ this.tool_id = tool_id;
+ // Name to use for filter when building expression for tool.
+ this.tool_exp_name = tool_exp_name;
};
/**
* Number filters have a min, max as well as a low, high; low and high are used
*/
-var NumberFilter = function(name, index) {
- this.name = name;
- // Index into payload to filter.
- this.index = index;
+var NumberFilter = function(name, index, tool_id, tool_exp_name) {
+ Filter.call(this, name, index, tool_id, tool_exp_name);
// Filter low/high. These values are used to filter elements.
this.low = -Number.MAX_VALUE;
this.high = Number.MAX_VALUE;
@@ -1148,12 +1150,18 @@
this.track = track;
this.filters = [];
for (var i = 0; i < filters_list.length; i++) {
- var filter_dict = filters_list[i];
- var name = filter_dict.name, type = filter_dict.type, index = filter_dict.index;
+ var
+ filter_dict = filters_list[i],
+ name = filter_dict.name,
+ type = filter_dict.type,
+ index = filter_dict.index,
+ tool_id = filter_dict.tool_id,
+ tool_exp_name = filter_dict.tool_exp_name;
if (type === 'int' || type === 'float') {
- this.filters[i] = new NumberFilter(name, index);
+ this.filters[i] =
+ new NumberFilter(name, index, tool_id, tool_exp_name);
} else {
- this.filters[i] = new Filter(name, index, type);
+ console.log("ERROR: unsupported filter: ", name, type)
}
}
@@ -1283,9 +1291,93 @@
// Add to clear floating layout.
$("<div style='clear: both;'/>").appendTo(filter_div);
- });
+ });
+
+ // Add button to filter complete dataset.
+ if (this.filters.length != 0) {
+ var run_buttons_row = $("<div>").addClass("param-row").appendTo(this.parent_div);
+ var run_on_dataset_button = $("<input type='submit'>").attr("value", "Run on complete dataset").appendTo(run_buttons_row);
+ var filter_manager = this;
+ run_on_dataset_button.click( function() {
+ filter_manager.run_on_dataset();
+ });
+ }
};
+extend(FiltersManager.prototype, {
+ /**
+ * Reset filters to min and max.
+ */
+ reset_filters: function() {
+ for (var i = 0; i < this.filters.length; i++) {
+ filter = this.filters[i];
+ filter.slider.slider("option", "values", [filter.min, filter.max]);
+ }
+ },
+ run_on_dataset: function() {
+ // Get or create dictionary item.
+ var get_or_create_dict_item = function(dict, key, new_item) {
+ // Add new item to dict if
+ if (!(key in dict)) {
+ dict[key] = new_item;
+ }
+ return dict[key];
+ };
+
+ //
+ // Find and group active filters. Active filters are those being used to hide data.
+ // Filters with the same tool id are grouped.
+ //
+ var active_filters = {},
+ filter,
+ tool_filter_conditions,
+ operation;
+ for (var i = 0; i < this.filters.length; i++) {
+ filter = this.filters[i];
+ if (filter.tool_id) {
+ // Add filtering conditions if filter low/high are set.
+ if (filter.min != filter.low) {
+ tool_filter_conditions = get_or_create_dict_item(active_filters, filter.tool_id, []);
+ tool_filter_conditions[tool_filter_conditions.length] = filter.tool_exp_name + " >= " + filter.low;
+ }
+ if (filter.max != filter.high) {
+ tool_filter_conditions = get_or_create_dict_item(active_filters, filter.tool_id, []);
+ tool_filter_conditions[tool_filter_conditions.length] = filter.tool_exp_name + " <= " + filter.high;
+ }
+ }
+ }
+
+ //
+ // Use tools to run filters.
+ //
+ for (var tool_id in active_filters) {
+ var
+ tool_filters = active_filters[tool_id],
+ tool_filter_str = "(" + tool_filters.join(") and (") + ")",
+ url_params = {
+ cond: tool_filter_str,
+ input: this.track.dataset_id,
+ target_dataset_id: this.track.dataset_id,
+ tool_id: tool_id
+ };
+
+ $.getJSON(run_tool_url, url_params, function(response) {
+ if (response.error) {
+ // General error.
+ new_track.container_div.addClass("error");
+ new_track.content_div.text(DATA_CANNOT_RUN_TOOL + response.message);
+ }
+ else {
+ // Job submitted and running.
+ show_modal("Filter Dataset",
+ tool_id + " is running on the complete dataset. Tool outputs are in dataset's history.",
+ { "Close" : hide_modal } );
+ }
+ });
+ }
+ }
+});
+
/**
* Container for track configuration data.
*/
@@ -1683,8 +1775,11 @@
// Show/hide filters menu item.
var text = (track.filters_div.is(":visible") ? "Hide filters" : "Show filters");
track_dropdown[text] = function() {
- // Toggle filtering div and remake menu.
+ // Toggle filtering div, reset filters, and remake menu.
track.filters_visible = (track.filters_div.is(":visible"));
+ if (track.filters_visible) {
+ track.filters_manager.reset_filters();
+ }
track.filters_div.toggle();
track.make_name_popup_menu();
};
--- a/templates/tracks/browser.mako Thu May 12 16:53:11 2011 -0400
+++ b/templates/tracks/browser.mako Fri May 13 08:32:35 2011 -0400
@@ -65,6 +65,7 @@
var default_data_url = "${h.url_for( action='data' )}",
raw_data_url = "${h.url_for( action='raw_data' )}",
run_tool_url = "${h.url_for( action='run_tool' )}",
+ rerun_tool_url = "${h.url_for( action='rerun_tool' )}",
reference_url = "${h.url_for( action='reference' )}",
chrom_url = "${h.url_for( action='chroms' )}",
dataset_state_url = "${h.url_for( action='dataset_state' )}",
--- a/templates/visualization/display.mako Thu May 12 16:53:11 2011 -0400
+++ b/templates/visualization/display.mako Fri May 13 08:32:35 2011 -0400
@@ -64,6 +64,7 @@
var default_data_url = "${h.url_for( controller='/tracks', action='data' )}",
raw_data_url = "${h.url_for( controller='/tracks', action='raw_data' )}",
run_tool_url = "${h.url_for( controller='/tracks', action='run_tool' )}",
+ rerun_tool_url = "${h.url_for( controller='/tracks', action='run_tool' )}",
reference_url = "${h.url_for( controller='/tracks', action='reference' )}",
chrom_url = "${h.url_for( controller='/tracks', action='chroms' )}",
dataset_state_url = "${h.url_for( controller='/tracks', action='dataset_state' )}",
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0

commit/galaxy-central: jgoecks: Trackster: reset filters when they are hidden.
by Bitbucket 12 May '11
by Bitbucket 12 May '11
12 May '11
1 new changeset in galaxy-central:
http://bitbucket.org/galaxy/galaxy-central/changeset/399be3715670/
changeset: r5551:399be3715670
user: jgoecks
date: 2011-05-13 02:01:42
summary: Trackster: reset filters when they are hidden.
affected #: 2 files (626 bytes)
--- a/static/scripts/packed/trackster.js Thu May 12 17:12:01 2011 -0400
+++ b/static/scripts/packed/trackster.js Thu May 12 20:01:42 2011 -0400
@@ -1,1 +1,1 @@
-var class_module=function(b,a){var c=function(){var f=arguments[0];for(var e=1;e<arguments.length;e++){var d=arguments[e];for(key in d){f[key]=d[key]}}return f};a.extend=c};var BEFORE=1001,CONTAINS=1002,OVERLAP_START=1003,OVERLAP_END=1004,CONTAINED_BY=1005,AFTER=1006;var compute_overlap=function(e,b){var g=e[0],f=e[1],d=b[0],c=b[1],a;if(g<d){if(f<d){a=BEFORE}else{if(f<=c){a=OVERLAP_START}else{a=CONTAINS}}}else{if(g>c){a=AFTER}else{if(f<=c){a=CONTAINED_BY}else{a=OVERLAP_END}}}return a};var is_overlap=function(c,b){var a=compute_overlap(c,b);return(a!==BEFORE&&a!==AFTER)};var trackster_module=function(f,S){var n=f("class").extend,p=f("slotting"),H=f("painters");var Y=function(Z,aa){this.document=Z;this.default_font=aa!==undefined?aa:"9px Monaco, Lucida Console, monospace";this.dummy_canvas=this.new_canvas();this.dummy_context=this.dummy_canvas.getContext("2d");this.dummy_context.font=this.default_font;this.char_width_px=this.dummy_context.measureText("A").width;this.patterns={};this.load_pattern("right_strand","/visualization/strand_right.png");this.load_pattern("left_strand","/visualization/strand_left.png");this.load_pattern("right_strand_inv","/visualization/strand_right_inv.png");this.load_pattern("left_strand_inv","/visualization/strand_left_inv.png")};n(Y.prototype,{load_pattern:function(Z,ad){var aa=this.patterns,ab=this.dummy_context,ac=new Image();ac.src=image_path+ad;ac.onload=function(){aa[Z]=ab.createPattern(ac,"repeat")}},get_pattern:function(Z){return this.patterns[Z]},new_canvas:function(){var Z=this.document.createElement("canvas");if(window.G_vmlCanvasManager){G_vmlCanvasManager.initElement(Z)}Z.manager=this;return Z}});var B=function(Z,aa){Z.bind("drag",{handle:aa,relative:true},function(ae,af){var ad=$(this).parent();var ac=ad.children();var ab;for(ab=0;ab<ac.length;ab++){if(af.offsetY<$(ac.get(ab)).position().top){break}}if(ab===ac.length){if(this!==ac.get(ab-1)){ad.append(this)}}else{if(this!==ac.get(ab)){$(this).insertBefore(ac.get(ab))}}}).bind("dragstart",function(){$(this).css({"border-top":"1px solid blue","border-bottom":"1px solid blue"})}).bind("dragend",function(){$(this).css("border","0px")})};S.sortable=B;var C=9,z=10,N=C+2,w=100,E=12000,L=200,s=10,G=5000,t=100,m="There was an error in indexing this dataset. ",F="A converter for this dataset is not installed. Please check your datatypes_conf.xml file.",A="No data for this chrom/contig.",q="Currently indexing... please wait",v="Tool cannot be rerun: ",a="Loading data...",T="Ready for display",d=10,r=5,y=5;function u(Z){return Math.round(Z*1000)/1000}var c=function(Z){this.num_elements=Z;this.clear()};n(c.prototype,{get:function(aa){var Z=this.key_ary.indexOf(aa);if(Z!==-1){this.move_key_to_end(aa,Z)}return this.obj_cache[aa]},set:function(aa,ab){if(!this.obj_cache[aa]){if(this.key_ary.length>=this.num_elements){var Z=this.key_ary.shift();delete this.obj_cache[Z]}this.key_ary.push(aa)}this.obj_cache[aa]=ab;return ab},move_key_to_end:function(aa,Z){this.key_ary.splice(Z,1);this.key_ary.push(aa)},clear:function(){this.obj_cache={};this.key_ary=[]},size:function(){return this.key_ary.length}});var M=function(aa,Z,ab){c.call(this,aa);this.track=Z;this.subset=(ab!==undefined?ab:true)};n(M.prototype,c.prototype,{load_data:function(ah,ai,ad,ag,aa,af){var ac={chrom:ah,low:ai,high:ad,mode:ag,resolution:aa,dataset_id:this.track.dataset_id,hda_ldda:this.track.hda_ldda};$.extend(ac,af);if(this.track.filters_manager){var aj=[];var Z=this.track.filters_manager.filters;for(var ae=0;ae<Z.length;ae++){aj[aj.length]=Z[ae].name}ac.filter_cols=JSON.stringify(aj)}var ab=this;return $.getJSON(this.track.data_url,ac,function(ak){ab.set_data(ai,ad,ag,ak)})},get_data:function(ab,Z,ae,af,aa,ad){var ac=this.get(this.gen_key(Z,ae,af));if(ac){return ac}ac=this.load_data(ab,Z,ae,af,aa,ad);this.set_data(Z,ae,af,ac);return ac},set_data:function(aa,ab,ac,Z){return this.set(this.gen_key(aa,ab,ac),Z)},gen_key:function(Z,ab,ac){var aa=Z+"_"+ab+"_"+ac;return aa},split_key:function(Z){return Z.split("_")}});var D=function(aa,Z,ab){M.call(this,aa,Z,ab)};n(D.prototype,M.prototype,c.prototype,{load_data:function(ab,Z,ad,ae,aa,ac){if(aa>1){return}return M.prototype.load_data.call(this,ab,Z,ad,ae,aa,ac)}});var X=function(Z,ac,ab,aa,ad){this.container=Z;this.chrom=null;this.vis_id=ab;this.dbkey=aa;this.title=ac;this.tracks=[];this.label_tracks=[];this.max_low=0;this.max_high=0;this.num_tracks=0;this.track_id_counter=0;this.zoom_factor=3;this.min_separation=30;this.has_changes=false;this.init(ad);this.canvas_manager=new Y(Z.get(0).ownerDocument);this.reset()};n(X.prototype,{init:function(ac){var ab=this.container,Z=this;this.top_container=$("<div/>").addClass("top-container").appendTo(ab);this.content_div=$("<div/>").addClass("content").css("position","relative").appendTo(ab);this.bottom_container=$("<div/>").addClass("bottom-container").appendTo(ab);this.top_labeltrack=$("<div/>").addClass("top-labeltrack").appendTo(this.top_container);this.viewport_container=$("<div/>").addClass("viewport-container").addClass("viewport-container").appendTo(this.content_div);this.intro_div=$("<div/>").addClass("intro").text("Select a chrom from the dropdown below").hide();this.nav_labeltrack=$("<div/>").addClass("nav-labeltrack").appendTo(this.bottom_container);this.nav_container=$("<div/>").addClass("nav-container").prependTo(this.top_container);this.nav=$("<div/>").addClass("nav").appendTo(this.nav_container);this.overview=$("<div/>").addClass("overview").appendTo(this.bottom_container);this.overview_viewport=$("<div/>").addClass("overview-viewport").appendTo(this.overview);this.overview_close=$("<a href='javascript:void(0);'>Close Overview</a>").addClass("overview-close").hide().appendTo(this.overview_viewport);this.overview_highlight=$("<div/>").addClass("overview-highlight").hide().appendTo(this.overview_viewport);this.overview_box_background=$("<div/>").addClass("overview-boxback").appendTo(this.overview_viewport);this.overview_box=$("<div/>").addClass("overview-box").appendTo(this.overview_viewport);this.default_overview_height=this.overview_box.height();this.nav_controls=$("<div/>").addClass("nav-controls").appendTo(this.nav);this.chrom_select=$("<select/>").attr({name:"chrom"}).css("width","15em").addClass("no-autocomplete").append("<option value=''>Loading</option>").appendTo(this.nav_controls);var aa=function(ad){if(ad.type==="focusout"||(ad.keyCode||ad.which)===13||(ad.keyCode||ad.which)===27){if((ad.keyCode||ad.which)!==27){Z.go_to($(this).val())}$(this).hide();$(this).val("");Z.location_span.show();Z.chrom_select.show()}};this.nav_input=$("<input/>").addClass("nav-input").hide().bind("keyup focusout",aa).appendTo(this.nav_controls);this.location_span=$("<span/>").addClass("location").appendTo(this.nav_controls);this.location_span.bind("click",function(){Z.location_span.hide();Z.chrom_select.hide();Z.nav_input.val(Z.chrom+":"+Z.low+"-"+Z.high);Z.nav_input.css("display","inline-block");Z.nav_input.select();Z.nav_input.focus()});if(this.vis_id!==undefined){this.hidden_input=$("<input/>").attr("type","hidden").val(this.vis_id).appendTo(this.nav_controls)}this.zo_link=$("<a id='zoom-out' />").click(function(){Z.zoom_out();Z.redraw()}).appendTo(this.nav_controls);this.zi_link=$("<a id='zoom-in' />").click(function(){Z.zoom_in();Z.redraw()}).appendTo(this.nav_controls);this.load_chroms({low:0},ac);this.chrom_select.bind("change",function(){Z.change_chrom(Z.chrom_select.val())});this.intro_div.show();this.content_div.bind("click",function(ad){$(this).find("input").trigger("blur")});this.content_div.bind("dblclick",function(ad){Z.zoom_in(ad.pageX,this.viewport_container)});this.overview_box.bind("dragstart",function(ad,ae){this.current_x=ae.offsetX}).bind("drag",function(ad,af){var ag=af.offsetX-this.current_x;this.current_x=af.offsetX;var ae=Math.round(ag/Z.viewport_container.width()*(Z.max_high-Z.max_low));Z.move_delta(-ae)});this.overview_close.bind("click",function(){for(var ae=0,ad=Z.tracks.length;ae<ad;ae++){Z.tracks[ae].is_overview=false}$(this).siblings().filter("canvas").remove();$(this).parent().css("height",Z.overview_box.height());Z.overview_highlight.hide();$(this).hide()});this.viewport_container.bind("draginit",function(ad,ae){if(ad.clientX>Z.viewport_container.width()-16){return false}}).bind("dragstart",function(ad,ae){ae.original_low=Z.low;ae.current_height=ad.clientY;ae.current_x=ae.offsetX}).bind("drag",function(af,ah){var ad=$(this);var ai=ah.offsetX-ah.current_x;var ae=ad.scrollTop()-(af.clientY-ah.current_height);ad.scrollTop(ae);ah.current_height=af.clientY;ah.current_x=ah.offsetX;var ag=Math.round(ai/Z.viewport_container.width()*(Z.high-Z.low));Z.move_delta(ag)}).bind("mousewheel",function(af,ah,ae,ad){if(ae){var ag=Math.round(-ae/Z.viewport_container.width()*(Z.high-Z.low));Z.move_delta(ag)}});this.top_labeltrack.bind("dragstart",function(ad,ae){return $("<div />").css({height:Z.content_div.height()+Z.top_labeltrack.height()+Z.nav_labeltrack.height()+1,top:"0px",position:"absolute","background-color":"#ccf",opacity:0.5,"z-index":1000}).appendTo($(this))}).bind("drag",function(ah,ai){$(ai.proxy).css({left:Math.min(ah.pageX,ai.startX),width:Math.abs(ah.pageX-ai.startX)});var ae=Math.min(ah.pageX,ai.startX)-Z.container.offset().left,ad=Math.max(ah.pageX,ai.startX)-Z.container.offset().left,ag=(Z.high-Z.low),af=Z.viewport_container.width();Z.update_location(Math.round(ae/af*ag)+Z.low,Math.round(ad/af*ag)+Z.low)}).bind("dragend",function(ai,aj){var ae=Math.min(ai.pageX,aj.startX),ad=Math.max(ai.pageX,aj.startX),ag=(Z.high-Z.low),af=Z.viewport_container.width(),ah=Z.low;Z.low=Math.round(ae/af*ag)+ah;Z.high=Math.round(ad/af*ag)+ah;$(aj.proxy).remove();Z.redraw()});this.add_label_track(new W(this,this.top_labeltrack));this.add_label_track(new W(this,this.nav_labeltrack));$(window).bind("resize",function(){Z.resize_window()});$(document).bind("redraw",function(){Z.redraw()});this.reset();$(window).trigger("resize")},update_location:function(Z,aa){this.location_span.text(commatize(Z)+" - "+commatize(aa));this.nav_input.val(this.chrom+":"+commatize(Z)+"-"+commatize(aa))},load_chroms:function(aa,ab){aa.num=t;$.extend(aa,(this.vis_id!==undefined?{vis_id:this.vis_id}:{dbkey:this.dbkey}));var Z=this;$.ajax({url:chrom_url,data:aa,dataType:"json",success:function(ad){if(ad.chrom_info.length===0){alert("Invalid chromosome: "+aa.chrom);return}if(ad.reference){Z.add_label_track(new x(Z))}Z.chrom_data=ad.chrom_info;var ag='<option value="">Select Chrom/Contig</option>';for(var af=0,ac=Z.chrom_data.length;af<ac;af++){var ae=Z.chrom_data[af].chrom;ag+='<option value="'+ae+'">'+ae+"</option>"}if(ad.prev_chroms){ag+='<option value="previous">Previous '+t+"</option>"}if(ad.next_chroms){ag+='<option value="next">Next '+t+"</option>"}Z.chrom_select.html(ag);if(ab){ab()}Z.chrom_start_index=ad.start_index},error:function(){alert("Could not load chroms for this dbkey:",Z.dbkey)}})},change_chrom:function(ad,aa,af){if(!ad||ad==="None"){return}var ac=this;if(ad==="previous"){ac.load_chroms({low:this.chrom_start_index-t});return}if(ad==="next"){ac.load_chroms({low:this.chrom_start_index+t});return}var ae=$.grep(ac.chrom_data,function(ah,ai){return ah.chrom===ad})[0];if(ae===undefined){ac.load_chroms({chrom:ad},function(){ac.change_chrom(ad,aa,af)});return}else{if(ad!==ac.chrom){ac.chrom=ad;if(!ac.chrom){ac.intro_div.show()}else{ac.intro_div.hide()}ac.chrom_select.val(ac.chrom);ac.max_high=ae.len-1;ac.reset();ac.redraw(true);for(var ag=0,Z=ac.tracks.length;ag<Z;ag++){var ab=ac.tracks[ag];if(ab.init){ab.init()}}}if(aa!==undefined&&af!==undefined){ac.low=Math.max(aa,0);ac.high=Math.min(af,ac.max_high)}ac.reset_overview();ac.redraw()}},go_to:function(ad){var ah=this,Z,ac,aa=ad.split(":"),af=aa[0],ag=aa[1];if(ag!==undefined){try{var ae=ag.split("-");Z=parseInt(ae[0].replace(/,/g,""),10);ac=parseInt(ae[1].replace(/,/g,""),10)}catch(ab){return false}}ah.change_chrom(af,Z,ac)},move_fraction:function(ab){var Z=this;var aa=Z.high-Z.low;this.move_delta(ab*aa)},move_delta:function(ab){var Z=this;var aa=Z.high-Z.low;if(Z.low-ab<Z.max_low){Z.low=Z.max_low;Z.high=Z.max_low+aa}else{if(Z.high-ab>Z.max_high){Z.high=Z.max_high;Z.low=Z.max_high-aa}else{Z.high-=ab;Z.low-=ab}}Z.redraw()},add_track:function(Z){Z.view=this;Z.track_id=this.track_id_counter;this.tracks.push(Z);if(Z.init){Z.init()}Z.container_div.attr("id","track_"+Z.track_id);B(Z.container_div,".draghandle");this.track_id_counter+=1;this.num_tracks+=1},add_label_track:function(Z){Z.view=this;this.label_tracks.push(Z)},remove_track:function(Z){this.has_changes=true;Z.container_div.fadeOut("slow",function(){$(this).remove()});delete this.tracks[this.tracks.indexOf(Z)];this.num_tracks-=1},reset:function(){this.low=this.max_low;this.high=this.max_high;this.viewport_container.find(".yaxislabel").remove()},redraw:function(ag){var af=this.high-this.low,ae=this.low,aa=this.high;if(ae<this.max_low){ae=this.max_low}if(aa>this.max_high){aa=this.max_high}if(this.high!==0&&af<this.min_separation){aa=ae+this.min_separation}this.low=Math.floor(ae);this.high=Math.ceil(aa);this.resolution=Math.pow(10,Math.ceil(Math.log((this.high-this.low)/L)/Math.LN10));this.zoom_res=Math.pow(s,Math.max(0,Math.ceil(Math.log(this.resolution,s)/Math.log(s))));var Z=(this.low/(this.max_high-this.max_low)*this.overview_viewport.width())||0;var ad=((this.high-this.low)/(this.max_high-this.max_low)*this.overview_viewport.width())||0;var ah=13;this.overview_box.css({left:Z,width:Math.max(ah,ad)}).show();if(ad<ah){this.overview_box.css("left",Z-(ah-ad)/2)}if(this.overview_highlight){this.overview_highlight.css({left:Z,width:ad})}this.update_location(this.low,this.high);if(!ag){for(var ab=0,ac=this.tracks.length;ab<ac;ab++){if(this.tracks[ab]&&this.tracks[ab].enabled){this.tracks[ab].draw()}}for(ab=0,ac=this.label_tracks.length;ab<ac;ab++){this.label_tracks[ab].draw()}}},zoom_in:function(aa,ab){if(this.max_high===0||this.high-this.low<this.min_separation){return}var ac=this.high-this.low,ad=ac/2+this.low,Z=(ac/this.zoom_factor)/2;if(aa){ad=aa/this.viewport_container.width()*(this.high-this.low)+this.low}this.low=Math.round(ad-Z);this.high=Math.round(ad+Z);this.redraw()},zoom_out:function(){if(this.max_high===0){return}var aa=this.high-this.low,ab=aa/2+this.low,Z=(aa*this.zoom_factor)/2;this.low=Math.round(ab-Z);this.high=Math.round(ab+Z);this.redraw()},resize_window:function(){this.viewport_container.height(this.container.height()-this.top_container.height()-this.bottom_container.height());this.nav_container.width(this.container.width());this.redraw()},reset_overview:function(){this.overview_viewport.find("canvas").remove();this.overview_viewport.height(this.default_overview_height);this.overview_box.height(this.default_overview_height);this.overview_close.hide();this.overview_highlight.hide()}});var o=function(ab,af){this.track=ab;this.name=af.name;this.params=[];var am=af.params;for(var ac=0;ac<am.length;ac++){var ah=am[ac],aa=ah.name,al=ah.label,ad=unescape(ah.html),an=ah.value,aj=ah.type;if(aj==="number"){this.params[this.params.length]=new g(aa,al,ad,an,ah.min,ah.max)}else{if(aj=="select"){this.params[this.params.length]=new J(aa,al,ad,an)}else{console.log("WARNING: unrecognized tool parameter type:",aa,aj)}}}this.parent_div=$("<div/>").addClass("dynamic-tool").hide();this.parent_div.bind("drag",function(ap){ap.stopPropagation()}).bind("click",function(ap){ap.stopPropagation()}).bind("dblclick",function(ap){ap.stopPropagation()});var ak=$("<div class='tool-name'>").appendTo(this.parent_div).text(this.name);var ai=this.params;var ag=this;$.each(this.params,function(aq,au){var at=$("<div>").addClass("param-row").appendTo(ag.parent_div);var ap=$("<div>").addClass("param-label").text(au.label).appendTo(at);var ar=$("<div/>").addClass("slider").html(au.html).appendTo(at);ar.find(":input").val(au.value);$("<div style='clear: both;'/>").appendTo(at)});this.parent_div.find("input").click(function(){$(this).select()});var ao=$("<div>").addClass("param-row").appendTo(this.parent_div);var ae=$("<input type='submit'>").attr("value","Run on complete dataset").appendTo(ao);var Z=$("<input type='submit'>").attr("value","Run on visible region").css("margin-left","3em").appendTo(ao);var ag=this;Z.click(function(){ag.run_on_region()});ae.click(function(){ag.run_on_dataset()})};n(o.prototype,{get_param_values_dict:function(){var Z={};this.parent_div.find(":input").each(function(){var aa=$(this).attr("name"),ab=$(this).val();Z[aa]=JSON.stringify(ab)});return Z},get_param_values:function(){var aa=[];var Z={};this.parent_div.find(":input").each(function(){var ab=$(this).attr("name"),ac=$(this).val();if(ab){aa[aa.length]=ac}});return aa},run_on_dataset:function(){var Z=this;Z.run({dataset_id:this.track.original_dataset_id,tool_id:Z.name},function(aa){show_modal(Z.name+" is Running",Z.name+" is running on the complete dataset. Tool outputs are in dataset's history.",{Close:hide_modal})})},run_on_region:function(){var Z={dataset_id:this.track.original_dataset_id,chrom:this.track.view.chrom,low:this.track.view.low,high:this.track.view.high,tool_id:this.name},ab=this.track,aa=Z.tool_id+ab.tool_region_and_parameters_str(Z.chrom,Z.low,Z.high),ac;if(ab.track_type==="FeatureTrack"){ac=new P(aa,view,ab.hda_ldda,undefined,{},{},ab)}this.track.add_track(ac);ac.content_div.text("Starting job.");this.run(Z,function(ad){ac.dataset_id=ad.dataset_id;ac.content_div.text("Running job.");ac.init()})},run:function(aa,ab){$.extend(aa,this.get_param_values_dict());var Z=function(){$.getJSON(rerun_tool_url,aa,function(ac){if(ac==="no converter"){new_track.container_div.addClass("error");new_track.content_div.text(F)}else{if(ac.error){new_track.container_div.addClass("error");new_track.content_div.text(v+ac.message)}else{if(ac==="pending"){new_track.container_div.addClass("pending");new_track.content_div.text("Converting input data so that it can be easily reused.");setTimeout(Z,2000)}else{ab(ac)}}}})};Z()}});var J=function(aa,Z,ab,ac){this.name=aa;this.label=Z;this.html=ab;this.value=ac};var g=function(ab,aa,ad,ae,ac,Z){J.call(this,ab,aa,ad,ae);this.min=ac;this.max=Z};var h=function(aa,Z,ab,ac){this.name=aa;this.index=Z;this.tool_id=ab;this.tool_exp_name=ac};var Q=function(aa,Z,ab,ac){h.call(this,aa,Z,ab,ac);this.low=-Number.MAX_VALUE;this.high=Number.MAX_VALUE;this.min=Number.MAX_VALUE;this.max=-Number.MAX_VALUE;this.slider=null;this.slider_label=null};n(Q.prototype,{applies_to:function(Z){if(Z.length>this.index){return true}return false},keep:function(Z){if(!this.applies_to(Z)){return true}var aa=parseInt(Z[this.index]);return(isNaN(aa)||(aa>=this.low&&aa<=this.high))},update_attrs:function(aa){var Z=false;if(!this.applies_to(aa)){return Z}if(aa[this.index]<this.min){this.min=Math.floor(aa[this.index]);Z=true}if(aa[this.index]>this.max){this.max=Math.ceil(aa[this.index]);Z=true}return Z},update_ui_elt:function(){var ab=function(ae,ac){var ad=ac-ae;return(ad<=2?0.01:1)};var aa=this.slider.slider("option","min"),Z=this.slider.slider("option","max");if(this.min<aa||this.max>Z){this.slider.slider("option","min",this.min);this.slider.slider("option","max",this.max);this.slider.slider("option","step",ab(this.min,this.max));this.slider.slider("option","values",[this.min,this.max])}}});var V=function(ab,ak){this.track=ab;this.filters=[];for(var af=0;af<ak.length;af++){var Z=ak[af],aa=Z.name,aj=Z.type,ah=Z.index,am=Z.tool_id,ac=Z.tool_exp_name;if(aj==="int"||aj==="float"){this.filters[af]=new Q(aa,ah,am,ac)}else{console.log("ERROR: unsupported filter: ",aa,aj)}}var ai=function(an,ao,ap){an.click(function(){var aq=ao.text();max=parseFloat(ap.slider("option","max")),input_size=(max<=1?4:max<=1000000?max.toString().length:6),multi_value=false;if(ap.slider("option","values")){input_size=2*input_size+1;multi_value=true}ao.text("");$("<input type='text'/>").attr("size",input_size).attr("maxlength",input_size).attr("value",aq).appendTo(ao).focus().select().click(function(ar){ar.stopPropagation()}).blur(function(){$(this).remove();ao.text(aq)}).keyup(function(aw){if(aw.keyCode===27){$(this).trigger("blur")}else{if(aw.keyCode===13){var au=ap.slider("option","min"),ar=ap.slider("option","max"),av=function(ax){return(isNaN(ax)||ax>ar||ax<au)},at=$(this).val();if(!multi_value){at=parseFloat(at);if(av(at)){alert("Parameter value must be in the range ["+au+"-"+ar+"]");return $(this)}}else{at=at.split("-");at=[parseFloat(at[0]),parseFloat(at[1])];if(av(at[0])||av(at[1])){alert("Parameter value must be in the range ["+au+"-"+ar+"]");return $(this)}}ap.slider((multi_value?"values":"value"),at)}}})})};this.parent_div=$("<div/>").addClass("filters").hide();this.parent_div.bind("drag",function(an){an.stopPropagation()}).bind("click",function(an){an.stopPropagation()}).bind("dblclick",function(an){an.stopPropagation()}).bind("keydown",function(an){an.stopPropagation()});var ad=this;$.each(this.filters,function(au,ao){var aq=$("<div/>").addClass("slider-row").appendTo(ad.parent_div);var an=$("<div/>").addClass("slider-label").appendTo(aq);var aw=$("<span/>").addClass("slider-name").text(ao.name+" ").appendTo(an);var ap=$("<span/>");var ar=$("<span/>").addClass("slider-value").appendTo(an).append("[").append(ap).append("]");var av=$("<div/>").addClass("slider").appendTo(aq);ao.control_element=$("<div/>").attr("id",ao.name+"-filter-control").appendTo(av);var at=[0,0];ao.control_element.slider({range:true,min:Number.MAX_VALUE,max:-Number.MIN_VALUE,values:[0,0],slide:function(ax,ay){at=ay.values;ap.text(ay.values[0]+"-"+ay.values[1]);setTimeout(function(){if(ay.values[0]==at[0]&&ay.values[1]==at[1]){var az=ay.values;ap.text(az[0]+"-"+az[1]);ao.low=az[0];ao.high=az[1];ad.track.draw(true,true)}},50)},change:function(ax,ay){ao.control_element.slider("option","slide").call(ao.control_element,ax,ay)}});ao.slider=ao.control_element;ao.slider_label=ap;ai(ar,ap,ao.control_element);$("<div style='clear: both;'/>").appendTo(aq)});if(this.filters.length!=0){var al=$("<div>").addClass("param-row").appendTo(this.parent_div);var ag=$("<input type='submit'>").attr("value","Run on complete dataset").appendTo(al);var ae=this;ag.click(function(){ae.run_on_dataset()})}};n(V.prototype,{run_on_dataset:function(){var ag=function(al,aj,ak){if(!(aj in al)){al[aj]=ak}return al[aj]};var ad={},aa,ac,ae;for(var af=0;af<this.filters.length;af++){aa=this.filters[af];if(aa.tool_id){if(aa.min!=aa.low){ac=ag(ad,aa.tool_id,[]);ac[ac.length]=aa.tool_exp_name+" >= "+aa.min}if(aa.max!=aa.high){ac=ag(ad,aa.tool_id,[]);ac[ac.length]=aa.tool_exp_name+" <= "+aa.max}}}for(var ai in ad){var Z=ad[ai],ab="("+Z.join(") and (")+")",ah={cond:ab,input:this.track.dataset_id,target_dataset_id:this.track.dataset_id,tool_id:ai};$.getJSON(run_tool_url,ah,function(aj){if(aj.error){new_track.container_div.addClass("error");new_track.content_div.text(v+aj.message)}else{show_modal("Filter Dataset",ai+" is running on the complete dataset. Tool outputs are in dataset's history.",{Close:hide_modal})}})}}});var U=function(Z){this.track=Z.track;this.params=Z.params;this.values={};if(Z.saved_values){this.restore_values(Z.saved_values)}this.onchange=Z.onchange};n(U.prototype,{restore_values:function(Z){var aa=this;$.each(this.params,function(ab,ac){if(Z[ac.key]!==undefined){aa.values[ac.key]=Z[ac.key]}else{aa.values[ac.key]=ac.default_value}})},build_form:function(){var aa=this;var Z=$("<div />");$.each(this.params,function(ae,ac){if(!ac.hidden){var ab="param_"+ae;var aj=$("<div class='form-row' />").appendTo(Z);aj.append($("<label />").attr("for",ab).text(ac.label+":"));if(ac.type==="bool"){aj.append($('<input type="checkbox" />').attr("id",ab).attr("name",ab).attr("checked",aa.values[ac.key]))}else{if(ac.type==="color"){var ag=aa.values[ac.key];var af=$("<input />").attr("id",ab).attr("name",ab).val(ag);var ah=$("<div class='tipsy tipsy-north' style='position: absolute;' />").hide();var ad=$("<div style='background-color: black; padding: 10px;'></div>").appendTo(ah);var ai=$("<div/>").appendTo(ad).farbtastic({width:100,height:100,callback:af,color:ag});$("<div />").append(af).append(ah).appendTo(aj).bind("click",function(ak){ah.css({left:$(this).position().left+($(af).width()/2)-60,top:$(this).position().top+$(this.height)}).show();$(document).bind("click.color-picker",function(){ah.hide();$(document).unbind("click.color-picker")});ak.stopPropagation()})}else{aj.append($("<input />").attr("id",ab).attr("name",ab).val(aa.values[ac.key]))}}}});return Z},update_from_form:function(Z){var ab=this;var aa=false;$.each(this.params,function(ac,ae){if(!ae.hidden){var af="param_"+ac;var ad=Z.find("#"+af).val();if(ae.type==="float"){ad=parseFloat(ad)}else{if(ae.type==="int"){ad=parseInt(ad)}else{if(ae.type==="bool"){ad=Z.find("#"+af).is(":checked")}}}if(ad!==ab.values[ae.key]){ab.values[ae.key]=ad;aa=true}}});if(aa){this.onchange()}}});var b=function(ab,aa,Z){this.index=ab;this.resolution=aa;this.canvas=$("<div class='track-tile'/>").append(Z)};var l=function(ab,aa,Z,ac){b.call(this,ab,aa,Z);this.max_val=ac};var K=function(ab,aa,Z){b.call(this,ab,aa,Z)};var j=function(aa,Z,ad,ab,ac){this.name=aa;this.view=Z;this.parent_element=ad;this.data_url=(ab?ab:default_data_url);this.data_url_extra_params={};this.data_query_wait=(ac?ac:G);this.dataset_check_url=converted_datasets_state_url;this.container_div=$("<div />").addClass("track").css("position","relative");if(!this.hidden){this.header_div=$("<div class='track-header' />").appendTo(this.container_div);if(this.view.editor){this.drag_div=$("<div class='draghandle' />").appendTo(this.header_div)}this.name_div=$("<div class='menubutton popup' />").appendTo(this.header_div);this.name_div.text(this.name);this.name_div.attr("id",this.name.replace(/\s+/g,"-").replace(/[^a-zA-Z0-9\-]/g,"").toLowerCase())}this.content_div=$("<div class='track-content'>").appendTo(this.container_div);this.parent_element.append(this.container_div)};n(j.prototype,{init:function(){var Z=this;Z.enabled=false;Z.tile_cache.clear();Z.data_cache.clear();Z.initial_canvas=undefined;Z.content_div.css("height","auto");Z.container_div.removeClass("nodata error pending");if(!Z.dataset_id){return}$.getJSON(converted_datasets_state_url,{hda_ldda:Z.hda_ldda,dataset_id:Z.dataset_id,chrom:Z.view.chrom},function(aa){if(!aa||aa==="error"||aa.kind==="error"){Z.container_div.addClass("error");Z.content_div.text(m);if(aa.message){var ac=Z.view.tracks.indexOf(Z);var ab=$(" <a href='javascript:void(0);'></a>").text("View error").bind("click",function(){show_modal("Trackster Error","<pre>"+aa.message+"</pre>",{Close:hide_modal})});Z.content_div.append(ab)}}else{if(aa==="no converter"){Z.container_div.addClass("error");Z.content_div.text(F)}else{if(aa==="no data"||(aa.data!==undefined&&(aa.data===null||aa.data.length===0))){Z.container_div.addClass("nodata");Z.content_div.text(A)}else{if(aa==="pending"){Z.container_div.addClass("pending");Z.content_div.text(q);setTimeout(function(){Z.init()},Z.data_query_wait)}else{if(aa.status==="data"){if(aa.valid_chroms){Z.valid_chroms=aa.valid_chroms;Z.make_name_popup_menu()}Z.content_div.text(T);if(Z.view.chrom){Z.content_div.text("");Z.content_div.css("height",Z.height_px+"px");Z.enabled=true;$.when(Z.predraw_init()).done(function(){Z.container_div.removeClass("nodata error pending");Z.draw()})}}}}}}})},predraw_init:function(){},update_name:function(Z){this.old_name=this.name;this.name=Z;this.name_div.text(this.name)},revert_name:function(){this.name=this.old_name;this.name_div.text(this.name)}});var I=function(ah,af,ai){var aa=this,aj=aa.view;this.filters_manager=(ah!==undefined?new V(this,ah):undefined);this.filters_available=false;this.filters_visible=false;this.tool=(af!==undefined&&obj_length(af)>0?new o(this,af):undefined);this.parent_track=ai;this.child_tracks=[];if(aa.hidden){return}if(this.parent_track){this.header_div.find(".draghandle").removeClass("draghandle").addClass("child-track-icon").addClass("icon-button");this.parent_element.addClass("child-track");this.tool=undefined}aa.child_tracks_container=$("<div/>").addClass("child-tracks-container").hide();aa.container_div.append(aa.child_tracks_container);if(this.filters_manager){this.filters_div=this.filters_manager.parent_div;this.header_div.after(this.filters_div)}if(this.tool){this.dynamic_tool_div=this.tool.parent_div;this.header_div.after(this.dynamic_tool_div)}if(aa.display_modes!==undefined){if(aa.mode_div===undefined){aa.mode_div=$("<div class='right-float menubutton popup' />").appendTo(aa.header_div);var ac=(aa.track_config&&aa.track_config.values.mode?aa.track_config.values.mode:aa.display_modes[0]);aa.mode=ac;aa.mode_div.text(ac);var ab=function(ak){aa.mode_div.text(ak);aa.mode=ak;aa.track_config.values.mode=ak;aa.tile_cache.clear();aa.draw()};var Z={};for(var ad=0,ag=aa.display_modes.length;ad<ag;ad++){var ae=aa.display_modes[ad];Z[ae]=function(ak){return function(){ab(ak)}}(ae)}make_popupmenu(aa.mode_div,Z)}else{aa.mode_div.hide()}}this.make_name_popup_menu()};n(I.prototype,j.prototype,{make_name_popup_menu:function(){var aa=this;var Z={};Z["Edit configuration"]=function(){var ag=function(){hide_modal();$(window).unbind("keypress.check_enter_esc")},ae=function(){aa.track_config.update_from_form($(".dialog-box"));hide_modal();$(window).unbind("keypress.check_enter_esc")},af=function(ah){if((ah.keyCode||ah.which)===27){ag()}else{if((ah.keyCode||ah.which)===13){ae()}}};$(window).bind("keypress.check_enter_esc",af);show_modal("Configure Track",aa.track_config.build_form(),{Cancel:ag,OK:ae})};if(aa.filters_available>0){var ad=(aa.filters_div.is(":visible")?"Hide filters":"Show filters");Z[ad]=function(){aa.filters_visible=(aa.filters_div.is(":visible"));aa.filters_div.toggle();aa.make_name_popup_menu()}}if(aa.tool){var ad=(aa.dynamic_tool_div.is(":visible")?"Hide tool":"Show tool");Z[ad]=function(){if(!aa.dynamic_tool_div.is(":visible")){aa.update_name(aa.name+aa.tool_region_and_parameters_str())}else{menu_option_text="Show dynamic tool";aa.revert_name()}aa.dynamic_tool_div.toggle();aa.make_name_popup_menu()}}if(aa.valid_chroms){Z["List chrom/contigs with data"]=function(){show_modal("Chrom/contigs with data","<p>"+aa.valid_chroms.join("<br/>")+"</p>",{Close:function(){hide_modal()}})}}var ab=view;var ac=function(){$("#no-tracks").show()};if(this.parent_track){ab=this.parent_track;ac=function(){}}Z.Remove=function(){ab.remove_track(aa);if(ab.num_tracks===0){ac()}};make_popupmenu(aa.name_div,Z)},draw:function(Z,ab){var at=this.view.low,af=this.view.high,ah=af-at,aj=this.view.container.width(),ad=aj/ah,ak=this.view.resolution,ac=$("<div style='position: relative;'></div>"),al=function(av,aw,au){return av+"_"+aw+"_"+au};if(!ab){this.content_div.children().remove()}this.content_div.append(ac);this.max_height=0;var an=Math.floor(at/ak/L);var ae=[];var ao=0;while((an*L*ak)<af){var ar=al(aj,ad,an);var ag=this.tile_cache.get(ar);var ap=an*L*this.view.resolution;var aa=ap+L*this.view.resolution;if(!Z&&ag){ae[ae.length]=ag;this.show_tile(ag,ac,ap,ad)}else{this.delayed_draw(Z,ar,an,ak,ac,ad,ae)}an+=1;ao++}var ai=this;var aq=setInterval(function(){if(ae.length===ao){clearInterval(aq);if(ab){var ax=ai.content_div.children();var ay=false;for(var aw=ax.length-1,aC=0;aw>=aC;aw--){var av=$(ax[aw]);if(ay){av.remove()}else{if(av.children().length!==0){ay=true}}}}if(ai.track_type=="FeatureTrack"&&ai.mode=="Histogram"){var aB=-1;for(var aw=0;aw<ae.length;aw++){var aE=ae[aw].max_val;if(aE>aB){aB=aE}}for(var aw=0;aw<ae.length;aw++){if(ae[aw].max_val!==aB){var aD=ae[aw];aD.canvas.remove();ai.delayed_draw(true,al(aj,ad,aD.index),aD.index,aD.resolution,ac,ad,[],{max:aB})}}}if(ai.filters_manager){var au=ai.filters_manager.filters;for(var aA=0;aA<au.length;aA++){au[aA].update_ui_elt()}var az=false;if(ai.example_feature){for(var aA=0;aA<au.length;aA++){if(au[aA].applies_to(ai.example_feature)){az=true;break}}}if(ai.filters_available!==az){ai.filters_available=az;if(!ai.filters_available){ai.filters_div.hide()}ai.make_name_popup_menu()}}}},50);for(var am=0;am<this.child_tracks.length;am++){this.child_tracks[am].draw(Z,ab)}},delayed_draw:function(aa,ah,ab,ad,ai,al,aj,ae){var ac=this,af=ab*L*ad,ak=af+L*ad;var ag=function(au,am,ao,an,ar,at,ap){var aq=ac.draw_tile(am,ao,an,at,ap);ac.tile_cache.set(ah,aq);if(aq===undefined){return}ac.show_tile(aq,ar,af,at);aj[aj.length]=aq};var Z=setTimeout(function(){if(af<=ac.view.high&&ak>=ac.view.low){var am=(aa?undefined:ac.tile_cache.get(ah));if(am){ac.show_tile(am,ai,af,al);aj[aj.length]=am}else{$.when(ac.data_cache.get_data(view.chrom,af,ak,ac.mode,ad,ac.data_url_extra_params)).then(function(an){n(an,ae);if(view.reference_track&&al>view.canvas_manager.char_width_px){$.when(view.reference_track.data_cache.get_data(view.chrom,af,ak,ac.mode,ad,view.reference_track.data_url_extra_params)).then(function(ao){ag(Z,an,ad,ab,ai,al,ao)})}else{ag(Z,an,ad,ab,ai,al)}})}}},50)},show_tile:function(ac,af,ad,ag){var aa=this;var ab=this.view.high-this.view.low,ae=(ad-this.view.low)*ag;if(this.left_offset){ae-=this.left_offset}var Z=ac.canvas;Z.css({position:"absolute",top:0,left:ae,height:""});af.append(Z);aa.max_height=Math.max(aa.max_height,Z.height());aa.content_div.css("height",aa.max_height+"px");af.children().css("height",aa.max_height+"px")},set_overview:function(){var Z=this.view;if(this.initial_canvas&&this.is_overview){Z.overview_close.show();Z.overview_viewport.append(this.initial_canvas);Z.overview_highlight.show().height(this.initial_canvas.height());Z.overview_viewport.height(this.initial_canvas.height()+Z.overview_box.height())}$(window).trigger("resize")},tool_region_and_parameters_str:function(ab,Z,ac){var aa=this,ad=(ab!==undefined&&Z!==undefined&&ac!==undefined?ab+":"+Z+"-"+ac:"all");return" - region=["+ad+"], parameters=["+aa.tool.get_param_values().join(", ")+"]"},add_track:function(Z){Z.track_id=this.track_id+"_"+this.child_tracks.length;Z.container_div.attr("id","track_"+Z.track_id);this.child_tracks_container.append(Z.container_div);B(Z.container_div,".child-track-icon");if(!$(this.child_tracks_container).is(":visible")){this.child_tracks_container.show()}this.child_tracks.push(Z);this.view.has_changes=true},remove_track:function(Z){Z.container_div.fadeOut("slow",function(){$(this).remove()})}});var W=function(Z,aa){this.track_type="LabelTrack";this.hidden=true;j.call(this,null,Z,aa);this.container_div.addClass("label-track")};n(W.prototype,j.prototype,{draw:function(){var ab=this.view,ac=ab.high-ab.low,af=Math.floor(Math.pow(10,Math.floor(Math.log(ac)/Math.log(10)))),Z=Math.floor(ab.low/af)*af,ad=this.view.container.width(),aa=$("<div style='position: relative; height: 1.3em;'></div>");while(Z<ab.high){var ae=(Z-ab.low)/ac*ad;aa.append($("<div class='label'>"+commatize(Z)+"</div>").css({position:"absolute",left:ae-1}));Z+=af}this.content_div.children(":first").remove();this.content_div.append(aa)}});var x=function(Z){this.track_type="ReferenceTrack";this.hidden=true;j.call(this,null,Z,Z.top_labeltrack);I.call(this);Z.reference_track=this;this.left_offset=200;this.height_px=12;this.container_div.addClass("reference-track");this.content_div.css("background","none");this.content_div.css("min-height","0px");this.content_div.css("border","none");this.data_url=reference_url;this.data_url_extra_params={dbkey:Z.dbkey};this.data_cache=new D(y,this,false);this.tile_cache=new c(r)};n(x.prototype,I.prototype,{draw_tile:function(ah,ae,aa,aj){var ad=this,ab=L*ae;if(aj>this.view.canvas_manager.char_width_px){if(ah===null){ad.content_div.css("height","0px");return}var ac=this.view.canvas_manager.new_canvas();var ai=ac.getContext("2d");ac.width=Math.ceil(ab*aj+ad.left_offset);ac.height=ad.height_px;ai.font=ai.canvas.manager.default_font;ai.textAlign="center";for(var af=0,ag=ah.length;af<ag;af++){var Z=Math.round(af*aj);ai.fillText(ah[af],Z+ad.left_offset,10)}return new b(aa,ae,ac)}this.content_div.css("height","0px")}});var k=function(ad,ab,ae,Z,ac){var aa=this;this.track_type="LineTrack";this.display_modes=["Histogram","Line","Filled","Intensity"];this.mode="Histogram";j.call(this,ad,ab,ab.viewport_container);I.call(this);this.min_height_px=16;this.max_height_px=400;this.height_px=80;this.hda_ldda=ae;this.dataset_id=Z;this.original_dataset_id=Z;this.data_cache=new M(y,this);this.tile_cache=new c(r);this.track_config=new U({track:this,params:[{key:"color",label:"Color",type:"color",default_value:"black"},{key:"min_value",label:"Min Value",type:"float",default_value:undefined},{key:"max_value",label:"Max Value",type:"float",default_value:undefined},{key:"mode",type:"string",default_value:this.mode,hidden:true},{key:"height",type:"int",default_value:this.height_px,hidden:true}],saved_values:ac,onchange:function(){aa.vertical_range=aa.prefs.max_value-aa.prefs.min_value;$("#linetrack_"+aa.track_id+"_minval").text(aa.prefs.min_value);$("#linetrack_"+aa.track_id+"_maxval").text(aa.prefs.max_value);aa.tile_cache.clear();aa.draw()}});this.prefs=this.track_config.values;this.height_px=this.track_config.values.height;this.vertical_range=this.track_config.values.max_value-this.track_config.values.min_value;this.add_resize_handle()};n(k.prototype,I.prototype,{add_resize_handle:function(){var Z=this;var ac=false;var ab=false;var aa=$("<div class='track-resize'>");$(Z.container_div).hover(function(){ac=true;aa.show()},function(){ac=false;if(!ab){aa.hide()}});aa.hide().bind("dragstart",function(ad,ae){ab=true;ae.original_height=$(Z.content_div).height()}).bind("drag",function(ae,af){var ad=Math.min(Math.max(af.original_height+af.deltaY,Z.min_height_px),Z.max_height_px);$(Z.content_div).css("height",ad);Z.height_px=ad;Z.draw(true)}).bind("dragend",function(ad,ae){Z.tile_cache.clear();ab=false;if(!ac){aa.hide()}Z.track_config.values.height=Z.height_px}).appendTo(Z.container_div)},predraw_init:function(){var Z=this,aa=Z.view.tracks.indexOf(Z);Z.vertical_range=undefined;return $.getJSON(Z.data_url,{stats:true,chrom:Z.view.chrom,low:null,high:null,hda_ldda:Z.hda_ldda,dataset_id:Z.dataset_id},function(ab){Z.container_div.addClass("line-track");var ad=ab.data;if(isNaN(parseFloat(Z.prefs.min_value))||isNaN(parseFloat(Z.prefs.max_value))){Z.prefs.min_value=ad.min;Z.prefs.max_value=ad.max;$("#track_"+aa+"_minval").val(Z.prefs.min_value);$("#track_"+aa+"_maxval").val(Z.prefs.max_value)}Z.vertical_range=Z.prefs.max_value-Z.prefs.min_value;Z.total_frequency=ad.total_frequency;Z.container_div.find(".yaxislabel").remove();var ae=$("<div />").addClass("yaxislabel").attr("id","linetrack_"+aa+"_minval").text(u(Z.prefs.min_value));var ac=$("<div />").addClass("yaxislabel").attr("id","linetrack_"+aa+"_maxval").text(u(Z.prefs.max_value));ac.css({position:"absolute",top:"24px",left:"10px"});ac.prependTo(Z.container_div);ae.css({position:"absolute",bottom:"2px",left:"10px"});ae.prependTo(Z.container_div)})},draw_tile:function(aj,ad,aa,ai){if(this.vertical_range===undefined){return}var ae=aa*L*ad,ac=L*ad,Z=Math.ceil(ac*ai),ag=this.height_px;var ab=this.view.canvas_manager.new_canvas();ab.width=Z,ab.height=ag;var ah=ab.getContext("2d");var af=new H.LinePainter(aj.data,ae,ae+ac,this.prefs,this.mode);af.draw(ah,Z,ag);return new b(ac,ad,ab)}});var e=function(Z,ae,ad,ah,ag,ab,ac,af){var aa=this;this.track_type="FeatureTrack";this.display_modes=["Auto","Histogram","Dense","Squish","Pack"];this.track_config=new U({track:this,params:[{key:"block_color",label:"Block color",type:"color",default_value:"#444"},{key:"label_color",label:"Label color",type:"color",default_value:"black"},{key:"show_counts",label:"Show summary counts",type:"bool",default_value:true},{key:"mode",type:"string",default_value:this.mode,hidden:true},],saved_values:ag,onchange:function(){aa.tile_cache.clear();aa.draw()}});this.prefs=this.track_config.values;j.call(this,Z,ae,ae.viewport_container);I.call(this,ab,ac,af);this.height_px=0;this.container_div.addClass("feature-track");this.hda_ldda=ad;this.dataset_id=ah;this.original_dataset_id=ah;this.show_labels_scale=0.001;this.showing_details=false;this.summary_draw_height=30;this.inc_slots={};this.start_end_dct={};this.tile_cache=new c(d);this.data_cache=new M(20,this);this.left_offset=200;this.painter=H.LinkedFeaturePainter};n(e.prototype,I.prototype,{update_auto_mode:function(Z){if(this.mode=="Auto"){if(Z=="no_detail"){Z="feature spans"}else{if(Z=="summary_tree"){Z="coverage histogram"}}this.mode_div.text("Auto ("+Z+")")}},incremental_slots:function(ad,aa,ac){var ab=this.view.canvas_manager.dummy_context,Z=this.inc_slots[ad];if(!Z||(Z.mode!==ac)){Z=new (p.FeatureSlotter)(ad,ac==="Pack",w,function(ae){return ab.measureText(ae)});Z.mode=ac;this.inc_slots[ad]=Z}return Z.slot_features(aa)},get_summary_tree_data:function(ad,ag,ab,ao){if(ao>ab-ag){ao=ab-ag}var ak=Math.floor((ab-ag)/ao),an=[],ac=0;var ae=0,af=0,aj,am=0,ah=[],al,ai;var aa=function(ar,aq,at,ap){ar[0]=aq+at*ap;ar[1]=aq+(at+1)*ap};while(am<ao&&ae!==ad.length){var Z=false;for(;am<ao&&!Z;am++){aa(ah,ag,am,ak);for(af=ae;af<ad.length;af++){aj=ad[af].slice(1,3);if(is_overlap(aj,ah)){Z=true;break}}if(Z){break}}data_start_index=af;an[an.length]=al=[ah[0],0];for(;af<ad.length;af++){aj=ad[af].slice(1,3);if(is_overlap(aj,ah)){al[1]++}else{break}}if(al[1]>ac){ac=al[1]}am++}return{max:ac,delta:ak,data:an}},draw_tile:function(am,av,az,ai,ac){var ar=this,aB=az*L*av,aa=(az+1)*L*av,ao=aa-aB,at=Math.ceil(ao*ai),aq=this.mode,aF=25,ad=this.left_offset,an,ae;if(aq==="Auto"){if(am.dataset_type==="summary_tree"){aq=am.dataset_type}else{if(am.extra_info==="no_detail"){aq="no_detail"}else{var aE=am.data;if(this.view.high-this.view.low>E){aq="Squish"}else{aq="Pack"}}}this.update_auto_mode(aq)}if(aq==="summary_tree"||aq==="Histogram"){ae=this.summary_draw_height;this.container_div.find(".yaxislabel").remove();var Z=$("<div />").addClass("yaxislabel");Z.text(am.max);Z.css({position:"absolute",top:"24px",left:"10px",color:this.prefs.label_color});Z.prependTo(this.container_div);var ab=this.view.canvas_manager.new_canvas();ab.width=at+ad;ab.height=ae+N;if(am.dataset_type!="summary_tree"){var aj=this.get_summary_tree_data(am.data,aB,aa,200);if(am.max){aj.max=am.max}am=aj}var aC=new H.SummaryTreePainter(am,aB,aa,this.prefs);var au=ab.getContext("2d");au.translate(ad,N);aC.draw(au,at,ae);return new l(az,av,ab,am.max)}var an,ag=1;if(aq==="no_detail"||aq==="Squish"||aq==="Pack"){ag=this.incremental_slots(ai,am.data,aq);an=this.inc_slots[ai].slots}var ah=[];if(am.data){var ak=this.filters_manager.filters;for(var aw=0,ay=am.data.length;aw<ay;aw++){var af=am.data[aw];var ax=false;var al;for(var aA=0,aD=ak.length;aA<aD;aA++){al=ak[aA];al.update_attrs(af);if(!al.keep(af)){ax=true;break}}if(!ax){ah.push(af)}}}var aC=new (this.painter)(ah,aB,aa,this.prefs,aq,ac);var ae=aC.get_required_height(ag)+z;var ab=this.view.canvas_manager.new_canvas();ab.width=at+ad;ab.height=ae;var au=ab.getContext("2d");au.fillStyle=this.prefs.block_color;au.font=au.canvas.manager.default_font;au.textAlign="right";this.container_div.find(".yaxislabel").remove();if(am.message){au.fillStyle="red";au.textAlign="left";var ap=au.textBaseline;au.textBaseline="top";au.fillRect(ad,0,ab.width-ad,1);au.fillText(am.message,ad,2);au.textBaseline=ap;if(!am.data){return new b(az,av,ab,ae)}}this.example_feature=(am.data.length?am.data[0]:undefined);au.translate(ad,z);aC.draw(au,at,ae,an);return new K(az,av,ab)}});var O=function(ac,aa,ae,Z,ab,ad){e.call(this,ac,aa,ae,Z,ab,ad);this.track_type="VcfTrack";this.painter=H.VariantPainter};n(O.prototype,I.prototype,e.prototype);var R=function(ac,aa,ae,Z,ab,ad){e.call(this,ac,aa,ae,Z,ab,ad);this.track_config=new U({track:this,params:[{key:"block_color",label:"Block color",type:"color",default_value:"#444"},{key:"label_color",label:"Label color",type:"color",default_value:"black"},{key:"show_insertions",label:"Show insertions",type:"bool",default_value:false},{key:"show_differences",label:"Show differences only",type:"bool",default_value:true},{key:"show_counts",label:"Show summary counts",type:"bool",default_value:true},{key:"mode",type:"string",default_value:this.mode,hidden:true},],saved_values:ab,onchange:function(){this.track.tile_cache.clear();this.track.draw()}});this.prefs=this.track_config.values;this.track_type="ReadTrack";this.painter=H.ReadPainter;this.make_name_popup_menu()};n(R.prototype,I.prototype,e.prototype);var P=function(ad,ab,af,Z,ac,ae,aa){e.call(this,ad,ab,af,Z,ac,ae,{},aa);this.track_type="ToolDataFeatureTrack";this.data_url=raw_data_url;this.data_query_wait=1000;this.dataset_check_url=dataset_state_url};n(P.prototype,I.prototype,e.prototype,{predraw_init:function(){var aa=this;var Z=function(){if(aa.data_cache.size()===0){setTimeout(Z,300)}else{aa.data_url=default_data_url;aa.data_query_wait=G;aa.dataset_state_url=converted_datasets_state_url;$.getJSON(aa.dataset_state_url,{dataset_id:aa.dataset_id,hda_ldda:aa.hda_ldda},function(ab){})}};Z()}});S.View=X;S.LineTrack=k;S.FeatureTrack=e;S.ReadTrack=R};var slotting_module=function(c,b){var e=c("class").extend;var d=2,a=5;b.FeatureSlotter=function(j,h,f,g){this.slots={};this.start_end_dct={};this.w_scale=j;this.include_label=h;this.max_rows=f;this.measureText=g};e(b.FeatureSlotter.prototype,{slot_features:function(m){var p=this.w_scale,s=this.slots,h=this.start_end_dct,y=[],A=[],n=0,z=this.max_rows;for(var w=0,x=m.length;w<x;w++){var l=m[w],o=l[0];if(s[o]!==undefined){n=Math.max(n,s[o]);A.push(s[o])}else{y.push(w)}}var q=function(G,H){for(var F=0;F<=z;F++){var D=false,I=h[F];if(I!==undefined){for(var C=0,E=I.length;C<E;C++){var B=I[C];if(H>B[0]&&G<B[1]){D=true;break}}}if(!D){return F}}return -1};for(var w=0,x=y.length;w<x;w++){var l=m[y[w]],o=l[0],u=l[1],f=l[2],r=l[3],g=Math.floor(u*p),k=Math.ceil(f*p),v=this.measureText(r).width,j;if(r!==undefined&&this.include_label){v+=(d+a);if(g-v>=0){g-=v;j="left"}else{k+=v;j="right"}}var t=q(g,k);if(t>=0){if(h[t]===undefined){h[t]=[]}h[t].push([g,k]);s[o]=t;n=Math.max(n,t)}else{}}return n+1}})};var painters_module=function(j,w){var t=j("class").extend;var o=function(H,z,F,y,E,C){if(C===undefined){C=4}var B=y-z;var A=E-F;var D=Math.floor(Math.sqrt(B*B+A*A)/C);var I=B/D;var G=A/D;var x;for(x=0;x<D;x++,z+=I,F+=G){if(x%2!==0){continue}H.fillRect(z,F,C,1)}};var p=function(A,z,x,D){var C=z-D/2,B=z+D/2,E=x-Math.sqrt(D*3/2);A.beginPath();A.moveTo(C,E);A.lineTo(B,E);A.lineTo(z,x);A.lineTo(C,E);A.strokeStyle=this.fillStyle;A.fill();A.stroke();A.closePath()};var m=function(z,B,x,y,A){this.data=z;this.view_start=B;this.view_end=x;this.prefs=t({},this.default_prefs,y);this.mode=A};m.prototype.default_prefs={};var u=function(z,B,x,y,A){m.call(this,z,B,x,y,A)};u.prototype.default_prefs={show_counts:false};u.prototype.draw=function(M,z,L){var E=this.view_start,O=this.view_end-this.view_start,N=z/O;var J=this.data.data,I=this.data.delta,G=this.data.max,B=L;delta_x_px=Math.ceil(I*N);M.save();for(var C=0,D=J.length;C<D;C++){var H=Math.floor((J[C][0]-E)*N);var F=J[C][1];if(!F){continue}var K=F/G*L;if(F!==0&&K<1){K=1}M.fillStyle=this.prefs.block_color;M.fillRect(H,B-K,delta_x_px,K);var A=4;if(this.prefs.show_counts&&(M.measureText(F).width+A)<delta_x_px){M.fillStyle=this.prefs.label_color;M.textAlign="center";M.fillText(F,H+(delta_x_px/2),10)}}M.restore()};var c=function(x,B,D,E,z){m.call(this,x,B,D,E,z);if(this.prefs.min_value===undefined){var F=Infinity;for(var y=0,A=this.data.length;y<A;y++){F=Math.min(F,this.data[y][1])}this.prefs.min_value=F}if(this.prefs.max_value===undefined){var C=-Infinity;for(var y=0,A=this.data.length;y<A;y++){C=Math.max(C,this.data[y][1])}this.prefs.max_value=C}};c.prototype.default_prefs={min_value:undefined,max_value:undefined,mode:"Histogram",color:"#000",overflow_color:"#F66"};c.prototype.draw=function(O,N,L){var F=false,H=this.prefs.min_value,D=this.prefs.max_value,K=D-H,z=L,A=this.view_start,M=this.view_end-this.view_start,B=N/M,I=this.mode,S=this.data;O.save();var T=Math.round(L+H/K*L);if(I!=="Intensity"){O.fillStyle="#aaa";O.fillRect(0,T,N,1)}O.beginPath();O.fillStyle=this.prefs.color;var R,E,C;if(S.length>1){C=Math.ceil((S[1][0]-S[0][0])*B)}else{C=10}for(var P=0,Q=S.length;P<Q;P++){R=Math.round((S[P][0]-A)*B);E=S[P][1];if(E===null){if(F&&I==="Filled"){O.lineTo(R,z)}F=false;continue}if(E<H){E=H}else{if(E>D){E=D}}if(I==="Histogram"){E=Math.round(E/K*z);O.fillRect(R,T,C,-E)}else{if(I==="Intensity"){E=255-Math.floor((E-H)/K*255);O.fillStyle="rgb("+E+","+E+","+E+")";O.fillRect(R,0,C,z)}else{E=Math.round(z-(E-H)/K*z);if(F){O.lineTo(R,E)}else{F=true;if(I==="Filled"){O.moveTo(R,z);O.lineTo(R,E)}else{O.moveTo(R,E)}}}}}if(I==="Filled"){if(F){O.lineTo(R,T);O.lineTo(0,T)}O.fill()}else{O.stroke()}var x=-1,J=-1;O.fillStyle=this.prefs.overflow_color;var G;for(var P=0,Q=S.length;P<Q;P++){E=S[P][1];R=Math.round((S[P][0]-A)*B);if(J>=0&&(E===null||E<D)){O.fillRect(J,0,G+C-J,2);J=-1}else{if(x>=0&&(E===null||E>H)){O.fillRect(x,L-2,G+C-x,2);x=-1}}if(E!==null&&E>D&&J<0){J=R}else{if(E!==null&&E<H&&x<0){x=R}}G=R}O.restore()};var n=function(z,B,x,y,A){m.call(this,z,B,x,y,A)};n.prototype.default_prefs={block_color:"#FFF",connector_color:"#FFF"};t(n.prototype,{get_required_height:function(y){var x=y_scale=this.get_row_height(),z=this.mode;if(z==="no_detail"||z==="Squish"||z==="Pack"){x=y*y_scale}return x+Math.max(Math.round(y_scale/2),5)},draw:function(J,A,I,F){var D=this.data,G=this.view_start,K=this.view_end;J.save();J.fillStyle=this.prefs.block_color;J.textAlign="right";var N=this.view_end-this.view_start,M=A/N,z=this.get_row_height();for(var C=0,E=D.length;C<E;C++){var L=D[C],B=L[0],x=L[1],y=L[2],H=(F&&F[B]!==undefined?F[B]:null);if((x<K&&y>G)&&(this.mode=="Dense"||H!==null)){this.draw_element(J,this.mode,L,H,G,K,M,z,A)}}J.restore()}});var d=10,h=3,l=5,v=10,f=1,r=3,e=3,a=9,k=2,g="#ccc";var q=function(z,B,x,y,A){n.call(this,z,B,x,y,A)};t(q.prototype,n.prototype,{get_row_height:function(){var y=this.mode,x;if(y==="Dense"){x=d}else{if(y==="no_detail"){x=h}else{if(y==="Squish"){x=l}else{x=v}}}return x},draw_element:function(J,C,R,E,L,ab,af,ag,x){var O=R[0],ad=R[1],V=R[2],M=R[3],W=Math.floor(Math.max(0,(ad-L)*af)),K=Math.ceil(Math.min(x,Math.max(0,(V-L)*af))),U=(C==="Dense"?0:(0+E))*ag,I,Z,N=null,ah=null,A=this.prefs.block_color,Y=this.prefs.label_color;if(C=="Dense"){E=1}if(C==="no_detail"){J.fillStyle=A;J.fillRect(W,U+5,K-W,f)}else{var H=R[4],T=R[5],X=R[6],B=R[7];if(T&&X){N=Math.floor(Math.max(0,(T-L)*af));ah=Math.ceil(Math.min(x,Math.max(0,(X-L)*af)))}var ae,P;if(C==="Squish"||C==="Dense"){ae=1;P=e}else{ae=5;P=a}if(!B){if(R.strand){if(R.strand==="+"){J.fillStyle=J.canvas.manager.get_pattern("right_strand_inv")}else{if(R.strand==="-"){J.fillStyle=J.canvas.manager.get_pattern("left_strand_inv")}}}else{J.fillStyle=A}J.fillRect(W,U,K-W,P)}else{var G,Q;if(C==="Squish"||C==="Dense"){J.fillStyle=g;G=U+Math.floor(e/2)+1;Q=1}else{if(H){var G=U;var Q=P;if(H==="+"){J.fillStyle=J.canvas.manager.get_pattern("right_strand")}else{if(H==="-"){J.fillStyle=J.canvas.manager.get_pattern("left_strand")}}}else{J.fillStyle=g;G+=(e/2)+1;Q=1}}J.fillRect(W,G,K-W,Q);for(var ac=0,z=B.length;ac<z;ac++){var D=B[ac],y=Math.floor(Math.max(0,(D[0]-L)*af)),S=Math.ceil(Math.min(x,Math.max((D[1]-L)*af)));if(y>S){continue}J.fillStyle=A;J.fillRect(y,U+(P-ae)/2+1,S-y,ae);if(N!==undefined&&X>T&&!(y>ah||S<N)){var aa=Math.max(y,N),F=Math.min(S,ah);J.fillRect(aa,U+1,F-aa,P);if(B.length==1&&C=="Pack"){if(H==="+"){J.fillStyle=J.canvas.manager.get_pattern("right_strand_inv")}else{if(H==="-"){J.fillStyle=J.canvas.manager.get_pattern("left_strand_inv")}}if(aa+14<F){aa+=2;F-=2}J.fillRect(aa,U+1,F-aa,P)}}}}if(C==="Pack"&&ad>L){J.fillStyle=Y;if(L===0&&W-J.measureText(M).width<0){J.textAlign="left";J.fillText(M,K+k,U+8)}else{J.textAlign="right";J.fillText(M,W-k,U+8)}J.fillStyle=A}}}});var b=function(z,B,x,y,A){n.call(this,z,B,x,y,A)};t(b.prototype,n.prototype,{draw_element:function(Q,L,F,B,T,z,I,R,O){var F=data[i],H=F[0],P=F[1],A=F[2],K=F[3],D=Math.floor(Math.max(0,(P-T)*I)),G=Math.ceil(Math.min(O,Math.max(0,(A-T)*I))),C=(L==="Dense"?0:(0+B))*R,x,U,y=null,J=null;if(no_label){Q.fillStyle=block_color;Q.fillRect(D+left_offset,C+5,G-D,1)}else{var S=F[4],N=F[5],E=F[6];x=9;U=1;Q.fillRect(D+left_offset,C,G-D,x);if(L!=="Dense"&&K!==undefined&&P>T){Q.fillStyle=label_color;if(T===0&&D-Q.measureText(K).width<0){Q.textAlign="left";Q.fillText(K,G+2+left_offset,C+8)}else{Q.textAlign="right";Q.fillText(K,D-2+left_offset,C+8)}Q.fillStyle=block_color}var M=S+" / "+N;if(P>T&&Q.measureText(M).width<(G-D)){Q.fillStyle="white";Q.textAlign="center";Q.fillText(M,left_offset+D+(G-D)/2,C+8);Q.fillStyle=block_color}}}});var s=function(A,C,x,z,B,y){n.call(this,A,C,x,z,B);this.ref_seq=y};s.prototype.default_prefs=t({},n.prototype.default_prefs,{show_insertions:false});t(s.prototype,n.prototype,{get_row_height:function(){var x,y=this.mode;if(y==="Dense"){x=d}else{if(y==="Squish"){x=l}else{x=v;if(this.prefs.show_insertions){x*=2}}}return x},draw_read:function(T,O,K,Y,z,S,H,E,D){T.textAlign="center";var R=this,y=[Y,z],N=0,U=0,Q=0;ref_seq=this.ref_seq,char_width_px=T.canvas.manager.char_width_px;var ad=[];if((O==="Pack"||this.mode==="Auto")&&E!==undefined&&K>char_width_px){Q=Math.round(K/2)}if(!H){H=[[0,E.length]]}for(var L=0,W=H.length;L<W;L++){var I=H[L],A="MIDNSHP=X"[I[0]],M=I[1];if(A==="H"||A==="S"){N-=M}var F=S+N,ac=Math.floor(Math.max(0,(F-Y)*K)),G=Math.floor(Math.max(0,(F+M-Y)*K));if(ac===G){G+=1}switch(A){case"H":break;case"S":case"M":case"=":if(is_overlap([F,F+M],y)){var P=E.slice(U,U+M);if(Q>0){T.fillStyle=this.prefs.block_color;T.fillRect(ac-Q,D+1,G-ac,9);T.fillStyle=g;for(var aa=0,x=P.length;aa<x;aa++){if(this.prefs.show_differences&&ref_seq){var J=ref_seq[F-Y+aa];if(!J||J.toLowerCase()===P[aa].toLowerCase()){continue}}if(F+aa>=Y&&F+aa<=z){var ab=Math.floor(Math.max(0,(F+aa-Y)*K));T.fillText(P[aa],ab,D+9)}}}else{T.fillStyle=this.prefs.block_color;T.fillRect(ac,D+4,G-ac,e)}}U+=M;N+=M;break;case"N":T.fillStyle=g;T.fillRect(ac-Q,D+5,G-ac,1);N+=M;break;case"D":T.fillStyle="red";T.fillRect(ac-Q,D+4,G-ac,3);N+=M;break;case"P":break;case"I":var X=ac-Q;if(is_overlap([F,F+M],y)){var P=E.slice(U,U+M);if(this.prefs.show_insertions){var C=ac-(G-ac)/2;if((O==="Pack"||this.mode==="Auto")&&E!==undefined&&K>char_width_px){T.fillStyle="yellow";T.fillRect(C-Q,D-9,G-ac,9);ad[ad.length]={type:"triangle",data:[X,D+4,5]};T.fillStyle=g;switch(seq_tile_overlap){case (OVERLAP_START):P=P.slice(Y-F);break;case (OVERLAP_END):P=P.slice(0,F-z);break;case (CONTAINED_BY):break;case (CONTAINS):P=P.slice(Y-F,F-z);break}for(var aa=0,x=P.length;aa<x;aa++){var ab=Math.floor(Math.max(0,(F+aa-Y)*K));T.fillText(P[aa],ab-(G-ac)/2,D)}}else{T.fillStyle="yellow";T.fillRect(C,D+(this.mode!=="Dense"?2:5),G-ac,(O!=="Dense"?e:r))}}else{if((O==="Pack"||this.mode==="Auto")&&E!==undefined&&K>char_width_px){ad[ad.length]={type:"text",data:[P.length,X,D+9]}}else{}}}U+=M;break;case"X":U+=M;break}}T.fillStyle="yellow";var Z,B,ae;for(var V=0;V<ad.length;V++){Z=ad[V];B=Z.type;ae=Z.data;if(B==="text"){T.save();T.font="bold "+T.font;T.fillText(ae[0],ae[1],ae[2]);T.restore()}else{if(B=="triangle"){p(T,ae[0],ae[1],ae[2])}}}},draw_element:function(Q,L,D,A,T,y,H,R,O){var G=D[0],P=D[1],z=D[2],I=D[3],C=Math.floor(Math.max(0,(P-T)*H)),E=Math.ceil(Math.min(O,Math.max(0,(z-T)*H))),B=(L==="Dense"?0:(0+A))*R,U=this.prefs.block_color,F=this.prefs.label_color,N=0;if((L==="Pack"||this.mode==="Auto")&&H>Q.canvas.manager.char_width_px){var N=Math.round(H/2)}Q.fillStyle=U;if(D[5] instanceof Array){var M=Math.floor(Math.max(0,(D[4][0]-T)*H)),K=Math.ceil(Math.min(O,Math.max(0,(D[4][1]-T)*H))),J=Math.floor(Math.max(0,(D[5][0]-T)*H)),x=Math.ceil(Math.min(O,Math.max(0,(D[5][1]-T)*H)));if(D[4][1]>=T&&D[4][0]<=y&&D[4][2]){this.draw_read(Q,L,H,T,y,D[4][0],D[4][2],D[4][3],B)}if(D[5][1]>=T&&D[5][0]<=y&&D[5][2]){this.draw_read(Q,L,H,T,y,D[5][0],D[5][2],D[5][3],B)}if(J>K){Q.fillStyle=g;o(Q,K-N,B+5,J-N,B+5)}}else{Q.fillStyle=U;this.draw_read(Q,L,H,T,y,P,D[4],D[5],B)}if(L==="Pack"&&P>T){Q.fillStyle=this.prefs.label_color;var S=1;if(S===0&&C-Q.measureText(I).width<0){Q.textAlign="left";Q.fillText(I,E+k-N,B+8)}else{Q.textAlign="right";Q.fillText(I,C-k-N,B+8)}Q.fillStyle=U}}});w.SummaryTreePainter=u;w.LinePainter=c;w.LinkedFeaturePainter=q;w.ReadPainter=s;w.VariantPainter=b};(function(d){var c={};var b=function(e){return c[e]};var a=function(f,g){var e={};g(b,e);c[f]=e};a("class",class_module);a("slotting",slotting_module);a("painters",painters_module);a("trackster",trackster_module);for(key in c.trackster){d[key]=c.trackster[key]}})(window);
\ No newline at end of file
+var class_module=function(b,a){var c=function(){var f=arguments[0];for(var e=1;e<arguments.length;e++){var d=arguments[e];for(key in d){f[key]=d[key]}}return f};a.extend=c};var BEFORE=1001,CONTAINS=1002,OVERLAP_START=1003,OVERLAP_END=1004,CONTAINED_BY=1005,AFTER=1006;var compute_overlap=function(e,b){var g=e[0],f=e[1],d=b[0],c=b[1],a;if(g<d){if(f<d){a=BEFORE}else{if(f<=c){a=OVERLAP_START}else{a=CONTAINS}}}else{if(g>c){a=AFTER}else{if(f<=c){a=CONTAINED_BY}else{a=OVERLAP_END}}}return a};var is_overlap=function(c,b){var a=compute_overlap(c,b);return(a!==BEFORE&&a!==AFTER)};var trackster_module=function(f,S){var n=f("class").extend,p=f("slotting"),H=f("painters");var Y=function(Z,aa){this.document=Z;this.default_font=aa!==undefined?aa:"9px Monaco, Lucida Console, monospace";this.dummy_canvas=this.new_canvas();this.dummy_context=this.dummy_canvas.getContext("2d");this.dummy_context.font=this.default_font;this.char_width_px=this.dummy_context.measureText("A").width;this.patterns={};this.load_pattern("right_strand","/visualization/strand_right.png");this.load_pattern("left_strand","/visualization/strand_left.png");this.load_pattern("right_strand_inv","/visualization/strand_right_inv.png");this.load_pattern("left_strand_inv","/visualization/strand_left_inv.png")};n(Y.prototype,{load_pattern:function(Z,ad){var aa=this.patterns,ab=this.dummy_context,ac=new Image();ac.src=image_path+ad;ac.onload=function(){aa[Z]=ab.createPattern(ac,"repeat")}},get_pattern:function(Z){return this.patterns[Z]},new_canvas:function(){var Z=this.document.createElement("canvas");if(window.G_vmlCanvasManager){G_vmlCanvasManager.initElement(Z)}Z.manager=this;return Z}});var B=function(Z,aa){Z.bind("drag",{handle:aa,relative:true},function(ae,af){var ad=$(this).parent();var ac=ad.children();var ab;for(ab=0;ab<ac.length;ab++){if(af.offsetY<$(ac.get(ab)).position().top){break}}if(ab===ac.length){if(this!==ac.get(ab-1)){ad.append(this)}}else{if(this!==ac.get(ab)){$(this).insertBefore(ac.get(ab))}}}).bind("dragstart",function(){$(this).css({"border-top":"1px solid blue","border-bottom":"1px solid blue"})}).bind("dragend",function(){$(this).css("border","0px")})};S.sortable=B;var C=9,z=10,N=C+2,w=100,E=12000,L=200,s=10,G=5000,t=100,m="There was an error in indexing this dataset. ",F="A converter for this dataset is not installed. Please check your datatypes_conf.xml file.",A="No data for this chrom/contig.",q="Currently indexing... please wait",v="Tool cannot be rerun: ",a="Loading data...",T="Ready for display",d=10,r=5,y=5;function u(Z){return Math.round(Z*1000)/1000}var c=function(Z){this.num_elements=Z;this.clear()};n(c.prototype,{get:function(aa){var Z=this.key_ary.indexOf(aa);if(Z!==-1){this.move_key_to_end(aa,Z)}return this.obj_cache[aa]},set:function(aa,ab){if(!this.obj_cache[aa]){if(this.key_ary.length>=this.num_elements){var Z=this.key_ary.shift();delete this.obj_cache[Z]}this.key_ary.push(aa)}this.obj_cache[aa]=ab;return ab},move_key_to_end:function(aa,Z){this.key_ary.splice(Z,1);this.key_ary.push(aa)},clear:function(){this.obj_cache={};this.key_ary=[]},size:function(){return this.key_ary.length}});var M=function(aa,Z,ab){c.call(this,aa);this.track=Z;this.subset=(ab!==undefined?ab:true)};n(M.prototype,c.prototype,{load_data:function(ah,ai,ad,ag,aa,af){var ac={chrom:ah,low:ai,high:ad,mode:ag,resolution:aa,dataset_id:this.track.dataset_id,hda_ldda:this.track.hda_ldda};$.extend(ac,af);if(this.track.filters_manager){var aj=[];var Z=this.track.filters_manager.filters;for(var ae=0;ae<Z.length;ae++){aj[aj.length]=Z[ae].name}ac.filter_cols=JSON.stringify(aj)}var ab=this;return $.getJSON(this.track.data_url,ac,function(ak){ab.set_data(ai,ad,ag,ak)})},get_data:function(ab,Z,ae,af,aa,ad){var ac=this.get(this.gen_key(Z,ae,af));if(ac){return ac}ac=this.load_data(ab,Z,ae,af,aa,ad);this.set_data(Z,ae,af,ac);return ac},set_data:function(aa,ab,ac,Z){return this.set(this.gen_key(aa,ab,ac),Z)},gen_key:function(Z,ab,ac){var aa=Z+"_"+ab+"_"+ac;return aa},split_key:function(Z){return Z.split("_")}});var D=function(aa,Z,ab){M.call(this,aa,Z,ab)};n(D.prototype,M.prototype,c.prototype,{load_data:function(ab,Z,ad,ae,aa,ac){if(aa>1){return}return M.prototype.load_data.call(this,ab,Z,ad,ae,aa,ac)}});var X=function(Z,ac,ab,aa,ad){this.container=Z;this.chrom=null;this.vis_id=ab;this.dbkey=aa;this.title=ac;this.tracks=[];this.label_tracks=[];this.max_low=0;this.max_high=0;this.num_tracks=0;this.track_id_counter=0;this.zoom_factor=3;this.min_separation=30;this.has_changes=false;this.init(ad);this.canvas_manager=new Y(Z.get(0).ownerDocument);this.reset()};n(X.prototype,{init:function(ac){var ab=this.container,Z=this;this.top_container=$("<div/>").addClass("top-container").appendTo(ab);this.content_div=$("<div/>").addClass("content").css("position","relative").appendTo(ab);this.bottom_container=$("<div/>").addClass("bottom-container").appendTo(ab);this.top_labeltrack=$("<div/>").addClass("top-labeltrack").appendTo(this.top_container);this.viewport_container=$("<div/>").addClass("viewport-container").addClass("viewport-container").appendTo(this.content_div);this.intro_div=$("<div/>").addClass("intro").text("Select a chrom from the dropdown below").hide();this.nav_labeltrack=$("<div/>").addClass("nav-labeltrack").appendTo(this.bottom_container);this.nav_container=$("<div/>").addClass("nav-container").prependTo(this.top_container);this.nav=$("<div/>").addClass("nav").appendTo(this.nav_container);this.overview=$("<div/>").addClass("overview").appendTo(this.bottom_container);this.overview_viewport=$("<div/>").addClass("overview-viewport").appendTo(this.overview);this.overview_close=$("<a href='javascript:void(0);'>Close Overview</a>").addClass("overview-close").hide().appendTo(this.overview_viewport);this.overview_highlight=$("<div/>").addClass("overview-highlight").hide().appendTo(this.overview_viewport);this.overview_box_background=$("<div/>").addClass("overview-boxback").appendTo(this.overview_viewport);this.overview_box=$("<div/>").addClass("overview-box").appendTo(this.overview_viewport);this.default_overview_height=this.overview_box.height();this.nav_controls=$("<div/>").addClass("nav-controls").appendTo(this.nav);this.chrom_select=$("<select/>").attr({name:"chrom"}).css("width","15em").addClass("no-autocomplete").append("<option value=''>Loading</option>").appendTo(this.nav_controls);var aa=function(ad){if(ad.type==="focusout"||(ad.keyCode||ad.which)===13||(ad.keyCode||ad.which)===27){if((ad.keyCode||ad.which)!==27){Z.go_to($(this).val())}$(this).hide();$(this).val("");Z.location_span.show();Z.chrom_select.show()}};this.nav_input=$("<input/>").addClass("nav-input").hide().bind("keyup focusout",aa).appendTo(this.nav_controls);this.location_span=$("<span/>").addClass("location").appendTo(this.nav_controls);this.location_span.bind("click",function(){Z.location_span.hide();Z.chrom_select.hide();Z.nav_input.val(Z.chrom+":"+Z.low+"-"+Z.high);Z.nav_input.css("display","inline-block");Z.nav_input.select();Z.nav_input.focus()});if(this.vis_id!==undefined){this.hidden_input=$("<input/>").attr("type","hidden").val(this.vis_id).appendTo(this.nav_controls)}this.zo_link=$("<a id='zoom-out' />").click(function(){Z.zoom_out();Z.redraw()}).appendTo(this.nav_controls);this.zi_link=$("<a id='zoom-in' />").click(function(){Z.zoom_in();Z.redraw()}).appendTo(this.nav_controls);this.load_chroms({low:0},ac);this.chrom_select.bind("change",function(){Z.change_chrom(Z.chrom_select.val())});this.intro_div.show();this.content_div.bind("click",function(ad){$(this).find("input").trigger("blur")});this.content_div.bind("dblclick",function(ad){Z.zoom_in(ad.pageX,this.viewport_container)});this.overview_box.bind("dragstart",function(ad,ae){this.current_x=ae.offsetX}).bind("drag",function(ad,af){var ag=af.offsetX-this.current_x;this.current_x=af.offsetX;var ae=Math.round(ag/Z.viewport_container.width()*(Z.max_high-Z.max_low));Z.move_delta(-ae)});this.overview_close.bind("click",function(){for(var ae=0,ad=Z.tracks.length;ae<ad;ae++){Z.tracks[ae].is_overview=false}$(this).siblings().filter("canvas").remove();$(this).parent().css("height",Z.overview_box.height());Z.overview_highlight.hide();$(this).hide()});this.viewport_container.bind("draginit",function(ad,ae){if(ad.clientX>Z.viewport_container.width()-16){return false}}).bind("dragstart",function(ad,ae){ae.original_low=Z.low;ae.current_height=ad.clientY;ae.current_x=ae.offsetX}).bind("drag",function(af,ah){var ad=$(this);var ai=ah.offsetX-ah.current_x;var ae=ad.scrollTop()-(af.clientY-ah.current_height);ad.scrollTop(ae);ah.current_height=af.clientY;ah.current_x=ah.offsetX;var ag=Math.round(ai/Z.viewport_container.width()*(Z.high-Z.low));Z.move_delta(ag)}).bind("mousewheel",function(af,ah,ae,ad){if(ae){var ag=Math.round(-ae/Z.viewport_container.width()*(Z.high-Z.low));Z.move_delta(ag)}});this.top_labeltrack.bind("dragstart",function(ad,ae){return $("<div />").css({height:Z.content_div.height()+Z.top_labeltrack.height()+Z.nav_labeltrack.height()+1,top:"0px",position:"absolute","background-color":"#ccf",opacity:0.5,"z-index":1000}).appendTo($(this))}).bind("drag",function(ah,ai){$(ai.proxy).css({left:Math.min(ah.pageX,ai.startX),width:Math.abs(ah.pageX-ai.startX)});var ae=Math.min(ah.pageX,ai.startX)-Z.container.offset().left,ad=Math.max(ah.pageX,ai.startX)-Z.container.offset().left,ag=(Z.high-Z.low),af=Z.viewport_container.width();Z.update_location(Math.round(ae/af*ag)+Z.low,Math.round(ad/af*ag)+Z.low)}).bind("dragend",function(ai,aj){var ae=Math.min(ai.pageX,aj.startX),ad=Math.max(ai.pageX,aj.startX),ag=(Z.high-Z.low),af=Z.viewport_container.width(),ah=Z.low;Z.low=Math.round(ae/af*ag)+ah;Z.high=Math.round(ad/af*ag)+ah;$(aj.proxy).remove();Z.redraw()});this.add_label_track(new W(this,this.top_labeltrack));this.add_label_track(new W(this,this.nav_labeltrack));$(window).bind("resize",function(){Z.resize_window()});$(document).bind("redraw",function(){Z.redraw()});this.reset();$(window).trigger("resize")},update_location:function(Z,aa){this.location_span.text(commatize(Z)+" - "+commatize(aa));this.nav_input.val(this.chrom+":"+commatize(Z)+"-"+commatize(aa))},load_chroms:function(aa,ab){aa.num=t;$.extend(aa,(this.vis_id!==undefined?{vis_id:this.vis_id}:{dbkey:this.dbkey}));var Z=this;$.ajax({url:chrom_url,data:aa,dataType:"json",success:function(ad){if(ad.chrom_info.length===0){alert("Invalid chromosome: "+aa.chrom);return}if(ad.reference){Z.add_label_track(new x(Z))}Z.chrom_data=ad.chrom_info;var ag='<option value="">Select Chrom/Contig</option>';for(var af=0,ac=Z.chrom_data.length;af<ac;af++){var ae=Z.chrom_data[af].chrom;ag+='<option value="'+ae+'">'+ae+"</option>"}if(ad.prev_chroms){ag+='<option value="previous">Previous '+t+"</option>"}if(ad.next_chroms){ag+='<option value="next">Next '+t+"</option>"}Z.chrom_select.html(ag);if(ab){ab()}Z.chrom_start_index=ad.start_index},error:function(){alert("Could not load chroms for this dbkey:",Z.dbkey)}})},change_chrom:function(ad,aa,af){if(!ad||ad==="None"){return}var ac=this;if(ad==="previous"){ac.load_chroms({low:this.chrom_start_index-t});return}if(ad==="next"){ac.load_chroms({low:this.chrom_start_index+t});return}var ae=$.grep(ac.chrom_data,function(ah,ai){return ah.chrom===ad})[0];if(ae===undefined){ac.load_chroms({chrom:ad},function(){ac.change_chrom(ad,aa,af)});return}else{if(ad!==ac.chrom){ac.chrom=ad;if(!ac.chrom){ac.intro_div.show()}else{ac.intro_div.hide()}ac.chrom_select.val(ac.chrom);ac.max_high=ae.len-1;ac.reset();ac.redraw(true);for(var ag=0,Z=ac.tracks.length;ag<Z;ag++){var ab=ac.tracks[ag];if(ab.init){ab.init()}}}if(aa!==undefined&&af!==undefined){ac.low=Math.max(aa,0);ac.high=Math.min(af,ac.max_high)}ac.reset_overview();ac.redraw()}},go_to:function(ad){var ah=this,Z,ac,aa=ad.split(":"),af=aa[0],ag=aa[1];if(ag!==undefined){try{var ae=ag.split("-");Z=parseInt(ae[0].replace(/,/g,""),10);ac=parseInt(ae[1].replace(/,/g,""),10)}catch(ab){return false}}ah.change_chrom(af,Z,ac)},move_fraction:function(ab){var Z=this;var aa=Z.high-Z.low;this.move_delta(ab*aa)},move_delta:function(ab){var Z=this;var aa=Z.high-Z.low;if(Z.low-ab<Z.max_low){Z.low=Z.max_low;Z.high=Z.max_low+aa}else{if(Z.high-ab>Z.max_high){Z.high=Z.max_high;Z.low=Z.max_high-aa}else{Z.high-=ab;Z.low-=ab}}Z.redraw()},add_track:function(Z){Z.view=this;Z.track_id=this.track_id_counter;this.tracks.push(Z);if(Z.init){Z.init()}Z.container_div.attr("id","track_"+Z.track_id);B(Z.container_div,".draghandle");this.track_id_counter+=1;this.num_tracks+=1},add_label_track:function(Z){Z.view=this;this.label_tracks.push(Z)},remove_track:function(Z){this.has_changes=true;Z.container_div.fadeOut("slow",function(){$(this).remove()});delete this.tracks[this.tracks.indexOf(Z)];this.num_tracks-=1},reset:function(){this.low=this.max_low;this.high=this.max_high;this.viewport_container.find(".yaxislabel").remove()},redraw:function(ag){var af=this.high-this.low,ae=this.low,aa=this.high;if(ae<this.max_low){ae=this.max_low}if(aa>this.max_high){aa=this.max_high}if(this.high!==0&&af<this.min_separation){aa=ae+this.min_separation}this.low=Math.floor(ae);this.high=Math.ceil(aa);this.resolution=Math.pow(10,Math.ceil(Math.log((this.high-this.low)/L)/Math.LN10));this.zoom_res=Math.pow(s,Math.max(0,Math.ceil(Math.log(this.resolution,s)/Math.log(s))));var Z=(this.low/(this.max_high-this.max_low)*this.overview_viewport.width())||0;var ad=((this.high-this.low)/(this.max_high-this.max_low)*this.overview_viewport.width())||0;var ah=13;this.overview_box.css({left:Z,width:Math.max(ah,ad)}).show();if(ad<ah){this.overview_box.css("left",Z-(ah-ad)/2)}if(this.overview_highlight){this.overview_highlight.css({left:Z,width:ad})}this.update_location(this.low,this.high);if(!ag){for(var ab=0,ac=this.tracks.length;ab<ac;ab++){if(this.tracks[ab]&&this.tracks[ab].enabled){this.tracks[ab].draw()}}for(ab=0,ac=this.label_tracks.length;ab<ac;ab++){this.label_tracks[ab].draw()}}},zoom_in:function(aa,ab){if(this.max_high===0||this.high-this.low<this.min_separation){return}var ac=this.high-this.low,ad=ac/2+this.low,Z=(ac/this.zoom_factor)/2;if(aa){ad=aa/this.viewport_container.width()*(this.high-this.low)+this.low}this.low=Math.round(ad-Z);this.high=Math.round(ad+Z);this.redraw()},zoom_out:function(){if(this.max_high===0){return}var aa=this.high-this.low,ab=aa/2+this.low,Z=(aa*this.zoom_factor)/2;this.low=Math.round(ab-Z);this.high=Math.round(ab+Z);this.redraw()},resize_window:function(){this.viewport_container.height(this.container.height()-this.top_container.height()-this.bottom_container.height());this.nav_container.width(this.container.width());this.redraw()},reset_overview:function(){this.overview_viewport.find("canvas").remove();this.overview_viewport.height(this.default_overview_height);this.overview_box.height(this.default_overview_height);this.overview_close.hide();this.overview_highlight.hide()}});var o=function(ab,af){this.track=ab;this.name=af.name;this.params=[];var am=af.params;for(var ac=0;ac<am.length;ac++){var ah=am[ac],aa=ah.name,al=ah.label,ad=unescape(ah.html),an=ah.value,aj=ah.type;if(aj==="number"){this.params[this.params.length]=new g(aa,al,ad,an,ah.min,ah.max)}else{if(aj=="select"){this.params[this.params.length]=new J(aa,al,ad,an)}else{console.log("WARNING: unrecognized tool parameter type:",aa,aj)}}}this.parent_div=$("<div/>").addClass("dynamic-tool").hide();this.parent_div.bind("drag",function(ap){ap.stopPropagation()}).bind("click",function(ap){ap.stopPropagation()}).bind("dblclick",function(ap){ap.stopPropagation()});var ak=$("<div class='tool-name'>").appendTo(this.parent_div).text(this.name);var ai=this.params;var ag=this;$.each(this.params,function(aq,au){var at=$("<div>").addClass("param-row").appendTo(ag.parent_div);var ap=$("<div>").addClass("param-label").text(au.label).appendTo(at);var ar=$("<div/>").addClass("slider").html(au.html).appendTo(at);ar.find(":input").val(au.value);$("<div style='clear: both;'/>").appendTo(at)});this.parent_div.find("input").click(function(){$(this).select()});var ao=$("<div>").addClass("param-row").appendTo(this.parent_div);var ae=$("<input type='submit'>").attr("value","Run on complete dataset").appendTo(ao);var Z=$("<input type='submit'>").attr("value","Run on visible region").css("margin-left","3em").appendTo(ao);var ag=this;Z.click(function(){ag.run_on_region()});ae.click(function(){ag.run_on_dataset()})};n(o.prototype,{get_param_values_dict:function(){var Z={};this.parent_div.find(":input").each(function(){var aa=$(this).attr("name"),ab=$(this).val();Z[aa]=JSON.stringify(ab)});return Z},get_param_values:function(){var aa=[];var Z={};this.parent_div.find(":input").each(function(){var ab=$(this).attr("name"),ac=$(this).val();if(ab){aa[aa.length]=ac}});return aa},run_on_dataset:function(){var Z=this;Z.run({dataset_id:this.track.original_dataset_id,tool_id:Z.name},function(aa){show_modal(Z.name+" is Running",Z.name+" is running on the complete dataset. Tool outputs are in dataset's history.",{Close:hide_modal})})},run_on_region:function(){var Z={dataset_id:this.track.original_dataset_id,chrom:this.track.view.chrom,low:this.track.view.low,high:this.track.view.high,tool_id:this.name},ab=this.track,aa=Z.tool_id+ab.tool_region_and_parameters_str(Z.chrom,Z.low,Z.high),ac;if(ab.track_type==="FeatureTrack"){ac=new P(aa,view,ab.hda_ldda,undefined,{},{},ab)}this.track.add_track(ac);ac.content_div.text("Starting job.");this.run(Z,function(ad){ac.dataset_id=ad.dataset_id;ac.content_div.text("Running job.");ac.init()})},run:function(aa,ab){$.extend(aa,this.get_param_values_dict());var Z=function(){$.getJSON(rerun_tool_url,aa,function(ac){if(ac==="no converter"){new_track.container_div.addClass("error");new_track.content_div.text(F)}else{if(ac.error){new_track.container_div.addClass("error");new_track.content_div.text(v+ac.message)}else{if(ac==="pending"){new_track.container_div.addClass("pending");new_track.content_div.text("Converting input data so that it can be easily reused.");setTimeout(Z,2000)}else{ab(ac)}}}})};Z()}});var J=function(aa,Z,ab,ac){this.name=aa;this.label=Z;this.html=ab;this.value=ac};var g=function(ab,aa,ad,ae,ac,Z){J.call(this,ab,aa,ad,ae);this.min=ac;this.max=Z};var h=function(aa,Z,ab,ac){this.name=aa;this.index=Z;this.tool_id=ab;this.tool_exp_name=ac};var Q=function(aa,Z,ab,ac){h.call(this,aa,Z,ab,ac);this.low=-Number.MAX_VALUE;this.high=Number.MAX_VALUE;this.min=Number.MAX_VALUE;this.max=-Number.MAX_VALUE;this.slider=null;this.slider_label=null};n(Q.prototype,{applies_to:function(Z){if(Z.length>this.index){return true}return false},keep:function(Z){if(!this.applies_to(Z)){return true}var aa=parseInt(Z[this.index]);return(isNaN(aa)||(aa>=this.low&&aa<=this.high))},update_attrs:function(aa){var Z=false;if(!this.applies_to(aa)){return Z}if(aa[this.index]<this.min){this.min=Math.floor(aa[this.index]);Z=true}if(aa[this.index]>this.max){this.max=Math.ceil(aa[this.index]);Z=true}return Z},update_ui_elt:function(){var ab=function(ae,ac){var ad=ac-ae;return(ad<=2?0.01:1)};var aa=this.slider.slider("option","min"),Z=this.slider.slider("option","max");if(this.min<aa||this.max>Z){this.slider.slider("option","min",this.min);this.slider.slider("option","max",this.max);this.slider.slider("option","step",ab(this.min,this.max));this.slider.slider("option","values",[this.min,this.max])}}});var V=function(ab,ak){this.track=ab;this.filters=[];for(var af=0;af<ak.length;af++){var Z=ak[af],aa=Z.name,aj=Z.type,ah=Z.index,am=Z.tool_id,ac=Z.tool_exp_name;if(aj==="int"||aj==="float"){this.filters[af]=new Q(aa,ah,am,ac)}else{console.log("ERROR: unsupported filter: ",aa,aj)}}var ai=function(an,ao,ap){an.click(function(){var aq=ao.text();max=parseFloat(ap.slider("option","max")),input_size=(max<=1?4:max<=1000000?max.toString().length:6),multi_value=false;if(ap.slider("option","values")){input_size=2*input_size+1;multi_value=true}ao.text("");$("<input type='text'/>").attr("size",input_size).attr("maxlength",input_size).attr("value",aq).appendTo(ao).focus().select().click(function(ar){ar.stopPropagation()}).blur(function(){$(this).remove();ao.text(aq)}).keyup(function(aw){if(aw.keyCode===27){$(this).trigger("blur")}else{if(aw.keyCode===13){var au=ap.slider("option","min"),ar=ap.slider("option","max"),av=function(ax){return(isNaN(ax)||ax>ar||ax<au)},at=$(this).val();if(!multi_value){at=parseFloat(at);if(av(at)){alert("Parameter value must be in the range ["+au+"-"+ar+"]");return $(this)}}else{at=at.split("-");at=[parseFloat(at[0]),parseFloat(at[1])];if(av(at[0])||av(at[1])){alert("Parameter value must be in the range ["+au+"-"+ar+"]");return $(this)}}ap.slider((multi_value?"values":"value"),at)}}})})};this.parent_div=$("<div/>").addClass("filters").hide();this.parent_div.bind("drag",function(an){an.stopPropagation()}).bind("click",function(an){an.stopPropagation()}).bind("dblclick",function(an){an.stopPropagation()}).bind("keydown",function(an){an.stopPropagation()});var ad=this;$.each(this.filters,function(au,ao){var aq=$("<div/>").addClass("slider-row").appendTo(ad.parent_div);var an=$("<div/>").addClass("slider-label").appendTo(aq);var aw=$("<span/>").addClass("slider-name").text(ao.name+" ").appendTo(an);var ap=$("<span/>");var ar=$("<span/>").addClass("slider-value").appendTo(an).append("[").append(ap).append("]");var av=$("<div/>").addClass("slider").appendTo(aq);ao.control_element=$("<div/>").attr("id",ao.name+"-filter-control").appendTo(av);var at=[0,0];ao.control_element.slider({range:true,min:Number.MAX_VALUE,max:-Number.MIN_VALUE,values:[0,0],slide:function(ax,ay){at=ay.values;ap.text(ay.values[0]+"-"+ay.values[1]);setTimeout(function(){if(ay.values[0]==at[0]&&ay.values[1]==at[1]){var az=ay.values;ap.text(az[0]+"-"+az[1]);ao.low=az[0];ao.high=az[1];ad.track.draw(true,true)}},50)},change:function(ax,ay){ao.control_element.slider("option","slide").call(ao.control_element,ax,ay)}});ao.slider=ao.control_element;ao.slider_label=ap;ai(ar,ap,ao.control_element);$("<div style='clear: both;'/>").appendTo(aq)});if(this.filters.length!=0){var al=$("<div>").addClass("param-row").appendTo(this.parent_div);var ag=$("<input type='submit'>").attr("value","Run on complete dataset").appendTo(al);var ae=this;ag.click(function(){ae.run_on_dataset()})}};n(V.prototype,{reset_filters:function(){for(var Z=0;Z<this.filters.length;Z++){filter=this.filters[Z];filter.slider.slider("option","values",[filter.min,filter.max])}},run_on_dataset:function(){var ag=function(al,aj,ak){if(!(aj in al)){al[aj]=ak}return al[aj]};var ad={},aa,ac,ae;for(var af=0;af<this.filters.length;af++){aa=this.filters[af];if(aa.tool_id){if(aa.min!=aa.low){ac=ag(ad,aa.tool_id,[]);ac[ac.length]=aa.tool_exp_name+" >= "+aa.low}if(aa.max!=aa.high){ac=ag(ad,aa.tool_id,[]);ac[ac.length]=aa.tool_exp_name+" <= "+aa.high}}}for(var ai in ad){var Z=ad[ai],ab="("+Z.join(") and (")+")",ah={cond:ab,input:this.track.dataset_id,target_dataset_id:this.track.dataset_id,tool_id:ai};$.getJSON(run_tool_url,ah,function(aj){if(aj.error){new_track.container_div.addClass("error");new_track.content_div.text(v+aj.message)}else{show_modal("Filter Dataset",ai+" is running on the complete dataset. Tool outputs are in dataset's history.",{Close:hide_modal})}})}}});var U=function(Z){this.track=Z.track;this.params=Z.params;this.values={};if(Z.saved_values){this.restore_values(Z.saved_values)}this.onchange=Z.onchange};n(U.prototype,{restore_values:function(Z){var aa=this;$.each(this.params,function(ab,ac){if(Z[ac.key]!==undefined){aa.values[ac.key]=Z[ac.key]}else{aa.values[ac.key]=ac.default_value}})},build_form:function(){var aa=this;var Z=$("<div />");$.each(this.params,function(ae,ac){if(!ac.hidden){var ab="param_"+ae;var aj=$("<div class='form-row' />").appendTo(Z);aj.append($("<label />").attr("for",ab).text(ac.label+":"));if(ac.type==="bool"){aj.append($('<input type="checkbox" />').attr("id",ab).attr("name",ab).attr("checked",aa.values[ac.key]))}else{if(ac.type==="color"){var ag=aa.values[ac.key];var af=$("<input />").attr("id",ab).attr("name",ab).val(ag);var ah=$("<div class='tipsy tipsy-north' style='position: absolute;' />").hide();var ad=$("<div style='background-color: black; padding: 10px;'></div>").appendTo(ah);var ai=$("<div/>").appendTo(ad).farbtastic({width:100,height:100,callback:af,color:ag});$("<div />").append(af).append(ah).appendTo(aj).bind("click",function(ak){ah.css({left:$(this).position().left+($(af).width()/2)-60,top:$(this).position().top+$(this.height)}).show();$(document).bind("click.color-picker",function(){ah.hide();$(document).unbind("click.color-picker")});ak.stopPropagation()})}else{aj.append($("<input />").attr("id",ab).attr("name",ab).val(aa.values[ac.key]))}}}});return Z},update_from_form:function(Z){var ab=this;var aa=false;$.each(this.params,function(ac,ae){if(!ae.hidden){var af="param_"+ac;var ad=Z.find("#"+af).val();if(ae.type==="float"){ad=parseFloat(ad)}else{if(ae.type==="int"){ad=parseInt(ad)}else{if(ae.type==="bool"){ad=Z.find("#"+af).is(":checked")}}}if(ad!==ab.values[ae.key]){ab.values[ae.key]=ad;aa=true}}});if(aa){this.onchange()}}});var b=function(ab,aa,Z){this.index=ab;this.resolution=aa;this.canvas=$("<div class='track-tile'/>").append(Z)};var l=function(ab,aa,Z,ac){b.call(this,ab,aa,Z);this.max_val=ac};var K=function(ab,aa,Z){b.call(this,ab,aa,Z)};var j=function(aa,Z,ad,ab,ac){this.name=aa;this.view=Z;this.parent_element=ad;this.data_url=(ab?ab:default_data_url);this.data_url_extra_params={};this.data_query_wait=(ac?ac:G);this.dataset_check_url=converted_datasets_state_url;this.container_div=$("<div />").addClass("track").css("position","relative");if(!this.hidden){this.header_div=$("<div class='track-header' />").appendTo(this.container_div);if(this.view.editor){this.drag_div=$("<div class='draghandle' />").appendTo(this.header_div)}this.name_div=$("<div class='menubutton popup' />").appendTo(this.header_div);this.name_div.text(this.name);this.name_div.attr("id",this.name.replace(/\s+/g,"-").replace(/[^a-zA-Z0-9\-]/g,"").toLowerCase())}this.content_div=$("<div class='track-content'>").appendTo(this.container_div);this.parent_element.append(this.container_div)};n(j.prototype,{init:function(){var Z=this;Z.enabled=false;Z.tile_cache.clear();Z.data_cache.clear();Z.initial_canvas=undefined;Z.content_div.css("height","auto");Z.container_div.removeClass("nodata error pending");if(!Z.dataset_id){return}$.getJSON(converted_datasets_state_url,{hda_ldda:Z.hda_ldda,dataset_id:Z.dataset_id,chrom:Z.view.chrom},function(aa){if(!aa||aa==="error"||aa.kind==="error"){Z.container_div.addClass("error");Z.content_div.text(m);if(aa.message){var ac=Z.view.tracks.indexOf(Z);var ab=$(" <a href='javascript:void(0);'></a>").text("View error").bind("click",function(){show_modal("Trackster Error","<pre>"+aa.message+"</pre>",{Close:hide_modal})});Z.content_div.append(ab)}}else{if(aa==="no converter"){Z.container_div.addClass("error");Z.content_div.text(F)}else{if(aa==="no data"||(aa.data!==undefined&&(aa.data===null||aa.data.length===0))){Z.container_div.addClass("nodata");Z.content_div.text(A)}else{if(aa==="pending"){Z.container_div.addClass("pending");Z.content_div.text(q);setTimeout(function(){Z.init()},Z.data_query_wait)}else{if(aa.status==="data"){if(aa.valid_chroms){Z.valid_chroms=aa.valid_chroms;Z.make_name_popup_menu()}Z.content_div.text(T);if(Z.view.chrom){Z.content_div.text("");Z.content_div.css("height",Z.height_px+"px");Z.enabled=true;$.when(Z.predraw_init()).done(function(){Z.container_div.removeClass("nodata error pending");Z.draw()})}}}}}}})},predraw_init:function(){},update_name:function(Z){this.old_name=this.name;this.name=Z;this.name_div.text(this.name)},revert_name:function(){this.name=this.old_name;this.name_div.text(this.name)}});var I=function(ah,af,ai){var aa=this,aj=aa.view;this.filters_manager=(ah!==undefined?new V(this,ah):undefined);this.filters_available=false;this.filters_visible=false;this.tool=(af!==undefined&&obj_length(af)>0?new o(this,af):undefined);this.parent_track=ai;this.child_tracks=[];if(aa.hidden){return}if(this.parent_track){this.header_div.find(".draghandle").removeClass("draghandle").addClass("child-track-icon").addClass("icon-button");this.parent_element.addClass("child-track");this.tool=undefined}aa.child_tracks_container=$("<div/>").addClass("child-tracks-container").hide();aa.container_div.append(aa.child_tracks_container);if(this.filters_manager){this.filters_div=this.filters_manager.parent_div;this.header_div.after(this.filters_div)}if(this.tool){this.dynamic_tool_div=this.tool.parent_div;this.header_div.after(this.dynamic_tool_div)}if(aa.display_modes!==undefined){if(aa.mode_div===undefined){aa.mode_div=$("<div class='right-float menubutton popup' />").appendTo(aa.header_div);var ac=(aa.track_config&&aa.track_config.values.mode?aa.track_config.values.mode:aa.display_modes[0]);aa.mode=ac;aa.mode_div.text(ac);var ab=function(ak){aa.mode_div.text(ak);aa.mode=ak;aa.track_config.values.mode=ak;aa.tile_cache.clear();aa.draw()};var Z={};for(var ad=0,ag=aa.display_modes.length;ad<ag;ad++){var ae=aa.display_modes[ad];Z[ae]=function(ak){return function(){ab(ak)}}(ae)}make_popupmenu(aa.mode_div,Z)}else{aa.mode_div.hide()}}this.make_name_popup_menu()};n(I.prototype,j.prototype,{make_name_popup_menu:function(){var aa=this;var Z={};Z["Edit configuration"]=function(){var ag=function(){hide_modal();$(window).unbind("keypress.check_enter_esc")},ae=function(){aa.track_config.update_from_form($(".dialog-box"));hide_modal();$(window).unbind("keypress.check_enter_esc")},af=function(ah){if((ah.keyCode||ah.which)===27){ag()}else{if((ah.keyCode||ah.which)===13){ae()}}};$(window).bind("keypress.check_enter_esc",af);show_modal("Configure Track",aa.track_config.build_form(),{Cancel:ag,OK:ae})};if(aa.filters_available>0){var ad=(aa.filters_div.is(":visible")?"Hide filters":"Show filters");Z[ad]=function(){aa.filters_visible=(aa.filters_div.is(":visible"));if(aa.filters_visible){aa.filters_manager.reset_filters()}aa.filters_div.toggle();aa.make_name_popup_menu()}}if(aa.tool){var ad=(aa.dynamic_tool_div.is(":visible")?"Hide tool":"Show tool");Z[ad]=function(){if(!aa.dynamic_tool_div.is(":visible")){aa.update_name(aa.name+aa.tool_region_and_parameters_str())}else{menu_option_text="Show dynamic tool";aa.revert_name()}aa.dynamic_tool_div.toggle();aa.make_name_popup_menu()}}if(aa.valid_chroms){Z["List chrom/contigs with data"]=function(){show_modal("Chrom/contigs with data","<p>"+aa.valid_chroms.join("<br/>")+"</p>",{Close:function(){hide_modal()}})}}var ab=view;var ac=function(){$("#no-tracks").show()};if(this.parent_track){ab=this.parent_track;ac=function(){}}Z.Remove=function(){ab.remove_track(aa);if(ab.num_tracks===0){ac()}};make_popupmenu(aa.name_div,Z)},draw:function(Z,ab){var at=this.view.low,af=this.view.high,ah=af-at,aj=this.view.container.width(),ad=aj/ah,ak=this.view.resolution,ac=$("<div style='position: relative;'></div>"),al=function(av,aw,au){return av+"_"+aw+"_"+au};if(!ab){this.content_div.children().remove()}this.content_div.append(ac);this.max_height=0;var an=Math.floor(at/ak/L);var ae=[];var ao=0;while((an*L*ak)<af){var ar=al(aj,ad,an);var ag=this.tile_cache.get(ar);var ap=an*L*this.view.resolution;var aa=ap+L*this.view.resolution;if(!Z&&ag){ae[ae.length]=ag;this.show_tile(ag,ac,ap,ad)}else{this.delayed_draw(Z,ar,an,ak,ac,ad,ae)}an+=1;ao++}var ai=this;var aq=setInterval(function(){if(ae.length===ao){clearInterval(aq);if(ab){var ax=ai.content_div.children();var ay=false;for(var aw=ax.length-1,aC=0;aw>=aC;aw--){var av=$(ax[aw]);if(ay){av.remove()}else{if(av.children().length!==0){ay=true}}}}if(ai.track_type=="FeatureTrack"&&ai.mode=="Histogram"){var aB=-1;for(var aw=0;aw<ae.length;aw++){var aE=ae[aw].max_val;if(aE>aB){aB=aE}}for(var aw=0;aw<ae.length;aw++){if(ae[aw].max_val!==aB){var aD=ae[aw];aD.canvas.remove();ai.delayed_draw(true,al(aj,ad,aD.index),aD.index,aD.resolution,ac,ad,[],{max:aB})}}}if(ai.filters_manager){var au=ai.filters_manager.filters;for(var aA=0;aA<au.length;aA++){au[aA].update_ui_elt()}var az=false;if(ai.example_feature){for(var aA=0;aA<au.length;aA++){if(au[aA].applies_to(ai.example_feature)){az=true;break}}}if(ai.filters_available!==az){ai.filters_available=az;if(!ai.filters_available){ai.filters_div.hide()}ai.make_name_popup_menu()}}}},50);for(var am=0;am<this.child_tracks.length;am++){this.child_tracks[am].draw(Z,ab)}},delayed_draw:function(aa,ah,ab,ad,ai,al,aj,ae){var ac=this,af=ab*L*ad,ak=af+L*ad;var ag=function(au,am,ao,an,ar,at,ap){var aq=ac.draw_tile(am,ao,an,at,ap);ac.tile_cache.set(ah,aq);if(aq===undefined){return}ac.show_tile(aq,ar,af,at);aj[aj.length]=aq};var Z=setTimeout(function(){if(af<=ac.view.high&&ak>=ac.view.low){var am=(aa?undefined:ac.tile_cache.get(ah));if(am){ac.show_tile(am,ai,af,al);aj[aj.length]=am}else{$.when(ac.data_cache.get_data(view.chrom,af,ak,ac.mode,ad,ac.data_url_extra_params)).then(function(an){n(an,ae);if(view.reference_track&&al>view.canvas_manager.char_width_px){$.when(view.reference_track.data_cache.get_data(view.chrom,af,ak,ac.mode,ad,view.reference_track.data_url_extra_params)).then(function(ao){ag(Z,an,ad,ab,ai,al,ao)})}else{ag(Z,an,ad,ab,ai,al)}})}}},50)},show_tile:function(ac,af,ad,ag){var aa=this;var ab=this.view.high-this.view.low,ae=(ad-this.view.low)*ag;if(this.left_offset){ae-=this.left_offset}var Z=ac.canvas;Z.css({position:"absolute",top:0,left:ae,height:""});af.append(Z);aa.max_height=Math.max(aa.max_height,Z.height());aa.content_div.css("height",aa.max_height+"px");af.children().css("height",aa.max_height+"px")},set_overview:function(){var Z=this.view;if(this.initial_canvas&&this.is_overview){Z.overview_close.show();Z.overview_viewport.append(this.initial_canvas);Z.overview_highlight.show().height(this.initial_canvas.height());Z.overview_viewport.height(this.initial_canvas.height()+Z.overview_box.height())}$(window).trigger("resize")},tool_region_and_parameters_str:function(ab,Z,ac){var aa=this,ad=(ab!==undefined&&Z!==undefined&&ac!==undefined?ab+":"+Z+"-"+ac:"all");return" - region=["+ad+"], parameters=["+aa.tool.get_param_values().join(", ")+"]"},add_track:function(Z){Z.track_id=this.track_id+"_"+this.child_tracks.length;Z.container_div.attr("id","track_"+Z.track_id);this.child_tracks_container.append(Z.container_div);B(Z.container_div,".child-track-icon");if(!$(this.child_tracks_container).is(":visible")){this.child_tracks_container.show()}this.child_tracks.push(Z);this.view.has_changes=true},remove_track:function(Z){Z.container_div.fadeOut("slow",function(){$(this).remove()})}});var W=function(Z,aa){this.track_type="LabelTrack";this.hidden=true;j.call(this,null,Z,aa);this.container_div.addClass("label-track")};n(W.prototype,j.prototype,{draw:function(){var ab=this.view,ac=ab.high-ab.low,af=Math.floor(Math.pow(10,Math.floor(Math.log(ac)/Math.log(10)))),Z=Math.floor(ab.low/af)*af,ad=this.view.container.width(),aa=$("<div style='position: relative; height: 1.3em;'></div>");while(Z<ab.high){var ae=(Z-ab.low)/ac*ad;aa.append($("<div class='label'>"+commatize(Z)+"</div>").css({position:"absolute",left:ae-1}));Z+=af}this.content_div.children(":first").remove();this.content_div.append(aa)}});var x=function(Z){this.track_type="ReferenceTrack";this.hidden=true;j.call(this,null,Z,Z.top_labeltrack);I.call(this);Z.reference_track=this;this.left_offset=200;this.height_px=12;this.container_div.addClass("reference-track");this.content_div.css("background","none");this.content_div.css("min-height","0px");this.content_div.css("border","none");this.data_url=reference_url;this.data_url_extra_params={dbkey:Z.dbkey};this.data_cache=new D(y,this,false);this.tile_cache=new c(r)};n(x.prototype,I.prototype,{draw_tile:function(ah,ae,aa,aj){var ad=this,ab=L*ae;if(aj>this.view.canvas_manager.char_width_px){if(ah===null){ad.content_div.css("height","0px");return}var ac=this.view.canvas_manager.new_canvas();var ai=ac.getContext("2d");ac.width=Math.ceil(ab*aj+ad.left_offset);ac.height=ad.height_px;ai.font=ai.canvas.manager.default_font;ai.textAlign="center";for(var af=0,ag=ah.length;af<ag;af++){var Z=Math.round(af*aj);ai.fillText(ah[af],Z+ad.left_offset,10)}return new b(aa,ae,ac)}this.content_div.css("height","0px")}});var k=function(ad,ab,ae,Z,ac){var aa=this;this.track_type="LineTrack";this.display_modes=["Histogram","Line","Filled","Intensity"];this.mode="Histogram";j.call(this,ad,ab,ab.viewport_container);I.call(this);this.min_height_px=16;this.max_height_px=400;this.height_px=80;this.hda_ldda=ae;this.dataset_id=Z;this.original_dataset_id=Z;this.data_cache=new M(y,this);this.tile_cache=new c(r);this.track_config=new U({track:this,params:[{key:"color",label:"Color",type:"color",default_value:"black"},{key:"min_value",label:"Min Value",type:"float",default_value:undefined},{key:"max_value",label:"Max Value",type:"float",default_value:undefined},{key:"mode",type:"string",default_value:this.mode,hidden:true},{key:"height",type:"int",default_value:this.height_px,hidden:true}],saved_values:ac,onchange:function(){aa.vertical_range=aa.prefs.max_value-aa.prefs.min_value;$("#linetrack_"+aa.track_id+"_minval").text(aa.prefs.min_value);$("#linetrack_"+aa.track_id+"_maxval").text(aa.prefs.max_value);aa.tile_cache.clear();aa.draw()}});this.prefs=this.track_config.values;this.height_px=this.track_config.values.height;this.vertical_range=this.track_config.values.max_value-this.track_config.values.min_value;this.add_resize_handle()};n(k.prototype,I.prototype,{add_resize_handle:function(){var Z=this;var ac=false;var ab=false;var aa=$("<div class='track-resize'>");$(Z.container_div).hover(function(){ac=true;aa.show()},function(){ac=false;if(!ab){aa.hide()}});aa.hide().bind("dragstart",function(ad,ae){ab=true;ae.original_height=$(Z.content_div).height()}).bind("drag",function(ae,af){var ad=Math.min(Math.max(af.original_height+af.deltaY,Z.min_height_px),Z.max_height_px);$(Z.content_div).css("height",ad);Z.height_px=ad;Z.draw(true)}).bind("dragend",function(ad,ae){Z.tile_cache.clear();ab=false;if(!ac){aa.hide()}Z.track_config.values.height=Z.height_px}).appendTo(Z.container_div)},predraw_init:function(){var Z=this,aa=Z.view.tracks.indexOf(Z);Z.vertical_range=undefined;return $.getJSON(Z.data_url,{stats:true,chrom:Z.view.chrom,low:null,high:null,hda_ldda:Z.hda_ldda,dataset_id:Z.dataset_id},function(ab){Z.container_div.addClass("line-track");var ad=ab.data;if(isNaN(parseFloat(Z.prefs.min_value))||isNaN(parseFloat(Z.prefs.max_value))){Z.prefs.min_value=ad.min;Z.prefs.max_value=ad.max;$("#track_"+aa+"_minval").val(Z.prefs.min_value);$("#track_"+aa+"_maxval").val(Z.prefs.max_value)}Z.vertical_range=Z.prefs.max_value-Z.prefs.min_value;Z.total_frequency=ad.total_frequency;Z.container_div.find(".yaxislabel").remove();var ae=$("<div />").addClass("yaxislabel").attr("id","linetrack_"+aa+"_minval").text(u(Z.prefs.min_value));var ac=$("<div />").addClass("yaxislabel").attr("id","linetrack_"+aa+"_maxval").text(u(Z.prefs.max_value));ac.css({position:"absolute",top:"24px",left:"10px"});ac.prependTo(Z.container_div);ae.css({position:"absolute",bottom:"2px",left:"10px"});ae.prependTo(Z.container_div)})},draw_tile:function(aj,ad,aa,ai){if(this.vertical_range===undefined){return}var ae=aa*L*ad,ac=L*ad,Z=Math.ceil(ac*ai),ag=this.height_px;var ab=this.view.canvas_manager.new_canvas();ab.width=Z,ab.height=ag;var ah=ab.getContext("2d");var af=new H.LinePainter(aj.data,ae,ae+ac,this.prefs,this.mode);af.draw(ah,Z,ag);return new b(ac,ad,ab)}});var e=function(Z,ae,ad,ah,ag,ab,ac,af){var aa=this;this.track_type="FeatureTrack";this.display_modes=["Auto","Histogram","Dense","Squish","Pack"];this.track_config=new U({track:this,params:[{key:"block_color",label:"Block color",type:"color",default_value:"#444"},{key:"label_color",label:"Label color",type:"color",default_value:"black"},{key:"show_counts",label:"Show summary counts",type:"bool",default_value:true},{key:"mode",type:"string",default_value:this.mode,hidden:true},],saved_values:ag,onchange:function(){aa.tile_cache.clear();aa.draw()}});this.prefs=this.track_config.values;j.call(this,Z,ae,ae.viewport_container);I.call(this,ab,ac,af);this.height_px=0;this.container_div.addClass("feature-track");this.hda_ldda=ad;this.dataset_id=ah;this.original_dataset_id=ah;this.show_labels_scale=0.001;this.showing_details=false;this.summary_draw_height=30;this.inc_slots={};this.start_end_dct={};this.tile_cache=new c(d);this.data_cache=new M(20,this);this.left_offset=200;this.painter=H.LinkedFeaturePainter};n(e.prototype,I.prototype,{update_auto_mode:function(Z){if(this.mode=="Auto"){if(Z=="no_detail"){Z="feature spans"}else{if(Z=="summary_tree"){Z="coverage histogram"}}this.mode_div.text("Auto ("+Z+")")}},incremental_slots:function(ad,aa,ac){var ab=this.view.canvas_manager.dummy_context,Z=this.inc_slots[ad];if(!Z||(Z.mode!==ac)){Z=new (p.FeatureSlotter)(ad,ac==="Pack",w,function(ae){return ab.measureText(ae)});Z.mode=ac;this.inc_slots[ad]=Z}return Z.slot_features(aa)},get_summary_tree_data:function(ad,ag,ab,ao){if(ao>ab-ag){ao=ab-ag}var ak=Math.floor((ab-ag)/ao),an=[],ac=0;var ae=0,af=0,aj,am=0,ah=[],al,ai;var aa=function(ar,aq,at,ap){ar[0]=aq+at*ap;ar[1]=aq+(at+1)*ap};while(am<ao&&ae!==ad.length){var Z=false;for(;am<ao&&!Z;am++){aa(ah,ag,am,ak);for(af=ae;af<ad.length;af++){aj=ad[af].slice(1,3);if(is_overlap(aj,ah)){Z=true;break}}if(Z){break}}data_start_index=af;an[an.length]=al=[ah[0],0];for(;af<ad.length;af++){aj=ad[af].slice(1,3);if(is_overlap(aj,ah)){al[1]++}else{break}}if(al[1]>ac){ac=al[1]}am++}return{max:ac,delta:ak,data:an}},draw_tile:function(am,av,az,ai,ac){var ar=this,aB=az*L*av,aa=(az+1)*L*av,ao=aa-aB,at=Math.ceil(ao*ai),aq=this.mode,aF=25,ad=this.left_offset,an,ae;if(aq==="Auto"){if(am.dataset_type==="summary_tree"){aq=am.dataset_type}else{if(am.extra_info==="no_detail"){aq="no_detail"}else{var aE=am.data;if(this.view.high-this.view.low>E){aq="Squish"}else{aq="Pack"}}}this.update_auto_mode(aq)}if(aq==="summary_tree"||aq==="Histogram"){ae=this.summary_draw_height;this.container_div.find(".yaxislabel").remove();var Z=$("<div />").addClass("yaxislabel");Z.text(am.max);Z.css({position:"absolute",top:"24px",left:"10px",color:this.prefs.label_color});Z.prependTo(this.container_div);var ab=this.view.canvas_manager.new_canvas();ab.width=at+ad;ab.height=ae+N;if(am.dataset_type!="summary_tree"){var aj=this.get_summary_tree_data(am.data,aB,aa,200);if(am.max){aj.max=am.max}am=aj}var aC=new H.SummaryTreePainter(am,aB,aa,this.prefs);var au=ab.getContext("2d");au.translate(ad,N);aC.draw(au,at,ae);return new l(az,av,ab,am.max)}var an,ag=1;if(aq==="no_detail"||aq==="Squish"||aq==="Pack"){ag=this.incremental_slots(ai,am.data,aq);an=this.inc_slots[ai].slots}var ah=[];if(am.data){var ak=this.filters_manager.filters;for(var aw=0,ay=am.data.length;aw<ay;aw++){var af=am.data[aw];var ax=false;var al;for(var aA=0,aD=ak.length;aA<aD;aA++){al=ak[aA];al.update_attrs(af);if(!al.keep(af)){ax=true;break}}if(!ax){ah.push(af)}}}var aC=new (this.painter)(ah,aB,aa,this.prefs,aq,ac);var ae=aC.get_required_height(ag)+z;var ab=this.view.canvas_manager.new_canvas();ab.width=at+ad;ab.height=ae;var au=ab.getContext("2d");au.fillStyle=this.prefs.block_color;au.font=au.canvas.manager.default_font;au.textAlign="right";this.container_div.find(".yaxislabel").remove();if(am.message){au.fillStyle="red";au.textAlign="left";var ap=au.textBaseline;au.textBaseline="top";au.fillRect(ad,0,ab.width-ad,1);au.fillText(am.message,ad,2);au.textBaseline=ap;if(!am.data){return new b(az,av,ab,ae)}}this.example_feature=(am.data.length?am.data[0]:undefined);au.translate(ad,z);aC.draw(au,at,ae,an);return new K(az,av,ab)}});var O=function(ac,aa,ae,Z,ab,ad){e.call(this,ac,aa,ae,Z,ab,ad);this.track_type="VcfTrack";this.painter=H.VariantPainter};n(O.prototype,I.prototype,e.prototype);var R=function(ac,aa,ae,Z,ab,ad){e.call(this,ac,aa,ae,Z,ab,ad);this.track_config=new U({track:this,params:[{key:"block_color",label:"Block color",type:"color",default_value:"#444"},{key:"label_color",label:"Label color",type:"color",default_value:"black"},{key:"show_insertions",label:"Show insertions",type:"bool",default_value:false},{key:"show_differences",label:"Show differences only",type:"bool",default_value:true},{key:"show_counts",label:"Show summary counts",type:"bool",default_value:true},{key:"mode",type:"string",default_value:this.mode,hidden:true},],saved_values:ab,onchange:function(){this.track.tile_cache.clear();this.track.draw()}});this.prefs=this.track_config.values;this.track_type="ReadTrack";this.painter=H.ReadPainter;this.make_name_popup_menu()};n(R.prototype,I.prototype,e.prototype);var P=function(ad,ab,af,Z,ac,ae,aa){e.call(this,ad,ab,af,Z,ac,ae,{},aa);this.track_type="ToolDataFeatureTrack";this.data_url=raw_data_url;this.data_query_wait=1000;this.dataset_check_url=dataset_state_url};n(P.prototype,I.prototype,e.prototype,{predraw_init:function(){var aa=this;var Z=function(){if(aa.data_cache.size()===0){setTimeout(Z,300)}else{aa.data_url=default_data_url;aa.data_query_wait=G;aa.dataset_state_url=converted_datasets_state_url;$.getJSON(aa.dataset_state_url,{dataset_id:aa.dataset_id,hda_ldda:aa.hda_ldda},function(ab){})}};Z()}});S.View=X;S.LineTrack=k;S.FeatureTrack=e;S.ReadTrack=R};var slotting_module=function(c,b){var e=c("class").extend;var d=2,a=5;b.FeatureSlotter=function(j,h,f,g){this.slots={};this.start_end_dct={};this.w_scale=j;this.include_label=h;this.max_rows=f;this.measureText=g};e(b.FeatureSlotter.prototype,{slot_features:function(m){var p=this.w_scale,s=this.slots,h=this.start_end_dct,y=[],A=[],n=0,z=this.max_rows;for(var w=0,x=m.length;w<x;w++){var l=m[w],o=l[0];if(s[o]!==undefined){n=Math.max(n,s[o]);A.push(s[o])}else{y.push(w)}}var q=function(G,H){for(var F=0;F<=z;F++){var D=false,I=h[F];if(I!==undefined){for(var C=0,E=I.length;C<E;C++){var B=I[C];if(H>B[0]&&G<B[1]){D=true;break}}}if(!D){return F}}return -1};for(var w=0,x=y.length;w<x;w++){var l=m[y[w]],o=l[0],u=l[1],f=l[2],r=l[3],g=Math.floor(u*p),k=Math.ceil(f*p),v=this.measureText(r).width,j;if(r!==undefined&&this.include_label){v+=(d+a);if(g-v>=0){g-=v;j="left"}else{k+=v;j="right"}}var t=q(g,k);if(t>=0){if(h[t]===undefined){h[t]=[]}h[t].push([g,k]);s[o]=t;n=Math.max(n,t)}else{}}return n+1}})};var painters_module=function(j,w){var t=j("class").extend;var o=function(H,z,F,y,E,C){if(C===undefined){C=4}var B=y-z;var A=E-F;var D=Math.floor(Math.sqrt(B*B+A*A)/C);var I=B/D;var G=A/D;var x;for(x=0;x<D;x++,z+=I,F+=G){if(x%2!==0){continue}H.fillRect(z,F,C,1)}};var p=function(A,z,x,D){var C=z-D/2,B=z+D/2,E=x-Math.sqrt(D*3/2);A.beginPath();A.moveTo(C,E);A.lineTo(B,E);A.lineTo(z,x);A.lineTo(C,E);A.strokeStyle=this.fillStyle;A.fill();A.stroke();A.closePath()};var m=function(z,B,x,y,A){this.data=z;this.view_start=B;this.view_end=x;this.prefs=t({},this.default_prefs,y);this.mode=A};m.prototype.default_prefs={};var u=function(z,B,x,y,A){m.call(this,z,B,x,y,A)};u.prototype.default_prefs={show_counts:false};u.prototype.draw=function(M,z,L){var E=this.view_start,O=this.view_end-this.view_start,N=z/O;var J=this.data.data,I=this.data.delta,G=this.data.max,B=L;delta_x_px=Math.ceil(I*N);M.save();for(var C=0,D=J.length;C<D;C++){var H=Math.floor((J[C][0]-E)*N);var F=J[C][1];if(!F){continue}var K=F/G*L;if(F!==0&&K<1){K=1}M.fillStyle=this.prefs.block_color;M.fillRect(H,B-K,delta_x_px,K);var A=4;if(this.prefs.show_counts&&(M.measureText(F).width+A)<delta_x_px){M.fillStyle=this.prefs.label_color;M.textAlign="center";M.fillText(F,H+(delta_x_px/2),10)}}M.restore()};var c=function(x,B,D,E,z){m.call(this,x,B,D,E,z);if(this.prefs.min_value===undefined){var F=Infinity;for(var y=0,A=this.data.length;y<A;y++){F=Math.min(F,this.data[y][1])}this.prefs.min_value=F}if(this.prefs.max_value===undefined){var C=-Infinity;for(var y=0,A=this.data.length;y<A;y++){C=Math.max(C,this.data[y][1])}this.prefs.max_value=C}};c.prototype.default_prefs={min_value:undefined,max_value:undefined,mode:"Histogram",color:"#000",overflow_color:"#F66"};c.prototype.draw=function(O,N,L){var F=false,H=this.prefs.min_value,D=this.prefs.max_value,K=D-H,z=L,A=this.view_start,M=this.view_end-this.view_start,B=N/M,I=this.mode,S=this.data;O.save();var T=Math.round(L+H/K*L);if(I!=="Intensity"){O.fillStyle="#aaa";O.fillRect(0,T,N,1)}O.beginPath();O.fillStyle=this.prefs.color;var R,E,C;if(S.length>1){C=Math.ceil((S[1][0]-S[0][0])*B)}else{C=10}for(var P=0,Q=S.length;P<Q;P++){R=Math.round((S[P][0]-A)*B);E=S[P][1];if(E===null){if(F&&I==="Filled"){O.lineTo(R,z)}F=false;continue}if(E<H){E=H}else{if(E>D){E=D}}if(I==="Histogram"){E=Math.round(E/K*z);O.fillRect(R,T,C,-E)}else{if(I==="Intensity"){E=255-Math.floor((E-H)/K*255);O.fillStyle="rgb("+E+","+E+","+E+")";O.fillRect(R,0,C,z)}else{E=Math.round(z-(E-H)/K*z);if(F){O.lineTo(R,E)}else{F=true;if(I==="Filled"){O.moveTo(R,z);O.lineTo(R,E)}else{O.moveTo(R,E)}}}}}if(I==="Filled"){if(F){O.lineTo(R,T);O.lineTo(0,T)}O.fill()}else{O.stroke()}var x=-1,J=-1;O.fillStyle=this.prefs.overflow_color;var G;for(var P=0,Q=S.length;P<Q;P++){E=S[P][1];R=Math.round((S[P][0]-A)*B);if(J>=0&&(E===null||E<D)){O.fillRect(J,0,G+C-J,2);J=-1}else{if(x>=0&&(E===null||E>H)){O.fillRect(x,L-2,G+C-x,2);x=-1}}if(E!==null&&E>D&&J<0){J=R}else{if(E!==null&&E<H&&x<0){x=R}}G=R}O.restore()};var n=function(z,B,x,y,A){m.call(this,z,B,x,y,A)};n.prototype.default_prefs={block_color:"#FFF",connector_color:"#FFF"};t(n.prototype,{get_required_height:function(y){var x=y_scale=this.get_row_height(),z=this.mode;if(z==="no_detail"||z==="Squish"||z==="Pack"){x=y*y_scale}return x+Math.max(Math.round(y_scale/2),5)},draw:function(J,A,I,F){var D=this.data,G=this.view_start,K=this.view_end;J.save();J.fillStyle=this.prefs.block_color;J.textAlign="right";var N=this.view_end-this.view_start,M=A/N,z=this.get_row_height();for(var C=0,E=D.length;C<E;C++){var L=D[C],B=L[0],x=L[1],y=L[2],H=(F&&F[B]!==undefined?F[B]:null);if((x<K&&y>G)&&(this.mode=="Dense"||H!==null)){this.draw_element(J,this.mode,L,H,G,K,M,z,A)}}J.restore()}});var d=10,h=3,l=5,v=10,f=1,r=3,e=3,a=9,k=2,g="#ccc";var q=function(z,B,x,y,A){n.call(this,z,B,x,y,A)};t(q.prototype,n.prototype,{get_row_height:function(){var y=this.mode,x;if(y==="Dense"){x=d}else{if(y==="no_detail"){x=h}else{if(y==="Squish"){x=l}else{x=v}}}return x},draw_element:function(J,C,R,E,L,ab,af,ag,x){var O=R[0],ad=R[1],V=R[2],M=R[3],W=Math.floor(Math.max(0,(ad-L)*af)),K=Math.ceil(Math.min(x,Math.max(0,(V-L)*af))),U=(C==="Dense"?0:(0+E))*ag,I,Z,N=null,ah=null,A=this.prefs.block_color,Y=this.prefs.label_color;if(C=="Dense"){E=1}if(C==="no_detail"){J.fillStyle=A;J.fillRect(W,U+5,K-W,f)}else{var H=R[4],T=R[5],X=R[6],B=R[7];if(T&&X){N=Math.floor(Math.max(0,(T-L)*af));ah=Math.ceil(Math.min(x,Math.max(0,(X-L)*af)))}var ae,P;if(C==="Squish"||C==="Dense"){ae=1;P=e}else{ae=5;P=a}if(!B){if(R.strand){if(R.strand==="+"){J.fillStyle=J.canvas.manager.get_pattern("right_strand_inv")}else{if(R.strand==="-"){J.fillStyle=J.canvas.manager.get_pattern("left_strand_inv")}}}else{J.fillStyle=A}J.fillRect(W,U,K-W,P)}else{var G,Q;if(C==="Squish"||C==="Dense"){J.fillStyle=g;G=U+Math.floor(e/2)+1;Q=1}else{if(H){var G=U;var Q=P;if(H==="+"){J.fillStyle=J.canvas.manager.get_pattern("right_strand")}else{if(H==="-"){J.fillStyle=J.canvas.manager.get_pattern("left_strand")}}}else{J.fillStyle=g;G+=(e/2)+1;Q=1}}J.fillRect(W,G,K-W,Q);for(var ac=0,z=B.length;ac<z;ac++){var D=B[ac],y=Math.floor(Math.max(0,(D[0]-L)*af)),S=Math.ceil(Math.min(x,Math.max((D[1]-L)*af)));if(y>S){continue}J.fillStyle=A;J.fillRect(y,U+(P-ae)/2+1,S-y,ae);if(N!==undefined&&X>T&&!(y>ah||S<N)){var aa=Math.max(y,N),F=Math.min(S,ah);J.fillRect(aa,U+1,F-aa,P);if(B.length==1&&C=="Pack"){if(H==="+"){J.fillStyle=J.canvas.manager.get_pattern("right_strand_inv")}else{if(H==="-"){J.fillStyle=J.canvas.manager.get_pattern("left_strand_inv")}}if(aa+14<F){aa+=2;F-=2}J.fillRect(aa,U+1,F-aa,P)}}}}if(C==="Pack"&&ad>L){J.fillStyle=Y;if(L===0&&W-J.measureText(M).width<0){J.textAlign="left";J.fillText(M,K+k,U+8)}else{J.textAlign="right";J.fillText(M,W-k,U+8)}J.fillStyle=A}}}});var b=function(z,B,x,y,A){n.call(this,z,B,x,y,A)};t(b.prototype,n.prototype,{draw_element:function(Q,L,F,B,T,z,I,R,O){var F=data[i],H=F[0],P=F[1],A=F[2],K=F[3],D=Math.floor(Math.max(0,(P-T)*I)),G=Math.ceil(Math.min(O,Math.max(0,(A-T)*I))),C=(L==="Dense"?0:(0+B))*R,x,U,y=null,J=null;if(no_label){Q.fillStyle=block_color;Q.fillRect(D+left_offset,C+5,G-D,1)}else{var S=F[4],N=F[5],E=F[6];x=9;U=1;Q.fillRect(D+left_offset,C,G-D,x);if(L!=="Dense"&&K!==undefined&&P>T){Q.fillStyle=label_color;if(T===0&&D-Q.measureText(K).width<0){Q.textAlign="left";Q.fillText(K,G+2+left_offset,C+8)}else{Q.textAlign="right";Q.fillText(K,D-2+left_offset,C+8)}Q.fillStyle=block_color}var M=S+" / "+N;if(P>T&&Q.measureText(M).width<(G-D)){Q.fillStyle="white";Q.textAlign="center";Q.fillText(M,left_offset+D+(G-D)/2,C+8);Q.fillStyle=block_color}}}});var s=function(A,C,x,z,B,y){n.call(this,A,C,x,z,B);this.ref_seq=y};s.prototype.default_prefs=t({},n.prototype.default_prefs,{show_insertions:false});t(s.prototype,n.prototype,{get_row_height:function(){var x,y=this.mode;if(y==="Dense"){x=d}else{if(y==="Squish"){x=l}else{x=v;if(this.prefs.show_insertions){x*=2}}}return x},draw_read:function(T,O,K,Y,z,S,H,E,D){T.textAlign="center";var R=this,y=[Y,z],N=0,U=0,Q=0;ref_seq=this.ref_seq,char_width_px=T.canvas.manager.char_width_px;var ad=[];if((O==="Pack"||this.mode==="Auto")&&E!==undefined&&K>char_width_px){Q=Math.round(K/2)}if(!H){H=[[0,E.length]]}for(var L=0,W=H.length;L<W;L++){var I=H[L],A="MIDNSHP=X"[I[0]],M=I[1];if(A==="H"||A==="S"){N-=M}var F=S+N,ac=Math.floor(Math.max(0,(F-Y)*K)),G=Math.floor(Math.max(0,(F+M-Y)*K));if(ac===G){G+=1}switch(A){case"H":break;case"S":case"M":case"=":if(is_overlap([F,F+M],y)){var P=E.slice(U,U+M);if(Q>0){T.fillStyle=this.prefs.block_color;T.fillRect(ac-Q,D+1,G-ac,9);T.fillStyle=g;for(var aa=0,x=P.length;aa<x;aa++){if(this.prefs.show_differences&&ref_seq){var J=ref_seq[F-Y+aa];if(!J||J.toLowerCase()===P[aa].toLowerCase()){continue}}if(F+aa>=Y&&F+aa<=z){var ab=Math.floor(Math.max(0,(F+aa-Y)*K));T.fillText(P[aa],ab,D+9)}}}else{T.fillStyle=this.prefs.block_color;T.fillRect(ac,D+4,G-ac,e)}}U+=M;N+=M;break;case"N":T.fillStyle=g;T.fillRect(ac-Q,D+5,G-ac,1);N+=M;break;case"D":T.fillStyle="red";T.fillRect(ac-Q,D+4,G-ac,3);N+=M;break;case"P":break;case"I":var X=ac-Q;if(is_overlap([F,F+M],y)){var P=E.slice(U,U+M);if(this.prefs.show_insertions){var C=ac-(G-ac)/2;if((O==="Pack"||this.mode==="Auto")&&E!==undefined&&K>char_width_px){T.fillStyle="yellow";T.fillRect(C-Q,D-9,G-ac,9);ad[ad.length]={type:"triangle",data:[X,D+4,5]};T.fillStyle=g;switch(seq_tile_overlap){case (OVERLAP_START):P=P.slice(Y-F);break;case (OVERLAP_END):P=P.slice(0,F-z);break;case (CONTAINED_BY):break;case (CONTAINS):P=P.slice(Y-F,F-z);break}for(var aa=0,x=P.length;aa<x;aa++){var ab=Math.floor(Math.max(0,(F+aa-Y)*K));T.fillText(P[aa],ab-(G-ac)/2,D)}}else{T.fillStyle="yellow";T.fillRect(C,D+(this.mode!=="Dense"?2:5),G-ac,(O!=="Dense"?e:r))}}else{if((O==="Pack"||this.mode==="Auto")&&E!==undefined&&K>char_width_px){ad[ad.length]={type:"text",data:[P.length,X,D+9]}}else{}}}U+=M;break;case"X":U+=M;break}}T.fillStyle="yellow";var Z,B,ae;for(var V=0;V<ad.length;V++){Z=ad[V];B=Z.type;ae=Z.data;if(B==="text"){T.save();T.font="bold "+T.font;T.fillText(ae[0],ae[1],ae[2]);T.restore()}else{if(B=="triangle"){p(T,ae[0],ae[1],ae[2])}}}},draw_element:function(Q,L,D,A,T,y,H,R,O){var G=D[0],P=D[1],z=D[2],I=D[3],C=Math.floor(Math.max(0,(P-T)*H)),E=Math.ceil(Math.min(O,Math.max(0,(z-T)*H))),B=(L==="Dense"?0:(0+A))*R,U=this.prefs.block_color,F=this.prefs.label_color,N=0;if((L==="Pack"||this.mode==="Auto")&&H>Q.canvas.manager.char_width_px){var N=Math.round(H/2)}Q.fillStyle=U;if(D[5] instanceof Array){var M=Math.floor(Math.max(0,(D[4][0]-T)*H)),K=Math.ceil(Math.min(O,Math.max(0,(D[4][1]-T)*H))),J=Math.floor(Math.max(0,(D[5][0]-T)*H)),x=Math.ceil(Math.min(O,Math.max(0,(D[5][1]-T)*H)));if(D[4][1]>=T&&D[4][0]<=y&&D[4][2]){this.draw_read(Q,L,H,T,y,D[4][0],D[4][2],D[4][3],B)}if(D[5][1]>=T&&D[5][0]<=y&&D[5][2]){this.draw_read(Q,L,H,T,y,D[5][0],D[5][2],D[5][3],B)}if(J>K){Q.fillStyle=g;o(Q,K-N,B+5,J-N,B+5)}}else{Q.fillStyle=U;this.draw_read(Q,L,H,T,y,P,D[4],D[5],B)}if(L==="Pack"&&P>T){Q.fillStyle=this.prefs.label_color;var S=1;if(S===0&&C-Q.measureText(I).width<0){Q.textAlign="left";Q.fillText(I,E+k-N,B+8)}else{Q.textAlign="right";Q.fillText(I,C-k-N,B+8)}Q.fillStyle=U}}});w.SummaryTreePainter=u;w.LinePainter=c;w.LinkedFeaturePainter=q;w.ReadPainter=s;w.VariantPainter=b};(function(d){var c={};var b=function(e){return c[e]};var a=function(f,g){var e={};g(b,e);c[f]=e};a("class",class_module);a("slotting",slotting_module);a("painters",painters_module);a("trackster",trackster_module);for(key in c.trackster){d[key]=c.trackster[key]}})(window);
\ No newline at end of file
--- a/static/scripts/trackster.js Thu May 12 17:12:01 2011 -0400
+++ b/static/scripts/trackster.js Thu May 12 20:01:42 2011 -0400
@@ -1304,7 +1304,16 @@
}
};
-extend( FiltersManager.prototype, {
+extend(FiltersManager.prototype, {
+ /**
+ * Reset filters to min and max.
+ */
+ reset_filters: function() {
+ for (var i = 0; i < this.filters.length; i++) {
+ filter = this.filters[i];
+ filter.slider.slider("option", "values", [filter.min, filter.max]);
+ }
+ },
run_on_dataset: function() {
// Get or create dictionary item.
var get_or_create_dict_item = function(dict, key, new_item) {
@@ -1329,11 +1338,11 @@
// Add filtering conditions if filter low/high are set.
if (filter.min != filter.low) {
tool_filter_conditions = get_or_create_dict_item(active_filters, filter.tool_id, []);
- tool_filter_conditions[tool_filter_conditions.length] = filter.tool_exp_name + " >= " + filter.min;
+ tool_filter_conditions[tool_filter_conditions.length] = filter.tool_exp_name + " >= " + filter.low;
}
if (filter.max != filter.high) {
tool_filter_conditions = get_or_create_dict_item(active_filters, filter.tool_id, []);
- tool_filter_conditions[tool_filter_conditions.length] = filter.tool_exp_name + " <= " + filter.max;
+ tool_filter_conditions[tool_filter_conditions.length] = filter.tool_exp_name + " <= " + filter.high;
}
}
}
@@ -1766,8 +1775,11 @@
// Show/hide filters menu item.
var text = (track.filters_div.is(":visible") ? "Hide filters" : "Show filters");
track_dropdown[text] = function() {
- // Toggle filtering div and remake menu.
+ // Toggle filtering div, reset filters, and remake menu.
track.filters_visible = (track.filters_div.is(":visible"));
+ if (track.filters_visible) {
+ track.filters_manager.reset_filters();
+ }
track.filters_div.toggle();
track.make_name_popup_menu();
};
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0

commit/galaxy-central: jgoecks: Trackster: enable dynamic filters to be run on complete dataset using filter tools.
by Bitbucket 12 May '11
by Bitbucket 12 May '11
12 May '11
1 new changeset in galaxy-central:
http://bitbucket.org/galaxy/galaxy-central/changeset/664a6c447421/
changeset: r5550:664a6c447421
user: jgoecks
date: 2011-05-12 23:12:01
summary: Trackster: enable dynamic filters to be run on complete dataset using filter tools.
affected #: 7 files (7.2 KB)
--- a/lib/galaxy/tools/__init__.py Thu May 12 13:38:00 2011 -0400
+++ b/lib/galaxy/tools/__init__.py Thu May 12 17:12:01 2011 -0400
@@ -917,7 +917,7 @@
else:
input.visit_inputs( "", value[input.name], callback )
- def handle_input( self, trans, incoming ):
+ def handle_input( self, trans, incoming, history=None ):
"""
Process incoming parameters for this tool from the dict `incoming`,
update the tool state (or create if none existed), and either return
@@ -966,7 +966,7 @@
return "tool_form.mako", dict( errors=errors, tool_state=state, incoming=incoming, error_message=error_message )
# If we've completed the last page we can execute the tool
elif state.page == self.last_page:
- _, out_data = self.execute( trans, incoming=params )
+ _, out_data = self.execute( trans, incoming=params, history=history )
try:
assert isinstance( out_data, odict )
return 'tool_executed.mako', dict( out_data=out_data )
--- a/lib/galaxy/visualization/tracks/data_providers.py Thu May 12 13:38:00 2011 -0400
+++ b/lib/galaxy/visualization/tracks/data_providers.py Thu May 12 17:12:01 2011 -0400
@@ -395,13 +395,22 @@
filter_col = 8
if isinstance( self.original_dataset.datatype, Gff ):
# Can filter by score and GTF attributes.
- filters = [ { 'name': 'Score', 'type': 'int', 'index': filter_col } ]
+ filters = [ { 'name': 'Score',
+ 'type': 'int',
+ 'index': filter_col,
+ 'tool_id': 'Filter1',
+ 'tool_exp_name': 'c5' } ]
filter_col += 1
if isinstance( self.original_dataset.datatype, Gtf ):
# Create filters based on dataset metadata.
for name, a_type in self.original_dataset.metadata.attribute_types.items():
if a_type in [ 'int', 'float' ]:
- filters.append( { 'name': name, 'type': a_type, 'index': filter_col } )
+ filters.append(
+ { 'name': name,
+ 'type': a_type,
+ 'index': filter_col,
+ 'tool_id': 'gff_filter_by_attribute',
+ 'tool_exp_name': name } )
filter_col += 1
'''
@@ -426,7 +435,12 @@
'''
elif isinstance( self.original_dataset.datatype, Bed ):
# Can filter by score column only.
- filters = [ { 'name': 'Score', 'type': 'int', 'index': filter_col } ]
+ filters = [ { 'name': 'Score',
+ 'type': 'int',
+ 'index': filter_col,
+ 'tool_id': 'Filter1',
+ 'tool_exp_name': 'c5'
+ } ]
return filters
--- a/lib/galaxy/web/controllers/tracks.py Thu May 12 13:38:00 2011 -0400
+++ b/lib/galaxy/web/controllers/tracks.py Thu May 12 17:12:01 2011 -0400
@@ -26,7 +26,8 @@
NO_CONVERTER = "no converter",
NO_TOOL = "no tool",
DATA = "data",
- ERROR = "error"
+ ERROR = "error",
+ OK = "ok"
)
class NameColumn( grids.TextColumn ):
@@ -643,13 +644,60 @@
@web.expose
def list_tracks( self, trans, **kwargs ):
return self.tracks_grid( trans, **kwargs )
+
+ @web.expose
+ def run_tool( self, trans, tool_id, target_dataset_id, **kwargs ):
+ """
+ Run a tool. This method serves as a general purpose way to run tools asynchronously.
+ """
+
+ #
+ # Set target history (the history that tool will use for outputs) using
+ # target dataset. If user owns dataset, put new data in original
+ # dataset's history; if user does not own dataset (and hence is accessing
+ # dataset via sharing), put new data in user's current history.
+ #
+ target_dataset = self.get_dataset( trans, target_dataset_id, check_ownership=False, check_accessible=True )
+ if target_dataset.history.user == trans.user:
+ target_history = target_dataset.history
+ else:
+ target_history = trans.get_history( create=True )
+
+ # HACK: tools require unencoded parameters but kwargs are typically
+ # encoded, so try decoding all parameter values.
+ for key, value in kwargs.items():
+ try:
+ value = trans.security.decode_id( value )
+ kwargs[ key ] = value
+ except:
+ pass
+
+ #
+ # Execute tool.
+ #
+ tool = trans.app.toolbox.tools_by_id.get( tool_id, None )
+ if not tool:
+ return messages.NO_TOOL
+
+ # HACK: add run button so that tool.handle_input will run tool.
+ kwargs['runtool_btn'] = 'Execute'
+ params = util.Params( kwargs, sanitize = False )
+ print target_history.name
+ template, vars = tool.handle_input( trans, params.__dict__, history=target_history )
+
+ # TODO: parse output and send response.
+ return messages.OK
@web.expose
- def run_tool( self, trans, dataset_id, tool_id, chrom=None, low=None, high=None, **kwargs ):
- """
- Run a tool on a subset of input data to produce a new output dataset that
- corresponds to a dataset that a user is currently viewing.
+ def rerun_tool( self, trans, dataset_id, tool_id, chrom=None, low=None, high=None, **kwargs ):
"""
+ Rerun a tool to produce a new output dataset that corresponds to a
+ dataset that a user is currently viewing.
+ """
+
+ #
+ # TODO: refactor to use same code as run_tool.
+ #
# Run tool on region if region is specificied.
run_on_region = False
--- a/static/scripts/packed/trackster.js Thu May 12 13:38:00 2011 -0400
+++ b/static/scripts/packed/trackster.js Thu May 12 17:12:01 2011 -0400
@@ -1,1 +1,1 @@
-var class_module=function(b,a){var c=function(){var f=arguments[0];for(var e=1;e<arguments.length;e++){var d=arguments[e];for(key in d){f[key]=d[key]}}return f};a.extend=c};var BEFORE=1001,CONTAINS=1002,OVERLAP_START=1003,OVERLAP_END=1004,CONTAINED_BY=1005,AFTER=1006;var compute_overlap=function(e,b){var g=e[0],f=e[1],d=b[0],c=b[1],a;if(g<d){if(f<d){a=BEFORE}else{if(f<=c){a=OVERLAP_START}else{a=CONTAINS}}}else{if(g>c){a=AFTER}else{if(f<=c){a=CONTAINED_BY}else{a=OVERLAP_END}}}return a};var is_overlap=function(c,b){var a=compute_overlap(c,b);return(a!==BEFORE&&a!==AFTER)};var trackster_module=function(f,S){var n=f("class").extend,p=f("slotting"),H=f("painters");var Y=function(Z,aa){this.document=Z;this.default_font=aa!==undefined?aa:"9px Monaco, Lucida Console, monospace";this.dummy_canvas=this.new_canvas();this.dummy_context=this.dummy_canvas.getContext("2d");this.dummy_context.font=this.default_font;this.char_width_px=this.dummy_context.measureText("A").width;this.patterns={};this.load_pattern("right_strand","/visualization/strand_right.png");this.load_pattern("left_strand","/visualization/strand_left.png");this.load_pattern("right_strand_inv","/visualization/strand_right_inv.png");this.load_pattern("left_strand_inv","/visualization/strand_left_inv.png")};n(Y.prototype,{load_pattern:function(Z,ad){var aa=this.patterns,ab=this.dummy_context,ac=new Image();ac.src=image_path+ad;ac.onload=function(){aa[Z]=ab.createPattern(ac,"repeat")}},get_pattern:function(Z){return this.patterns[Z]},new_canvas:function(){var Z=this.document.createElement("canvas");if(window.G_vmlCanvasManager){G_vmlCanvasManager.initElement(Z)}Z.manager=this;return Z}});var B=function(Z,aa){Z.bind("drag",{handle:aa,relative:true},function(ae,af){var ad=$(this).parent();var ac=ad.children();var ab;for(ab=0;ab<ac.length;ab++){if(af.offsetY<$(ac.get(ab)).position().top){break}}if(ab===ac.length){if(this!==ac.get(ab-1)){ad.append(this)}}else{if(this!==ac.get(ab)){$(this).insertBefore(ac.get(ab))}}})};S.sortable=B;var C=9,z=10,N=C+2,w=100,E=12000,L=200,s=10,G=5000,t=100,m="There was an error in indexing this dataset. ",F="A converter for this dataset is not installed. Please check your datatypes_conf.xml file.",A="No data for this chrom/contig.",q="Currently indexing... please wait",v="Tool cannot be rerun: ",a="Loading data...",T="Ready for display",d=10,r=5,y=5;function u(Z){return Math.round(Z*1000)/1000}var c=function(Z){this.num_elements=Z;this.clear()};n(c.prototype,{get:function(aa){var Z=this.key_ary.indexOf(aa);if(Z!==-1){this.move_key_to_end(aa,Z)}return this.obj_cache[aa]},set:function(aa,ab){if(!this.obj_cache[aa]){if(this.key_ary.length>=this.num_elements){var Z=this.key_ary.shift();delete this.obj_cache[Z]}this.key_ary.push(aa)}this.obj_cache[aa]=ab;return ab},move_key_to_end:function(aa,Z){this.key_ary.splice(Z,1);this.key_ary.push(aa)},clear:function(){this.obj_cache={};this.key_ary=[]},size:function(){return this.key_ary.length}});var M=function(aa,Z,ab){c.call(this,aa);this.track=Z;this.subset=(ab!==undefined?ab:true)};n(M.prototype,c.prototype,{load_data:function(ah,ai,ad,ag,aa,af){var ac={chrom:ah,low:ai,high:ad,mode:ag,resolution:aa,dataset_id:this.track.dataset_id,hda_ldda:this.track.hda_ldda};$.extend(ac,af);if(this.track.filters_manager){var aj=[];var Z=this.track.filters_manager.filters;for(var ae=0;ae<Z.length;ae++){aj[aj.length]=Z[ae].name}ac.filter_cols=JSON.stringify(aj)}var ab=this;return $.getJSON(this.track.data_url,ac,function(ak){ab.set_data(ai,ad,ag,ak)})},get_data:function(ab,Z,ae,af,aa,ad){var ac=this.get(this.gen_key(Z,ae,af));if(ac){return ac}ac=this.load_data(ab,Z,ae,af,aa,ad);this.set_data(Z,ae,af,ac);return ac},set_data:function(aa,ab,ac,Z){return this.set(this.gen_key(aa,ab,ac),Z)},gen_key:function(Z,ab,ac){var aa=Z+"_"+ab+"_"+ac;return aa},split_key:function(Z){return Z.split("_")}});var D=function(aa,Z,ab){M.call(this,aa,Z,ab)};n(D.prototype,M.prototype,c.prototype,{load_data:function(ab,Z,ad,ae,aa,ac){if(aa>1){return}return M.prototype.load_data.call(this,ab,Z,ad,ae,aa,ac)}});var X=function(Z,ac,ab,aa,ad){this.container=Z;this.chrom=null;this.vis_id=ab;this.dbkey=aa;this.title=ac;this.tracks=[];this.label_tracks=[];this.max_low=0;this.max_high=0;this.num_tracks=0;this.track_id_counter=0;this.zoom_factor=3;this.min_separation=30;this.has_changes=false;this.init(ad);this.canvas_manager=new Y(Z.get(0).ownerDocument);this.reset()};n(X.prototype,{init:function(ac){var ab=this.container,Z=this;this.top_container=$("<div/>").addClass("top-container").appendTo(ab);this.content_div=$("<div/>").addClass("content").css("position","relative").appendTo(ab);this.bottom_container=$("<div/>").addClass("bottom-container").appendTo(ab);this.top_labeltrack=$("<div/>").addClass("top-labeltrack").appendTo(this.top_container);this.viewport_container=$("<div/>").addClass("viewport-container").addClass("viewport-container").appendTo(this.content_div);this.intro_div=$("<div/>").addClass("intro").text("Select a chrom from the dropdown below").hide();this.nav_labeltrack=$("<div/>").addClass("nav-labeltrack").appendTo(this.bottom_container);this.nav_container=$("<div/>").addClass("nav-container").prependTo(this.top_container);this.nav=$("<div/>").addClass("nav").appendTo(this.nav_container);this.overview=$("<div/>").addClass("overview").appendTo(this.bottom_container);this.overview_viewport=$("<div/>").addClass("overview-viewport").appendTo(this.overview);this.overview_close=$("<a href='javascript:void(0);'>Close Overview</a>").addClass("overview-close").hide().appendTo(this.overview_viewport);this.overview_highlight=$("<div/>").addClass("overview-highlight").hide().appendTo(this.overview_viewport);this.overview_box_background=$("<div/>").addClass("overview-boxback").appendTo(this.overview_viewport);this.overview_box=$("<div/>").addClass("overview-box").appendTo(this.overview_viewport);this.default_overview_height=this.overview_box.height();this.nav_controls=$("<div/>").addClass("nav-controls").appendTo(this.nav);this.chrom_select=$("<select/>").attr({name:"chrom"}).css("width","15em").addClass("no-autocomplete").append("<option value=''>Loading</option>").appendTo(this.nav_controls);var aa=function(ad){if(ad.type==="focusout"||(ad.keyCode||ad.which)===13||(ad.keyCode||ad.which)===27){if((ad.keyCode||ad.which)!==27){Z.go_to($(this).val())}$(this).hide();$(this).val("");Z.location_span.show();Z.chrom_select.show()}};this.nav_input=$("<input/>").addClass("nav-input").hide().bind("keyup focusout",aa).appendTo(this.nav_controls);this.location_span=$("<span/>").addClass("location").appendTo(this.nav_controls);this.location_span.bind("click",function(){Z.location_span.hide();Z.chrom_select.hide();Z.nav_input.val(Z.chrom+":"+Z.low+"-"+Z.high);Z.nav_input.css("display","inline-block");Z.nav_input.select();Z.nav_input.focus()});if(this.vis_id!==undefined){this.hidden_input=$("<input/>").attr("type","hidden").val(this.vis_id).appendTo(this.nav_controls)}this.zo_link=$("<a id='zoom-out' />").click(function(){Z.zoom_out();Z.redraw()}).appendTo(this.nav_controls);this.zi_link=$("<a id='zoom-in' />").click(function(){Z.zoom_in();Z.redraw()}).appendTo(this.nav_controls);this.load_chroms({low:0},ac);this.chrom_select.bind("change",function(){Z.change_chrom(Z.chrom_select.val())});this.intro_div.show();this.content_div.bind("click",function(ad){$(this).find("input").trigger("blur")});this.content_div.bind("dblclick",function(ad){Z.zoom_in(ad.pageX,this.viewport_container)});this.overview_box.bind("dragstart",function(ad,ae){this.current_x=ae.offsetX}).bind("drag",function(ad,af){var ag=af.offsetX-this.current_x;this.current_x=af.offsetX;var ae=Math.round(ag/Z.viewport_container.width()*(Z.max_high-Z.max_low));Z.move_delta(-ae)});this.overview_close.bind("click",function(){for(var ae=0,ad=Z.tracks.length;ae<ad;ae++){Z.tracks[ae].is_overview=false}$(this).siblings().filter("canvas").remove();$(this).parent().css("height",Z.overview_box.height());Z.overview_highlight.hide();$(this).hide()});this.viewport_container.bind("draginit",function(ad,ae){if(ad.clientX>Z.viewport_container.width()-16){return false}}).bind("dragstart",function(ad,ae){ae.original_low=Z.low;ae.current_height=ad.clientY;ae.current_x=ae.offsetX}).bind("drag",function(af,ah){var ad=$(this);var ai=ah.offsetX-ah.current_x;var ae=ad.scrollTop()-(af.clientY-ah.current_height);ad.scrollTop(ae);ah.current_height=af.clientY;ah.current_x=ah.offsetX;var ag=Math.round(ai/Z.viewport_container.width()*(Z.high-Z.low));Z.move_delta(ag)}).bind("mousewheel",function(af,ah,ae,ad){if(ae){var ag=Math.round(-ae/Z.viewport_container.width()*(Z.high-Z.low));Z.move_delta(ag)}});this.top_labeltrack.bind("dragstart",function(ad,ae){return $("<div />").css({height:Z.content_div.height()+Z.top_labeltrack.height()+Z.nav_labeltrack.height()+1,top:"0px",position:"absolute","background-color":"#ccf",opacity:0.5,"z-index":1000}).appendTo($(this))}).bind("drag",function(ah,ai){$(ai.proxy).css({left:Math.min(ah.pageX,ai.startX),width:Math.abs(ah.pageX-ai.startX)});var ae=Math.min(ah.pageX,ai.startX)-Z.container.offset().left,ad=Math.max(ah.pageX,ai.startX)-Z.container.offset().left,ag=(Z.high-Z.low),af=Z.viewport_container.width();Z.update_location(Math.round(ae/af*ag)+Z.low,Math.round(ad/af*ag)+Z.low)}).bind("dragend",function(ai,aj){var ae=Math.min(ai.pageX,aj.startX),ad=Math.max(ai.pageX,aj.startX),ag=(Z.high-Z.low),af=Z.viewport_container.width(),ah=Z.low;Z.low=Math.round(ae/af*ag)+ah;Z.high=Math.round(ad/af*ag)+ah;$(aj.proxy).remove();Z.redraw()});this.add_label_track(new W(this,this.top_labeltrack));this.add_label_track(new W(this,this.nav_labeltrack));$(window).bind("resize",function(){Z.resize_window()});$(document).bind("redraw",function(){Z.redraw()});this.reset();$(window).trigger("resize")},update_location:function(Z,aa){this.location_span.text(commatize(Z)+" - "+commatize(aa));this.nav_input.val(this.chrom+":"+commatize(Z)+"-"+commatize(aa))},load_chroms:function(aa,ab){aa.num=t;$.extend(aa,(this.vis_id!==undefined?{vis_id:this.vis_id}:{dbkey:this.dbkey}));var Z=this;$.ajax({url:chrom_url,data:aa,dataType:"json",success:function(ad){if(ad.chrom_info.length===0){alert("Invalid chromosome: "+aa.chrom);return}if(ad.reference){Z.add_label_track(new x(Z))}Z.chrom_data=ad.chrom_info;var ag='<option value="">Select Chrom/Contig</option>';for(var af=0,ac=Z.chrom_data.length;af<ac;af++){var ae=Z.chrom_data[af].chrom;ag+='<option value="'+ae+'">'+ae+"</option>"}if(ad.prev_chroms){ag+='<option value="previous">Previous '+t+"</option>"}if(ad.next_chroms){ag+='<option value="next">Next '+t+"</option>"}Z.chrom_select.html(ag);if(ab){ab()}Z.chrom_start_index=ad.start_index},error:function(){alert("Could not load chroms for this dbkey:",Z.dbkey)}})},change_chrom:function(ad,aa,af){if(!ad||ad==="None"){return}var ac=this;if(ad==="previous"){ac.load_chroms({low:this.chrom_start_index-t});return}if(ad==="next"){ac.load_chroms({low:this.chrom_start_index+t});return}var ae=$.grep(ac.chrom_data,function(ah,ai){return ah.chrom===ad})[0];if(ae===undefined){ac.load_chroms({chrom:ad},function(){ac.change_chrom(ad,aa,af)});return}else{if(ad!==ac.chrom){ac.chrom=ad;if(!ac.chrom){ac.intro_div.show()}else{ac.intro_div.hide()}ac.chrom_select.val(ac.chrom);ac.max_high=ae.len-1;ac.reset();ac.redraw(true);for(var ag=0,Z=ac.tracks.length;ag<Z;ag++){var ab=ac.tracks[ag];if(ab.init){ab.init()}}}if(aa!==undefined&&af!==undefined){ac.low=Math.max(aa,0);ac.high=Math.min(af,ac.max_high)}ac.reset_overview();ac.redraw()}},go_to:function(ad){var ah=this,Z,ac,aa=ad.split(":"),af=aa[0],ag=aa[1];if(ag!==undefined){try{var ae=ag.split("-");Z=parseInt(ae[0].replace(/,/g,""),10);ac=parseInt(ae[1].replace(/,/g,""),10)}catch(ab){return false}}ah.change_chrom(af,Z,ac)},move_fraction:function(ab){var Z=this;var aa=Z.high-Z.low;this.move_delta(ab*aa)},move_delta:function(ab){var Z=this;var aa=Z.high-Z.low;if(Z.low-ab<Z.max_low){Z.low=Z.max_low;Z.high=Z.max_low+aa}else{if(Z.high-ab>Z.max_high){Z.high=Z.max_high;Z.low=Z.max_high-aa}else{Z.high-=ab;Z.low-=ab}}Z.redraw()},add_track:function(Z){Z.view=this;Z.track_id=this.track_id_counter;this.tracks.push(Z);if(Z.init){Z.init()}Z.container_div.attr("id","track_"+Z.track_id);B(Z.container_div,".draghandle");this.track_id_counter+=1;this.num_tracks+=1},add_label_track:function(Z){Z.view=this;this.label_tracks.push(Z)},remove_track:function(Z){this.has_changes=true;Z.container_div.fadeOut("slow",function(){$(this).remove()});delete this.tracks[this.tracks.indexOf(Z)];this.num_tracks-=1},reset:function(){this.low=this.max_low;this.high=this.max_high;this.viewport_container.find(".yaxislabel").remove()},redraw:function(ag){var af=this.high-this.low,ae=this.low,aa=this.high;if(ae<this.max_low){ae=this.max_low}if(aa>this.max_high){aa=this.max_high}if(this.high!==0&&af<this.min_separation){aa=ae+this.min_separation}this.low=Math.floor(ae);this.high=Math.ceil(aa);this.resolution=Math.pow(10,Math.ceil(Math.log((this.high-this.low)/L)/Math.LN10));this.zoom_res=Math.pow(s,Math.max(0,Math.ceil(Math.log(this.resolution,s)/Math.log(s))));var Z=(this.low/(this.max_high-this.max_low)*this.overview_viewport.width())||0;var ad=((this.high-this.low)/(this.max_high-this.max_low)*this.overview_viewport.width())||0;var ah=13;this.overview_box.css({left:Z,width:Math.max(ah,ad)}).show();if(ad<ah){this.overview_box.css("left",Z-(ah-ad)/2)}if(this.overview_highlight){this.overview_highlight.css({left:Z,width:ad})}this.update_location(this.low,this.high);if(!ag){for(var ab=0,ac=this.tracks.length;ab<ac;ab++){if(this.tracks[ab]&&this.tracks[ab].enabled){this.tracks[ab].draw()}}for(ab=0,ac=this.label_tracks.length;ab<ac;ab++){this.label_tracks[ab].draw()}}},zoom_in:function(aa,ab){if(this.max_high===0||this.high-this.low<this.min_separation){return}var ac=this.high-this.low,ad=ac/2+this.low,Z=(ac/this.zoom_factor)/2;if(aa){ad=aa/this.viewport_container.width()*(this.high-this.low)+this.low}this.low=Math.round(ad-Z);this.high=Math.round(ad+Z);this.redraw()},zoom_out:function(){if(this.max_high===0){return}var aa=this.high-this.low,ab=aa/2+this.low,Z=(aa*this.zoom_factor)/2;this.low=Math.round(ab-Z);this.high=Math.round(ab+Z);this.redraw()},resize_window:function(){this.viewport_container.height(this.container.height()-this.top_container.height()-this.bottom_container.height());this.nav_container.width(this.container.width());this.redraw()},reset_overview:function(){this.overview_viewport.find("canvas").remove();this.overview_viewport.height(this.default_overview_height);this.overview_box.height(this.default_overview_height);this.overview_close.hide();this.overview_highlight.hide()}});var o=function(ab,af){this.track=ab;this.name=af.name;this.params=[];var am=af.params;for(var ac=0;ac<am.length;ac++){var ah=am[ac],aa=ah.name,al=ah.label,ad=unescape(ah.html),an=ah.value,aj=ah.type;if(aj==="number"){this.params[this.params.length]=new g(aa,al,ad,an,ah.min,ah.max)}else{if(aj=="select"){this.params[this.params.length]=new J(aa,al,ad,an)}else{console.log("WARNING: unrecognized tool parameter type:",aa,aj)}}}this.parent_div=$("<div/>").addClass("dynamic-tool").hide();this.parent_div.bind("drag",function(ap){ap.stopPropagation()}).bind("click",function(ap){ap.stopPropagation()}).bind("dblclick",function(ap){ap.stopPropagation()});var ak=$("<div class='tool-name'>").appendTo(this.parent_div).text(this.name);var ai=this.params;var ag=this;$.each(this.params,function(aq,au){var at=$("<div>").addClass("param-row").appendTo(ag.parent_div);var ap=$("<div>").addClass("param-label").text(au.label).appendTo(at);var ar=$("<div/>").addClass("slider").html(au.html).appendTo(at);ar.find(":input").val(au.value);$("<div style='clear: both;'/>").appendTo(at)});this.parent_div.find("input").click(function(){$(this).select()});var ao=$("<div>").addClass("param-row").appendTo(this.parent_div);var ae=$("<input type='submit'>").attr("value","Run on complete dataset").appendTo(ao);var Z=$("<input type='submit'>").attr("value","Run on visible region").css("margin-left","3em").appendTo(ao);var ag=this;Z.click(function(){ag.run_on_region()});ae.click(function(){ag.run_on_dataset()})};n(o.prototype,{get_param_values_dict:function(){var Z={};this.parent_div.find(":input").each(function(){var aa=$(this).attr("name"),ab=$(this).val();Z[aa]=JSON.stringify(ab)});return Z},get_param_values:function(){var aa=[];var Z={};this.parent_div.find(":input").each(function(){var ab=$(this).attr("name"),ac=$(this).val();if(ab){aa[aa.length]=ac}});return aa},run_on_dataset:function(){var Z=this;Z.run({dataset_id:this.track.original_dataset_id,tool_id:Z.name},function(aa){show_modal(Z.name+" is Running",Z.name+" is running on the complete dataset. Tool outputs are in dataset's history.",{Close:hide_modal})})},run_on_region:function(){var Z={dataset_id:this.track.original_dataset_id,chrom:this.track.view.chrom,low:this.track.view.low,high:this.track.view.high,tool_id:this.name},ab=this.track,aa=Z.tool_id+ab.tool_region_and_parameters_str(Z.chrom,Z.low,Z.high),ac;if(ab.track_type==="FeatureTrack"){ac=new P(aa,view,ab.hda_ldda,undefined,{},{},ab)}this.track.add_track(ac);ac.content_div.text("Starting job.");this.run(Z,function(ad){ac.dataset_id=ad.dataset_id;ac.content_div.text("Running job.");ac.init()})},run:function(aa,ab){$.extend(aa,this.get_param_values_dict());var Z=function(){$.getJSON(run_tool_url,aa,function(ac){if(ac==="no converter"){new_track.container_div.addClass("error");new_track.content_div.text(F)}else{if(ac.error){new_track.container_div.addClass("error");new_track.content_div.text(v+ac.message)}else{if(ac==="pending"){new_track.container_div.addClass("pending");new_track.content_div.text("Converting input data so that it can be easily reused.");setTimeout(Z,2000)}else{ab(ac)}}}})};Z()}});var J=function(aa,Z,ab,ac){this.name=aa;this.label=Z;this.html=ab;this.value=ac};var g=function(ab,aa,ad,ae,ac,Z){J.call(this,ab,aa,ad,ae);this.min=ac;this.max=Z};var h=function(aa,Z,ab){this.name=aa;this.index=Z;this.value=ab};var Q=function(aa,Z){this.name=aa;this.index=Z;this.low=-Number.MAX_VALUE;this.high=Number.MAX_VALUE;this.min=Number.MAX_VALUE;this.max=-Number.MAX_VALUE;this.slider=null;this.slider_label=null};n(Q.prototype,{applies_to:function(Z){if(Z.length>this.index){return true}return false},keep:function(Z){if(!this.applies_to(Z)){return true}var aa=parseInt(Z[this.index]);return(isNaN(aa)||(aa>=this.low&&aa<=this.high))},update_attrs:function(aa){var Z=false;if(!this.applies_to(aa)){return Z}if(aa[this.index]<this.min){this.min=Math.floor(aa[this.index]);Z=true}if(aa[this.index]>this.max){this.max=Math.ceil(aa[this.index]);Z=true}return Z},update_ui_elt:function(){var ab=function(ae,ac){var ad=ac-ae;return(ad<=2?0.01:1)};var aa=this.slider.slider("option","min"),Z=this.slider.slider("option","max");if(this.min<aa||this.max>Z){this.slider.slider("option","min",this.min);this.slider.slider("option","max",this.max);this.slider.slider("option","step",ab(this.min,this.max));this.slider.slider("option","values",[this.min,this.max])}}});var V=function(ab,ah){this.track=ab;this.filters=[];for(var ad=0;ad<ah.length;ad++){var Z=ah[ad];var aa=Z.name,ag=Z.type,ae=Z.index;if(ag==="int"||ag==="float"){this.filters[ad]=new Q(aa,ae)}else{this.filters[ad]=new h(aa,ae,ag)}}var af=function(ai,aj,ak){ai.click(function(){var al=aj.text();max=parseFloat(ak.slider("option","max")),input_size=(max<=1?4:max<=1000000?max.toString().length:6),multi_value=false;if(ak.slider("option","values")){input_size=2*input_size+1;multi_value=true}aj.text("");$("<input type='text'/>").attr("size",input_size).attr("maxlength",input_size).attr("value",al).appendTo(aj).focus().select().click(function(am){am.stopPropagation()}).blur(function(){$(this).remove();aj.text(al)}).keyup(function(aq){if(aq.keyCode===27){$(this).trigger("blur")}else{if(aq.keyCode===13){var ao=ak.slider("option","min"),am=ak.slider("option","max"),ap=function(ar){return(isNaN(ar)||ar>am||ar<ao)},an=$(this).val();if(!multi_value){an=parseFloat(an);if(ap(an)){alert("Parameter value must be in the range ["+ao+"-"+am+"]");return $(this)}}else{an=an.split("-");an=[parseFloat(an[0]),parseFloat(an[1])];if(ap(an[0])||ap(an[1])){alert("Parameter value must be in the range ["+ao+"-"+am+"]");return $(this)}}ak.slider((multi_value?"values":"value"),an)}}})})};this.parent_div=$("<div/>").addClass("filters").hide();this.parent_div.bind("drag",function(ai){ai.stopPropagation()}).bind("click",function(ai){ai.stopPropagation()}).bind("dblclick",function(ai){ai.stopPropagation()}).bind("keydown",function(ai){ai.stopPropagation()});var ac=this;$.each(this.filters,function(ao,aj){var al=$("<div/>").addClass("slider-row").appendTo(ac.parent_div);var ai=$("<div/>").addClass("slider-label").appendTo(al);var aq=$("<span/>").addClass("slider-name").text(aj.name+" ").appendTo(ai);var ak=$("<span/>");var am=$("<span/>").addClass("slider-value").appendTo(ai).append("[").append(ak).append("]");var ap=$("<div/>").addClass("slider").appendTo(al);aj.control_element=$("<div/>").attr("id",aj.name+"-filter-control").appendTo(ap);var an=[0,0];aj.control_element.slider({range:true,min:Number.MAX_VALUE,max:-Number.MIN_VALUE,values:[0,0],slide:function(ar,at){an=at.values;ak.text(at.values[0]+"-"+at.values[1]);setTimeout(function(){if(at.values[0]==an[0]&&at.values[1]==an[1]){var au=at.values;ak.text(au[0]+"-"+au[1]);aj.low=au[0];aj.high=au[1];ac.track.draw(true,true)}},50)},change:function(ar,at){aj.control_element.slider("option","slide").call(aj.control_element,ar,at)}});aj.slider=aj.control_element;aj.slider_label=ak;af(am,ak,aj.control_element);$("<div style='clear: both;'/>").appendTo(al)})};var U=function(Z){this.track=Z.track;this.params=Z.params;this.values={};if(Z.saved_values){this.restore_values(Z.saved_values)}this.onchange=Z.onchange};n(U.prototype,{restore_values:function(Z){var aa=this;$.each(this.params,function(ab,ac){if(Z[ac.key]!==undefined){aa.values[ac.key]=Z[ac.key]}else{aa.values[ac.key]=ac.default_value}})},build_form:function(){var aa=this;var Z=$("<div />");$.each(this.params,function(ae,ac){if(!ac.hidden){var ab="param_"+ae;var aj=$("<div class='form-row' />").appendTo(Z);aj.append($("<label />").attr("for",ab).text(ac.label+":"));if(ac.type==="bool"){aj.append($('<input type="checkbox" />').attr("id",ab).attr("name",ab).attr("checked",aa.values[ac.key]))}else{if(ac.type==="color"){var ag=aa.values[ac.key];var af=$("<input />").attr("id",ab).attr("name",ab).val(ag);var ah=$("<div class='tipsy tipsy-north' style='position: absolute;' />").hide();var ad=$("<div style='background-color: black; padding: 10px;'></div>").appendTo(ah);var ai=$("<div/>").appendTo(ad).farbtastic({width:100,height:100,callback:af,color:ag});$("<div />").append(af).append(ah).appendTo(aj).bind("click",function(ak){ah.css({left:$(this).position().left+($(af).width()/2)-60,top:$(this).position().top+$(this.height)}).show();$(document).bind("click.color-picker",function(){ah.hide();$(document).unbind("click.color-picker")});ak.stopPropagation()})}else{aj.append($("<input />").attr("id",ab).attr("name",ab).val(aa.values[ac.key]))}}}});return Z},update_from_form:function(Z){var ab=this;var aa=false;$.each(this.params,function(ac,ae){if(!ae.hidden){var af="param_"+ac;var ad=Z.find("#"+af).val();if(ae.type==="float"){ad=parseFloat(ad)}else{if(ae.type==="int"){ad=parseInt(ad)}else{if(ae.type==="bool"){ad=Z.find("#"+af).is(":checked")}}}if(ad!==ab.values[ae.key]){ab.values[ae.key]=ad;aa=true}}});if(aa){this.onchange()}}});var b=function(ab,aa,Z){this.index=ab;this.resolution=aa;this.canvas=$("<div class='track-tile'/>").append(Z)};var l=function(ab,aa,Z,ac){b.call(this,ab,aa,Z);this.max_val=ac};var K=function(ab,aa,Z){b.call(this,ab,aa,Z)};var j=function(aa,Z,ad,ab,ac){this.name=aa;this.view=Z;this.parent_element=ad;this.data_url=(ab?ab:default_data_url);this.data_url_extra_params={};this.data_query_wait=(ac?ac:G);this.dataset_check_url=converted_datasets_state_url;this.container_div=$("<div />").addClass("track").css("position","relative");if(!this.hidden){this.header_div=$("<div class='track-header' />").appendTo(this.container_div);if(this.view.editor){this.drag_div=$("<div class='draghandle' />").appendTo(this.header_div)}this.name_div=$("<div class='menubutton popup' />").appendTo(this.header_div);this.name_div.text(this.name);this.name_div.attr("id",this.name.replace(/\s+/g,"-").replace(/[^a-zA-Z0-9\-]/g,"").toLowerCase())}this.content_div=$("<div class='track-content'>").appendTo(this.container_div);this.parent_element.append(this.container_div)};n(j.prototype,{init:function(){var Z=this;Z.enabled=false;Z.tile_cache.clear();Z.data_cache.clear();Z.initial_canvas=undefined;Z.content_div.css("height","auto");Z.container_div.removeClass("nodata error pending");if(!Z.dataset_id){return}$.getJSON(converted_datasets_state_url,{hda_ldda:Z.hda_ldda,dataset_id:Z.dataset_id,chrom:Z.view.chrom},function(aa){if(!aa||aa==="error"||aa.kind==="error"){Z.container_div.addClass("error");Z.content_div.text(m);if(aa.message){var ac=Z.view.tracks.indexOf(Z);var ab=$(" <a href='javascript:void(0);'></a>").text("View error").bind("click",function(){show_modal("Trackster Error","<pre>"+aa.message+"</pre>",{Close:hide_modal})});Z.content_div.append(ab)}}else{if(aa==="no converter"){Z.container_div.addClass("error");Z.content_div.text(F)}else{if(aa==="no data"||(aa.data!==undefined&&(aa.data===null||aa.data.length===0))){Z.container_div.addClass("nodata");Z.content_div.text(A)}else{if(aa==="pending"){Z.container_div.addClass("pending");Z.content_div.text(q);setTimeout(function(){Z.init()},Z.data_query_wait)}else{if(aa.status==="data"){if(aa.valid_chroms){Z.valid_chroms=aa.valid_chroms;Z.make_name_popup_menu()}Z.content_div.text(T);if(Z.view.chrom){Z.content_div.text("");Z.content_div.css("height",Z.height_px+"px");Z.enabled=true;$.when(Z.predraw_init()).done(function(){Z.container_div.removeClass("nodata error pending");Z.draw()})}}}}}}})},predraw_init:function(){},update_name:function(Z){this.old_name=this.name;this.name=Z;this.name_div.text(this.name)},revert_name:function(){this.name=this.old_name;this.name_div.text(this.name)}});var I=function(ah,af,ai){var aa=this,aj=aa.view;this.filters_manager=(ah!==undefined?new V(this,ah):undefined);this.filters_available=false;this.filters_visible=false;this.tool=(af!==undefined&&obj_length(af)>0?new o(this,af):undefined);this.parent_track=ai;this.child_tracks=[];if(aa.hidden){return}if(this.parent_track){this.header_div.find(".draghandle").removeClass("draghandle").addClass("child-track-icon").addClass("icon-button");this.parent_element.addClass("child-track");this.tool=undefined}aa.child_tracks_container=$("<div/>").addClass("child-tracks-container").hide();aa.container_div.append(aa.child_tracks_container);if(this.filters_manager){this.filters_div=this.filters_manager.parent_div;this.header_div.after(this.filters_div)}if(this.tool){this.dynamic_tool_div=this.tool.parent_div;this.header_div.after(this.dynamic_tool_div)}if(aa.display_modes!==undefined){if(aa.mode_div===undefined){aa.mode_div=$("<div class='right-float menubutton popup' />").appendTo(aa.header_div);var ac=(aa.track_config&&aa.track_config.values.mode?aa.track_config.values.mode:aa.display_modes[0]);aa.mode=ac;aa.mode_div.text(ac);var ab=function(ak){aa.mode_div.text(ak);aa.mode=ak;aa.track_config.values.mode=ak;aa.tile_cache.clear();aa.draw()};var Z={};for(var ad=0,ag=aa.display_modes.length;ad<ag;ad++){var ae=aa.display_modes[ad];Z[ae]=function(ak){return function(){ab(ak)}}(ae)}make_popupmenu(aa.mode_div,Z)}else{aa.mode_div.hide()}}this.make_name_popup_menu()};n(I.prototype,j.prototype,{make_name_popup_menu:function(){var aa=this;var Z={};Z["Edit configuration"]=function(){var ag=function(){hide_modal();$(window).unbind("keypress.check_enter_esc")},ae=function(){aa.track_config.update_from_form($(".dialog-box"));hide_modal();$(window).unbind("keypress.check_enter_esc")},af=function(ah){if((ah.keyCode||ah.which)===27){ag()}else{if((ah.keyCode||ah.which)===13){ae()}}};$(window).bind("keypress.check_enter_esc",af);show_modal("Configure Track",aa.track_config.build_form(),{Cancel:ag,OK:ae})};if(aa.filters_available>0){var ad=(aa.filters_div.is(":visible")?"Hide filters":"Show filters");Z[ad]=function(){aa.filters_visible=(aa.filters_div.is(":visible"));aa.filters_div.toggle();aa.make_name_popup_menu()}}if(aa.tool){var ad=(aa.dynamic_tool_div.is(":visible")?"Hide tool":"Show tool");Z[ad]=function(){if(!aa.dynamic_tool_div.is(":visible")){aa.update_name(aa.name+aa.tool_region_and_parameters_str())}else{menu_option_text="Show dynamic tool";aa.revert_name()}aa.dynamic_tool_div.toggle();aa.make_name_popup_menu()}}if(aa.valid_chroms){Z["List chrom/contigs with data"]=function(){show_modal("Chrom/contigs with data","<p>"+aa.valid_chroms.join("<br/>")+"</p>",{Close:function(){hide_modal()}})}}var ab=view;var ac=function(){$("#no-tracks").show()};if(this.parent_track){ab=this.parent_track;ac=function(){}}Z.Remove=function(){ab.remove_track(aa);if(ab.num_tracks===0){ac()}};make_popupmenu(aa.name_div,Z)},draw:function(Z,ab){var at=this.view.low,af=this.view.high,ah=af-at,aj=this.view.container.width(),ad=aj/ah,ak=this.view.resolution,ac=$("<div style='position: relative;'></div>"),al=function(av,aw,au){return av+"_"+aw+"_"+au};if(!ab){this.content_div.children().remove()}this.content_div.append(ac);this.max_height=0;var an=Math.floor(at/ak/L);var ae=[];var ao=0;while((an*L*ak)<af){var ar=al(aj,ad,an);var ag=this.tile_cache.get(ar);var ap=an*L*this.view.resolution;var aa=ap+L*this.view.resolution;if(!Z&&ag){ae[ae.length]=ag;this.show_tile(ag,ac,ap,ad)}else{this.delayed_draw(Z,ar,an,ak,ac,ad,ae)}an+=1;ao++}var ai=this;var aq=setInterval(function(){if(ae.length===ao){clearInterval(aq);if(ab){var ax=ai.content_div.children();var ay=false;for(var aw=ax.length-1,aC=0;aw>=aC;aw--){var av=$(ax[aw]);if(ay){av.remove()}else{if(av.children().length!==0){ay=true}}}}if(ai.track_type=="FeatureTrack"&&ai.mode=="Histogram"){var aB=-1;for(var aw=0;aw<ae.length;aw++){var aE=ae[aw].max_val;if(aE>aB){aB=aE}}for(var aw=0;aw<ae.length;aw++){if(ae[aw].max_val!==aB){var aD=ae[aw];aD.canvas.remove();ai.delayed_draw(true,al(aj,ad,aD.index),aD.index,aD.resolution,ac,ad,[],{max:aB})}}}if(ai.filters_manager){var au=ai.filters_manager.filters;for(var aA=0;aA<au.length;aA++){au[aA].update_ui_elt()}var az=false;if(ai.example_feature){for(var aA=0;aA<au.length;aA++){if(au[aA].applies_to(ai.example_feature)){az=true;break}}}if(ai.filters_available!==az){ai.filters_available=az;if(!ai.filters_available){ai.filters_div.hide()}ai.make_name_popup_menu()}}}},50);for(var am=0;am<this.child_tracks.length;am++){this.child_tracks[am].draw(Z,ab)}},delayed_draw:function(aa,ah,ab,ad,ai,al,aj,ae){var ac=this,af=ab*L*ad,ak=af+L*ad;var ag=function(au,am,ao,an,ar,at,ap){var aq=ac.draw_tile(am,ao,an,at,ap);ac.tile_cache.set(ah,aq);if(aq===undefined){return}ac.show_tile(aq,ar,af,at);aj[aj.length]=aq};var Z=setTimeout(function(){if(af<=ac.view.high&&ak>=ac.view.low){var am=(aa?undefined:ac.tile_cache.get(ah));if(am){ac.show_tile(am,ai,af,al);aj[aj.length]=am}else{$.when(ac.data_cache.get_data(view.chrom,af,ak,ac.mode,ad,ac.data_url_extra_params)).then(function(an){n(an,ae);if(view.reference_track&&al>view.canvas_manager.char_width_px){$.when(view.reference_track.data_cache.get_data(view.chrom,af,ak,ac.mode,ad,view.reference_track.data_url_extra_params)).then(function(ao){ag(Z,an,ad,ab,ai,al,ao)})}else{ag(Z,an,ad,ab,ai,al)}})}}},50)},show_tile:function(ac,af,ad,ag){var aa=this;var ab=this.view.high-this.view.low,ae=(ad-this.view.low)*ag;if(this.left_offset){ae-=this.left_offset}var Z=ac.canvas;Z.css({position:"absolute",top:0,left:ae,height:""});af.append(Z);aa.max_height=Math.max(aa.max_height,Z.height());aa.content_div.css("height",aa.max_height+"px");af.children().css("height",aa.max_height+"px")},set_overview:function(){var Z=this.view;if(this.initial_canvas&&this.is_overview){Z.overview_close.show();Z.overview_viewport.append(this.initial_canvas);Z.overview_highlight.show().height(this.initial_canvas.height());Z.overview_viewport.height(this.initial_canvas.height()+Z.overview_box.height())}$(window).trigger("resize")},tool_region_and_parameters_str:function(ab,Z,ac){var aa=this,ad=(ab!==undefined&&Z!==undefined&&ac!==undefined?ab+":"+Z+"-"+ac:"all");return" - region=["+ad+"], parameters=["+aa.tool.get_param_values().join(", ")+"]"},add_track:function(Z){Z.track_id=this.track_id+"_"+this.child_tracks.length;Z.container_div.attr("id","track_"+Z.track_id);this.child_tracks_container.append(Z.container_div);B(Z.container_div,".child-track-icon");if(!$(this.child_tracks_container).is(":visible")){this.child_tracks_container.show()}this.child_tracks.push(Z);this.view.has_changes=true},remove_track:function(Z){Z.container_div.fadeOut("slow",function(){$(this).remove()})}});var W=function(Z,aa){this.track_type="LabelTrack";this.hidden=true;j.call(this,null,Z,aa);this.container_div.addClass("label-track")};n(W.prototype,j.prototype,{draw:function(){var ab=this.view,ac=ab.high-ab.low,af=Math.floor(Math.pow(10,Math.floor(Math.log(ac)/Math.log(10)))),Z=Math.floor(ab.low/af)*af,ad=this.view.container.width(),aa=$("<div style='position: relative; height: 1.3em;'></div>");while(Z<ab.high){var ae=(Z-ab.low)/ac*ad;aa.append($("<div class='label'>"+commatize(Z)+"</div>").css({position:"absolute",left:ae-1}));Z+=af}this.content_div.children(":first").remove();this.content_div.append(aa)}});var x=function(Z){this.track_type="ReferenceTrack";this.hidden=true;j.call(this,null,Z,Z.top_labeltrack);I.call(this);Z.reference_track=this;this.left_offset=200;this.height_px=12;this.container_div.addClass("reference-track");this.content_div.css("background","none");this.content_div.css("min-height","0px");this.content_div.css("border","none");this.data_url=reference_url;this.data_url_extra_params={dbkey:Z.dbkey};this.data_cache=new D(y,this,false);this.tile_cache=new c(r)};n(x.prototype,I.prototype,{draw_tile:function(ah,ae,aa,aj){var ad=this,ab=L*ae;if(aj>this.view.canvas_manager.char_width_px){if(ah===null){ad.content_div.css("height","0px");return}var ac=this.view.canvas_manager.new_canvas();var ai=ac.getContext("2d");ac.width=Math.ceil(ab*aj+ad.left_offset);ac.height=ad.height_px;ai.font=ai.canvas.manager.default_font;ai.textAlign="center";for(var af=0,ag=ah.length;af<ag;af++){var Z=Math.round(af*aj);ai.fillText(ah[af],Z+ad.left_offset,10)}return new b(aa,ae,ac)}this.content_div.css("height","0px")}});var k=function(ad,ab,ae,Z,ac){var aa=this;this.track_type="LineTrack";this.display_modes=["Histogram","Line","Filled","Intensity"];this.mode="Histogram";j.call(this,ad,ab,ab.viewport_container);I.call(this);this.min_height_px=16;this.max_height_px=400;this.height_px=80;this.hda_ldda=ae;this.dataset_id=Z;this.original_dataset_id=Z;this.data_cache=new M(y,this);this.tile_cache=new c(r);this.track_config=new U({track:this,params:[{key:"color",label:"Color",type:"color",default_value:"black"},{key:"min_value",label:"Min Value",type:"float",default_value:undefined},{key:"max_value",label:"Max Value",type:"float",default_value:undefined},{key:"mode",type:"string",default_value:this.mode,hidden:true},{key:"height",type:"int",default_value:this.height_px,hidden:true}],saved_values:ac,onchange:function(){aa.vertical_range=aa.prefs.max_value-aa.prefs.min_value;$("#linetrack_"+aa.track_id+"_minval").text(aa.prefs.min_value);$("#linetrack_"+aa.track_id+"_maxval").text(aa.prefs.max_value);aa.tile_cache.clear();aa.draw()}});this.prefs=this.track_config.values;this.height_px=this.track_config.values.height;this.vertical_range=this.track_config.values.max_value-this.track_config.values.min_value;this.add_resize_handle()};n(k.prototype,I.prototype,{add_resize_handle:function(){var Z=this;var ac=false;var ab=false;var aa=$("<div class='track-resize'>");$(Z.container_div).hover(function(){ac=true;aa.show()},function(){ac=false;if(!ab){aa.hide()}});aa.hide().bind("dragstart",function(ad,ae){ab=true;ae.original_height=$(Z.content_div).height()}).bind("drag",function(ae,af){var ad=Math.min(Math.max(af.original_height+af.deltaY,Z.min_height_px),Z.max_height_px);$(Z.content_div).css("height",ad);Z.height_px=ad;Z.draw(true)}).bind("dragend",function(ad,ae){Z.tile_cache.clear();ab=false;if(!ac){aa.hide()}Z.track_config.values.height=Z.height_px}).appendTo(Z.container_div)},predraw_init:function(){var Z=this,aa=Z.view.tracks.indexOf(Z);Z.vertical_range=undefined;return $.getJSON(Z.data_url,{stats:true,chrom:Z.view.chrom,low:null,high:null,hda_ldda:Z.hda_ldda,dataset_id:Z.dataset_id},function(ab){Z.container_div.addClass("line-track");var ad=ab.data;if(isNaN(parseFloat(Z.prefs.min_value))||isNaN(parseFloat(Z.prefs.max_value))){Z.prefs.min_value=ad.min;Z.prefs.max_value=ad.max;$("#track_"+aa+"_minval").val(Z.prefs.min_value);$("#track_"+aa+"_maxval").val(Z.prefs.max_value)}Z.vertical_range=Z.prefs.max_value-Z.prefs.min_value;Z.total_frequency=ad.total_frequency;Z.container_div.find(".yaxislabel").remove();var ae=$("<div />").addClass("yaxislabel").attr("id","linetrack_"+aa+"_minval").text(u(Z.prefs.min_value));var ac=$("<div />").addClass("yaxislabel").attr("id","linetrack_"+aa+"_maxval").text(u(Z.prefs.max_value));ac.css({position:"absolute",top:"24px",left:"10px"});ac.prependTo(Z.container_div);ae.css({position:"absolute",bottom:"2px",left:"10px"});ae.prependTo(Z.container_div)})},draw_tile:function(aj,ad,aa,ai){if(this.vertical_range===undefined){return}var ae=aa*L*ad,ac=L*ad,Z=Math.ceil(ac*ai),ag=this.height_px;var ab=this.view.canvas_manager.new_canvas();ab.width=Z,ab.height=ag;var ah=ab.getContext("2d");var af=new H.LinePainter(aj.data,ae,ae+ac,this.prefs,this.mode);af.draw(ah,Z,ag);return new b(ac,ad,ab)}});var e=function(Z,ae,ad,ah,ag,ab,ac,af){var aa=this;this.track_type="FeatureTrack";this.display_modes=["Auto","Histogram","Dense","Squish","Pack"];this.track_config=new U({track:this,params:[{key:"block_color",label:"Block color",type:"color",default_value:"#444"},{key:"label_color",label:"Label color",type:"color",default_value:"black"},{key:"show_counts",label:"Show summary counts",type:"bool",default_value:true},{key:"mode",type:"string",default_value:this.mode,hidden:true},],saved_values:ag,onchange:function(){aa.tile_cache.clear();aa.draw()}});this.prefs=this.track_config.values;j.call(this,Z,ae,ae.viewport_container);I.call(this,ab,ac,af);this.height_px=0;this.container_div.addClass("feature-track");this.hda_ldda=ad;this.dataset_id=ah;this.original_dataset_id=ah;this.show_labels_scale=0.001;this.showing_details=false;this.summary_draw_height=30;this.inc_slots={};this.start_end_dct={};this.tile_cache=new c(d);this.data_cache=new M(20,this);this.left_offset=200;this.painter=H.LinkedFeaturePainter};n(e.prototype,I.prototype,{update_auto_mode:function(Z){if(this.mode=="Auto"){if(Z=="no_detail"){Z="feature spans"}else{if(Z=="summary_tree"){Z="coverage histogram"}}this.mode_div.text("Auto ("+Z+")")}},incremental_slots:function(ad,aa,ac){var ab=this.view.canvas_manager.dummy_context,Z=this.inc_slots[ad];if(!Z||(Z.mode!==ac)){Z=new (p.FeatureSlotter)(ad,ac==="Pack",w,function(ae){return ab.measureText(ae)});Z.mode=ac;this.inc_slots[ad]=Z}return Z.slot_features(aa)},get_summary_tree_data:function(ad,ag,ab,ao){if(ao>ab-ag){ao=ab-ag}var ak=Math.floor((ab-ag)/ao),an=[],ac=0;var ae=0,af=0,aj,am=0,ah=[],al,ai;var aa=function(ar,aq,at,ap){ar[0]=aq+at*ap;ar[1]=aq+(at+1)*ap};while(am<ao&&ae!==ad.length){var Z=false;for(;am<ao&&!Z;am++){aa(ah,ag,am,ak);for(af=ae;af<ad.length;af++){aj=ad[af].slice(1,3);if(is_overlap(aj,ah)){Z=true;break}}if(Z){break}}data_start_index=af;an[an.length]=al=[ah[0],0];for(;af<ad.length;af++){aj=ad[af].slice(1,3);if(is_overlap(aj,ah)){al[1]++}else{break}}if(al[1]>ac){ac=al[1]}am++}return{max:ac,delta:ak,data:an}},draw_tile:function(am,av,az,ai,ac){var ar=this,aB=az*L*av,aa=(az+1)*L*av,ao=aa-aB,at=Math.ceil(ao*ai),aq=this.mode,aF=25,ad=this.left_offset,an,ae;if(aq==="Auto"){if(am.dataset_type==="summary_tree"){aq=am.dataset_type}else{if(am.extra_info==="no_detail"){aq="no_detail"}else{var aE=am.data;if(this.view.high-this.view.low>E){aq="Squish"}else{aq="Pack"}}}this.update_auto_mode(aq)}if(aq==="summary_tree"||aq==="Histogram"){ae=this.summary_draw_height;this.container_div.find(".yaxislabel").remove();var Z=$("<div />").addClass("yaxislabel");Z.text(am.max);Z.css({position:"absolute",top:"22px",left:"10px",color:this.prefs.label_color});Z.prependTo(this.container_div);var ab=this.view.canvas_manager.new_canvas();ab.width=at+ad;ab.height=ae+N;if(am.dataset_type!="summary_tree"){var aj=this.get_summary_tree_data(am.data,aB,aa,200);if(am.max){aj.max=am.max}am=aj}var aC=new H.SummaryTreePainter(am,aB,aa,this.prefs);var au=ab.getContext("2d");au.translate(ad,N);aC.draw(au,at,ae);return new l(az,av,ab,am.max)}var an,ag=1;if(aq==="no_detail"||aq==="Squish"||aq==="Pack"){ag=this.incremental_slots(ai,am.data,aq);an=this.inc_slots[ai].slots}var ah=[];if(am.data){var ak=this.filters_manager.filters;for(var aw=0,ay=am.data.length;aw<ay;aw++){var af=am.data[aw];var ax=false;var al;for(var aA=0,aD=ak.length;aA<aD;aA++){al=ak[aA];al.update_attrs(af);if(!al.keep(af)){ax=true;break}}if(!ax){ah.push(af)}}}var aC=new (this.painter)(ah,aB,aa,this.prefs,aq,ac);var ae=aC.get_required_height(ag)+z;var ab=this.view.canvas_manager.new_canvas();ab.width=at+ad;ab.height=ae;var au=ab.getContext("2d");au.fillStyle=this.prefs.block_color;au.font=au.canvas.manager.default_font;au.textAlign="right";this.container_div.find(".yaxislabel").remove();if(am.message){$(ab).css({"border-top":"1px solid red"});au.fillStyle="red";au.textAlign="left";var ap=au.textBaseline;au.textBaseline="top";au.fillText(am.message,ad,0);au.textBaseline=ap;if(!am.data){return new b(az,av,ab,ae)}}this.example_feature=(am.data.length?am.data[0]:undefined);au.translate(ad,z);aC.draw(au,at,ae,an);return new K(az,av,ab)}});var O=function(ac,aa,ae,Z,ab,ad){e.call(this,ac,aa,ae,Z,ab,ad);this.track_type="VcfTrack";this.painter=H.VariantPainter};n(O.prototype,I.prototype,e.prototype);var R=function(ac,aa,ae,Z,ab,ad){e.call(this,ac,aa,ae,Z,ab,ad);this.track_config=new U({track:this,params:[{key:"block_color",label:"Block color",type:"color",default_value:"#444"},{key:"label_color",label:"Label color",type:"color",default_value:"black"},{key:"show_insertions",label:"Show insertions",type:"bool",default_value:false},{key:"show_differences",label:"Show differences only",type:"bool",default_value:true},{key:"show_counts",label:"Show summary counts",type:"bool",default_value:true},{key:"mode",type:"string",default_value:this.mode,hidden:true},],saved_values:ab,onchange:function(){this.track.tile_cache.clear();this.track.draw()}});this.prefs=this.track_config.values;this.track_type="ReadTrack";this.painter=H.ReadPainter;this.make_name_popup_menu()};n(R.prototype,I.prototype,e.prototype);var P=function(ad,ab,af,Z,ac,ae,aa){e.call(this,ad,ab,af,Z,ac,ae,{},aa);this.track_type="ToolDataFeatureTrack";this.data_url=raw_data_url;this.data_query_wait=1000;this.dataset_check_url=dataset_state_url};n(P.prototype,I.prototype,e.prototype,{predraw_init:function(){var aa=this;var Z=function(){if(aa.data_cache.size()===0){setTimeout(Z,300)}else{aa.data_url=default_data_url;aa.data_query_wait=G;aa.dataset_state_url=converted_datasets_state_url;$.getJSON(aa.dataset_state_url,{dataset_id:aa.dataset_id,hda_ldda:aa.hda_ldda},function(ab){})}};Z()}});S.View=X;S.LineTrack=k;S.FeatureTrack=e;S.ReadTrack=R};var slotting_module=function(c,b){var e=c("class").extend;var d=2,a=5;b.FeatureSlotter=function(j,h,f,g){this.slots={};this.start_end_dct={};this.w_scale=j;this.include_label=h;this.max_rows=f;this.measureText=g};e(b.FeatureSlotter.prototype,{slot_features:function(m){var p=this.w_scale,s=this.slots,h=this.start_end_dct,y=[],A=[],n=0,z=this.max_rows;for(var w=0,x=m.length;w<x;w++){var l=m[w],o=l[0];if(s[o]!==undefined){n=Math.max(n,s[o]);A.push(s[o])}else{y.push(w)}}var q=function(G,H){for(var F=0;F<=z;F++){var D=false,I=h[F];if(I!==undefined){for(var C=0,E=I.length;C<E;C++){var B=I[C];if(H>B[0]&&G<B[1]){D=true;break}}}if(!D){return F}}return -1};for(var w=0,x=y.length;w<x;w++){var l=m[y[w]],o=l[0],u=l[1],f=l[2],r=l[3],g=Math.floor(u*p),k=Math.ceil(f*p),v=this.measureText(r).width,j;if(r!==undefined&&this.include_label){v+=(d+a);if(g-v>=0){g-=v;j="left"}else{k+=v;j="right"}}var t=q(g,k);if(t>=0){if(h[t]===undefined){h[t]=[]}h[t].push([g,k]);s[o]=t;n=Math.max(n,t)}else{}}return n+1}})};var painters_module=function(j,w){var t=j("class").extend;var o=function(H,z,F,y,E,C){if(C===undefined){C=4}var B=y-z;var A=E-F;var D=Math.floor(Math.sqrt(B*B+A*A)/C);var I=B/D;var G=A/D;var x;for(x=0;x<D;x++,z+=I,F+=G){if(x%2!==0){continue}H.fillRect(z,F,C,1)}};var p=function(A,z,x,D){var C=z-D/2,B=z+D/2,E=x-Math.sqrt(D*3/2);A.beginPath();A.moveTo(C,E);A.lineTo(B,E);A.lineTo(z,x);A.lineTo(C,E);A.strokeStyle=this.fillStyle;A.fill();A.stroke();A.closePath()};var m=function(z,B,x,y,A){this.data=z;this.view_start=B;this.view_end=x;this.prefs=t({},this.default_prefs,y);this.mode=A};m.prototype.default_prefs={};var u=function(z,B,x,y,A){m.call(this,z,B,x,y,A)};u.prototype.default_prefs={show_counts:false};u.prototype.draw=function(M,z,L){var E=this.view_start,O=this.view_end-this.view_start,N=z/O;var J=this.data.data,I=this.data.delta,G=this.data.max,B=L;delta_x_px=Math.ceil(I*N);M.save();for(var C=0,D=J.length;C<D;C++){var H=Math.floor((J[C][0]-E)*N);var F=J[C][1];if(!F){continue}var K=F/G*L;if(F!==0&&K<1){K=1}M.fillStyle=this.prefs.block_color;M.fillRect(H,B-K,delta_x_px,K);var A=4;if(this.prefs.show_counts&&(M.measureText(F).width+A)<delta_x_px){M.fillStyle=this.prefs.label_color;M.textAlign="center";M.fillText(F,H+(delta_x_px/2),10)}}M.restore()};var c=function(x,B,D,E,z){m.call(this,x,B,D,E,z);if(this.prefs.min_value===undefined){var F=Infinity;for(var y=0,A=this.data.length;y<A;y++){F=Math.min(F,this.data[y][1])}this.prefs.min_value=F}if(this.prefs.max_value===undefined){var C=-Infinity;for(var y=0,A=this.data.length;y<A;y++){C=Math.max(C,this.data[y][1])}this.prefs.max_value=C}};c.prototype.default_prefs={min_value:undefined,max_value:undefined,mode:"Histogram",color:"#000",overflow_color:"#F66"};c.prototype.draw=function(O,N,L){var F=false,H=this.prefs.min_value,D=this.prefs.max_value,K=D-H,z=L,A=this.view_start,M=this.view_end-this.view_start,B=N/M,I=this.mode,S=this.data;O.save();var T=Math.round(L+H/K*L);if(I!=="Intensity"){O.fillStyle="#aaa";O.fillRect(0,T,N,1)}O.beginPath();O.fillStyle=this.prefs.color;var R,E,C;if(S.length>1){C=Math.ceil((S[1][0]-S[0][0])*B)}else{C=10}for(var P=0,Q=S.length;P<Q;P++){R=Math.round((S[P][0]-A)*B);E=S[P][1];if(E===null){if(F&&I==="Filled"){O.lineTo(R,z)}F=false;continue}if(E<H){E=H}else{if(E>D){E=D}}if(I==="Histogram"){E=Math.round(E/K*z);O.fillRect(R,T,C,-E)}else{if(I==="Intensity"){E=255-Math.floor((E-H)/K*255);O.fillStyle="rgb("+E+","+E+","+E+")";O.fillRect(R,0,C,z)}else{E=Math.round(z-(E-H)/K*z);if(F){O.lineTo(R,E)}else{F=true;if(I==="Filled"){O.moveTo(R,z);O.lineTo(R,E)}else{O.moveTo(R,E)}}}}}if(I==="Filled"){if(F){O.lineTo(R,T);O.lineTo(0,T)}O.fill()}else{O.stroke()}var x=-1,J=-1;O.fillStyle=this.prefs.overflow_color;var G;for(var P=0,Q=S.length;P<Q;P++){E=S[P][1];R=Math.round((S[P][0]-A)*B);if(J>=0&&(E===null||E<D)){O.fillRect(J,0,G+C-J,2);J=-1}else{if(x>=0&&(E===null||E>H)){O.fillRect(x,L-2,G+C-x,2);x=-1}}if(E!==null&&E>D&&J<0){J=R}else{if(E!==null&&E<H&&x<0){x=R}}G=R}O.restore()};var n=function(z,B,x,y,A){m.call(this,z,B,x,y,A)};n.prototype.default_prefs={block_color:"#FFF",connector_color:"#FFF"};t(n.prototype,{get_required_height:function(y){var x=y_scale=this.get_row_height(),z=this.mode;if(z==="no_detail"||z==="Squish"||z==="Pack"){x=y*y_scale}return x+Math.max(Math.round(y_scale/2),5)},draw:function(J,A,I,F){var D=this.data,G=this.view_start,K=this.view_end;J.save();J.fillStyle=this.prefs.block_color;J.textAlign="right";var N=this.view_end-this.view_start,M=A/N,z=this.get_row_height();for(var C=0,E=D.length;C<E;C++){var L=D[C],B=L[0],x=L[1],y=L[2],H=(F&&F[B]!==undefined?F[B]:null);if((x<K&&y>G)&&(this.mode=="Dense"||H!==null)){this.draw_element(J,this.mode,L,H,G,K,M,z,A)}}J.restore()}});var d=10,h=3,l=5,v=10,f=1,r=3,e=3,a=9,k=2,g="#ccc";var q=function(z,B,x,y,A){n.call(this,z,B,x,y,A)};t(q.prototype,n.prototype,{get_row_height:function(){var y=this.mode,x;if(y==="Dense"){x=d}else{if(y==="no_detail"){x=h}else{if(y==="Squish"){x=l}else{x=v}}}return x},draw_element:function(J,C,R,E,L,ab,af,ag,x){var O=R[0],ad=R[1],V=R[2],M=R[3],W=Math.floor(Math.max(0,(ad-L)*af)),K=Math.ceil(Math.min(x,Math.max(0,(V-L)*af))),U=(C==="Dense"?0:(0+E))*ag,I,Z,N=null,ah=null,A=this.prefs.block_color,Y=this.prefs.label_color;if(C=="Dense"){E=1}if(C==="no_detail"){J.fillStyle=A;J.fillRect(W,U+5,K-W,f)}else{var H=R[4],T=R[5],X=R[6],B=R[7];if(T&&X){N=Math.floor(Math.max(0,(T-L)*af));ah=Math.ceil(Math.min(x,Math.max(0,(X-L)*af)))}var ae,P;if(C==="Squish"||C==="Dense"){ae=1;P=e}else{ae=5;P=a}if(!B){if(R.strand){if(R.strand==="+"){J.fillStyle=J.canvas.manager.get_pattern("right_strand_inv")}else{if(R.strand==="-"){J.fillStyle=J.canvas.manager.get_pattern("left_strand_inv")}}}else{J.fillStyle=A}J.fillRect(W,U,K-W,P)}else{var G,Q;if(C==="Squish"||C==="Dense"){J.fillStyle=g;G=U+Math.floor(e/2)+1;Q=1}else{if(H){var G=U;var Q=P;if(H==="+"){J.fillStyle=J.canvas.manager.get_pattern("right_strand")}else{if(H==="-"){J.fillStyle=J.canvas.manager.get_pattern("left_strand")}}}else{J.fillStyle=g;G+=(e/2)+1;Q=1}}J.fillRect(W,G,K-W,Q);for(var ac=0,z=B.length;ac<z;ac++){var D=B[ac],y=Math.floor(Math.max(0,(D[0]-L)*af)),S=Math.ceil(Math.min(x,Math.max((D[1]-L)*af)));if(y>S){continue}J.fillStyle=A;J.fillRect(y,U+(P-ae)/2+1,S-y,ae);if(N!==undefined&&X>T&&!(y>ah||S<N)){var aa=Math.max(y,N),F=Math.min(S,ah);J.fillRect(aa,U+1,F-aa,P);if(B.length==1&&C=="Pack"){if(H==="+"){J.fillStyle=J.canvas.manager.get_pattern("right_strand_inv")}else{if(H==="-"){J.fillStyle=J.canvas.manager.get_pattern("left_strand_inv")}}if(aa+14<F){aa+=2;F-=2}J.fillRect(aa,U+1,F-aa,P)}}}}if(C==="Pack"&&ad>L){J.fillStyle=Y;if(L===0&&W-J.measureText(M).width<0){J.textAlign="left";J.fillText(M,K+k,U+8)}else{J.textAlign="right";J.fillText(M,W-k,U+8)}J.fillStyle=A}}}});var b=function(z,B,x,y,A){n.call(this,z,B,x,y,A)};t(b.prototype,n.prototype,{draw_element:function(Q,L,F,B,T,z,I,R,O){var F=data[i],H=F[0],P=F[1],A=F[2],K=F[3],D=Math.floor(Math.max(0,(P-T)*I)),G=Math.ceil(Math.min(O,Math.max(0,(A-T)*I))),C=(L==="Dense"?0:(0+B))*R,x,U,y=null,J=null;if(no_label){Q.fillStyle=block_color;Q.fillRect(D+left_offset,C+5,G-D,1)}else{var S=F[4],N=F[5],E=F[6];x=9;U=1;Q.fillRect(D+left_offset,C,G-D,x);if(L!=="Dense"&&K!==undefined&&P>T){Q.fillStyle=label_color;if(T===0&&D-Q.measureText(K).width<0){Q.textAlign="left";Q.fillText(K,G+2+left_offset,C+8)}else{Q.textAlign="right";Q.fillText(K,D-2+left_offset,C+8)}Q.fillStyle=block_color}var M=S+" / "+N;if(P>T&&Q.measureText(M).width<(G-D)){Q.fillStyle="white";Q.textAlign="center";Q.fillText(M,left_offset+D+(G-D)/2,C+8);Q.fillStyle=block_color}}}});var s=function(A,C,x,z,B,y){n.call(this,A,C,x,z,B);this.ref_seq=y};s.prototype.default_prefs=t({},n.prototype.default_prefs,{show_insertions:false});t(s.prototype,n.prototype,{get_row_height:function(){var x,y=this.mode;if(y==="Dense"){x=d}else{if(y==="Squish"){x=l}else{x=v;if(this.prefs.show_insertions){x*=2}}}return x},draw_read:function(T,O,K,Y,z,S,H,E,D){T.textAlign="center";var R=this,y=[Y,z],N=0,U=0,Q=0;ref_seq=this.ref_seq,char_width_px=T.canvas.manager.char_width_px;var ad=[];if((O==="Pack"||this.mode==="Auto")&&E!==undefined&&K>char_width_px){Q=Math.round(K/2)}if(!H){H=[[0,E.length]]}for(var L=0,W=H.length;L<W;L++){var I=H[L],A="MIDNSHP=X"[I[0]],M=I[1];if(A==="H"||A==="S"){N-=M}var F=S+N,ac=Math.floor(Math.max(0,(F-Y)*K)),G=Math.floor(Math.max(0,(F+M-Y)*K));if(ac===G){G+=1}switch(A){case"H":break;case"S":case"M":case"=":if(is_overlap([F,F+M],y)){var P=E.slice(U,U+M);if(Q>0){T.fillStyle=this.prefs.block_color;T.fillRect(ac-Q,D+1,G-ac,9);T.fillStyle=g;for(var aa=0,x=P.length;aa<x;aa++){if(this.prefs.show_differences&&ref_seq){var J=ref_seq[F-Y+aa];if(!J||J.toLowerCase()===P[aa].toLowerCase()){continue}}if(F+aa>=Y&&F+aa<=z){var ab=Math.floor(Math.max(0,(F+aa-Y)*K));T.fillText(P[aa],ab,D+9)}}}else{T.fillStyle=this.prefs.block_color;T.fillRect(ac,D+4,G-ac,e)}}U+=M;N+=M;break;case"N":T.fillStyle=g;T.fillRect(ac-Q,D+5,G-ac,1);N+=M;break;case"D":T.fillStyle="red";T.fillRect(ac-Q,D+4,G-ac,3);N+=M;break;case"P":break;case"I":var X=ac-Q;if(is_overlap([F,F+M],y)){var P=E.slice(U,U+M);if(this.prefs.show_insertions){var C=ac-(G-ac)/2;if((O==="Pack"||this.mode==="Auto")&&E!==undefined&&K>char_width_px){T.fillStyle="yellow";T.fillRect(C-Q,D-9,G-ac,9);ad[ad.length]={type:"triangle",data:[X,D+4,5]};T.fillStyle=g;switch(seq_tile_overlap){case (OVERLAP_START):P=P.slice(Y-F);break;case (OVERLAP_END):P=P.slice(0,F-z);break;case (CONTAINED_BY):break;case (CONTAINS):P=P.slice(Y-F,F-z);break}for(var aa=0,x=P.length;aa<x;aa++){var ab=Math.floor(Math.max(0,(F+aa-Y)*K));T.fillText(P[aa],ab-(G-ac)/2,D)}}else{T.fillStyle="yellow";T.fillRect(C,D+(this.mode!=="Dense"?2:5),G-ac,(O!=="Dense"?e:r))}}else{if((O==="Pack"||this.mode==="Auto")&&E!==undefined&&K>char_width_px){ad[ad.length]={type:"text",data:[P.length,X,D+9]}}else{}}}U+=M;break;case"X":U+=M;break}}T.fillStyle="yellow";var Z,B,ae;for(var V=0;V<ad.length;V++){Z=ad[V];B=Z.type;ae=Z.data;if(B==="text"){T.save();T.font="bold "+T.font;T.fillText(ae[0],ae[1],ae[2]);T.restore()}else{if(B=="triangle"){p(T,ae[0],ae[1],ae[2])}}}},draw_element:function(Q,L,D,A,T,y,H,R,O){var G=D[0],P=D[1],z=D[2],I=D[3],C=Math.floor(Math.max(0,(P-T)*H)),E=Math.ceil(Math.min(O,Math.max(0,(z-T)*H))),B=(L==="Dense"?0:(0+A))*R,U=this.prefs.block_color,F=this.prefs.label_color,N=0;if((L==="Pack"||this.mode==="Auto")&&H>Q.canvas.manager.char_width_px){var N=Math.round(H/2)}Q.fillStyle=U;if(D[5] instanceof Array){var M=Math.floor(Math.max(0,(D[4][0]-T)*H)),K=Math.ceil(Math.min(O,Math.max(0,(D[4][1]-T)*H))),J=Math.floor(Math.max(0,(D[5][0]-T)*H)),x=Math.ceil(Math.min(O,Math.max(0,(D[5][1]-T)*H)));if(D[4][1]>=T&&D[4][0]<=y&&D[4][2]){this.draw_read(Q,L,H,T,y,D[4][0],D[4][2],D[4][3],B)}if(D[5][1]>=T&&D[5][0]<=y&&D[5][2]){this.draw_read(Q,L,H,T,y,D[5][0],D[5][2],D[5][3],B)}if(J>K){Q.fillStyle=g;o(Q,K-N,B+5,J-N,B+5)}}else{Q.fillStyle=U;this.draw_read(Q,L,H,T,y,P,D[4],D[5],B)}if(L==="Pack"&&P>T){Q.fillStyle=this.prefs.label_color;var S=1;if(S===0&&C-Q.measureText(I).width<0){Q.textAlign="left";Q.fillText(I,E+k-N,B+8)}else{Q.textAlign="right";Q.fillText(I,C-k-N,B+8)}Q.fillStyle=U}}});w.SummaryTreePainter=u;w.LinePainter=c;w.LinkedFeaturePainter=q;w.ReadPainter=s;w.VariantPainter=b};(function(d){var c={};var b=function(e){return c[e]};var a=function(f,g){var e={};g(b,e);c[f]=e};a("class",class_module);a("slotting",slotting_module);a("painters",painters_module);a("trackster",trackster_module);for(key in c.trackster){d[key]=c.trackster[key]}})(window);
\ No newline at end of file
+var class_module=function(b,a){var c=function(){var f=arguments[0];for(var e=1;e<arguments.length;e++){var d=arguments[e];for(key in d){f[key]=d[key]}}return f};a.extend=c};var BEFORE=1001,CONTAINS=1002,OVERLAP_START=1003,OVERLAP_END=1004,CONTAINED_BY=1005,AFTER=1006;var compute_overlap=function(e,b){var g=e[0],f=e[1],d=b[0],c=b[1],a;if(g<d){if(f<d){a=BEFORE}else{if(f<=c){a=OVERLAP_START}else{a=CONTAINS}}}else{if(g>c){a=AFTER}else{if(f<=c){a=CONTAINED_BY}else{a=OVERLAP_END}}}return a};var is_overlap=function(c,b){var a=compute_overlap(c,b);return(a!==BEFORE&&a!==AFTER)};var trackster_module=function(f,S){var n=f("class").extend,p=f("slotting"),H=f("painters");var Y=function(Z,aa){this.document=Z;this.default_font=aa!==undefined?aa:"9px Monaco, Lucida Console, monospace";this.dummy_canvas=this.new_canvas();this.dummy_context=this.dummy_canvas.getContext("2d");this.dummy_context.font=this.default_font;this.char_width_px=this.dummy_context.measureText("A").width;this.patterns={};this.load_pattern("right_strand","/visualization/strand_right.png");this.load_pattern("left_strand","/visualization/strand_left.png");this.load_pattern("right_strand_inv","/visualization/strand_right_inv.png");this.load_pattern("left_strand_inv","/visualization/strand_left_inv.png")};n(Y.prototype,{load_pattern:function(Z,ad){var aa=this.patterns,ab=this.dummy_context,ac=new Image();ac.src=image_path+ad;ac.onload=function(){aa[Z]=ab.createPattern(ac,"repeat")}},get_pattern:function(Z){return this.patterns[Z]},new_canvas:function(){var Z=this.document.createElement("canvas");if(window.G_vmlCanvasManager){G_vmlCanvasManager.initElement(Z)}Z.manager=this;return Z}});var B=function(Z,aa){Z.bind("drag",{handle:aa,relative:true},function(ae,af){var ad=$(this).parent();var ac=ad.children();var ab;for(ab=0;ab<ac.length;ab++){if(af.offsetY<$(ac.get(ab)).position().top){break}}if(ab===ac.length){if(this!==ac.get(ab-1)){ad.append(this)}}else{if(this!==ac.get(ab)){$(this).insertBefore(ac.get(ab))}}}).bind("dragstart",function(){$(this).css({"border-top":"1px solid blue","border-bottom":"1px solid blue"})}).bind("dragend",function(){$(this).css("border","0px")})};S.sortable=B;var C=9,z=10,N=C+2,w=100,E=12000,L=200,s=10,G=5000,t=100,m="There was an error in indexing this dataset. ",F="A converter for this dataset is not installed. Please check your datatypes_conf.xml file.",A="No data for this chrom/contig.",q="Currently indexing... please wait",v="Tool cannot be rerun: ",a="Loading data...",T="Ready for display",d=10,r=5,y=5;function u(Z){return Math.round(Z*1000)/1000}var c=function(Z){this.num_elements=Z;this.clear()};n(c.prototype,{get:function(aa){var Z=this.key_ary.indexOf(aa);if(Z!==-1){this.move_key_to_end(aa,Z)}return this.obj_cache[aa]},set:function(aa,ab){if(!this.obj_cache[aa]){if(this.key_ary.length>=this.num_elements){var Z=this.key_ary.shift();delete this.obj_cache[Z]}this.key_ary.push(aa)}this.obj_cache[aa]=ab;return ab},move_key_to_end:function(aa,Z){this.key_ary.splice(Z,1);this.key_ary.push(aa)},clear:function(){this.obj_cache={};this.key_ary=[]},size:function(){return this.key_ary.length}});var M=function(aa,Z,ab){c.call(this,aa);this.track=Z;this.subset=(ab!==undefined?ab:true)};n(M.prototype,c.prototype,{load_data:function(ah,ai,ad,ag,aa,af){var ac={chrom:ah,low:ai,high:ad,mode:ag,resolution:aa,dataset_id:this.track.dataset_id,hda_ldda:this.track.hda_ldda};$.extend(ac,af);if(this.track.filters_manager){var aj=[];var Z=this.track.filters_manager.filters;for(var ae=0;ae<Z.length;ae++){aj[aj.length]=Z[ae].name}ac.filter_cols=JSON.stringify(aj)}var ab=this;return $.getJSON(this.track.data_url,ac,function(ak){ab.set_data(ai,ad,ag,ak)})},get_data:function(ab,Z,ae,af,aa,ad){var ac=this.get(this.gen_key(Z,ae,af));if(ac){return ac}ac=this.load_data(ab,Z,ae,af,aa,ad);this.set_data(Z,ae,af,ac);return ac},set_data:function(aa,ab,ac,Z){return this.set(this.gen_key(aa,ab,ac),Z)},gen_key:function(Z,ab,ac){var aa=Z+"_"+ab+"_"+ac;return aa},split_key:function(Z){return Z.split("_")}});var D=function(aa,Z,ab){M.call(this,aa,Z,ab)};n(D.prototype,M.prototype,c.prototype,{load_data:function(ab,Z,ad,ae,aa,ac){if(aa>1){return}return M.prototype.load_data.call(this,ab,Z,ad,ae,aa,ac)}});var X=function(Z,ac,ab,aa,ad){this.container=Z;this.chrom=null;this.vis_id=ab;this.dbkey=aa;this.title=ac;this.tracks=[];this.label_tracks=[];this.max_low=0;this.max_high=0;this.num_tracks=0;this.track_id_counter=0;this.zoom_factor=3;this.min_separation=30;this.has_changes=false;this.init(ad);this.canvas_manager=new Y(Z.get(0).ownerDocument);this.reset()};n(X.prototype,{init:function(ac){var ab=this.container,Z=this;this.top_container=$("<div/>").addClass("top-container").appendTo(ab);this.content_div=$("<div/>").addClass("content").css("position","relative").appendTo(ab);this.bottom_container=$("<div/>").addClass("bottom-container").appendTo(ab);this.top_labeltrack=$("<div/>").addClass("top-labeltrack").appendTo(this.top_container);this.viewport_container=$("<div/>").addClass("viewport-container").addClass("viewport-container").appendTo(this.content_div);this.intro_div=$("<div/>").addClass("intro").text("Select a chrom from the dropdown below").hide();this.nav_labeltrack=$("<div/>").addClass("nav-labeltrack").appendTo(this.bottom_container);this.nav_container=$("<div/>").addClass("nav-container").prependTo(this.top_container);this.nav=$("<div/>").addClass("nav").appendTo(this.nav_container);this.overview=$("<div/>").addClass("overview").appendTo(this.bottom_container);this.overview_viewport=$("<div/>").addClass("overview-viewport").appendTo(this.overview);this.overview_close=$("<a href='javascript:void(0);'>Close Overview</a>").addClass("overview-close").hide().appendTo(this.overview_viewport);this.overview_highlight=$("<div/>").addClass("overview-highlight").hide().appendTo(this.overview_viewport);this.overview_box_background=$("<div/>").addClass("overview-boxback").appendTo(this.overview_viewport);this.overview_box=$("<div/>").addClass("overview-box").appendTo(this.overview_viewport);this.default_overview_height=this.overview_box.height();this.nav_controls=$("<div/>").addClass("nav-controls").appendTo(this.nav);this.chrom_select=$("<select/>").attr({name:"chrom"}).css("width","15em").addClass("no-autocomplete").append("<option value=''>Loading</option>").appendTo(this.nav_controls);var aa=function(ad){if(ad.type==="focusout"||(ad.keyCode||ad.which)===13||(ad.keyCode||ad.which)===27){if((ad.keyCode||ad.which)!==27){Z.go_to($(this).val())}$(this).hide();$(this).val("");Z.location_span.show();Z.chrom_select.show()}};this.nav_input=$("<input/>").addClass("nav-input").hide().bind("keyup focusout",aa).appendTo(this.nav_controls);this.location_span=$("<span/>").addClass("location").appendTo(this.nav_controls);this.location_span.bind("click",function(){Z.location_span.hide();Z.chrom_select.hide();Z.nav_input.val(Z.chrom+":"+Z.low+"-"+Z.high);Z.nav_input.css("display","inline-block");Z.nav_input.select();Z.nav_input.focus()});if(this.vis_id!==undefined){this.hidden_input=$("<input/>").attr("type","hidden").val(this.vis_id).appendTo(this.nav_controls)}this.zo_link=$("<a id='zoom-out' />").click(function(){Z.zoom_out();Z.redraw()}).appendTo(this.nav_controls);this.zi_link=$("<a id='zoom-in' />").click(function(){Z.zoom_in();Z.redraw()}).appendTo(this.nav_controls);this.load_chroms({low:0},ac);this.chrom_select.bind("change",function(){Z.change_chrom(Z.chrom_select.val())});this.intro_div.show();this.content_div.bind("click",function(ad){$(this).find("input").trigger("blur")});this.content_div.bind("dblclick",function(ad){Z.zoom_in(ad.pageX,this.viewport_container)});this.overview_box.bind("dragstart",function(ad,ae){this.current_x=ae.offsetX}).bind("drag",function(ad,af){var ag=af.offsetX-this.current_x;this.current_x=af.offsetX;var ae=Math.round(ag/Z.viewport_container.width()*(Z.max_high-Z.max_low));Z.move_delta(-ae)});this.overview_close.bind("click",function(){for(var ae=0,ad=Z.tracks.length;ae<ad;ae++){Z.tracks[ae].is_overview=false}$(this).siblings().filter("canvas").remove();$(this).parent().css("height",Z.overview_box.height());Z.overview_highlight.hide();$(this).hide()});this.viewport_container.bind("draginit",function(ad,ae){if(ad.clientX>Z.viewport_container.width()-16){return false}}).bind("dragstart",function(ad,ae){ae.original_low=Z.low;ae.current_height=ad.clientY;ae.current_x=ae.offsetX}).bind("drag",function(af,ah){var ad=$(this);var ai=ah.offsetX-ah.current_x;var ae=ad.scrollTop()-(af.clientY-ah.current_height);ad.scrollTop(ae);ah.current_height=af.clientY;ah.current_x=ah.offsetX;var ag=Math.round(ai/Z.viewport_container.width()*(Z.high-Z.low));Z.move_delta(ag)}).bind("mousewheel",function(af,ah,ae,ad){if(ae){var ag=Math.round(-ae/Z.viewport_container.width()*(Z.high-Z.low));Z.move_delta(ag)}});this.top_labeltrack.bind("dragstart",function(ad,ae){return $("<div />").css({height:Z.content_div.height()+Z.top_labeltrack.height()+Z.nav_labeltrack.height()+1,top:"0px",position:"absolute","background-color":"#ccf",opacity:0.5,"z-index":1000}).appendTo($(this))}).bind("drag",function(ah,ai){$(ai.proxy).css({left:Math.min(ah.pageX,ai.startX),width:Math.abs(ah.pageX-ai.startX)});var ae=Math.min(ah.pageX,ai.startX)-Z.container.offset().left,ad=Math.max(ah.pageX,ai.startX)-Z.container.offset().left,ag=(Z.high-Z.low),af=Z.viewport_container.width();Z.update_location(Math.round(ae/af*ag)+Z.low,Math.round(ad/af*ag)+Z.low)}).bind("dragend",function(ai,aj){var ae=Math.min(ai.pageX,aj.startX),ad=Math.max(ai.pageX,aj.startX),ag=(Z.high-Z.low),af=Z.viewport_container.width(),ah=Z.low;Z.low=Math.round(ae/af*ag)+ah;Z.high=Math.round(ad/af*ag)+ah;$(aj.proxy).remove();Z.redraw()});this.add_label_track(new W(this,this.top_labeltrack));this.add_label_track(new W(this,this.nav_labeltrack));$(window).bind("resize",function(){Z.resize_window()});$(document).bind("redraw",function(){Z.redraw()});this.reset();$(window).trigger("resize")},update_location:function(Z,aa){this.location_span.text(commatize(Z)+" - "+commatize(aa));this.nav_input.val(this.chrom+":"+commatize(Z)+"-"+commatize(aa))},load_chroms:function(aa,ab){aa.num=t;$.extend(aa,(this.vis_id!==undefined?{vis_id:this.vis_id}:{dbkey:this.dbkey}));var Z=this;$.ajax({url:chrom_url,data:aa,dataType:"json",success:function(ad){if(ad.chrom_info.length===0){alert("Invalid chromosome: "+aa.chrom);return}if(ad.reference){Z.add_label_track(new x(Z))}Z.chrom_data=ad.chrom_info;var ag='<option value="">Select Chrom/Contig</option>';for(var af=0,ac=Z.chrom_data.length;af<ac;af++){var ae=Z.chrom_data[af].chrom;ag+='<option value="'+ae+'">'+ae+"</option>"}if(ad.prev_chroms){ag+='<option value="previous">Previous '+t+"</option>"}if(ad.next_chroms){ag+='<option value="next">Next '+t+"</option>"}Z.chrom_select.html(ag);if(ab){ab()}Z.chrom_start_index=ad.start_index},error:function(){alert("Could not load chroms for this dbkey:",Z.dbkey)}})},change_chrom:function(ad,aa,af){if(!ad||ad==="None"){return}var ac=this;if(ad==="previous"){ac.load_chroms({low:this.chrom_start_index-t});return}if(ad==="next"){ac.load_chroms({low:this.chrom_start_index+t});return}var ae=$.grep(ac.chrom_data,function(ah,ai){return ah.chrom===ad})[0];if(ae===undefined){ac.load_chroms({chrom:ad},function(){ac.change_chrom(ad,aa,af)});return}else{if(ad!==ac.chrom){ac.chrom=ad;if(!ac.chrom){ac.intro_div.show()}else{ac.intro_div.hide()}ac.chrom_select.val(ac.chrom);ac.max_high=ae.len-1;ac.reset();ac.redraw(true);for(var ag=0,Z=ac.tracks.length;ag<Z;ag++){var ab=ac.tracks[ag];if(ab.init){ab.init()}}}if(aa!==undefined&&af!==undefined){ac.low=Math.max(aa,0);ac.high=Math.min(af,ac.max_high)}ac.reset_overview();ac.redraw()}},go_to:function(ad){var ah=this,Z,ac,aa=ad.split(":"),af=aa[0],ag=aa[1];if(ag!==undefined){try{var ae=ag.split("-");Z=parseInt(ae[0].replace(/,/g,""),10);ac=parseInt(ae[1].replace(/,/g,""),10)}catch(ab){return false}}ah.change_chrom(af,Z,ac)},move_fraction:function(ab){var Z=this;var aa=Z.high-Z.low;this.move_delta(ab*aa)},move_delta:function(ab){var Z=this;var aa=Z.high-Z.low;if(Z.low-ab<Z.max_low){Z.low=Z.max_low;Z.high=Z.max_low+aa}else{if(Z.high-ab>Z.max_high){Z.high=Z.max_high;Z.low=Z.max_high-aa}else{Z.high-=ab;Z.low-=ab}}Z.redraw()},add_track:function(Z){Z.view=this;Z.track_id=this.track_id_counter;this.tracks.push(Z);if(Z.init){Z.init()}Z.container_div.attr("id","track_"+Z.track_id);B(Z.container_div,".draghandle");this.track_id_counter+=1;this.num_tracks+=1},add_label_track:function(Z){Z.view=this;this.label_tracks.push(Z)},remove_track:function(Z){this.has_changes=true;Z.container_div.fadeOut("slow",function(){$(this).remove()});delete this.tracks[this.tracks.indexOf(Z)];this.num_tracks-=1},reset:function(){this.low=this.max_low;this.high=this.max_high;this.viewport_container.find(".yaxislabel").remove()},redraw:function(ag){var af=this.high-this.low,ae=this.low,aa=this.high;if(ae<this.max_low){ae=this.max_low}if(aa>this.max_high){aa=this.max_high}if(this.high!==0&&af<this.min_separation){aa=ae+this.min_separation}this.low=Math.floor(ae);this.high=Math.ceil(aa);this.resolution=Math.pow(10,Math.ceil(Math.log((this.high-this.low)/L)/Math.LN10));this.zoom_res=Math.pow(s,Math.max(0,Math.ceil(Math.log(this.resolution,s)/Math.log(s))));var Z=(this.low/(this.max_high-this.max_low)*this.overview_viewport.width())||0;var ad=((this.high-this.low)/(this.max_high-this.max_low)*this.overview_viewport.width())||0;var ah=13;this.overview_box.css({left:Z,width:Math.max(ah,ad)}).show();if(ad<ah){this.overview_box.css("left",Z-(ah-ad)/2)}if(this.overview_highlight){this.overview_highlight.css({left:Z,width:ad})}this.update_location(this.low,this.high);if(!ag){for(var ab=0,ac=this.tracks.length;ab<ac;ab++){if(this.tracks[ab]&&this.tracks[ab].enabled){this.tracks[ab].draw()}}for(ab=0,ac=this.label_tracks.length;ab<ac;ab++){this.label_tracks[ab].draw()}}},zoom_in:function(aa,ab){if(this.max_high===0||this.high-this.low<this.min_separation){return}var ac=this.high-this.low,ad=ac/2+this.low,Z=(ac/this.zoom_factor)/2;if(aa){ad=aa/this.viewport_container.width()*(this.high-this.low)+this.low}this.low=Math.round(ad-Z);this.high=Math.round(ad+Z);this.redraw()},zoom_out:function(){if(this.max_high===0){return}var aa=this.high-this.low,ab=aa/2+this.low,Z=(aa*this.zoom_factor)/2;this.low=Math.round(ab-Z);this.high=Math.round(ab+Z);this.redraw()},resize_window:function(){this.viewport_container.height(this.container.height()-this.top_container.height()-this.bottom_container.height());this.nav_container.width(this.container.width());this.redraw()},reset_overview:function(){this.overview_viewport.find("canvas").remove();this.overview_viewport.height(this.default_overview_height);this.overview_box.height(this.default_overview_height);this.overview_close.hide();this.overview_highlight.hide()}});var o=function(ab,af){this.track=ab;this.name=af.name;this.params=[];var am=af.params;for(var ac=0;ac<am.length;ac++){var ah=am[ac],aa=ah.name,al=ah.label,ad=unescape(ah.html),an=ah.value,aj=ah.type;if(aj==="number"){this.params[this.params.length]=new g(aa,al,ad,an,ah.min,ah.max)}else{if(aj=="select"){this.params[this.params.length]=new J(aa,al,ad,an)}else{console.log("WARNING: unrecognized tool parameter type:",aa,aj)}}}this.parent_div=$("<div/>").addClass("dynamic-tool").hide();this.parent_div.bind("drag",function(ap){ap.stopPropagation()}).bind("click",function(ap){ap.stopPropagation()}).bind("dblclick",function(ap){ap.stopPropagation()});var ak=$("<div class='tool-name'>").appendTo(this.parent_div).text(this.name);var ai=this.params;var ag=this;$.each(this.params,function(aq,au){var at=$("<div>").addClass("param-row").appendTo(ag.parent_div);var ap=$("<div>").addClass("param-label").text(au.label).appendTo(at);var ar=$("<div/>").addClass("slider").html(au.html).appendTo(at);ar.find(":input").val(au.value);$("<div style='clear: both;'/>").appendTo(at)});this.parent_div.find("input").click(function(){$(this).select()});var ao=$("<div>").addClass("param-row").appendTo(this.parent_div);var ae=$("<input type='submit'>").attr("value","Run on complete dataset").appendTo(ao);var Z=$("<input type='submit'>").attr("value","Run on visible region").css("margin-left","3em").appendTo(ao);var ag=this;Z.click(function(){ag.run_on_region()});ae.click(function(){ag.run_on_dataset()})};n(o.prototype,{get_param_values_dict:function(){var Z={};this.parent_div.find(":input").each(function(){var aa=$(this).attr("name"),ab=$(this).val();Z[aa]=JSON.stringify(ab)});return Z},get_param_values:function(){var aa=[];var Z={};this.parent_div.find(":input").each(function(){var ab=$(this).attr("name"),ac=$(this).val();if(ab){aa[aa.length]=ac}});return aa},run_on_dataset:function(){var Z=this;Z.run({dataset_id:this.track.original_dataset_id,tool_id:Z.name},function(aa){show_modal(Z.name+" is Running",Z.name+" is running on the complete dataset. Tool outputs are in dataset's history.",{Close:hide_modal})})},run_on_region:function(){var Z={dataset_id:this.track.original_dataset_id,chrom:this.track.view.chrom,low:this.track.view.low,high:this.track.view.high,tool_id:this.name},ab=this.track,aa=Z.tool_id+ab.tool_region_and_parameters_str(Z.chrom,Z.low,Z.high),ac;if(ab.track_type==="FeatureTrack"){ac=new P(aa,view,ab.hda_ldda,undefined,{},{},ab)}this.track.add_track(ac);ac.content_div.text("Starting job.");this.run(Z,function(ad){ac.dataset_id=ad.dataset_id;ac.content_div.text("Running job.");ac.init()})},run:function(aa,ab){$.extend(aa,this.get_param_values_dict());var Z=function(){$.getJSON(rerun_tool_url,aa,function(ac){if(ac==="no converter"){new_track.container_div.addClass("error");new_track.content_div.text(F)}else{if(ac.error){new_track.container_div.addClass("error");new_track.content_div.text(v+ac.message)}else{if(ac==="pending"){new_track.container_div.addClass("pending");new_track.content_div.text("Converting input data so that it can be easily reused.");setTimeout(Z,2000)}else{ab(ac)}}}})};Z()}});var J=function(aa,Z,ab,ac){this.name=aa;this.label=Z;this.html=ab;this.value=ac};var g=function(ab,aa,ad,ae,ac,Z){J.call(this,ab,aa,ad,ae);this.min=ac;this.max=Z};var h=function(aa,Z,ab,ac){this.name=aa;this.index=Z;this.tool_id=ab;this.tool_exp_name=ac};var Q=function(aa,Z,ab,ac){h.call(this,aa,Z,ab,ac);this.low=-Number.MAX_VALUE;this.high=Number.MAX_VALUE;this.min=Number.MAX_VALUE;this.max=-Number.MAX_VALUE;this.slider=null;this.slider_label=null};n(Q.prototype,{applies_to:function(Z){if(Z.length>this.index){return true}return false},keep:function(Z){if(!this.applies_to(Z)){return true}var aa=parseInt(Z[this.index]);return(isNaN(aa)||(aa>=this.low&&aa<=this.high))},update_attrs:function(aa){var Z=false;if(!this.applies_to(aa)){return Z}if(aa[this.index]<this.min){this.min=Math.floor(aa[this.index]);Z=true}if(aa[this.index]>this.max){this.max=Math.ceil(aa[this.index]);Z=true}return Z},update_ui_elt:function(){var ab=function(ae,ac){var ad=ac-ae;return(ad<=2?0.01:1)};var aa=this.slider.slider("option","min"),Z=this.slider.slider("option","max");if(this.min<aa||this.max>Z){this.slider.slider("option","min",this.min);this.slider.slider("option","max",this.max);this.slider.slider("option","step",ab(this.min,this.max));this.slider.slider("option","values",[this.min,this.max])}}});var V=function(ab,ak){this.track=ab;this.filters=[];for(var af=0;af<ak.length;af++){var Z=ak[af],aa=Z.name,aj=Z.type,ah=Z.index,am=Z.tool_id,ac=Z.tool_exp_name;if(aj==="int"||aj==="float"){this.filters[af]=new Q(aa,ah,am,ac)}else{console.log("ERROR: unsupported filter: ",aa,aj)}}var ai=function(an,ao,ap){an.click(function(){var aq=ao.text();max=parseFloat(ap.slider("option","max")),input_size=(max<=1?4:max<=1000000?max.toString().length:6),multi_value=false;if(ap.slider("option","values")){input_size=2*input_size+1;multi_value=true}ao.text("");$("<input type='text'/>").attr("size",input_size).attr("maxlength",input_size).attr("value",aq).appendTo(ao).focus().select().click(function(ar){ar.stopPropagation()}).blur(function(){$(this).remove();ao.text(aq)}).keyup(function(aw){if(aw.keyCode===27){$(this).trigger("blur")}else{if(aw.keyCode===13){var au=ap.slider("option","min"),ar=ap.slider("option","max"),av=function(ax){return(isNaN(ax)||ax>ar||ax<au)},at=$(this).val();if(!multi_value){at=parseFloat(at);if(av(at)){alert("Parameter value must be in the range ["+au+"-"+ar+"]");return $(this)}}else{at=at.split("-");at=[parseFloat(at[0]),parseFloat(at[1])];if(av(at[0])||av(at[1])){alert("Parameter value must be in the range ["+au+"-"+ar+"]");return $(this)}}ap.slider((multi_value?"values":"value"),at)}}})})};this.parent_div=$("<div/>").addClass("filters").hide();this.parent_div.bind("drag",function(an){an.stopPropagation()}).bind("click",function(an){an.stopPropagation()}).bind("dblclick",function(an){an.stopPropagation()}).bind("keydown",function(an){an.stopPropagation()});var ad=this;$.each(this.filters,function(au,ao){var aq=$("<div/>").addClass("slider-row").appendTo(ad.parent_div);var an=$("<div/>").addClass("slider-label").appendTo(aq);var aw=$("<span/>").addClass("slider-name").text(ao.name+" ").appendTo(an);var ap=$("<span/>");var ar=$("<span/>").addClass("slider-value").appendTo(an).append("[").append(ap).append("]");var av=$("<div/>").addClass("slider").appendTo(aq);ao.control_element=$("<div/>").attr("id",ao.name+"-filter-control").appendTo(av);var at=[0,0];ao.control_element.slider({range:true,min:Number.MAX_VALUE,max:-Number.MIN_VALUE,values:[0,0],slide:function(ax,ay){at=ay.values;ap.text(ay.values[0]+"-"+ay.values[1]);setTimeout(function(){if(ay.values[0]==at[0]&&ay.values[1]==at[1]){var az=ay.values;ap.text(az[0]+"-"+az[1]);ao.low=az[0];ao.high=az[1];ad.track.draw(true,true)}},50)},change:function(ax,ay){ao.control_element.slider("option","slide").call(ao.control_element,ax,ay)}});ao.slider=ao.control_element;ao.slider_label=ap;ai(ar,ap,ao.control_element);$("<div style='clear: both;'/>").appendTo(aq)});if(this.filters.length!=0){var al=$("<div>").addClass("param-row").appendTo(this.parent_div);var ag=$("<input type='submit'>").attr("value","Run on complete dataset").appendTo(al);var ae=this;ag.click(function(){ae.run_on_dataset()})}};n(V.prototype,{run_on_dataset:function(){var ag=function(al,aj,ak){if(!(aj in al)){al[aj]=ak}return al[aj]};var ad={},aa,ac,ae;for(var af=0;af<this.filters.length;af++){aa=this.filters[af];if(aa.tool_id){if(aa.min!=aa.low){ac=ag(ad,aa.tool_id,[]);ac[ac.length]=aa.tool_exp_name+" >= "+aa.min}if(aa.max!=aa.high){ac=ag(ad,aa.tool_id,[]);ac[ac.length]=aa.tool_exp_name+" <= "+aa.max}}}for(var ai in ad){var Z=ad[ai],ab="("+Z.join(") and (")+")",ah={cond:ab,input:this.track.dataset_id,target_dataset_id:this.track.dataset_id,tool_id:ai};$.getJSON(run_tool_url,ah,function(aj){if(aj.error){new_track.container_div.addClass("error");new_track.content_div.text(v+aj.message)}else{show_modal("Filter Dataset",ai+" is running on the complete dataset. Tool outputs are in dataset's history.",{Close:hide_modal})}})}}});var U=function(Z){this.track=Z.track;this.params=Z.params;this.values={};if(Z.saved_values){this.restore_values(Z.saved_values)}this.onchange=Z.onchange};n(U.prototype,{restore_values:function(Z){var aa=this;$.each(this.params,function(ab,ac){if(Z[ac.key]!==undefined){aa.values[ac.key]=Z[ac.key]}else{aa.values[ac.key]=ac.default_value}})},build_form:function(){var aa=this;var Z=$("<div />");$.each(this.params,function(ae,ac){if(!ac.hidden){var ab="param_"+ae;var aj=$("<div class='form-row' />").appendTo(Z);aj.append($("<label />").attr("for",ab).text(ac.label+":"));if(ac.type==="bool"){aj.append($('<input type="checkbox" />').attr("id",ab).attr("name",ab).attr("checked",aa.values[ac.key]))}else{if(ac.type==="color"){var ag=aa.values[ac.key];var af=$("<input />").attr("id",ab).attr("name",ab).val(ag);var ah=$("<div class='tipsy tipsy-north' style='position: absolute;' />").hide();var ad=$("<div style='background-color: black; padding: 10px;'></div>").appendTo(ah);var ai=$("<div/>").appendTo(ad).farbtastic({width:100,height:100,callback:af,color:ag});$("<div />").append(af).append(ah).appendTo(aj).bind("click",function(ak){ah.css({left:$(this).position().left+($(af).width()/2)-60,top:$(this).position().top+$(this.height)}).show();$(document).bind("click.color-picker",function(){ah.hide();$(document).unbind("click.color-picker")});ak.stopPropagation()})}else{aj.append($("<input />").attr("id",ab).attr("name",ab).val(aa.values[ac.key]))}}}});return Z},update_from_form:function(Z){var ab=this;var aa=false;$.each(this.params,function(ac,ae){if(!ae.hidden){var af="param_"+ac;var ad=Z.find("#"+af).val();if(ae.type==="float"){ad=parseFloat(ad)}else{if(ae.type==="int"){ad=parseInt(ad)}else{if(ae.type==="bool"){ad=Z.find("#"+af).is(":checked")}}}if(ad!==ab.values[ae.key]){ab.values[ae.key]=ad;aa=true}}});if(aa){this.onchange()}}});var b=function(ab,aa,Z){this.index=ab;this.resolution=aa;this.canvas=$("<div class='track-tile'/>").append(Z)};var l=function(ab,aa,Z,ac){b.call(this,ab,aa,Z);this.max_val=ac};var K=function(ab,aa,Z){b.call(this,ab,aa,Z)};var j=function(aa,Z,ad,ab,ac){this.name=aa;this.view=Z;this.parent_element=ad;this.data_url=(ab?ab:default_data_url);this.data_url_extra_params={};this.data_query_wait=(ac?ac:G);this.dataset_check_url=converted_datasets_state_url;this.container_div=$("<div />").addClass("track").css("position","relative");if(!this.hidden){this.header_div=$("<div class='track-header' />").appendTo(this.container_div);if(this.view.editor){this.drag_div=$("<div class='draghandle' />").appendTo(this.header_div)}this.name_div=$("<div class='menubutton popup' />").appendTo(this.header_div);this.name_div.text(this.name);this.name_div.attr("id",this.name.replace(/\s+/g,"-").replace(/[^a-zA-Z0-9\-]/g,"").toLowerCase())}this.content_div=$("<div class='track-content'>").appendTo(this.container_div);this.parent_element.append(this.container_div)};n(j.prototype,{init:function(){var Z=this;Z.enabled=false;Z.tile_cache.clear();Z.data_cache.clear();Z.initial_canvas=undefined;Z.content_div.css("height","auto");Z.container_div.removeClass("nodata error pending");if(!Z.dataset_id){return}$.getJSON(converted_datasets_state_url,{hda_ldda:Z.hda_ldda,dataset_id:Z.dataset_id,chrom:Z.view.chrom},function(aa){if(!aa||aa==="error"||aa.kind==="error"){Z.container_div.addClass("error");Z.content_div.text(m);if(aa.message){var ac=Z.view.tracks.indexOf(Z);var ab=$(" <a href='javascript:void(0);'></a>").text("View error").bind("click",function(){show_modal("Trackster Error","<pre>"+aa.message+"</pre>",{Close:hide_modal})});Z.content_div.append(ab)}}else{if(aa==="no converter"){Z.container_div.addClass("error");Z.content_div.text(F)}else{if(aa==="no data"||(aa.data!==undefined&&(aa.data===null||aa.data.length===0))){Z.container_div.addClass("nodata");Z.content_div.text(A)}else{if(aa==="pending"){Z.container_div.addClass("pending");Z.content_div.text(q);setTimeout(function(){Z.init()},Z.data_query_wait)}else{if(aa.status==="data"){if(aa.valid_chroms){Z.valid_chroms=aa.valid_chroms;Z.make_name_popup_menu()}Z.content_div.text(T);if(Z.view.chrom){Z.content_div.text("");Z.content_div.css("height",Z.height_px+"px");Z.enabled=true;$.when(Z.predraw_init()).done(function(){Z.container_div.removeClass("nodata error pending");Z.draw()})}}}}}}})},predraw_init:function(){},update_name:function(Z){this.old_name=this.name;this.name=Z;this.name_div.text(this.name)},revert_name:function(){this.name=this.old_name;this.name_div.text(this.name)}});var I=function(ah,af,ai){var aa=this,aj=aa.view;this.filters_manager=(ah!==undefined?new V(this,ah):undefined);this.filters_available=false;this.filters_visible=false;this.tool=(af!==undefined&&obj_length(af)>0?new o(this,af):undefined);this.parent_track=ai;this.child_tracks=[];if(aa.hidden){return}if(this.parent_track){this.header_div.find(".draghandle").removeClass("draghandle").addClass("child-track-icon").addClass("icon-button");this.parent_element.addClass("child-track");this.tool=undefined}aa.child_tracks_container=$("<div/>").addClass("child-tracks-container").hide();aa.container_div.append(aa.child_tracks_container);if(this.filters_manager){this.filters_div=this.filters_manager.parent_div;this.header_div.after(this.filters_div)}if(this.tool){this.dynamic_tool_div=this.tool.parent_div;this.header_div.after(this.dynamic_tool_div)}if(aa.display_modes!==undefined){if(aa.mode_div===undefined){aa.mode_div=$("<div class='right-float menubutton popup' />").appendTo(aa.header_div);var ac=(aa.track_config&&aa.track_config.values.mode?aa.track_config.values.mode:aa.display_modes[0]);aa.mode=ac;aa.mode_div.text(ac);var ab=function(ak){aa.mode_div.text(ak);aa.mode=ak;aa.track_config.values.mode=ak;aa.tile_cache.clear();aa.draw()};var Z={};for(var ad=0,ag=aa.display_modes.length;ad<ag;ad++){var ae=aa.display_modes[ad];Z[ae]=function(ak){return function(){ab(ak)}}(ae)}make_popupmenu(aa.mode_div,Z)}else{aa.mode_div.hide()}}this.make_name_popup_menu()};n(I.prototype,j.prototype,{make_name_popup_menu:function(){var aa=this;var Z={};Z["Edit configuration"]=function(){var ag=function(){hide_modal();$(window).unbind("keypress.check_enter_esc")},ae=function(){aa.track_config.update_from_form($(".dialog-box"));hide_modal();$(window).unbind("keypress.check_enter_esc")},af=function(ah){if((ah.keyCode||ah.which)===27){ag()}else{if((ah.keyCode||ah.which)===13){ae()}}};$(window).bind("keypress.check_enter_esc",af);show_modal("Configure Track",aa.track_config.build_form(),{Cancel:ag,OK:ae})};if(aa.filters_available>0){var ad=(aa.filters_div.is(":visible")?"Hide filters":"Show filters");Z[ad]=function(){aa.filters_visible=(aa.filters_div.is(":visible"));aa.filters_div.toggle();aa.make_name_popup_menu()}}if(aa.tool){var ad=(aa.dynamic_tool_div.is(":visible")?"Hide tool":"Show tool");Z[ad]=function(){if(!aa.dynamic_tool_div.is(":visible")){aa.update_name(aa.name+aa.tool_region_and_parameters_str())}else{menu_option_text="Show dynamic tool";aa.revert_name()}aa.dynamic_tool_div.toggle();aa.make_name_popup_menu()}}if(aa.valid_chroms){Z["List chrom/contigs with data"]=function(){show_modal("Chrom/contigs with data","<p>"+aa.valid_chroms.join("<br/>")+"</p>",{Close:function(){hide_modal()}})}}var ab=view;var ac=function(){$("#no-tracks").show()};if(this.parent_track){ab=this.parent_track;ac=function(){}}Z.Remove=function(){ab.remove_track(aa);if(ab.num_tracks===0){ac()}};make_popupmenu(aa.name_div,Z)},draw:function(Z,ab){var at=this.view.low,af=this.view.high,ah=af-at,aj=this.view.container.width(),ad=aj/ah,ak=this.view.resolution,ac=$("<div style='position: relative;'></div>"),al=function(av,aw,au){return av+"_"+aw+"_"+au};if(!ab){this.content_div.children().remove()}this.content_div.append(ac);this.max_height=0;var an=Math.floor(at/ak/L);var ae=[];var ao=0;while((an*L*ak)<af){var ar=al(aj,ad,an);var ag=this.tile_cache.get(ar);var ap=an*L*this.view.resolution;var aa=ap+L*this.view.resolution;if(!Z&&ag){ae[ae.length]=ag;this.show_tile(ag,ac,ap,ad)}else{this.delayed_draw(Z,ar,an,ak,ac,ad,ae)}an+=1;ao++}var ai=this;var aq=setInterval(function(){if(ae.length===ao){clearInterval(aq);if(ab){var ax=ai.content_div.children();var ay=false;for(var aw=ax.length-1,aC=0;aw>=aC;aw--){var av=$(ax[aw]);if(ay){av.remove()}else{if(av.children().length!==0){ay=true}}}}if(ai.track_type=="FeatureTrack"&&ai.mode=="Histogram"){var aB=-1;for(var aw=0;aw<ae.length;aw++){var aE=ae[aw].max_val;if(aE>aB){aB=aE}}for(var aw=0;aw<ae.length;aw++){if(ae[aw].max_val!==aB){var aD=ae[aw];aD.canvas.remove();ai.delayed_draw(true,al(aj,ad,aD.index),aD.index,aD.resolution,ac,ad,[],{max:aB})}}}if(ai.filters_manager){var au=ai.filters_manager.filters;for(var aA=0;aA<au.length;aA++){au[aA].update_ui_elt()}var az=false;if(ai.example_feature){for(var aA=0;aA<au.length;aA++){if(au[aA].applies_to(ai.example_feature)){az=true;break}}}if(ai.filters_available!==az){ai.filters_available=az;if(!ai.filters_available){ai.filters_div.hide()}ai.make_name_popup_menu()}}}},50);for(var am=0;am<this.child_tracks.length;am++){this.child_tracks[am].draw(Z,ab)}},delayed_draw:function(aa,ah,ab,ad,ai,al,aj,ae){var ac=this,af=ab*L*ad,ak=af+L*ad;var ag=function(au,am,ao,an,ar,at,ap){var aq=ac.draw_tile(am,ao,an,at,ap);ac.tile_cache.set(ah,aq);if(aq===undefined){return}ac.show_tile(aq,ar,af,at);aj[aj.length]=aq};var Z=setTimeout(function(){if(af<=ac.view.high&&ak>=ac.view.low){var am=(aa?undefined:ac.tile_cache.get(ah));if(am){ac.show_tile(am,ai,af,al);aj[aj.length]=am}else{$.when(ac.data_cache.get_data(view.chrom,af,ak,ac.mode,ad,ac.data_url_extra_params)).then(function(an){n(an,ae);if(view.reference_track&&al>view.canvas_manager.char_width_px){$.when(view.reference_track.data_cache.get_data(view.chrom,af,ak,ac.mode,ad,view.reference_track.data_url_extra_params)).then(function(ao){ag(Z,an,ad,ab,ai,al,ao)})}else{ag(Z,an,ad,ab,ai,al)}})}}},50)},show_tile:function(ac,af,ad,ag){var aa=this;var ab=this.view.high-this.view.low,ae=(ad-this.view.low)*ag;if(this.left_offset){ae-=this.left_offset}var Z=ac.canvas;Z.css({position:"absolute",top:0,left:ae,height:""});af.append(Z);aa.max_height=Math.max(aa.max_height,Z.height());aa.content_div.css("height",aa.max_height+"px");af.children().css("height",aa.max_height+"px")},set_overview:function(){var Z=this.view;if(this.initial_canvas&&this.is_overview){Z.overview_close.show();Z.overview_viewport.append(this.initial_canvas);Z.overview_highlight.show().height(this.initial_canvas.height());Z.overview_viewport.height(this.initial_canvas.height()+Z.overview_box.height())}$(window).trigger("resize")},tool_region_and_parameters_str:function(ab,Z,ac){var aa=this,ad=(ab!==undefined&&Z!==undefined&&ac!==undefined?ab+":"+Z+"-"+ac:"all");return" - region=["+ad+"], parameters=["+aa.tool.get_param_values().join(", ")+"]"},add_track:function(Z){Z.track_id=this.track_id+"_"+this.child_tracks.length;Z.container_div.attr("id","track_"+Z.track_id);this.child_tracks_container.append(Z.container_div);B(Z.container_div,".child-track-icon");if(!$(this.child_tracks_container).is(":visible")){this.child_tracks_container.show()}this.child_tracks.push(Z);this.view.has_changes=true},remove_track:function(Z){Z.container_div.fadeOut("slow",function(){$(this).remove()})}});var W=function(Z,aa){this.track_type="LabelTrack";this.hidden=true;j.call(this,null,Z,aa);this.container_div.addClass("label-track")};n(W.prototype,j.prototype,{draw:function(){var ab=this.view,ac=ab.high-ab.low,af=Math.floor(Math.pow(10,Math.floor(Math.log(ac)/Math.log(10)))),Z=Math.floor(ab.low/af)*af,ad=this.view.container.width(),aa=$("<div style='position: relative; height: 1.3em;'></div>");while(Z<ab.high){var ae=(Z-ab.low)/ac*ad;aa.append($("<div class='label'>"+commatize(Z)+"</div>").css({position:"absolute",left:ae-1}));Z+=af}this.content_div.children(":first").remove();this.content_div.append(aa)}});var x=function(Z){this.track_type="ReferenceTrack";this.hidden=true;j.call(this,null,Z,Z.top_labeltrack);I.call(this);Z.reference_track=this;this.left_offset=200;this.height_px=12;this.container_div.addClass("reference-track");this.content_div.css("background","none");this.content_div.css("min-height","0px");this.content_div.css("border","none");this.data_url=reference_url;this.data_url_extra_params={dbkey:Z.dbkey};this.data_cache=new D(y,this,false);this.tile_cache=new c(r)};n(x.prototype,I.prototype,{draw_tile:function(ah,ae,aa,aj){var ad=this,ab=L*ae;if(aj>this.view.canvas_manager.char_width_px){if(ah===null){ad.content_div.css("height","0px");return}var ac=this.view.canvas_manager.new_canvas();var ai=ac.getContext("2d");ac.width=Math.ceil(ab*aj+ad.left_offset);ac.height=ad.height_px;ai.font=ai.canvas.manager.default_font;ai.textAlign="center";for(var af=0,ag=ah.length;af<ag;af++){var Z=Math.round(af*aj);ai.fillText(ah[af],Z+ad.left_offset,10)}return new b(aa,ae,ac)}this.content_div.css("height","0px")}});var k=function(ad,ab,ae,Z,ac){var aa=this;this.track_type="LineTrack";this.display_modes=["Histogram","Line","Filled","Intensity"];this.mode="Histogram";j.call(this,ad,ab,ab.viewport_container);I.call(this);this.min_height_px=16;this.max_height_px=400;this.height_px=80;this.hda_ldda=ae;this.dataset_id=Z;this.original_dataset_id=Z;this.data_cache=new M(y,this);this.tile_cache=new c(r);this.track_config=new U({track:this,params:[{key:"color",label:"Color",type:"color",default_value:"black"},{key:"min_value",label:"Min Value",type:"float",default_value:undefined},{key:"max_value",label:"Max Value",type:"float",default_value:undefined},{key:"mode",type:"string",default_value:this.mode,hidden:true},{key:"height",type:"int",default_value:this.height_px,hidden:true}],saved_values:ac,onchange:function(){aa.vertical_range=aa.prefs.max_value-aa.prefs.min_value;$("#linetrack_"+aa.track_id+"_minval").text(aa.prefs.min_value);$("#linetrack_"+aa.track_id+"_maxval").text(aa.prefs.max_value);aa.tile_cache.clear();aa.draw()}});this.prefs=this.track_config.values;this.height_px=this.track_config.values.height;this.vertical_range=this.track_config.values.max_value-this.track_config.values.min_value;this.add_resize_handle()};n(k.prototype,I.prototype,{add_resize_handle:function(){var Z=this;var ac=false;var ab=false;var aa=$("<div class='track-resize'>");$(Z.container_div).hover(function(){ac=true;aa.show()},function(){ac=false;if(!ab){aa.hide()}});aa.hide().bind("dragstart",function(ad,ae){ab=true;ae.original_height=$(Z.content_div).height()}).bind("drag",function(ae,af){var ad=Math.min(Math.max(af.original_height+af.deltaY,Z.min_height_px),Z.max_height_px);$(Z.content_div).css("height",ad);Z.height_px=ad;Z.draw(true)}).bind("dragend",function(ad,ae){Z.tile_cache.clear();ab=false;if(!ac){aa.hide()}Z.track_config.values.height=Z.height_px}).appendTo(Z.container_div)},predraw_init:function(){var Z=this,aa=Z.view.tracks.indexOf(Z);Z.vertical_range=undefined;return $.getJSON(Z.data_url,{stats:true,chrom:Z.view.chrom,low:null,high:null,hda_ldda:Z.hda_ldda,dataset_id:Z.dataset_id},function(ab){Z.container_div.addClass("line-track");var ad=ab.data;if(isNaN(parseFloat(Z.prefs.min_value))||isNaN(parseFloat(Z.prefs.max_value))){Z.prefs.min_value=ad.min;Z.prefs.max_value=ad.max;$("#track_"+aa+"_minval").val(Z.prefs.min_value);$("#track_"+aa+"_maxval").val(Z.prefs.max_value)}Z.vertical_range=Z.prefs.max_value-Z.prefs.min_value;Z.total_frequency=ad.total_frequency;Z.container_div.find(".yaxislabel").remove();var ae=$("<div />").addClass("yaxislabel").attr("id","linetrack_"+aa+"_minval").text(u(Z.prefs.min_value));var ac=$("<div />").addClass("yaxislabel").attr("id","linetrack_"+aa+"_maxval").text(u(Z.prefs.max_value));ac.css({position:"absolute",top:"24px",left:"10px"});ac.prependTo(Z.container_div);ae.css({position:"absolute",bottom:"2px",left:"10px"});ae.prependTo(Z.container_div)})},draw_tile:function(aj,ad,aa,ai){if(this.vertical_range===undefined){return}var ae=aa*L*ad,ac=L*ad,Z=Math.ceil(ac*ai),ag=this.height_px;var ab=this.view.canvas_manager.new_canvas();ab.width=Z,ab.height=ag;var ah=ab.getContext("2d");var af=new H.LinePainter(aj.data,ae,ae+ac,this.prefs,this.mode);af.draw(ah,Z,ag);return new b(ac,ad,ab)}});var e=function(Z,ae,ad,ah,ag,ab,ac,af){var aa=this;this.track_type="FeatureTrack";this.display_modes=["Auto","Histogram","Dense","Squish","Pack"];this.track_config=new U({track:this,params:[{key:"block_color",label:"Block color",type:"color",default_value:"#444"},{key:"label_color",label:"Label color",type:"color",default_value:"black"},{key:"show_counts",label:"Show summary counts",type:"bool",default_value:true},{key:"mode",type:"string",default_value:this.mode,hidden:true},],saved_values:ag,onchange:function(){aa.tile_cache.clear();aa.draw()}});this.prefs=this.track_config.values;j.call(this,Z,ae,ae.viewport_container);I.call(this,ab,ac,af);this.height_px=0;this.container_div.addClass("feature-track");this.hda_ldda=ad;this.dataset_id=ah;this.original_dataset_id=ah;this.show_labels_scale=0.001;this.showing_details=false;this.summary_draw_height=30;this.inc_slots={};this.start_end_dct={};this.tile_cache=new c(d);this.data_cache=new M(20,this);this.left_offset=200;this.painter=H.LinkedFeaturePainter};n(e.prototype,I.prototype,{update_auto_mode:function(Z){if(this.mode=="Auto"){if(Z=="no_detail"){Z="feature spans"}else{if(Z=="summary_tree"){Z="coverage histogram"}}this.mode_div.text("Auto ("+Z+")")}},incremental_slots:function(ad,aa,ac){var ab=this.view.canvas_manager.dummy_context,Z=this.inc_slots[ad];if(!Z||(Z.mode!==ac)){Z=new (p.FeatureSlotter)(ad,ac==="Pack",w,function(ae){return ab.measureText(ae)});Z.mode=ac;this.inc_slots[ad]=Z}return Z.slot_features(aa)},get_summary_tree_data:function(ad,ag,ab,ao){if(ao>ab-ag){ao=ab-ag}var ak=Math.floor((ab-ag)/ao),an=[],ac=0;var ae=0,af=0,aj,am=0,ah=[],al,ai;var aa=function(ar,aq,at,ap){ar[0]=aq+at*ap;ar[1]=aq+(at+1)*ap};while(am<ao&&ae!==ad.length){var Z=false;for(;am<ao&&!Z;am++){aa(ah,ag,am,ak);for(af=ae;af<ad.length;af++){aj=ad[af].slice(1,3);if(is_overlap(aj,ah)){Z=true;break}}if(Z){break}}data_start_index=af;an[an.length]=al=[ah[0],0];for(;af<ad.length;af++){aj=ad[af].slice(1,3);if(is_overlap(aj,ah)){al[1]++}else{break}}if(al[1]>ac){ac=al[1]}am++}return{max:ac,delta:ak,data:an}},draw_tile:function(am,av,az,ai,ac){var ar=this,aB=az*L*av,aa=(az+1)*L*av,ao=aa-aB,at=Math.ceil(ao*ai),aq=this.mode,aF=25,ad=this.left_offset,an,ae;if(aq==="Auto"){if(am.dataset_type==="summary_tree"){aq=am.dataset_type}else{if(am.extra_info==="no_detail"){aq="no_detail"}else{var aE=am.data;if(this.view.high-this.view.low>E){aq="Squish"}else{aq="Pack"}}}this.update_auto_mode(aq)}if(aq==="summary_tree"||aq==="Histogram"){ae=this.summary_draw_height;this.container_div.find(".yaxislabel").remove();var Z=$("<div />").addClass("yaxislabel");Z.text(am.max);Z.css({position:"absolute",top:"24px",left:"10px",color:this.prefs.label_color});Z.prependTo(this.container_div);var ab=this.view.canvas_manager.new_canvas();ab.width=at+ad;ab.height=ae+N;if(am.dataset_type!="summary_tree"){var aj=this.get_summary_tree_data(am.data,aB,aa,200);if(am.max){aj.max=am.max}am=aj}var aC=new H.SummaryTreePainter(am,aB,aa,this.prefs);var au=ab.getContext("2d");au.translate(ad,N);aC.draw(au,at,ae);return new l(az,av,ab,am.max)}var an,ag=1;if(aq==="no_detail"||aq==="Squish"||aq==="Pack"){ag=this.incremental_slots(ai,am.data,aq);an=this.inc_slots[ai].slots}var ah=[];if(am.data){var ak=this.filters_manager.filters;for(var aw=0,ay=am.data.length;aw<ay;aw++){var af=am.data[aw];var ax=false;var al;for(var aA=0,aD=ak.length;aA<aD;aA++){al=ak[aA];al.update_attrs(af);if(!al.keep(af)){ax=true;break}}if(!ax){ah.push(af)}}}var aC=new (this.painter)(ah,aB,aa,this.prefs,aq,ac);var ae=aC.get_required_height(ag)+z;var ab=this.view.canvas_manager.new_canvas();ab.width=at+ad;ab.height=ae;var au=ab.getContext("2d");au.fillStyle=this.prefs.block_color;au.font=au.canvas.manager.default_font;au.textAlign="right";this.container_div.find(".yaxislabel").remove();if(am.message){au.fillStyle="red";au.textAlign="left";var ap=au.textBaseline;au.textBaseline="top";au.fillRect(ad,0,ab.width-ad,1);au.fillText(am.message,ad,2);au.textBaseline=ap;if(!am.data){return new b(az,av,ab,ae)}}this.example_feature=(am.data.length?am.data[0]:undefined);au.translate(ad,z);aC.draw(au,at,ae,an);return new K(az,av,ab)}});var O=function(ac,aa,ae,Z,ab,ad){e.call(this,ac,aa,ae,Z,ab,ad);this.track_type="VcfTrack";this.painter=H.VariantPainter};n(O.prototype,I.prototype,e.prototype);var R=function(ac,aa,ae,Z,ab,ad){e.call(this,ac,aa,ae,Z,ab,ad);this.track_config=new U({track:this,params:[{key:"block_color",label:"Block color",type:"color",default_value:"#444"},{key:"label_color",label:"Label color",type:"color",default_value:"black"},{key:"show_insertions",label:"Show insertions",type:"bool",default_value:false},{key:"show_differences",label:"Show differences only",type:"bool",default_value:true},{key:"show_counts",label:"Show summary counts",type:"bool",default_value:true},{key:"mode",type:"string",default_value:this.mode,hidden:true},],saved_values:ab,onchange:function(){this.track.tile_cache.clear();this.track.draw()}});this.prefs=this.track_config.values;this.track_type="ReadTrack";this.painter=H.ReadPainter;this.make_name_popup_menu()};n(R.prototype,I.prototype,e.prototype);var P=function(ad,ab,af,Z,ac,ae,aa){e.call(this,ad,ab,af,Z,ac,ae,{},aa);this.track_type="ToolDataFeatureTrack";this.data_url=raw_data_url;this.data_query_wait=1000;this.dataset_check_url=dataset_state_url};n(P.prototype,I.prototype,e.prototype,{predraw_init:function(){var aa=this;var Z=function(){if(aa.data_cache.size()===0){setTimeout(Z,300)}else{aa.data_url=default_data_url;aa.data_query_wait=G;aa.dataset_state_url=converted_datasets_state_url;$.getJSON(aa.dataset_state_url,{dataset_id:aa.dataset_id,hda_ldda:aa.hda_ldda},function(ab){})}};Z()}});S.View=X;S.LineTrack=k;S.FeatureTrack=e;S.ReadTrack=R};var slotting_module=function(c,b){var e=c("class").extend;var d=2,a=5;b.FeatureSlotter=function(j,h,f,g){this.slots={};this.start_end_dct={};this.w_scale=j;this.include_label=h;this.max_rows=f;this.measureText=g};e(b.FeatureSlotter.prototype,{slot_features:function(m){var p=this.w_scale,s=this.slots,h=this.start_end_dct,y=[],A=[],n=0,z=this.max_rows;for(var w=0,x=m.length;w<x;w++){var l=m[w],o=l[0];if(s[o]!==undefined){n=Math.max(n,s[o]);A.push(s[o])}else{y.push(w)}}var q=function(G,H){for(var F=0;F<=z;F++){var D=false,I=h[F];if(I!==undefined){for(var C=0,E=I.length;C<E;C++){var B=I[C];if(H>B[0]&&G<B[1]){D=true;break}}}if(!D){return F}}return -1};for(var w=0,x=y.length;w<x;w++){var l=m[y[w]],o=l[0],u=l[1],f=l[2],r=l[3],g=Math.floor(u*p),k=Math.ceil(f*p),v=this.measureText(r).width,j;if(r!==undefined&&this.include_label){v+=(d+a);if(g-v>=0){g-=v;j="left"}else{k+=v;j="right"}}var t=q(g,k);if(t>=0){if(h[t]===undefined){h[t]=[]}h[t].push([g,k]);s[o]=t;n=Math.max(n,t)}else{}}return n+1}})};var painters_module=function(j,w){var t=j("class").extend;var o=function(H,z,F,y,E,C){if(C===undefined){C=4}var B=y-z;var A=E-F;var D=Math.floor(Math.sqrt(B*B+A*A)/C);var I=B/D;var G=A/D;var x;for(x=0;x<D;x++,z+=I,F+=G){if(x%2!==0){continue}H.fillRect(z,F,C,1)}};var p=function(A,z,x,D){var C=z-D/2,B=z+D/2,E=x-Math.sqrt(D*3/2);A.beginPath();A.moveTo(C,E);A.lineTo(B,E);A.lineTo(z,x);A.lineTo(C,E);A.strokeStyle=this.fillStyle;A.fill();A.stroke();A.closePath()};var m=function(z,B,x,y,A){this.data=z;this.view_start=B;this.view_end=x;this.prefs=t({},this.default_prefs,y);this.mode=A};m.prototype.default_prefs={};var u=function(z,B,x,y,A){m.call(this,z,B,x,y,A)};u.prototype.default_prefs={show_counts:false};u.prototype.draw=function(M,z,L){var E=this.view_start,O=this.view_end-this.view_start,N=z/O;var J=this.data.data,I=this.data.delta,G=this.data.max,B=L;delta_x_px=Math.ceil(I*N);M.save();for(var C=0,D=J.length;C<D;C++){var H=Math.floor((J[C][0]-E)*N);var F=J[C][1];if(!F){continue}var K=F/G*L;if(F!==0&&K<1){K=1}M.fillStyle=this.prefs.block_color;M.fillRect(H,B-K,delta_x_px,K);var A=4;if(this.prefs.show_counts&&(M.measureText(F).width+A)<delta_x_px){M.fillStyle=this.prefs.label_color;M.textAlign="center";M.fillText(F,H+(delta_x_px/2),10)}}M.restore()};var c=function(x,B,D,E,z){m.call(this,x,B,D,E,z);if(this.prefs.min_value===undefined){var F=Infinity;for(var y=0,A=this.data.length;y<A;y++){F=Math.min(F,this.data[y][1])}this.prefs.min_value=F}if(this.prefs.max_value===undefined){var C=-Infinity;for(var y=0,A=this.data.length;y<A;y++){C=Math.max(C,this.data[y][1])}this.prefs.max_value=C}};c.prototype.default_prefs={min_value:undefined,max_value:undefined,mode:"Histogram",color:"#000",overflow_color:"#F66"};c.prototype.draw=function(O,N,L){var F=false,H=this.prefs.min_value,D=this.prefs.max_value,K=D-H,z=L,A=this.view_start,M=this.view_end-this.view_start,B=N/M,I=this.mode,S=this.data;O.save();var T=Math.round(L+H/K*L);if(I!=="Intensity"){O.fillStyle="#aaa";O.fillRect(0,T,N,1)}O.beginPath();O.fillStyle=this.prefs.color;var R,E,C;if(S.length>1){C=Math.ceil((S[1][0]-S[0][0])*B)}else{C=10}for(var P=0,Q=S.length;P<Q;P++){R=Math.round((S[P][0]-A)*B);E=S[P][1];if(E===null){if(F&&I==="Filled"){O.lineTo(R,z)}F=false;continue}if(E<H){E=H}else{if(E>D){E=D}}if(I==="Histogram"){E=Math.round(E/K*z);O.fillRect(R,T,C,-E)}else{if(I==="Intensity"){E=255-Math.floor((E-H)/K*255);O.fillStyle="rgb("+E+","+E+","+E+")";O.fillRect(R,0,C,z)}else{E=Math.round(z-(E-H)/K*z);if(F){O.lineTo(R,E)}else{F=true;if(I==="Filled"){O.moveTo(R,z);O.lineTo(R,E)}else{O.moveTo(R,E)}}}}}if(I==="Filled"){if(F){O.lineTo(R,T);O.lineTo(0,T)}O.fill()}else{O.stroke()}var x=-1,J=-1;O.fillStyle=this.prefs.overflow_color;var G;for(var P=0,Q=S.length;P<Q;P++){E=S[P][1];R=Math.round((S[P][0]-A)*B);if(J>=0&&(E===null||E<D)){O.fillRect(J,0,G+C-J,2);J=-1}else{if(x>=0&&(E===null||E>H)){O.fillRect(x,L-2,G+C-x,2);x=-1}}if(E!==null&&E>D&&J<0){J=R}else{if(E!==null&&E<H&&x<0){x=R}}G=R}O.restore()};var n=function(z,B,x,y,A){m.call(this,z,B,x,y,A)};n.prototype.default_prefs={block_color:"#FFF",connector_color:"#FFF"};t(n.prototype,{get_required_height:function(y){var x=y_scale=this.get_row_height(),z=this.mode;if(z==="no_detail"||z==="Squish"||z==="Pack"){x=y*y_scale}return x+Math.max(Math.round(y_scale/2),5)},draw:function(J,A,I,F){var D=this.data,G=this.view_start,K=this.view_end;J.save();J.fillStyle=this.prefs.block_color;J.textAlign="right";var N=this.view_end-this.view_start,M=A/N,z=this.get_row_height();for(var C=0,E=D.length;C<E;C++){var L=D[C],B=L[0],x=L[1],y=L[2],H=(F&&F[B]!==undefined?F[B]:null);if((x<K&&y>G)&&(this.mode=="Dense"||H!==null)){this.draw_element(J,this.mode,L,H,G,K,M,z,A)}}J.restore()}});var d=10,h=3,l=5,v=10,f=1,r=3,e=3,a=9,k=2,g="#ccc";var q=function(z,B,x,y,A){n.call(this,z,B,x,y,A)};t(q.prototype,n.prototype,{get_row_height:function(){var y=this.mode,x;if(y==="Dense"){x=d}else{if(y==="no_detail"){x=h}else{if(y==="Squish"){x=l}else{x=v}}}return x},draw_element:function(J,C,R,E,L,ab,af,ag,x){var O=R[0],ad=R[1],V=R[2],M=R[3],W=Math.floor(Math.max(0,(ad-L)*af)),K=Math.ceil(Math.min(x,Math.max(0,(V-L)*af))),U=(C==="Dense"?0:(0+E))*ag,I,Z,N=null,ah=null,A=this.prefs.block_color,Y=this.prefs.label_color;if(C=="Dense"){E=1}if(C==="no_detail"){J.fillStyle=A;J.fillRect(W,U+5,K-W,f)}else{var H=R[4],T=R[5],X=R[6],B=R[7];if(T&&X){N=Math.floor(Math.max(0,(T-L)*af));ah=Math.ceil(Math.min(x,Math.max(0,(X-L)*af)))}var ae,P;if(C==="Squish"||C==="Dense"){ae=1;P=e}else{ae=5;P=a}if(!B){if(R.strand){if(R.strand==="+"){J.fillStyle=J.canvas.manager.get_pattern("right_strand_inv")}else{if(R.strand==="-"){J.fillStyle=J.canvas.manager.get_pattern("left_strand_inv")}}}else{J.fillStyle=A}J.fillRect(W,U,K-W,P)}else{var G,Q;if(C==="Squish"||C==="Dense"){J.fillStyle=g;G=U+Math.floor(e/2)+1;Q=1}else{if(H){var G=U;var Q=P;if(H==="+"){J.fillStyle=J.canvas.manager.get_pattern("right_strand")}else{if(H==="-"){J.fillStyle=J.canvas.manager.get_pattern("left_strand")}}}else{J.fillStyle=g;G+=(e/2)+1;Q=1}}J.fillRect(W,G,K-W,Q);for(var ac=0,z=B.length;ac<z;ac++){var D=B[ac],y=Math.floor(Math.max(0,(D[0]-L)*af)),S=Math.ceil(Math.min(x,Math.max((D[1]-L)*af)));if(y>S){continue}J.fillStyle=A;J.fillRect(y,U+(P-ae)/2+1,S-y,ae);if(N!==undefined&&X>T&&!(y>ah||S<N)){var aa=Math.max(y,N),F=Math.min(S,ah);J.fillRect(aa,U+1,F-aa,P);if(B.length==1&&C=="Pack"){if(H==="+"){J.fillStyle=J.canvas.manager.get_pattern("right_strand_inv")}else{if(H==="-"){J.fillStyle=J.canvas.manager.get_pattern("left_strand_inv")}}if(aa+14<F){aa+=2;F-=2}J.fillRect(aa,U+1,F-aa,P)}}}}if(C==="Pack"&&ad>L){J.fillStyle=Y;if(L===0&&W-J.measureText(M).width<0){J.textAlign="left";J.fillText(M,K+k,U+8)}else{J.textAlign="right";J.fillText(M,W-k,U+8)}J.fillStyle=A}}}});var b=function(z,B,x,y,A){n.call(this,z,B,x,y,A)};t(b.prototype,n.prototype,{draw_element:function(Q,L,F,B,T,z,I,R,O){var F=data[i],H=F[0],P=F[1],A=F[2],K=F[3],D=Math.floor(Math.max(0,(P-T)*I)),G=Math.ceil(Math.min(O,Math.max(0,(A-T)*I))),C=(L==="Dense"?0:(0+B))*R,x,U,y=null,J=null;if(no_label){Q.fillStyle=block_color;Q.fillRect(D+left_offset,C+5,G-D,1)}else{var S=F[4],N=F[5],E=F[6];x=9;U=1;Q.fillRect(D+left_offset,C,G-D,x);if(L!=="Dense"&&K!==undefined&&P>T){Q.fillStyle=label_color;if(T===0&&D-Q.measureText(K).width<0){Q.textAlign="left";Q.fillText(K,G+2+left_offset,C+8)}else{Q.textAlign="right";Q.fillText(K,D-2+left_offset,C+8)}Q.fillStyle=block_color}var M=S+" / "+N;if(P>T&&Q.measureText(M).width<(G-D)){Q.fillStyle="white";Q.textAlign="center";Q.fillText(M,left_offset+D+(G-D)/2,C+8);Q.fillStyle=block_color}}}});var s=function(A,C,x,z,B,y){n.call(this,A,C,x,z,B);this.ref_seq=y};s.prototype.default_prefs=t({},n.prototype.default_prefs,{show_insertions:false});t(s.prototype,n.prototype,{get_row_height:function(){var x,y=this.mode;if(y==="Dense"){x=d}else{if(y==="Squish"){x=l}else{x=v;if(this.prefs.show_insertions){x*=2}}}return x},draw_read:function(T,O,K,Y,z,S,H,E,D){T.textAlign="center";var R=this,y=[Y,z],N=0,U=0,Q=0;ref_seq=this.ref_seq,char_width_px=T.canvas.manager.char_width_px;var ad=[];if((O==="Pack"||this.mode==="Auto")&&E!==undefined&&K>char_width_px){Q=Math.round(K/2)}if(!H){H=[[0,E.length]]}for(var L=0,W=H.length;L<W;L++){var I=H[L],A="MIDNSHP=X"[I[0]],M=I[1];if(A==="H"||A==="S"){N-=M}var F=S+N,ac=Math.floor(Math.max(0,(F-Y)*K)),G=Math.floor(Math.max(0,(F+M-Y)*K));if(ac===G){G+=1}switch(A){case"H":break;case"S":case"M":case"=":if(is_overlap([F,F+M],y)){var P=E.slice(U,U+M);if(Q>0){T.fillStyle=this.prefs.block_color;T.fillRect(ac-Q,D+1,G-ac,9);T.fillStyle=g;for(var aa=0,x=P.length;aa<x;aa++){if(this.prefs.show_differences&&ref_seq){var J=ref_seq[F-Y+aa];if(!J||J.toLowerCase()===P[aa].toLowerCase()){continue}}if(F+aa>=Y&&F+aa<=z){var ab=Math.floor(Math.max(0,(F+aa-Y)*K));T.fillText(P[aa],ab,D+9)}}}else{T.fillStyle=this.prefs.block_color;T.fillRect(ac,D+4,G-ac,e)}}U+=M;N+=M;break;case"N":T.fillStyle=g;T.fillRect(ac-Q,D+5,G-ac,1);N+=M;break;case"D":T.fillStyle="red";T.fillRect(ac-Q,D+4,G-ac,3);N+=M;break;case"P":break;case"I":var X=ac-Q;if(is_overlap([F,F+M],y)){var P=E.slice(U,U+M);if(this.prefs.show_insertions){var C=ac-(G-ac)/2;if((O==="Pack"||this.mode==="Auto")&&E!==undefined&&K>char_width_px){T.fillStyle="yellow";T.fillRect(C-Q,D-9,G-ac,9);ad[ad.length]={type:"triangle",data:[X,D+4,5]};T.fillStyle=g;switch(seq_tile_overlap){case (OVERLAP_START):P=P.slice(Y-F);break;case (OVERLAP_END):P=P.slice(0,F-z);break;case (CONTAINED_BY):break;case (CONTAINS):P=P.slice(Y-F,F-z);break}for(var aa=0,x=P.length;aa<x;aa++){var ab=Math.floor(Math.max(0,(F+aa-Y)*K));T.fillText(P[aa],ab-(G-ac)/2,D)}}else{T.fillStyle="yellow";T.fillRect(C,D+(this.mode!=="Dense"?2:5),G-ac,(O!=="Dense"?e:r))}}else{if((O==="Pack"||this.mode==="Auto")&&E!==undefined&&K>char_width_px){ad[ad.length]={type:"text",data:[P.length,X,D+9]}}else{}}}U+=M;break;case"X":U+=M;break}}T.fillStyle="yellow";var Z,B,ae;for(var V=0;V<ad.length;V++){Z=ad[V];B=Z.type;ae=Z.data;if(B==="text"){T.save();T.font="bold "+T.font;T.fillText(ae[0],ae[1],ae[2]);T.restore()}else{if(B=="triangle"){p(T,ae[0],ae[1],ae[2])}}}},draw_element:function(Q,L,D,A,T,y,H,R,O){var G=D[0],P=D[1],z=D[2],I=D[3],C=Math.floor(Math.max(0,(P-T)*H)),E=Math.ceil(Math.min(O,Math.max(0,(z-T)*H))),B=(L==="Dense"?0:(0+A))*R,U=this.prefs.block_color,F=this.prefs.label_color,N=0;if((L==="Pack"||this.mode==="Auto")&&H>Q.canvas.manager.char_width_px){var N=Math.round(H/2)}Q.fillStyle=U;if(D[5] instanceof Array){var M=Math.floor(Math.max(0,(D[4][0]-T)*H)),K=Math.ceil(Math.min(O,Math.max(0,(D[4][1]-T)*H))),J=Math.floor(Math.max(0,(D[5][0]-T)*H)),x=Math.ceil(Math.min(O,Math.max(0,(D[5][1]-T)*H)));if(D[4][1]>=T&&D[4][0]<=y&&D[4][2]){this.draw_read(Q,L,H,T,y,D[4][0],D[4][2],D[4][3],B)}if(D[5][1]>=T&&D[5][0]<=y&&D[5][2]){this.draw_read(Q,L,H,T,y,D[5][0],D[5][2],D[5][3],B)}if(J>K){Q.fillStyle=g;o(Q,K-N,B+5,J-N,B+5)}}else{Q.fillStyle=U;this.draw_read(Q,L,H,T,y,P,D[4],D[5],B)}if(L==="Pack"&&P>T){Q.fillStyle=this.prefs.label_color;var S=1;if(S===0&&C-Q.measureText(I).width<0){Q.textAlign="left";Q.fillText(I,E+k-N,B+8)}else{Q.textAlign="right";Q.fillText(I,C-k-N,B+8)}Q.fillStyle=U}}});w.SummaryTreePainter=u;w.LinePainter=c;w.LinkedFeaturePainter=q;w.ReadPainter=s;w.VariantPainter=b};(function(d){var c={};var b=function(e){return c[e]};var a=function(f,g){var e={};g(b,e);c[f]=e};a("class",class_module);a("slotting",slotting_module);a("painters",painters_module);a("trackster",trackster_module);for(key in c.trackster){d[key]=c.trackster[key]}})(window);
\ No newline at end of file
--- a/static/scripts/trackster.js Thu May 12 13:38:00 2011 -0400
+++ b/static/scripts/trackster.js Thu May 12 17:12:01 2011 -0400
@@ -999,8 +999,9 @@
$.extend(url_params, this.get_param_values_dict());
// Run tool.
+ // TODO: rewrite to use $.when():
var json_run_tool = function() {
- $.getJSON(run_tool_url, url_params, function(response) {
+ $.getJSON(rerun_tool_url, url_params, function(response) {
if (response === "no converter") {
// No converter available for input datasets, so cannot run tool.
new_track.container_div.addClass("error");
@@ -1046,18 +1047,19 @@
/**
* Filters that enable users to show/hide data points dynamically.
*/
-var Filter = function(name, index, value) {
+var Filter = function(name, index, tool_id, tool_exp_name) {
this.name = name;
+ // Index into payload to filter.
this.index = index;
- this.value = value;
+ this.tool_id = tool_id;
+ // Name to use for filter when building expression for tool.
+ this.tool_exp_name = tool_exp_name;
};
/**
* Number filters have a min, max as well as a low, high; low and high are used
*/
-var NumberFilter = function(name, index) {
- this.name = name;
- // Index into payload to filter.
- this.index = index;
+var NumberFilter = function(name, index, tool_id, tool_exp_name) {
+ Filter.call(this, name, index, tool_id, tool_exp_name);
// Filter low/high. These values are used to filter elements.
this.low = -Number.MAX_VALUE;
this.high = Number.MAX_VALUE;
@@ -1148,12 +1150,18 @@
this.track = track;
this.filters = [];
for (var i = 0; i < filters_list.length; i++) {
- var filter_dict = filters_list[i];
- var name = filter_dict.name, type = filter_dict.type, index = filter_dict.index;
+ var
+ filter_dict = filters_list[i],
+ name = filter_dict.name,
+ type = filter_dict.type,
+ index = filter_dict.index,
+ tool_id = filter_dict.tool_id,
+ tool_exp_name = filter_dict.tool_exp_name;
if (type === 'int' || type === 'float') {
- this.filters[i] = new NumberFilter(name, index);
+ this.filters[i] =
+ new NumberFilter(name, index, tool_id, tool_exp_name);
} else {
- this.filters[i] = new Filter(name, index, type);
+ console.log("ERROR: unsupported filter: ", name, type)
}
}
@@ -1283,9 +1291,84 @@
// Add to clear floating layout.
$("<div style='clear: both;'/>").appendTo(filter_div);
- });
+ });
+
+ // Add button to filter complete dataset.
+ if (this.filters.length != 0) {
+ var run_buttons_row = $("<div>").addClass("param-row").appendTo(this.parent_div);
+ var run_on_dataset_button = $("<input type='submit'>").attr("value", "Run on complete dataset").appendTo(run_buttons_row);
+ var filter_manager = this;
+ run_on_dataset_button.click( function() {
+ filter_manager.run_on_dataset();
+ });
+ }
};
+extend( FiltersManager.prototype, {
+ run_on_dataset: function() {
+ // Get or create dictionary item.
+ var get_or_create_dict_item = function(dict, key, new_item) {
+ // Add new item to dict if
+ if (!(key in dict)) {
+ dict[key] = new_item;
+ }
+ return dict[key];
+ };
+
+ //
+ // Find and group active filters. Active filters are those being used to hide data.
+ // Filters with the same tool id are grouped.
+ //
+ var active_filters = {},
+ filter,
+ tool_filter_conditions,
+ operation;
+ for (var i = 0; i < this.filters.length; i++) {
+ filter = this.filters[i];
+ if (filter.tool_id) {
+ // Add filtering conditions if filter low/high are set.
+ if (filter.min != filter.low) {
+ tool_filter_conditions = get_or_create_dict_item(active_filters, filter.tool_id, []);
+ tool_filter_conditions[tool_filter_conditions.length] = filter.tool_exp_name + " >= " + filter.min;
+ }
+ if (filter.max != filter.high) {
+ tool_filter_conditions = get_or_create_dict_item(active_filters, filter.tool_id, []);
+ tool_filter_conditions[tool_filter_conditions.length] = filter.tool_exp_name + " <= " + filter.max;
+ }
+ }
+ }
+
+ //
+ // Use tools to run filters.
+ //
+ for (var tool_id in active_filters) {
+ var
+ tool_filters = active_filters[tool_id],
+ tool_filter_str = "(" + tool_filters.join(") and (") + ")",
+ url_params = {
+ cond: tool_filter_str,
+ input: this.track.dataset_id,
+ target_dataset_id: this.track.dataset_id,
+ tool_id: tool_id
+ };
+
+ $.getJSON(run_tool_url, url_params, function(response) {
+ if (response.error) {
+ // General error.
+ new_track.container_div.addClass("error");
+ new_track.content_div.text(DATA_CANNOT_RUN_TOOL + response.message);
+ }
+ else {
+ // Job submitted and running.
+ show_modal("Filter Dataset",
+ tool_id + " is running on the complete dataset. Tool outputs are in dataset's history.",
+ { "Close" : hide_modal } );
+ }
+ });
+ }
+ }
+});
+
/**
* Container for track configuration data.
*/
--- a/templates/tracks/browser.mako Thu May 12 13:38:00 2011 -0400
+++ b/templates/tracks/browser.mako Thu May 12 17:12:01 2011 -0400
@@ -65,6 +65,7 @@
var default_data_url = "${h.url_for( action='data' )}",
raw_data_url = "${h.url_for( action='raw_data' )}",
run_tool_url = "${h.url_for( action='run_tool' )}",
+ rerun_tool_url = "${h.url_for( action='rerun_tool' )}",
reference_url = "${h.url_for( action='reference' )}",
chrom_url = "${h.url_for( action='chroms' )}",
dataset_state_url = "${h.url_for( action='dataset_state' )}",
--- a/templates/visualization/display.mako Thu May 12 13:38:00 2011 -0400
+++ b/templates/visualization/display.mako Thu May 12 17:12:01 2011 -0400
@@ -64,6 +64,7 @@
var default_data_url = "${h.url_for( controller='/tracks', action='data' )}",
raw_data_url = "${h.url_for( controller='/tracks', action='raw_data' )}",
run_tool_url = "${h.url_for( controller='/tracks', action='run_tool' )}",
+ rerun_tool_url = "${h.url_for( controller='/tracks', action='run_tool' )}",
reference_url = "${h.url_for( controller='/tracks', action='reference' )}",
chrom_url = "${h.url_for( controller='/tracks', action='chroms' )}",
dataset_state_url = "${h.url_for( controller='/tracks', action='dataset_state' )}",
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0

commit/galaxy-central: kellyv: Updated help section of BWA wrappers to include tags for the RG header record type
by Bitbucket 12 May '11
by Bitbucket 12 May '11
12 May '11
1 new changeset in galaxy-central:
http://bitbucket.org/galaxy/galaxy-central/changeset/c99af10d79a4/
changeset: r5549:c99af10d79a4
user: kellyv
date: 2011-05-12 19:38:00
summary: Updated help section of BWA wrappers to include tags for the RG header record type
affected #: 2 files (120 bytes)
--- a/tools/sr_mapping/bwa_color_wrapper.xml Thu May 12 12:20:52 2011 -0400
+++ b/tools/sr_mapping/bwa_color_wrapper.xml Thu May 12 13:38:00 2011 -0400
@@ -137,23 +137,23 @@
<option value="no">No</option></param><when value="yes">
- <param name="rgid" type="text" size="25" label="Read group identifier. Each @RG line must have a unique ID. The value of ID is used in the RG
+ <param name="rgid" type="text" size="25" label="Read group identifier (ID). Each @RG line must have a unique ID. The value of ID is used in the RG
tags of alignment records. Must be unique among all read groups in header section." help="Required if RG specified. Read group
IDs may be modified when merging SAM files in order to handle collisions." />
- <param name="rgcn" type="text" size="25" label="Sequencing center that produced the read" help="Optional" />
- <param name="rgds" type="text" size="25" label="Description" help="Optional" />
- <param name="rgdt" type="text" size="25" label="Date that run was produced (ISO8601 format date or date/time, like YYYY-MM-DD)" help="Optional" />
- <param name="rgfo" type="text" size="25" label="Flow order. The array of nucleotide bases that correspond to the nucleotides used for each
-flow of each read." help="Optional. Multi-base flows are encoded in IUPAC format, and non-nucleotide flows by
+ <param name="rgcn" type="text" size="25" label="Sequencing center that produced the read (CN)" help="Optional" />
+ <param name="rgds" type="text" size="25" label="Description (DS)" help="Optional" />
+ <param name="rgdt" type="text" size="25" label="Date that run was produced (DT)" help="Optional. ISO8601 format date or date/time, like YYYY-MM-DD" />
+ <param name="rgfo" type="text" size="25" label="Flow order (FO). The array of nucleotide bases that correspond to the nucleotides used for each
+flow of each read." help="Optional. Multi-base flows are encoded in IUPAC format, and non-nucleotide flows by
various other characters. Format : /\*|[ACMGRSVTWYHKDBN]+/" />
- <param name="rgks" type="text" size="25" label="The array of nucleotide bases that correspond to the key sequence of each read" help="Optional" />
- <param name="rglb" type="text" size="25" label="Library name" help="Required if RG specified" />
- <param name="rgpg" type="text" size="25" label="Programs used for processing the read group" help="Optional" />
- <param name="rgpi" type="text" size="25" label="Predicted median insert size" help="Optional" />
- <param name="rgpl" type="text" size="25" label="Platform/technology used to produce the reads. Valid values : CAPILLARY, LS454, ILLUMINA,
-SOLID, HELICOS, IONTORRENT and PACBIO" help="Required if RG specified" />
- <param name="rgpu" type="text" size="25" label="Platform unit (e.g. flowcell-barcode.lane for Illumina or slide for SOLiD). Unique identifier." help="Optional" />
- <param name="rgsm" type="text" size="25" label="Sample. Use pool name where a pool is being sequenced" help="Required if RG specified" />
+ <param name="rgks" type="text" size="25" label="The array of nucleotide bases that correspond to the key sequence of each read (KS)" help="Optional" />
+ <param name="rglb" type="text" size="25" label="Library name (LB)" help="Required if RG specified" />
+ <param name="rgpg" type="text" size="25" label="Programs used for processing the read group (PG)" help="Optional" />
+ <param name="rgpi" type="text" size="25" label="Predicted median insert size (PI)" help="Optional" />
+ <param name="rgpl" type="text" size="25" label="Platform/technology used to produce the reads (PL)" help="Required if RG specified. Valid values : CAPILLARY, LS454, ILLUMINA,
+SOLID, HELICOS, IONTORRENT and PACBIO" />
+ <param name="rgpu" type="text" size="25" label="Platform unit (PU)" help="Optional. Unique identifier (e.g. flowcell-barcode.lane for Illumina or slide for SOLiD)" />
+ <param name="rgsm" type="text" size="25" label="Sample (SM)" help="Required if RG specified. Use pool name where a pool is being sequenced" /></when><when value="no" /></conditional>
--- a/tools/sr_mapping/bwa_wrapper.xml Thu May 12 12:20:52 2011 -0400
+++ b/tools/sr_mapping/bwa_wrapper.xml Thu May 12 13:38:00 2011 -0400
@@ -130,23 +130,23 @@
<option value="no">No</option></param><when value="yes">
- <param name="rgid" type="text" size="25" label="Read group identifier. Each @RG line must have a unique ID. The value of ID is used in the RG
+ <param name="rgid" type="text" size="25" label="Read group identifier (ID). Each @RG line must have a unique ID. The value of ID is used in the RG
tags of alignment records. Must be unique among all read groups in header section." help="Required if RG specified. Read group
IDs may be modified when merging SAM files in order to handle collisions." />
- <param name="rgcn" type="text" size="25" label="Sequencing center that produced the read" help="Optional" />
- <param name="rgds" type="text" size="25" label="Description" help="Optional" />
- <param name="rgdt" type="text" size="25" label="Date that run was produced (ISO8601 format date or date/time, like YYYY-MM-DD)" help="Optional" />
- <param name="rgfo" type="text" size="25" label="Flow order. The array of nucleotide bases that correspond to the nucleotides used for each
+ <param name="rgcn" type="text" size="25" label="Sequencing center that produced the read (CN)" help="Optional" />
+ <param name="rgds" type="text" size="25" label="Description (DS)" help="Optional" />
+ <param name="rgdt" type="text" size="25" label="Date that run was produced (DT)" help="Optional. ISO8601 format date or date/time, like YYYY-MM-DD" />
+ <param name="rgfo" type="text" size="25" label="Flow order (FO). The array of nucleotide bases that correspond to the nucleotides used for each
flow of each read." help="Optional. Multi-base flows are encoded in IUPAC format, and non-nucleotide flows by
various other characters. Format : /\*|[ACMGRSVTWYHKDBN]+/" />
- <param name="rgks" type="text" size="25" label="The array of nucleotide bases that correspond to the key sequence of each read" help="Optional" />
- <param name="rglb" type="text" size="25" label="Library name" help="Required if RG specified" />
- <param name="rgpg" type="text" size="25" label="Programs used for processing the read group" help="Optional" />
- <param name="rgpi" type="text" size="25" label="Predicted median insert size" help="Optional" />
- <param name="rgpl" type="text" size="25" label="Platform/technology used to produce the reads. Valid values : CAPILLARY, LS454, ILLUMINA,
-SOLID, HELICOS, IONTORRENT and PACBIO" help="Required if RG specified" />
- <param name="rgpu" type="text" size="25" label="Platform unit (e.g. flowcell-barcode.lane for Illumina or slide for SOLiD). Unique identifier." help="Optional" />
- <param name="rgsm" type="text" size="25" label="Sample. Use pool name where a pool is being sequenced" help="Required if RG specified" />
+ <param name="rgks" type="text" size="25" label="The array of nucleotide bases that correspond to the key sequence of each read (KS)" help="Optional" />
+ <param name="rglb" type="text" size="25" label="Library name (LB)" help="Required if RG specified" />
+ <param name="rgpg" type="text" size="25" label="Programs used for processing the read group (PG)" help="Optional" />
+ <param name="rgpi" type="text" size="25" label="Predicted median insert size (PI)" help="Optional" />
+ <param name="rgpl" type="text" size="25" label="Platform/technology used to produce the reads (PL)" help="Required if RG specified. Valid values : CAPILLARY, LS454, ILLUMINA,
+SOLID, HELICOS, IONTORRENT and PACBIO" />
+ <param name="rgpu" type="text" size="25" label="Platform unit (PU)" help="Optional. Unique identifier (e.g. flowcell-barcode.lane for Illumina or slide for SOLiD)" />
+ <param name="rgsm" type="text" size="25" label="Sample (SM)" help="Required if RG specified. Use pool name where a pool is being sequenced" /></when><when value="no" /></conditional>
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0

12 May '11
1 new changeset in galaxy-central:
http://bitbucket.org/galaxy/galaxy-central/changeset/41371f0f6f3d/
changeset: r5548:41371f0f6f3d
user: dan
date: 2011-05-12 18:20:52
summary: Add GATK tool-data to buildbot_setup.sh links.
affected #: 1 file (32 bytes)
--- a/buildbot_setup.sh Thu May 12 12:13:18 2011 -0400
+++ b/buildbot_setup.sh Thu May 12 12:20:52 2011 -0400
@@ -61,6 +61,7 @@
/galaxy/data/location/srma_index.loc
/galaxy/data/taxonomy
/galaxy/data/location/twobit.loc
+/galaxy/software/tool-data/gatk
"
SAMPLES="
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0

commit/galaxy-central: dan: Have GATK file listings written as html, be sorted.
by Bitbucket 12 May '11
by Bitbucket 12 May '11
12 May '11
1 new changeset in galaxy-central:
http://bitbucket.org/galaxy/galaxy-central/changeset/2a9b21e76d77/
changeset: r5547:2a9b21e76d77
user: dan
date: 2011-05-12 18:13:18
summary: Have GATK file listings written as html, be sorted.
affected #: 2 files (49 bytes)
--- a/test-data/gatk/gatk_analyze_covariates/gatk_analyze_covariates_out_1.html Thu May 12 11:55:32 2011 -0400
+++ b/test-data/gatk/gatk_analyze_covariates/gatk_analyze_covariates_out_1.html Thu May 12 12:13:18 2011 -0400
@@ -1,1 +1,17 @@
-<html><head><title>Galaxy - GATK Output</title></head><body><p/><ul><li><a href="A Fake phiX Sample.CycleCovariate.dat">A Fake phiX Sample.CycleCovariate.dat</a></li><li><a href="A Fake phiX Sample.DinucCovariate.dat">A Fake phiX Sample.DinucCovariate.dat</a></li><li><a href="A Fake phiX Sample.HomopolymerCovariate.dat">A Fake phiX Sample.HomopolymerCovariate.dat</a></li><li><a href="A Fake phiX Sample.MinimumNQSCovariate.dat">A Fake phiX Sample.MinimumNQSCovariate.dat</a></li><li><a href="A Fake phiX Sample.PositionCovariate.dat">A Fake phiX Sample.PositionCovariate.dat</a></li><li><a href="A Fake phiX Sample.QualityScoreCovariate.dat">A Fake phiX Sample.QualityScoreCovariate.dat</a></li><li><a href="A.qual_diff_v_Fake.pdf">A.qual_diff_v_Fake.pdf</a></li></ul></body></html>
\ No newline at end of file
+<html>
+<head>
+<title>Galaxy - GATK Output</title>
+</head>
+<body>
+<p/>
+<ul>
+<li><a href="A Fake phiX Sample.CycleCovariate.dat">A Fake phiX Sample.CycleCovariate.dat</a></li>
+<li><a href="A Fake phiX Sample.DinucCovariate.dat">A Fake phiX Sample.DinucCovariate.dat</a></li>
+<li><a href="A Fake phiX Sample.HomopolymerCovariate.dat">A Fake phiX Sample.HomopolymerCovariate.dat</a></li>
+<li><a href="A Fake phiX Sample.MinimumNQSCovariate.dat">A Fake phiX Sample.MinimumNQSCovariate.dat</a></li>
+<li><a href="A Fake phiX Sample.PositionCovariate.dat">A Fake phiX Sample.PositionCovariate.dat</a></li>
+<li><a href="A Fake phiX Sample.QualityScoreCovariate.dat">A Fake phiX Sample.QualityScoreCovariate.dat</a></li>
+<li><a href="A.qual_diff_v_Fake.pdf">A.qual_diff_v_Fake.pdf</a></li>
+</ul>
+</body>
+</html>
--- a/tools/gatk/gatk_wrapper.py Thu May 12 11:55:32 2011 -0400
+++ b/tools/gatk/gatk_wrapper.py Thu May 12 12:13:18 2011 -0400
@@ -37,10 +37,10 @@
return None
def html_report_from_directory( html_out, dir ):
- html_out.write( '<html><head><title>Galaxy - GATK Output</title></head><body><p/><ul>' )
- for fname in os.listdir( dir ):
- html_out.write( '<li><a href="%s">%s</a></li>' % ( fname, fname ) )
- html_out.write( '</ul></body></html>' )
+ html_out.write( '<html>\n<head>\n<title>Galaxy - GATK Output</title>\n</head>\n<body>\n<p/>\n<ul>\n' )
+ for fname in sorted( os.listdir( dir ) ):
+ html_out.write( '<li><a href="%s">%s</a></li>\n' % ( fname, fname ) )
+ html_out.write( '</ul>\n</body>\n</html>\n' )
def __main__():
#Parse Command Line
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0
1 new changeset in galaxy-central:
http://bitbucket.org/galaxy/galaxy-central/changeset/e6ba910e0220/
changeset: r5546:e6ba910e0220
user: natefoo
date: 2011-05-12 17:55:32
summary: Fix test output for picard_ARRG.
affected #: 1 file (1 byte)
--- a/tools/picard/picard_AddOrReplaceReadGroups.xml Thu May 12 11:53:32 2011 -0400
+++ b/tools/picard/picard_AddOrReplaceReadGroups.xml Thu May 12 11:55:32 2011 -0400
@@ -63,7 +63,7 @@
<param name="rgsm" value="sam1" /><param name="rgOpts" value="preSet" /><param name="outputFormat" value="sam" />
- <output name="outFileSam" ftype="picard_ARRG_output1.sam" />
+ <output name="outFileSam" file="picard_ARRG_output1.sam" /></test><!-- Functional tests with Picard bam outputs currently aren't working
<test>
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0

commit/galaxy-central: natefoo: Add a method to add manual builds to buildbot runs.
by Bitbucket 12 May '11
by Bitbucket 12 May '11
12 May '11
1 new changeset in galaxy-central:
http://bitbucket.org/galaxy/galaxy-central/changeset/2650328b4321/
changeset: r5545:2650328b4321
user: natefoo
date: 2011-05-12 17:53:32
summary: Add a method to add manual builds to buildbot runs.
affected #: 2 files (178 bytes)
--- a/buildbot_setup.sh Wed May 11 16:02:06 2011 -0400
+++ b/buildbot_setup.sh Thu May 12 11:53:32 2011 -0400
@@ -135,4 +135,7 @@
echo "Setting up test data location files"
python test-data-repo/location/make_location.py
+echo "Appending tool-data/shared/ucsc/builds.txt.buildbot to tool-data/shared/ucsc/builds.txt"
+cat tool-data/shared/ucsc/builds.txt.buildbot >> tool-data/shared/ucsc/builds.txt
+
python ./scripts/fetch_eggs.py all
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0

commit/galaxy-central: dan: Allow gatk_wrapper.py to run in versions of python<2.6.
by Bitbucket 11 May '11
by Bitbucket 11 May '11
11 May '11
1 new changeset in galaxy-central:
http://bitbucket.org/galaxy/galaxy-central/changeset/4904586054cc/
changeset: r5544:4904586054cc
user: dan
date: 2011-05-11 22:02:06
summary: Allow gatk_wrapper.py to run in versions of python<2.6.
affected #: 2 files (171 bytes)
--- a/tools/gatk/count_covariates.xml Wed May 11 15:43:33 2011 -0400
+++ b/tools/gatk/count_covariates.xml Wed May 11 16:02:06 2011 -0400
@@ -356,7 +356,6 @@
<test><param name="reference_source_selector" value="history" /><param name="ref_file" value="phiX.fasta" ftype="fasta" />
- <param name="target_intervals" value="gatk/gatk_realigner_target_creator/gatk_realigner_target_creator_out_1.gatk_interval" ftype="gatk_interval" /><param name="input_bam" value="gatk/gatk_indel_realigner/gatk_indel_realigner_out_1.bam" ftype="bam" /><param name="input_dbsnp_rod" /><param name="rod_bind_type_selector" value="snps" />
--- a/tools/gatk/gatk_wrapper.py Wed May 11 15:43:33 2011 -0400
+++ b/tools/gatk/gatk_wrapper.py Wed May 11 16:02:06 2011 -0400
@@ -8,8 +8,6 @@
import sys, optparse, os, tempfile, subprocess, shutil
from string import Template
-assert sys.version_info[:2] >= ( 2, 6 )
-
GALAXY_EXT_TO_GATK_EXT = { 'gatk_interval':'intervals', 'bam_index':'bam.bai', 'gatk_dbsnp':'dbsnp', 'picard_interval_list':'interval_list' } #items not listed here, will use the galaxy extension as-is
GALAXY_EXT_TO_GATK_FILE_TYPE = GALAXY_EXT_TO_GATK_EXT #for now, these are the same, but could be different if needed
DEFAULT_GATK_PREFIX = "gatk_file"
@@ -69,7 +67,9 @@
stderr = open_file_from_option( options.stderr, mode = 'wb' )
#if no stderr file is specified, we'll use our own
if stderr is None:
- stderr = tempfile.NamedTemporaryFile( dir=tmp_dir, delete=False )
+ stderr = tempfile.NamedTemporaryFile( dir=tmp_dir )
+ stderr.close()
+ stderr = open( stderr.name, 'w+b' )
proc = subprocess.Popen( args=cmd, stdout=stdout, stderr=stderr, shell=True, cwd=tmp_dir )
return_code = proc.wait()
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0

commit/galaxy-central: kanwei: trackster: Fix border and error not lining up at right place
by Bitbucket 11 May '11
by Bitbucket 11 May '11
11 May '11
1 new changeset in galaxy-central:
http://bitbucket.org/galaxy/galaxy-central/changeset/15ace61775c5/
changeset: r5543:15ace61775c5
user: kanwei
date: 2011-05-11 21:43:33
summary: trackster: Fix border and error not lining up at right place
affected #: 2 files (37 bytes)
--- a/lib/galaxy/visualization/tracks/data_providers.py Wed May 11 15:38:57 2011 -0400
+++ b/lib/galaxy/visualization/tracks/data_providers.py Wed May 11 15:43:33 2011 -0400
@@ -25,7 +25,7 @@
from pysam import csamtools, ctabix
MAX_VALS = 5000 # only display first MAX_VALS features
-ERROR_MAX_VALS = "Only the first " + str(MAX_VALS) + " %s in this tile are displayed."
+ERROR_MAX_VALS = "Only the first " + str(MAX_VALS) + " %s in the region denoted by the red line are displayed."
# Return None instead of NaN to pass jQuery 1.4's strict JSON
def float_nan(n):
--- a/static/scripts/trackster.js Wed May 11 15:38:57 2011 -0400
+++ b/static/scripts/trackster.js Wed May 11 15:43:33 2011 -0400
@@ -2418,7 +2418,7 @@
var data = result.data;
// if ( (data.length && data.length < 4) ||
// (this.view.high - this.view.low > MIN_SQUISH_VIEW_WIDTH) ) {
- if ( this.view.high - this.view.low > MIN_SQUISH_VIEW_WIDTH ) {
+ if ( this.view.high - this.view.low > MIN_SQUISH_VIEW_WIDTH ) {
mode = "Squish";
} else {
mode = "Pack";
@@ -2511,15 +2511,12 @@
// If there is a message, draw it on canvas so that it moves around with canvas, and make the border red
// to indicate region where message is applicable
if (result.message) {
- $(canvas).css({
- "border-top": "1px solid red"
- });
-
ctx.fillStyle = "red";
ctx.textAlign = "left";
var old_base = ctx.textBaseline;
ctx.textBaseline = "top";
- ctx.fillText(result.message, left_offset, 0);
+ ctx.fillRect(left_offset, 0, canvas.width - left_offset, 1);
+ ctx.fillText(result.message, left_offset, 2);
ctx.textBaseline = old_base;
// If there's no data, return.
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0