<tool name="FilterSamReads" id="picard_FilterSamReads" version="@TOOL_VERSION@.@WRAPPER_VERSION@">
  <description>include or exclude aligned and unaligned reads and read lists</description>
  <macros>
    <import>picard_macros.xml</import>
    <token name="@WRAPPER_VERSION@">1</token>
  </macros>
  <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='$escaped_element_identifier'
    OUTPUT=query_sorted_bam.bam
    SORT_ORDER=queryname
    VALIDATION_STRINGENCY=LENIENT
    QUIET=true
    VERBOSITY=ERROR
    @TMPDIR_OPTION@

    &&

    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
    @TMPDIR_OPTION@

  ]]></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"/>
    <conditional name="filter_type">
      <param name="filter" type="select" label="Select filtering type" help="FILTER; see Help for deatiled info">
        <option value="includeAligned">Include aligned</option>
        <option value="excludeAligned">Exclude aligned</option>
        <option value="includeReadList">Include read list</option>
        <option value="excludeReadList">Exclude read list</option>
      </param>
      <when value="includeAligned"/> <!-- do nothing -->
      <when value="excludeAligned"/> <!-- do nothing -->
      <when value="includeReadList">
        <param name="read_list_file" type="data" format="tabular" label="Dataset containing read names that will be INCLUDED in the output" help="READ_LIST_FILE"/>
      </when>
      <when value="excludeReadList">
        <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>

  <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"/>
      <param name="filter" value="includeReadList"/>
      <param name="read_list_file" value="picard_FilterSamReads_read_list_file.tab" ftype="tabular"/>
      <param name="validation_stringency" value="LENIENT"/>
      <output name="outFile" file="picard_FilterSamReads_include_reads_test1.bam" ftype="bam" lines_diff="4"/>
    </test>
    <test>
      <param name="inputFile" value="picard_FilterSamReads.bam" ftype="bam"/>
      <param name="filter" value="excludeReadList"/>
      <param name="read_list_file" value="picard_FilterSamReads_read_list_file.tab" ftype="tabular"/>
      <param name="validation_stringency" value="LENIENT"/>
      <output name="outFile" file="picard_FilterSamReads_exclude_reads_test2.bam" ftype="bam" lines_diff="4"/>
    </test>
  </tests>


  <help>

**Purpose**

Computes a number of metrics that are useful for evaluating coverage and performance of whole genome sequencing experiments.

------

.. class:: warningmark

**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.

@dataset_collections@

@description@

  FILTER=Filter                 Filter.  Required. Possible values:
                                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)],

                                excludeAligned [OUTPUT SAM/BAM will contain un-mapped reads only.
                                (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
                                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]}

  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.

@more_info@

  </help>
  <expand macro="citations" />
</tool>
