changeset 0:be6bede22459 draft

Imported from capsule None
author devteam
date Tue, 01 Apr 2014 10:48:14 -0400
parents
children 1d427770e7ec
files analyze_covariates.xml gatk_macros.xml gatk_wrapper.py test-data/gatk/gatk_analyze_covariates/gatk_analyze_covariates_out_1.html test-data/gatk/gatk_analyze_covariates/gatk_analyze_covariates_out_1.log.contains test-data/gatk/gatk_count_covariates/gatk_count_covariates_out_1.csv tool_dependencies.xml
diffstat 7 files changed, 827 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/analyze_covariates.xml	Tue Apr 01 10:48:14 2014 -0400
@@ -0,0 +1,101 @@
+<tool id="gatk_analyze_covariates" name="Analyze Covariates" version="0.0.5">
+  <description>- draw plots</description>
+  <requirements>
+      <requirement type="package" version="1.4">gatk</requirement>
+  </requirements>
+  <macros>
+    <import>gatk_macros.xml</import>
+  </macros>
+  <command interpreter="python">gatk_wrapper.py
+   --max_jvm_heap_fraction "1"
+   --stdout "${output_log}"
+   --html_report_from_directory "${output_html}" "${output_html.files_path}"
+   -p 'java 
+    -jar "${JAVA_JAR_PATH}/AnalyzeCovariates.jar"
+    -recalFile "${input_recal}"
+    -outputDir "${output_html.files_path}"
+    ##--num_threads 4 ##hard coded, for now
+    ##-log "${output_log}"
+    ##-Rscript,--path_to_Rscript path_to_Rscript; on path is good enough         
+    #if $analysis_param_type.analysis_param_type_selector == "advanced":
+        --ignoreQ "${analysis_param_type.ignore_q}"
+        --numRG "${analysis_param_type.num_read_groups}"
+        --max_quality_score "${analysis_param_type.max_quality_score}"
+        --max_histogram_value "${analysis_param_type.max_histogram_value}"
+         ${analysis_param_type.do_indel_quality}
+    #end if
+   '
+  </command>
+  <inputs>
+    <param name="input_recal" type="data" format="csv" label="Covariates table recalibration file" help="-recalFile,--recal_file &amp;lt;recal_file&amp;gt;" />
+    <conditional name="analysis_param_type">
+      <param name="analysis_param_type_selector" type="select" label="Basic or Advanced options">
+        <option value="basic" selected="True">Basic</option>
+        <option value="advanced">Advanced</option>
+      </param>
+      <when value="basic">
+        <!-- Do nothing here -->
+      </when>
+      <when value="advanced">
+        <param name="ignore_q" type="integer" value="5" label="Ignore bases with reported quality less than this number." help="-ignoreQ,--ignoreQ &amp;lt;ignoreQ&amp;gt; "/>
+        <param name="num_read_groups" type="integer" value="-1" label="Only process N read groups." help="-numRG,--numRG &amp;lt;numRG&amp;gt;"/>
+        <param name="max_quality_score" type="integer" value="50" label="Max quality score" help="-maxQ,--max_quality_score &amp;lt;max_quality_score&amp;gt;"/>
+        <param name="max_histogram_value" type="integer" value="0" label="Max histogram value" help="-maxHist,--max_histogram_value &amp;lt;max_histogram_value&amp;gt;"/>
+        <param name="do_indel_quality" type="boolean" truevalue="--do_indel_quality" falsevalue="" label="Do indel quality" help="--do_indel_quality"/>
+      </when>
+    </conditional>
+  </inputs>
+  <outputs>
+    <data format="html" name="output_html" label="${tool.name} on ${on_string} (HTML)" />
+    <data format="txt" name="output_log" label="${tool.name} on ${on_string} (log)" />
+  </outputs>
+  <tests>
+      <test>
+          <param name="input_recal" value="gatk/gatk_count_covariates/gatk_count_covariates_out_1.csv" ftype="csv" /> 
+          <param name="analysis_param_type_selector" value="basic" />
+          <output name="output_html" file="gatk/gatk_analyze_covariates/gatk_analyze_covariates_out_1.html" />
+          <output name="output_log" file="gatk/gatk_analyze_covariates/gatk_analyze_covariates_out_1.log.contains" compare="contains" />
+      </test>
+  </tests>
+  <help>
+**What it does**
+
+Create collapsed versions of the recal csv file and call R scripts to plot residual error versus the various covariates.
+
+For more information on base quality score recalibration using the GATK, see this `tool specific page &lt;http://www.broadinstitute.org/gsa/wiki/index.php/Base_quality_score_recalibration&gt;`_.
+
+To learn about best practices for variant detection using GATK, see this `overview &lt;http://www.broadinstitute.org/gsa/wiki/index.php/Best_Practice_Variant_Detection_with_the_GATK_v3&gt;`_.
+
+If you encounter errors, please view the `GATK FAQ &lt;http://www.broadinstitute.org/gsa/wiki/index.php/Frequently_Asked_Questions&gt;`_.
+
+------
+
+**Inputs**
+
+GenomeAnalysisTK: AnalyzeCovariates accepts an recal CSV file.
+
+
+**Outputs**
+
+The output is in CSV and HTML files with links to PDF graphs and a data files.
+
+
+Go `here &lt;http://www.broadinstitute.org/gsa/wiki/index.php/Input_files_for_the_GATK&gt;`_ for details on GATK file formats.
+
+-------
+
+**Settings**::
+
+ recal_file             The input recal csv file to analyze
+ output_dir             The directory in which to output all the plots and intermediate data files
+ path_to_Rscript        The path to your implementation of Rscript. For Broad users this is maybe /broad/tools/apps/R-2.6.0/bin/Rscript
+ path_to_resources      Path to resources folder holding the Sting R scripts.
+ ignoreQ                Ignore bases with reported quality less than this number.
+ numRG                  Only process N read groups. Default value: -1 (process all read groups)
+ max_quality_score      The integer value at which to cap the quality scores, default is 50
+ max_histogram_value    If supplied, this value will be the max value of the histogram plots
+ do_indel_quality       If supplied, this value will be the max value of the histogram plots
+
+@CITATION_SECTION@
+  </help>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gatk_macros.xml	Tue Apr 01 10:48:14 2014 -0400
@@ -0,0 +1,305 @@
+<macros>
+  <template name="standard_gatk_options">      
+    ##start standard gatk options
+    #if $gatk_param_type.gatk_param_type_selector == "advanced":
+        #for $pedigree in $gatk_param_type.pedigree:
+            -p '--pedigree "${pedigree.pedigree_file}"'
+        #end for
+        #for $pedigree_string in $gatk_param_type.pedigree_string_repeat:
+            -p '--pedigreeString "${pedigree_string.pedigree_string}"'
+        #end for
+        -p '--pedigreeValidationType "${gatk_param_type.pedigree_validation_type}"'
+        #for $read_filter in $gatk_param_type.read_filter:
+            -p '--read_filter "${read_filter.read_filter_type.read_filter_type_selector}"
+            ###raise Exception( str( dir( $read_filter ) ) )
+            #for $name, $param in $read_filter.read_filter_type.iteritems():
+                #if $name not in [ "__current_case__", "read_filter_type_selector" ]:
+                    #if hasattr( $param.input, 'truevalue' ):
+                        ${param}
+                    #else:
+                        --${name} "${param}"
+                    #end if
+                #end if
+            #end for
+            '
+        #end for
+        #for $interval_count, $input_intervals in enumerate( $gatk_param_type.input_interval_repeat ):
+            -d "--intervals" "${input_intervals.input_intervals}" "${input_intervals.input_intervals.ext}" "input_intervals_${interval_count}"
+        #end for
+        
+        #for $interval_count, $input_intervals in enumerate( $gatk_param_type.input_exclude_interval_repeat ):
+            -d "--excludeIntervals" "${input_intervals.input_exclude_intervals}" "${input_intervals.input_exclude_intervals.ext}" "input_exlude_intervals_${interval_count}"
+        #end for
+
+        -p '--interval_set_rule "${gatk_param_type.interval_set_rule}"'
+        
+        -p '--downsampling_type "${gatk_param_type.downsampling_type.downsampling_type_selector}"'
+        #if str( $gatk_param_type.downsampling_type.downsampling_type_selector ) != "NONE":
+            -p '--${gatk_param_type.downsampling_type.downsample_to_type.downsample_to_type_selector} "${gatk_param_type.downsampling_type.downsample_to_type.downsample_to_value}"'
+        #end if
+        -p '
+        --baq "${gatk_param_type.baq}"
+        --baqGapOpenPenalty "${gatk_param_type.baq_gap_open_penalty}"
+        ${gatk_param_type.use_original_qualities}
+        --defaultBaseQualities "${gatk_param_type.default_base_qualities}"
+        --validation_strictness "${gatk_param_type.validation_strictness}"
+        --interval_merging "${gatk_param_type.interval_merging}"
+        ${gatk_param_type.disable_experimental_low_memory_sharding}
+        ${gatk_param_type.non_deterministic_random_seed}
+        '
+        #for $rg_black_list_count, $rg_black_list in enumerate( $gatk_param_type.read_group_black_list_repeat ):
+            #if $rg_black_list.read_group_black_list_type.read_group_black_list_type_selector == "file":
+                -d "--read_group_black_list" "${rg_black_list.read_group_black_list_type.read_group_black_list}" "txt" "input_read_group_black_list_${rg_black_list_count}"
+            #else
+                -p '--read_group_black_list "${rg_black_list.read_group_black_list_type.read_group_black_list}"'
+            #end if
+        #end for
+    #end if
+    
+    #if str( $reference_source.reference_source_selector ) == "history":
+        -d "-R" "${reference_source.ref_file}" "${reference_source.ref_file.ext}" "gatk_input"
+    #end if
+    ##end standard gatk options
+  </template>
+  <xml name="gatk_param_type_conditional">
+    <conditional name="gatk_param_type">
+      <param name="gatk_param_type_selector" type="select" label="Basic or Advanced GATK options">
+        <option value="basic" selected="True">Basic</option>
+        <option value="advanced">Advanced</option>
+      </param>
+      <when value="basic">
+        <!-- Do nothing here -->
+      </when>
+      <when value="advanced">
+        <repeat name="pedigree" title="Pedigree file" help="-ped,--pedigree &amp;lt;pedigree&amp;gt;">
+            <param name="pedigree_file" type="data" format="txt" label="Pedigree files for samples"/>
+        </repeat>
+        <repeat name="pedigree_string_repeat" title="Pedigree string" help="-pedString,--pedigreeString &amp;lt;pedigreeString&amp;gt;">
+            <param name="pedigree_string" type="text" value="" label="Pedigree string for samples"/>
+        </repeat>
+        <param name="pedigree_validation_type" type="select" label="How strict should we be in validating the pedigree information" help="-pedValidationType,--pedigreeValidationType &amp;lt;pedigreeValidationType&amp;gt;">
+          <option value="STRICT" selected="True">STRICT</option>
+          <option value="SILENT">SILENT</option>
+        </param>
+        <repeat name="read_filter" title="Read Filter" help="-rf,--read_filter &amp;lt;read_filter&amp;gt;">
+            <conditional name="read_filter_type">
+              <param name="read_filter_type_selector" type="select" label="Read Filter Type">
+                <option value="BadCigar">BadCigar</option>
+                <option value="BadMate">BadMate</option>
+                <option value="DuplicateRead">DuplicateRead</option>
+                <option value="FailsVendorQualityCheck">FailsVendorQualityCheck</option>
+                <option value="MalformedRead">MalformedRead</option>
+                <option value="MappingQuality">MappingQuality</option>
+                <option value="MappingQualityUnavailable">MappingQualityUnavailable</option>
+                <option value="MappingQualityZero">MappingQualityZero</option>
+                <option value="MateSameStrand">MateSameStrand</option>
+                <option value="MaxInsertSize">MaxInsertSize</option>
+                <option value="MaxReadLength" selected="True">MaxReadLength</option>
+                <option value="MissingReadGroup">MissingReadGroup</option>
+                <option value="NoOriginalQualityScores">NoOriginalQualityScores</option>
+                <option value="NotPrimaryAlignment">NotPrimaryAlignment</option>
+                <option value="Platform454">Platform454</option>
+                <option value="Platform">Platform</option>
+                <option value="PlatformUnit">PlatformUnit</option>
+                <option value="ReadGroupBlackList">ReadGroupBlackList</option>
+                <option value="ReadName">ReadName</option>
+                <option value="ReadStrand">ReadStrand</option>
+                <option value="ReassignMappingQuality">ReassignMappingQuality</option>
+                <option value="Sample">Sample</option>
+                <option value="SingleReadGroup">SingleReadGroup</option>
+                <option value="UnmappedRead">UnmappedRead</option>
+              </param>
+              <when value="BadCigar">
+                  <!-- no extra options -->
+              </when>
+              <when value="BadMate">
+                  <!-- no extra options -->
+              </when>
+              <when value="DuplicateRead">
+                  <!-- no extra options -->
+              </when>
+              <when value="FailsVendorQualityCheck">
+                  <!-- no extra options -->
+              </when>
+              <when value="MalformedRead">
+                  <!-- no extra options -->
+              </when>
+              <when value="MappingQuality">
+                  <param name="min_mapping_quality_score" type="integer" value="10" label="Minimum read mapping quality required to consider a read for calling"/>
+              </when>
+              <when value="MappingQualityUnavailable">
+                  <!-- no extra options -->
+              </when>
+              <when value="MappingQualityZero">
+                  <!-- no extra options -->
+              </when>
+              <when value="MateSameStrand">
+                  <!-- no extra options -->
+              </when>
+              <when value="MaxInsertSize">
+                  <param name="maxInsertSize" type="integer" value="1000000" label="Discard reads with insert size greater than the specified value"/>
+              </when>
+              <when value="MaxReadLength">
+                  <param name="maxReadLength" type="integer" value="76" label="Max Read Length"/>
+              </when>
+              <when value="MissingReadGroup">
+                  <!-- no extra options -->
+              </when>
+              <when value="NoOriginalQualityScores">
+                  <!-- no extra options -->
+              </when>
+              <when value="NotPrimaryAlignment">
+                  <!-- no extra options -->
+              </when>
+              <when value="Platform454">
+                  <!-- no extra options -->
+              </when>
+              <when value="Platform">
+                  <param name="PLFilterName" type="text" value="" label="Discard reads with RG:PL attribute containing this string"/>
+              </when>
+              <when value="PlatformUnit">
+                  <!-- no extra options -->
+              </when>
+              <when value="ReadGroupBlackList">
+                  <!-- no extra options -->
+              </when>
+              <when value="ReadName">
+                  <param name="readName" type="text" value="" label="Filter out all reads except those with this read name"/>
+              </when>
+              <when value="ReadStrand">
+                  <param name="filterPositive" type="boolean" truevalue="--filterPositive" falsevalue="" label="Discard reads on the forward strand"/>
+              </when>
+              <when value="ReassignMappingQuality">
+                  <param name="default_mapping_quality" type="integer" value="60" label="Default read mapping quality to assign to all reads"/>
+              </when>
+              <when value="Sample">
+                  <param name="sample_to_keep" type="text" value="" label="The name of the sample(s) to keep, filtering out all others"/>
+              </when>
+              <when value="SingleReadGroup">
+                  <param name="read_group_to_keep" type="integer" value="76" label="The name of the read group to keep, filtering out all others"/>
+              </when>
+              <when value="UnmappedRead">
+                  <!-- no extra options -->
+              </when>
+            </conditional>
+        </repeat>
+        <repeat name="input_interval_repeat" title="Operate on Genomic intervals" help="-L,--intervals &amp;lt;intervals&amp;gt;">
+          <param name="input_intervals" type="data" format="bed,gatk_interval,picard_interval_list,vcf" label="Genomic intervals" />
+        </repeat>
+        <repeat name="input_exclude_interval_repeat" title="Exclude Genomic intervals" help="-XL,--excludeIntervals &amp;lt;excludeIntervals&amp;gt;">
+          <param name="input_exclude_intervals" type="data" format="bed,gatk_interval,picard_interval_list,vcf" label="Genomic intervals" />
+        </repeat>
+        
+        <param name="interval_set_rule" type="select" label="Interval set rule" help="-isr,--interval_set_rule &amp;lt;interval_set_rule&amp;gt;">
+          <option value="UNION" selected="True">UNION</option>
+          <option value="INTERSECTION">INTERSECTION</option>
+        </param>
+        
+        <conditional name="downsampling_type">
+          <param name="downsampling_type_selector" type="select" label="Type of reads downsampling to employ at a given locus" help="-dt,--downsampling_type &amp;lt;downsampling_type&amp;gt;">
+            <option value="NONE" selected="True">NONE</option>
+            <option value="ALL_READS">ALL_READS</option>
+            <option value="BY_SAMPLE">BY_SAMPLE</option>
+          </param>
+          <when value="NONE">
+              <!-- no more options here -->
+          </when>
+          <when value="ALL_READS">
+              <conditional name="downsample_to_type">
+                  <param name="downsample_to_type_selector" type="select" label="Downsample method">
+                      <option value="downsample_to_fraction" selected="True">Downsample by Fraction</option>
+                      <option value="downsample_to_coverage">Downsample by Coverage</option>
+                  </param>
+                  <when value="downsample_to_fraction">
+                      <param name="downsample_to_value" type="float" label="Fraction [0.0-1.0] of reads to downsample to" value="1" min="0" max="1" help="-dfrac,--downsample_to_fraction &amp;lt;downsample_to_fraction&amp;gt;"/>
+                  </when>
+                  <when value="downsample_to_coverage">
+                      <param name="downsample_to_value" type="integer" label="Coverage to downsample to at any given locus" value="0" help="-dcov,--downsample_to_coverage &amp;lt;downsample_to_coverage&amp;gt;"/>
+                  </when>
+              </conditional>
+          </when>
+          <when value="BY_SAMPLE">
+              <conditional name="downsample_to_type">
+                  <param name="downsample_to_type_selector" type="select" label="Downsample method">
+                      <option value="downsample_to_fraction" selected="True">Downsample by Fraction</option>
+                      <option value="downsample_to_coverage">Downsample by Coverage</option>
+                  </param>
+                  <when value="downsample_to_fraction">
+                      <param name="downsample_to_value" type="float" label="Fraction [0.0-1.0] of reads to downsample to" value="1" min="0" max="1" help="-dfrac,--downsample_to_fraction &amp;lt;downsample_to_fraction&amp;gt;"/>
+                  </when>
+                  <when value="downsample_to_coverage">
+                      <param name="downsample_to_value" type="integer" label="Coverage to downsample to at any given locus" value="0" help="-dcov,--downsample_to_coverage &amp;lt;downsample_to_coverage&amp;gt;"/>
+                  </when>
+              </conditional>
+          </when>
+        </conditional>
+        <param name="baq" type="select" label="Type of BAQ calculation to apply in the engine" help="-baq,--baq &amp;lt;baq&amp;gt;">
+          <option value="OFF" selected="True">OFF</option>
+          <option value="CALCULATE_AS_NECESSARY">CALCULATE_AS_NECESSARY</option>
+          <option value="RECALCULATE">RECALCULATE</option>
+        </param>
+        <param name="baq_gap_open_penalty" type="float" label="BAQ gap open penalty (Phred Scaled)" value="40" help="Default value is 40. 30 is perhaps better for whole genome call sets. -baqGOP,--baqGapOpenPenalty &amp;lt;baqGapOpenPenalty&amp;gt;" />
+        <param name="use_original_qualities" type="boolean" truevalue="--useOriginalQualities" falsevalue="" label="Use the original base quality scores from the OQ tag" help="-OQ,--useOriginalQualities" />
+        <param name="default_base_qualities" type="integer" label="Value to be used for all base quality scores, when some are missing" value="-1" help="-DBQ,--defaultBaseQualities &amp;lt;defaultBaseQualities&amp;gt;"/>
+        <param name="validation_strictness" type="select" label="How strict should we be with validation" help="-S,--validation_strictness &amp;lt;validation_strictness&amp;gt;">
+          <option value="STRICT" selected="True">STRICT</option>
+          <option value="LENIENT">LENIENT</option>
+          <option value="SILENT">SILENT</option>
+          <!-- <option value="DEFAULT_STRINGENCY">DEFAULT_STRINGENCY</option> listed in docs, but not valid value...-->
+        </param>
+        <param name="interval_merging" type="select" label="Interval merging rule" help="-im,--interval_merging &amp;lt;interval_merging&amp;gt;">
+          <option value="ALL" selected="True">ALL</option>
+          <option value="OVERLAPPING_ONLY">OVERLAPPING_ONLY</option>
+        </param>
+        
+        <repeat name="read_group_black_list_repeat" title="Read group black list" help="-rgbl,--read_group_black_list &amp;lt;read_group_black_list&amp;gt;">
+          <conditional name="read_group_black_list_type">
+            <param name="read_group_black_list_type_selector" type="select" label="Type of reads read group black list">
+              <option value="file" selected="True">Filters in file</option>
+              <option value="text">Specify filters as a string</option>
+            </param>
+            <when value="file">
+              <param name="read_group_black_list" type="data" format="txt" label="Read group black list file" />
+            </when>
+            <when value="text">
+              <param name="read_group_black_list" type="text" value="tag:string" label="Read group black list tag:string" />
+            </when>
+          </conditional>
+        </repeat>
+        
+        <param name="disable_experimental_low_memory_sharding" type="boolean" truevalue="--disable_experimental_low_memory_sharding" falsevalue="" label="Disable experimental low-memory sharding functionality." checked="False" help="--disable_experimental_low_memory_sharding"/>
+        <param name="non_deterministic_random_seed" type="boolean" truevalue="--nonDeterministicRandomSeed" falsevalue="" label="Makes the GATK behave non deterministically, that is, the random numbers generated will be different in every run" checked="False"  help="-ndrs,--nonDeterministicRandomSeed"/>
+        
+      </when>
+    </conditional>    
+  </xml>
+  <xml name="analysis_type_conditional">
+    <conditional name="analysis_param_type">
+      <param name="analysis_param_type_selector" type="select" label="Basic or Advanced Analysis options">
+        <option value="basic" selected="True">Basic</option>
+        <option value="advanced">Advanced</option>
+      </param>
+      <when value="basic">
+        <!-- Do nothing here -->
+      </when>
+      <when value="advanced">
+        <yield />
+      </when>
+    </conditional>
+  </xml>
+  <xml name="reference_source_selector_param">
+    <param name="reference_source_selector" type="select" label="Choose the source for the reference list">
+      <option value="cached">Locally cached</option>
+      <option value="history">History</option>
+    </param>
+  </xml>
+  <token name="@CITATION_SECTION@">------
+
+**Citation**
+
+For the underlying tool, please cite `DePristo MA, Banks E, Poplin R, Garimella KV, Maguire JR, Hartl C, Philippakis AA, del Angel G, Rivas MA, Hanna M, McKenna A, Fennell TJ, Kernytsky AM, Sivachenko AY, Cibulskis K, Gabriel SB, Altshuler D, Daly MJ. A framework for variation discovery and genotyping using next-generation DNA sequencing data. Nat Genet. 2011 May;43(5):491-8. &lt;http://www.ncbi.nlm.nih.gov/pubmed/21478889&gt;`_
+
+If you use this tool in Galaxy, please cite Blankenberg D, et al. *In preparation.*
+
+  </token>
+</macros>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gatk_wrapper.py	Tue Apr 01 10:48:14 2014 -0400
@@ -0,0 +1,126 @@
+#!/usr/bin/env python
+#Dan Blankenberg
+
+"""
+A wrapper script for running the GenomeAnalysisTK.jar commands.
+"""
+
+import sys, optparse, os, tempfile, subprocess, shutil
+from binascii import unhexlify
+from string import Template
+
+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"
+CHUNK_SIZE = 2**20 #1mb
+
+
+def cleanup_before_exit( tmp_dir ):
+    if tmp_dir and os.path.exists( tmp_dir ):
+        shutil.rmtree( tmp_dir )
+
+def gatk_filename_from_galaxy( galaxy_filename, galaxy_ext, target_dir = None, prefix = None ):
+    suffix = GALAXY_EXT_TO_GATK_EXT.get( galaxy_ext, galaxy_ext )
+    if prefix is None:
+        prefix = DEFAULT_GATK_PREFIX
+    if target_dir is None:
+        target_dir = os.getcwd()
+    gatk_filename = os.path.join( target_dir, "%s.%s" % ( prefix, suffix ) )
+    os.symlink( galaxy_filename, gatk_filename )
+    return gatk_filename
+
+def gatk_filetype_argument_substitution( argument, galaxy_ext ):
+    return argument % dict( file_type = GALAXY_EXT_TO_GATK_FILE_TYPE.get( galaxy_ext, galaxy_ext ) )
+
+def open_file_from_option( filename, mode = 'rb' ):
+    if filename:
+        return open( filename, mode = mode )
+    return None
+
+def html_report_from_directory( html_out, dir ):
+    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 index_bam_files( bam_filenames, tmp_dir ):
+    for bam_filename in bam_filenames:
+        bam_index_filename = "%s.bai" % bam_filename
+        if not os.path.exists( bam_index_filename ):
+            #need to index this bam file
+            stderr_name = tempfile.NamedTemporaryFile( prefix = "bam_index_stderr" ).name
+            command = 'samtools index %s %s' % ( bam_filename, bam_index_filename )
+            proc = subprocess.Popen( args=command, shell=True, stderr=open( stderr_name, 'wb' ) )
+            return_code = proc.wait()
+            if return_code:
+                for line in open( stderr_name ):
+                    print >> sys.stderr, line
+                os.unlink( stderr_name ) #clean up
+                cleanup_before_exit( tmp_dir )
+                raise Exception( "Error indexing BAM file" )
+            os.unlink( stderr_name ) #clean up
+
+def __main__():
+    #Parse Command Line
+    parser = optparse.OptionParser()
+    parser.add_option( '-p', '--pass_through', dest='pass_through_options', action='append', type="string", help='These options are passed through directly to GATK, without any modification.' )
+    parser.add_option( '-o', '--pass_through_options', dest='pass_through_options_encoded', action='append', type="string", help='These options are passed through directly to GATK, with decoding from binascii.unhexlify.' )
+    parser.add_option( '-d', '--dataset', dest='datasets', action='append', type="string", nargs=4, help='"-argument" "original_filename" "galaxy_filetype" "name_prefix"' )
+    parser.add_option( '', '--max_jvm_heap', dest='max_jvm_heap', action='store', type="string", default=None, help='If specified, the maximum java virtual machine heap size will be set to the provide value.' )
+    parser.add_option( '', '--max_jvm_heap_fraction', dest='max_jvm_heap_fraction', action='store', type="int", default=None, help='If specified, the maximum java virtual machine heap size will be set to the provide value as a fraction of total physical memory.' )
+    parser.add_option( '', '--stdout', dest='stdout', action='store', type="string", default=None, help='If specified, the output of stdout will be written to this file.' )
+    parser.add_option( '', '--stderr', dest='stderr', action='store', type="string", default=None, help='If specified, the output of stderr will be written to this file.' )
+    parser.add_option( '', '--html_report_from_directory', dest='html_report_from_directory', action='append', type="string", nargs=2, help='"Target HTML File" "Directory"')
+    (options, args) = parser.parse_args()
+    
+    tmp_dir = tempfile.mkdtemp( prefix='tmp-gatk-' )
+    if options.pass_through_options:
+        cmd = ' '.join( options.pass_through_options )
+    else:
+        cmd = ''
+    if options.pass_through_options_encoded:
+        cmd = '%s %s' % ( cmd, ' '.join( map( unhexlify, options.pass_through_options_encoded ) ) )
+    if options.max_jvm_heap is not None:
+        cmd = cmd.replace( 'java ', 'java -Xmx%s ' % ( options.max_jvm_heap ), 1 )
+    elif options.max_jvm_heap_fraction is not None:
+        cmd = cmd.replace( 'java ', 'java -XX:DefaultMaxRAMFraction=%s  -XX:+UseParallelGC ' % ( options.max_jvm_heap_fraction ), 1 )
+    bam_filenames = []
+    if options.datasets:
+        for ( dataset_arg, filename, galaxy_ext, prefix ) in options.datasets:
+            gatk_filename = gatk_filename_from_galaxy( filename, galaxy_ext, target_dir = tmp_dir, prefix = prefix )
+            if dataset_arg:
+                cmd = '%s %s "%s"' % ( cmd, gatk_filetype_argument_substitution( dataset_arg, galaxy_ext ), gatk_filename )
+            if galaxy_ext == "bam":
+                bam_filenames.append( gatk_filename )
+    index_bam_files( bam_filenames, tmp_dir )
+    #set up stdout and stderr output options
+    stdout = open_file_from_option( options.stdout, mode = 'wb' )
+    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( prefix="gatk-stderr-", dir=tmp_dir )
+    
+    proc = subprocess.Popen( args=cmd, stdout=stdout, stderr=stderr, shell=True, cwd=tmp_dir )
+    return_code = proc.wait()
+    
+    if return_code:
+        stderr_target = sys.stderr
+    else:
+        stderr_target = sys.stdout
+    stderr.flush()
+    stderr.seek(0)
+    while True:
+        chunk = stderr.read( CHUNK_SIZE )
+        if chunk:
+            stderr_target.write( chunk )
+        else:
+            break
+    stderr.close()
+    #generate html reports
+    if options.html_report_from_directory:
+        for ( html_filename, html_dir ) in options.html_report_from_directory:
+            html_report_from_directory( open( html_filename, 'wb' ), html_dir )
+    
+    cleanup_before_exit( tmp_dir )
+
+if __name__=="__main__": __main__()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/gatk/gatk_analyze_covariates/gatk_analyze_covariates_out_1.html	Tue Apr 01 10:48:14 2014 -0400
@@ -0,0 +1,34 @@
+<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.CycleCovariate.dat.Cycle_hist.pdf">A Fake phiX Sample.CycleCovariate.dat.Cycle_hist.pdf</a></li>
+<li><a href="A Fake phiX Sample.CycleCovariate.dat.qual_diff_v_Cycle.pdf">A Fake phiX Sample.CycleCovariate.dat.qual_diff_v_Cycle.pdf</a></li>
+<li><a href="A Fake phiX Sample.CycleCovariate.dat.reported_qual_v_Cycle.pdf">A Fake phiX Sample.CycleCovariate.dat.reported_qual_v_Cycle.pdf</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.DinucCovariate.dat.Dinuc_hist.pdf">A Fake phiX Sample.DinucCovariate.dat.Dinuc_hist.pdf</a></li>
+<li><a href="A Fake phiX Sample.DinucCovariate.dat.qual_diff_v_Dinuc.pdf">A Fake phiX Sample.DinucCovariate.dat.qual_diff_v_Dinuc.pdf</a></li>
+<li><a href="A Fake phiX Sample.DinucCovariate.dat.reported_qual_v_Dinuc.pdf">A Fake phiX Sample.DinucCovariate.dat.reported_qual_v_Dinuc.pdf</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.HomopolymerCovariate.dat.Homopolymer_hist.pdf">A Fake phiX Sample.HomopolymerCovariate.dat.Homopolymer_hist.pdf</a></li>
+<li><a href="A Fake phiX Sample.HomopolymerCovariate.dat.qual_diff_v_Homopolymer.pdf">A Fake phiX Sample.HomopolymerCovariate.dat.qual_diff_v_Homopolymer.pdf</a></li>
+<li><a href="A Fake phiX Sample.HomopolymerCovariate.dat.reported_qual_v_Homopolymer.pdf">A Fake phiX Sample.HomopolymerCovariate.dat.reported_qual_v_Homopolymer.pdf</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.MinimumNQSCovariate.dat.MinimumNQS_hist.pdf">A Fake phiX Sample.MinimumNQSCovariate.dat.MinimumNQS_hist.pdf</a></li>
+<li><a href="A Fake phiX Sample.MinimumNQSCovariate.dat.qual_diff_v_MinimumNQS.pdf">A Fake phiX Sample.MinimumNQSCovariate.dat.qual_diff_v_MinimumNQS.pdf</a></li>
+<li><a href="A Fake phiX Sample.MinimumNQSCovariate.dat.reported_qual_v_MinimumNQS.pdf">A Fake phiX Sample.MinimumNQSCovariate.dat.reported_qual_v_MinimumNQS.pdf</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.PositionCovariate.dat.Position_hist.pdf">A Fake phiX Sample.PositionCovariate.dat.Position_hist.pdf</a></li>
+<li><a href="A Fake phiX Sample.PositionCovariate.dat.qual_diff_v_Position.pdf">A Fake phiX Sample.PositionCovariate.dat.qual_diff_v_Position.pdf</a></li>
+<li><a href="A Fake phiX Sample.PositionCovariate.dat.reported_qual_v_Position.pdf">A Fake phiX Sample.PositionCovariate.dat.reported_qual_v_Position.pdf</a></li>
+<li><a href="A Fake phiX Sample.QualityScoreCovariate.dat">A Fake phiX Sample.QualityScoreCovariate.dat</a></li>
+<li><a href="A Fake phiX Sample.QualityScoreCovariate.dat.quality_emp_hist.pdf">A Fake phiX Sample.QualityScoreCovariate.dat.quality_emp_hist.pdf</a></li>
+<li><a href="A Fake phiX Sample.QualityScoreCovariate.dat.quality_emp_v_stated.pdf">A Fake phiX Sample.QualityScoreCovariate.dat.quality_emp_v_stated.pdf</a></li>
+<li><a href="A Fake phiX Sample.QualityScoreCovariate.dat.quality_rep_hist.pdf">A Fake phiX Sample.QualityScoreCovariate.dat.quality_rep_hist.pdf</a></li>
+</ul>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/gatk/gatk_analyze_covariates/gatk_analyze_covariates_out_1.log.contains	Tue Apr 01 10:48:14 2014 -0400
@@ -0,0 +1,9 @@
+Program Name: org.broadinstitute.sting.analyzecovariates.AnalyzeCovariates
+Reading in input csv file...
+...Done!
+Writing out intermediate tables for R...
+Writing out data tables for read group: A Fake phiX Sample	with 340 observations	and aggregate residual error = -9.136
+...Done!
+Calling analysis R scripts and writing out figures...
+Analyzing read group: A Fake phiX Sample
+...Done!
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/gatk/gatk_count_covariates/gatk_count_covariates_out_1.csv	Tue Apr 01 10:48:14 2014 -0400
@@ -0,0 +1,246 @@
+# Counted Sites    41
+# Counted Bases    340
+# Skipped Sites    2
+# Fraction Skipped 1 / 21 bp
+ReadGroup,QualityScore,Cycle,Dinuc,Homopolymer,MinimumNQS,Position,nObservations,nMismatches,Qempirical
+A Fake phiX Sample,26,1,NN,0,26,0,9,0,40
+A Fake phiX Sample,26,1,NN,1,26,0,1,0,40
+A Fake phiX Sample,26,2,AG,0,26,1,1,0,40
+A Fake phiX Sample,26,2,CC,0,26,1,1,0,40
+A Fake phiX Sample,26,2,CG,0,26,1,3,0,40
+A Fake phiX Sample,26,2,GC,0,26,1,2,0,40
+A Fake phiX Sample,26,2,GC,1,26,1,1,0,40
+A Fake phiX Sample,26,2,GT,0,26,1,1,0,40
+A Fake phiX Sample,26,2,TG,1,26,1,1,0,40
+A Fake phiX Sample,26,3,CC,0,26,2,1,0,40
+A Fake phiX Sample,26,3,CG,0,26,2,3,0,40
+A Fake phiX Sample,26,3,GC,0,26,2,1,0,40
+A Fake phiX Sample,26,3,GC,1,26,2,2,0,40
+A Fake phiX Sample,26,3,GG,0,26,2,1,0,40
+A Fake phiX Sample,26,3,GT,0,26,2,1,0,40
+A Fake phiX Sample,26,3,TG,1,26,2,1,0,40
+A Fake phiX Sample,26,4,CC,0,26,3,2,0,40
+A Fake phiX Sample,26,4,CG,0,26,3,2,0,40
+A Fake phiX Sample,26,4,GA,0,26,3,1,0,40
+A Fake phiX Sample,26,4,GC,1,26,3,2,0,40
+A Fake phiX Sample,26,4,GG,0,26,3,1,0,40
+A Fake phiX Sample,26,4,GT,0,26,3,1,0,40
+A Fake phiX Sample,26,4,TG,1,26,3,1,0,40
+A Fake phiX Sample,26,5,AT,0,26,4,1,0,40
+A Fake phiX Sample,26,5,CC,0,26,4,2,0,40
+A Fake phiX Sample,26,5,CG,0,26,4,2,0,40
+A Fake phiX Sample,26,5,GA,0,26,4,1,0,40
+A Fake phiX Sample,26,5,GC,1,26,4,1,0,40
+A Fake phiX Sample,26,5,GG,0,26,4,1,0,40
+A Fake phiX Sample,26,5,GT,0,26,4,1,0,40
+A Fake phiX Sample,26,5,TG,1,26,4,1,0,40
+A Fake phiX Sample,26,6,AT,0,26,5,1,0,40
+A Fake phiX Sample,26,6,CC,0,26,5,1,0,40
+A Fake phiX Sample,26,6,CG,0,26,5,2,0,40
+A Fake phiX Sample,26,6,GA,0,26,5,1,0,40
+A Fake phiX Sample,26,6,GG,0,26,5,1,0,40
+A Fake phiX Sample,26,6,GT,0,26,5,2,0,40
+A Fake phiX Sample,26,6,TG,0,26,5,1,0,40
+A Fake phiX Sample,26,6,TG,1,26,5,1,0,40
+A Fake phiX Sample,26,7,AT,0,26,6,1,0,40
+A Fake phiX Sample,26,7,CG,0,26,6,1,0,40
+A Fake phiX Sample,26,7,GA,0,26,6,2,1,3
+A Fake phiX Sample,26,7,GG,0,26,6,1,0,40
+A Fake phiX Sample,26,7,GT,0,26,6,2,0,40
+A Fake phiX Sample,26,7,TG,0,26,6,1,0,40
+A Fake phiX Sample,26,7,TG,1,26,6,2,0,40
+A Fake phiX Sample,26,8,AC,0,26,7,1,0,40
+A Fake phiX Sample,26,8,AT,0,26,7,1,0,40
+A Fake phiX Sample,26,8,GA,0,26,7,2,1,3
+A Fake phiX Sample,26,8,GG,0,26,7,2,0,40
+A Fake phiX Sample,26,8,GT,0,26,7,1,0,40
+A Fake phiX Sample,26,8,TG,0,26,7,1,0,40
+A Fake phiX Sample,26,8,TG,1,26,7,2,0,40
+A Fake phiX Sample,26,9,AC,0,26,8,1,0,40
+A Fake phiX Sample,26,9,AT,0,26,8,1,0,40
+A Fake phiX Sample,26,9,CT,0,26,8,1,0,40
+A Fake phiX Sample,26,9,GA,0,26,8,3,1,5
+A Fake phiX Sample,26,9,GG,0,26,8,2,0,40
+A Fake phiX Sample,26,9,TG,0,26,8,1,0,40
+A Fake phiX Sample,26,9,TG,1,26,8,1,0,40
+A Fake phiX Sample,26,10,AC,0,26,9,1,0,40
+A Fake phiX Sample,26,10,AT,0,26,9,2,0,40
+A Fake phiX Sample,26,10,CT,0,26,9,1,0,40
+A Fake phiX Sample,26,10,GA,0,26,9,3,1,5
+A Fake phiX Sample,26,10,GG,0,26,9,1,0,40
+A Fake phiX Sample,26,10,TG,0,26,9,2,0,40
+A Fake phiX Sample,26,11,AC,0,26,10,1,0,40
+A Fake phiX Sample,26,11,AT,0,26,10,2,0,40
+A Fake phiX Sample,26,11,CT,0,26,10,1,0,40
+A Fake phiX Sample,26,11,GA,0,26,10,3,1,5
+A Fake phiX Sample,26,11,TG,0,26,10,3,0,40
+A Fake phiX Sample,26,12,AC,0,26,11,1,0,40
+A Fake phiX Sample,26,12,AC,1,26,11,1,0,40
+A Fake phiX Sample,26,12,AT,0,26,11,1,0,40
+A Fake phiX Sample,26,12,CT,0,26,11,1,0,40
+A Fake phiX Sample,26,12,GA,0,26,11,2,1,3
+A Fake phiX Sample,26,12,GC,1,26,11,1,0,40
+A Fake phiX Sample,26,12,TG,0,26,11,3,0,40
+A Fake phiX Sample,26,13,AC,0,26,12,1,0,40
+A Fake phiX Sample,26,13,AC,1,26,12,1,0,40
+A Fake phiX Sample,26,13,CC,0,26,12,2,0,40
+A Fake phiX Sample,26,13,CT,0,26,12,1,0,40
+A Fake phiX Sample,26,13,GA,0,26,12,2,1,3
+A Fake phiX Sample,26,13,GC,1,26,12,1,0,40
+A Fake phiX Sample,26,13,TG,0,26,12,2,0,40
+A Fake phiX Sample,26,14,AC,0,26,13,1,0,40
+A Fake phiX Sample,26,14,AC,1,26,13,1,0,40
+A Fake phiX Sample,26,14,CC,0,26,13,2,0,40
+A Fake phiX Sample,26,14,CG,0,26,13,1,0,40
+A Fake phiX Sample,26,14,CT,0,26,13,2,0,40
+A Fake phiX Sample,26,14,GA,0,26,13,1,0,40
+A Fake phiX Sample,26,14,GC,1,26,13,1,0,40
+A Fake phiX Sample,26,14,TG,0,26,13,1,0,40
+A Fake phiX Sample,26,15,AC,1,26,14,1,0,40
+A Fake phiX Sample,26,15,CC,0,26,14,2,0,40
+A Fake phiX Sample,26,15,CG,0,26,14,1,0,40
+A Fake phiX Sample,26,15,CT,0,26,14,2,0,40
+A Fake phiX Sample,26,15,GA,0,26,14,1,0,40
+A Fake phiX Sample,26,15,GT,0,26,14,1,0,40
+A Fake phiX Sample,26,15,TG,0,26,14,2,0,40
+A Fake phiX Sample,26,16,AC,1,26,15,1,0,40
+A Fake phiX Sample,26,16,CC,0,26,15,1,0,40
+A Fake phiX Sample,26,16,CG,0,26,15,1,0,40
+A Fake phiX Sample,26,16,CT,0,26,15,1,0,40
+A Fake phiX Sample,26,16,GA,0,26,15,2,0,40
+A Fake phiX Sample,26,16,GT,0,26,15,1,0,40
+A Fake phiX Sample,26,16,TA,0,26,15,1,0,40
+A Fake phiX Sample,26,16,TG,0,26,15,2,0,40
+A Fake phiX Sample,26,17,AC,1,26,16,3,0,40
+A Fake phiX Sample,26,17,CC,0,26,16,1,0,40
+A Fake phiX Sample,26,17,CG,0,26,16,1,0,40
+A Fake phiX Sample,26,17,GA,0,26,16,2,0,40
+A Fake phiX Sample,26,17,GT,0,26,16,1,0,40
+A Fake phiX Sample,26,17,TA,0,26,16,1,0,40
+A Fake phiX Sample,26,17,TG,0,26,16,1,0,40
+A Fake phiX Sample,26,18,AC,1,26,17,3,0,40
+A Fake phiX Sample,26,18,CC,0,26,17,3,0,40
+A Fake phiX Sample,26,18,CG,0,26,17,1,0,40
+A Fake phiX Sample,26,18,GA,0,26,17,1,0,40
+A Fake phiX Sample,26,18,GT,0,26,17,1,0,40
+A Fake phiX Sample,26,18,TA,0,26,17,1,0,40
+A Fake phiX Sample,26,19,AC,1,26,18,2,0,40
+A Fake phiX Sample,26,19,CC,0,26,18,3,0,40
+A Fake phiX Sample,26,19,CG,0,26,18,3,0,40
+A Fake phiX Sample,26,19,GT,0,26,18,1,0,40
+A Fake phiX Sample,26,19,TA,0,26,18,1,0,40
+A Fake phiX Sample,26,20,AC,1,26,19,1,0,40
+A Fake phiX Sample,26,20,CC,0,26,19,2,0,40
+A Fake phiX Sample,26,20,CG,0,26,19,3,0,40
+A Fake phiX Sample,26,20,GA,0,26,19,1,0,40
+A Fake phiX Sample,26,20,GT,0,26,19,2,0,40
+A Fake phiX Sample,26,20,TA,0,26,19,1,0,40
+A Fake phiX Sample,26,21,AC,1,26,20,1,0,40
+A Fake phiX Sample,26,21,AG,1,26,20,1,0,40
+A Fake phiX Sample,26,21,CC,0,26,20,1,0,40
+A Fake phiX Sample,26,21,CG,0,26,20,2,0,40
+A Fake phiX Sample,26,21,GA,0,26,20,1,0,40
+A Fake phiX Sample,26,21,GT,0,26,20,2,0,40
+A Fake phiX Sample,26,21,TA,0,26,20,2,0,40
+A Fake phiX Sample,26,22,AC,1,26,21,2,0,40
+A Fake phiX Sample,26,22,AG,1,26,21,1,0,40
+A Fake phiX Sample,26,22,CC,0,26,21,1,0,40
+A Fake phiX Sample,26,22,CG,0,26,21,1,0,40
+A Fake phiX Sample,26,22,GA,0,26,21,1,0,40
+A Fake phiX Sample,26,22,GG,0,26,21,1,0,40
+A Fake phiX Sample,26,22,GT,0,26,21,1,0,40
+A Fake phiX Sample,26,22,TA,0,26,21,2,0,40
+A Fake phiX Sample,26,23,AC,1,26,22,2,0,40
+A Fake phiX Sample,26,23,AG,1,26,22,1,0,40
+A Fake phiX Sample,26,23,CC,0,26,22,2,0,40
+A Fake phiX Sample,26,23,CG,0,26,22,1,0,40
+A Fake phiX Sample,26,23,GA,0,26,22,1,0,40
+A Fake phiX Sample,26,23,GC,0,26,22,1,0,40
+A Fake phiX Sample,26,23,GG,0,26,22,1,0,40
+A Fake phiX Sample,26,23,TA,0,26,22,1,0,40
+A Fake phiX Sample,26,24,AC,1,26,23,1,0,40
+A Fake phiX Sample,26,24,AG,1,26,23,1,0,40
+A Fake phiX Sample,26,24,CC,0,26,23,2,0,40
+A Fake phiX Sample,26,24,CG,0,26,23,2,0,40
+A Fake phiX Sample,26,24,CT,0,26,23,1,0,40
+A Fake phiX Sample,26,24,GA,0,26,23,1,0,40
+A Fake phiX Sample,26,24,GC,0,26,23,1,0,40
+A Fake phiX Sample,26,24,GG,0,26,23,1,0,40
+A Fake phiX Sample,26,25,AG,1,26,24,1,0,40
+A Fake phiX Sample,26,25,CC,0,26,24,1,0,40
+A Fake phiX Sample,26,25,CG,0,26,24,2,0,40
+A Fake phiX Sample,26,25,CT,0,26,24,1,0,40
+A Fake phiX Sample,26,25,GA,0,26,24,2,0,40
+A Fake phiX Sample,26,25,GC,0,26,24,1,0,40
+A Fake phiX Sample,26,25,GG,0,26,24,1,0,40
+A Fake phiX Sample,26,25,TA,1,26,24,1,0,40
+A Fake phiX Sample,26,26,AG,1,26,25,2,0,40
+A Fake phiX Sample,26,26,CG,0,26,25,1,0,40
+A Fake phiX Sample,26,26,CT,0,26,25,1,0,40
+A Fake phiX Sample,26,26,GA,0,26,25,2,0,40
+A Fake phiX Sample,26,26,GC,0,26,25,1,0,40
+A Fake phiX Sample,26,26,GG,0,26,25,1,0,40
+A Fake phiX Sample,26,26,TA,1,26,25,1,0,40
+A Fake phiX Sample,26,27,AC,2,26,26,1,0,40
+A Fake phiX Sample,26,27,AG,1,26,26,2,0,40
+A Fake phiX Sample,26,27,CT,0,26,26,1,0,40
+A Fake phiX Sample,26,27,GA,0,26,26,1,0,40
+A Fake phiX Sample,26,27,GC,0,26,26,1,0,40
+A Fake phiX Sample,26,27,GG,0,26,26,2,0,40
+A Fake phiX Sample,26,27,TA,1,26,26,1,0,40
+A Fake phiX Sample,26,28,AC,2,26,27,1,0,40
+A Fake phiX Sample,26,28,AG,1,26,27,1,0,40
+A Fake phiX Sample,26,28,CC,1,26,27,1,0,40
+A Fake phiX Sample,26,28,CT,0,26,27,1,0,40
+A Fake phiX Sample,26,28,GC,0,26,27,2,0,40
+A Fake phiX Sample,26,28,GG,0,26,27,2,0,40
+A Fake phiX Sample,26,28,TA,1,26,27,1,0,40
+A Fake phiX Sample,26,29,AC,2,26,28,1,0,40
+A Fake phiX Sample,26,29,CC,1,26,28,1,0,40
+A Fake phiX Sample,26,29,CT,0,26,28,2,0,40
+A Fake phiX Sample,26,29,GC,0,26,28,2,0,40
+A Fake phiX Sample,26,29,GG,0,26,28,1,0,40
+A Fake phiX Sample,26,29,TA,1,26,28,1,0,40
+A Fake phiX Sample,26,30,AC,2,26,29,1,0,40
+A Fake phiX Sample,26,30,CC,1,26,29,1,0,40
+A Fake phiX Sample,26,30,CT,0,26,29,3,0,40
+A Fake phiX Sample,26,30,GC,0,26,29,1,0,40
+A Fake phiX Sample,26,30,TA,1,26,29,2,0,40
+A Fake phiX Sample,26,31,AC,2,26,30,1,0,40
+A Fake phiX Sample,26,31,CC,1,26,30,1,0,40
+A Fake phiX Sample,26,31,CT,0,26,30,2,0,40
+A Fake phiX Sample,26,31,TA,1,26,30,3,0,40
+A Fake phiX Sample,26,32,AA,0,26,31,1,0,40
+A Fake phiX Sample,26,32,AC,1,26,31,1,0,40
+A Fake phiX Sample,26,32,AC,2,26,31,1,0,40
+A Fake phiX Sample,26,32,CC,1,26,31,1,0,40
+A Fake phiX Sample,26,32,CT,0,26,31,1,0,40
+A Fake phiX Sample,26,32,TA,1,26,31,2,0,40
+A Fake phiX Sample,26,33,AA,0,26,32,1,0,40
+A Fake phiX Sample,26,33,AC,1,26,32,1,0,40
+A Fake phiX Sample,26,33,AC,2,26,32,1,0,40
+A Fake phiX Sample,26,33,AT,0,26,32,1,0,40
+A Fake phiX Sample,26,33,CC,1,26,32,1,0,40
+A Fake phiX Sample,26,33,CT,0,26,32,1,0,40
+A Fake phiX Sample,26,33,TA,1,26,32,1,0,40
+A Fake phiX Sample,26,34,AA,0,26,33,1,0,40
+A Fake phiX Sample,26,34,AC,1,26,33,1,0,40
+A Fake phiX Sample,26,34,AT,0,26,33,1,0,40
+A Fake phiX Sample,26,34,CC,1,26,33,1,0,40
+A Fake phiX Sample,26,34,CT,0,26,33,2,0,40
+A Fake phiX Sample,26,34,TA,1,26,33,1,0,40
+A Fake phiX Sample,26,34,TG,0,26,33,1,0,40
+A Fake phiX Sample,26,35,AA,0,26,34,1,0,40
+A Fake phiX Sample,26,35,AT,0,26,34,1,0,40
+A Fake phiX Sample,26,35,CT,0,26,34,2,0,40
+A Fake phiX Sample,26,35,GA,0,26,34,1,0,40
+A Fake phiX Sample,26,35,TA,1,26,34,2,0,40
+A Fake phiX Sample,26,35,TG,0,26,34,1,0,40
+A Fake phiX Sample,26,36,AA,0,26,35,2,0,40
+A Fake phiX Sample,26,36,AG,0,26,35,1,0,40
+A Fake phiX Sample,26,36,AT,0,26,35,1,0,40
+A Fake phiX Sample,26,36,CT,0,26,35,2,0,40
+A Fake phiX Sample,26,36,GA,0,26,35,1,0,40
+A Fake phiX Sample,26,36,TA,0,26,35,2,0,40
+A Fake phiX Sample,26,36,TG,0,26,35,1,0,40
+EOF
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tool_dependencies.xml	Tue Apr 01 10:48:14 2014 -0400
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<tool_dependency>
+  <package name="gatk" version="1.4">
+      <repository changeset_revision="ec95ec570854" name="package_gatk_1_4" owner="devteam" prior_installation_required="False" toolshed="http://toolshed.g2.bx.psu.edu" />
+    </package>
+</tool_dependency>