view flexbar.xml @ 38:216a55a39b52 draft

Uploaded
author jtilman
date Sun, 01 Jul 2018 06:46:26 -0400
parents 497da23fee84
children ae7d2b47ad07
line wrap: on
line source


<!-- Flexbar tool definition for Galaxy, version 3.4.2 -->
<!-- Author: Johannes Roehr -->


<tool id="flexbar" name="Flexbar" version="3.4.2">
	
	<description>- flexible barcode and adapter removal</description>
    
	<requirements>
        <requirement type="package" version="3.4.0">flexbar</requirement>
    </requirements>
	
	<version_command>flexbar --versions</version_command>
	
	<command detect_errors="aggressive">
		
		<![CDATA[
		
		#if $reads.mode == "se":
			ln -s '$reads.rs' '$rsout'_input.'$reads.rs.extension' &&
		#elif $reads.mode == "pe":
			ln -s '$reads.r1' '$r1out'_input.'$reads.r1.extension' &&
			ln -s '$reads.r2' '$r2out'_input.'$reads.r2.extension' &&
		#else:
			ln -s '$reads.rc.forward' '$rcout.forward'_input.'$reads.rc.forward.extension' &&
			ln -s '$reads.rc.reverse' '$rcout.reverse'_input.'$reads.rc.reverse.extension' &&
		#end if
		
		'$__tool_directory__/flexbar.pl' flexbar
		
		--threads \${GALAXY_SLOTS:-1}
		
		#if $reads.mode == "se":
			--reads '$rsout'_input.'$reads.rs.extension'
		#elif $reads.mode == "pe":
			--reads '$r1out'_input.'$reads.r1.extension'
			--reads2 '$r2out'_input.'$reads.r2.extension'
		#else:
			--reads '$rcout.forward'_input.'$reads.rc.forward.extension'
			--reads2 '$rcout.reverse'_input.'$reads.rc.reverse.extension'
		#end if
		
		--max-uncalled $maxUncalled
		--min-read-length $minReadLen
		
		#if $trimEnds.select == "on":
			--pre-trim-left $trimEnds.trimLeft
			--pre-trim-right $trimEnds.trimRight
		#end if
		
		
		#if $cTrimQual.select != "off":
			#if $reads.mode == "se":
				#if $reads.rs.ext == "fastqsanger":
					--qtrim-format sanger
				#end if
				#if $reads.rs.ext == "fastqsolexa":
					--qtrim-format solexa
				#end if
				#if $reads.rs.ext == "fastqillumina":
					--qtrim-format i1.3
				#end if
			#elif $reads.mode == "pe":
				#if $reads.r1.ext == "fastqsanger":
					--qtrim-format sanger
				#end if
				#if $reads.r1.ext == "fastqsolexa":
					--qtrim-format solexa
				#end if
				#if $reads.r1.ext == "fastqillumina":
					--qtrim-format i1.3
				#end if
			#else:
				#if $reads.rc.forward.ext == "fastqsanger":
					--qtrim-format sanger
				#end if
				#if $reads.rc.forward.ext == "fastqsolexa":
					--qtrim-format solexa
				#end if
				#if $reads.rc.forward.ext == "fastqillumina":
					--qtrim-format i1.3
				#end if
			#end if
		#end if
		
		#if $cTrimQual.select == "tail":
			--qtrim TAIL
			--qtrim-threshold $cTrimQual.trimQualTail
			$cTrimQual.trimQualPostTail
		#end if
		#if $cTrimQual.select == "win":
			--qtrim WIN
			--qtrim-threshold $cTrimQual.trimQualWin
			--qtrim-win-size $cTrimQual.trimQualWinSize
			$cTrimQual.trimQualPostWin
		#end if
		#if $cTrimQual.select == "bwa":
			--qtrim BWA
			--qtrim-threshold $cTrimQual.trimQualBWA
			$cTrimQual.trimQualPostBWA
		#end if
		
		
		#if $cAdapters.select == "on":
			
			#if $cAdapters.ccAdapters.select == "file":
				--adapters '$cAdapters.ccAdapters.adapterFile'
			#end if
			#if $cAdapters.ccAdapters.select == "files":
				--adapters '$cAdapters.ccAdapters.adapterFile1'
				--adapters2 '$cAdapters.ccAdapters.adapterFile2'
			#end if
			#if $cAdapters.ccAdapters.select == "preset":
				--adapter-preset '$cAdapters.ccAdapters.adapterPreset'
			#end if
			#if $cAdapters.ccAdapters.select == "seq":
				--adapter-seq $cAdapters.ccAdapters.adapterSeq
			#end if
			
			--adapter-trim-end $cAdapters.aTrimEnd
			--adapter-min-overlap $cAdapters.aMinOverlap
			--adapter-error-rate $cAdapters.aThresh
			
			#if $cAdapters.cPairOverlap.select == "on":
				--adapter-pair-overlap $cAdapters.cPairOverlap.aPairOverlap
				--adapter-min-poverlap $cAdapters.cPairOverlap.aMinPoverlap
			#end if
			
			#if $cAdapters.aAdvanced.caTailLen.select == "yes":
				--adapter-tail-length $cAdapters.aAdvanced.caTailLen.aTailLen
			#end if
			
			#if $cAdapters.aAdvanced.cRevComp.select == "on":
				--adapter-revcomp ON
				#if $cAdapters.aAdvanced.cRevComp.aRevCompEnd != "off":
					--adapter-revcomp-end $cAdapters.aAdvanced.cRevComp.aRevCompEnd
				#end if
			#end if
			#if $cAdapters.aAdvanced.cRevComp.select == "only":
				--adapter-revcomp ONLY
			#end if
			
			$cAdapters.aAdvanced.aReadSet
			
			--adapter-cycles $cAdapters.aAdvanced.aCycles
			
			#if $cAdapters.aAdvanced.caAlignScores.select == "yes":
				--adapter-match    $cAdapters.aAdvanced.caAlignScores.aMatch
				--adapter-mismatch $cAdapters.aAdvanced.caAlignScores.aMismatch
				--adapter-gap      $cAdapters.aAdvanced.caAlignScores.aGap
			#end if
		#end if
		
		
		#if $hTrim.select == "on":
			#if $hTrim.hTrimLeft != "":
				--htrim-left $hTrim.hTrimLeft
			#end if
			#if $hTrim.hTrimRight != "":
				--htrim-right $hTrim.hTrimRight
			#end if
			
			--htrim-min-length $hTrim.hMinLength
			--htrim-error-rate $hTrim.hErrorRate
			
			#if $hTrim.hAdvanced.hMinLength2 != "":
				--htrim-min-length2 $hTrim.hAdvanced.hMinLength2
			#end if
			#if $hTrim.hAdvanced.hMaxLength != "":
				--htrim-max-length $hTrim.hAdvanced.hMaxLength
			#end if
			
			$hTrim.hAdvanced.hMaxFirst
			$hTrim.hAdvanced.hTrimAdapter
		#end if
		
		
		#if $cTrimLen.select == "on":
			--post-trim-length $cTrimLen.trimLen
		#end if
		
		#if $cAddOptions.select == "show":
			$cAddOptions.logLevel
			$cAddOptions.numTags
			$cAddOptions.remTags
			$cAddOptions.rndTags
			$cAddOptions.singleReadsP
			
			#if $cAddOptions.cReadBundle.select == "show":
				--bundle $cAddOptions.cReadBundle.bundle
				
				#if $cAddOptions.cReadBundle.bundles != "":
					--bundles $cAddOptions.cReadBundle.bundles
				#end if
			#end if
		#end if
		
		
		#if $reads.mode == "se":
			--output-reads '$rsout'.'$reads.rs.extension'
		#elif $reads.mode == "pe":
			--output-reads '$r1out'.'$reads.r1.extension'
			--output-reads2 '$r2out'.'$reads.r2.extension'
		#else:
			--output-reads '$rcout.forward'.'$reads.rc.forward.extension'
			--output-reads2 '$rcout.reverse'.'$reads.rc.reverse.extension'
		#end if
		
		--output-log '$outlog'
		
		]]>
	</command>
	
	
	<inputs>
		
		<conditional name="reads">
			<param name="mode" type="select" label="Sequencing reads">
				<option value="se">Single read file</option>
				<option value="pe" selected="true">Paired read files</option>
				<option value="pc">Paired read collection</option>
			</param>
			<when value="se">
				<param name="rs" type="data" format="fastqsanger,fastqsolexa,fastqillumina,fastqsanger.gz,fastqsolexa.gz,fastqillumina.gz" label="Fastq read file"/>
			</when>
			<when value="pe">
				<param name="r1" type="data" format="fastqsanger,fastqsolexa,fastqillumina,fastqsanger.gz,fastqsolexa.gz,fastqillumina.gz" label="Fastq read file 1"/>
				<param name="r2" type="data" format="fastqsanger,fastqsolexa,fastqillumina,fastqsanger.gz,fastqsolexa.gz,fastqillumina.gz" label="Fastq read file 2"/>
			</when>
			<when value="pc">
				<param name="rc" format="fastqsanger,fastqsolexa,fastqillumina,fastqsanger.gz,fastqsolexa.gz,fastqillumina.gz" type="data_collection" collection_type="paired" label="Fastq pair collection"/>
			</when>
		</conditional>
		
		<param name="maxUncalled" size="4" type="integer" value="0"  label="1) Maximum uncalled bases"/>
		
		<conditional name="trimEnds">
			<param name="select" type="select" label="2) Trimming of read ends">
				<option value="off" selected="true">Off</option>
				<option value="on">On</option>
			</param>
			<when value="off">
			</when>
			<when value="on">
				<param name="trimLeft" size="4" type="integer" value="0" label="Left"/>
				<param name="trimRight" size="4" type="integer" value="0" label="Right" help="trims specified number of bases at ends"/>
			</when>
		</conditional>
		
		<conditional name="cTrimQual">
			<param name="select" type="select" label="3) Quality-based trimming">
				<option value="off" selected="true">Off</option>
				<option value="tail">Tail</option>
				<option value="win">Window</option>
				<option value="bwa">BWA</option>
			</param>
			<when value="off">
			</when>
			<when value="tail">
				<param name="trimQualTail" size="4" type="integer" value="20" label="Quality threshold" help="trim right end until specified quality or higher"/>
				
				<param name="trimQualPostTail" type="select" label="After adapter removal">
					<option value="" selected="true">No</option>
					<option value="--qtrim-post-removal">Yes</option>
				</param>
			</when>
			<when value="win">
				<param name="trimQualWin" size="4" type="integer" value="20" label="Quality threshold"/>
				<param name="trimQualWinSize" size="4" type="integer" value="5" label="Window length" help="sliding window average quality approach from left end"/>
				
				<param name="trimQualPostWin" type="select" label="After adapter removal">
					<option value="" selected="true">No</option>
					<option value="--qtrim-post-removal">Yes</option>
				</param>
			</when>
			<when value="bwa">
				<param name="trimQualBWA" size="4" type="integer" value="20" label="Quality threshold" help="trimming approach used by BWA"/>
				
				<param name="trimQualPostBWA" type="select" label="After adapter removal">
					<option value="" selected="true">No</option>
					<option value="--qtrim-post-removal">Yes</option>
				</param>
			</when>
		</conditional>
		
		
		<conditional name="cAdapters">
			<param name="select" type="select" label="4) Adapter removal">
				<option value="off" selected="true">Off</option>
				<option value="on">On</option>
			</param>
			<when value="off">
			</when>
			<when value="on">
				<conditional name="ccAdapters">
					<param name="select" type="select" label="Adapter source">
						<option value="file" selected="true">Adapter file</option>
						<option value="files">Two adapter files</option>
						<option value="preset">Illumina preset</option>
						<option value="seq">Single sequence</option>
					</param>
					<when value="file">
						<param format="fasta" name="adapterFile" type="data" label="Fasta adapter file"/>
					</when>
					<when value="files">
						<param format="fasta" name="adapterFile1" type="data" label="Fasta adapter file for reads 1"/>
						<param format="fasta" name="adapterFile2" type="data" label="Fasta adapter file for reads 2"/>
					</when>
					<when value="preset">
						<param name="adapterPreset" type="select" label="Adapter preset">
							<option value="TruSeq" selected="true">TruSeq LT and HT-based kits</option>
							<option value="SmallRNA">TruSeq Small RNA</option>
							<option value="Methyl">TruSeq DNA Methylation and ScriptSeq</option>
							<option value="Ribo">TruSeq Ribo Profile</option>
							<option value="Nextera">Nextera, AmpliSeq, and TruSight</option>
							<option value="NexteraMP">Nextera Mate Pair</option>
						</param>
					</when>
					<when value="seq">
						<param name="adapterSeq" size="40" label="Adapter sequence" type="text" value=""/>
					</when>
				</conditional>
				
				<param name="aMinOverlap" size="4" type="integer" value="3" label="Minimum overlap"/>
				<param name="aThresh" size="4" type="float" value="0.1" label="Error rate" help="allowed fraction of mismatches and indels"/>
				
				<param name="aTrimEnd" type="select" label="Trim-end mode">
					<option value="RIGHT" selected="true">Right</option>
					<option value="LEFT">Left</option>
					<option value="RTAIL">Right tail</option>
					<option value="LTAIL">Left tail</option>
					<option value="ANY">Any</option>
				</param>
				
				<conditional name="cPairOverlap">
					<param name="select" type="select" label="Pair overlap detection">
						<option value="off" selected="true">Off</option>
						<option value="on">On</option>
					</param>
					<when value="off">
					</when>
					<when value="on">
						<param name="aPairOverlap" type="select" label="Detection mode">
							<option value="ON" selected="true">Standard</option>
							<option value="SHORT">Trim short</option>
						</param>
						<param name="aMinPoverlap" size="4" type="integer" value="40" label="Minimum pair overlap"/>
					</when>
				</conditional>
				
				<section name="aAdvanced" title="Advanced options" expanded="false">
					
					<conditional name="caTailLen">
						<param name="select" type="select" label="Change tail length">
							<option value="no" selected="true">No</option>
							<option value="yes">Yes</option>
						</param>
						<when value="no">
						</when>
						<when value="yes">
							<param name="aTailLen" size="4" type="integer" value="" label="Tail length"/>
						</when>
					</conditional>
					
					<conditional name="cRevComp">
						<param name="select" type="select" label="Reverse complements of adapters">
							<option value="off" selected="true">Off</option>
							<option value="on">On</option>
							<option value="only">Only</option>
						</param>
						<when value="off">
						</when>
						<when value="on">
							<param name="aRevCompEnd" type="select" label="Different trim-end for reverse complements">
								<option value="off" selected="true">Off</option>
								<option value="RIGHT">Right</option>
								<option value="LEFT">Left</option>
								<option value="RTAIL">Right tail</option>
								<option value="LTAIL">Left tail</option>
								<option value="ANY">Any</option>
							</param>
						</when>
					</conditional>
					
					
					<param name="aReadSet" type="select" label="Removal for single read set">
						<option value="" selected="true">Off</option>
						<option value="--adapter-read-set 1">1st</option>
						<option value="--adapter-read-set 2">2nd</option>
					</param>
					
					<param name="aCycles" size="4" type="integer" value="1" label="Number of removal cycles"/>
					
					<conditional name="caAlignScores">
						<param name="select" type="select" label="Modify alignment scores">
							<option value="no" selected="true">No</option>
							<option value="yes">Yes</option>
						</param>
						<when value="no">
						</when>
						<when value="yes">
							<param name="aMatch"    size="3" type="integer" value="1"  label="Match"/>
							<param name="aMismatch" size="3" type="integer" value="-1" label="Mismatch"/>
							<param name="aGap"      size="3" type="integer" value="-6" label="Gap"/>
						</when>
					</conditional>
				</section>
			</when>
		</conditional>
		
		
		<conditional name="hTrim">
			<param name="select" type="select" label="5) Trimming of homopolymers">
				<option value="off" selected="true">Off</option>
				<option value="on">On</option>
			</param>
			<when value="off">
			</when>
			<when value="on">
				<param name="hTrimLeft" size="4" label="Trim homopolymers on left end" type="text" value="" optional="true"/>
				<param name="hTrimRight" size="4" label="Trim homopolymers on right end" type="text" value="" optional="true" help="for example AT"/>
				
				<param name="hMinLength" size="4" type="integer" value="3" label="Minimum length"/>
				<param name="hErrorRate" size="4" type="float" value="0.1" label="Error rate"/>
				
				<section name="hAdvanced" title="Advanced options" expanded="false">
					
					<param name="hMaxLength" size="4" type="integer" value="" label="Maximum length" optional="true"/>
					
					<param name="hMaxFirst" type="select" label="Maximum length only for first one">
						<option value="" selected="true">Off</option>
						<option value="--htrim-max-first">On</option>
					</param>
					
					<param name="hMinLength2" size="4" type="integer" value="" label="Minimum length after first one" optional="true"/>
					
					<param name="hTrimAdapter" type="select" label="Only in case of adapter on same side">
						<option value="" selected="true">Off</option>
						<option value="--htrim-adapter">On</option>
					</param>
				</section>
			</when>
		</conditional>
		
		
		<conditional name="cTrimLen">
			<param name="select" type="select" label="6) Trimming to length">
				<option value="off" selected="true">Off</option>
				<option value="on">On</option>
			</param>
			<when value="off">
			</when>
			<when value="on">
				<param name="trimLen" size="4" type="integer" value="" label="Length" help="trim reads to certain length from right"/>
			</when>
		</conditional>
		
		<param name="minReadLen"  size="4" type="integer" value="20" label="7) Minimum read length"/>
		
		<conditional name="cAddOptions">
			<param name="select" type="select" label="Additional options">
				<option value="hide" selected="true">Hide</option>
				<option value="show">Show</option>
			</param>
			<when value="hide">
			</when>
			<when value="show">
				<param name="logLevel" type="select" label="Alignment logging">
					<option value="" selected="true">Off</option>
					<option value="--align-log ALL">All</option>
					<option value="--align-log MOD">Modified</option>
					<option value="--align-log TAB">Tabular</option>
				</param>
				
				<param name="numTags" type="select" label="Number tags">
					<option value="" selected="true">Off</option>
					<option value="--number-tags">On</option>
				</param>
				
				<param name="remTags" type="select" label="Removal tags">
					<option value="" selected="true">Off</option>
					<option value="--removal-tags">On</option>
				</param>
				
				<param name="rndTags" type="select" label="UMI tags">
					<option value="" selected="true">Off</option>
					<option value="--umi-tags">On</option>
				</param>
				
				<param name="singleReadsP" type="select" label="Single reads as paired">
					<option value="" selected="true">Off</option>
					<option value="--single-reads-paired">On</option>
				</param>
				
				<conditional name="cReadBundle">
					<param name="select" type="select" label="Read bundle options">
						<option value="hide" selected="true">Hide</option>
						<option value="show">Show</option>
					</param>
					<when value="hide">
					</when>
					<when value="show">
						<param name="bundle"  size="4" type="integer" value="256" label="Number of paired reads per bundle"/>
						<param name="bundles"  size="4" type="integer" value="" optional="true" label="Only certain number of bundles for testing"/>
					</when>
				</conditional>
			</when>
		</conditional>
		
  	</inputs>
	
	<outputs>
	    <data name="outlog" format="txt" label="Flexbar log for ${on_string}"/>
		
		<data name="rsout" label="Flexbar on ${reads.rs.name}" format_source="rs">
			<filter>reads['mode'] == 'se'</filter>
		</data>
		
		<data name="r1out" label="Flexbar on ${reads.r1.name}" format_source="r1">
			<filter>reads['mode'] == "pe"</filter>
		</data>
		<data name="r2out" label="Flexbar on ${reads.r2.name}" format_source="r2">
			<filter>reads['mode'] == "pe"</filter>
		</data>
		
		<collection name="rcout" type="paired" label="Flexbar on ${on_string}">
			<filter>reads['mode'] == "pc"</filter>
			<data name="forward" label="Flexbar on ${reads.rc.forward.name}" format_source="rc['forward']"/>
			<data name="reverse" label="Flexbar on ${reads.rc.reverse.name}" format_source="rc['reverse']"/>
		</collection>
	</outputs>
	
	<help>

