changeset 13:7e6fd3d0f16e draft

planemo upload for repository https://github.com/galaxyproject/tools-devteam/tree/master/tools/picard commit bf94a1505c131fb3f67c867b6e1d886780efa42e
author devteam
date Tue, 06 Dec 2016 10:04:41 -0500
parents 05087b27692a
children 465cbb0cf2eb
files picard_AddCommentsToBam.xml picard_AddOrReplaceReadGroups.xml picard_BedToIntervalList.xml picard_CleanSam.xml picard_CollectAlignmentSummaryMetrics.xml picard_CollectBaseDistributionByCycle.xml picard_CollectGcBiasMetrics.xml picard_CollectInsertSizeMetrics.xml picard_CollectRnaSeqMetrics.xml picard_CollectWgsMetrics.xml picard_DownsampleSam.xml picard_EstimateLibraryComplexity.xml picard_FastqToSam.xml picard_FilterSamReads.xml picard_FixMateInformation.xml picard_MarkDuplicates.xml picard_MarkDuplicatesWithMateCigar.xml picard_MeanQualityByCycle.xml picard_MergeBamAlignment.xml picard_MergeSamFiles.xml picard_NormalizeFasta.xml picard_QualityScoreDistribution.xml picard_ReorderSam.xml picard_ReplaceSamHeader.xml picard_RevertOriginalBaseQualitiesAndAddMateCigar.xml picard_RevertSam.xml picard_SamToFastq.xml picard_SortSam.xml picard_ValidateSamFile.xml picard_macros.xml
diffstat 30 files changed, 733 insertions(+), 724 deletions(-) [+]
line wrap: on
line diff
--- a/picard_AddCommentsToBam.xml	Sun Nov 27 15:11:50 2016 -0500
+++ b/picard_AddCommentsToBam.xml	Tue Dec 06 10:04:41 2016 -0500
@@ -6,9 +6,10 @@
   <expand macro="requirements" />
   <command detect_errors="exit_code"><![CDATA[
     @java_options@
+    @symlink_element_identifier@
     picard
       AddCommentsToBam
-      INPUT="${inputFile}"
+      INPUT='$inputFile.element_identifier'
       OUTPUT="${outFile}"
       #for $element in $comments:
         COMMENT="${element.comment}"
--- a/picard_AddOrReplaceReadGroups.xml	Sun Nov 27 15:11:50 2016 -0500
+++ b/picard_AddOrReplaceReadGroups.xml	Tue Dec 06 10:04:41 2016 -0500
@@ -10,9 +10,10 @@
     #set $rg_auto_name = $read_group_name_default($inputFile)
     @set_read_group_vars@
     @java_options@
+    @symlink_element_identifier@
     picard
       AddOrReplaceReadGroups
-      INPUT="${inputFile}"
+      INPUT='$inputFile.element_identifier'
       $format_read_group("RGLB=", $rg_lb, '"')
       $format_read_group("RGPL=", $rg_pl, '"')
       $format_read_group("RGPU=", $rg_pu, '"')
@@ -25,21 +26,21 @@
       QUIET=true
       VERBOSITY=ERROR
       OUTPUT="${outFile}"
-      
+
   </command>
-  
+
   <inputs>
     <param format="bam,sam" name="inputFile" type="data" label="Select SAM/BAM dataset or dataset collection" help="If empty, upload or import a SAM/BAM dataset" />
     <expand macro="read_group_inputs_picard" />
     <expand macro="VS" />
-    
+
   </inputs>
-  
+
   <outputs>
     <data name="outFile" format="bam" label="${tool.name} on ${on_string}: BAM with replaced/modified readgroups"/>
   </outputs>
-  
-  
+
+
   <tests>
     <test>
       <param name="inputFile" value="picard_ARRG.bam" />
@@ -66,42 +67,42 @@
 @description@
 
   INPUT=File
-  I=File                  Input file (bam or sam).  Required. 
+  I=File                  Input file (bam or sam).  Required.
 
   OUTPUT=File
-  O=File                  Output file (bam or sam).  Required. 
+  O=File                  Output file (bam or sam).  Required.
 
   SORT_ORDER=SortOrder
-  SO=SortOrder            Optional sort order to output in. If not supplied OUTPUT is in the same order as INPUT.  
-                          Default value: null. Possible values: {unsorted, queryname, coordinate} 
+  SO=SortOrder            Optional sort order to output in. If not supplied OUTPUT is in the same order as INPUT.
+                          Default value: null. Possible values: {unsorted, queryname, coordinate}
 
   RGID=String
-  ID=String               Read Group ID  Default value: 1. This option can be set to 'null' to clear the default 
-                          value. 
+  ID=String               Read Group ID  Default value: 1. This option can be set to 'null' to clear the default
+                          value.
 
   RGLB=String
-  LB=String               Read Group Library  Required. 
-  
+  LB=String               Read Group Library  Required.
+
   RGPL=String
-  PL=String               Read Group platform (e.g. illumina, solid)  Required. 
+  PL=String               Read Group platform (e.g. illumina, solid)  Required.
 
   RGPU=String
-  PU=String               Read Group platform unit (eg. run barcode)  Required. 
+  PU=String               Read Group platform unit (eg. run barcode)  Required.
 
   RGSM=String
-  SM=String               Read Group sample name  Required. 
+  SM=String               Read Group sample name  Required.
 
   RGCN=String
-  CN=String               Read Group sequencing center name  Default value: null. 
+  CN=String               Read Group sequencing center name  Default value: null.
 
   RGDS=String
-  DS=String               Read Group description  Default value: null. 
+  DS=String               Read Group description  Default value: null.
 
   RGDT=Iso8601Date
-  DT=Iso8601Date          Read Group run date  Default value: null. 
+  DT=Iso8601Date          Read Group run date  Default value: null.
 
   RGPI=Integer
-  PI=Integer              Read Group predicted insert size  Default value: null. 
+  PI=Integer              Read Group predicted insert size  Default value: null.
 
 @more_info@
   </help>
--- a/picard_BedToIntervalList.xml	Sun Nov 27 15:11:50 2016 -0500
+++ b/picard_BedToIntervalList.xml	Tue Dec 06 10:04:41 2016 -0500
@@ -6,40 +6,40 @@
   <expand macro="requirements" />
   <command detect_errors="exit_code"><![CDATA[
     @java_options@
-    
+    @symlink_element_identifier@
     #set $picard_dict = "localref.dict"
     #set $ref_fasta = "localref.fa"     ## This is done because picards "likes" .fa extension
-    
+
     ln -s "${reference_source.ref_file}" "${ref_fasta}" &&
-       
+
     #if str( $reference_source.reference_source_selector ) == "history":
-        
+
       picard CreateSequenceDictionary REFERENCE="${ref_fasta}" OUTPUT="${picard_dict}"
       QUIET=true
       VERBOSITY=ERROR
-      
+
       &&
-      
+
     #else:
-    
+
       #set $ref_fasta = str( $reference_source.ref_file.fields.path ) ## getting path of reference fasta file (must end with .fa)
       #set $picard_dict=$ref_fasta[:-2]+"dict"                        ## replacing .fa with .dict
-    
-    #end if 
-    
+
+    #end if
+
     picard
       BedToIntervalList
-      INPUT="${inputFile}"
+      INPUT='$inputFile.element_identifier'
       OUTPUT="${outFile}"
-      
+
       SEQUENCE_DICTIONARY="${picard_dict}"
       QUIET=true
       VERBOSITY=ERROR
-      
+
   ]]></command>
-  
+
   <inputs>
-    
+
      <conditional name="reference_source">
       <param name="reference_source_selector" type="select" label="Load picard dictionary file from">
         <option value="cached">Local cache</option>
@@ -54,11 +54,11 @@
           <validator type="no_options" message="A built-in dictionary is not available for the build associated with the selected input file"/>
         </param>
       </when>
-      <when value="history"> 
+      <when value="history">
         <param name="ref_file" type="data" format="fasta" label="Use the following dataset to create dictionary" help="You can upload a FASTA sequence to the history from which Picard will automatically generate dictionary using CreateSequenceDictionary command" />
       </when>
     </conditional>
-    
+
     <param format="bed" name="inputFile" type="data" label="Select coordinate dataset or dataset collection" help="This can be a bed or interval dataset" />
 
   </inputs>
@@ -74,8 +74,8 @@
       <output name="outFile" file="picard_BedToIntervalList_test1.pif" ftype="picard_interval_list" lines_diff="8" />
     </test>
   </tests>
-  
-  
+
+
   <help>
 
 .. class:: infomark
--- a/picard_CleanSam.xml	Sun Nov 27 15:11:50 2016 -0500
+++ b/picard_CleanSam.xml	Tue Dec 06 10:04:41 2016 -0500
@@ -6,35 +6,36 @@
   <expand macro="requirements" />
   <command detect_errors="exit_code"><![CDATA[
     @java_options@
+    @symlink_element_identifier@
     picard
     CleanSam
-    INPUT="${inputFile}"
+    INPUT='$inputFile.element_identifier'
     OUTPUT="${outFile}"
     QUIET=true
     VERBOSITY=ERROR
     VALIDATION_STRINGENCY=${validation_stringency}
   ]]></command>
-  
+
   <inputs>
     <param name="inputFile" type="data" format="sam,bam" label="Select SAM/BAM dataset or dataset collection" help="If empty, upload or import a SAM/BAM dataset"/>
-    
+
     <expand macro="VS" />
-    
+
   </inputs>
-  
+
   <outputs>
     <data name="outFile" format="bam" label="${tool.name} on ${on_string}: cleaned BAM dataset">
     </data>
   </outputs>
-  
-  
+
+
   <tests>
     <test>
       <param name="inputFile" ftype="bam" value="picard_CleanSam.bam" />
-      <output name="outFile" file="picard_CleanSam_test1.bam" ftype="bam" />
+      <output name="outFile" file="picard_CleanSam_test1.bam" ftype="bam" lines_diff="4"/>
     </test>
   </tests>
-  
+
   <help>
 
 .. class:: infomark
@@ -45,9 +46,9 @@
 
  1. to soft-clip an alignment that hangs off the end of its reference sequence.
  2. to set MAPQ to 0 if a read is unmapped.
- 
+
 @dataset_collections@
- 
+
 @more_info@
 
   </help>
--- a/picard_CollectAlignmentSummaryMetrics.xml	Sun Nov 27 15:11:50 2016 -0500
+++ b/picard_CollectAlignmentSummaryMetrics.xml	Tue Dec 06 10:04:41 2016 -0500
@@ -6,6 +6,7 @@
   <expand macro="requirements" />
   <command detect_errors="exit_code"><![CDATA[
     @java_options@
+    @symlink_element_identifier@
     ##set up input files
 
     #set $reference_fasta_filename = "localref.fa"
@@ -18,7 +19,7 @@
 
     picard
     CollectAlignmentSummaryMetrics
-    INPUT="${inputFile}"
+    INPUT='$inputFile.element_identifier'
     OUTPUT="${outFile}"
     MAX_INSERT_SIZE=${maxinsert}
     #for $sequence in $adapters:
@@ -36,7 +37,7 @@
     VALIDATION_STRINGENCY="${validation_stringency}"
     QUIET=true
     VERBOSITY=ERROR
-  
+
   ]]></command>
   <inputs>
     <param format="sam,bam" name="inputFile" type="data" label="Select SAM/BAM dataset or dataset collection" help="If empty, upload or import a SAM/BAM dataset."/>
@@ -98,25 +99,25 @@
 
 @description@
 
-  MAX_INSERT_SIZE=Integer       Paired end reads above this insert size will be considered chimeric along with 
-                                inter-chromosomal pairs.  Default value: 100000.  
+  MAX_INSERT_SIZE=Integer       Paired end reads above this insert size will be considered chimeric along with
+                                inter-chromosomal pairs.  Default value: 100000.
 
-  ADAPTER_SEQUENCE=String       List of adapter sequences to use when processing the alignment metrics  This option may 
-                                be specified 0 or more times.  
+  ADAPTER_SEQUENCE=String       List of adapter sequences to use when processing the alignment metrics  This option may
+                                be specified 0 or more times.
 
   METRIC_ACCUMULATION_LEVEL=MetricAccumulationLevel
-  LEVEL=MetricAccumulationLevel The level(s) at which to accumulate metrics.    Possible values: {ALL_READS, SAMPLE, 
-                                LIBRARY, READ_GROUP} This option may be specified 0 or more times.  
+  LEVEL=MetricAccumulationLevel The level(s) at which to accumulate metrics.    Possible values: {ALL_READS, SAMPLE,
+                                LIBRARY, READ_GROUP} This option may be specified 0 or more times.
 
   IS_BISULFITE_SEQUENCED=Boolean
-  BS=Boolean                    Whether the SAM or BAM file consists of bisulfite sequenced reads.    
+  BS=Boolean                    Whether the SAM or BAM file consists of bisulfite sequenced reads.
 
 
   REFERENCE_SEQUENCE=File
-  R=File                        Reference sequence fasta  Default value: null. 
+  R=File                        Reference sequence fasta  Default value: null.
 
   ASSUME_SORTED=Boolean
-  AS=Boolean                    If true (default), then the sort order in the header file will be ignored. 
+  AS=Boolean                    If true (default), then the sort order in the header file will be ignored.
 
 @more_info@
 
--- a/picard_CollectBaseDistributionByCycle.xml	Sun Nov 27 15:11:50 2016 -0500
+++ b/picard_CollectBaseDistributionByCycle.xml	Tue Dec 06 10:04:41 2016 -0500
@@ -8,30 +8,31 @@
   </expand>
   <command detect_errors="exit_code"><![CDATA[
     @java_options@
+    @symlink_element_identifier@
     ##set up input files
 
     #set $reference_fasta_filename = "localref.fa"
-    
+
     #if str( $reference_source.reference_source_selector ) == "history":
         ln -s "${reference_source.ref_file}" "${reference_fasta_filename}" &&
     #else:
         #set $reference_fasta_filename = str( $reference_source.ref_file.fields.path )
     #end if
-    
+
     picard
     CollectBaseDistributionByCycle
-    INPUT="${inputFile}"
+    INPUT='$inputFile.element_identifier'
     OUTPUT="${outFile}"
     CHART_OUTPUT="${pdfFile}"
     ALIGNED_READS_ONLY="${aligned_reads_only}"
     PF_READS_ONLY="${pf_reads_only}"
     REFERENCE_SEQUENCE="${reference_fasta_filename}"
     ASSUME_SORTED="${assume_sorted}"
-    
+
     VALIDATION_STRINGENCY="${validation_stringency}"
     QUIET=true
     VERBOSITY=ERROR
-  
+
   ]]></command>
   <inputs>
     <param format="sam,bam" name="inputFile" type="data" label="Select SAM/BAM dataset or dataset collection" help="If empty, upload or import a SAM/BAM dataset."/>
@@ -51,19 +52,19 @@
         <param name="ref_file" type="data" format="fasta" label="Use the folloing dataset as the reference sequence" help="REFERENCE_SEQUENCE; You can upload a FASTA sequence to the history and use it as reference" />
       </when>
     </conditional>
-    <param name="aligned_reads_only" type="boolean" label="Calculate the base distribution over aligned reads only" checked="true" truevalue="true" falsevalue="false" help="ALIGNED_READS_ONLY"/> 
-    <param name="pf_reads_only" type="boolean" label="Calculate the base distribution over PF (passing filtering) reads only" checked="true" truevalue="true" falsevalue="false" help="PF_READS_ONLY"/> 
-    <param name="assume_sorted" type="boolean" label="Assume the input file is already sorted" checked="true" truevalue="true" falsevalue="false" help="ASSUME_SORTED"/> 
-    
+    <param name="aligned_reads_only" type="boolean" label="Calculate the base distribution over aligned reads only" checked="true" truevalue="true" falsevalue="false" help="ALIGNED_READS_ONLY"/>
+    <param name="pf_reads_only" type="boolean" label="Calculate the base distribution over PF (passing filtering) reads only" checked="true" truevalue="true" falsevalue="false" help="PF_READS_ONLY"/>
+    <param name="assume_sorted" type="boolean" label="Assume the input file is already sorted" checked="true" truevalue="true" falsevalue="false" help="ASSUME_SORTED"/>
+
     <expand macro="VS" />
-    
+
   </inputs>
-  
+
   <outputs>
     <data format="tabular" name="outFile"/>
     <data format="pdf" name="pdfFile"/>
   </outputs>
-  
+
   <tests>
     <test>
       <param name="aligned_reads_only" value="true" />
@@ -75,8 +76,8 @@
       <output name="outFile" file="picard_CollectBaseDistributionByCycle_test1.tab" ftype="tabular" lines_diff="4"/>
     </test>
   </tests>
-  
-  
+
+
   <help>
 
 .. class:: infomark
@@ -89,19 +90,19 @@
 
 @description@
 
-  ALIGNED_READS_ONLY=Boolean    If set to true, calculate the base distribution over aligned reads only.  Default value: 
-                                false. This option can be set to 'null' to clear the default value. Possible values: 
-                                {true, false} 
+  ALIGNED_READS_ONLY=Boolean    If set to true, calculate the base distribution over aligned reads only.  Default value:
+                                false. This option can be set to 'null' to clear the default value. Possible values:
+                                {true, false}
 
-  PF_READS_ONLY=Boolean         If set to true calculate the base distribution over PF reads only.  Default value: false. 
-                                This option can be set to 'null' to clear the default value. Possible values: {true, 
-                                false} 
+  PF_READS_ONLY=Boolean         If set to true calculate the base distribution over PF reads only.  Default value: false.
+                                This option can be set to 'null' to clear the default value. Possible values: {true,
+                                false}
 
   REFERENCE_SEQUENCE=File
-  R=File                        Reference sequence fasta  Default value: null. 
+  R=File                        Reference sequence fasta  Default value: null.
 
   ASSUME_SORTED=Boolean
-  AS=Boolean                    If true (default), then the sort order in the header file will be ignored.  Default 
+  AS=Boolean                    If true (default), then the sort order in the header file will be ignored.  Default
 
 @more_info@
 
--- a/picard_CollectGcBiasMetrics.xml	Sun Nov 27 15:11:50 2016 -0500
+++ b/picard_CollectGcBiasMetrics.xml	Tue Dec 06 10:04:41 2016 -0500
@@ -8,6 +8,7 @@
   </expand>
   <command detect_errors="exit_code"><![CDATA[
     @java_options@
+    @symlink_element_identifier@
     ##set up input files
 
     #set $reference_fasta_filename = "localref.fa"
@@ -20,7 +21,7 @@
 
     picard
     CollectGcBiasMetrics
-    INPUT="${inputFile}"
+    INPUT='$inputFile.element_identifier'
     OUTPUT="${outFile}"
     CHART_OUTPUT="${pdfFile}"
     SUMMARY_OUTPUT="${summaryFile}"
--- a/picard_CollectInsertSizeMetrics.xml	Sun Nov 27 15:11:50 2016 -0500
+++ b/picard_CollectInsertSizeMetrics.xml	Tue Dec 06 10:04:41 2016 -0500
@@ -8,27 +8,28 @@
   </expand>
   <command detect_errors="exit_code"><![CDATA[
     @java_options@
+    @symlink_element_identifier@
     ##set up input files
 
     #set $reference_fasta_filename = "localref.fa"
-    
+
     #if str( $reference_source.reference_source_selector ) == "history":
         ln -s "${reference_source.ref_file}" "${reference_fasta_filename}" &&
     #else:
         #set $reference_fasta_filename = str( $reference_source.ref_file.fields.path )
     #end if
-    
+
     picard
     CollectInsertSizeMetrics
-    INPUT="${inputFile}"
+    INPUT='$inputFile.element_identifier'
     OUTPUT="${outFile}"
     HISTOGRAM_FILE="${histFile}"
     DEVIATIONS="${deviations}"
-    
+
     #if str( $hist_width ):
       HISTOGRAM_WIDTH="${hist_width}"
     #end if
-    
+
     MINIMUM_PCT="${min_pct}"
     REFERENCE_SEQUENCE="${reference_fasta_filename}"
     ASSUME_SORTED="${assume_sorted}"
@@ -37,7 +38,7 @@
     VALIDATION_STRINGENCY="${validation_stringency}"
     QUIET=true
     VERBOSITY=ERROR
-  
+
   ]]></command>
   <inputs>
     <param format="sam,bam" name="inputFile" type="data" label="Select SAM/BAM dataset or dataset collection" help="If empty, upload or import a SAM/BAM dataset."/>
@@ -67,16 +68,16 @@
       <option value="LIBRARY">Library</option>
       <option value="READ_GROUP">Read group</option>
     </param>
-    
+
     <expand macro="VS" />
-    
+
   </inputs>
-  
+
   <outputs>
     <data format="tabular" name="outFile"/>
     <data format="pdf" name="histFile"/>
   </outputs>
-  
+
   <tests>
     <test>
       <param name="metric_accumulation_level" value="ALL_READS"/>
@@ -90,8 +91,8 @@
       <output name="outFile" file="picard_CollectInsertSizeMetrics_test1.tab" ftype="tabular" lines_diff="4"/>
     </test>
   </tests>
-  
-  
+
+
   <help>
 
 .. class:: infomark
@@ -104,30 +105,30 @@
 
 @description@
 
- 
-  DEVIATIONS=Double             Generate mean, sd and plots by trimming the data down to MEDIAN + 
-                                DEVIATIONS*MEDIAN_ABSOLUTE_DEVIATION. This is done because insert size data typically 
-                                includes enough anomalous values from chimeras and other artifacts to make the mean and 
-                                sd grossly misleading regarding the real distribution.  Default value: 10.0. 
+
+  DEVIATIONS=Double             Generate mean, sd and plots by trimming the data down to MEDIAN +
+                                DEVIATIONS*MEDIAN_ABSOLUTE_DEVIATION. This is done because insert size data typically
+                                includes enough anomalous values from chimeras and other artifacts to make the mean and
+                                sd grossly misleading regarding the real distribution.  Default value: 10.0.
 
   HISTOGRAM_WIDTH=Integer
-  W=Integer                     Explicitly sets the Histogram width, overriding automatic truncation of Histogram tail. 
-                                Also, when calculating mean and standard deviation, only bins &lt;= Histogram_WIDTH will be 
-                                included.  Default value: not set. 
+  W=Integer                     Explicitly sets the Histogram width, overriding automatic truncation of Histogram tail.
+                                Also, when calculating mean and standard deviation, only bins &lt;= Histogram_WIDTH will be
+                                included.  Default value: not set.
 
   MINIMUM_PCT=Float
-  M=Float                       When generating the Histogram, discard any data categories (out of FR, TANDEM, RF) that 
-                                have fewer than this percentage of overall reads. (Range: 0 to 1).  Default value: 0.05. 
+  M=Float                       When generating the Histogram, discard any data categories (out of FR, TANDEM, RF) that
+                                have fewer than this percentage of overall reads. (Range: 0 to 1).  Default value: 0.05.
 
   METRIC_ACCUMULATION_LEVEL=MetricAccumulationLevel
-  LEVEL=MetricAccumulationLevel The level(s) at which to accumulate metrics.    Possible values: {ALL_READS, SAMPLE, 
-                                LIBRARY, READ_GROUP} This option may be specified 0 or more times. 
- 
+  LEVEL=MetricAccumulationLevel The level(s) at which to accumulate metrics.    Possible values: {ALL_READS, SAMPLE,
+                                LIBRARY, READ_GROUP} This option may be specified 0 or more times.
+
   ASSUME_SORTED=Boolean
-  AS=Boolean                    If true (default), then the sort order in the header file will be ignored.  Default 
-                                value: true. This option can be set to 'null' to clear the default value. Possible 
+  AS=Boolean                    If true (default), then the sort order in the header file will be ignored.  Default
+                                value: true. This option can be set to 'null' to clear the default value. Possible
                                 values: {true, false}
-                                
+
 @more_info@
 
   </help>
--- a/picard_CollectRnaSeqMetrics.xml	Sun Nov 27 15:11:50 2016 -0500
+++ b/picard_CollectRnaSeqMetrics.xml	Tue Dec 06 10:04:41 2016 -0500
@@ -9,33 +9,33 @@
     <command detect_errors="exit_code"><![CDATA[
 
       ## Set up input files
-      
+      @symlink_element_identifier@
       ## Reference sequences
 
       #set $reference_fasta_filename = "localref.fa"
-    
+
       #if str( $reference_source.reference_source_selector ) == "history":
         ln -s "${reference_source.ref_file}" "${reference_fasta_filename}" &&
       #else:
         #set $reference_fasta_filename = str( $reference_source.ref_file.fields.path )
       #end if
-      
+
       ## refFlat data
       ## The awk line below converts a file obtained from UCSC as specified in the tool help to refFlat format
-      
+
       grep -v '^#' ${refFlat} | awk '{print $11"\t"$1"\t"$2"\t"$3"\t"$4"\t"$5"\t"$6"\t"$7"\t"$8"\t"$9"\t"$10}' > refFlat.tab &&
-      
+
       ## Start picard command
-      
+
       @java_options@
       picard
       CollectRnaSeqMetrics
       REF_FLAT=refFlat.tab
-      
+
       #if str( $ribosomal_intervals ) != "None":
 	 RIBOSOMAL_INTERVALS="${ribosomal_intervals}"
       #end if
-      
+
       STRAND_SPECIFICITY="${strand_specificity}"
       MINIMUM_LENGTH="${minimum_length}"
       CHART_OUTPUT="${pdfFile}"
@@ -43,20 +43,20 @@
       #for $sequence_to_ignore in $ignore_list:
 	 IGNORE_SEQUENCE="${sequence_to_ignore.sequence}"
       #end for
-      
+
       RRNA_FRAGMENT_PERCENTAGE="${rrna_fragment_percentage}"
       METRIC_ACCUMULATION_LEVEL="${metric_accumulation_level}"
-      INPUT="${inputFile}"
+      INPUT='$inputFile.element_identifier'
       OUTPUT="${outFile}"
       REFERENCE_SEQUENCE="${reference_fasta_filename}"
       ASSUME_SORTED="${assume_sorted}"
-     
+
       QUIET=true
       VERBOSITY=ERROR
       VALIDATION_STRINGENCY=${validation_stringency}
-    
+
    ]]></command>
-   
+
    <inputs>
       <param format="sam,bam" type="data" name="inputFile" label="Select SAM/BAM dataset or dataset collection" help="If empty, upload or import a SAM/BAM dataset" />
       <conditional name="reference_source">
@@ -73,7 +73,7 @@
 	 <when value="history">
 	    <param name="ref_file" type="data" format="fasta" label="Use the folloing dataset as the reference sequence" help="REFERENCE_SEQUENCE; You can upload a FASTA sequence to the history and use it as reference" />
 	 </when>
-      </conditional>        
+      </conditional>
       <param format="tabular" name="refFlat" type="data" label="Gene annotations in refFlat form" help="See &quot;Obtaining gene annotations in refFlat format&quot; below for help" />
       <param name="ribosomal_intervals" format="picard_interval_list" type="data" optional="True" label="Location of rRNA sequences in genome, in interval_list format" help="RIBOSOMAL_INTERVALS; If not specified no bases will be identified as being ribosomal. The list of intervals can be geberated from BED or Interval datasets using Galaxy BedToIntervalList tool"/>
       <param name="strand_specificity" type="select" label="What is the RNA-seq library strand specificity" help="STRAND_SPECIFICITY; For unpaired reads, use FIRST_READ_TRANSCRIPTION_STRAND if the reads are expected to be on the transcription strand.">
@@ -93,7 +93,7 @@
 	 <option value="READ_GROUP">Read group</option>
       </param>
       <param name="assume_sorted" type="boolean" label="Assume the input file is already sorted" checked="true" truevalue="true" falsevalue="false" help="ASSUME_SORTED"/>
-      
+
       <expand macro="VS" />
 
   </inputs>
@@ -101,7 +101,7 @@
       <data format="pdf" name="pdfFile" label="${tool.name} on ${on_string}: Chart PDF"/>
       <data format="tabular" name="outFile" label="${tool.name} on ${on_string}: Summary stats"/>
   </outputs>
-  
+
   <tests>
     <test>
       <param name="reference_source_selector" value="history"/>
@@ -156,41 +156,41 @@
    8. Click **Send query to Galaxy**
    9. A new dataset will appear in the current Galaxy history
    10. Use this dataset as the input for **Gene annotations in refFlat form** dropdown of this tool
-   
+
 .. _refFlat: http://genome.ucsc.edu/goldenPath/gbdDescriptionsOld.html#RefFlat
 
 @description@
 
-   REF_FLAT=File                 Gene annotations in refFlat form.  Format described here: 
-                                 http://genome.ucsc.edu/goldenPath/gbdDescriptionsOld.html#RefFlat  Required. 
+   REF_FLAT=File                 Gene annotations in refFlat form.  Format described here:
+                                 http://genome.ucsc.edu/goldenPath/gbdDescriptionsOld.html#RefFlat  Required.
 
-   RIBOSOMAL_INTERVALS=File      Location of rRNA sequences in genome, in interval_list format.  If not specified no bases 
-                                 will be identified as being ribosomal. Format described here: 
+   RIBOSOMAL_INTERVALS=File      Location of rRNA sequences in genome, in interval_list format.  If not specified no bases
+                                 will be identified as being ribosomal. Format described here:
                                  http://picard.sourceforge.net/javadoc/net/sf/picard/util/IntervalList.html  and can be
 				 generated from BED datasetes using Galaxy's wrapper for picard_BedToIntervalList tool
 
    STRAND_SPECIFICITY=StrandSpecificity
-   STRAND=StrandSpecificity      For strand-specific library prep. For unpaired reads, use FIRST_READ_TRANSCRIPTION_STRAND 
-                                 if the reads are expected to be on the transcription strand.  Required. Possible values: 
-                                 {NONE, FIRST_READ_TRANSCRIPTION_STRAND, SECOND_READ_TRANSCRIPTION_STRAND} 
+   STRAND=StrandSpecificity      For strand-specific library prep. For unpaired reads, use FIRST_READ_TRANSCRIPTION_STRAND
+                                 if the reads are expected to be on the transcription strand.  Required. Possible values:
+                                 {NONE, FIRST_READ_TRANSCRIPTION_STRAND, SECOND_READ_TRANSCRIPTION_STRAND}
 
-   MINIMUM_LENGTH=Integer        When calculating coverage based values (e.g. CV of coverage) only use transcripts of this 
+   MINIMUM_LENGTH=Integer        When calculating coverage based values (e.g. CV of coverage) only use transcripts of this
                                  length or greater.  Default value: 500.
 
-   IGNORE_SEQUENCE=String        If a read maps to a sequence specified with this option, all the bases in the read are 
-                                 counted as ignored bases.  
+   IGNORE_SEQUENCE=String        If a read maps to a sequence specified with this option, all the bases in the read are
+                                 counted as ignored bases.
 
    RRNA_FRAGMENT_PERCENTAGE=Double
-                                 This percentage of the length of a fragment must overlap one of the ribosomal intervals 
-                                 for a read or read pair by this must in order to be considered rRNA.  Default value: 0.8. 
+                                 This percentage of the length of a fragment must overlap one of the ribosomal intervals
+                                 for a read or read pair by this must in order to be considered rRNA.  Default value: 0.8.
 
    METRIC_ACCUMULATION_LEVEL=MetricAccumulationLevel
-   LEVEL=MetricAccumulationLevel The level(s) at which to accumulate metrics.    Possible values: {ALL_READS, SAMPLE, 
+   LEVEL=MetricAccumulationLevel The level(s) at which to accumulate metrics.    Possible values: {ALL_READS, SAMPLE,
                                  LIBRARY, READ_GROUP} This option may be specified 0 or more times.
-				 
+
    ASSUME_SORTED=Boolean
-   AS=Boolean                    If true (default), then the sort order in the header file will be ignored.  Default 
-                                 value: true. Possible values: {true, false} 
+   AS=Boolean                    If true (default), then the sort order in the header file will be ignored.  Default
+                                 value: true. Possible values: {true, false}
 
 @more_info@
 
--- a/picard_CollectWgsMetrics.xml	Sun Nov 27 15:11:50 2016 -0500
+++ b/picard_CollectWgsMetrics.xml	Tue Dec 06 10:04:41 2016 -0500
@@ -6,29 +6,30 @@
   <expand macro="requirements" />
   <command detect_errors="exit_code"><![CDATA[
     @java_options@
+    @symlink_element_identifier@
     ##set up input files
 
     #set $reference_fasta_filename = "localref.fa"
-    
+
     #if str( $reference_source.reference_source_selector ) == "history":
         ln -s "${reference_source.ref_file}" "${reference_fasta_filename}" &&
     #else:
         #set $reference_fasta_filename = str( $reference_source.ref_file.fields.path )
     #end if
-    
+
     picard
     CollectWgsMetrics
-    INPUT="${inputFile}"
+    INPUT='$inputFile.element_identifier'
     OUTPUT="${outFile}"
     REFERENCE_SEQUENCE="${reference_fasta_filename}"
     MINIMUM_MAPPING_QUALITY="${minimum_mapping_quality}"
     MINIMUM_BASE_QUALITY="${minimum_base_quality}"
     COVERAGE_CAP="${coverage_cap}"
-    
+
     VALIDATION_STRINGENCY="${validation_stringency}"
     QUIET=true
     VERBOSITY=ERROR
-  
+
   ]]></command>
   <inputs>
     <param format="sam,bam" name="inputFile" type="data" label="Select SAM/BAM dataset or dataset collection" help="If empty, upload or import a SAM/BAM dataset"/>
@@ -52,15 +53,15 @@
     <param name="minimum_base_quality" type="integer" value="20" label="Minimum base quality for a base to contribute coverage" help="MINIMUM_BASE_QUALITY; default=20"/>
     <param name="coverage_cap" type="integer" value="250" label="Treat bases with coverage exceeding this value as if they had coverage at this value" help="COVERAGE_CAP; default=250"/>
 
-    
+
     <expand macro="VS" />
-    
+
   </inputs>
-  
+
   <outputs>
     <data format="tabular" name="outFile" label="${tool.name} on ${on_string}: Summary data"/>
   </outputs>
-  
+
   <tests>
     <test>
       <param name="reference_source_selector" value="history" />
@@ -70,10 +71,10 @@
       <param name="ref_file" value="picard_CollectWgsMetrics_ref.fa" />
       <param name="inputFile" value="picard_CollectWgsMetrics.bam" ftype="bam" />
       <output name="outFile" file="picard_CollectWgsMetrics_test1.tab" ftype="tabular" lines_diff="4"/>
-    </test> 
+    </test>
   </tests>
-  
-  
+
+
   <help>
 
 .. class:: infomark
@@ -87,14 +88,14 @@
 @description@
 
   MINIMUM_MAPPING_QUALITY=Integer
-  MQ=Integer                    Minimum mapping quality for a read to contribute coverage.  Default value: 20. 
+  MQ=Integer                    Minimum mapping quality for a read to contribute coverage.  Default value: 20.
 
   MINIMUM_BASE_QUALITY=Integer
-  Q=Integer                     Minimum base quality for a base to contribute coverage.  Default value: 20. 
+  Q=Integer                     Minimum base quality for a base to contribute coverage.  Default value: 20.
 
   COVERAGE_CAP=Integer
-  CAP=Integer                   Treat bases with coverage exceeding this value as if they had coverage at this value.  
-                                Default value: 250. 
+  CAP=Integer                   Treat bases with coverage exceeding this value as if they had coverage at this value.
+                                Default value: 250.
 
 @more_info@
 
--- a/picard_DownsampleSam.xml	Sun Nov 27 15:11:50 2016 -0500
+++ b/picard_DownsampleSam.xml	Tue Dec 06 10:04:41 2016 -0500
@@ -6,9 +6,10 @@
   <expand macro="requirements" />
   <command detect_errors="exit_code"><![CDATA[
     @java_options@
+    @symlink_element_identifier@
     picard
     DownsampleSam
-      INPUT="${inputFile}"
+      INPUT='$inputFile.element_identifier'
       OUTPUT="${outFile}"
       PROBABILITY=${probability}
       RANDOM_SEED=${seed}
@@ -20,16 +21,16 @@
     <param format="sam,bam" name="inputFile" type="data" label="Select SAM/BAM dataset or dataset collection" help="If empty, upload or import a SAM or BAM dataset" />
     <param name="probability" type="float" min="0.0" max="1.0" label="Probability (between 0 and 1) that any given read will be kept" help="PROBABILITY; specify 1 to keep all reads, 0.1 to keep 10% of the reads" value="1" />
     <param name="seed" type="integer" label="Random seed value" help="RANDOM_SEED; default=1" value="1" />
-    
+
     <expand macro="VS" />
-    
+
   </inputs>
-  
-  
+
+
   <outputs>
     <data name="outFile" format="bam" label="${tool.name} on ${on_string}: downsampled BAM"/>
   </outputs>
-  
+
   <tests>
     <test>
       <param name="inputFile" value="picard_DownsampleSam.bam"  ftype="bam" />
@@ -52,18 +53,18 @@
 @description@
 
   INPUT=File
-  I=File              The input SAM or BAM file to downsample.  Required. 
+  I=File              The input SAM or BAM file to downsample.  Required.
 
   OUTPUT=File
-  O=File              The output, downsampled, SAM or BAM file to write.  Required. 
+  O=File              The output, downsampled, SAM or BAM file to write.  Required.
 
   RANDOM_SEED=Long
   R=Long              Random seed to use if reproducibilty is desired.  Setting to null will cause multiple
                       invocations to produce different results.
-                      
+
   PROBABILITY=Double
-  P=Double            The probability of keeping any individual read, between 0 and 1. 
-                       
+  P=Double            The probability of keeping any individual read, between 0 and 1.
+
 
 
 @more_info@
--- a/picard_EstimateLibraryComplexity.xml	Sun Nov 27 15:11:50 2016 -0500
+++ b/picard_EstimateLibraryComplexity.xml	Tue Dec 06 10:04:41 2016 -0500
@@ -6,13 +6,13 @@
   <expand macro="requirements" />
   <command detect_errors="exit_code"><![CDATA[
     @java_options@
-    
+    @symlink_element_identifier@
     picard
     EstimateLibraryComplexity
-    
-    INPUT="${inputFile}"
+
+    INPUT='$inputFile.element_identifier'
     OUTPUT="${outFile}"
-    
+
     MIN_IDENTICAL_BASES="${min_identical_bases}"
     MAX_DIFF_RATE="${max_diff_rate}"
     MIN_MEAN_QUALITY="${min_mean_quality}"
@@ -20,11 +20,11 @@
     #import pipes
     READ_NAME_REGEX=${ pipes.quote( str( $read_name_regex ) ) or "''" }
     OPTICAL_DUPLICATE_PIXEL_DISTANCE="${optical_duplicate_pixel_distance}"
-    
+
     VALIDATION_STRINGENCY="${validation_stringency}"
     QUIET=true
     VERBOSITY=ERROR
-  
+
   ]]></command>
   <inputs>
     <param format="bam" name="inputFile" type="data" label="Select SAM/BAM dataset or dataset collection" help="If empty, upload or import a SAM/BAM dataset" />
@@ -42,13 +42,13 @@
     <param name="optical_duplicate_pixel_distance" type="integer" value="100" min="0" max="500" label="The maximum offset between two duplicte clusters in order to consider them optical duplicates" help="OPTICAL_DUPLICATE_PIXEL_DISTANCE; default=100"/>
 
    <expand macro="VS" />
-    
-  </inputs> 
-  
+
+  </inputs>
+
   <outputs>
     <data format="tabular" name="outFile" label="${tool.name} on ${on_string}: Library complexity report"/>
   </outputs>
-  
+
   <tests>
     <test>
       <param name="inputFile" value="picard_EstimateLibraryComplexity.bam" ftype="bam"/>
@@ -62,8 +62,8 @@
       <output name="outFile" file="picard_EstimateLibraryComplexity_test1.tab" ftype="tabular" lines_diff="4"/>
     </test>
   </tests>
-  
-  
+
+
   <help>
 
 **Purpose**
@@ -86,40 +86,40 @@
 
 @description@
 
-  MIN_IDENTICAL_BASES=Integer   The minimum number of bases at the starts of reads that must be identical for reads to be 
-                                grouped together for duplicate detection.  In effect total_reads / 4^max_id_bases reads 
-                                will be compared at a time, so lower numbers will produce more accurate results but 
-                                consume exponentially more memory and CPU.  Default value: 5. 
-  
-  MAX_DIFF_RATE=Double          The maximum rate of differences between two reads to call them identical.  Default value: 
+  MIN_IDENTICAL_BASES=Integer   The minimum number of bases at the starts of reads that must be identical for reads to be
+                                grouped together for duplicate detection.  In effect total_reads / 4^max_id_bases reads
+                                will be compared at a time, so lower numbers will produce more accurate results but
+                                consume exponentially more memory and CPU.  Default value: 5.
+
+  MAX_DIFF_RATE=Double          The maximum rate of differences between two reads to call them identical.  Default value:
                                 0.03.
-  
-  MIN_MEAN_QUALITY=Integer      The minimum mean quality of the bases in a read pair for the read to be analyzed. Reads 
-                                with lower average quality are filtered out and not considered in any calculations.  
+
+  MIN_MEAN_QUALITY=Integer      The minimum mean quality of the bases in a read pair for the read to be analyzed. Reads
+                                with lower average quality are filtered out and not considered in any calculations.
                                 Default value: 20.
-  
-  MAX_GROUP_RATIO=Integer       Do not process self-similar groups that are this many times over the mean expected group 
-                                size. I.e. if the input contains 10m read pairs and MIN_IDENTICAL_BASES is set to 5, then 
+
+  MAX_GROUP_RATIO=Integer       Do not process self-similar groups that are this many times over the mean expected group
+                                size. I.e. if the input contains 10m read pairs and MIN_IDENTICAL_BASES is set to 5, then
                                 the mean expected group size would be approximately 10 reads.  Default value: 500.
-  
-  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. 
-                                These values are used to estimate the rate of optical duplication in order to give a more 
-                                accurate estimated library size. Set this option to null to disable optical duplicate 
-                                detection. The regular expression should contain three capture groups for the three 
-                                variables, in order. It must match the entire read name. Note that if the default regex 
-                                is specified, a regex match is not actually done, but instead the read name  is split on 
-                                colon character. For 5 element names, the 3rd, 4th and 5th elements are assumed to be 
-                                tile, x and y values. For 7 element names (CASAVA 1.8), the 5th, 6th, and 7th elements 
-                                are assumed to be tile, x and y values.  Default value: 
+
+  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.
+                                These values are used to estimate the rate of optical duplication in order to give a more
+                                accurate estimated library size. Set this option to null to disable optical duplicate
+                                detection. The regular expression should contain three capture groups for the three
+                                variables, in order. It must match the entire read name. Note that if the default regex
+                                is specified, a regex match is not actually done, but instead the read name  is split on
+                                colon character. For 5 element names, the 3rd, 4th and 5th elements are assumed to be
+                                tile, x and y values. For 7 element names (CASAVA 1.8), the 5th, 6th, and 7th elements
+                                are assumed to be tile, x and y values.  Default value:
                                 [a-zA-Z0-9]+:[0-9]:([0-9]+):([0-9]+):([0-9]+).*.
-  
-  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 
+
+  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.
-  
+
 
 @more_info@
 
--- a/picard_FastqToSam.xml	Sun Nov 27 15:11:50 2016 -0500
+++ b/picard_FastqToSam.xml	Tue Dec 06 10:04:41 2016 -0500
@@ -6,10 +6,9 @@
   <expand macro="requirements" />
   <command detect_errors="exit_code"><![CDATA[
     @java_options@
-    
     picard
     FastqToSam
-    
+
     #if str( $input_type.input_type_selector ) == "se":
       FASTQ="${input_type.fastq}"
     #elif str( $input_type.input_type_selector ) == "pe":
@@ -19,54 +18,54 @@
       FASTQ="${input_type.fastq.forward}"
       FASTQ2="${input_type.fastq.reverse}"
     #end if
-    
+
     QUALITY_FORMAT="${quality_format}"
     OUTPUT="${outFile}"
     READ_GROUP_NAME="${read_group_name}"
     SAMPLE_NAME="${sample_name}"
-    
+
     #if str( $library_name ):
       LIBRARY_NAME="${library_name}"
     #end if
-    
+
     #if str( $platform_unit ):
       PLATFORM_UNIT="${platform_unit}"
     #end if
-      
+
     #if str( $platform ):
       PLATFORM="${platform}"
     #end if
-      
+
     #if str( $sequencing_center ):
       SEQUENCING_CENTER="${sequencing_center}"
     #end if
-      
+
     #if str( $predicted_insert_size ):
       PREDICTED_INSERT_SIZE="${predicted_insert_size}"
     #end if
-      
+
     #if str( $comment ):
       COMMENT="${comment}"
     #end if
-      
+
     #if str( $description ):
       DESCRIPTION="${description}"
     #end if
-      
+
     #if str( $run_date ):
       RUN_DATE="${run_date}"
     #end if
-    
+
     MIN_Q="${min_q}"
     MAX_Q="${max_q}"
     STRIP_UNPAIRED_MATE_NUMBER="${strip_unpairied_mate_number}"
     ALLOW_AND_IGNORE_EMPTY_LINES="${allow_and_ignore_empty_lines}"
-    
+
     SORT_ORDER=coordinate
     VALIDATION_STRINGENCY="${validation_stringency}"
     QUIET=true
     VERBOSITY=ERROR
-  
+
   ]]></command>
   <inputs>
     <conditional name="input_type">
@@ -86,7 +85,7 @@
         <param name="fastq" type="data_collection" collection_type="paired" format="fastq" label="FASTQ paired dataset collection" help="FASTQ and FASTQ2; A collection of two datasets with forward and reverse reads. See help below on explanation of dataset collections"/>
       </when>
     </conditional>
-      
+
     <param name="quality_format" type="select" label="Select quality encoding scheme" help="QUALITY_FORMAT">
       <option value="Standard" selected="True">Sanger (+33)</option>
       <option value="Illumina">Illumina (+64)</option>
@@ -108,15 +107,15 @@
     <param name="max_q" type="integer" value="93" min="0" max="100" label="Minimum quality allowed in the input fastq" help="MAX_Q; An exception will be thrown if a quality is greater than this value; default=93"/>
     <param name="strip_unpairied_mate_number" type="boolean" truevalue="true" falsevalue="false" label="If true and this is an unpaired fastq any occurance of '/1' will be removed from the end of a read name" help="STRIP_UNPAIRED_MATE_NUMBER; default=false"/>
     <param name="allow_and_ignore_empty_lines" type="boolean" truevalue="true" falsevalue="false" label="Allow (and ignore) empty lines" help="ALLOW_AND_IGNORE_EMPTY_LINES; default=false"/>
-    
+
     <expand macro="VS" />
-    
-  </inputs> 
-  
+
+  </inputs>
+
   <outputs>
     <data format="bam" name="outFile" label="${tool.name} on ${on_string}: reads as unaligned BAM"/>
   </outputs>
-  
+
   <tests>
     <test>
       <param name="input_type_selector" value="pe" />
@@ -139,9 +138,9 @@
       <param name="fastq" value="picard_FastqToSam_read1.fq" ftype="fastq" />
       <param name="fastq2" value="picard_FastqToSam_read2.fq" ftype="fastq" />
       <output name="outFile" file="picard_FastqToSam_test1.bam" ftype="bam" lines_diff="4"/>
-    </test> 
+    </test>
   </tests>
-  
+
   <help>
 
 .. class:: infomark
@@ -157,62 +156,62 @@
 @description@
 
   FASTQ=File
-  F1=File                       Input fastq file for single end data, or first read in paired end 
+  F1=File                       Input fastq file for single end data, or first read in paired end
                                 data.  Required.
-                                
+
   FASTQ2=File
-  F2=File                       Input fastq file for the second read of paired end data (if used).  
+  F2=File                       Input fastq file for the second read of paired end data (if used).
 
   QUALITY_FORMAT=FastqQualityFormat
-  V=FastqQualityFormat          A value describing how the quality values are encoded in the fastq.  Either Solexa for 
-                                pre-pipeline 1.3 style scores (solexa scaling + 66), Illumina for pipeline 1.3 and above 
-                                (phred scaling + 64) or Standard for phred scaled scores with a character shift of 33.  
-                                If this value is not specified, the quality format will be detected automatically.  
-                                Default value: null. Possible values: {Solexa, Illumina, Standard} 
+  V=FastqQualityFormat          A value describing how the quality values are encoded in the fastq.  Either Solexa for
+                                pre-pipeline 1.3 style scores (solexa scaling + 66), Illumina for pipeline 1.3 and above
+                                (phred scaling + 64) or Standard for phred scaled scores with a character shift of 33.
+                                If this value is not specified, the quality format will be detected automatically.
+                                Default value: null. Possible values: {Solexa, Illumina, Standard}
 
   READ_GROUP_NAME=String
-  RG=String                     Read group name  Default value: A. 
-  
+  RG=String                     Read group name  Default value: A.
+
   SAMPLE_NAME=String
-  SM=String                     Sample name to insert into the read group header  Required. 
-  
+  SM=String                     Sample name to insert into the read group header  Required.
+
   LIBRARY_NAME=String
   LB=String                     The library name to place into the LB attribute in the read group header.
-  
+
   PLATFORM_UNIT=String
   PU=String                     The platform unit (often run_barcode.lane) to insert into the read group header.
-  
+
   PLATFORM=String
   PL=String                     The platform type (e.g. illumina, solid) to insert into the read group header.
-  
+
   SEQUENCING_CENTER=String
   CN=String                     The sequencing center from which the data originated.
-  
+
   PREDICTED_INSERT_SIZE=Integer
   PI=Integer                    Predicted median insert size, to insert into the read group header.
-  
+
   COMMENT=String
-  CO=String                     Comment to include in the merged output file's header. 
-  
+  CO=String                     Comment to include in the merged output file's header.
+
   DESCRIPTION=String
-  DS=String                     Inserted into the read group header. 
-  
+  DS=String                     Inserted into the read group header.
+
   RUN_DATE=Iso8601Date
-  DT=Iso8601Date                Date the run was produced, to insert into the read group header. 
-  
-  MIN_Q=Integer                 Minimum quality allowed in the input fastq.  An exception will be thrown if a quality is 
+  DT=Iso8601Date                Date the run was produced, to insert into the read group header.
+
+  MIN_Q=Integer                 Minimum quality allowed in the input fastq.  An exception will be thrown if a quality is
                                 less than this value.  Default value: 0.
-                                
-  MAX_Q=Integer                 Maximum quality allowed in the input fastq.  An exception will be thrown if a quality is 
+
+  MAX_Q=Integer                 Maximum quality allowed in the input fastq.  An exception will be thrown if a quality is
                                 greater than this value.  Default value: 93.
-  
+
   STRIP_UNPAIRED_MATE_NUMBER=Boolean
-                                If true and this is an unpaired fastq any occurance of '/1' will be removed from the end 
-                                of a read name.  Default value: false.  Possible values: {true, false} 
-  
+                                If true and this is an unpaired fastq any occurance of '/1' will be removed from the end
+                                of a read name.  Default value: false.  Possible values: {true, false}
+
   ALLOW_AND_IGNORE_EMPTY_LINES=Boolean
-                                Allow (and ignore) empty lines  Default value: false. Possible values: {true, false} 
-  
+                                Allow (and ignore) empty lines  Default value: false. Possible values: {true, false}
+
 
 @more_info@
 
--- a/picard_FilterSamReads.xml	Sun Nov 27 15:11:50 2016 -0500
+++ b/picard_FilterSamReads.xml	Tue Dec 06 10:04:41 2016 -0500
@@ -6,35 +6,35 @@
   <expand macro="requirements" />
   <command detect_errors="exit_code"><![CDATA[
     @java_options@
-    
+    @symlink_element_identifier@
     ##Sam Sorting is performed here because FilterSamReads requires input to be in query-sorted order
-    
+
     picard
     SortSam
-    INPUT="${inputFile}"
+    INPUT='$inputFile.element_identifier'
     OUTPUT=query_sorted_bam.bam
     SORT_ORDER=queryname
     VALIDATION_STRINGENCY=LENIENT
     QUIET=true
     VERBOSITY=ERROR
-    
+
     &&
-    
+
     picard
     FilterSamReads
     INPUT=query_sorted_bam.bam
     FILTER="${filter_type.filter}"
-    
+
     #if ( str( $filter_type.filter ) == "includeReadList" or str( $filter_type.filter ) == "excludeReadList" ):
       READ_LIST_FILE="${filter_type.read_list_file}"
     #end if
-    
+
     OUTPUT="${outFile}"
     SORT_ORDER=coordinate
     VALIDATION_STRINGENCY="${validation_stringency}"
     QUIET=true
     VERBOSITY=ERROR
-  
+
   ]]></command>
   <inputs>
     <param name="inputFile" type="data" format="sam,bam" label="Select SAM/BAM dataset or dataset collection" help="If empty, upload or import a SAM/BAM dataset"/>
@@ -54,15 +54,15 @@
         <param name="read_list_file" type="data" format="tabular" label="Dataset containing read names that will be EXCLUDED in the output" help="READ_LIST_FILE"/>
       </when>
     </conditional>
-    
+
     <expand macro="VS" />
-    
-  </inputs> 
-  
+
+  </inputs>
+
   <outputs>
     <data format="bam" name="outFile" label="${tool.name} on ${on_string}: filtered BAM"/>
   </outputs>
-  
+
   <tests>
     <test>
       <param name="inputFile" value="picard_FilterSamReads.bam" ftype="bam"/>
@@ -79,8 +79,8 @@
       <output name="outFile" file="picard_FilterSamReads_exclude_reads_test2.bam" ftype="bam" lines_diff="4"/>
     </test>
   </tests>
-  
-  
+
+
   <help>
 
 **Purpose**
@@ -93,32 +93,32 @@
 
 **Warning on using this tool on BWA-MEM output**
 
-This tool will likely fail on BAM datasets generated by BWA MEM as it generates partial read alignemnts. 
+This tool will likely fail on BAM datasets generated by BWA MEM as it generates partial read alignemnts.
 
 @dataset_collections@
 
 @description@
 
   FILTER=Filter                 Filter.  Required. Possible values:
-                                includeAligned [OUTPUT SAM/BAM will contain aligned 
-                                reads only. (Note that *both* first and 
+                                includeAligned [OUTPUT SAM/BAM will contain aligned
+                                reads only. (Note that *both* first and
                                 second of paired reads must be aligned to be included
-                                in the OUTPUT SAM or BAM)], 
-                                
+                                in the OUTPUT SAM or BAM)],
+
                                 excludeAligned [OUTPUT SAM/BAM will contain un-mapped reads only.
-                                (Note that *both* first and second of pair must be aligned to be 
+                                (Note that *both* first and second of pair must be aligned to be
                                 excluded from the OUTPUT SAM or BAM)]
-                                
-                                includeReadList [OUTPUT SAM/BAM will contain reads 
+
+                                includeReadList [OUTPUT SAM/BAM will contain reads
                                 that are supplied in the READ_LIST_FILE file]
-                                
-                                excludeReadList [OUTPUT bam will contain 
-                                reads that are *not* supplied in the READ_LIST_FILE file]} 
+
+                                excludeReadList [OUTPUT bam will contain
+                                reads that are *not* supplied in the READ_LIST_FILE file]}
 
   READ_LIST_FILE=File
-  RLF=File                      Read List File containing reads that will be included or excluded from the OUTPUT SAM or 
-                                BAM file.  Default value: null. 
-  
+  RLF=File                      Read List File containing reads that will be included or excluded from the OUTPUT SAM or
+                                BAM file.  Default value: null.
+
 @more_info@
 
   </help>
--- a/picard_FixMateInformation.xml	Sun Nov 27 15:11:50 2016 -0500
+++ b/picard_FixMateInformation.xml	Tue Dec 06 10:04:41 2016 -0500
@@ -6,33 +6,32 @@
   <expand macro="requirements" />
   <command detect_errors="exit_code"><![CDATA[
     @java_options@
-    
     picard
     FixMateInformation
     INPUT="${inputFile}"
     OUTPUT="${outFile}"
     ASSUME_SORTED=${assume_sorted}
     ADD_MATE_CIGAR=${add_mate_cigar}
-    
+
     SORT_ORDER=coordinate
     VALIDATION_STRINGENCY="${validation_stringency}"
     QUIET=true
     VERBOSITY=ERROR
-  
+
   ]]></command>
   <inputs>
     <param name="inputFile" multiple="True" type="data" format="sam,bam" label="Select SAM/BAM dataset or dataset collection" help="If empty, upload or import a SAM/BAM dataset"/>
     <param name="add_mate_cigar" type="boolean" checked="true" truevalue="True" falsevalue="False" label="Adds the mate CIGAR tag (MC) if true, does not if false" help="ADD_MATE_CIGAR; default=True"/>
     <param name="assume_sorted" type="boolean" truevalue="True" falsevalue="False" label="Assume that the input file is QUERYNAME sorted" help="ASSUME_SORTED; default=False"/>
- 
+
     <expand macro="VS" />
-    
-  </inputs> 
-  
+
+  </inputs>
+
   <outputs>
     <data format="bam" name="outFile" label="${tool.name} on ${on_string}: BAM with fixed mates"/>
   </outputs>
-  
+
   <tests>
     <test>
       <param name="inputFile" value="picard_FixMateInformation.bam" ftype="bam"/>
@@ -42,8 +41,8 @@
       <output name="outFile" file="picard_FixMateInformation_test1.bam" ftype="bam" lines_diff="4"/>
     </test>
   </tests>
-  
-  
+
+
   <help>
 
 **Purpose**
@@ -64,12 +63,12 @@
 @description@
 
   ASSUME_SORTED=Boolean
-  AS=Boolean                    If true, assume that the input file is queryname sorted, even if the header says 
-                                otherwise.  Default value: false. 
-  
+  AS=Boolean                    If true, assume that the input file is queryname sorted, even if the header says
+                                otherwise.  Default value: false.
+
   ADD_MATE_CIGAR=Boolean
-  MC=Boolean                    Adds the mate CIGAR tag (MC) if true, does not if false.  Default value: true. 
-  
+  MC=Boolean                    Adds the mate CIGAR tag (MC) if true, does not if false.  Default value: true.
+
 @more_info@
 
   </help>
--- a/picard_MarkDuplicates.xml	Sun Nov 27 15:11:50 2016 -0500
+++ b/picard_MarkDuplicates.xml	Tue Dec 06 10:04:41 2016 -0500
@@ -6,11 +6,11 @@
   <expand macro="requirements" />
   <command detect_errors="exit_code"><![CDATA[
     @java_options@
-
+    @symlink_element_identifier@
     picard
     MarkDuplicates
 
-    INPUT="${inputFile}"
+    INPUT='$inputFile.element_identifier'
     OUTPUT="${outFile}"
 
     METRICS_FILE="${metrics_file}"
--- a/picard_MarkDuplicatesWithMateCigar.xml	Sun Nov 27 15:11:50 2016 -0500
+++ b/picard_MarkDuplicatesWithMateCigar.xml	Tue Dec 06 10:04:41 2016 -0500
@@ -6,40 +6,40 @@
   <expand macro="requirements" />
   <command detect_errors="exit_code"><![CDATA[
     @java_options@
-    
+    @symlink_element_identifier@
     picard
     MarkDuplicatesWithMateCigar
-    
-    INPUT="${inputFile}"
+
+    INPUT='$inputFile.element_identifier'
     OUTPUT="${outFile}"
-    
+
     METRICS_FILE="${metrics_file}"
     COMMENT="${comment}"
 
     MINIMUM_DISTANCE="${minimum_distance}"
     SKIP_PAIRS_WITH_NO_MATE_CIGAR="${skip_pairs_with_no_mate_cigar}"
-    
-    
+
+
     REMOVE_DUPLICATES="${remove_duplicates}"
     ASSUME_SORTED="${assume_sorted}"
-    
+
     DUPLICATE_SCORING_STRATEGY="${duplicate_scoring_strategy}"
-    
+
     #import pipes
     READ_NAME_REGEX=${ pipes.quote( str( $read_name_regex ) ) or "''" }
     OPTICAL_DUPLICATE_PIXEL_DISTANCE="${optical_duplicate_pixel_distance}"
-    
-    
+
+
     BLOCK_SIZE=100000
     VALIDATION_STRINGENCY="${validation_stringency}"
     QUIET=true
     VERBOSITY=ERROR
-  
+
   ]]></command>
   <inputs>
     <param format="bam" name="inputFile" type="data" label="Select SAM/BAM dataset or dataset collection" help="If empty, upload or import a SAM/BAM dataset"/>
       <param name="comment" type="text" label="Add this comment to BAM dataset"/>
-    
+
     <param name="minimum_distance" type="integer" value="-1" label="The minimum distance to buffer records to account for clipping on the 5' end of the records" help="MINIMUM_DISTANCE; Set this number to -1 to use twice the first read's read length (or 100, whichever is smaller); default=-1"/>
     <param name="skip_pairs_with_no_mate_cigar" type="boolean" checked="true" truevalue="true" falsevalue="false" label="Skip record pairs with no mate cigar and include them in the output" help="SKIP_PAIRS_WITH_NO_MATE_CIGAR; default=True"/>
     <param name="remove_duplicates" type="boolean" label="If true do not write duplicates to the output file instead of writing them with appropriate flags set" help="REMOVE_DUPLICATES; default=False"/>
@@ -60,14 +60,14 @@
     <param name="optical_duplicate_pixel_distance" type="integer" value="100" min="0" max="500" label="The maximum offset between two duplicte clusters in order to consider them optical duplicates" help="OPTICAL_DUPLICATE_PIXEL_DISTANCE; default=100"/>
 
    <expand macro="VS" />
-    
-  </inputs> 
-  
+
+  </inputs>
+
   <outputs>
     <data format="txt" name="metrics_file" label="${tool.name} on ${on_string}: MarkDuplicate metrics"/>
     <data format="bam" name="outFile" label="${tool.name} on ${on_string}: MarkDuplicates BAM output"/>
   </outputs>
-  
+
   <tests>
     <test>
       <param name="inputFile" value="picard_MarkDuplicatesWithMateCigar.bam" ftype="bam"/>
@@ -83,8 +83,8 @@
       <output name="outFile" file="picard_MarkDuplicatesWithMateCigar_test1.bam" ftype="bam" lines_diff="4"/>
     </test>
   </tests>
-  
-  
+
+
   <help>
 
 **Purpose**
@@ -110,44 +110,44 @@
 
 @description@
 
-  MINIMUM_DISTANCE=Integer      The minimum distance to buffer records to account for clipping on the 5' end of the 
-                                records.Set this number to -1 to use twice the first read's read length (or 100, 
-                                whichever is smaller).  Default value: -1. This option can be set to 'null' to clear the 
-                                default value. 
-  
+  MINIMUM_DISTANCE=Integer      The minimum distance to buffer records to account for clipping on the 5' end of the
+                                records.Set this number to -1 to use twice the first read's read length (or 100,
+                                whichever is smaller).  Default value: -1. This option can be set to 'null' to clear the
+                                default value.
+
   SKIP_PAIRS_WITH_NO_MATE_CIGAR=Boolean
-                                Skip record pairs with no mate cigar and include them in the output.  Default value: 
-                                true. This option can be set to 'null' to clear the default value. Possible values: 
-                                {true, false} 
+                                Skip record pairs with no mate cigar and include them in the output.  Default value:
+                                true. This option can be set to 'null' to clear the default value. Possible values:
+                                {true, false}
 
-  COMMENT=String  
-  CO=String                     Comment(s) to include in the output file's header.  This option may be specified 0 or 
-                                more times. 
+  COMMENT=String
+  CO=String                     Comment(s) to include in the output file's header.  This option may be specified 0 or
+                                more times.
+
+  REMOVE_DUPLICATES=Boolean     If true do not write duplicates to the output file instead of writing them with
+                                appropriate flags set.  Default value: false.
 
-  REMOVE_DUPLICATES=Boolean     If true do not write duplicates to the output file instead of writing them with 
-                                appropriate flags set.  Default value: false.  
-  
-  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. 
-                                These values are used to estimate the rate of optical duplication in order to give a more 
-                                accurate estimated library size. Set this option to null to disable optical duplicate 
-                                detection. The regular expression should contain three capture groups for the three 
-                                variables, in order. It must match the entire read name. Note that if the default regex 
-                                is specified, a regex match is not actually done, but instead the read name  is split on 
-                                colon character. For 5 element names, the 3rd, 4th and 5th elements are assumed to be 
-                                tile, x and y values. For 7 element names (CASAVA 1.8), the 5th, 6th, and 7th elements 
-                                are assumed to be tile, x and y values.  Default value: 
+  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.
+                                These values are used to estimate the rate of optical duplication in order to give a more
+                                accurate estimated library size. Set this option to null to disable optical duplicate
+                                detection. The regular expression should contain three capture groups for the three
+                                variables, in order. It must match the entire read name. Note that if the default regex
+                                is specified, a regex match is not actually done, but instead the read name  is split on
+                                colon character. For 5 element names, the 3rd, 4th and 5th elements are assumed to be
+                                tile, x and y values. For 7 element names (CASAVA 1.8), the 5th, 6th, and 7th elements
+                                are assumed to be tile, x and y values.  Default value:
                                 [a-zA-Z0-9]+:[0-9]:([0-9]+):([0-9]+):([0-9]+).*.
-                                
+
   DUPLICATE_SCORING_STRATEGY=ScoringStrategy
-  DS=ScoringStrategy            The scoring strategy for choosing the non-duplicate among candidates.  Default value: 
-                                TOTAL_MAPPED_REFERENCE_LENGTH. Possible values: {SUM_OF_BASE_QUALITIES, TOTAL_MAPPED_REFERENCE_LENGTH} 
-  
+  DS=ScoringStrategy            The scoring strategy for choosing the non-duplicate among candidates.  Default value:
+                                TOTAL_MAPPED_REFERENCE_LENGTH. Possible values: {SUM_OF_BASE_QUALITIES, TOTAL_MAPPED_REFERENCE_LENGTH}
+
   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. 
+                                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.
 
 @more_info@
 
--- a/picard_MeanQualityByCycle.xml	Sun Nov 27 15:11:50 2016 -0500
+++ b/picard_MeanQualityByCycle.xml	Tue Dec 06 10:04:41 2016 -0500
@@ -9,30 +9,30 @@
   <command detect_errors="exit_code"><![CDATA[
     @java_options@
     ##set up input files
-
+    @symlink_element_identifier@
     #set $reference_fasta_filename = "localref.fa"
-    
+
     #if str( $reference_source.reference_source_selector ) == "history":
         ln -s "${reference_source.ref_file}" "${reference_fasta_filename}" &&
     #else:
         #set $reference_fasta_filename = str( $reference_source.ref_file.fields.path )
     #end if
-    
+
     picard
     MeanQualityByCycle
-    INPUT="${inputFile}"
+    INPUT='$inputFile.element_identifier'
     OUTPUT="${outFile}"
     CHART_OUTPUT="${pdfFile}"
     REFERENCE_SEQUENCE="${reference_fasta_filename}"
     ALIGNED_READS_ONLY="${aligned_reads_only}"
     PF_READS_ONLY="${pf_reads_only}"
-  
+
     ASSUME_SORTED="${assume_sorted}"
-    
+
     VALIDATION_STRINGENCY="${validation_stringency}"
     QUIET=true
     VERBOSITY=ERROR
-  
+
   ]]></command>
   <inputs>
     <param format="sam,bam" name="inputFile" type="data" label="SAM/BAM dataset or dataset collection" help="If empty, upload or import a SAM/BAM dataset."/>
@@ -55,16 +55,16 @@
     <param name="aligned_reads_only" type="boolean" truevalue="true" falsevalue="false" label="If set to true, calculate mean quality over aligned reads only" help="ALIGNED_READS_ONLY; default=False"/>
     <param name="pf_reads_only" type="boolean" truevalue="true" falsevalue="false" label="If set to true calculate mean quality over reads passing quality filter" help="PF_READS_ONLY; default=False"/>
     <param name="assume_sorted" type="boolean" label="Assume the input file is already sorted" checked="true" truevalue="true" falsevalue="false" help="ASSUME_SORTED"/>
-    
+
     <expand macro="VS" />
-    
+
   </inputs>
-  
+
   <outputs>
     <data format="tabular" name="outFile" label="${tool.name} on ${on_string}: Summary data"/>
     <data format="pdf" name="pdfFile" label="${tool.name} on ${on_string}: Chart PDF"/>
   </outputs>
-  
+
   <tests>
     <test>
       <param name="assume_sorted" value="true" />
@@ -74,31 +74,31 @@
       <param name="ref_file" value="picard_MeanQualityByCycle_ref.fa" />
       <param name="inputFile" value="picard_MeanQualityByCycle.bam" ftype="bam" />
       <output name="outFile" file="picard_MeanQualityByCycle_test1.tab" ftype="tabular" lines_diff="4"/>
-    </test> 
+    </test>
   </tests>
-  
-  
+
+
   <help>
 
 .. class:: infomark
 
 **Purpose**
 
-Program to chart the distribution of base qualities by cycle within reads supplied in a SAM or BAM dataset. 
+Program to chart the distribution of base qualities by cycle within reads supplied in a SAM or BAM dataset.
 
 @dataset_collections@
 
 @description@
 
-  ALIGNED_READS_ONLY=Boolean    If set to true, calculate the base distribution over aligned reads only.  Default value: 
-                                false. Possible values: {true, false} 
+  ALIGNED_READS_ONLY=Boolean    If set to true, calculate the base distribution over aligned reads only.  Default value:
+                                false. Possible values: {true, false}
 
-  PF_READS_ONLY=Boolean         If set to true calculate the base distribution over PF reads only.  Default value: false. 
-                                This option can be set to 'null' to clear the default value. Possible values: {true, 
-                                false} 
+  PF_READS_ONLY=Boolean         If set to true calculate the base distribution over PF reads only.  Default value: false.
+                                This option can be set to 'null' to clear the default value. Possible values: {true,
+                                false}
 
   ASSUME_SORTED=Boolean
-  AS=Boolean                    If true (default), then the sort order in the header file will be ignored.  Default: True 
+  AS=Boolean                    If true (default), then the sort order in the header file will be ignored.  Default: True
 
 @more_info@
 
--- a/picard_MergeBamAlignment.xml	Sun Nov 27 15:11:50 2016 -0500
+++ b/picard_MergeBamAlignment.xml	Tue Dec 06 10:04:41 2016 -0500
@@ -8,29 +8,29 @@
     @java_options@
     #set $picard_dict = "localref.dict"
     #set $ref_fasta = "localref.fa"     ## This is done because picards "likes" .fa extension
-    
+
     ln -s "${reference_source.ref_file}" "${ref_fasta}" &&
-       
+
     #if str( $reference_source.reference_source_selector ) == "history":
-        
+
       picard CreateSequenceDictionary REFERENCE="${ref_fasta}" OUTPUT="${picard_dict}"
       QUIET=true
       VERBOSITY=ERROR
-      
+
       &&
-      
+
     #else:
-    
+
       #set $ref_fasta = str( $reference_source.ref_file.fields.path )
-    
+
     #end if
-    
+
     picard
     MergeBamAlignment
       UNMAPPED_BAM="${unmapped_bam}"
-      
+
       PAIRED_RUN=true ##This argument is ignored and will be removed. Required. Possible values: {true, false}
-      
+
       #if str( $aligned_or_read1_and_read2.aligned_or_read1_and_read2_selector ) == "paired_one_file":
         #for $dataset in $aligned_or_read1_and_read2.aligned_bams:
           ALIGNED_BAM="${dataset.aligned_bam}"
@@ -47,48 +47,48 @@
           READ1_ALIGNED_BAM="${dataset.read1_aligned_bam}"
         #end for
       #end if
-     
+
       OUTPUT="${outFile}"
       REFERENCE_SEQUENCE="${ref_fasta}"
-      
+
       CLIP_ADAPTERS="${clip_adapters}"
       IS_BISULFITE_SEQUENCE="${is_bisulfite_sequence}"
       ALIGNED_READS_ONLY="${aligned_reads_only}"
       MAX_INSERTIONS_OR_DELETIONS="${max_insertions_or_deletions}"
-      
+
       #for $attribute in $attributes_to_retain:
         ATTRIBUTES_TO_RETAIN="${$attribute.attribute}"
       #end for
-      
+
       #for $attribute in $attributes_to_remove:
         ATTRIBUTES_TO_REMOVE="${$attribute.attribute}"
       #end for
-    
+
       READ1_TRIM="${read1_trim}"
       READ2_TRIM="${read2_trim}"
-      
+
       #if str( $orientations ) != "None":
         #for $orientation in str( $orientations ).split(','):   ## See trello card https://trello.com/c/9nW02Zhd
           EXPECTED_ORIENTATIONS="${orientation}"
         #end for
       #end if
-      
-      ALIGNER_PROPER_PAIR_FLAGS="${aligner_proper_pair_flags}"      
+
+      ALIGNER_PROPER_PAIR_FLAGS="${aligner_proper_pair_flags}"
       PRIMARY_ALIGNMENT_STRATEGY="${primary_alignment_strategy}"
       CLIP_OVERLAPPING_READS="${clip_overlapping_reads}"
       INCLUDE_SECONDARY_ALIGNMENTS="${include_secondary_alignments}"
       ADD_MATE_CIGAR="${add_mate_cigar}"
-      
+
       VALIDATION_STRINGENCY="${validation_stringency}"
 
       SORT_ORDER=coordinate
       QUIET=true
       VERBOSITY=ERROR
-      
+
   ]]></command>
-  
+
   <inputs>
-    
+
      <conditional name="reference_source">
       <param name="reference_source_selector" type="select" label="Load reference genome from">
         <option value="cached">Local cache</option>
@@ -103,11 +103,11 @@
           <validator type="no_options" message="A built-in dictionary is not available for the build associated with the selected input file"/>
         </param>
       </when>
-      <when value="history"> 
+      <when value="history">
         <param name="ref_file" type="data" format="fasta" label="Use the following dataset to create dictionary" help="You can upload a FASTA sequence to the history from which Picard will automatically generate dictionary using CreateSequenceDictionary command" />
       </when>
     </conditional>
-    
+
     <param format="sam,bam" name="unmapped_bam" type="data" label="Selected unaligned SAM or BAM with original reads" help="UNMAPPED_BAM; This dataset must be sorted in queryname order (use picard_SortSam to do this)" />
     <conditional name="aligned_or_read1_and_read2">
       <param name="aligned_or_read1_and_read2_selector" type="select" label="What type of aligned data do you have?">
@@ -134,39 +134,39 @@
         </repeat>
       </when>
     </conditional>
-    
+
     <param name="clip_adapters" type="boolean" checked="true" label="Whether to clip adapters where identified" help="CLIP_ADAPTERS; default=True"/>
     <param name="is_bisulfite_sequence" type="boolean" label="Whether the data is from bisulfite sequencing (used when caculating the NM tag)" help="IS_BISULFITE_SEQUENCE; default=False"/>
     <param name="aligned_reads_only" type="boolean" label="Whether to output only aligned reads" help="ALIGNED_READS_ONLY; default=False"/>
     <param name="max_insertions_or_deletions" type="integer" value="1" label="The maximum number of insertions or deletions permitted for an alignment to be included" help="MAX_INSERTIONS_OR_DELETIONS; Alignments with more than this many insertions or deletions will be ignored. Set to -1 to allow any number of insertions or deletions. default=1"/>
- 
+
     <repeat name="attributes_to_retain" title="Retain the following alignment attribute" min="0" help="You can provide multiple attributes">
       <param name="attribute" type="text" label="Reserved alignment attributes (tags starting with X, Y, or Z) that should be brought over from the alignment data when merging" help="ATTRIBUTES_TO_RETAIN; example: XA"/>
     </repeat>
-    
+
     <repeat name="attributes_to_remove" title="Remove the following alignment attribute" min="0" help="You can provide multiple attributes">
       <param name="attribute" type="text" label="Attributes from the alignment record that should be removed when merging." help="ATTRIBUTES_TO_REMOVE; This overrides ATTRIBUTES_TO_RETAIN if they share common tags"/>
     </repeat>
-    
+
     <param name="read1_trim" type="integer" value="0" label="The number of bases trimmed from the beginning of read 1 prior to alignment" help="READ1_TRIM; default=0"/>
     <param name="read2_trim" type="integer" value="0" label="The number of bases trimmed from the beginning of read 2 prior to alignment" help="READ2_TRIM; default=0"/>
-    
+
     <param name="orientations" type="select" multiple="True" display="checkboxes" label="The expected orientation of proper read pairs" help="EXPECTED_ORIENTATIONS; multiple orinetations can be selected">
       <option value="FR">Forward/Reverse (FR)</option>
       <option value="RF">Reverse/Forward (RF)</option>
       <option value="TANDEM">Tandem</option>
     </param>
- 
-    
+
+
     <param name="aligner_proper_pair_flags" type="boolean" label="Use the aligner's idea of what a proper pair is rather than computing in this program" help="ALIGNER_PROPER_PAIR_FLAGS; default=False"/>
-    
+
     <param name="primary_alignment_strategy" type="select" label="Strategy for selecting primary alignment when the aligner has provided more than one alignment for a pair or fragments" help="PRIMARY_ALIGNMENT_STRATEGY; see help below for more info; default=BestMapq">
       <option value="BestMapq" selected="True">BestMapq</option>
       <option value="EarliestFragment">EarliestFragment</option>
       <option value="BestEndMapq">BestEndMapq</option>
       <option value="MostDistant">MostDistant</option>
     </param>
-    
+
     <param name="clip_overlapping_reads" type="boolean" checked="True" label="For paired reads, soft clip the 3' end of each read if necessary so that it does not extend past the 5' end of its mate" help="CLIP_OVERLAPPING_READS; default=True"/>
     <param name="include_secondary_alignments" type="boolean" checked="True" label="If false, do not write secondary alignments to output" help="INCLUDE_SECONDARY_ALIGNMENTS; default=True"/>
     <param name="add_mate_cigar" type="boolean" checked="True" label="Adds the mate CIGAR tag (MC) if true, does not if false" help="ADD_MATE_CIGAR; default=True"/>
@@ -197,8 +197,8 @@
       <output name="outFile" file="picard_MergeBamAlignment_test1.bam" ftype="bam" lines_diff="4"/>
     </test>
   </tests>
-  
-  
+
+
   <help>
 
 .. class:: infomark
@@ -212,96 +212,96 @@
 @description@
 
   UNMAPPED_BAM=File
-  UNMAPPED=File                 Original SAM or BAM file of unmapped reads, which must be in queryname order.  Required. 
-  
+  UNMAPPED=File                 Original SAM or BAM file of unmapped reads, which must be in queryname order.  Required.
+
   ALIGNED_BAM=File
-  ALIGNED=File                  SAM or BAM file(s) with alignment data.  This option may be specified 0 or more times.  
-                                Cannot be used in conjuction with option(s) READ1_ALIGNED_BAM (R1_ALIGNED) 
+  ALIGNED=File                  SAM or BAM file(s) with alignment data.  This option may be specified 0 or more times.
+                                Cannot be used in conjuction with option(s) READ1_ALIGNED_BAM (R1_ALIGNED)
                                 READ2_ALIGNED_BAM (R2_ALIGNED)
-  
+
   READ1_ALIGNED_BAM=File
-  R1_ALIGNED=File               SAM or BAM file(s) with alignment data from the first read of a pair.  This option may be 
-                                specified 0 or more times.  Cannot be used in conjuction with option(s) ALIGNED_BAM 
+  R1_ALIGNED=File               SAM or BAM file(s) with alignment data from the first read of a pair.  This option may be
+                                specified 0 or more times.  Cannot be used in conjuction with option(s) ALIGNED_BAM
                                 (ALIGNED)
-  
+
   READ2_ALIGNED_BAM=File
-  R2_ALIGNED=File               SAM or BAM file(s) with alignment data from the second read of a pair.  This option may 
-                                be specified 0 or more times.  Cannot be used in conjuction with option(s) ALIGNED_BAM 
+  R2_ALIGNED=File               SAM or BAM file(s) with alignment data from the second read of a pair.  This option may
+                                be specified 0 or more times.  Cannot be used in conjuction with option(s) ALIGNED_BAM
                                 (ALIGNED)
-  
+
   PAIRED_RUN=Boolean
-  PE=Boolean                    This argument is ignored and will be removed.  Required. Possible values: {true, false} 
-  
+  PE=Boolean                    This argument is ignored and will be removed.  Required. Possible values: {true, false}
+
   JUMP_SIZE=Integer
-  JUMP=Integer                  The expected jump size (required if this is a jumping library). Deprecated. Use 
-                                EXPECTED_ORIENTATIONS instead  Default value: null.  Cannot be used in conjuction with 
+  JUMP=Integer                  The expected jump size (required if this is a jumping library). Deprecated. Use
+                                EXPECTED_ORIENTATIONS instead  Default value: null.  Cannot be used in conjuction with
                                 option(s) EXPECTED_ORIENTATIONS (ORIENTATIONS)
-  
-  CLIP_ADAPTERS=Boolean         Whether to clip adapters where identified.  Default value: true. Possible values: {true, false} 
-  
-  IS_BISULFITE_SEQUENCE=Boolean Whether the lane is bisulfite sequence (used when caculating the NM tag).  Default value: 
-                                false. Possible values: {true, false} 
-  
-  ALIGNED_READS_ONLY=Boolean    Whether to output only aligned reads. Default value: false. Possible values: {true, false} 
-  
+
+  CLIP_ADAPTERS=Boolean         Whether to clip adapters where identified.  Default value: true. Possible values: {true, false}
+
+  IS_BISULFITE_SEQUENCE=Boolean Whether the lane is bisulfite sequence (used when caculating the NM tag).  Default value:
+                                false. Possible values: {true, false}
+
+  ALIGNED_READS_ONLY=Boolean    Whether to output only aligned reads. Default value: false. Possible values: {true, false}
+
   MAX_INSERTIONS_OR_DELETIONS=Integer
-  MAX_GAPS=Integer              The maximum number of insertions or deletions permitted for an alignment to be included. 
-                                Alignments with more than this many insertions or deletions will be ignored. Set to -1 to 
+  MAX_GAPS=Integer              The maximum number of insertions or deletions permitted for an alignment to be included.
+                                Alignments with more than this many insertions or deletions will be ignored. Set to -1 to
                                 allow any number of insertions or deletions.  Default value: 1.
-  
-  ATTRIBUTES_TO_RETAIN=String   Reserved alignment attributes (tags starting with X, Y, or Z) that should be brought over 
-                                from the alignment data when merging.  This option may be specified 0 or more times. 
-  
-  ATTRIBUTES_TO_REMOVE=String   Attributes from the alignment record that should be removed when merging.  This overrides 
-                                ATTRIBUTES_TO_RETAIN if they share common tags.  This option may be specified 0 or more 
-                                times. 
-  
+
+  ATTRIBUTES_TO_RETAIN=String   Reserved alignment attributes (tags starting with X, Y, or Z) that should be brought over
+                                from the alignment data when merging.  This option may be specified 0 or more times.
+
+  ATTRIBUTES_TO_REMOVE=String   Attributes from the alignment record that should be removed when merging.  This overrides
+                                ATTRIBUTES_TO_RETAIN if they share common tags.  This option may be specified 0 or more
+                                times.
+
   READ1_TRIM=Integer
-  R1_TRIM=Integer               The number of bases trimmed from the beginning of read 1 prior to alignment  Default 
-                                value: 0. 
-  
+  R1_TRIM=Integer               The number of bases trimmed from the beginning of read 1 prior to alignment  Default
+                                value: 0.
+
   READ2_TRIM=Integer
-  R2_TRIM=Integer               The number of bases trimmed from the beginning of read 2 prior to alignment  Default 
-                                value: 0. 
-  
+  R2_TRIM=Integer               The number of bases trimmed from the beginning of read 2 prior to alignment  Default
+                                value: 0.
+
   EXPECTED_ORIENTATIONS=PairOrientation
-  ORIENTATIONS=PairOrientation  The expected orientation of proper read pairs. Replaces JUMP_SIZE  Possible values: {FR, 
-                                RF, TANDEM} This option may be specified 0 or more times.  Cannot be used in conjuction 
+  ORIENTATIONS=PairOrientation  The expected orientation of proper read pairs. Replaces JUMP_SIZE  Possible values: {FR,
+                                RF, TANDEM} This option may be specified 0 or more times.  Cannot be used in conjuction
                                 with option(s) JUMP_SIZE (JUMP)
-  
+
   ALIGNER_PROPER_PAIR_FLAGS=Boolean
-                                Use the aligner's idea of what a proper pair is rather than computing in this program.  
-                                Default value: false. Possible values: {true, false} 
-  
+                                Use the aligner's idea of what a proper pair is rather than computing in this program.
+                                Default value: false. Possible values: {true, false}
+
   SORT_ORDER=SortOrder
   SO=SortOrder                  The order in which the merged reads should be output.  Default value: coordinate.
-                                Possible values: {unsorted, queryname, coordinate} 
-  
+                                Possible values: {unsorted, queryname, coordinate}
+
   PRIMARY_ALIGNMENT_STRATEGY=PrimaryAlignmentStrategy
-                                Strategy for selecting primary alignment when the aligner has provided more than one 
-                                alignment for a pair or fragment, and none are marked as primary, more than one is marked 
-                                as primary, or the primary alignment is filtered out for some reason. BestMapq expects 
-                                that multiple alignments will be correlated with HI tag, and prefers the pair of 
-                                alignments with the largest MAPQ, in the absence of a primary selected by the aligner. 
-                                EarliestFragment prefers the alignment which maps the earliest base in the read. Note 
-                                that EarliestFragment may not be used for paired reads. BestEndMapq is appropriate for 
-                                cases in which the aligner is not pair-aware, and does not output the HI tag. It simply 
-                                picks the alignment for each end with the highest MAPQ, and makes those alignments 
-                                primary, regardless of whether the two alignments make sense together.MostDistant is also 
-                                for a non-pair-aware aligner, and picks the alignment pair with the largest insert size. 
-                                If all alignments would be chimeric, it picks the alignments for each end with the best 
+                                Strategy for selecting primary alignment when the aligner has provided more than one
+                                alignment for a pair or fragment, and none are marked as primary, more than one is marked
+                                as primary, or the primary alignment is filtered out for some reason. BestMapq expects
+                                that multiple alignments will be correlated with HI tag, and prefers the pair of
+                                alignments with the largest MAPQ, in the absence of a primary selected by the aligner.
+                                EarliestFragment prefers the alignment which maps the earliest base in the read. Note
+                                that EarliestFragment may not be used for paired reads. BestEndMapq is appropriate for
+                                cases in which the aligner is not pair-aware, and does not output the HI tag. It simply
+                                picks the alignment for each end with the highest MAPQ, and makes those alignments
+                                primary, regardless of whether the two alignments make sense together.MostDistant is also
+                                for a non-pair-aware aligner, and picks the alignment pair with the largest insert size.
+                                If all alignments would be chimeric, it picks the alignments for each end with the best
                                 MAPQ.  For all algorithms, ties are resolved arbitrarily.  Default value: BestMapq.
-                                Possible values: {BestMapq, EarliestFragment, BestEndMapq, MostDistant} 
-  
-  CLIP_OVERLAPPING_READS=BooleanFor paired reads, soft clip the 3' end of each read if necessary so that it does not 
-                                extend past the 5' end of its mate.  Default value: true. Possible values: {true, false} 
-  
+                                Possible values: {BestMapq, EarliestFragment, BestEndMapq, MostDistant}
+
+  CLIP_OVERLAPPING_READS=BooleanFor paired reads, soft clip the 3' end of each read if necessary so that it does not
+                                extend past the 5' end of its mate.  Default value: true. Possible values: {true, false}
+
   INCLUDE_SECONDARY_ALIGNMENTS=Boolean
                                 If false, do not write secondary alignments to output.  Default value: true.
-                                Possible values: {true, false} 
-  
+                                Possible values: {true, false}
+
   ADD_MATE_CIGAR=Boolean
-  MC=Boolean                    Adds the mate CIGAR tag (MC) if true, does not if false. Possible values: {true, false} 
+  MC=Boolean                    Adds the mate CIGAR tag (MC) if true, does not if false. Possible values: {true, false}
 
 
 
--- a/picard_MergeSamFiles.xml	Sun Nov 27 15:11:50 2016 -0500
+++ b/picard_MergeSamFiles.xml	Tue Dec 06 10:04:41 2016 -0500
@@ -6,17 +6,16 @@
   <expand macro="requirements" />
   <command detect_errors="exit_code"><![CDATA[
     @java_options@
-    
     picard
     MergeSamFiles
-    
+
     #for $element in $inputFile:
       INPUT="${element}"
     #end for
-    
+
     OUTPUT="${outFile}"
     MERGE_SEQUENCE_DICTIONARIES="${merge_sequence_dictionaries}"
-    
+
     ASSUME_SORTED="${assume_sorted}"
     #for $element in $comments:
       COMMENT="${element.comment}"
@@ -27,7 +26,7 @@
     VALIDATION_STRINGENCY="${validation_stringency}"
     QUIET=true
     VERBOSITY=ERROR
-  
+
   ]]></command>
   <inputs>
     <param format="sam,bam" name="inputFile" type="data" multiple="True" label="Select SAM/BAM dataset or dataset collection" help="If empty, upload or import a SAM/BAM dataset"/>
@@ -37,15 +36,15 @@
     <repeat name="comments" title="Comment" min="0" help="You can provide multiple comments">
       <param name="comment" type="text" label="Add this comment to BAM dataset" help="COMMENT"/>
     </repeat>
-    
+
     <expand macro="VS" />
-    
-  </inputs> 
-  
+
+  </inputs>
+
   <outputs>
     <data format="bam" name="outFile" label="${tool.name} on ${on_string}: Merged BAM dataset"/>
   </outputs>
-  
+
   <tests>
     <test>
       <param name="inputFile" value="picard_MergeSamFiles_input1.bam,picard_MergeSamFiles_input2.bam,picard_MergeSamFiles_input3.bam" ftype="bam"/>
@@ -55,8 +54,8 @@
       <output name="outFile" file="picard_MergeSamFiles_test1.bam" ftype="bam" lines_diff="4"/>
     </test>
   </tests>
-  
-  
+
+
   <help>
 
 **Purpose**
@@ -68,17 +67,17 @@
 @description@
 
   ASSUME_SORTED=Boolean
-  AS=Boolean                    If true, assume that the input files are in the same sort order as the requested output 
-                                sort order, even if their headers say otherwise.  Default value: false. This option can 
-                                be set to 'null' to clear the default value. Possible values: {true, false} 
-  
+  AS=Boolean                    If true, assume that the input files are in the same sort order as the requested output
+                                sort order, even if their headers say otherwise.  Default value: false. This option can
+                                be set to 'null' to clear the default value. Possible values: {true, false}
+
   MERGE_SEQUENCE_DICTIONARIES=Boolean
-  MSD=Boolean                   Merge the sequence dictionaries  Default value: false. This option can be set to 'null' 
-                                to clear the default value. Possible values: {true, false} 
-  
+  MSD=Boolean                   Merge the sequence dictionaries  Default value: false. This option can be set to 'null'
+                                to clear the default value. Possible values: {true, false}
+
   COMMENT=String
-  CO=String                     Comment(s) to include in the merged output file's header.  This option may be specified 0 
-                                or more times. 
+  CO=String                     Comment(s) to include in the merged output file's header.  This option may be specified 0
+                                or more times.
 
 
 @more_info@
--- a/picard_NormalizeFasta.xml	Sun Nov 27 15:11:50 2016 -0500
+++ b/picard_NormalizeFasta.xml	Tue Dec 06 10:04:41 2016 -0500
@@ -6,34 +6,32 @@
   <expand macro="requirements" />
   <command detect_errors="exit_code"><![CDATA[
     @java_options@
-    
-  
-    ## Two lines below are due to the fact that picard likes fasta files to have extension .fa  
-    #set $fasta_file="local_fasta.fa"
-    ln -s "${inputFile}" "${fasta_file}" &&    
-    
+
+    ## Two lines below are due to the fact that picard likes fasta files to have extension .fa
+    ln -s '$inputFile' '$inputFile.element_identifier'.fa &&
+
     picard
     NormalizeFasta
-    
-    INPUT="${fasta_file}"
+
+    INPUT='$inputFile.element_identifier'.fa
     OUTPUT="${outFile}"
     LINE_LENGTH="${line_length}"
     TRUNCATE_SEQUENCE_NAMES_AT_WHITESPACE="${truncate_sequence_names_at_whitespaces}"
-    
+
     QUIET=true
     VERBOSITY=ERROR
-  
+
   ]]></command>
   <inputs>
     <param format="fasta" name="inputFile" type="data" label="FASTA dataset or dataset collection" help="If empty, upload or import a FASTA dataset" />
     <param name="line_length" type="integer" value="100" min="1" max="200" label="The line length to be used for the output fasta file" help="LINE_LENGTH; default=100"/>
     <param name="truncate_sequence_names_at_whitespaces" type="boolean" label="Truncate sequence names at first whitespace" help="TRUNCATE_SEQUENCE_NAMES_AT_WHITESPACE; default=False"/>
-  </inputs> 
-  
+  </inputs>
+
   <outputs>
     <data format="fasta" name="outFile" label="${tool.name} on ${on_string}: Normalized FASTA dataset"/>
   </outputs>
-  
+
   <tests>
     <test>
       <param name="inputFile" value="picard_NormalizeFasta_ref.fa" ftype="fasta"/>
@@ -42,8 +40,8 @@
       <output name="outFile" file="picard_NormalizeFasta_test1.fa" ftype="fasta"/>
     </test>
   </tests>
-  
-  
+
+
   <help>
 
 **Purpose**
@@ -54,10 +52,10 @@
 
 @description@
 
-  LINE_LENGTH=Integer           The line length to be used for the output fasta file.  Default value: 100. 
-  
+  LINE_LENGTH=Integer           The line length to be used for the output fasta file.  Default value: 100.
+
   TRUNCATE_SEQUENCE_NAMES_AT_WHITESPACE=Boolean
-                                Truncate sequence names at first whitespace.  Default value: false. Possible values: {true, false} 
+                                Truncate sequence names at first whitespace.  Default value: false. Possible values: {true, false}
 
 @more_info@
 
--- a/picard_QualityScoreDistribution.xml	Sun Nov 27 15:11:50 2016 -0500
+++ b/picard_QualityScoreDistribution.xml	Tue Dec 06 10:04:41 2016 -0500
@@ -9,31 +9,31 @@
   <command detect_errors="exit_code"><![CDATA[
     @java_options@
     ##set up input files
-
+    @symlink_element_identifier@
     #set $reference_fasta_filename = "localref.fa"
-    
+
     #if str( $reference_source.reference_source_selector ) == "history":
         ln -s "${reference_source.ref_file}" "${reference_fasta_filename}" &&
     #else:
         #set $reference_fasta_filename = str( $reference_source.ref_file.fields.path )
     #end if
-    
+
     picard
     QualityScoreDistribution
-    INPUT="${inputFile}"
+    INPUT='$inputFile.element_identifier'
     OUTPUT="${outFile}"
     CHART_OUTPUT="${pdfFile}"
     REFERENCE_SEQUENCE="${reference_fasta_filename}"
     ALIGNED_READS_ONLY="${aligned_reads_only}"
     PF_READS_ONLY="${pf_reads_only}"
     INCLUDE_NO_CALLS="${include_no_calls}"
-  
+
     ASSUME_SORTED="${assume_sorted}"
-    
+
     VALIDATION_STRINGENCY="${validation_stringency}"
     QUIET=true
     VERBOSITY=ERROR
-  
+
   ]]></command>
   <inputs>
     <param format="sam,bam" name="inputFile" type="data" label="Select SAM/BAM dataset or dataset collection" help="If empty, upload or import a SAM/BAM dataset"/>
@@ -57,16 +57,16 @@
     <param name="pf_reads_only" type="boolean" truevalue="true" falsevalue="false" label="If set to true calculate mean quality over reads passing quality filter" help="PF_READS_ONLY; default=False"/>
     <param name="include_no_calls" type="boolean" label="If set to true, include quality for no-call bases in the distribution" help="INCLUDE_NO_CALLS; default=False"/>
     <param name="assume_sorted" type="boolean" label="Assume the input file is already sorted" checked="true" truevalue="true" falsevalue="false" help="ASSUME_SORTED; default=True"/>
-    
+
     <expand macro="VS" />
-    
+
   </inputs>
-  
+
   <outputs>
     <data format="tabular" name="outFile" label="${tool.name} on ${on_string}: Summary data"/>
     <data format="pdf" name="pdfFile" label="${tool.name} on ${on_string}: Chart PDF"/>
   </outputs>
-  
+
   <tests>
     <test>
       <param name="assume_sorted" value="true" />
@@ -77,10 +77,10 @@
       <param name="ref_file" value="picard_QualityScoreDistribution_ref.fa" />
       <param name="inputFile" value="picard_QualityScoreDistribution.bam" ftype="bam" />
       <output name="outFile" file="picard_QualityScoreDistribution_test1.tab" ftype="tabular" lines_diff="4"/>
-    </test> 
+    </test>
   </tests>
-  
-  
+
+
   <help>
 
 .. class:: infomark
@@ -93,17 +93,17 @@
 
 @description@
 
-  ALIGNED_READS_ONLY=Boolean    If set to true, calculate the base distribution over aligned reads only.  Default value: 
-                                false. Possible values: {true, false} 
+  ALIGNED_READS_ONLY=Boolean    If set to true, calculate the base distribution over aligned reads only.  Default value:
+                                false. Possible values: {true, false}
 
-  PF_READS_ONLY=Boolean         If set to true calculate the base distribution over PF reads only.  Default value: false. 
+  PF_READS_ONLY=Boolean         If set to true calculate the base distribution over PF reads only.  Default value: false.
                                 Possible values: {true, false}
-                                
-  INCLUDE_NO_CALLS=Boolean      If set to true, include quality for no-call bases in the distribution.  Default value: 
-                                false. Possible values: {true, false} 
+
+  INCLUDE_NO_CALLS=Boolean      If set to true, include quality for no-call bases in the distribution.  Default value:
+                                false. Possible values: {true, false}
 
   ASSUME_SORTED=Boolean
-  AS=Boolean                    If true (default), then the sort order in the header file will be ignored.  Default: True 
+  AS=Boolean                    If true (default), then the sort order in the header file will be ignored.  Default: True
 
 @more_info@
 
--- a/picard_ReorderSam.xml	Sun Nov 27 15:11:50 2016 -0500
+++ b/picard_ReorderSam.xml	Tue Dec 06 10:04:41 2016 -0500
@@ -6,41 +6,42 @@
   <expand macro="requirements" />
   <command detect_errors="exit_code"><![CDATA[
     @java_options@
+    @symlink_element_identifier@
     #set $picard_dict = "localref.dict"
     #set $ref_fasta = "localref.fa"     ## This is done because picards "likes" .fa extension
-    
+
     ln -s "${reference_source.ref_file}" "${ref_fasta}" &&
-       
+
     #if str( $reference_source.reference_source_selector ) == "history":
-        
+
       picard CreateSequenceDictionary REFERENCE="${ref_fasta}" OUTPUT="${picard_dict}"
       QUIET=true
       VERBOSITY=ERROR
-      
+
       &&
-      
+
     #else:
-    
+
       #set $ref_fasta = str( $reference_source.ref_file.fields.path )
-    
+
     #end if
-    
+
     picard
     ReorderSam
-      INPUT="${inputFile}"
+      INPUT='$inputFile.element_identifier'
       OUTPUT="${outFile}"
       REFERENCE="${ref_fasta}"
       ALLOW_INCOMPLETE_DICT_CONCORDANCE="${allow_incomplete_dict_concordance}"
       ALLOW_CONTIG_LENGTH_DISCORDANCE="${allow_contig_length_discordance}"
-      
+
       VALIDATION_STRINGENCY="${validation_stringency}"
       QUIET=true
       VERBOSITY=ERROR
-      
+
   ]]></command>
-  
+
   <inputs>
-    
+
      <conditional name="reference_source">
       <param name="reference_source_selector" type="select" label="Load reference genome from">
         <option value="cached">Local cache</option>
@@ -55,7 +56,7 @@
           <validator type="no_options" message="A built-in dictionary is not available for the build associated with the selected input file"/>
         </param>
       </when>
-      <when value="history"> 
+      <when value="history">
         <param name="ref_file" type="data" format="fasta" label="Use the following dataset to create dictionary" help="You can upload a FASTA sequence to the history from which Picard will automatically generate dictionary using CreateSequenceDictionary command" />
       </when>
     </conditional>
@@ -64,7 +65,7 @@
     <param name="allow_incomplete_dict_concordance" type="boolean" label="If true, then allows only a partial overlap of the BAM contigs with the new reference sequence contigs" help="ALLOW_INCOMPLETE_DICT_CONCORDANCE; By default, this tool requires a corresponding contig in the new reference for each read contig; default=False"/>
     <param name="allow_contig_length_discordance" type="boolean" label="If true, then permits mapping from a read contig to a new reference contig with the same name but a different length" help="ALLOW_CONTIG_LENGTH_DISCORDANCE; HIGHLY DANGEROUS! Only use if you know what you are doing; default=False"/>
     <expand macro="VS" />
-    
+
   </inputs>
   <outputs>
     <data name="outFile" format="bam" label="${tool.name} on ${on_string}: Reordered BAM"/>
@@ -79,8 +80,8 @@
       <output name="outFile" file="picard_ReorderSam_test1.bam" ftype="bam" lines_diff="4"/>
     </test>
   </tests>
-  
-  
+
+
   <help>
 
 .. class:: infomark
@@ -100,14 +101,14 @@
 @description@
 
   ALLOW_INCOMPLETE_DICT_CONCORDANCE=Boolean
-  S=Boolean                     If true, then allows only a partial overlap of the BAM contigs with the new reference 
-                                sequence contigs.  By default, this tool requires a corresponding contig in the new 
-                                reference for each read contig  Default value: false. Possible values: {true, false} 
-  
+  S=Boolean                     If true, then allows only a partial overlap of the BAM contigs with the new reference
+                                sequence contigs.  By default, this tool requires a corresponding contig in the new
+                                reference for each read contig  Default value: false. Possible values: {true, false}
+
   ALLOW_CONTIG_LENGTH_DISCORDANCE=Boolean
-  U=Boolean                     If true, then permits mapping from a read contig to a new reference contig with the same 
-                                name but a different length.  Highly dangerous, only use if you know what you are doing.  
-                                Default value: false.  Possible values: {true, false} 
+  U=Boolean                     If true, then permits mapping from a read contig to a new reference contig with the same
+                                name but a different length.  Highly dangerous, only use if you know what you are doing.
+                                Default value: false.  Possible values: {true, false}
 
 @more_info@
   </help>
--- a/picard_ReplaceSamHeader.xml	Sun Nov 27 15:11:50 2016 -0500
+++ b/picard_ReplaceSamHeader.xml	Tue Dec 06 10:04:41 2016 -0500
@@ -6,32 +6,32 @@
   <expand macro="requirements" />
   <command detect_errors="exit_code"><![CDATA[
     @java_options@
-    
-  
-    ## Two lines below are due to the fact that picard likes fasta files to have extension .fa  
+    @symlink_element_identifier@
+
+    ## Two lines below are due to the fact that picard likes fasta files to have extension .fa
     #set $fasta_file="local_fasta.fa"
-    ln -s "${inputFile}" "${fasta_file}" &&    
-    
+    ln -s "${inputFile}" "${fasta_file}" &&
+
     picard
     ReplaceSamHeader
-    
-    INPUT="${inputFile}"
+
+    INPUT='$inputFile.element_identifier'
     HEADER="${header}"
     OUTPUT="${outFile}"
-    
+
     QUIET=true
     VERBOSITY=ERROR
-  
+
   ]]></command>
   <inputs>
     <param format="sam,bam" name="inputFile" type="data" label="Select SAM/BAM dataset or dataset collection (header recepient dataset)" help="If empty, upload or import a SAM/BAM dataset"/>
     <param name="header" type="data" format="sam,bam" label="SAM/BAM dataset from which Header will be read (header source dataset)" help="HEADER; If empty, upload or import a SAM/BAM dataset"/>
-  </inputs> 
-  
+  </inputs>
+
   <outputs>
     <data format="bam" name="outFile" label="${tool.name} on ${on_string}: BAM file with replaced header"/>
   </outputs>
-  
+
   <tests>
     <test>
       <param name="inputFile" value="picard_ReplaceSamHeader.bam" ftype="bam"/>
@@ -39,8 +39,8 @@
       <output name="outFile" file="picard_ReplaceSamHeader_test1.bam" ftype="bam"/>
     </test>
   </tests>
-  
-  
+
+
   <help>
 
 **Purpose**
@@ -50,7 +50,7 @@
 
 @description@
 
-  HEADER=File                   SAM file from which SAMFileHeader will be read.  Required. 
+  HEADER=File                   SAM file from which SAMFileHeader will be read.  Required.
 
 @more_info@
 
--- a/picard_RevertOriginalBaseQualitiesAndAddMateCigar.xml	Sun Nov 27 15:11:50 2016 -0500
+++ b/picard_RevertOriginalBaseQualitiesAndAddMateCigar.xml	Tue Dec 06 10:04:41 2016 -0500
@@ -6,21 +6,20 @@
   <expand macro="requirements" />
   <command detect_errors="exit_code"><![CDATA[
     @java_options@
-    
     picard
     RevertOriginalBaseQualitiesAndAddMateCigar
-    
-    INPUT="${inputFile}"
+
+    INPUT='$inputFile'
     OUTPUT="${outFile}"
-    
+
     RESTORE_ORIGINAL_QUALITIES="${restore_original_qualities}"
     MAX_RECORDS_TO_EXAMINE="${max_records_to_examine}"
-    
+
     SORT_ORDER=coordinate
     VALIDATION_STRINGENCY="${validation_stringency}"
     QUIET=true
     VERBOSITY=ERROR
-  
+
   ]]></command>
   <inputs>
     <param format="sam,bam" name="inputFile" type="data" multiple="True" label="Select SAM/BAM dataset or dataset collection" help="If empty, upload or import a SAM/BAM dataset"/>
@@ -28,13 +27,13 @@
     <param name="max_records_to_examine" type="integer" value="10000" min="0" label="The maximum number of records to examine to determine if we can exit early and not output, given that there are a no original base qualities (if we are to restore) and mate cigars exist. Set to 0 to never skip the dataset" help="MAX_RECORDS_TO_EXAMINE; default=10,000"/>
 
     <expand macro="VS" />
-    
-  </inputs> 
-  
+
+  </inputs>
+
   <outputs>
     <data format="bam" name="outFile" label="${tool.name} on ${on_string}: Reverted BAM dataset"/>
   </outputs>
-  
+
   <tests>
     <test>
       <param name="inputFile" value="picard_RevertOriginalBaseQualitiesAndAddMateCigar.bam" ftype="bam"/>
@@ -44,8 +43,8 @@
       <output name="outFile" file="picard_RevertOriginalBaseQualitiesAndAddMateCigar_test1.bam" ftype="bam" lines_diff="4"/>
     </test>
   </tests>
-  
-  
+
+
   <help>
 
 **Purpose**
@@ -57,11 +56,11 @@
 @description@
 
   RESTORE_ORIGINAL_QUALITIES=Boolean
-  OQ=Boolean                    True to restore original qualities from the OQ field to the QUAL field if available.  
-                                Default value: true. Possible values: {true, false} 
-  
-  MAX_RECORDS_TO_EXAMINE=IntegerThe maximum number of records to examine to determine if we can exit early and not 
-                                output, given that there are a no original base qualities (if we are to restore) and mate 
+  OQ=Boolean                    True to restore original qualities from the OQ field to the QUAL field if available.
+                                Default value: true. Possible values: {true, false}
+
+  MAX_RECORDS_TO_EXAMINE=IntegerThe maximum number of records to examine to determine if we can exit early and not
+                                output, given that there are a no original base qualities (if we are to restore) and mate
                                 cigars exist. Set to 0 to never skip the file.  Default value: 10000.
 
 @more_info@
--- a/picard_RevertSam.xml	Sun Nov 27 15:11:50 2016 -0500
+++ b/picard_RevertSam.xml	Tue Dec 06 10:04:41 2016 -0500
@@ -6,31 +6,30 @@
   <expand macro="requirements" />
   <command detect_errors="exit_code"><![CDATA[
     @java_options@
-    
     picard
     RevertSam
-    
-    INPUT="${inputFile}"
+
+    INPUT='$inputFile'
     OUTPUT="${outFile}"
-    
+
     RESTORE_ORIGINAL_QUALITIES="${restore_original_qualities}"
     REMOVE_DUPLICATE_INFORMATION="${remove_duplicate_information}"
     REMOVE_ALIGNMENT_INFORMATION="${remove_alignment_information}"
-     
+
     #for $attribute_to_clear in $attributes_to_clear:
       ATTRIBUTE_TO_CLEAR="${attribute_to_clear.attribute}"
     #end for
-    
+
     SANITIZE="${sanitize}"
     MAX_DISCARD_FRACTION="${max_discard_fraction}"
     SAMPLE_ALIAS="${sample_alias}"
     LIBRARY_NAME="${library_name}"
-    
+
     SORT_ORDER="${sort_order}"
     VALIDATION_STRINGENCY="${validation_stringency}"
     QUIET=true
     VERBOSITY=ERROR
-  
+
   ]]></command>
   <inputs>
     <param format="sam,bam" name="inputFile" type="data" multiple="True" label="Select SAM/BAM dataset or dataset collection" help="If empty, upload or import a SAM/BAM dataset"/>
@@ -50,13 +49,13 @@
       <option value="unsorted">Unsorted</option>
     </param>
     <expand macro="VS" />
-    
-  </inputs> 
-  
+
+  </inputs>
+
   <outputs>
     <data format="bam" name="outFile" label="${tool.name} on ${on_string}: Reverted BAM dataset"/>
   </outputs>
-  
+
   <tests>
     <test>
       <param name="inputFile" value="picard_RevertSam.bam" ftype="bam"/>
@@ -73,8 +72,8 @@
       <output name="outFile" file="picard_RevertSam_test1.bam" ftype="bam" lines_diff="4"/>
     </test>
   </tests>
-  
-  
+
+
   <help>
 
 **Purpose**
@@ -85,46 +84,46 @@
 
 @description@
 
-  SORT_ORDER=SortOrder  
+  SORT_ORDER=SortOrder
   SO=SortOrder                  The sort order to create the reverted output file with.  Default value: queryname.
-                                Possible values: {unsorted, queryname, coordinate} 
-  
+                                Possible values: {unsorted, queryname, coordinate}
+
   RESTORE_ORIGINAL_QUALITIES=Boolean
-  OQ=Boolean                    True to restore original qualities from the OQ field to the QUAL field if available.  
-                                Default value: true. Possible values: {true, false} 
-  
+  OQ=Boolean                    True to restore original qualities from the OQ field to the QUAL field if available.
+                                Default value: true. Possible values: {true, false}
+
   REMOVE_DUPLICATE_INFORMATION=Boolean
-                                Remove duplicate read flags from all reads.  Note that if this is true and 
-                                REMOVE_ALIGNMENT_INFORMATION==false,  the output may have the unusual but sometimes 
-                                desirable trait of having unmapped reads that are marked as duplicates.  Default value: 
-                                true. Possible values: {true, false} 
-  
+                                Remove duplicate read flags from all reads.  Note that if this is true and
+                                REMOVE_ALIGNMENT_INFORMATION==false,  the output may have the unusual but sometimes
+                                desirable trait of having unmapped reads that are marked as duplicates.  Default value:
+                                true. Possible values: {true, false}
+
   REMOVE_ALIGNMENT_INFORMATION=Boolean
-                                Remove all alignment information from the file.  Default value: true. TPossible values: {true, false} 
-  
-  ATTRIBUTE_TO_CLEAR=String     When removing alignment information, the set of optional tags to remove.  This option may 
-                                be specified 0 or more times. 
-  
-  SANITIZE=Boolean              WARNING: This option is potentially destructive. If enabled will discard reads in order 
-                                to produce a consistent output BAM. Reads discarded include (but are not limited to) 
-                                paired reads with missing mates, duplicated records, records with mismatches in length of 
-                                bases and qualities. This option can only be enabled if the output sort order is 
-                                queryname and will always cause sorting to occur.  Possible values: {true, false} 
-  
-  MAX_DISCARD_FRACTION=Double   If SANITIZE=true and higher than MAX_DISCARD_FRACTION reads are discarded due to 
-                                sanitization thenthe program will exit with an Exception instead of exiting cleanly. 
-                                Output BAM will still be valid.  Default value: 0.01. 
-  
+                                Remove all alignment information from the file.  Default value: true. TPossible values: {true, false}
+
+  ATTRIBUTE_TO_CLEAR=String     When removing alignment information, the set of optional tags to remove.  This option may
+                                be specified 0 or more times.
+
+  SANITIZE=Boolean              WARNING: This option is potentially destructive. If enabled will discard reads in order
+                                to produce a consistent output BAM. Reads discarded include (but are not limited to)
+                                paired reads with missing mates, duplicated records, records with mismatches in length of
+                                bases and qualities. This option can only be enabled if the output sort order is
+                                queryname and will always cause sorting to occur.  Possible values: {true, false}
+
+  MAX_DISCARD_FRACTION=Double   If SANITIZE=true and higher than MAX_DISCARD_FRACTION reads are discarded due to
+                                sanitization thenthe program will exit with an Exception instead of exiting cleanly.
+                                Output BAM will still be valid.  Default value: 0.01.
+
   SAMPLE_ALIAS=String
-  ALIAS=String                  The sample alias to use in the reverted output file.  This will override the existing 
-                                sample alias in the file and is used only if all the read groups in the input file have 
-                                the same sample alias   Default value: null. 
-  
+  ALIAS=String                  The sample alias to use in the reverted output file.  This will override the existing
+                                sample alias in the file and is used only if all the read groups in the input file have
+                                the same sample alias   Default value: null.
+
   LIBRARY_NAME=String
-  LIB=String                    The library name to use in the reverted output file.  This will override the existing 
-                                sample alias in the file and is used only if all the read groups in the input file have 
-                                the same sample alias   Default value: null. 
-  
+  LIB=String                    The library name to use in the reverted output file.  This will override the existing
+                                sample alias in the file and is used only if all the read groups in the input file have
+                                the same sample alias   Default value: null.
+
 @more_info@
 
   </help>
--- a/picard_SamToFastq.xml	Sun Nov 27 15:11:50 2016 -0500
+++ b/picard_SamToFastq.xml	Tue Dec 06 10:04:41 2016 -0500
@@ -5,16 +5,17 @@
   </macros>
   <expand macro="requirements" />
   <command detect_errors="exit_code"><![CDATA[
-     
+
     echo "BAM" > $report &&    ## This is necessary for output dataset detection (see output tags below)
-    
+
     @java_options@
-    
+    @symlink_element_identifier@
+
     picard
     SamToFastq
-    
-    INPUT="${inputFile}"
-    
+
+    INPUT='$inputFile.element_identifier'
+
     #if str( $output_per_rg ) == "true":
       OUTPUT_PER_RG=true
       OUTPUT_DIR=.
@@ -25,34 +26,34 @@
     #elif str( $output_per_rg ) == "false" and str( $interleave ) == "true":
       FASTQ=INTERLEAVED.fastq
     #end if
-  
+
     RE_REVERSE="${re_reverse}"
     INTERLEAVE="${interleave}"
     INCLUDE_NON_PF_READS="${include_non_pf_reads}"
     CLIPPING_ATTRIBUTE="${clipping_attribute}"
     CLIPPING_ACTION="${clipping_action}"
     READ1_TRIM="${read1_trim}"
-    
+
     #if int($read1_max_bases_to_write) > -1:
       READ1_MAX_BASES_TO_WRITE="${read1_max_bases_to_write}"
     #end if
-    
+
     READ2_TRIM="${read2_trim}"
-    
+
     #if int($read2_max_bases_to_write) > -1:
       READ2_MAX_BASES_TO_WRITE="${read2_max_bases_to_write}"
     #end if
-    
+
     INCLUDE_NON_PRIMARY_ALIGNMENTS="${include_non_primary_alignments}"
-    
-    
+
+
     VALIDATION_STRINGENCY="${validation_stringency}"
     QUIET=true
     VERBOSITY=ERROR
-  
+
   ]]></command>
   <inputs>
-    
+
     <param format="sam,bam" name="inputFile" type="data" label="Select SAM/BAM dataset or dataset collection" help="If empty, upload or import a SAM/BAM dataset"/>
     <param name="output_per_rg" type="boolean" checked="False" label="Do you want to output a fastq file per read group (two fastq files per read group if the group is paired)" help="OUTPUT_PER_RG; default=False"/>
     <param name="re_reverse" type="boolean" checked="True" label="Re-reverse bases and qualities of reads with negative strand flag set before writing them to fastq" help="RE_REVERSE; default=True"/>
@@ -65,18 +66,18 @@
     <param name="read2_trim" type="integer" value="0" min="0" label="The number of bases to trim from the beginning of read 2" help="READ2_TRIM; default=0"/>
     <param name="read2_max_bases_to_write" type="integer" value="-1" label="The maximum number of bases to write from read 2 after trimming" help="READ2_MAX_BASES_TO_WRITE; If there are fewer than this many bases left after trimming, all will be written. If this value is null then all bases left after trimming will be written; default=null (-1)"/>
     <param name="include_non_primary_alignments" type="boolean" label="If true, include non-primary alignments in the output" help="INCLUDE_NON_PRIMARY_ALIGNMENTS; Support of non-primary alignments in SamToFastq is not comprehensive, so there may be exceptions if this is set to true and there are paired reads with non-primary alignments; default=False"/>
-    
+
     <expand macro="VS" />
-    
-  </inputs> 
-  
+
+  </inputs>
+
   <outputs>
     <!-- here dataset discovery is based on fact that if OUTPUT_PER_RG=true this tool automatically adds .fastq extension to emitted files -->
     <data format="txt" name="report" label="SamToFastq run" hidden="true">
       <discover_datasets pattern="(?P&lt;designation&gt;.+)\.fastq" ext="fastqsanger" visible="true"/>
     </data>
   </outputs>
-  
+
   <tests>
     <test>
       <param name="inputFile" value="picard_SamToFastq.bam" ftype="bam"/>
@@ -90,7 +91,7 @@
       <param name="read1_max_bases_to_write" value="-1"/>
       <param name="read2_trim" value="0" />
       <param name="read2_max_bases_to_write" value="-1"/>
-      <param name="include_non_primary_alignments" value="false"/>   
+      <param name="include_non_primary_alignments" value="false"/>
       <output name="report">
         <assert_contents>
           <has_line line="BAM" />
@@ -99,8 +100,8 @@
       </output>
     </test>
   </tests>
-  
-  
+
+
   <help>
 
 **Purpose**
@@ -120,71 +121,71 @@
 @description@
 
   FASTQ=File
-  F=File                        Output fastq file (single-end fastq or, if paired, first end of the pair fastq).  
+  F=File                        Output fastq file (single-end fastq or, if paired, first end of the pair fastq).
                                 Required.  Cannot be used in conjuction with option(s) OUTPUT_PER_RG (OPRG)
-  
+
   SECOND_END_FASTQ=File
-  F2=File                       Output fastq file (if paired, second end of the pair fastq).  Default value: null.  
+  F2=File                       Output fastq file (if paired, second end of the pair fastq).  Default value: null.
                                 Cannot be used in conjuction with option(s) OUTPUT_PER_RG (OPRG)
-  
+
   UNPAIRED_FASTQ=File
-  FU=File                       Output fastq file for unpaired reads; may only be provided in paired-fastq mode  Default 
+  FU=File                       Output fastq file for unpaired reads; may only be provided in paired-fastq mode  Default
                                 value: null.  Cannot be used in conjuction with option(s) OUTPUT_PER_RG (OPRG)
-  
+
   OUTPUT_PER_RG=Boolean
-  OPRG=Boolean                  Output a fastq file per read group (two fastq files per read group if the group is 
+  OPRG=Boolean                  Output a fastq file per read group (two fastq files per read group if the group is
                                 paired).  Default value: false. Possible values: {true, false}  Cannot be used in
                                 conjuction with option(s) SECOND_END_FASTQ (F2) UNPAIRED_FASTQ (FU) FASTQ (F)
-  
+
   OUTPUT_DIR=File
-  ODIR=File                     Directory in which to output the fastq file(s).  Used only when OUTPUT_PER_RG is true.  
-                                Default value: null. 
-  
+  ODIR=File                     Directory in which to output the fastq file(s).  Used only when OUTPUT_PER_RG is true.
+                                Default value: null.
+
   RE_REVERSE=Boolean
-  RC=Boolean                    Re-reverse bases and qualities of reads with negative strand flag set before writing them 
-                                to fastq  Default value: true. Possible values: {true, false} 
-  
+  RC=Boolean                    Re-reverse bases and qualities of reads with negative strand flag set before writing them
+                                to fastq  Default value: true. Possible values: {true, false}
+
   INTERLEAVE=Boolean
-  INTER=Boolean                 Will generate an interleaved fastq if paired, each line will have /1 or /2 to describe 
-                                which end it came from  Default value: false. Possible values: {true, false} 
-  
+  INTER=Boolean                 Will generate an interleaved fastq if paired, each line will have /1 or /2 to describe
+                                which end it came from  Default value: false. Possible values: {true, false}
+
   INCLUDE_NON_PF_READS=Boolean
-  NON_PF=Boolean                Include non-PF reads from the SAM file into the output FASTQ files. PF means 'passes 
-                                filtering'. Reads whose 'not passing quality controls' flag is set are non-PF reads.  
-                                Default value: false. Possible values: {true, false} 
-  
+  NON_PF=Boolean                Include non-PF reads from the SAM file into the output FASTQ files. PF means 'passes
+                                filtering'. Reads whose 'not passing quality controls' flag is set are non-PF reads.
+                                Default value: false. Possible values: {true, false}
+
   CLIPPING_ATTRIBUTE=String
-  CLIP_ATTR=String              The attribute that stores the position at which the SAM record should be clipped  Default 
-                                value: null. 
-  
+  CLIP_ATTR=String              The attribute that stores the position at which the SAM record should be clipped  Default
+                                value: null.
+
   CLIPPING_ACTION=String
-  CLIP_ACT=String               The action that should be taken with clipped reads: 'X' means the reads and qualities 
-                                should be trimmed at the clipped position; 'N' means the bases should be changed to Ns in 
-                                the clipped region; and any integer means that the base qualities should be set to that 
-                                value in the clipped region.  Default value: null. 
-  
+  CLIP_ACT=String               The action that should be taken with clipped reads: 'X' means the reads and qualities
+                                should be trimmed at the clipped position; 'N' means the bases should be changed to Ns in
+                                the clipped region; and any integer means that the base qualities should be set to that
+                                value in the clipped region.  Default value: null.
+
   READ1_TRIM=Integer
-  R1_TRIM=Integer               The number of bases to trim from the beginning of read 1.  Default value: 0. 
-  
+  R1_TRIM=Integer               The number of bases to trim from the beginning of read 1.  Default value: 0.
+
   READ1_MAX_BASES_TO_WRITE=Integer
-  R1_MAX_BASES=Integer          The maximum number of bases to write from read 1 after trimming. If there are fewer than 
-                                this many bases left after trimming, all will be written.  If this value is null then all 
-                                bases left after trimming will be written.  Default value: null. 
-  
+  R1_MAX_BASES=Integer          The maximum number of bases to write from read 1 after trimming. If there are fewer than
+                                this many bases left after trimming, all will be written.  If this value is null then all
+                                bases left after trimming will be written.  Default value: null.
+
   READ2_TRIM=Integer
-  R2_TRIM=Integer               The number of bases to trim from the beginning of read 2.  Default value: 0. 
-  
+  R2_TRIM=Integer               The number of bases to trim from the beginning of read 2.  Default value: 0.
+
   READ2_MAX_BASES_TO_WRITE=Integer
-  R2_MAX_BASES=Integer          The maximum number of bases to write from read 2 after trimming. If there are fewer than 
-                                this many bases left after trimming, all will be written.  If this value is null then all 
-                                bases left after trimming will be written.  Default value: null. 
-  
+  R2_MAX_BASES=Integer          The maximum number of bases to write from read 2 after trimming. If there are fewer than
+                                this many bases left after trimming, all will be written.  If this value is null then all
+                                bases left after trimming will be written.  Default value: null.
+
   INCLUDE_NON_PRIMARY_ALIGNMENTS=Boolean
-                                If true, include non-primary alignments in the output.  Support of non-primary alignments 
-                                in SamToFastq is not comprehensive, so there may be exceptions if this is set to true and 
+                                If true, include non-primary alignments in the output.  Support of non-primary alignments
+                                in SamToFastq is not comprehensive, so there may be exceptions if this is set to true and
                                 there are paired reads with non-primary alignments.  Default value: false.
-                                Possible values: {true, false} 
-  
+                                Possible values: {true, false}
+
 @more_info@
 
   </help>
--- a/picard_SortSam.xml	Sun Nov 27 15:11:50 2016 -0500
+++ b/picard_SortSam.xml	Tue Dec 06 10:04:41 2016 -0500
@@ -12,9 +12,10 @@
         #set $output = $outFile
     #end if
     @java_options@
+    @symlink_element_identifier@
     picard
     SortSam
-    INPUT="${inputFile}"
+    INPUT='$inputFile.element_identifier'
     OUTPUT='${output}'
     SORT_ORDER="${sort_order}"
     QUIET=true
--- a/picard_ValidateSamFile.xml	Sun Nov 27 15:11:50 2016 -0500
+++ b/picard_ValidateSamFile.xml	Tue Dec 06 10:04:41 2016 -0500
@@ -16,7 +16,7 @@
     &&
 
     ##set up input files
-
+    @symlink_element_identifier@
     #set $reference_fasta_filename = "localref.fa"
 
     #if str( $reference_source.reference_source_selector ) == "history":
@@ -30,7 +30,7 @@
     picard
     ValidateSamFile
 
-    INPUT="${inputFile}"
+    INPUT='$inputFile.element_identifier'
     OUTPUT="${outFile}"
     MODE="${mode}"
 
--- a/picard_macros.xml	Sun Nov 27 15:11:50 2016 -0500
+++ b/picard_macros.xml	Tue Dec 06 10:04:41 2016 -0500
@@ -16,6 +16,10 @@
         </requirements>
     </xml>
 
+    <token name="@symlink_element_identifier@"><![CDATA[
+    ln -f -s '$inputFile' '$inputFile.element_identifier' &&
+    ]]></token>
+
     <token name="@java_options@"><![CDATA[
     _JAVA_OPTIONS=\${_JAVA_OPTIONS:-'-Xmx2048m -Xms256m'} &&
     export _JAVA_OPTIONS &&