**Description**

The program Flexbar preprocesses high-throughput sequencing data efficiently. It demultiplexes barcoded runs and removes adapter sequences. Moreover, trimming and filtering features are provided. Flexbar increases read mapping rates and improves genome as well as transcriptome assemblies. Unique molecular identifiers can be extracted in a flexible way. The program supports sequencing data in fastq format, e.g. from the Illumina platform. Flexbar is available on the project_ page.

.. _project: https://github.com/seqan/flexbar

------

**Trim-end modes**

**Any:** longer side of read remains after overlap removal

**Left:** right side remains after removal, align before or at read end

**Right:** left part remains after removal, align after or at read start

**Left tail:** consider first n bases of reads in alignment

**Right tail:** use only last n bases, see tail-length options

------

**Documentation**

Further documentation is available on the `manual`__ page and via the command line help screen.

.. __: https://github.com/seqan/flexbar/wiki

------

**References**

Johannes T. Roehr, Christoph Dieterich, Knut Reinert:  
Flexbar 3.0 – SIMD and multicore parallelization. Bioinformatics 2017.

Matthias Dodt, Johannes T. Roehr, Rina Ahmed, Christoph Dieterich:  
Flexbar – flexible barcode and adapter processing for next-generation sequencing platforms. Biology 2012.

	</help>

</tool>