Skip to contents

Build workflow

Usage

Flow(
  ...,
  graph = TRUE,
  x.width = 1000,
  y.width = 400,
  x.start = 100,
  y.start = 200,
  canvas_zoom = 1,
  canvas_x = 40,
  canvas_y = 130
)

# S4 method for Tool,Tool
+(e1, e2)

# S4 method for WorkflowStepList,Tool
+(e1, e2)

# S4 method for WorkflowStepList,WorkflowStepList
+(e1, e2)

# S4 method for App,App
+(e1, e2)

# S4 method for WorkflowStepList,App
+(e1, e2)

e1 %>>% e2

# S4 method for Tool,Tool
%>>%(e1, e2)

# S4 method for Workflow,Tool
%>>%(e1, e2)

# S4 method for Workflow,Workflow
%>>%(e1, e2)

# S4 method for App,App
%>>%(e1, e2)

# S4 method for Workflow,App
%>>%(e1, e2)

Arguments

...

extra arguments passed to SBGWorkflow

graph

if add graph coordinates or not, used for flow visualization on Seven Bridges platforms.

x.width

x scale width

y.width

y scale width

x.start

node x start point for a flow

y.start

node y start point for a flow

canvas_zoom

zoom factor

canvas_x

canvas x

canvas_y

canvas y

e1

either Tool App or Workflow object

e2

either Tool App or Workflow object

Value

a SBGWorkflow object.

Methods

copy_obj()

this is a hack to make copy of reference cwl object

get_input(ids, force = FALSE)

get input by pure input id from all steps

get_input_exposed()

exposed input id other than file

get_input_node()

get input file nodes id

get_input_port()

show included port of all inputs

get_output(ids, force = FALSE)

get output by pure output id from all steps

get_output_node()

get output file nodes id

get_required()

show flow required input id and types

get_step(name = NULL, id = NULL)

get step object by name or id, name support pattern match

get_tool(name = NULL, id = NULL)

get a tool object by name or id, name support pattern match

input_id()

show input id

input_matrix( new.order = c("id", "label", "type", "required", "prefix", "fileTypes"), required = NULL )

This return a matrix of input parameters, by default, following the order id, label, type, required, prefix, fileTypes. new.order accept names of column you want to print, but it has to be a field of inputs. When its set to NULL, it prints all fields. When required = TRUE, only print required field.

input_type()

Show a vector of flow input type, names of them are input id.

link_map()

show a table of all linked nodes

linked_input_id()

input id that linked to an output

linked_output_id()

output id that linked to an input

list_tool()

list all tools included in this flow

output_id()

show output id

output_matrix(new.order = c("id", "label", "type", "fileTypes"))

This return a matrix of output parameters, by default, following the order id, label, type, fileTypes. new.order accept names of column you want to print, but it has to be a field of outputs. When its set to NULL, it prints all fields. When required = TRUE, only print required field.

output_type()

Show a vector of flow output type, names of them are output id.

run(run_inputs = list(), engine = c("bunny", "rabix", "cwlrun"))

Run this tool with inputs locally. Engines supported: bunny, rabix, cwlrun. Inputs accept list or JSON.

set_batch(input = NULL, criteria = NULL, type = c("ITEM", "CRITERIA"))

Set a flow input node into a batch mode, this is now required before you execute a batch task on a batch-not-enabled flow.

set_flow_input(iid = NULL, add = TRUE)

Expose tool input node as flow input, default is additative, if add = FALSE, this will overwrite and only made provided id inputs of flow.

set_flow_output(oid = NULL, add = TRUE)

Expose tool output node as flow output, default is additative, if add = FALSE, this will overwrite and only made provided id outputs of flow.

set_input_port(ids, include = TRUE)

set included port for provided input id(s)

set_required(ids, required = TRUE)

Set a input node required (TRUE) or not required (FALSE) this require full input id (with tool id prefix) such as #STAR.alignIntronMax

step_input_id(full = FALSE)

Show step input id, default names of them is tool id. When full = TRUE, show full name then names of vector is type.

step_output_id(full = FALSE)

Show step output id, default names of them is tool id. when full = TRUE, show full name then names of vector is type.

Examples

f1 <- system.file("extdata/app", "flow_star.json", package = "sevenbridges")
f1 <- convert_app(f1)
# input matrix
f1$input_matrix()
#>                                id                    label    type required
#> 1                    #sjdbGTFfile              sjdbGTFfile File...    FALSE
#> 2                          #fastq                    fastq File...     TRUE
#> 3               #genomeFastaFiles         genomeFastaFiles    File     TRUE
#> 4 #sjdbGTFtagExonParentTranscript      Exons' parents name  string    FALSE
#> 5       #sjdbGTFtagExonParentGene                Gene name  string    FALSE
#> 6          #winAnchorMultimapNmax         Max loci anchors     int    FALSE
#> 7             #winAnchorDistNbins Max bins between anchors     int    FALSE
#>   fileTypes
#> 1      null
#> 2      null
#> 3      null
#> 4      null
#> 5      null
#> 6      null
#> 7      null
# by name
f1$input_matrix(c("id", "type", "required", "link_to"))
#>                                id    type required
#> 1                    #sjdbGTFfile File...    FALSE
#> 2                          #fastq File...     TRUE
#> 3               #genomeFastaFiles    File     TRUE
#> 4 #sjdbGTFtagExonParentTranscript  string    FALSE
#> 5       #sjdbGTFtagExonParentGene  string    FALSE
#> 6          #winAnchorMultimapNmax     int    FALSE
#> 7             #winAnchorDistNbins     int    FALSE
#>                                                 link_to
#> 1 #STAR_Genome_Generate.sjdbGTFfile | #STAR.sjdbGTFfile
#> 2                     #SBG_FASTQ_Quality_Detector.fastq
#> 3                #STAR_Genome_Generate.genomeFastaFiles
#> 4  #STAR_Genome_Generate.sjdbGTFtagExonParentTranscript
#> 5        #STAR_Genome_Generate.sjdbGTFtagExonParentGene
#> 6                           #STAR.winAnchorMultimapNmax
#> 7                              #STAR.winAnchorDistNbins
# return only required
f1$input_matrix(required = TRUE)
#>                  id            label    type required fileTypes
#> 2            #fastq            fastq File...     TRUE      null
#> 3 #genomeFastaFiles genomeFastaFiles    File     TRUE      null
# return everything
f1$input_matrix(NULL)
#>                                id    type required fileTypes
#> 1                    #sjdbGTFfile File...    FALSE      null
#> 2                          #fastq File...     TRUE      null
#> 3               #genomeFastaFiles    File     TRUE      null
#> 4 #sjdbGTFtagExonParentTranscript  string    FALSE      null
#> 5       #sjdbGTFtagExonParentGene  string    FALSE      null
#> 6          #winAnchorMultimapNmax     int    FALSE      null
#> 7             #winAnchorDistNbins     int    FALSE      null
#>                      label                       category stageInput streamable
#> 1              sjdbGTFfile                           null       null      FALSE
#> 2                    fastq                           null       null      FALSE
#> 3         genomeFastaFiles                           null       null      FALSE
#> 4      Exons' parents name Splice junctions db parameters       null      FALSE
#> 5                Gene name Splice junctions db parameters       null      FALSE
#> 6         Max loci anchors      Windows, Anchors, Binning       null      FALSE
#> 7 Max bins between anchors      Windows, Anchors, Binning       null      FALSE
#>    sbg.x    sbg.y sbg.includeInPorts
#> 1 160.50 195.0833                 NA
#> 2 164.25 323.7500               TRUE
#> 3 167.75 469.9999                 NA
#> 4 200.00 350.0000                 NA
#> 5 200.00 400.0000                 NA
#> 6 200.00 450.0000                 NA
#> 7 200.00 500.0000                 NA
#>                                                                                          description
#> 1                                                                                               <NA>
#> 2                                                                                               <NA>
#> 3                                                                                               <NA>
#> 4                                                  Tag name to be used as exons' transcript-parents.
#> 5                                                        Tag name to be used as exons' gene-parents.
#> 6                                          Max number of loci anchors are allowed to map to (int>0).
#> 7 Max number of bins between two anchors that allows aggregation of anchors into one window (int>0).
#>   sbg.toolDefaultValue                                               link_to
#> 1                 <NA> #STAR_Genome_Generate.sjdbGTFfile | #STAR.sjdbGTFfile
#> 2                 <NA>                     #SBG_FASTQ_Quality_Detector.fastq
#> 3                 <NA>                #STAR_Genome_Generate.genomeFastaFiles
#> 4        transcript_id  #STAR_Genome_Generate.sjdbGTFtagExonParentTranscript
#> 5              gene_id        #STAR_Genome_Generate.sjdbGTFtagExonParentGene
#> 6                   50                           #STAR.winAnchorMultimapNmax
#> 7                    9                              #STAR.winAnchorDistNbins
# return a output matrix with more informtion
f1$output_matrix()
#>                              id                       label    type fileTypes
#> 1               #unmapped_reads              unmapped_reads File...      null
#> 2  #transcriptome_aligned_reads transcriptome_aligned_reads    File      null
#> 3             #splice_junctions            splice_junctions    File      null
#> 4               #reads_per_gene              reads_per_gene    File      null
#> 5                    #log_files                   log_files File...      null
#> 6           #chimeric_junctions          chimeric_junctions    File      null
#> 7          #intermediate_genome         intermediate_genome    File      null
#> 8          #chimeric_alignments         chimeric_alignments    File      null
#> 9                   #sorted_bam                  sorted_bam    File      null
#> 10                      #result                      result    File      null
# return only a few fields
f1$output_matrix(c("id", "type"))
#>                              id    type
#> 1               #unmapped_reads File...
#> 2  #transcriptome_aligned_reads    File
#> 3             #splice_junctions    File
#> 4               #reads_per_gene    File
#> 5                    #log_files File...
#> 6           #chimeric_junctions    File
#> 7          #intermediate_genome    File
#> 8          #chimeric_alignments    File
#> 9                   #sorted_bam    File
#> 10                      #result    File
# return everything
f1$output_matrix(NULL)
#>                              id                       label    type fileTypes
#> 1               #unmapped_reads              unmapped_reads File...      null
#> 2  #transcriptome_aligned_reads transcriptome_aligned_reads    File      null
#> 3             #splice_junctions            splice_junctions    File      null
#> 4               #reads_per_gene              reads_per_gene    File      null
#> 5                    #log_files                   log_files File...      null
#> 6           #chimeric_junctions          chimeric_junctions    File      null
#> 7          #intermediate_genome         intermediate_genome    File      null
#> 8          #chimeric_alignments         chimeric_alignments    File      null
#> 9                   #sorted_bam                  sorted_bam    File      null
#> 10                      #result                      result    File      null
#>    required                             source streamable sbg.includeInPorts
#> 1     FALSE               #STAR.unmapped_reads      FALSE               TRUE
#> 2     FALSE  #STAR.transcriptome_aligned_reads      FALSE               TRUE
#> 3     FALSE             #STAR.splice_junctions      FALSE               TRUE
#> 4     FALSE               #STAR.reads_per_gene      FALSE               TRUE
#> 5     FALSE                    #STAR.log_files      FALSE               TRUE
#> 6     FALSE           #STAR.chimeric_junctions      FALSE               TRUE
#> 7     FALSE          #STAR.intermediate_genome      FALSE               TRUE
#> 8     FALSE          #STAR.chimeric_alignments      FALSE               TRUE
#> 9     FALSE         #Picard_SortSam.sorted_bam      FALSE               TRUE
#> 10    FALSE #SBG_FASTQ_Quality_Detector.result      FALSE               TRUE
#>        sbg.x     sbg.y                            link_to
#> 1   766.2498 159.58331               #STAR.unmapped_reads
#> 2  1118.9998  86.58332  #STAR.transcriptome_aligned_reads
#> 3  1282.3330 167.49998             #STAR.splice_junctions
#> 4  1394.4164 245.74996               #STAR.reads_per_gene
#> 5  1505.0830 322.99995                    #STAR.log_files
#> 6  1278.7498 446.74996           #STAR.chimeric_junctions
#> 7  1408.9165 386.08329          #STAR.intermediate_genome
#> 8  1147.5831 503.24993          #STAR.chimeric_alignments
#> 9   934.2498 557.24984         #Picard_SortSam.sorted_bam
#> 10 1431.6667 644.99999 #SBG_FASTQ_Quality_Detector.result
# flow inputs
f1$input_type()
#>                    sjdbGTFfile                          fastq 
#>                      "File..."                      "File..." 
#>               genomeFastaFiles sjdbGTFtagExonParentTranscript 
#>                         "File"                       "string" 
#>       sjdbGTFtagExonParentGene          winAnchorMultimapNmax 
#>                       "string"                          "int" 
#>             winAnchorDistNbins 
#>                          "int" 
# flow outouts
f1$output_type()
#>              unmapped_reads transcriptome_aligned_reads 
#>                   "File..."                      "File" 
#>            splice_junctions              reads_per_gene 
#>                      "File"                      "File" 
#>                   log_files          chimeric_junctions 
#>                   "File..."                      "File" 
#>         intermediate_genome         chimeric_alignments 
#>                      "File"                      "File" 
#>                  sorted_bam                      result 
#>                      "File"                      "File" 
# flow input id
f1$input_id()
#> [1] "#sjdbGTFfile"                    "#fastq"                         
#> [3] "#genomeFastaFiles"               "#sjdbGTFtagExonParentTranscript"
#> [5] "#sjdbGTFtagExonParentGene"       "#winAnchorMultimapNmax"         
#> [7] "#winAnchorDistNbins"            
# linked input id
f1$linked_input_id()
#>  [1] "#STAR_Genome_Generate.sjdbGTFtagExonParentTranscript"
#>  [2] "#STAR_Genome_Generate.sjdbGTFtagExonParentGene"      
#>  [3] "#STAR_Genome_Generate.sjdbGTFfile"                   
#>  [4] "#STAR_Genome_Generate.genomeFastaFiles"              
#>  [5] "#SBG_FASTQ_Quality_Detector.fastq"                   
#>  [6] "#Picard_SortSam.input_bam"                           
#>  [7] "#STAR.winAnchorMultimapNmax"                         
#>  [8] "#STAR.winAnchorDistNbins"                            
#>  [9] "#STAR.sjdbGTFfile"                                   
#> [10] "#STAR.reads"                                         
#> [11] "#STAR.genome"                                        
# flow output id
f1$output_id()
#>  [1] "#unmapped_reads"              "#transcriptome_aligned_reads"
#>  [3] "#splice_junctions"            "#reads_per_gene"             
#>  [5] "#log_files"                   "#chimeric_junctions"         
#>  [7] "#intermediate_genome"         "#chimeric_alignments"        
#>  [9] "#sorted_bam"                  "#result"                     
# linked output id
f1$linked_output_id()
#> [1] "#STAR.aligned_reads"                "#SBG_FASTQ_Quality_Detector.result"
#> [3] "#STAR_Genome_Generate.genome"      
# link_map
f1$link_map()
#>                                                      id
#> 1  #STAR_Genome_Generate.sjdbGTFtagExonParentTranscript
#> 2        #STAR_Genome_Generate.sjdbGTFtagExonParentGene
#> 3                     #STAR_Genome_Generate.sjdbGTFfile
#> 4                #STAR_Genome_Generate.genomeFastaFiles
#> 5                     #SBG_FASTQ_Quality_Detector.fastq
#> 6                             #Picard_SortSam.input_bam
#> 7                           #STAR.winAnchorMultimapNmax
#> 8                              #STAR.winAnchorDistNbins
#> 9                                     #STAR.sjdbGTFfile
#> 10                                          #STAR.reads
#> 11                                         #STAR.genome
#> 12                                      #unmapped_reads
#> 13                         #transcriptome_aligned_reads
#> 14                                    #splice_junctions
#> 15                                      #reads_per_gene
#> 16                                           #log_files
#> 17                                  #chimeric_junctions
#> 18                                 #intermediate_genome
#> 19                                 #chimeric_alignments
#> 20                                          #sorted_bam
#> 21                                              #result
#>                                source   type
#> 1     #sjdbGTFtagExonParentTranscript  input
#> 2           #sjdbGTFtagExonParentGene  input
#> 3                        #sjdbGTFfile  input
#> 4                   #genomeFastaFiles  input
#> 5                              #fastq  input
#> 6                 #STAR.aligned_reads  input
#> 7              #winAnchorMultimapNmax  input
#> 8                 #winAnchorDistNbins  input
#> 9                        #sjdbGTFfile  input
#> 10 #SBG_FASTQ_Quality_Detector.result  input
#> 11       #STAR_Genome_Generate.genome  input
#> 12               #STAR.unmapped_reads output
#> 13  #STAR.transcriptome_aligned_reads output
#> 14             #STAR.splice_junctions output
#> 15               #STAR.reads_per_gene output
#> 16                    #STAR.log_files output
#> 17           #STAR.chimeric_junctions output
#> 18          #STAR.intermediate_genome output
#> 19          #STAR.chimeric_alignments output
#> 20         #Picard_SortSam.sorted_bam output
#> 21 #SBG_FASTQ_Quality_Detector.result output
# all step input id
f1$step_input_id()
#>               #STAR_Genome_Generate               #STAR_Genome_Generate 
#>                        "#sjdbScore"                     "#sjdbOverhang" 
#>               #STAR_Genome_Generate               #STAR_Genome_Generate 
#>   "#sjdbGTFtagExonParentTranscript"         "#sjdbGTFtagExonParentGene" 
#>               #STAR_Genome_Generate               #STAR_Genome_Generate 
#>                      "#sjdbGTFfile"               "#sjdbGTFfeatureExon" 
#>               #STAR_Genome_Generate               #STAR_Genome_Generate 
#>                 "#sjdbGTFchrPrefix"                  "#genomeSAsparseD" 
#>               #STAR_Genome_Generate               #STAR_Genome_Generate 
#>              "#genomeSAindexNbases"                 "#genomeFastaFiles" 
#>               #STAR_Genome_Generate         #SBG_FASTQ_Quality_Detector 
#>                "#genomeChrBinNbits"                            "#fastq" 
#>                     #Picard_SortSam                     #Picard_SortSam 
#>            "#validation_stringency"                       "#sort_order" 
#>                     #Picard_SortSam                     #Picard_SortSam 
#>                            "#quiet"                      "#output_type" 
#>                     #Picard_SortSam                     #Picard_SortSam 
#>                   "#memory_per_job"               "#max_records_in_ram" 
#>                     #Picard_SortSam                     #Picard_SortSam 
#>                        "#input_bam"                     "#create_index" 
#>                     #Picard_SortSam                               #STAR 
#>                "#compression_level"                    "#winFlankNbins" 
#>                               #STAR                               #STAR 
#>                      "#winBinNbits"            "#winAnchorMultimapNmax" 
#>                               #STAR                               #STAR 
#>               "#winAnchorDistNbins"                      "#twopassMode" 
#>                               #STAR                               #STAR 
#>                   "#twopass1readsN"                        "#sjdbScore" 
#>                               #STAR                               #STAR 
#>                     "#sjdbOverhang"                   "#sjdbInsertSave" 
#>                               #STAR                               #STAR 
#>   "#sjdbGTFtagExonParentTranscript"         "#sjdbGTFtagExonParentGene" 
#>                               #STAR                               #STAR 
#>                      "#sjdbGTFfile"               "#sjdbGTFfeatureExon" 
#>                               #STAR                               #STAR 
#>                 "#sjdbGTFchrPrefix"     "#seedSearchStartLmaxOverLread" 
#>                               #STAR                               #STAR 
#>              "#seedSearchStartLmax"                   "#seedSearchLmax" 
#>                               #STAR                               #STAR 
#>                "#seedPerWindowNmax"                  "#seedPerReadNmax" 
#>                               #STAR                               #STAR 
#>            "#seedNoneLociPerWindow"                 "#seedMultimapNmax" 
#>                               #STAR                               #STAR 
#>               "#scoreStitchSJshift"                     "#scoreInsOpen" 
#>                               #STAR                               #STAR 
#>                     "#scoreInsBase"      "#scoreGenomicLengthLog2scale" 
#>                               #STAR                               #STAR 
#>                   "#scoreGapNoncan"                     "#scoreGapGCAG" 
#>                               #STAR                               #STAR 
#>                     "#scoreGapATAC"                         "#scoreGap" 
#>                               #STAR                               #STAR 
#>                     "#scoreDelOpen"                     "#scoreDelBase" 
#>                               #STAR                               #STAR 
#>                    "#rg_seq_center"                     "#rg_sample_id" 
#>                               #STAR                               #STAR 
#>              "#rg_platform_unit_id"                      "#rg_platform" 
#>                               #STAR                               #STAR 
#>                           "#rg_mfl"                    "#rg_library_id" 
#>                               #STAR                               #STAR 
#>                            "#reads"               "#readMatesLengthsIn" 
#>                               #STAR                               #STAR 
#>                    "#readMapNumber"            "#quantTranscriptomeBan" 
#>                               #STAR                               #STAR 
#>                        "#quantMode"                   "#outSortingType" 
#>                               #STAR                               #STAR 
#>                 "#outSJfilterReads"           "#outSJfilterOverhangMin" 
#>                               #STAR                               #STAR 
#>      "#outSJfilterIntronMaxVsReadN"      "#outSJfilterDistToOtherSJmin" 
#>                               #STAR                               #STAR 
#>        "#outSJfilterCountUniqueMin"         "#outSJfilterCountTotalMin" 
#>                               #STAR                               #STAR 
#>                   "#outSAMunmapped"                       "#outSAMtype" 
#>                               #STAR                               #STAR 
#>                "#outSAMstrandField"                     "#outSAMreadID" 
#>                               #STAR                               #STAR 
#>                "#outSAMprimaryFlag"                      "#outSAMorder" 
#>                               #STAR                               #STAR 
#>                       "#outSAMmode"                 "#outSAMmapqUnique" 
#>                               #STAR                               #STAR 
#>                   "#outSAMheaderPG"                   "#outSAMheaderHD" 
#>                               #STAR                               #STAR 
#>                     "#outSAMflagOR"                    "#outSAMflagAND" 
#>                               #STAR                               #STAR 
#>                 "#outSAMattributes"                 "#outReadsUnmapped" 
#>                               #STAR                               #STAR 
#>               "#outQSconversionAdd"                    "#outFilterType" 
#>                               #STAR                               #STAR 
#>       "#outFilterScoreMinOverLread"                "#outFilterScoreMin" 
#>                               #STAR                               #STAR 
#>      "#outFilterMultimapScoreRange"            "#outFilterMultimapNmax" 
#>                               #STAR                               #STAR 
#>   "#outFilterMismatchNoverReadLmax"       "#outFilterMismatchNoverLmax" 
#>                               #STAR                               #STAR 
#>            "#outFilterMismatchNmax"      "#outFilterMatchNminOverLread" 
#>                               #STAR                               #STAR 
#>               "#outFilterMatchNmin"            "#outFilterIntronMotifs" 
#>                               #STAR                               #STAR 
#>               "#limitSjdbInsertNsj"                "#limitOutSJoneRead" 
#>                               #STAR                               #STAR 
#>              "#limitOutSJcollapsed"                  "#limitBAMsortRAM" 
#>                               #STAR                               #STAR 
#>                    "#genomeDirName"                           "#genome" 
#>                               #STAR                               #STAR 
#>                     "#clip5pNbases"                     "#clip3pNbases" 
#>                               #STAR                               #STAR 
#>         "#clip3pAfterAdapterNbases"                 "#clip3pAdapterSeq" 
#>                               #STAR                               #STAR 
#>                 "#clip3pAdapterMMp"                   "#chimSegmentMin" 
#>                               #STAR                               #STAR 
#>              "#chimScoreSeparation"                     "#chimScoreMin" 
#>                               #STAR                               #STAR 
#>         "#chimScoreJunctionNonGTAG"                 "#chimScoreDropMax" 
#>                               #STAR                               #STAR 
#>                      "#chimOutType"          "#chimJunctionOverhangMin" 
#>                               #STAR                               #STAR 
#>          "#alignWindowsPerReadNmax"    "#alignTranscriptsPerWindowNmax" 
#>                               #STAR                               #STAR 
#>      "#alignTranscriptsPerReadNmax" "#alignSplicedMateMapLminOverLmate" 
#>                               #STAR                               #STAR 
#>          "#alignSplicedMateMapLmin"     "#alignSoftClipAtReferenceEnds" 
#>                               #STAR                               #STAR 
#>               "#alignSJoverhangMin"             "#alignSJDBoverhangMin" 
#>                               #STAR                               #STAR 
#>                 "#alignMatesGapMax"                   "#alignIntronMin" 
#>                               #STAR                               #STAR 
#>                   "#alignIntronMax"                    "#alignEndsType" 
# all step input full id with type
f1$step_input_id(TRUE)
#>                                                    int 
#>                      "#STAR_Genome_Generate.sjdbScore" 
#>                                                    int 
#>                   "#STAR_Genome_Generate.sjdbOverhang" 
#>                                                 string 
#> "#STAR_Genome_Generate.sjdbGTFtagExonParentTranscript" 
#>                                                 string 
#>       "#STAR_Genome_Generate.sjdbGTFtagExonParentGene" 
#>                                                File... 
#>                    "#STAR_Genome_Generate.sjdbGTFfile" 
#>                                                 string 
#>             "#STAR_Genome_Generate.sjdbGTFfeatureExon" 
#>                                                 string 
#>               "#STAR_Genome_Generate.sjdbGTFchrPrefix" 
#>                                                    int 
#>                "#STAR_Genome_Generate.genomeSAsparseD" 
#>                                                    int 
#>            "#STAR_Genome_Generate.genomeSAindexNbases" 
#>                                                   File 
#>               "#STAR_Genome_Generate.genomeFastaFiles" 
#>                                                 string 
#>              "#STAR_Genome_Generate.genomeChrBinNbits" 
#>                                                   File 
#>                    "#SBG_FASTQ_Quality_Detector.fastq" 
#>                                                   enum 
#>                "#Picard_SortSam.validation_stringency" 
#>                                                   enum 
#>                           "#Picard_SortSam.sort_order" 
#>                                                   enum 
#>                                "#Picard_SortSam.quiet" 
#>                                                   enum 
#>                          "#Picard_SortSam.output_type" 
#>                                                    int 
#>                       "#Picard_SortSam.memory_per_job" 
#>                                                    int 
#>                   "#Picard_SortSam.max_records_in_ram" 
#>                                                   File 
#>                            "#Picard_SortSam.input_bam" 
#>                                                   enum 
#>                         "#Picard_SortSam.create_index" 
#>                                                    int 
#>                    "#Picard_SortSam.compression_level" 
#>                                                    int 
#>                                  "#STAR.winFlankNbins" 
#>                                                    int 
#>                                    "#STAR.winBinNbits" 
#>                                                    int 
#>                          "#STAR.winAnchorMultimapNmax" 
#>                                                    int 
#>                             "#STAR.winAnchorDistNbins" 
#>                                                   enum 
#>                                    "#STAR.twopassMode" 
#>                                                    int 
#>                                 "#STAR.twopass1readsN" 
#>                                                    int 
#>                                      "#STAR.sjdbScore" 
#>                                                    int 
#>                                   "#STAR.sjdbOverhang" 
#>                                                   enum 
#>                                 "#STAR.sjdbInsertSave" 
#>                                                 string 
#>                 "#STAR.sjdbGTFtagExonParentTranscript" 
#>                                                 string 
#>                       "#STAR.sjdbGTFtagExonParentGene" 
#>                                                File... 
#>                                    "#STAR.sjdbGTFfile" 
#>                                                 string 
#>                             "#STAR.sjdbGTFfeatureExon" 
#>                                                 string 
#>                               "#STAR.sjdbGTFchrPrefix" 
#>                                                  float 
#>                   "#STAR.seedSearchStartLmaxOverLread" 
#>                                                    int 
#>                            "#STAR.seedSearchStartLmax" 
#>                                                    int 
#>                                 "#STAR.seedSearchLmax" 
#>                                                    int 
#>                              "#STAR.seedPerWindowNmax" 
#>                                                    int 
#>                                "#STAR.seedPerReadNmax" 
#>                                                    int 
#>                          "#STAR.seedNoneLociPerWindow" 
#>                                                    int 
#>                               "#STAR.seedMultimapNmax" 
#>                                                    int 
#>                             "#STAR.scoreStitchSJshift" 
#>                                                    int 
#>                                   "#STAR.scoreInsOpen" 
#>                                                    int 
#>                                   "#STAR.scoreInsBase" 
#>                                                  float 
#>                    "#STAR.scoreGenomicLengthLog2scale" 
#>                                                    int 
#>                                 "#STAR.scoreGapNoncan" 
#>                                                    int 
#>                                   "#STAR.scoreGapGCAG" 
#>                                                    int 
#>                                   "#STAR.scoreGapATAC" 
#>                                                    int 
#>                                       "#STAR.scoreGap" 
#>                                                    int 
#>                                   "#STAR.scoreDelOpen" 
#>                                                    int 
#>                                   "#STAR.scoreDelBase" 
#>                                                 string 
#>                                  "#STAR.rg_seq_center" 
#>                                                 string 
#>                                   "#STAR.rg_sample_id" 
#>                                                 string 
#>                            "#STAR.rg_platform_unit_id" 
#>                                                   enum 
#>                                    "#STAR.rg_platform" 
#>                                                 string 
#>                                         "#STAR.rg_mfl" 
#>                                                 string 
#>                                  "#STAR.rg_library_id" 
#>                                                File... 
#>                                          "#STAR.reads" 
#>                                                   enum 
#>                             "#STAR.readMatesLengthsIn" 
#>                                                    int 
#>                                  "#STAR.readMapNumber" 
#>                                                   enum 
#>                          "#STAR.quantTranscriptomeBan" 
#>                                                   enum 
#>                                      "#STAR.quantMode" 
#>                                                   enum 
#>                                 "#STAR.outSortingType" 
#>                                                   enum 
#>                               "#STAR.outSJfilterReads" 
#>                                                 int... 
#>                         "#STAR.outSJfilterOverhangMin" 
#>                                                 int... 
#>                    "#STAR.outSJfilterIntronMaxVsReadN" 
#>                                                 int... 
#>                    "#STAR.outSJfilterDistToOtherSJmin" 
#>                                                 int... 
#>                      "#STAR.outSJfilterCountUniqueMin" 
#>                                                 int... 
#>                       "#STAR.outSJfilterCountTotalMin" 
#>                                                   enum 
#>                                 "#STAR.outSAMunmapped" 
#>                                                   enum 
#>                                     "#STAR.outSAMtype" 
#>                                                   enum 
#>                              "#STAR.outSAMstrandField" 
#>                                                   enum 
#>                                   "#STAR.outSAMreadID" 
#>                                                   enum 
#>                              "#STAR.outSAMprimaryFlag" 
#>                                                   enum 
#>                                    "#STAR.outSAMorder" 
#>                                                   enum 
#>                                     "#STAR.outSAMmode" 
#>                                                    int 
#>                               "#STAR.outSAMmapqUnique" 
#>                                                 string 
#>                                 "#STAR.outSAMheaderPG" 
#>                                                 string 
#>                                 "#STAR.outSAMheaderHD" 
#>                                                    int 
#>                                   "#STAR.outSAMflagOR" 
#>                                                    int 
#>                                  "#STAR.outSAMflagAND" 
#>                                                   enum 
#>                               "#STAR.outSAMattributes" 
#>                                                   enum 
#>                               "#STAR.outReadsUnmapped" 
#>                                                    int 
#>                             "#STAR.outQSconversionAdd" 
#>                                                   enum 
#>                                  "#STAR.outFilterType" 
#>                                                  float 
#>                     "#STAR.outFilterScoreMinOverLread" 
#>                                                    int 
#>                              "#STAR.outFilterScoreMin" 
#>                                                    int 
#>                    "#STAR.outFilterMultimapScoreRange" 
#>                                                    int 
#>                          "#STAR.outFilterMultimapNmax" 
#>                                                  float 
#>                 "#STAR.outFilterMismatchNoverReadLmax" 
#>                                                  float 
#>                     "#STAR.outFilterMismatchNoverLmax" 
#>                                                    int 
#>                          "#STAR.outFilterMismatchNmax" 
#>                                                  float 
#>                    "#STAR.outFilterMatchNminOverLread" 
#>                                                    int 
#>                             "#STAR.outFilterMatchNmin" 
#>                                                   enum 
#>                          "#STAR.outFilterIntronMotifs" 
#>                                                    int 
#>                             "#STAR.limitSjdbInsertNsj" 
#>                                                    int 
#>                              "#STAR.limitOutSJoneRead" 
#>                                                    int 
#>                            "#STAR.limitOutSJcollapsed" 
#>                                                    int 
#>                                "#STAR.limitBAMsortRAM" 
#>                                                 string 
#>                                  "#STAR.genomeDirName" 
#>                                                   File 
#>                                         "#STAR.genome" 
#>                                                 int... 
#>                                   "#STAR.clip5pNbases" 
#>                                                 int... 
#>                                   "#STAR.clip3pNbases" 
#>                                                 int... 
#>                       "#STAR.clip3pAfterAdapterNbases" 
#>                                              string... 
#>                               "#STAR.clip3pAdapterSeq" 
#>                                               float... 
#>                               "#STAR.clip3pAdapterMMp" 
#>                                                    int 
#>                                 "#STAR.chimSegmentMin" 
#>                                                    int 
#>                            "#STAR.chimScoreSeparation" 
#>                                                    int 
#>                                   "#STAR.chimScoreMin" 
#>                                                    int 
#>                       "#STAR.chimScoreJunctionNonGTAG" 
#>                                                    int 
#>                               "#STAR.chimScoreDropMax" 
#>                                                   enum 
#>                                    "#STAR.chimOutType" 
#>                                                    int 
#>                        "#STAR.chimJunctionOverhangMin" 
#>                                                  float 
#>                        "#STAR.alignWindowsPerReadNmax" 
#>                                                    int 
#>                  "#STAR.alignTranscriptsPerWindowNmax" 
#>                                                    int 
#>                    "#STAR.alignTranscriptsPerReadNmax" 
#>                                                  float 
#>               "#STAR.alignSplicedMateMapLminOverLmate" 
#>                                                    int 
#>                        "#STAR.alignSplicedMateMapLmin" 
#>                                                   enum 
#>                   "#STAR.alignSoftClipAtReferenceEnds" 
#>                                                    int 
#>                             "#STAR.alignSJoverhangMin" 
#>                                                    int 
#>                           "#STAR.alignSJDBoverhangMin" 
#>                                                    int 
#>                               "#STAR.alignMatesGapMax" 
#>                                                    int 
#>                                 "#STAR.alignIntronMin" 
#>                                                    int 
#>                                 "#STAR.alignIntronMax" 
#>                                                   enum 
#>                                  "#STAR.alignEndsType" 
# all step output id
f1$step_output_id()
#>          #STAR_Genome_Generate    #SBG_FASTQ_Quality_Detector 
#>                      "#genome"                      "#result" 
#>                #Picard_SortSam                          #STAR 
#>                  "#sorted_bam"              "#unmapped_reads" 
#>                          #STAR                          #STAR 
#> "#transcriptome_aligned_reads"            "#splice_junctions" 
#>                          #STAR                          #STAR 
#>              "#reads_per_gene"                   "#log_files" 
#>                          #STAR                          #STAR 
#>         "#intermediate_genome"          "#chimeric_junctions" 
#>                          #STAR                          #STAR 
#>         "#chimeric_alignments"               "#aligned_reads" 
# all step output full id with type
f1$step_output_id(TRUE)
#>                                 File                                 File 
#>       "#STAR_Genome_Generate.genome" "#SBG_FASTQ_Quality_Detector.result" 
#>                                 File                              File... 
#>         "#Picard_SortSam.sorted_bam"               "#STAR.unmapped_reads" 
#>                                 File                                 File 
#>  "#STAR.transcriptome_aligned_reads"             "#STAR.splice_junctions" 
#>                                 File                              File... 
#>               "#STAR.reads_per_gene"                    "#STAR.log_files" 
#>                                 File                                 File 
#>          "#STAR.intermediate_genome"           "#STAR.chimeric_junctions" 
#>                                 File                                 File 
#>          "#STAR.chimeric_alignments"                "#STAR.aligned_reads" 
# get inputs objects
f1$get_input("#clip3pNbases")
#> type:
#> - 'null'
#> - items: int
#>   type: array
#> label: Clip 3p bases
#> description: Number of bases to clip from 3p of each mate. In case only one value
#>   is given, it will be assumed the same for both mates.
#> streamable: no
#> id: '#clip3pNbases'
#> inputBinding:
#>   position: 0
#>   prefix: --clip3pNbases
#>   separate: yes
#>   itemSeparator: ' '
#>   shellQuote: no
#>   sbg:cmdInclude: yes
#>   streamable: no
#>   separator: ' '
#> sbg:category: Read parameters
#> sbg:toolDefaultValue: '0'
#> required: no
#> 
f1$get_input(c("#clip3pNbases", "#chimScoreMin"))
#> [[1]]
#> type:
#> - 'null'
#> - items: int
#>   type: array
#> label: Clip 3p bases
#> description: Number of bases to clip from 3p of each mate. In case only one value
#>   is given, it will be assumed the same for both mates.
#> streamable: no
#> id: '#clip3pNbases'
#> inputBinding:
#>   position: 0
#>   prefix: --clip3pNbases
#>   separate: yes
#>   itemSeparator: ' '
#>   shellQuote: no
#>   sbg:cmdInclude: yes
#>   streamable: no
#>   separator: ' '
#> sbg:category: Read parameters
#> sbg:toolDefaultValue: '0'
#> required: no
#> 
#> [[2]]
#> type:
#> - 'null'
#> - int
#> label: Min total score
#> description: Minimum total (summed) score of the chimeric segments (int>=0).
#> streamable: no
#> id: '#chimScoreMin'
#> inputBinding:
#>   position: 0
#>   prefix: --chimScoreMin
#>   separate: yes
#>   shellQuote: no
#>   sbg:cmdInclude: yes
#>   streamable: no
#>   separator: ' '
#> sbg:category: Chimeric Alignments
#> sbg:toolDefaultValue: '0'
#> required: no
#> 
f1$get_input(c("#clip3pNbases", "#chimScoreMin", "#STAR.outFilterMismatchNoverLmax"))
#> [[1]]
#> type:
#> - 'null'
#> - float
#> label: Mismatches to *mapped* length
#> description: Alignment will be output only if its ratio of mismatches to *mapped*
#>   length is less than this value.
#> streamable: no
#> id: '#outFilterMismatchNoverLmax'
#> inputBinding:
#>   position: 0
#>   prefix: --outFilterMismatchNoverLmax
#>   separate: yes
#>   shellQuote: no
#>   sbg:cmdInclude: yes
#>   streamable: no
#>   separator: ' '
#> sbg:category: Output filtering
#> sbg:toolDefaultValue: '0.3'
#> required: no
#> 
#> [[2]]
#> type:
#> - 'null'
#> - items: int
#>   type: array
#> label: Clip 3p bases
#> description: Number of bases to clip from 3p of each mate. In case only one value
#>   is given, it will be assumed the same for both mates.
#> streamable: no
#> id: '#clip3pNbases'
#> inputBinding:
#>   position: 0
#>   prefix: --clip3pNbases
#>   separate: yes
#>   itemSeparator: ' '
#>   shellQuote: no
#>   sbg:cmdInclude: yes
#>   streamable: no
#>   separator: ' '
#> sbg:category: Read parameters
#> sbg:toolDefaultValue: '0'
#> required: no
#> 
#> [[3]]
#> type:
#> - 'null'
#> - int
#> label: Min total score
#> description: Minimum total (summed) score of the chimeric segments (int>=0).
#> streamable: no
#> id: '#chimScoreMin'
#> inputBinding:
#>   position: 0
#>   prefix: --chimScoreMin
#>   separate: yes
#>   shellQuote: no
#>   sbg:cmdInclude: yes
#>   streamable: no
#>   separator: ' '
#> sbg:category: Chimeric Alignments
#> sbg:toolDefaultValue: '0'
#> required: no
#> 
# get outputs objects
f1$get_output("#log_files")
#> type:
#> - 'null'
#> - items: File
#>   type: array
#> label: Log files
#> description: Log files produced during alignment.
#> streamable: no
#> id: '#log_files'
#> outputBinding:
#>   glob: '*Log*.out'
#> sbg:fileTypes: OUT
#> 
f1$get_output(c("#log_files", "intermediate_genome"))
#> [[1]]
#> type:
#> - 'null'
#> - items: File
#>   type: array
#> label: Log files
#> description: Log files produced during alignment.
#> streamable: no
#> id: '#log_files'
#> outputBinding:
#>   glob: '*Log*.out'
#> sbg:fileTypes: OUT
#> 
#> [[2]]
#> type:
#> - 'null'
#> - File
#> label: Intermediate genome files
#> description: Archive with genome files produced when annotations are included on the
#>   fly (in the mapping step).
#> streamable: no
#> id: '#intermediate_genome'
#> outputBinding:
#>   glob: '*_STARgenome.tar'
#> sbg:fileTypes: TAR
#> 
f1$get_output(c("#log_files", "intermediate_genome", "#STAR.unmapped_reads"))
#> [[1]]
#> type:
#> - 'null'
#> - items: File
#>   type: array
#> label: Unmapped reads
#> description: Output of unmapped reads.
#> streamable: no
#> id: '#unmapped_reads'
#> outputBinding:
#>   glob: '*Unmapped.out*'
#> sbg:fileTypes: FASTQ
#> 
#> [[2]]
#> type:
#> - 'null'
#> - items: File
#>   type: array
#> label: Log files
#> description: Log files produced during alignment.
#> streamable: no
#> id: '#log_files'
#> outputBinding:
#>   glob: '*Log*.out'
#> sbg:fileTypes: OUT
#> 
#> [[3]]
#> type:
#> - 'null'
#> - File
#> label: Intermediate genome files
#> description: Archive with genome files produced when annotations are included on the
#>   fly (in the mapping step).
#> streamable: no
#> id: '#intermediate_genome'
#> outputBinding:
#>   glob: '*_STARgenome.tar'
#> sbg:fileTypes: TAR
#> 
f1$get_output("#log_files")
#> type:
#> - 'null'
#> - items: File
#>   type: array
#> label: Log files
#> description: Log files produced during alignment.
#> streamable: no
#> id: '#log_files'
#> outputBinding:
#>   glob: '*Log*.out'
#> sbg:fileTypes: OUT
#> 
# set flow input
f1$set_flow_input("#SBG_FASTQ_Quality_Detector.fastq")
#> sbg:validationErrors: []
#> sbg:sbgMaintained: no
#> sbg:latestRevision: 2
#> sbg:toolAuthor: Seven Bridges Genomics
#> sbg:createdOn: 1463601910
#> sbg:categories:
#> - Alignment
#> - RNA
#> sbg:contributors:
#> - tengfei
#> sbg:project: tengfei/quickstart
#> sbg:createdBy: tengfei
#> sbg:toolkitVersion: 2.4.2a
#> sbg:id: tengfei/quickstart/rna-seq-alignment-star-demo/2
#> sbg:license: Apache License 2.0
#> sbg:revision: 2
#> sbg:modifiedOn: 1463601974
#> sbg:modifiedBy: tengfei
#> sbg:revisionsInfo:
#> - sbg:modifiedBy: tengfei
#>   sbg:modifiedOn: 1463601910
#>   sbg:revision: 0
#> - sbg:modifiedBy: tengfei
#>   sbg:modifiedOn: 1463601952
#>   sbg:revision: 1
#> - sbg:modifiedBy: tengfei
#>   sbg:modifiedOn: 1463601974
#>   sbg:revision: 2
#> sbg:toolkit: STAR
#> id: '#tengfei/quickstart/rna-seq-alignment-star-demo/2'
#> inputs:
#> - type:
#>   - 'null'
#>   - items: File
#>     type: array
#>   label: sjdbGTFfile
#>   streamable: no
#>   id: '#sjdbGTFfile'
#>   sbg:x: 160.4999759
#>   sbg:y: 195.0833106
#>   sbg:includeInPorts: yes
#>   required: no
#> - type:
#>   - items: File
#>     type: array
#>   label: fastq
#>   streamable: no
#>   id: '#fastq'
#>   sbg:x: 164.2499914
#>   sbg:y: 323.7499502
#>   sbg:includeInPorts: yes
#>   required: yes
#> - type:
#>   - File
#>   label: genomeFastaFiles
#>   streamable: no
#>   id: '#genomeFastaFiles'
#>   sbg:x: 167.7499601
#>   sbg:y: 469.9999106
#>   sbg:includeInPorts: yes
#>   required: yes
#> - type:
#>   - 'null'
#>   - string
#>   label: Exons' parents name
#>   description: Tag name to be used as exons' transcript-parents.
#>   streamable: no
#>   id: '#sjdbGTFtagExonParentTranscript'
#>   sbg:category: Splice junctions db parameters
#>   sbg:x: 200.0
#>   sbg:y: 350.0
#>   sbg:includeInPorts: yes
#>   sbg:toolDefaultValue: transcript_id
#>   required: no
#> - type:
#>   - 'null'
#>   - string
#>   label: Gene name
#>   description: Tag name to be used as exons' gene-parents.
#>   streamable: no
#>   id: '#sjdbGTFtagExonParentGene'
#>   sbg:category: Splice junctions db parameters
#>   sbg:x: 200.0
#>   sbg:y: 400.0
#>   sbg:includeInPorts: yes
#>   sbg:toolDefaultValue: gene_id
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: Max loci anchors
#>   description: Max number of loci anchors are allowed to map to (int>0).
#>   streamable: no
#>   id: '#winAnchorMultimapNmax'
#>   sbg:category: Windows, Anchors, Binning
#>   sbg:x: 200.0
#>   sbg:y: 450.0
#>   sbg:includeInPorts: yes
#>   sbg:toolDefaultValue: '50'
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: Max bins between anchors
#>   description: Max number of bins between two anchors that allows aggregation of anchors
#>     into one window (int>0).
#>   streamable: no
#>   id: '#winAnchorDistNbins'
#>   sbg:category: Windows, Anchors, Binning
#>   sbg:x: 200.0
#>   sbg:y: 500.0
#>   sbg:includeInPorts: yes
#>   sbg:toolDefaultValue: '9'
#>   required: no
#> outputs:
#> - type:
#>   - 'null'
#>   - items: File
#>     type: array
#>   label: unmapped_reads
#>   streamable: no
#>   id: '#unmapped_reads'
#>   source: '#STAR.unmapped_reads'
#>   sbg:x: 766.2497863
#>   sbg:y: 159.5833091
#>   sbg:includeInPorts: yes
#>   required: no
#> - type:
#>   - 'null'
#>   - File
#>   label: transcriptome_aligned_reads
#>   streamable: no
#>   id: '#transcriptome_aligned_reads'
#>   source: '#STAR.transcriptome_aligned_reads'
#>   sbg:x: 1118.9998003
#>   sbg:y: 86.5833216
#>   sbg:includeInPorts: yes
#>   required: no
#> - type:
#>   - 'null'
#>   - File
#>   label: splice_junctions
#>   streamable: no
#>   id: '#splice_junctions'
#>   source: '#STAR.splice_junctions'
#>   sbg:x: 1282.3330177
#>   sbg:y: 167.499976
#>   sbg:includeInPorts: yes
#>   required: no
#> - type:
#>   - 'null'
#>   - File
#>   label: reads_per_gene
#>   streamable: no
#>   id: '#reads_per_gene'
#>   source: '#STAR.reads_per_gene'
#>   sbg:x: 1394.4163557
#>   sbg:y: 245.749964
#>   sbg:includeInPorts: yes
#>   required: no
#> - type:
#>   - 'null'
#>   - items: File
#>     type: array
#>   label: log_files
#>   streamable: no
#>   id: '#log_files'
#>   source: '#STAR.log_files'
#>   sbg:x: 1505.0830269
#>   sbg:y: 322.9999518
#>   sbg:includeInPorts: yes
#>   required: no
#> - type:
#>   - 'null'
#>   - File
#>   label: chimeric_junctions
#>   streamable: no
#>   id: '#chimeric_junctions'
#>   source: '#STAR.chimeric_junctions'
#>   sbg:x: 1278.7498062
#>   sbg:y: 446.7499567
#>   sbg:includeInPorts: yes
#>   required: no
#> - type:
#>   - 'null'
#>   - File
#>   label: intermediate_genome
#>   streamable: no
#>   id: '#intermediate_genome'
#>   source: '#STAR.intermediate_genome'
#>   sbg:x: 1408.9164783
#>   sbg:y: 386.0832876
#>   sbg:includeInPorts: yes
#>   required: no
#> - type:
#>   - 'null'
#>   - File
#>   label: chimeric_alignments
#>   streamable: no
#>   id: '#chimeric_alignments'
#>   source: '#STAR.chimeric_alignments'
#>   sbg:x: 1147.5831348
#>   sbg:y: 503.2499285
#>   sbg:includeInPorts: yes
#>   required: no
#> - type:
#>   - 'null'
#>   - File
#>   label: sorted_bam
#>   streamable: no
#>   id: '#sorted_bam'
#>   source: '#Picard_SortSam.sorted_bam'
#>   sbg:x: 934.2498228
#>   sbg:y: 557.2498436
#>   sbg:includeInPorts: yes
#>   required: no
#> - type:
#>   - 'null'
#>   - File
#>   label: result
#>   streamable: no
#>   id: '#result'
#>   source: '#SBG_FASTQ_Quality_Detector.result'
#>   sbg:x: 1431.6666548
#>   sbg:y: 644.9999898
#>   sbg:includeInPorts: yes
#>   required: no
#> requirements:
#> - class: CreateFileRequirement
#>   fileDef: []
#> hints:
#> - class: sbg:AWSInstanceType
#>   value: c3.8xlarge
#> label: RNA-seq Alignment - STAR
#> description: "Alignment to a reference genome and transcriptome presents the first
#>   step of RNA-Seq analysis. This pipeline uses STAR, an ultrafast RNA-seq aligner
#>   capable of mapping full length RNA sequences and detecting de novo canonical junctions,
#>   non-canonical splices, and chimeric (fusion) transcripts. It is optimized for mammalian
#>   sequence reads, but fine tuning of its parameters enables customization to satisfy
#>   unique needs.\n\nSTAR accepts one file per sample (or two files for paired-end data).
#>   \ \nSplice junction annotations can optionally be collected from splice junction
#>   databases. Set the \"Overhang length\" parameter to a value larger than zero in
#>   order to use splice junction databases. For constant read length, this value should
#>   (ideally) be equal to mate length decreased by 1; for long reads with non-constant
#>   length, this value should be 100 (pipeline default). \nFastQC Analysis on FASTQ
#>   files reveals read length distribution. STAR can detect chimeric transcripts, but
#>   parameter \"Min segment length\" in \"Chimeric Alignments\" category must be adjusted
#>   to a desired minimum chimeric segment length. Aligned reads are reported in BAM
#>   format and can be viewed in a genome browser (such as IGV). A file containing detected
#>   splice junctions is also produced.\n\nUnmapped reads are reported in FASTQ format
#>   and can be included in an output BAM file. The \"Output unmapped reads\" and \"Write
#>   unmapped in SAM\" parameters enable unmapped output type selection."
#> class: Workflow
#> steps:
#> - id: '#STAR_Genome_Generate'
#>   inputs:
#>   - id: '#STAR_Genome_Generate.sjdbScore'
#>   - id: '#STAR_Genome_Generate.sjdbOverhang'
#>   - id: '#STAR_Genome_Generate.sjdbGTFtagExonParentTranscript'
#>     source: '#sjdbGTFtagExonParentTranscript'
#>   - id: '#STAR_Genome_Generate.sjdbGTFtagExonParentGene'
#>     source: '#sjdbGTFtagExonParentGene'
#>   - id: '#STAR_Genome_Generate.sjdbGTFfile'
#>     source: '#sjdbGTFfile'
#>   - id: '#STAR_Genome_Generate.sjdbGTFfeatureExon'
#>   - id: '#STAR_Genome_Generate.sjdbGTFchrPrefix'
#>   - id: '#STAR_Genome_Generate.genomeSAsparseD'
#>   - id: '#STAR_Genome_Generate.genomeSAindexNbases'
#>   - id: '#STAR_Genome_Generate.genomeFastaFiles'
#>     source: '#genomeFastaFiles'
#>   - id: '#STAR_Genome_Generate.genomeChrBinNbits'
#>   outputs:
#>   - id: '#STAR_Genome_Generate.genome'
#>   hints: []
#>   run:
#>     sbg:validationErrors: []
#>     sbg:sbgMaintained: no
#>     sbg:latestRevision: 1
#>     sbg:job:
#>       allocatedResources:
#>         mem: 60000
#>         cpu: 15
#>       inputs:
#>         sjdbScore: 0
#>         sjdbGTFfeatureExon: sjdbGTFfeatureExon
#>         sjdbOverhang: 0
#>         sjdbGTFtagExonParentTranscript: sjdbGTFtagExonParentTranscript
#>         genomeChrBinNbits: genomeChrBinNbits
#>         genomeSAsparseD: 0
#>         sjdbGTFfile:
#>         - size: 0
#>           secondaryFiles: []
#>           class: File
#>           path: /demo/test-files/chr20.gtf
#>         sjdbGTFtagExonParentGene: sjdbGTFtagExonParentGene
#>         genomeFastaFiles:
#>           size: 0
#>           secondaryFiles: []
#>           class: File
#>           path: /sbgenomics/test-data/chr20.fa
#>         sjdbGTFchrPrefix: sjdbGTFchrPrefix
#>         genomeSAindexNbases: 0
#>     sbg:toolAuthor: Alexander Dobin/CSHL
#>     sbg:createdOn: 1450911469
#>     sbg:categories:
#>     - Alignment
#>     sbg:contributors:
#>     - bix-demo
#>     sbg:links:
#>     - id: https://github.com/alexdobin/STAR
#>       label: Homepage
#>     - id: https://github.com/alexdobin/STAR/releases
#>       label: Releases
#>     - id: https://github.com/alexdobin/STAR/blob/master/doc/STARmanual.pdf
#>       label: Manual
#>     - id: https://groups.google.com/forum/#!forum/rna-star
#>       label: Support
#>     - id: http://www.ncbi.nlm.nih.gov/pubmed/23104886
#>       label: Publication
#>     sbg:project: bix-demo/star-2-4-2a-demo
#>     sbg:createdBy: bix-demo
#>     sbg:toolkitVersion: 2.4.2a
#>     sbg:id: sevenbridges/public-apps/star-genome-generate/1
#>     sbg:license: GNU General Public License v3.0 only
#>     sbg:revision: 1
#>     sbg:cmdPreview: mkdir genomeDir && /opt/STAR --runMode genomeGenerate --genomeDir
#>       ./genomeDir --runThreadN 15 --genomeFastaFiles /sbgenomics/test-data/chr20.fa
#>       --genomeChrBinNbits genomeChrBinNbits --genomeSAindexNbases 0 --genomeSAsparseD
#>       0 --sjdbGTFfeatureExon sjdbGTFfeatureExon --sjdbGTFtagExonParentTranscript sjdbGTFtagExonParentTranscript
#>       --sjdbGTFtagExonParentGene sjdbGTFtagExonParentGene --sjdbOverhang 0 --sjdbScore
#>       0 --sjdbGTFchrPrefix sjdbGTFchrPrefix  --sjdbGTFfile /demo/test-files/chr20.gtf  &&
#>       tar -vcf genome.tar ./genomeDir /sbgenomics/test-data/chr20.fa
#>     sbg:modifiedOn: 1450911470
#>     sbg:modifiedBy: bix-demo
#>     sbg:revisionsInfo:
#>     - sbg:modifiedBy: bix-demo
#>       sbg:modifiedOn: 1450911469
#>       sbg:revision: 0
#>     - sbg:modifiedBy: bix-demo
#>       sbg:modifiedOn: 1450911470
#>       sbg:revision: 1
#>     sbg:toolkit: STAR
#>     id: sevenbridges/public-apps/star-genome-generate/1
#>     inputs:
#>     - type:
#>       - 'null'
#>       - int
#>       label: Extra alignment score
#>       description: Extra alignment score for alignments that cross database junctions.
#>       streamable: no
#>       id: '#sjdbScore'
#>       inputBinding:
#>         position: 0
#>         prefix: --sjdbScore
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Splice junctions db parameters
#>       sbg:includeInPorts: yes
#>       sbg:toolDefaultValue: '2'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: '"Overhang" length'
#>       description: Length of the donor/acceptor sequence on each side of the junctions,
#>         ideally = (mate_length - 1) (int >= 0), if int = 0, splice junction database
#>         is not used.
#>       streamable: no
#>       id: '#sjdbOverhang'
#>       inputBinding:
#>         position: 0
#>         prefix: --sjdbOverhang
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Splice junctions db parameters
#>       sbg:includeInPorts: yes
#>       sbg:toolDefaultValue: '100'
#>       required: no
#>     - type:
#>       - 'null'
#>       - string
#>       label: Exons' parents name
#>       description: Tag name to be used as exons' transcript-parents.
#>       streamable: no
#>       id: '#sjdbGTFtagExonParentTranscript'
#>       inputBinding:
#>         position: 0
#>         prefix: --sjdbGTFtagExonParentTranscript
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Splice junctions db parameters
#>       sbg:toolDefaultValue: transcript_id
#>       required: no
#>     - type:
#>       - 'null'
#>       - string
#>       label: Gene name
#>       description: Tag name to be used as exons' gene-parents.
#>       streamable: no
#>       id: '#sjdbGTFtagExonParentGene'
#>       inputBinding:
#>         position: 0
#>         prefix: --sjdbGTFtagExonParentGene
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Splice junctions db parameters
#>       sbg:toolDefaultValue: gene_id
#>       required: no
#>     - type:
#>       - 'null'
#>       - items: File
#>         type: array
#>       label: Splice junction file
#>       description: Gene model annotations and/or known transcripts.
#>       streamable: no
#>       id: '#sjdbGTFfile'
#>       sbg:category: Basic
#>       sbg:fileTypes: GTF, GFF, TXT
#>       required: no
#>     - type:
#>       - 'null'
#>       - string
#>       label: Set exons feature
#>       description: Feature type in GTF file to be used as exons for building transcripts.
#>       streamable: no
#>       id: '#sjdbGTFfeatureExon'
#>       inputBinding:
#>         position: 0
#>         prefix: --sjdbGTFfeatureExon
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Splice junctions db parameters
#>       sbg:toolDefaultValue: exon
#>       required: no
#>     - type:
#>       - 'null'
#>       - string
#>       label: Chromosome names
#>       description: Prefix for chromosome names in a GTF file (e.g. 'chr' for using
#>         ENSMEBL annotations with UCSC geneomes).
#>       streamable: no
#>       id: '#sjdbGTFchrPrefix'
#>       inputBinding:
#>         position: 0
#>         prefix: --sjdbGTFchrPrefix
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Splice junctions db parameters
#>       sbg:toolDefaultValue: '-'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Suffux array sparsity
#>       description: 'Distance between indices: use bigger numbers to decrease needed
#>         RAM at the cost of mapping speed reduction (int>0).'
#>       streamable: no
#>       id: '#genomeSAsparseD'
#>       inputBinding:
#>         position: 0
#>         prefix: --genomeSAsparseD
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Genome generation parameters
#>       sbg:toolDefaultValue: '1'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Pre-indexing string length
#>       description: Length (bases) of the SA pre-indexing string. Typically between
#>         10 and 15. Longer strings will use much more memory, but allow faster searches.
#>         For small genomes, this number needs to be scaled down, with a typical value
#>         of min(14, log2(GenomeLength)/2 - 1). For example, for 1 megaBase genome,
#>         this is equal to 9, for 100 kiloBase genome, this is equal to 7.
#>       streamable: no
#>       id: '#genomeSAindexNbases'
#>       inputBinding:
#>         position: 0
#>         prefix: --genomeSAindexNbases
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Genome generation parameters
#>       sbg:toolDefaultValue: '14'
#>       required: no
#>     - type:
#>       - File
#>       label: Genome fasta files
#>       description: Reference sequence to which to align the reads.
#>       streamable: no
#>       id: '#genomeFastaFiles'
#>       inputBinding:
#>         position: 0
#>         prefix: --genomeFastaFiles
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Basic
#>       sbg:fileTypes: FASTA, FA
#>       required: yes
#>     - type:
#>       - 'null'
#>       - string
#>       label: Bins size
#>       description: 'Set log2(chrBin), where chrBin is the size (bits) of the bins
#>         for genome storage: each chromosome will occupy an integer number of bins.
#>         If you are using a genome with a large (>5,000) number of chrosomes/scaffolds,
#>         you may need to reduce this number to reduce RAM consumption. The following
#>         scaling is recomended: genomeChrBinNbits = min(18, log2(GenomeLength/NumberOfReferences)).
#>         For example, for 3 gigaBase genome with 100,000 chromosomes/scaffolds, this
#>         is equal to 15.'
#>       streamable: no
#>       id: '#genomeChrBinNbits'
#>       inputBinding:
#>         position: 0
#>         prefix: --genomeChrBinNbits
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Genome generation parameters
#>       sbg:toolDefaultValue: '18'
#>       required: no
#>     outputs:
#>     - type:
#>       - 'null'
#>       - File
#>       label: Genome Files
#>       description: Genome files comprise binary genome sequence, suffix arrays, text
#>         chromosome names/lengths, splice junctions coordinates, and transcripts/genes
#>         information.
#>       streamable: no
#>       id: '#genome'
#>       outputBinding:
#>         glob: '*.tar'
#>       sbg:fileTypes: TAR
#>     requirements:
#>     - class: ExpressionEngineRequirement
#>       id: '#cwl-js-engine'
#>       requirements:
#>       - class: DockerRequirement
#>         dockerPull: rabix/js-engine
#>     hints:
#>     - class: DockerRequirement
#>       dockerPull: images.sbgenomics.com/ana_d/star:2.4.2a
#>       dockerImageId: a4b0ad2c3cae
#>     - class: sbg:CPURequirement
#>       value: 15
#>     - class: sbg:MemRequirement
#>       value: 60000
#>     label: STAR Genome Generate
#>     description: STAR Genome Generate is a tool that generates genome index files.
#>       One set of files should be generated per each genome/annotation combination.
#>       Once produced, these files could be used as long as genome/annotation combination
#>       stays the same. Also, STAR Genome Generate which produced these files and STAR
#>       aligner using them must be the same toolkit version.
#>     class: CommandLineTool
#>     baseCommand:
#>     - mkdir
#>     - genomeDir
#>     - '&&'
#>     - /opt/STAR
#>     - --runMode
#>     - genomeGenerate
#>     - --genomeDir
#>     - ./genomeDir
#>     - --runThreadN
#>     - class: Expression
#>       script: |-
#>         {
#>           return $job.allocatedResources.cpu
#>         }
#>       engine: '#cwl-js-engine'
#>     arguments:
#>     - position: 99
#>       separate: yes
#>       valueFrom: '&& tar -vcf genome.tar ./genomeDir'
#>     - position: 0
#>       separate: yes
#>       valueFrom:
#>         engine: '#cwl-js-engine'
#>         script: "{\t\n  var sjFormat = \"False\"\n  var gtfgffFormat = \"False\"\n
#>           \ var list = $job.inputs.sjdbGTFfile\n  var paths_list = []\n  var joined_paths
#>           = \"\"\n  \n  if (list) {\n    list.forEach(function(f){return paths_list.push(f.path)})\n
#>           \   joined_paths = paths_list.join(\" \")\n\n\n    paths_list.forEach(function(f){\n
#>           \     ext = f.replace(/^.*\\./, '')\n      if (ext == \"gff\" || ext ==
#>           \"gtf\") {\n        gtfgffFormat = \"True\"\n        return gtfgffFormat\n
#>           \     }\n      if (ext == \"txt\") {\n        sjFormat = \"True\"\n        return
#>           sjFormat\n      }\n    })\n\n    if ($job.inputs.sjdbGTFfile && $job.inputs.sjdbInsertSave
#>           != \"None\") {\n      if (sjFormat == \"True\") {\n        return \"--sjdbFileChrStartEnd
#>           \".concat(joined_paths)\n      }\n      else if (gtfgffFormat == \"True\")
#>           {\n        return \"--sjdbGTFfile \".concat(joined_paths)\n      }\n    }\n
#>           \ }\n}"
#>         class: Expression
#>     stdin: ''
#>     stdout: ''
#>     successCodes: []
#>     temporaryFailCodes: []
#>     x: 384.0832266
#>     'y': 446.4998957
#>   sbg:x: 100.0
#>   sbg:y: 200.0
#> - id: '#SBG_FASTQ_Quality_Detector'
#>   inputs:
#>   - id: '#SBG_FASTQ_Quality_Detector.fastq'
#>     source: '#fastq'
#>   outputs:
#>   - id: '#SBG_FASTQ_Quality_Detector.result'
#>   hints: []
#>   run:
#>     sbg:validationErrors: []
#>     sbg:sbgMaintained: no
#>     sbg:latestRevision: 3
#>     sbg:job:
#>       allocatedResources:
#>         mem: 1000
#>         cpu: 1
#>       inputs:
#>         fastq:
#>           size: 0
#>           secondaryFiles: []
#>           class: File
#>           path: /path/to/fastq.ext
#>     sbg:toolAuthor: Seven Bridges Genomics
#>     sbg:createdOn: 1450911312
#>     sbg:categories:
#>     - FASTQ-Processing
#>     sbg:contributors:
#>     - bix-demo
#>     sbg:project: bix-demo/sbgtools-demo
#>     sbg:createdBy: bix-demo
#>     sbg:id: sevenbridges/public-apps/sbg-fastq-quality-detector/3
#>     sbg:license: Apache License 2.0
#>     sbg:revision: 3
#>     sbg:cmdPreview: python /opt/sbg_fastq_quality_scale_detector.py --fastq /path/to/fastq.ext
#>       /path/to/fastq.ext
#>     sbg:modifiedOn: 1450911314
#>     sbg:modifiedBy: bix-demo
#>     sbg:revisionsInfo:
#>     - sbg:modifiedBy: bix-demo
#>       sbg:modifiedOn: 1450911312
#>       sbg:revision: 0
#>     - sbg:modifiedBy: bix-demo
#>       sbg:modifiedOn: 1450911314
#>       sbg:revision: 3
#>     - sbg:modifiedBy: bix-demo
#>       sbg:modifiedOn: 1450911313
#>       sbg:revision: 1
#>     - sbg:modifiedBy: bix-demo
#>       sbg:modifiedOn: 1450911313
#>       sbg:revision: 2
#>     sbg:toolkit: SBGTools
#>     id: sevenbridges/public-apps/sbg-fastq-quality-detector/3
#>     inputs:
#>     - type:
#>       - File
#>       label: Fastq
#>       description: FASTQ file.
#>       streamable: no
#>       id: '#fastq'
#>       inputBinding:
#>         position: 0
#>         prefix: --fastq
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       required: yes
#>     outputs:
#>     - type:
#>       - 'null'
#>       - File
#>       label: Result
#>       description: Source FASTQ file with updated metadata.
#>       streamable: no
#>       id: '#result'
#>       outputBinding:
#>         glob: '*.fastq'
#>       sbg:fileTypes: FASTQ
#>     requirements:
#>     - class: CreateFileRequirement
#>       fileDef: []
#>     hints:
#>     - class: DockerRequirement
#>       dockerPull: images.sbgenomics.com/tziotas/sbg_fastq_quality_scale_detector:1.0
#>       dockerImageId: ''
#>     - class: sbg:CPURequirement
#>       value: 1
#>     - class: sbg:MemRequirement
#>       value: 1000
#>     label: SBG FASTQ Quality Detector
#>     description: FASTQ Quality Scale Detector detects which quality encoding scheme
#>       was used in your reads and automatically enters the proper value in the "Quality
#>       Scale" metadata field.
#>     class: CommandLineTool
#>     baseCommand:
#>     - python
#>     - /opt/sbg_fastq_quality_scale_detector.py
#>     arguments: []
#>     stdin: ''
#>     stdout: ''
#>     successCodes: []
#>     temporaryFailCodes: []
#>     x: 375.3333179
#>     'y': 323.5833156
#>   sbg:x: 300.0
#>   sbg:y: 200.0
#> - id: '#Picard_SortSam'
#>   inputs:
#>   - id: '#Picard_SortSam.validation_stringency'
#>     default: SILENT
#>   - id: '#Picard_SortSam.sort_order'
#>     default: Coordinate
#>   - id: '#Picard_SortSam.quiet'
#>   - id: '#Picard_SortSam.output_type'
#>   - id: '#Picard_SortSam.memory_per_job'
#>   - id: '#Picard_SortSam.max_records_in_ram'
#>   - id: '#Picard_SortSam.input_bam'
#>     source: '#STAR.aligned_reads'
#>   - id: '#Picard_SortSam.create_index'
#>     default: 'True'
#>   - id: '#Picard_SortSam.compression_level'
#>   outputs:
#>   - id: '#Picard_SortSam.sorted_bam'
#>   hints: []
#>   run:
#>     sbg:validationErrors: []
#>     sbg:sbgMaintained: no
#>     sbg:latestRevision: 2
#>     sbg:job:
#>       allocatedResources:
#>         mem: 2048
#>         cpu: 1
#>       inputs:
#>         sort_order: Coordinate
#>         input_bam:
#>           path: /root/dir/example.tested.bam
#>         memory_per_job: 2048
#>         output_type: ~
#>         create_index: ~
#>     sbg:toolAuthor: Broad Institute
#>     sbg:createdOn: 1450911168
#>     sbg:categories:
#>     - SAM/BAM-Processing
#>     sbg:contributors:
#>     - bix-demo
#>     sbg:links:
#>     - id: http://broadinstitute.github.io/picard/index.html
#>       label: Homepage
#>     - id: https://github.com/broadinstitute/picard/releases/tag/1.138
#>       label: Source Code
#>     - id: http://broadinstitute.github.io/picard/
#>       label: Wiki
#>     - id: https://github.com/broadinstitute/picard/zipball/master
#>       label: Download
#>     - id: http://broadinstitute.github.io/picard/
#>       label: Publication
#>     sbg:project: bix-demo/picard-1-140-demo
#>     sbg:createdBy: bix-demo
#>     sbg:toolkitVersion: '1.140'
#>     sbg:id: sevenbridges/public-apps/picard-sortsam-1-140/2
#>     sbg:license: MIT License, Apache 2.0 Licence
#>     sbg:revision: 2
#>     sbg:cmdPreview: java -Xmx2048M -jar /opt/picard-tools-1.140/picard.jar SortSam
#>       OUTPUT=example.tested.sorted.bam INPUT=/root/dir/example.tested.bam SORT_ORDER=coordinate   INPUT=/root/dir/example.tested.bam
#>       SORT_ORDER=coordinate  /root/dir/example.tested.bam
#>     sbg:modifiedOn: 1450911170
#>     sbg:modifiedBy: bix-demo
#>     sbg:revisionsInfo:
#>     - sbg:modifiedBy: bix-demo
#>       sbg:modifiedOn: 1450911168
#>       sbg:revision: 0
#>     - sbg:modifiedBy: bix-demo
#>       sbg:modifiedOn: 1450911169
#>       sbg:revision: 1
#>     - sbg:modifiedBy: bix-demo
#>       sbg:modifiedOn: 1450911170
#>       sbg:revision: 2
#>     sbg:toolkit: Picard
#>     id: sevenbridges/public-apps/picard-sortsam-1-140/2
#>     inputs:
#>     - type:
#>       - 'null'
#>       - name: validation_stringency
#>         symbols:
#>         - STRICT
#>         - LENIENT
#>         - SILENT
#>         type: enum
#>       label: Validation stringency
#>       description: 'Validation stringency for all SAM files read by this program.
#>         Setting stringency to SILENT can improve performance when processing a BAM
#>         file in which variable-length data (read, qualities, tags) do not otherwise
#>         need to be decoded. This option can be set to ''null'' to clear the default
#>         value. Possible values: {STRICT, LENIENT, SILENT}.'
#>       streamable: no
#>       id: '#validation_stringency'
#>       inputBinding:
#>         position: 0
#>         prefix: VALIDATION_STRINGENCY=
#>         separate: no
#>         valueFrom:
#>           engine: '#cwl-js-engine'
#>           script: |-
#>             {
#>               if ($job.inputs.validation_stringency)
#>               {
#>                 return $job.inputs.validation_stringency
#>               }
#>               else
#>               {
#>                 return "SILENT"
#>               }
#>             }
#>           class: Expression
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Other input types
#>       sbg:toolDefaultValue: SILENT
#>       required: no
#>     - type:
#>       - name: sort_order
#>         symbols:
#>         - Unsorted
#>         - Queryname
#>         - Coordinate
#>         type: enum
#>       label: Sort order
#>       description: 'Sort order of the output file. Possible values: {unsorted, queryname,
#>         coordinate}.'
#>       streamable: no
#>       id: '#sort_order'
#>       inputBinding:
#>         position: 3
#>         prefix: SORT_ORDER=
#>         separate: no
#>         valueFrom:
#>           engine: '#cwl-js-engine'
#>           script: |-
#>             {
#>               p = $job.inputs.sort_order.toLowerCase()
#>               return p
#>             }
#>           class: Expression
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Other input types
#>       sbg:toolDefaultValue: Coordinate
#>       sbg:altPrefix: SO
#>       required: yes
#>     - type:
#>       - 'null'
#>       - name: quiet
#>         symbols:
#>         - 'True'
#>         - 'False'
#>         type: enum
#>       label: Quiet
#>       description: 'This parameter indicates whether to suppress job-summary info
#>         on System.err. This option can be set to ''null'' to clear the default value.
#>         Possible values: {true, false}.'
#>       streamable: no
#>       id: '#quiet'
#>       inputBinding:
#>         position: 0
#>         prefix: QUIET=
#>         separate: no
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Other input types
#>       sbg:toolDefaultValue: 'False'
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: output_type
#>         symbols:
#>         - BAM
#>         - SAM
#>         - SAME AS INPUT
#>         type: enum
#>       label: Output format
#>       description: Since Picard tools can output both SAM and BAM files, user can
#>         choose the format of the output file.
#>       streamable: no
#>       id: '#output_type'
#>       sbg:category: Other input types
#>       sbg:toolDefaultValue: SAME AS INPUT
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Memory per job
#>       description: Amount of RAM memory to be used per job. Defaults to 2048 MB for
#>         single threaded jobs.
#>       streamable: no
#>       id: '#memory_per_job'
#>       sbg:toolDefaultValue: '2048'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Max records in RAM
#>       description: When writing SAM files that need to be sorted, this parameter will
#>         specify the number of records stored in RAM before spilling to disk. Increasing
#>         this number reduces the number of file handles needed to sort a SAM file,
#>         and increases the amount of RAM needed. This option can be set to 'null' to
#>         clear the default value.
#>       streamable: no
#>       id: '#max_records_in_ram'
#>       inputBinding:
#>         position: 0
#>         prefix: MAX_RECORDS_IN_RAM=
#>         separate: no
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Other input types
#>       sbg:toolDefaultValue: '500000'
#>       required: no
#>     - type:
#>       - File
#>       label: Input BAM
#>       description: The BAM or SAM file to sort.
#>       streamable: no
#>       id: '#input_bam'
#>       inputBinding:
#>         position: 1
#>         prefix: INPUT=
#>         separate: no
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: File inputs
#>       sbg:fileTypes: BAM, SAM
#>       sbg:altPrefix: I
#>       required: yes
#>     - type:
#>       - 'null'
#>       - name: create_index
#>         symbols:
#>         - 'True'
#>         - 'False'
#>         type: enum
#>       label: Create index
#>       description: 'This parameter indicates whether to create a BAM index when writing
#>         a coordinate-sorted BAM file. This option can be set to ''null'' to clear
#>         the default value. Possible values: {true, false}.'
#>       streamable: no
#>       id: '#create_index'
#>       inputBinding:
#>         position: 5
#>         prefix: CREATE_INDEX=
#>         separate: no
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Other input types
#>       sbg:toolDefaultValue: 'False'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Compression level
#>       description: Compression level for all compressed files created (e.g. BAM and
#>         GELI). This option can be set to 'null' to clear the default value.
#>       streamable: no
#>       id: '#compression_level'
#>       inputBinding:
#>         position: 0
#>         prefix: COMPRESSION_LEVEL=
#>         separate: no
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Other input types
#>       sbg:toolDefaultValue: '5'
#>       required: no
#>     outputs:
#>     - type:
#>       - 'null'
#>       - File
#>       label: Sorted BAM/SAM
#>       description: Sorted BAM or SAM file.
#>       streamable: no
#>       id: '#sorted_bam'
#>       outputBinding:
#>         glob: '*.sorted.?am'
#>       sbg:fileTypes: BAM, SAM
#>     requirements:
#>     - class: ExpressionEngineRequirement
#>       id: '#cwl-js-engine'
#>       requirements:
#>       - class: DockerRequirement
#>         dockerPull: rabix/js-engine
#>       engineCommand: cwl-engine.js
#>     hints:
#>     - class: DockerRequirement
#>       dockerPull: images.sbgenomics.com/mladenlsbg/picard:1.140
#>       dockerImageId: eab0e70b6629
#>     - class: sbg:CPURequirement
#>       value: 1
#>     - class: sbg:MemRequirement
#>       value:
#>         engine: '#cwl-js-engine'
#>         script: "{\n  if($job.inputs.memory_per_job){\n  \treturn $job.inputs.memory_per_job\n
#>           \ }\n  \treturn 2048\n}"
#>         class: Expression
#>     label: Picard SortSam
#>     description: Picard SortSam sorts the input SAM or BAM. Input and output formats
#>       are determined by the file extension.
#>     class: CommandLineTool
#>     baseCommand:
#>     - java
#>     - class: Expression
#>       script: "{   \n  if($job.inputs.memory_per_job){\n    return '-Xmx'.concat($job.inputs.memory_per_job,
#>         'M')\n  }   \n  \treturn '-Xmx2048M'\n}"
#>       engine: '#cwl-js-engine'
#>     - -jar
#>     - /opt/picard-tools-1.140/picard.jar
#>     - SortSam
#>     arguments:
#>     - position: 0
#>       prefix: OUTPUT=
#>       separate: no
#>       valueFrom:
#>         engine: '#cwl-js-engine'
#>         script: "{\n  filename = $job.inputs.input_bam.path\n  ext = $job.inputs.output_type\n\nif
#>           (ext === \"BAM\")\n{\n    return filename.split('.').slice(0, -1).concat(\"sorted.bam\").join(\".\").replace(/^.*[\\\\\\/]/,
#>           '')\n    }\n\nelse if (ext === \"SAM\")\n{\n    return filename.split('.').slice(0,
#>           -1).concat(\"sorted.sam\").join('.').replace(/^.*[\\\\\\/]/, '')\n}\n\nelse
#>           \n{\n\treturn filename.split('.').slice(0, -1).concat(\"sorted.\"+filename.split('.').slice(-1)[0]).join(\".\").replace(/^.*[\\\\\\/]/,
#>           '')\n}\n}"
#>         class: Expression
#>     - position: 1000
#>       separate: yes
#>       valueFrom:
#>         engine: '#cwl-js-engine'
#>         script: "{\n  filename = $job.inputs.input_bam.path\n  \n  /* figuring out
#>           output file type */\n  ext = $job.inputs.output_type\n  if (ext === \"BAM\")\n
#>           \ {\n    out_extension = \"BAM\"\n  }\n  else if (ext === \"SAM\")\n  {\n
#>           \   out_extension = \"SAM\"\n  }\n  else \n  {\n\tout_extension = filename.split('.').slice(-1)[0].toUpperCase()\n
#>           \ }  \n  \n  /* if exist moving .bai in bam.bai */\n  if ($job.inputs.create_index
#>           === 'True' && $job.inputs.sort_order === 'Coordinate' && out_extension ==
#>           \"BAM\")\n  {\n    \n    old_name = filename.split('.').slice(0, -1).concat('sorted.bai').join('.').replace(/^.*[\\\\\\/]/,
#>           '')\n    new_name = filename.split('.').slice(0, -1).concat('sorted.bam.bai').join('.').replace(/^.*[\\\\\\/]/,
#>           '')\n    return \"; mv \" + \" \" + old_name + \" \" + new_name\n  }\n\n}"
#>         class: Expression
#>     stdin: ''
#>     stdout: ''
#>     successCodes: []
#>     temporaryFailCodes: []
#>     x: 773.0831807
#>     'y': 470.9165939
#>   sbg:x: 500.0
#>   sbg:y: 200.0
#> - id: '#STAR'
#>   inputs:
#>   - id: '#STAR.winFlankNbins'
#>   - id: '#STAR.winBinNbits'
#>   - id: '#STAR.winAnchorMultimapNmax'
#>     source: '#winAnchorMultimapNmax'
#>   - id: '#STAR.winAnchorDistNbins'
#>     source: '#winAnchorDistNbins'
#>   - id: '#STAR.twopassMode'
#>   - id: '#STAR.twopass1readsN'
#>   - id: '#STAR.sjdbScore'
#>   - id: '#STAR.sjdbOverhang'
#>     default: 100
#>   - id: '#STAR.sjdbInsertSave'
#>   - id: '#STAR.sjdbGTFtagExonParentTranscript'
#>   - id: '#STAR.sjdbGTFtagExonParentGene'
#>   - id: '#STAR.sjdbGTFfile'
#>     source: '#sjdbGTFfile'
#>   - id: '#STAR.sjdbGTFfeatureExon'
#>   - id: '#STAR.sjdbGTFchrPrefix'
#>   - id: '#STAR.seedSearchStartLmaxOverLread'
#>   - id: '#STAR.seedSearchStartLmax'
#>   - id: '#STAR.seedSearchLmax'
#>   - id: '#STAR.seedPerWindowNmax'
#>   - id: '#STAR.seedPerReadNmax'
#>   - id: '#STAR.seedNoneLociPerWindow'
#>   - id: '#STAR.seedMultimapNmax'
#>   - id: '#STAR.scoreStitchSJshift'
#>   - id: '#STAR.scoreInsOpen'
#>   - id: '#STAR.scoreInsBase'
#>   - id: '#STAR.scoreGenomicLengthLog2scale'
#>   - id: '#STAR.scoreGapNoncan'
#>   - id: '#STAR.scoreGapGCAG'
#>   - id: '#STAR.scoreGapATAC'
#>   - id: '#STAR.scoreGap'
#>   - id: '#STAR.scoreDelOpen'
#>   - id: '#STAR.scoreDelBase'
#>   - id: '#STAR.rg_seq_center'
#>   - id: '#STAR.rg_sample_id'
#>   - id: '#STAR.rg_platform_unit_id'
#>   - id: '#STAR.rg_platform'
#>   - id: '#STAR.rg_mfl'
#>   - id: '#STAR.rg_library_id'
#>   - id: '#STAR.reads'
#>     source: '#SBG_FASTQ_Quality_Detector.result'
#>   - id: '#STAR.readMatesLengthsIn'
#>   - id: '#STAR.readMapNumber'
#>   - id: '#STAR.quantTranscriptomeBan'
#>   - id: '#STAR.quantMode'
#>     default: TranscriptomeSAM
#>   - id: '#STAR.outSortingType'
#>     default: SortedByCoordinate
#>   - id: '#STAR.outSJfilterReads'
#>   - id: '#STAR.outSJfilterOverhangMin'
#>   - id: '#STAR.outSJfilterIntronMaxVsReadN'
#>   - id: '#STAR.outSJfilterDistToOtherSJmin'
#>   - id: '#STAR.outSJfilterCountUniqueMin'
#>   - id: '#STAR.outSJfilterCountTotalMin'
#>   - id: '#STAR.outSAMunmapped'
#>   - id: '#STAR.outSAMtype'
#>     default: BAM
#>   - id: '#STAR.outSAMstrandField'
#>   - id: '#STAR.outSAMreadID'
#>   - id: '#STAR.outSAMprimaryFlag'
#>   - id: '#STAR.outSAMorder'
#>   - id: '#STAR.outSAMmode'
#>   - id: '#STAR.outSAMmapqUnique'
#>   - id: '#STAR.outSAMheaderPG'
#>   - id: '#STAR.outSAMheaderHD'
#>   - id: '#STAR.outSAMflagOR'
#>   - id: '#STAR.outSAMflagAND'
#>   - id: '#STAR.outSAMattributes'
#>   - id: '#STAR.outReadsUnmapped'
#>     default: Fastx
#>   - id: '#STAR.outQSconversionAdd'
#>   - id: '#STAR.outFilterType'
#>   - id: '#STAR.outFilterScoreMinOverLread'
#>   - id: '#STAR.outFilterScoreMin'
#>   - id: '#STAR.outFilterMultimapScoreRange'
#>   - id: '#STAR.outFilterMultimapNmax'
#>   - id: '#STAR.outFilterMismatchNoverReadLmax'
#>   - id: '#STAR.outFilterMismatchNoverLmax'
#>   - id: '#STAR.outFilterMismatchNmax'
#>   - id: '#STAR.outFilterMatchNminOverLread'
#>   - id: '#STAR.outFilterMatchNmin'
#>   - id: '#STAR.outFilterIntronMotifs'
#>   - id: '#STAR.limitSjdbInsertNsj'
#>   - id: '#STAR.limitOutSJoneRead'
#>   - id: '#STAR.limitOutSJcollapsed'
#>   - id: '#STAR.limitBAMsortRAM'
#>   - id: '#STAR.genomeDirName'
#>   - id: '#STAR.genome'
#>     source: '#STAR_Genome_Generate.genome'
#>   - id: '#STAR.clip5pNbases'
#>   - id: '#STAR.clip3pNbases'
#>   - id: '#STAR.clip3pAfterAdapterNbases'
#>   - id: '#STAR.clip3pAdapterSeq'
#>   - id: '#STAR.clip3pAdapterMMp'
#>   - id: '#STAR.chimSegmentMin'
#>   - id: '#STAR.chimScoreSeparation'
#>   - id: '#STAR.chimScoreMin'
#>   - id: '#STAR.chimScoreJunctionNonGTAG'
#>   - id: '#STAR.chimScoreDropMax'
#>   - id: '#STAR.chimOutType'
#>   - id: '#STAR.chimJunctionOverhangMin'
#>   - id: '#STAR.alignWindowsPerReadNmax'
#>   - id: '#STAR.alignTranscriptsPerWindowNmax'
#>   - id: '#STAR.alignTranscriptsPerReadNmax'
#>   - id: '#STAR.alignSplicedMateMapLminOverLmate'
#>   - id: '#STAR.alignSplicedMateMapLmin'
#>   - id: '#STAR.alignSoftClipAtReferenceEnds'
#>   - id: '#STAR.alignSJoverhangMin'
#>   - id: '#STAR.alignSJDBoverhangMin'
#>   - id: '#STAR.alignMatesGapMax'
#>   - id: '#STAR.alignIntronMin'
#>   - id: '#STAR.alignIntronMax'
#>   - id: '#STAR.alignEndsType'
#>   outputs:
#>   - id: '#STAR.unmapped_reads'
#>   - id: '#STAR.transcriptome_aligned_reads'
#>   - id: '#STAR.splice_junctions'
#>   - id: '#STAR.reads_per_gene'
#>   - id: '#STAR.log_files'
#>   - id: '#STAR.intermediate_genome'
#>   - id: '#STAR.chimeric_junctions'
#>   - id: '#STAR.chimeric_alignments'
#>   - id: '#STAR.aligned_reads'
#>   hints: []
#>   run:
#>     sbg:validationErrors: []
#>     sbg:sbgMaintained: no
#>     sbg:latestRevision: 4
#>     sbg:job:
#>       allocatedResources:
#>         mem: 60000
#>         cpu: 15
#>       inputs:
#>         alignWindowsPerReadNmax: 0
#>         outSAMheaderPG: outSAMheaderPG
#>         GENOME_DIR_NAME: ''
#>         outFilterMatchNminOverLread: 0
#>         rg_platform_unit_id: rg_platform_unit
#>         alignTranscriptsPerReadNmax: 0
#>         readMapNumber: 0
#>         alignSplicedMateMapLminOverLmate: 0
#>         alignMatesGapMax: 0
#>         outFilterMultimapNmax: 0
#>         clip5pNbases:
#>         - 0
#>         outSAMstrandField: None
#>         readMatesLengthsIn: NotEqual
#>         outSAMattributes: Standard
#>         seedMultimapNmax: 0
#>         rg_mfl: rg_mfl
#>         chimSegmentMin: 0
#>         winAnchorDistNbins: 0
#>         outSortingType: SortedByCoordinate
#>         outFilterMultimapScoreRange: 0
#>         sjdbInsertSave: Basic
#>         clip3pAfterAdapterNbases:
#>         - 0
#>         scoreDelBase: 0
#>         outFilterMatchNmin: 0
#>         twopass1readsN: 0
#>         outSAMunmapped: None
#>         genome:
#>           size: 0
#>           secondaryFiles: []
#>           class: File
#>           path: genome.ext
#>         sjdbGTFtagExonParentTranscript: ''
#>         limitBAMsortRAM: 0
#>         alignEndsType: Local
#>         seedNoneLociPerWindow: 0
#>         rg_sample_id: rg_sample
#>         sjdbGTFtagExonParentGene: ''
#>         chimScoreMin: 0
#>         outSJfilterIntronMaxVsReadN:
#>         - 0
#>         twopassMode: Basic
#>         alignSplicedMateMapLmin: 0
#>         outSJfilterReads: All
#>         outSAMprimaryFlag: OneBestScore
#>         outSJfilterCountTotalMin:
#>         - 3
#>         - 1
#>         - 1
#>         - 1
#>         outSAMorder: Paired
#>         outSAMflagAND: 0
#>         chimScoreSeparation: 0
#>         alignSJoverhangMin: 0
#>         outFilterScoreMin: 0
#>         seedSearchStartLmax: 0
#>         scoreGapGCAG: 0
#>         scoreGenomicLengthLog2scale: 0
#>         outFilterIntronMotifs: None
#>         outFilterMismatchNmax: 0
#>         reads:
#>         - size: 0
#>           secondaryFiles: []
#>           class: File
#>           metadata:
#>             format: fastq
#>             paired_end: '1'
#>             seq_center: illumina
#>           path: /test-data/mate_1.fastq.bz2
#>         scoreGap: 0
#>         outSJfilterOverhangMin:
#>         - 30
#>         - 12
#>         - 12
#>         - 12
#>         outSAMflagOR: 0
#>         outSAMmode: Full
#>         rg_library_id: ''
#>         chimScoreJunctionNonGTAG: 0
#>         scoreInsOpen: 0
#>         clip3pAdapterSeq:
#>         - clip3pAdapterSeq
#>         chimScoreDropMax: 0
#>         outFilterType: Normal
#>         scoreGapATAC: 0
#>         rg_platform: Ion Torrent PGM
#>         clip3pAdapterMMp:
#>         - 0
#>         sjdbGTFfeatureExon: ''
#>         outQSconversionAdd: 0
#>         quantMode: TranscriptomeSAM
#>         alignIntronMin: 0
#>         scoreInsBase: 0
#>         scoreGapNoncan: 0
#>         seedSearchLmax: 0
#>         outSJfilterDistToOtherSJmin:
#>         - 0
#>         outFilterScoreMinOverLread: 0
#>         alignSJDBoverhangMin: 0
#>         limitOutSJcollapsed: 0
#>         winAnchorMultimapNmax: 0
#>         outFilterMismatchNoverLmax: 0
#>         rg_seq_center: ''
#>         outSAMheaderHD: outSAMheaderHD
#>         chimOutType: Within
#>         quantTranscriptomeBan: IndelSoftclipSingleend
#>         limitOutSJoneRead: 0
#>         alignTranscriptsPerWindowNmax: 0
#>         sjdbOverhang: ~
#>         outReadsUnmapped: Fastx
#>         scoreStitchSJshift: 0
#>         seedPerWindowNmax: 0
#>         outSJfilterCountUniqueMin:
#>         - 3
#>         - 1
#>         - 1
#>         - 1
#>         scoreDelOpen: 0
#>         sjdbGTFfile:
#>         - path: /demo/test-data/chr20.gtf
#>         clip3pNbases:
#>         - 0
#>         - 3
#>         winBinNbits: 0
#>         sjdbScore: ~
#>         seedSearchStartLmaxOverLread: 0
#>         alignIntronMax: 0
#>         seedPerReadNmax: 0
#>         outFilterMismatchNoverReadLmax: 0
#>         winFlankNbins: 0
#>         sjdbGTFchrPrefix: chrPrefix
#>         alignSoftClipAtReferenceEnds: 'Yes'
#>         outSAMreadID: Standard
#>         outSAMtype: BAM
#>         chimJunctionOverhangMin: 0
#>         limitSjdbInsertNsj: 0
#>         outSAMmapqUnique: 0
#>     sbg:toolAuthor: Alexander Dobin/CSHL
#>     sbg:createdOn: 1450911471
#>     sbg:categories:
#>     - Alignment
#>     sbg:contributors:
#>     - ana_d
#>     - bix-demo
#>     - uros_sipetic
#>     sbg:links:
#>     - id: https://github.com/alexdobin/STAR
#>       label: Homepage
#>     - id: https://github.com/alexdobin/STAR/releases
#>       label: Releases
#>     - id: https://github.com/alexdobin/STAR/blob/master/doc/STARmanual.pdf
#>       label: Manual
#>     - id: https://groups.google.com/forum/#!forum/rna-star
#>       label: Support
#>     - id: http://www.ncbi.nlm.nih.gov/pubmed/23104886
#>       label: Publication
#>     sbg:project: bix-demo/star-2-4-2a-demo
#>     sbg:createdBy: bix-demo
#>     sbg:toolkitVersion: 2.4.2a
#>     sbg:id: sevenbridges/public-apps/star/4
#>     sbg:license: GNU General Public License v3.0 only
#>     sbg:revision: 4
#>     sbg:cmdPreview: tar -xvf genome.ext && /opt/STAR --runThreadN 15  --readFilesCommand
#>       bzcat  --sjdbGTFfile /demo/test-data/chr20.gtf  --sjdbGTFchrPrefix chrPrefix
#>       --sjdbInsertSave Basic  --twopass1readsN 0  --chimOutType WithinBAM  --outSAMattrRGline
#>       ID:1 CN:illumina PI:rg_mfl PL:Ion_Torrent_PGM PU:rg_platform_unit SM:rg_sample  --quantMode
#>       TranscriptomeSAM --outFileNamePrefix ./mate_1.fastq.bz2.  --readFilesIn /test-data/mate_1.fastq.bz2  &&
#>       tar -vcf mate_1.fastq.bz2._STARgenome.tar ./mate_1.fastq.bz2._STARgenome  &&
#>       mv mate_1.fastq.bz2.Unmapped.out.mate1 mate_1.fastq.bz2.Unmapped.out.mate1.fastq
#>     sbg:modifiedOn: 1462889222
#>     sbg:modifiedBy: ana_d
#>     sbg:revisionsInfo:
#>     - sbg:modifiedBy: bix-demo
#>       sbg:modifiedOn: 1450911471
#>       sbg:revision: 0
#>     - sbg:modifiedBy: bix-demo
#>       sbg:modifiedOn: 1450911473
#>       sbg:revision: 1
#>     - sbg:modifiedBy: bix-demo
#>       sbg:modifiedOn: 1450911475
#>       sbg:revision: 2
#>     - sbg:modifiedBy: uros_sipetic
#>       sbg:modifiedOn: 1462878528
#>       sbg:revision: 3
#>     - sbg:modifiedBy: ana_d
#>       sbg:modifiedOn: 1462889222
#>       sbg:revision: 4
#>     sbg:toolkit: STAR
#>     id: sevenbridges/public-apps/star/4
#>     inputs:
#>     - type:
#>       - 'null'
#>       - int
#>       label: Flanking regions size
#>       description: =log2(winFlank), where win Flank is the size of the left and right
#>         flanking regions for each window (int>0).
#>       streamable: no
#>       id: '#winFlankNbins'
#>       inputBinding:
#>         position: 0
#>         prefix: --winFlankNbins
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Windows, Anchors, Binning
#>       sbg:includeInPorts: yes
#>       sbg:toolDefaultValue: '4'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Bin size
#>       description: =log2(winBin), where winBin is the size of the bin for the windows/clustering,
#>         each window will occupy an integer number of bins (int>0).
#>       streamable: no
#>       id: '#winBinNbits'
#>       inputBinding:
#>         position: 0
#>         prefix: --winBinNbits
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Windows, Anchors, Binning
#>       sbg:includeInPorts: yes
#>       sbg:toolDefaultValue: '16'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Max loci anchors
#>       description: Max number of loci anchors are allowed to map to (int>0).
#>       streamable: no
#>       id: '#winAnchorMultimapNmax'
#>       inputBinding:
#>         position: 0
#>         prefix: --winAnchorMultimapNmax
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Windows, Anchors, Binning
#>       sbg:toolDefaultValue: '50'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Max bins between anchors
#>       description: Max number of bins between two anchors that allows aggregation
#>         of anchors into one window (int>0).
#>       streamable: no
#>       id: '#winAnchorDistNbins'
#>       inputBinding:
#>         position: 0
#>         prefix: --winAnchorDistNbins
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Windows, Anchors, Binning
#>       sbg:toolDefaultValue: '9'
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: twopassMode
#>         symbols:
#>         - None
#>         - Basic
#>         type: enum
#>       label: Two-pass mode
#>       description: '2-pass mapping mode. None: 1-pass mapping; Basic: basic 2-pass
#>         mapping, with all 1st pass junctions inserted into the genome indices on the
#>         fly.'
#>       streamable: no
#>       id: '#twopassMode'
#>       inputBinding:
#>         position: 0
#>         prefix: --twopassMode
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: 2-pass mapping
#>       sbg:toolDefaultValue: None
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Reads to process in 1st step
#>       description: 'Number of reads to process for the 1st step. 0: 1-step only, no
#>         2nd pass; use very large number to map all reads in the first step (int>0).'
#>       streamable: no
#>       id: '#twopass1readsN'
#>       sbg:category: 2-pass mapping
#>       sbg:toolDefaultValue: '-1'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Extra alignment score
#>       description: Extra alignment score for alignments that cross database junctions.
#>       streamable: no
#>       id: '#sjdbScore'
#>       sbg:category: Splice junctions database
#>       sbg:toolDefaultValue: '2'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: '"Overhang" length'
#>       description: Length of the donor/acceptor sequence on each side of the junctions,
#>         ideally = (mate_length - 1) (int >= 0), if int = 0, splice junction database
#>         is not used.
#>       streamable: no
#>       id: '#sjdbOverhang'
#>       sbg:category: Splice junctions database
#>       sbg:toolDefaultValue: '100'
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: sjdbInsertSave
#>         symbols:
#>         - Basic
#>         - All
#>         - None
#>         type: enum
#>       label: Save junction files
#>       description: 'Which files to save when sjdb junctions are inserted on the fly
#>         at the mapping step. None: not saving files at all; Basic: only small junction/transcript
#>         files; All: all files including big Genome, SA and SAindex. These files are
#>         output as archive.'
#>       streamable: no
#>       id: '#sjdbInsertSave'
#>       sbg:category: Splice junctions database
#>       sbg:toolDefaultValue: None
#>       required: no
#>     - type:
#>       - 'null'
#>       - string
#>       label: Exons' parents name
#>       description: Tag name to be used as exons' transcript-parents.
#>       streamable: no
#>       id: '#sjdbGTFtagExonParentTranscript'
#>       sbg:category: Splice junctions database
#>       sbg:toolDefaultValue: transcript_id
#>       required: no
#>     - type:
#>       - 'null'
#>       - string
#>       label: Gene name
#>       description: Tag name to be used as exons' gene-parents.
#>       streamable: no
#>       id: '#sjdbGTFtagExonParentGene'
#>       sbg:category: Splice junctions database
#>       sbg:toolDefaultValue: gene_id
#>       required: no
#>     - type:
#>       - 'null'
#>       - items: File
#>         type: array
#>       label: Splice junction file
#>       description: Gene model annotations and/or known transcripts. No need to include
#>         this input, except in case of using "on the fly" annotations.
#>       streamable: no
#>       id: '#sjdbGTFfile'
#>       sbg:category: Basic
#>       sbg:fileTypes: GTF, GFF, TXT
#>       required: no
#>     - type:
#>       - 'null'
#>       - string
#>       label: Set exons feature
#>       description: Feature type in GTF file to be used as exons for building transcripts.
#>       streamable: no
#>       id: '#sjdbGTFfeatureExon'
#>       sbg:category: Splice junctions database
#>       sbg:toolDefaultValue: exon
#>       required: no
#>     - type:
#>       - 'null'
#>       - string
#>       label: Chromosome names
#>       description: Prefix for chromosome names in a GTF file (e.g. 'chr' for using
#>         ENSMEBL annotations with UCSC geneomes).
#>       streamable: no
#>       id: '#sjdbGTFchrPrefix'
#>       sbg:category: Splice junctions database
#>       sbg:toolDefaultValue: '-'
#>       required: no
#>     - type:
#>       - 'null'
#>       - float
#>       label: Search start point normalized
#>       description: seedSearchStartLmax normalized to read length (sum of mates' lengths
#>         for paired-end reads).
#>       streamable: no
#>       id: '#seedSearchStartLmaxOverLread'
#>       inputBinding:
#>         position: 0
#>         prefix: --seedSearchStartLmaxOverLread
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: '1.0'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Search start point
#>       description: Defines the search start point through the read - the read is split
#>         into pieces no longer than this value (int>0).
#>       streamable: no
#>       id: '#seedSearchStartLmax'
#>       inputBinding:
#>         position: 0
#>         prefix: --seedSearchStartLmax
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: '50'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Max seed length
#>       description: Defines the maximum length of the seeds, if =0 max seed length
#>         is infinite (int>=0).
#>       streamable: no
#>       id: '#seedSearchLmax'
#>       inputBinding:
#>         position: 0
#>         prefix: --seedSearchLmax
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: '0'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Max seeds per window
#>       description: Max number of seeds per window (int>=0).
#>       streamable: no
#>       id: '#seedPerWindowNmax'
#>       inputBinding:
#>         position: 0
#>         prefix: --seedPerWindowNmax
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: '50'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Max seeds per read
#>       description: Max number of seeds per read (int>=0).
#>       streamable: no
#>       id: '#seedPerReadNmax'
#>       inputBinding:
#>         position: 0
#>         prefix: --seedPerReadNmax
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: '1000'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Max one-seed loci per window
#>       description: Max number of one seed loci per window (int>=0).
#>       streamable: no
#>       id: '#seedNoneLociPerWindow'
#>       inputBinding:
#>         position: 0
#>         prefix: --seedNoneLociPerWindow
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: '10'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Filter pieces for stitching
#>       description: Only pieces that map fewer than this value are utilized in the
#>         stitching procedure (int>=0).
#>       streamable: no
#>       id: '#seedMultimapNmax'
#>       inputBinding:
#>         position: 0
#>         prefix: --seedMultimapNmax
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: '10000'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Max score reduction
#>       description: Maximum score reduction while searching for SJ boundaries in the
#>         stitching step.
#>       streamable: no
#>       id: '#scoreStitchSJshift'
#>       inputBinding:
#>         position: 0
#>         prefix: --scoreStitchSJshift
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Scoring
#>       sbg:toolDefaultValue: '1'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Insertion Open Penalty
#>       description: Insertion open penalty.
#>       streamable: no
#>       id: '#scoreInsOpen'
#>       inputBinding:
#>         position: 0
#>         prefix: --scoreInsOpen
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Scoring
#>       sbg:toolDefaultValue: '-2'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Insertion extension penalty
#>       description: Insertion extension penalty per base (in addition to --scoreInsOpen).
#>       streamable: no
#>       id: '#scoreInsBase'
#>       inputBinding:
#>         position: 0
#>         prefix: --scoreInsBase
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Scoring
#>       sbg:toolDefaultValue: '-2'
#>       required: no
#>     - type:
#>       - 'null'
#>       - float
#>       label: Log scaled score
#>       description: 'Extra score logarithmically scaled with genomic length of the
#>         alignment: <int>*log2(genomicLength).'
#>       streamable: no
#>       id: '#scoreGenomicLengthLog2scale'
#>       inputBinding:
#>         position: 0
#>         prefix: --scoreGenomicLengthLog2scale
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Scoring
#>       sbg:toolDefaultValue: '-0.25'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Non-canonical gap open
#>       description: Non-canonical gap open penalty (in addition to --scoreGap).
#>       streamable: no
#>       id: '#scoreGapNoncan'
#>       inputBinding:
#>         position: 0
#>         prefix: --scoreGapNoncan
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Scoring
#>       sbg:toolDefaultValue: '-8'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: GC/AG and CT/GC gap open
#>       description: GC/AG and CT/GC gap open penalty (in addition to --scoreGap).
#>       streamable: no
#>       id: '#scoreGapGCAG'
#>       inputBinding:
#>         position: 0
#>         prefix: --scoreGapGCAG
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Scoring
#>       sbg:toolDefaultValue: '-4'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: AT/AC and GT/AT gap open
#>       description: AT/AC and GT/AT gap open penalty (in addition to --scoreGap).
#>       streamable: no
#>       id: '#scoreGapATAC'
#>       inputBinding:
#>         position: 0
#>         prefix: --scoreGapATAC
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Scoring
#>       sbg:toolDefaultValue: '-8'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Gap open penalty
#>       description: Gap open penalty.
#>       streamable: no
#>       id: '#scoreGap'
#>       inputBinding:
#>         position: 0
#>         prefix: --scoreGap
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Scoring
#>       sbg:toolDefaultValue: '0'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Deletion open penalty
#>       description: Deletion open penalty.
#>       streamable: no
#>       id: '#scoreDelOpen'
#>       inputBinding:
#>         position: 0
#>         prefix: --scoreDelOpen
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Scoring
#>       sbg:toolDefaultValue: '-2'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Deletion extension penalty
#>       description: Deletion extension penalty per base (in addition to --scoreDelOpen).
#>       streamable: no
#>       id: '#scoreDelBase'
#>       inputBinding:
#>         position: 0
#>         prefix: --scoreDelBase
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Scoring
#>       sbg:toolDefaultValue: '-2'
#>       required: no
#>     - type:
#>       - 'null'
#>       - string
#>       label: Sequencing center
#>       description: Specify the sequencing center for RG line.
#>       streamable: no
#>       id: '#rg_seq_center'
#>       sbg:category: Read group
#>       sbg:toolDefaultValue: Inferred from metadata
#>       required: no
#>     - type:
#>       - 'null'
#>       - string
#>       label: Sample ID
#>       description: Specify the sample ID for RG line.
#>       streamable: no
#>       id: '#rg_sample_id'
#>       sbg:category: Read group
#>       sbg:toolDefaultValue: Inferred from metadata
#>       required: no
#>     - type:
#>       - 'null'
#>       - string
#>       label: Platform unit ID
#>       description: Specify the platform unit ID for RG line.
#>       streamable: no
#>       id: '#rg_platform_unit_id'
#>       sbg:category: Read group
#>       sbg:toolDefaultValue: Inferred from metadata
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: rg_platform
#>         symbols:
#>         - LS 454
#>         - Helicos
#>         - Illumina
#>         - ABI SOLiD
#>         - Ion Torrent PGM
#>         - PacBio
#>         type: enum
#>       label: Platform
#>       description: Specify the version of the technology that was used for sequencing
#>         or assaying.
#>       streamable: no
#>       id: '#rg_platform'
#>       sbg:category: Read group
#>       sbg:toolDefaultValue: Inferred from metadata
#>       required: no
#>     - type:
#>       - 'null'
#>       - string
#>       label: Median fragment length
#>       description: Specify the median fragment length for RG line.
#>       streamable: no
#>       id: '#rg_mfl'
#>       sbg:category: Read group
#>       sbg:toolDefaultValue: Inferred from metadata
#>       required: no
#>     - type:
#>       - 'null'
#>       - string
#>       label: Library ID
#>       description: Specify the library ID for RG line.
#>       streamable: no
#>       id: '#rg_library_id'
#>       sbg:category: Read group
#>       sbg:toolDefaultValue: Inferred from metadata
#>       required: no
#>     - type:
#>       - items: File
#>         type: array
#>       label: Read sequence
#>       description: Read sequence.
#>       streamable: no
#>       id: '#reads'
#>       inputBinding:
#>         position: 10
#>         separate: yes
#>         itemSeparator: ' '
#>         valueFrom:
#>           engine: '#cwl-js-engine'
#>           script: "{\t\n  var list = [].concat($job.inputs.reads)\n  \n  var resp
#>             = []\n  \n  if (list.length == 1){\n    resp.push(list[0].path)\n    \n
#>             \ }else if (list.length == 2){    \n    \n    left = \"\"\n    right =
#>             \"\"\n      \n    for (index = 0; index < list.length; ++index) {\n      \n
#>             \     if (list[index].metadata != null){\n        if (list[index].metadata.paired_end
#>             == 1){\n          left = list[index].path\n        }else if (list[index].metadata.paired_end
#>             == 2){\n          right = list[index].path\n        }\n      }\n    }\n
#>             \   \n    if (left != \"\" && right != \"\"){      \n      resp.push(left)\n
#>             \     resp.push(right)\n    }\n  }\n  else if (list.length > 2){\n    left
#>             = []\n    right = []\n      \n    for (index = 0; index < list.length;
#>             ++index) {\n      \n      if (list[index].metadata != null){\n        if
#>             (list[index].metadata.paired_end == 1){\n          left.push(list[index].path)\n
#>             \       }else if (list[index].metadata.paired_end == 2){\n          right.push(list[index].path)\n
#>             \       }\n      }\n    }\n    left_join = left.join()\n    right_join
#>             = right.join()\n    if (left != [] && right != []){      \n      resp.push(left_join)\n
#>             \     resp.push(right_join)\n    }\t\n  }\n  \n  if(resp.length > 0){
#>             \   \n    return \"--readFilesIn \".concat(resp.join(\" \"))\n  }\n}"
#>           class: Expression
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Basic
#>       sbg:fileTypes: FASTA, FASTQ, FA, FQ, FASTQ.GZ, FQ.GZ, FASTQ.BZ2, FQ.BZ2
#>       required: yes
#>     - type:
#>       - 'null'
#>       - name: readMatesLengthsIn
#>         symbols:
#>         - NotEqual
#>         - Equal
#>         type: enum
#>       label: Reads lengths
#>       description: Equal/Not equal - lengths of names, sequences, qualities for both
#>         mates are the same/not the same. "Not equal" is safe in all situations.
#>       streamable: no
#>       id: '#readMatesLengthsIn'
#>       inputBinding:
#>         position: 0
#>         prefix: --readMatesLengthsIn
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Read parameters
#>       sbg:toolDefaultValue: NotEqual
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Reads to map
#>       description: Number of reads to map from the beginning of the file.
#>       streamable: no
#>       id: '#readMapNumber'
#>       inputBinding:
#>         position: 0
#>         prefix: --readMapNumber
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Read parameters
#>       sbg:toolDefaultValue: '-1'
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: quantTranscriptomeBan
#>         symbols:
#>         - IndelSoftclipSingleend
#>         - Singleend
#>         type: enum
#>       label: Prohibit alignment type
#>       description: 'Prohibit various alignment type. IndelSoftclipSingleend: prohibit
#>         indels, soft clipping and single-end alignments - compatible with RSEM; Singleend:
#>         prohibit single-end alignments.'
#>       streamable: no
#>       id: '#quantTranscriptomeBan'
#>       inputBinding:
#>         position: 0
#>         prefix: --quantTranscriptomeBan
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Quantification of Annotations
#>       sbg:toolDefaultValue: IndelSoftclipSingleend
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: quantMode
#>         symbols:
#>         - TranscriptomeSAM
#>         - GeneCounts
#>         type: enum
#>       label: Quantification mode
#>       description: Types of quantification requested. 'TranscriptomeSAM' option outputs
#>         SAM/BAM alignments to transcriptome into a separate file. With 'GeneCounts'
#>         option, STAR will count number of reads per gene while mapping.
#>       streamable: no
#>       id: '#quantMode'
#>       sbg:category: Quantification of Annotations
#>       sbg:toolDefaultValue: '-'
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: outSortingType
#>         symbols:
#>         - Unsorted
#>         - SortedByCoordinate
#>         - Unsorted SortedByCoordinate
#>         type: enum
#>       label: Output sorting type
#>       description: Type of output sorting.
#>       streamable: no
#>       id: '#outSortingType'
#>       sbg:category: Output
#>       sbg:toolDefaultValue: SortedByCoordinate
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: outSJfilterReads
#>         symbols:
#>         - All
#>         - Unique
#>         type: enum
#>       label: Collapsed junctions reads
#>       description: 'Which reads to consider for collapsed splice junctions output.
#>         All: all reads, unique- and multi-mappers; Unique: uniquely mapping reads
#>         only.'
#>       streamable: no
#>       id: '#outSJfilterReads'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSJfilterReads
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: 'Output filtering: splice junctions'
#>       sbg:toolDefaultValue: All
#>       required: no
#>     - type:
#>       - 'null'
#>       - items: int
#>         type: array
#>       label: Min overhang SJ
#>       description: Minimum overhang length for splice junctions on both sides for
#>         each of the motifs. To set no output for desired motif, assign -1 to the corresponding
#>         field. Does not apply to annotated junctions.
#>       streamable: no
#>       id: '#outSJfilterOverhangMin'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSJfilterOverhangMin
#>         separate: yes
#>         itemSeparator: ' '
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: 'Output filtering: splice junctions'
#>       sbg:toolDefaultValue: 30 12 12 12
#>       required: no
#>     - type:
#>       - 'null'
#>       - items: int
#>         type: array
#>       label: Max gap allowed
#>       description: 'Maximum gap allowed for junctions supported by 1,2,3...N reads
#>         (int >= 0) i.e. by default junctions supported by 1 read can have gaps <=50000b,
#>         by 2 reads: <=100000b, by 3 reads: <=200000. By 4 or more reads: any gap <=alignIntronMax.
#>         Does not apply to annotated junctions.'
#>       streamable: no
#>       id: '#outSJfilterIntronMaxVsReadN'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSJfilterIntronMaxVsReadN
#>         separate: yes
#>         itemSeparator: ' '
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: 'Output filtering: splice junctions'
#>       sbg:toolDefaultValue: 50000 100000 200000
#>       required: no
#>     - type:
#>       - 'null'
#>       - items: int
#>         type: array
#>       label: Min distance to other donor/acceptor
#>       description: Minimum allowed distance to other junctions' donor/acceptor for
#>         each of the motifs (int >= 0). Does not apply to annotated junctions.
#>       streamable: no
#>       id: '#outSJfilterDistToOtherSJmin'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSJfilterDistToOtherSJmin
#>         separate: yes
#>         itemSeparator: ' '
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: 'Output filtering: splice junctions'
#>       sbg:toolDefaultValue: 10 0 5 10
#>       required: no
#>     - type:
#>       - 'null'
#>       - items: int
#>         type: array
#>       label: Min unique count
#>       description: Minimum uniquely mapping read count per junction for each of the
#>         motifs. To set no output for desired motif, assign -1 to the corresponding
#>         field. Junctions are output if one of --outSJfilterCountUniqueMin OR --outSJfilterCountTotalMin
#>         conditions are satisfied. Does not apply to annotated junctions.
#>       streamable: no
#>       id: '#outSJfilterCountUniqueMin'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSJfilterCountUniqueMin
#>         separate: yes
#>         itemSeparator: ' '
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: 'Output filtering: splice junctions'
#>       sbg:toolDefaultValue: 3 1 1 1
#>       required: no
#>     - type:
#>       - 'null'
#>       - items: int
#>         type: array
#>       label: Min total count
#>       description: Minimum total (multi-mapping+unique) read count per junction for
#>         each of the motifs. To set no output for desired motif, assign -1 to the corresponding
#>         field. Junctions are output if one of --outSJfilterCountUniqueMin OR --outSJfilterCountTotalMin
#>         conditions are satisfied. Does not apply to annotated junctions.
#>       streamable: no
#>       id: '#outSJfilterCountTotalMin'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSJfilterCountTotalMin
#>         separate: yes
#>         itemSeparator: ' '
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: 'Output filtering: splice junctions'
#>       sbg:toolDefaultValue: 3 1 1 1
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: outSAMunmapped
#>         symbols:
#>         - None
#>         - Within
#>         type: enum
#>       label: Write unmapped in SAM
#>       description: 'Output of unmapped reads in the SAM format. None: no output Within:
#>         output unmapped reads within the main SAM file (i.e. Aligned.out.sam).'
#>       streamable: no
#>       id: '#outSAMunmapped'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSAMunmapped
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output
#>       sbg:toolDefaultValue: None
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: outSAMtype
#>         symbols:
#>         - SAM
#>         - BAM
#>         type: enum
#>       label: Output format
#>       description: Format of output alignments.
#>       streamable: no
#>       id: '#outSAMtype'
#>       inputBinding:
#>         position: 0
#>         separate: yes
#>         valueFrom:
#>           engine: '#cwl-js-engine'
#>           script: |-
#>             {
#>               SAM_type = $job.inputs.outSAMtype
#>               SORT_type = $job.inputs.outSortingType
#>               if (SAM_type && SORT_type) {
#>                 return "--outSAMtype ".concat(SAM_type, " ", SORT_type)
#>               }
#>             }
#>           class: Expression
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output
#>       sbg:toolDefaultValue: SAM
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: outSAMstrandField
#>         symbols:
#>         - None
#>         - intronMotif
#>         type: enum
#>       label: Strand field flag
#>       description: 'Cufflinks-like strand field flag. None: not used; intronMotif:
#>         strand derived from the intron motif. Reads with inconsistent and/or non-canonical
#>         introns are filtered out.'
#>       streamable: no
#>       id: '#outSAMstrandField'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSAMstrandField
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output
#>       sbg:toolDefaultValue: None
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: outSAMreadID
#>         symbols:
#>         - Standard
#>         - Number
#>         type: enum
#>       label: Read ID
#>       description: 'Read ID record type. Standard: first word (until space) from the
#>         FASTx read ID line, removing /1,/2 from the end; Number: read number (index)
#>         in the FASTx file.'
#>       streamable: no
#>       id: '#outSAMreadID'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSAMreadID
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output
#>       sbg:toolDefaultValue: Standard
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: outSAMprimaryFlag
#>         symbols:
#>         - OneBestScore
#>         - AllBestScore
#>         type: enum
#>       label: Primary alignments
#>       description: 'Which alignments are considered primary - all others will be marked
#>         with 0x100 bit in the FLAG. OneBestScore: only one alignment with the best
#>         score is primary; AllBestScore: all alignments with the best score are primary.'
#>       streamable: no
#>       id: '#outSAMprimaryFlag'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSAMprimaryFlag
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output
#>       sbg:toolDefaultValue: OneBestScore
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: outSAMorder
#>         symbols:
#>         - Paired
#>         - PairedKeepInputOrder
#>         type: enum
#>       label: Sorting in SAM
#>       description: 'Type of sorting for the SAM output. Paired: one mate after the
#>         other for all paired alignments; PairedKeepInputOrder: one mate after the
#>         other for all paired alignments, the order is kept the same as in the input
#>         FASTQ files.'
#>       streamable: no
#>       id: '#outSAMorder'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSAMorder
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output
#>       sbg:toolDefaultValue: Paired
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: outSAMmode
#>         symbols:
#>         - Full
#>         - NoQS
#>         type: enum
#>       label: SAM mode
#>       description: 'Mode of SAM output. Full: full SAM output; NoQS: full SAM but
#>         without quality scores.'
#>       streamable: no
#>       id: '#outSAMmode'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSAMmode
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output
#>       sbg:toolDefaultValue: Full
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: MAPQ value
#>       description: MAPQ value for unique mappers (0 to 255).
#>       streamable: no
#>       id: '#outSAMmapqUnique'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSAMmapqUnique
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output
#>       sbg:toolDefaultValue: '255'
#>       required: no
#>     - type:
#>       - 'null'
#>       - string
#>       label: SAM header @PG
#>       description: Extra @PG (software) line of the SAM header (in addition to STAR).
#>       streamable: no
#>       id: '#outSAMheaderPG'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSAMheaderPG
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output
#>       sbg:toolDefaultValue: '-'
#>       required: no
#>     - type:
#>       - 'null'
#>       - string
#>       label: SAM header @HD
#>       description: '@HD (header) line of the SAM header.'
#>       streamable: no
#>       id: '#outSAMheaderHD'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSAMheaderHD
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output
#>       sbg:toolDefaultValue: '-'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: OR SAM flag
#>       description: Set specific bits of the SAM FLAG.
#>       streamable: no
#>       id: '#outSAMflagOR'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSAMflagOR
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output
#>       sbg:toolDefaultValue: '0'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: AND SAM flag
#>       description: Set specific bits of the SAM FLAG.
#>       streamable: no
#>       id: '#outSAMflagAND'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSAMflagAND
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output
#>       sbg:toolDefaultValue: '65535'
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: outSAMattributes
#>         symbols:
#>         - Standard
#>         - NH
#>         - All
#>         - None
#>         type: enum
#>       label: SAM attributes
#>       description: 'Desired SAM attributes, in the order desired for the output SAM.
#>         NH: any combination in any order; Standard: NH HI AS nM; All: NH HI AS nM
#>         NM MD jM jI; None: no attributes.'
#>       streamable: no
#>       id: '#outSAMattributes'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSAMattributes
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output
#>       sbg:toolDefaultValue: Standard
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: outReadsUnmapped
#>         symbols:
#>         - None
#>         - Fastx
#>         type: enum
#>       label: Output unmapped reads
#>       description: 'Output of unmapped reads (besides SAM). None: no output; Fastx:
#>         output in separate fasta/fastq files, Unmapped.out.mate1/2.'
#>       streamable: no
#>       id: '#outReadsUnmapped'
#>       inputBinding:
#>         position: 0
#>         prefix: --outReadsUnmapped
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output
#>       sbg:toolDefaultValue: None
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Quality conversion
#>       description: Add this number to the quality score (e.g. to convert from Illumina
#>         to Sanger, use -31).
#>       streamable: no
#>       id: '#outQSconversionAdd'
#>       inputBinding:
#>         position: 0
#>         prefix: --outQSconversionAdd
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output
#>       sbg:toolDefaultValue: '0'
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: outFilterType
#>         symbols:
#>         - Normal
#>         - BySJout
#>         type: enum
#>       label: Filtering type
#>       description: 'Type of filtering. Normal: standard filtering using only current
#>         alignment; BySJout: keep only those reads that contain junctions that passed
#>         filtering into SJ.out.tab.'
#>       streamable: no
#>       id: '#outFilterType'
#>       inputBinding:
#>         position: 0
#>         prefix: --outFilterType
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output filtering
#>       sbg:toolDefaultValue: Normal
#>       required: no
#>     - type:
#>       - 'null'
#>       - float
#>       label: Min score normalized
#>       description: '''Minimum score'' normalized to read length (sum of mates'' lengths
#>         for paired-end reads).'
#>       streamable: no
#>       id: '#outFilterScoreMinOverLread'
#>       inputBinding:
#>         position: 0
#>         prefix: --outFilterScoreMinOverLread
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output filtering
#>       sbg:toolDefaultValue: '0.66'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Min score
#>       description: Alignment will be output only if its score is higher than this
#>         value.
#>       streamable: no
#>       id: '#outFilterScoreMin'
#>       inputBinding:
#>         position: 0
#>         prefix: --outFilterScoreMin
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output filtering
#>       sbg:toolDefaultValue: '0'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Multimapping score range
#>       description: The score range below the maximum score for multimapping alignments.
#>       streamable: no
#>       id: '#outFilterMultimapScoreRange'
#>       inputBinding:
#>         position: 0
#>         prefix: --outFilterMultimapScoreRange
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output filtering
#>       sbg:toolDefaultValue: '1'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Max number of mappings
#>       description: Read alignments will be output only if the read maps fewer than
#>         this value, otherwise no alignments will be output.
#>       streamable: no
#>       id: '#outFilterMultimapNmax'
#>       inputBinding:
#>         position: 0
#>         prefix: --outFilterMultimapNmax
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output filtering
#>       sbg:toolDefaultValue: '10'
#>       required: no
#>     - type:
#>       - 'null'
#>       - float
#>       label: Mismatches to *read* length
#>       description: Alignment will be output only if its ratio of mismatches to *read*
#>         length is less than this value.
#>       streamable: no
#>       id: '#outFilterMismatchNoverReadLmax'
#>       inputBinding:
#>         position: 0
#>         prefix: --outFilterMismatchNoverReadLmax
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output filtering
#>       sbg:toolDefaultValue: '1'
#>       required: no
#>     - type:
#>       - 'null'
#>       - float
#>       label: Mismatches to *mapped* length
#>       description: Alignment will be output only if its ratio of mismatches to *mapped*
#>         length is less than this value.
#>       streamable: no
#>       id: '#outFilterMismatchNoverLmax'
#>       inputBinding:
#>         position: 0
#>         prefix: --outFilterMismatchNoverLmax
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output filtering
#>       sbg:toolDefaultValue: '0.3'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Max number of mismatches
#>       description: Alignment will be output only if it has fewer mismatches than this
#>         value.
#>       streamable: no
#>       id: '#outFilterMismatchNmax'
#>       inputBinding:
#>         position: 0
#>         prefix: --outFilterMismatchNmax
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output filtering
#>       sbg:toolDefaultValue: '10'
#>       required: no
#>     - type:
#>       - 'null'
#>       - float
#>       label: Min matched bases normalized
#>       description: '''Minimum matched bases'' normalized to read length (sum of mates
#>         lengths for paired-end reads).'
#>       streamable: no
#>       id: '#outFilterMatchNminOverLread'
#>       inputBinding:
#>         position: 0
#>         prefix: --outFilterMatchNminOverLread
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output filtering
#>       sbg:toolDefaultValue: '0.66'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Min matched bases
#>       description: Alignment will be output only if the number of matched bases is
#>         higher than this value.
#>       streamable: no
#>       id: '#outFilterMatchNmin'
#>       inputBinding:
#>         position: 0
#>         prefix: --outFilterMatchNmin
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output filtering
#>       sbg:toolDefaultValue: '0'
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: outFilterIntronMotifs
#>         symbols:
#>         - None
#>         - RemoveNoncanonical
#>         - RemoveNoncanonicalUnannotated
#>         type: enum
#>       label: Motifs filtering
#>       description: 'Filter alignment using their motifs. None: no filtering; RemoveNoncanonical:
#>         filter out alignments that contain non-canonical junctions; RemoveNoncanonicalUnannotated:
#>         filter out alignments that contain non-canonical unannotated junctions when
#>         using annotated splice junctions database. The annotated non-canonical junctions
#>         will be kept.'
#>       streamable: no
#>       id: '#outFilterIntronMotifs'
#>       inputBinding:
#>         position: 0
#>         prefix: --outFilterIntronMotifs
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output filtering
#>       sbg:toolDefaultValue: None
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Max insert junctions
#>       description: Maximum number of junction to be inserted to the genome on the
#>         fly at the mapping stage, including those from annotations and those detected
#>         in the 1st step of the 2-pass run.
#>       streamable: no
#>       id: '#limitSjdbInsertNsj'
#>       inputBinding:
#>         position: 0
#>         prefix: --limitSjdbInsertNsj
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Limits
#>       sbg:toolDefaultValue: '1000000'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Junctions max number
#>       description: Max number of junctions for one read (including all multi-mappers).
#>       streamable: no
#>       id: '#limitOutSJoneRead'
#>       inputBinding:
#>         position: 0
#>         prefix: --limitOutSJoneRead
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Limits
#>       sbg:toolDefaultValue: '1000'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Collapsed junctions max number
#>       description: Max number of collapsed junctions.
#>       streamable: no
#>       id: '#limitOutSJcollapsed'
#>       inputBinding:
#>         position: 0
#>         prefix: --limitOutSJcollapsed
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Limits
#>       sbg:toolDefaultValue: '1000000'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Limit BAM sorting memory
#>       description: Maximum available RAM for sorting BAM. If set to 0, it will be
#>         set to the genome index size.
#>       streamable: no
#>       id: '#limitBAMsortRAM'
#>       inputBinding:
#>         position: 0
#>         prefix: --limitBAMsortRAM
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Limits
#>       sbg:toolDefaultValue: '0'
#>       required: no
#>     - type:
#>       - 'null'
#>       - string
#>       label: Genome dir name
#>       description: Name of the directory which contains genome files (when genome.tar
#>         is uncompressed).
#>       streamable: no
#>       id: '#genomeDirName'
#>       inputBinding:
#>         position: 0
#>         prefix: --genomeDir
#>         separate: yes
#>         valueFrom:
#>           engine: '#cwl-js-engine'
#>           script: $job.inputs.genomeDirName || "genomeDir"
#>           class: Expression
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Basic
#>       sbg:toolDefaultValue: genomeDir
#>       required: no
#>     - type:
#>       - File
#>       label: Genome files
#>       description: Genome files created using STAR Genome Generate.
#>       streamable: no
#>       id: '#genome'
#>       sbg:category: Basic
#>       sbg:fileTypes: TAR
#>       required: yes
#>     - type:
#>       - 'null'
#>       - items: int
#>         type: array
#>       label: Clip 5p bases
#>       description: Number of bases to clip from 5p of each mate. In case only one
#>         value is given, it will be assumed the same for both mates.
#>       streamable: no
#>       id: '#clip5pNbases'
#>       inputBinding:
#>         position: 0
#>         prefix: --clip5pNbases
#>         separate: yes
#>         itemSeparator: ' '
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Read parameters
#>       sbg:toolDefaultValue: '0'
#>       required: no
#>     - type:
#>       - 'null'
#>       - items: int
#>         type: array
#>       label: Clip 3p bases
#>       description: Number of bases to clip from 3p of each mate. In case only one
#>         value is given, it will be assumed the same for both mates.
#>       streamable: no
#>       id: '#clip3pNbases'
#>       inputBinding:
#>         position: 0
#>         prefix: --clip3pNbases
#>         separate: yes
#>         itemSeparator: ' '
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Read parameters
#>       sbg:toolDefaultValue: '0'
#>       required: no
#>     - type:
#>       - 'null'
#>       - items: int
#>         type: array
#>       label: Clip 3p after adapter seq.
#>       description: Number of bases to clip from 3p of each mate after the adapter
#>         clipping. In case only one value is given, it will be assumed the same for
#>         both mates.
#>       streamable: no
#>       id: '#clip3pAfterAdapterNbases'
#>       inputBinding:
#>         position: 0
#>         prefix: --clip3pAfterAdapterNbases
#>         separate: yes
#>         itemSeparator: ' '
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Read parameters
#>       sbg:toolDefaultValue: '0'
#>       required: no
#>     - type:
#>       - 'null'
#>       - items: string
#>         type: array
#>       label: Clip 3p adapter sequence
#>       description: Adapter sequence to clip from 3p of each mate. In case only one
#>         value is given, it will be assumed the same for both mates.
#>       streamable: no
#>       id: '#clip3pAdapterSeq'
#>       inputBinding:
#>         position: 0
#>         prefix: --clip3pAdapterSeq
#>         separate: yes
#>         itemSeparator: ' '
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Read parameters
#>       sbg:toolDefaultValue: '-'
#>       required: no
#>     - type:
#>       - 'null'
#>       - items: float
#>         type: array
#>       label: Max mismatches proportions
#>       description: Max proportion of mismatches for 3p adapter clipping for each mate.
#>         In case only one value is given, it will be assumed the same for both mates.
#>       streamable: no
#>       id: '#clip3pAdapterMMp'
#>       inputBinding:
#>         position: 0
#>         prefix: --clip3pAdapterMMp
#>         separate: yes
#>         itemSeparator: ' '
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Read parameters
#>       sbg:toolDefaultValue: '0.1'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Min segment length
#>       description: Minimum length of chimeric segment length, if =0, no chimeric output
#>         (int>=0).
#>       streamable: no
#>       id: '#chimSegmentMin'
#>       inputBinding:
#>         position: 0
#>         prefix: --chimSegmentMin
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Chimeric Alignments
#>       sbg:toolDefaultValue: '15'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Min separation score
#>       description: Minimum difference (separation) between the best chimeric score
#>         and the next one (int>=0).
#>       streamable: no
#>       id: '#chimScoreSeparation'
#>       inputBinding:
#>         position: 0
#>         prefix: --chimScoreSeparation
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Chimeric Alignments
#>       sbg:toolDefaultValue: '10'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Min total score
#>       description: Minimum total (summed) score of the chimeric segments (int>=0).
#>       streamable: no
#>       id: '#chimScoreMin'
#>       inputBinding:
#>         position: 0
#>         prefix: --chimScoreMin
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Chimeric Alignments
#>       sbg:toolDefaultValue: '0'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Non-GT/AG penalty
#>       description: Penalty for a non-GT/AG chimeric junction.
#>       streamable: no
#>       id: '#chimScoreJunctionNonGTAG'
#>       inputBinding:
#>         position: 0
#>         prefix: --chimScoreJunctionNonGTAG
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Chimeric Alignments
#>       sbg:toolDefaultValue: '-1'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Max drop score
#>       description: Max drop (difference) of chimeric score (the sum of scores of all
#>         chimeric segements) from the read length (int>=0).
#>       streamable: no
#>       id: '#chimScoreDropMax'
#>       inputBinding:
#>         position: 0
#>         prefix: --chimScoreDropMax
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Chimeric Alignments
#>       sbg:toolDefaultValue: '20'
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: chimOutType
#>         symbols:
#>         - SeparateSAMold
#>         - Within
#>         type: enum
#>       label: Chimeric output type
#>       description: 'Type of chimeric output. SeparateSAMold: output old SAM into separate
#>         Chimeric.out.sam file; Within: output into main aligned SAM/BAM files.'
#>       streamable: no
#>       id: '#chimOutType'
#>       sbg:category: Chimeric Alignments
#>       sbg:toolDefaultValue: SeparateSAMold
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Min junction overhang
#>       description: Minimum overhang for a chimeric junction (int>=0).
#>       streamable: no
#>       id: '#chimJunctionOverhangMin'
#>       inputBinding:
#>         position: 0
#>         prefix: --chimJunctionOverhangMin
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Chimeric Alignments
#>       sbg:toolDefaultValue: '20'
#>       required: no
#>     - type:
#>       - 'null'
#>       - float
#>       label: Max windows per read
#>       description: Max number of windows per read (int>0).
#>       streamable: no
#>       id: '#alignWindowsPerReadNmax'
#>       inputBinding:
#>         position: 0
#>         prefix: --alignWindowsPerReadNmax
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: '10000'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Max transcripts per window
#>       description: Max number of transcripts per window (int>0).
#>       streamable: no
#>       id: '#alignTranscriptsPerWindowNmax'
#>       inputBinding:
#>         position: 0
#>         prefix: --alignTranscriptsPerWindowNmax
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: '100'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Max transcripts per read
#>       description: Max number of different alignments per read to consider (int>0).
#>       streamable: no
#>       id: '#alignTranscriptsPerReadNmax'
#>       inputBinding:
#>         position: 0
#>         prefix: --alignTranscriptsPerReadNmax
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: '10000'
#>       required: no
#>     - type:
#>       - 'null'
#>       - float
#>       label: Min mapped length normalized
#>       description: alignSplicedMateMapLmin normalized to mate length (float>0).
#>       streamable: no
#>       id: '#alignSplicedMateMapLminOverLmate'
#>       inputBinding:
#>         position: 0
#>         prefix: --alignSplicedMateMapLminOverLmate
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: '0.66'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Min mapped length
#>       description: Minimum mapped length for a read mate that is spliced (int>0).
#>       streamable: no
#>       id: '#alignSplicedMateMapLmin'
#>       inputBinding:
#>         position: 0
#>         prefix: --alignSplicedMateMapLmin
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: '0'
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: alignSoftClipAtReferenceEnds
#>         symbols:
#>         - 'Yes'
#>         - 'No'
#>         type: enum
#>       label: Soft clipping
#>       description: 'Option which allows soft clipping of alignments at the reference
#>         (chromosome) ends. Can be disabled for compatibility with Cufflinks/Cuffmerge.
#>         Yes: Enables soft clipping; No: Disables soft clipping.'
#>       streamable: no
#>       id: '#alignSoftClipAtReferenceEnds'
#>       inputBinding:
#>         position: 0
#>         prefix: --alignSoftClipAtReferenceEnds
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: 'Yes'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Min overhang
#>       description: Minimum overhang (i.e. block size) for spliced alignments (int>0).
#>       streamable: no
#>       id: '#alignSJoverhangMin'
#>       inputBinding:
#>         position: 0
#>         prefix: --alignSJoverhangMin
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: '5'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: 'Min overhang: annotated'
#>       description: Minimum overhang (i.e. block size) for annotated (sjdb) spliced
#>         alignments (int>0).
#>       streamable: no
#>       id: '#alignSJDBoverhangMin'
#>       inputBinding:
#>         position: 0
#>         prefix: --alignSJDBoverhangMin
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: '3'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Max mates gap
#>       description: Maximum gap between two mates, if 0, max intron gap will be determined
#>         by (2^winBinNbits)*winAnchorDistNbins.
#>       streamable: no
#>       id: '#alignMatesGapMax'
#>       inputBinding:
#>         position: 0
#>         prefix: --alignMatesGapMax
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: '0'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Min intron size
#>       description: 'Minimum intron size: genomic gap is considered intron if its length
#>         >= alignIntronMin, otherwise it is considered Deletion (int>=0).'
#>       streamable: no
#>       id: '#alignIntronMin'
#>       inputBinding:
#>         position: 0
#>         prefix: --alignIntronMin
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: '21'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Max intron size
#>       description: Maximum intron size, if 0, max intron size will be determined by
#>         (2^winBinNbits)*winAnchorDistNbins.
#>       streamable: no
#>       id: '#alignIntronMax'
#>       inputBinding:
#>         position: 0
#>         prefix: --alignIntronMax
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: '0'
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: alignEndsType
#>         symbols:
#>         - Local
#>         - EndToEnd
#>         type: enum
#>       label: Alignment type
#>       description: 'Type of read ends alignment. Local: standard local alignment with
#>         soft-clipping allowed. EndToEnd: force end to end read alignment, do not soft-clip.'
#>       streamable: no
#>       id: '#alignEndsType'
#>       inputBinding:
#>         position: 0
#>         prefix: --alignEndsType
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: Local
#>       required: no
#>     outputs:
#>     - type:
#>       - 'null'
#>       - items: File
#>         type: array
#>       label: Unmapped reads
#>       description: Output of unmapped reads.
#>       streamable: no
#>       id: '#unmapped_reads'
#>       outputBinding:
#>         glob: '*Unmapped.out*'
#>       sbg:fileTypes: FASTQ
#>     - type:
#>       - 'null'
#>       - File
#>       label: Transcriptome alignments
#>       description: Alignments translated into transcript coordinates.
#>       streamable: no
#>       id: '#transcriptome_aligned_reads'
#>       outputBinding:
#>         glob: '*Transcriptome*'
#>       sbg:fileTypes: BAM
#>     - type:
#>       - 'null'
#>       - File
#>       label: Splice junctions
#>       description: High confidence collapsed splice junctions in tab-delimited format.
#>         Only junctions supported by uniquely mapping reads are reported.
#>       streamable: no
#>       id: '#splice_junctions'
#>       outputBinding:
#>         glob: '*SJ.out.tab'
#>       sbg:fileTypes: TAB
#>     - type:
#>       - 'null'
#>       - File
#>       label: Reads per gene
#>       description: File with number of reads per gene. A read is counted if it overlaps
#>         (1nt or more) one and only one gene.
#>       streamable: no
#>       id: '#reads_per_gene'
#>       outputBinding:
#>         glob: '*ReadsPerGene*'
#>       sbg:fileTypes: TAB
#>     - type:
#>       - 'null'
#>       - items: File
#>         type: array
#>       label: Log files
#>       description: Log files produced during alignment.
#>       streamable: no
#>       id: '#log_files'
#>       outputBinding:
#>         glob: '*Log*.out'
#>       sbg:fileTypes: OUT
#>     - type:
#>       - 'null'
#>       - File
#>       label: Intermediate genome files
#>       description: Archive with genome files produced when annotations are included
#>         on the fly (in the mapping step).
#>       streamable: no
#>       id: '#intermediate_genome'
#>       outputBinding:
#>         glob: '*_STARgenome.tar'
#>       sbg:fileTypes: TAR
#>     - type:
#>       - 'null'
#>       - File
#>       label: Chimeric junctions
#>       description: If chimSegmentMin in 'Chimeric Alignments' section is set to 0,
#>         'Chimeric Junctions' won't be output.
#>       streamable: no
#>       id: '#chimeric_junctions'
#>       outputBinding:
#>         glob: '*Chimeric.out.junction'
#>       sbg:fileTypes: JUNCTION
#>     - type:
#>       - 'null'
#>       - File
#>       label: Chimeric alignments
#>       description: Aligned Chimeric sequences SAM - if chimSegmentMin = 0, no Chimeric
#>         Alignment SAM and Chimeric Junctions outputs.
#>       streamable: no
#>       id: '#chimeric_alignments'
#>       outputBinding:
#>         glob: '*.Chimeric.out.sam'
#>       sbg:fileTypes: SAM
#>     - type:
#>       - 'null'
#>       - File
#>       label: Aligned SAM/BAM
#>       description: Aligned sequence in SAM/BAM format.
#>       streamable: no
#>       id: '#aligned_reads'
#>       outputBinding:
#>         glob:
#>           engine: '#cwl-js-engine'
#>           script: |-
#>             {
#>               if ($job.inputs.outSortingType == 'SortedByCoordinate') {
#>                 sort_name = '.sortedByCoord'
#>               }
#>               else {
#>                 sort_name = ''
#>               }
#>               if ($job.inputs.outSAMtype == 'BAM') {
#>                 sam_name = "*.Aligned".concat( sort_name, '.out.bam')
#>               }
#>               else {
#>                 sam_name = "*.Aligned.out.sam"
#>               }
#>               return sam_name
#>             }
#>           class: Expression
#>       sbg:fileTypes: SAM, BAM
#>     requirements:
#>     - class: ExpressionEngineRequirement
#>       id: '#cwl-js-engine'
#>       requirements:
#>       - class: DockerRequirement
#>         dockerPull: rabix/js-engine
#>     hints:
#>     - class: DockerRequirement
#>       dockerPull: images.sbgenomics.com/ana_d/star:2.4.2a
#>       dockerImageId: a4b0ad2c3cae
#>     - class: sbg:MemRequirement
#>       value: 60000
#>     - class: sbg:CPURequirement
#>       value: 15
#>     label: STAR
#>     description: STAR is an ultrafast universal RNA-seq aligner. It has very high
#>       mapping speed, accurate alignment of contiguous and spliced reads, detection
#>       of polyA-tails, non-canonical splices and chimeric (fusion) junctions. It works
#>       with reads starting from lengths ~15 bases up to ~300 bases. In case of having
#>       longer reads, use of STAR Long is recommended.
#>     class: CommandLineTool
#>     baseCommand:
#>     - tar
#>     - -xvf
#>     - class: Expression
#>       script: $job.inputs.genome.path
#>       engine: '#cwl-js-engine'
#>     - '&&'
#>     - /opt/STAR
#>     - --runThreadN
#>     - class: Expression
#>       script: |-
#>         {
#>           return $job.allocatedResources.cpu
#>         }
#>       engine: '#cwl-js-engine'
#>     arguments:
#>     - position: 0
#>       separate: yes
#>       valueFrom:
#>         engine: '#cwl-js-engine'
#>         script: |-
#>           {
#>             file = [].concat($job.inputs.reads)[0].path
#>             extension = /(?:\.([^.]+))?$/.exec(file)[1]
#>             if (extension == "gz") {
#>               return "--readFilesCommand zcat"
#>             } else if (extension == "bz2") {
#>               return "--readFilesCommand bzcat"
#>             }
#>           }
#>         class: Expression
#>     - position: 0
#>       separate: yes
#>       valueFrom:
#>         engine: '#cwl-js-engine'
#>         script: "{\t\n  var sjFormat = \"False\"\n  var gtfgffFormat = \"False\"\n
#>           \ var list = $job.inputs.sjdbGTFfile\n  var paths_list = []\n  var joined_paths
#>           = \"\"\n  \n  if (list) {\n    list.forEach(function(f){return paths_list.push(f.path)})\n
#>           \   joined_paths = paths_list.join(\" \")\n\n\n    paths_list.forEach(function(f){\n
#>           \     ext = f.replace(/^.*\\./, '')\n      if (ext == \"gff\" || ext ==
#>           \"gtf\") {\n        gtfgffFormat = \"True\"\n        return gtfgffFormat\n
#>           \     }\n      if (ext == \"txt\") {\n        sjFormat = \"True\"\n        return
#>           sjFormat\n      }\n    })\n\n    if ($job.inputs.sjdbGTFfile && $job.inputs.sjdbInsertSave
#>           != \"None\") {\n      if (sjFormat == \"True\") {\n        return \"--sjdbFileChrStartEnd
#>           \".concat(joined_paths)\n      }\n      else if (gtfgffFormat == \"True\")
#>           {\n        return \"--sjdbGTFfile \".concat(joined_paths)\n      }\n    }\n
#>           \ }\n}"
#>         class: Expression
#>     - position: 0
#>       separate: yes
#>       valueFrom:
#>         engine: '#cwl-js-engine'
#>         script: "{\n  a = b = c = d = e = f = g = []\n  if ($job.inputs.sjdbGTFchrPrefix)
#>           {\n    a = [\"--sjdbGTFchrPrefix\", $job.inputs.sjdbGTFchrPrefix]\n  }\n
#>           \ if ($job.inputs.sjdbGTFfeatureExon) {\n    b = [\"--sjdbGTFfeatureExon\",
#>           $job.inputs.sjdbGTFfeatureExon]\n  }\n  if ($job.inputs.sjdbGTFtagExonParentTranscript)
#>           {\n    c = [\"--sjdbGTFtagExonParentTranscript\", $job.inputs.sjdbGTFtagExonParentTranscript]\n
#>           \ }\n  if ($job.inputs.sjdbGTFtagExonParentGene) {\n    d = [\"--sjdbGTFtagExonParentGene\",
#>           $job.inputs.sjdbGTFtagExonParentGene]\n  }\n  if ($job.inputs.sjdbOverhang)
#>           {\n    e = [\"--sjdbOverhang\", $job.inputs.sjdbOverhang]\n  }\n  if ($job.inputs.sjdbScore)
#>           {\n    f = [\"--sjdbScore\", $job.inputs.sjdbScore]\n  }\n  if ($job.inputs.sjdbInsertSave)
#>           {\n    g = [\"--sjdbInsertSave\", $job.inputs.sjdbInsertSave]\n  }\n  \n
#>           \ \n  \n  if ($job.inputs.sjdbInsertSave != \"None\" && $job.inputs.sjdbGTFfile)
#>           {\n    new_list = a.concat(b, c, d, e, f, g)\n    return new_list.join(\"
#>           \")\n  }\n}"
#>         class: Expression
#>     - position: 0
#>       separate: yes
#>       valueFrom:
#>         engine: '#cwl-js-engine'
#>         script: |-
#>           {
#>             if ($job.inputs.twopassMode == "Basic") {
#>               return "--twopass1readsN ".concat($job.inputs.twopass1readsN)
#>             }
#>           }
#>         class: Expression
#>     - position: 0
#>       separate: yes
#>       valueFrom:
#>         engine: '#cwl-js-engine'
#>         script: |-
#>           {
#>             if ($job.inputs.chimOutType == "Within") {
#>               return "--chimOutType ".concat("Within", $job.inputs.outSAMtype)
#>             }
#>             else {
#>               return "--chimOutType SeparateSAMold"
#>             }
#>           }
#>         class: Expression
#>     - position: 0
#>       separate: yes
#>       valueFrom:
#>         engine: '#cwl-js-engine'
#>         script: "{\n  var param_list = []\n  \n  function add_param(key, value){\n
#>           \   if (value == \"\") {\n      return\n    }\n    else {\n      return
#>           param_list.push(key.concat(\":\", value))\n    }\n  }\n  \n  add_param('ID',
#>           \"1\")\n  if ($job.inputs.rg_seq_center) {\n    add_param('CN', $job.inputs.rg_seq_center)\n
#>           \ } else if ([].concat($job.inputs.reads)[0].metadata.seq_center) {\n    add_param('CN',
#>           [].concat($job.inputs.reads)[0].metadata.seq_center)\n  }\n  if ($job.inputs.rg_library_id)
#>           {\n    add_param('LB', $job.inputs.rg_library_id)\n  } else if ([].concat($job.inputs.reads)[0].metadata.library_id)
#>           {\n    add_param('LB', [].concat($job.inputs.reads)[0].metadata.library_id)\n
#>           \ }\n  if ($job.inputs.rg_mfl) {\n    add_param('PI', $job.inputs.rg_mfl)\n
#>           \ } else if ([].concat($job.inputs.reads)[0].metadata.median_fragment_length)
#>           {\n    add_param('PI', [].concat($job.inputs.reads)[0].metadata.median_fragment_length)\n
#>           \ }\n  if ($job.inputs.rg_platform) {\n    add_param('PL', $job.inputs.rg_platform.replace(/
#>           /g,\"_\"))\n  } else if ([].concat($job.inputs.reads)[0].metadata.platform)
#>           {\n    add_param('PL', [].concat($job.inputs.reads)[0].metadata.platform.replace(/
#>           /g,\"_\"))\n  }\n  if ($job.inputs.rg_platform_unit_id) {\n    add_param('PU',
#>           $job.inputs.rg_platform_unit_id)\n  } else if ([].concat($job.inputs.reads)[0].metadata.platform_unit_id)
#>           {\n    add_param('PU', [].concat($job.inputs.reads)[0].metadata.platform_unit_id)\n
#>           \ }\n  if ($job.inputs.rg_sample_id) {\n    add_param('SM', $job.inputs.rg_sample_id)\n
#>           \ } else if ([].concat($job.inputs.reads)[0].metadata.sample_id) {\n    add_param('SM',
#>           [].concat($job.inputs.reads)[0].metadata.sample_id)\n  }\n  return \"--outSAMattrRGline
#>           \".concat(param_list.join(\" \"))\n}"
#>         class: Expression
#>     - position: 0
#>       separate: yes
#>       valueFrom:
#>         engine: '#cwl-js-engine'
#>         script: |-
#>           {
#>             if ($job.inputs.sjdbGTFfile && $job.inputs.quantMode) {
#>               return "--quantMode ".concat($job.inputs.quantMode)
#>             }
#>           }
#>         class: Expression
#>     - position: 100
#>       separate: yes
#>       valueFrom:
#>         engine: '#cwl-js-engine'
#>         script: "{\n  function sharedStart(array){\n  var A= array.concat().sort(),
#>           \n      a1= A[0], a2= A[A.length-1], L= a1.length, i= 0;\n  while(i<L &&
#>           a1.charAt(i)=== a2.charAt(i)) i++;\n  return a1.substring(0, i);\n  }\n
#>           \ path_list = []\n  arr = [].concat($job.inputs.reads)\n  arr.forEach(function(f){return
#>           path_list.push(f.path.replace(/\\\\/g,'/').replace( /.*\\//, '' ))})\n  common_prefix
#>           = sharedStart(path_list)\n  intermediate = common_prefix.replace( /\\-$|\\_$|\\.$/,
#>           '' ).concat(\"._STARgenome\")\n  source = \"./\".concat(intermediate)\n
#>           \ destination = intermediate.concat(\".tar\")\n  if ($job.inputs.sjdbGTFfile
#>           && $job.inputs.sjdbInsertSave && $job.inputs.sjdbInsertSave != \"None\")
#>           {\n    return \"&& tar -vcf \".concat(destination, \" \", source)\n  }\n}"
#>         class: Expression
#>     - position: 0
#>       prefix: --outFileNamePrefix
#>       separate: yes
#>       valueFrom:
#>         engine: '#cwl-js-engine'
#>         script: "{\n  function sharedStart(array){\n  var A= array.concat().sort(),
#>           \n      a1= A[0], a2= A[A.length-1], L= a1.length, i= 0;\n  while(i<L &&
#>           a1.charAt(i)=== a2.charAt(i)) i++;\n  return a1.substring(0, i);\n  }\n
#>           \ path_list = []\n  arr = [].concat($job.inputs.reads)\n  arr.forEach(function(f){return
#>           path_list.push(f.path.replace(/\\\\/g,'/').replace( /.*\\//, '' ))})\n  common_prefix
#>           = sharedStart(path_list)\n  return \"./\".concat(common_prefix.replace(
#>           /\\-$|\\_$|\\.$/, '' ), \".\")\n}"
#>         class: Expression
#>     - position: 101
#>       separate: yes
#>       valueFrom:
#>         engine: '#cwl-js-engine'
#>         script: "{\n  function sharedStart(array){\n  var A= array.concat().sort(),
#>           \n      a1= A[0], a2= A[A.length-1], L= a1.length, i= 0;\n  while(i<L &&
#>           a1.charAt(i)=== a2.charAt(i)) i++;\n  return a1.substring(0, i);\n  }\n
#>           \ path_list = []\n  arr = [].concat($job.inputs.reads)\n  arr.forEach(function(f){return
#>           path_list.push(f.path.replace(/\\\\/g,'/').replace( /.*\\//, '' ))})\n  common_prefix
#>           = sharedStart(path_list)\n  mate1 = common_prefix.replace( /\\-$|\\_$|\\.$/,
#>           '' ).concat(\".Unmapped.out.mate1\")\n  mate2 = common_prefix.replace( /\\-$|\\_$|\\.$/,
#>           '' ).concat(\".Unmapped.out.mate2\")\n  mate1fq = mate1.concat(\".fastq\")\n
#>           \ mate2fq = mate2.concat(\".fastq\")\n  if ($job.inputs.outReadsUnmapped
#>           == \"Fastx\" && arr.length > 1) {\n    return \"&& mv \".concat(mate1, \"
#>           \", mate1fq, \" && mv \", mate2, \" \", mate2fq)\n  }\n  else if ($job.inputs.outReadsUnmapped
#>           == \"Fastx\" && arr.length == 1) {\n    return \"&& mv \".concat(mate1,
#>           \" \", mate1fq)\n  }\n}"
#>         class: Expression
#>     stdin: ''
#>     stdout: ''
#>     successCodes: []
#>     temporaryFailCodes: []
#>     x: 624.0
#>     'y': 323
#>   sbg:x: 700.0
#>   sbg:y: 200.0
#> sbg:canvas_zoom: 0.6
#> sbg:canvas_y: -16
#> sbg:canvas_x: -41
#> 
f1$set_flow_output(c("#log_files", "intermediate_genome"))
#> sbg:validationErrors: []
#> sbg:sbgMaintained: no
#> sbg:latestRevision: 2
#> sbg:toolAuthor: Seven Bridges Genomics
#> sbg:createdOn: 1463601910
#> sbg:categories:
#> - Alignment
#> - RNA
#> sbg:contributors:
#> - tengfei
#> sbg:project: tengfei/quickstart
#> sbg:createdBy: tengfei
#> sbg:toolkitVersion: 2.4.2a
#> sbg:id: tengfei/quickstart/rna-seq-alignment-star-demo/2
#> sbg:license: Apache License 2.0
#> sbg:revision: 2
#> sbg:modifiedOn: 1463601974
#> sbg:modifiedBy: tengfei
#> sbg:revisionsInfo:
#> - sbg:modifiedBy: tengfei
#>   sbg:modifiedOn: 1463601910
#>   sbg:revision: 0
#> - sbg:modifiedBy: tengfei
#>   sbg:modifiedOn: 1463601952
#>   sbg:revision: 1
#> - sbg:modifiedBy: tengfei
#>   sbg:modifiedOn: 1463601974
#>   sbg:revision: 2
#> sbg:toolkit: STAR
#> id: '#tengfei/quickstart/rna-seq-alignment-star-demo/2'
#> inputs:
#> - type:
#>   - 'null'
#>   - items: File
#>     type: array
#>   label: sjdbGTFfile
#>   streamable: no
#>   id: '#sjdbGTFfile'
#>   sbg:x: 160.4999759
#>   sbg:y: 195.0833106
#>   sbg:includeInPorts: yes
#>   required: no
#> - type:
#>   - items: File
#>     type: array
#>   label: fastq
#>   streamable: no
#>   id: '#fastq'
#>   sbg:x: 164.2499914
#>   sbg:y: 323.7499502
#>   sbg:includeInPorts: yes
#>   required: yes
#> - type:
#>   - File
#>   label: genomeFastaFiles
#>   streamable: no
#>   id: '#genomeFastaFiles'
#>   sbg:x: 167.7499601
#>   sbg:y: 469.9999106
#>   sbg:includeInPorts: yes
#>   required: yes
#> - type:
#>   - 'null'
#>   - string
#>   label: Exons' parents name
#>   description: Tag name to be used as exons' transcript-parents.
#>   streamable: no
#>   id: '#sjdbGTFtagExonParentTranscript'
#>   sbg:category: Splice junctions db parameters
#>   sbg:x: 200.0
#>   sbg:y: 350.0
#>   sbg:includeInPorts: yes
#>   sbg:toolDefaultValue: transcript_id
#>   required: no
#> - type:
#>   - 'null'
#>   - string
#>   label: Gene name
#>   description: Tag name to be used as exons' gene-parents.
#>   streamable: no
#>   id: '#sjdbGTFtagExonParentGene'
#>   sbg:category: Splice junctions db parameters
#>   sbg:x: 200.0
#>   sbg:y: 400.0
#>   sbg:includeInPorts: yes
#>   sbg:toolDefaultValue: gene_id
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: Max loci anchors
#>   description: Max number of loci anchors are allowed to map to (int>0).
#>   streamable: no
#>   id: '#winAnchorMultimapNmax'
#>   sbg:category: Windows, Anchors, Binning
#>   sbg:x: 200.0
#>   sbg:y: 450.0
#>   sbg:includeInPorts: yes
#>   sbg:toolDefaultValue: '50'
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: Max bins between anchors
#>   description: Max number of bins between two anchors that allows aggregation of anchors
#>     into one window (int>0).
#>   streamable: no
#>   id: '#winAnchorDistNbins'
#>   sbg:category: Windows, Anchors, Binning
#>   sbg:x: 200.0
#>   sbg:y: 500.0
#>   sbg:includeInPorts: yes
#>   sbg:toolDefaultValue: '9'
#>   required: no
#> outputs:
#> - type:
#>   - 'null'
#>   - items: File
#>     type: array
#>   label: Unmapped reads
#>   description: Output of unmapped reads.
#>   streamable: no
#>   id: '#unmapped_reads'
#>   source: '#unmapped_reads'
#>   sbg:x: 800.0
#>   sbg:y: 200.0
#>   sbg:includeInPorts: yes
#>   required: no
#> - type:
#>   - 'null'
#>   - File
#>   label: Transcriptome alignments
#>   description: Alignments translated into transcript coordinates.
#>   streamable: no
#>   id: '#transcriptome_aligned_reads'
#>   source: '#transcriptome_aligned_reads'
#>   sbg:x: 800.0
#>   sbg:y: 233.3333333
#>   sbg:includeInPorts: yes
#>   required: no
#> - type:
#>   - 'null'
#>   - File
#>   label: Splice junctions
#>   description: High confidence collapsed splice junctions in tab-delimited format.
#>     Only junctions supported by uniquely mapping reads are reported.
#>   streamable: no
#>   id: '#splice_junctions'
#>   source: '#splice_junctions'
#>   sbg:x: 800.0
#>   sbg:y: 266.6666667
#>   sbg:includeInPorts: yes
#>   required: no
#> - type:
#>   - 'null'
#>   - File
#>   label: Reads per gene
#>   description: File with number of reads per gene. A read is counted if it overlaps
#>     (1nt or more) one and only one gene.
#>   streamable: no
#>   id: '#reads_per_gene'
#>   source: '#reads_per_gene'
#>   sbg:x: 800.0
#>   sbg:y: 300.0
#>   sbg:includeInPorts: yes
#>   required: no
#> - type:
#>   - 'null'
#>   - items: File
#>     type: array
#>   label: Log files
#>   description: Log files produced during alignment.
#>   streamable: no
#>   id: '#log_files'
#>   source: '#log_files'
#>   sbg:x: 800.0
#>   sbg:y: 333.3333333
#>   sbg:includeInPorts: yes
#>   required: no
#> - type:
#>   - 'null'
#>   - File
#>   label: Chimeric junctions
#>   description: If chimSegmentMin in 'Chimeric Alignments' section is set to 0, 'Chimeric
#>     Junctions' won't be output.
#>   streamable: no
#>   id: '#chimeric_junctions'
#>   source: '#chimeric_junctions'
#>   sbg:x: 800.0
#>   sbg:y: 366.6666667
#>   sbg:includeInPorts: yes
#>   required: no
#> - type:
#>   - 'null'
#>   - File
#>   label: Intermediate genome files
#>   description: Archive with genome files produced when annotations are included on
#>     the fly (in the mapping step).
#>   streamable: no
#>   id: '#intermediate_genome'
#>   source:
#>   - '#intermediate_genome'
#>   - intermediate_genome
#>   sbg:x: 800.0
#>   sbg:y: 400.0
#>   sbg:includeInPorts: yes
#>   required: no
#> - type:
#>   - 'null'
#>   - File
#>   label: Chimeric alignments
#>   description: Aligned Chimeric sequences SAM - if chimSegmentMin = 0, no Chimeric
#>     Alignment SAM and Chimeric Junctions outputs.
#>   streamable: no
#>   id: '#chimeric_alignments'
#>   source: '#chimeric_alignments'
#>   sbg:x: 800.0
#>   sbg:y: 433.3333333
#>   sbg:includeInPorts: yes
#>   required: no
#> - type:
#>   - 'null'
#>   - File
#>   label: Sorted BAM/SAM
#>   description: Sorted BAM or SAM file.
#>   streamable: no
#>   id: '#sorted_bam'
#>   source: '#sorted_bam'
#>   sbg:x: 800.0
#>   sbg:y: 466.6666667
#>   sbg:includeInPorts: yes
#>   required: no
#> - type:
#>   - 'null'
#>   - File
#>   label: Result
#>   description: Source FASTQ file with updated metadata.
#>   streamable: no
#>   id: '#result'
#>   source: '#result'
#>   sbg:x: 800.0
#>   sbg:y: 500.0
#>   sbg:includeInPorts: yes
#>   required: no
#> - type:
#>   - 'null'
#>   - File
#>   label: Intermediate genome files
#>   description: Archive with genome files produced when annotations are included on
#>     the fly (in the mapping step).
#>   streamable: no
#>   id: '#intermediate_genome'
#>   source:
#>   - '#intermediate_genome'
#>   - intermediate_genome
#>   sbg:x: 800.0
#>   sbg:y: 533.3333333
#>   sbg:includeInPorts: yes
#>   required: no
#> requirements:
#> - class: CreateFileRequirement
#>   fileDef: []
#> hints:
#> - class: sbg:AWSInstanceType
#>   value: c3.8xlarge
#> label: RNA-seq Alignment - STAR
#> description: "Alignment to a reference genome and transcriptome presents the first
#>   step of RNA-Seq analysis. This pipeline uses STAR, an ultrafast RNA-seq aligner
#>   capable of mapping full length RNA sequences and detecting de novo canonical junctions,
#>   non-canonical splices, and chimeric (fusion) transcripts. It is optimized for mammalian
#>   sequence reads, but fine tuning of its parameters enables customization to satisfy
#>   unique needs.\n\nSTAR accepts one file per sample (or two files for paired-end data).
#>   \ \nSplice junction annotations can optionally be collected from splice junction
#>   databases. Set the \"Overhang length\" parameter to a value larger than zero in
#>   order to use splice junction databases. For constant read length, this value should
#>   (ideally) be equal to mate length decreased by 1; for long reads with non-constant
#>   length, this value should be 100 (pipeline default). \nFastQC Analysis on FASTQ
#>   files reveals read length distribution. STAR can detect chimeric transcripts, but
#>   parameter \"Min segment length\" in \"Chimeric Alignments\" category must be adjusted
#>   to a desired minimum chimeric segment length. Aligned reads are reported in BAM
#>   format and can be viewed in a genome browser (such as IGV). A file containing detected
#>   splice junctions is also produced.\n\nUnmapped reads are reported in FASTQ format
#>   and can be included in an output BAM file. The \"Output unmapped reads\" and \"Write
#>   unmapped in SAM\" parameters enable unmapped output type selection."
#> class: Workflow
#> steps:
#> - id: '#STAR_Genome_Generate'
#>   inputs:
#>   - id: '#STAR_Genome_Generate.sjdbScore'
#>   - id: '#STAR_Genome_Generate.sjdbOverhang'
#>   - id: '#STAR_Genome_Generate.sjdbGTFtagExonParentTranscript'
#>     source: '#sjdbGTFtagExonParentTranscript'
#>   - id: '#STAR_Genome_Generate.sjdbGTFtagExonParentGene'
#>     source: '#sjdbGTFtagExonParentGene'
#>   - id: '#STAR_Genome_Generate.sjdbGTFfile'
#>     source: '#sjdbGTFfile'
#>   - id: '#STAR_Genome_Generate.sjdbGTFfeatureExon'
#>   - id: '#STAR_Genome_Generate.sjdbGTFchrPrefix'
#>   - id: '#STAR_Genome_Generate.genomeSAsparseD'
#>   - id: '#STAR_Genome_Generate.genomeSAindexNbases'
#>   - id: '#STAR_Genome_Generate.genomeFastaFiles'
#>     source: '#genomeFastaFiles'
#>   - id: '#STAR_Genome_Generate.genomeChrBinNbits'
#>   outputs:
#>   - id: '#STAR_Genome_Generate.genome'
#>   hints: []
#>   run:
#>     sbg:validationErrors: []
#>     sbg:sbgMaintained: no
#>     sbg:latestRevision: 1
#>     sbg:job:
#>       allocatedResources:
#>         mem: 60000
#>         cpu: 15
#>       inputs:
#>         sjdbScore: 0
#>         sjdbGTFfeatureExon: sjdbGTFfeatureExon
#>         sjdbOverhang: 0
#>         sjdbGTFtagExonParentTranscript: sjdbGTFtagExonParentTranscript
#>         genomeChrBinNbits: genomeChrBinNbits
#>         genomeSAsparseD: 0
#>         sjdbGTFfile:
#>         - size: 0
#>           secondaryFiles: []
#>           class: File
#>           path: /demo/test-files/chr20.gtf
#>         sjdbGTFtagExonParentGene: sjdbGTFtagExonParentGene
#>         genomeFastaFiles:
#>           size: 0
#>           secondaryFiles: []
#>           class: File
#>           path: /sbgenomics/test-data/chr20.fa
#>         sjdbGTFchrPrefix: sjdbGTFchrPrefix
#>         genomeSAindexNbases: 0
#>     sbg:toolAuthor: Alexander Dobin/CSHL
#>     sbg:createdOn: 1450911469
#>     sbg:categories:
#>     - Alignment
#>     sbg:contributors:
#>     - bix-demo
#>     sbg:links:
#>     - id: https://github.com/alexdobin/STAR
#>       label: Homepage
#>     - id: https://github.com/alexdobin/STAR/releases
#>       label: Releases
#>     - id: https://github.com/alexdobin/STAR/blob/master/doc/STARmanual.pdf
#>       label: Manual
#>     - id: https://groups.google.com/forum/#!forum/rna-star
#>       label: Support
#>     - id: http://www.ncbi.nlm.nih.gov/pubmed/23104886
#>       label: Publication
#>     sbg:project: bix-demo/star-2-4-2a-demo
#>     sbg:createdBy: bix-demo
#>     sbg:toolkitVersion: 2.4.2a
#>     sbg:id: sevenbridges/public-apps/star-genome-generate/1
#>     sbg:license: GNU General Public License v3.0 only
#>     sbg:revision: 1
#>     sbg:cmdPreview: mkdir genomeDir && /opt/STAR --runMode genomeGenerate --genomeDir
#>       ./genomeDir --runThreadN 15 --genomeFastaFiles /sbgenomics/test-data/chr20.fa
#>       --genomeChrBinNbits genomeChrBinNbits --genomeSAindexNbases 0 --genomeSAsparseD
#>       0 --sjdbGTFfeatureExon sjdbGTFfeatureExon --sjdbGTFtagExonParentTranscript sjdbGTFtagExonParentTranscript
#>       --sjdbGTFtagExonParentGene sjdbGTFtagExonParentGene --sjdbOverhang 0 --sjdbScore
#>       0 --sjdbGTFchrPrefix sjdbGTFchrPrefix  --sjdbGTFfile /demo/test-files/chr20.gtf  &&
#>       tar -vcf genome.tar ./genomeDir /sbgenomics/test-data/chr20.fa
#>     sbg:modifiedOn: 1450911470
#>     sbg:modifiedBy: bix-demo
#>     sbg:revisionsInfo:
#>     - sbg:modifiedBy: bix-demo
#>       sbg:modifiedOn: 1450911469
#>       sbg:revision: 0
#>     - sbg:modifiedBy: bix-demo
#>       sbg:modifiedOn: 1450911470
#>       sbg:revision: 1
#>     sbg:toolkit: STAR
#>     id: sevenbridges/public-apps/star-genome-generate/1
#>     inputs:
#>     - type:
#>       - 'null'
#>       - int
#>       label: Extra alignment score
#>       description: Extra alignment score for alignments that cross database junctions.
#>       streamable: no
#>       id: '#sjdbScore'
#>       inputBinding:
#>         position: 0
#>         prefix: --sjdbScore
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Splice junctions db parameters
#>       sbg:includeInPorts: yes
#>       sbg:toolDefaultValue: '2'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: '"Overhang" length'
#>       description: Length of the donor/acceptor sequence on each side of the junctions,
#>         ideally = (mate_length - 1) (int >= 0), if int = 0, splice junction database
#>         is not used.
#>       streamable: no
#>       id: '#sjdbOverhang'
#>       inputBinding:
#>         position: 0
#>         prefix: --sjdbOverhang
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Splice junctions db parameters
#>       sbg:includeInPorts: yes
#>       sbg:toolDefaultValue: '100'
#>       required: no
#>     - type:
#>       - 'null'
#>       - string
#>       label: Exons' parents name
#>       description: Tag name to be used as exons' transcript-parents.
#>       streamable: no
#>       id: '#sjdbGTFtagExonParentTranscript'
#>       inputBinding:
#>         position: 0
#>         prefix: --sjdbGTFtagExonParentTranscript
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Splice junctions db parameters
#>       sbg:toolDefaultValue: transcript_id
#>       required: no
#>     - type:
#>       - 'null'
#>       - string
#>       label: Gene name
#>       description: Tag name to be used as exons' gene-parents.
#>       streamable: no
#>       id: '#sjdbGTFtagExonParentGene'
#>       inputBinding:
#>         position: 0
#>         prefix: --sjdbGTFtagExonParentGene
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Splice junctions db parameters
#>       sbg:toolDefaultValue: gene_id
#>       required: no
#>     - type:
#>       - 'null'
#>       - items: File
#>         type: array
#>       label: Splice junction file
#>       description: Gene model annotations and/or known transcripts.
#>       streamable: no
#>       id: '#sjdbGTFfile'
#>       sbg:category: Basic
#>       sbg:fileTypes: GTF, GFF, TXT
#>       required: no
#>     - type:
#>       - 'null'
#>       - string
#>       label: Set exons feature
#>       description: Feature type in GTF file to be used as exons for building transcripts.
#>       streamable: no
#>       id: '#sjdbGTFfeatureExon'
#>       inputBinding:
#>         position: 0
#>         prefix: --sjdbGTFfeatureExon
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Splice junctions db parameters
#>       sbg:toolDefaultValue: exon
#>       required: no
#>     - type:
#>       - 'null'
#>       - string
#>       label: Chromosome names
#>       description: Prefix for chromosome names in a GTF file (e.g. 'chr' for using
#>         ENSMEBL annotations with UCSC geneomes).
#>       streamable: no
#>       id: '#sjdbGTFchrPrefix'
#>       inputBinding:
#>         position: 0
#>         prefix: --sjdbGTFchrPrefix
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Splice junctions db parameters
#>       sbg:toolDefaultValue: '-'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Suffux array sparsity
#>       description: 'Distance between indices: use bigger numbers to decrease needed
#>         RAM at the cost of mapping speed reduction (int>0).'
#>       streamable: no
#>       id: '#genomeSAsparseD'
#>       inputBinding:
#>         position: 0
#>         prefix: --genomeSAsparseD
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Genome generation parameters
#>       sbg:toolDefaultValue: '1'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Pre-indexing string length
#>       description: Length (bases) of the SA pre-indexing string. Typically between
#>         10 and 15. Longer strings will use much more memory, but allow faster searches.
#>         For small genomes, this number needs to be scaled down, with a typical value
#>         of min(14, log2(GenomeLength)/2 - 1). For example, for 1 megaBase genome,
#>         this is equal to 9, for 100 kiloBase genome, this is equal to 7.
#>       streamable: no
#>       id: '#genomeSAindexNbases'
#>       inputBinding:
#>         position: 0
#>         prefix: --genomeSAindexNbases
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Genome generation parameters
#>       sbg:toolDefaultValue: '14'
#>       required: no
#>     - type:
#>       - File
#>       label: Genome fasta files
#>       description: Reference sequence to which to align the reads.
#>       streamable: no
#>       id: '#genomeFastaFiles'
#>       inputBinding:
#>         position: 0
#>         prefix: --genomeFastaFiles
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Basic
#>       sbg:fileTypes: FASTA, FA
#>       required: yes
#>     - type:
#>       - 'null'
#>       - string
#>       label: Bins size
#>       description: 'Set log2(chrBin), where chrBin is the size (bits) of the bins
#>         for genome storage: each chromosome will occupy an integer number of bins.
#>         If you are using a genome with a large (>5,000) number of chrosomes/scaffolds,
#>         you may need to reduce this number to reduce RAM consumption. The following
#>         scaling is recomended: genomeChrBinNbits = min(18, log2(GenomeLength/NumberOfReferences)).
#>         For example, for 3 gigaBase genome with 100,000 chromosomes/scaffolds, this
#>         is equal to 15.'
#>       streamable: no
#>       id: '#genomeChrBinNbits'
#>       inputBinding:
#>         position: 0
#>         prefix: --genomeChrBinNbits
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Genome generation parameters
#>       sbg:toolDefaultValue: '18'
#>       required: no
#>     outputs:
#>     - type:
#>       - 'null'
#>       - File
#>       label: Genome Files
#>       description: Genome files comprise binary genome sequence, suffix arrays, text
#>         chromosome names/lengths, splice junctions coordinates, and transcripts/genes
#>         information.
#>       streamable: no
#>       id: '#genome'
#>       outputBinding:
#>         glob: '*.tar'
#>       sbg:fileTypes: TAR
#>     requirements:
#>     - class: ExpressionEngineRequirement
#>       id: '#cwl-js-engine'
#>       requirements:
#>       - class: DockerRequirement
#>         dockerPull: rabix/js-engine
#>     hints:
#>     - class: DockerRequirement
#>       dockerPull: images.sbgenomics.com/ana_d/star:2.4.2a
#>       dockerImageId: a4b0ad2c3cae
#>     - class: sbg:CPURequirement
#>       value: 15
#>     - class: sbg:MemRequirement
#>       value: 60000
#>     label: STAR Genome Generate
#>     description: STAR Genome Generate is a tool that generates genome index files.
#>       One set of files should be generated per each genome/annotation combination.
#>       Once produced, these files could be used as long as genome/annotation combination
#>       stays the same. Also, STAR Genome Generate which produced these files and STAR
#>       aligner using them must be the same toolkit version.
#>     class: CommandLineTool
#>     baseCommand:
#>     - mkdir
#>     - genomeDir
#>     - '&&'
#>     - /opt/STAR
#>     - --runMode
#>     - genomeGenerate
#>     - --genomeDir
#>     - ./genomeDir
#>     - --runThreadN
#>     - class: Expression
#>       script: |-
#>         {
#>           return $job.allocatedResources.cpu
#>         }
#>       engine: '#cwl-js-engine'
#>     arguments:
#>     - position: 99
#>       separate: yes
#>       valueFrom: '&& tar -vcf genome.tar ./genomeDir'
#>     - position: 0
#>       separate: yes
#>       valueFrom:
#>         engine: '#cwl-js-engine'
#>         script: "{\t\n  var sjFormat = \"False\"\n  var gtfgffFormat = \"False\"\n
#>           \ var list = $job.inputs.sjdbGTFfile\n  var paths_list = []\n  var joined_paths
#>           = \"\"\n  \n  if (list) {\n    list.forEach(function(f){return paths_list.push(f.path)})\n
#>           \   joined_paths = paths_list.join(\" \")\n\n\n    paths_list.forEach(function(f){\n
#>           \     ext = f.replace(/^.*\\./, '')\n      if (ext == \"gff\" || ext ==
#>           \"gtf\") {\n        gtfgffFormat = \"True\"\n        return gtfgffFormat\n
#>           \     }\n      if (ext == \"txt\") {\n        sjFormat = \"True\"\n        return
#>           sjFormat\n      }\n    })\n\n    if ($job.inputs.sjdbGTFfile && $job.inputs.sjdbInsertSave
#>           != \"None\") {\n      if (sjFormat == \"True\") {\n        return \"--sjdbFileChrStartEnd
#>           \".concat(joined_paths)\n      }\n      else if (gtfgffFormat == \"True\")
#>           {\n        return \"--sjdbGTFfile \".concat(joined_paths)\n      }\n    }\n
#>           \ }\n}"
#>         class: Expression
#>     stdin: ''
#>     stdout: ''
#>     successCodes: []
#>     temporaryFailCodes: []
#>     x: 384.0832266
#>     'y': 446.4998957
#>   sbg:x: 100.0
#>   sbg:y: 200.0
#> - id: '#SBG_FASTQ_Quality_Detector'
#>   inputs:
#>   - id: '#SBG_FASTQ_Quality_Detector.fastq'
#>     source: '#fastq'
#>   outputs:
#>   - id: '#SBG_FASTQ_Quality_Detector.result'
#>   hints: []
#>   run:
#>     sbg:validationErrors: []
#>     sbg:sbgMaintained: no
#>     sbg:latestRevision: 3
#>     sbg:job:
#>       allocatedResources:
#>         mem: 1000
#>         cpu: 1
#>       inputs:
#>         fastq:
#>           size: 0
#>           secondaryFiles: []
#>           class: File
#>           path: /path/to/fastq.ext
#>     sbg:toolAuthor: Seven Bridges Genomics
#>     sbg:createdOn: 1450911312
#>     sbg:categories:
#>     - FASTQ-Processing
#>     sbg:contributors:
#>     - bix-demo
#>     sbg:project: bix-demo/sbgtools-demo
#>     sbg:createdBy: bix-demo
#>     sbg:id: sevenbridges/public-apps/sbg-fastq-quality-detector/3
#>     sbg:license: Apache License 2.0
#>     sbg:revision: 3
#>     sbg:cmdPreview: python /opt/sbg_fastq_quality_scale_detector.py --fastq /path/to/fastq.ext
#>       /path/to/fastq.ext
#>     sbg:modifiedOn: 1450911314
#>     sbg:modifiedBy: bix-demo
#>     sbg:revisionsInfo:
#>     - sbg:modifiedBy: bix-demo
#>       sbg:modifiedOn: 1450911312
#>       sbg:revision: 0
#>     - sbg:modifiedBy: bix-demo
#>       sbg:modifiedOn: 1450911314
#>       sbg:revision: 3
#>     - sbg:modifiedBy: bix-demo
#>       sbg:modifiedOn: 1450911313
#>       sbg:revision: 1
#>     - sbg:modifiedBy: bix-demo
#>       sbg:modifiedOn: 1450911313
#>       sbg:revision: 2
#>     sbg:toolkit: SBGTools
#>     id: sevenbridges/public-apps/sbg-fastq-quality-detector/3
#>     inputs:
#>     - type:
#>       - File
#>       label: Fastq
#>       description: FASTQ file.
#>       streamable: no
#>       id: '#fastq'
#>       inputBinding:
#>         position: 0
#>         prefix: --fastq
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       required: yes
#>     outputs:
#>     - type:
#>       - 'null'
#>       - File
#>       label: Result
#>       description: Source FASTQ file with updated metadata.
#>       streamable: no
#>       id: '#result'
#>       outputBinding:
#>         glob: '*.fastq'
#>       sbg:fileTypes: FASTQ
#>     requirements:
#>     - class: CreateFileRequirement
#>       fileDef: []
#>     hints:
#>     - class: DockerRequirement
#>       dockerPull: images.sbgenomics.com/tziotas/sbg_fastq_quality_scale_detector:1.0
#>       dockerImageId: ''
#>     - class: sbg:CPURequirement
#>       value: 1
#>     - class: sbg:MemRequirement
#>       value: 1000
#>     label: SBG FASTQ Quality Detector
#>     description: FASTQ Quality Scale Detector detects which quality encoding scheme
#>       was used in your reads and automatically enters the proper value in the "Quality
#>       Scale" metadata field.
#>     class: CommandLineTool
#>     baseCommand:
#>     - python
#>     - /opt/sbg_fastq_quality_scale_detector.py
#>     arguments: []
#>     stdin: ''
#>     stdout: ''
#>     successCodes: []
#>     temporaryFailCodes: []
#>     x: 375.3333179
#>     'y': 323.5833156
#>   sbg:x: 300.0
#>   sbg:y: 200.0
#> - id: '#Picard_SortSam'
#>   inputs:
#>   - id: '#Picard_SortSam.validation_stringency'
#>     default: SILENT
#>   - id: '#Picard_SortSam.sort_order'
#>     default: Coordinate
#>   - id: '#Picard_SortSam.quiet'
#>   - id: '#Picard_SortSam.output_type'
#>   - id: '#Picard_SortSam.memory_per_job'
#>   - id: '#Picard_SortSam.max_records_in_ram'
#>   - id: '#Picard_SortSam.input_bam'
#>     source: '#STAR.aligned_reads'
#>   - id: '#Picard_SortSam.create_index'
#>     default: 'True'
#>   - id: '#Picard_SortSam.compression_level'
#>   outputs:
#>   - id: '#Picard_SortSam.sorted_bam'
#>   hints: []
#>   run:
#>     sbg:validationErrors: []
#>     sbg:sbgMaintained: no
#>     sbg:latestRevision: 2
#>     sbg:job:
#>       allocatedResources:
#>         mem: 2048
#>         cpu: 1
#>       inputs:
#>         sort_order: Coordinate
#>         input_bam:
#>           path: /root/dir/example.tested.bam
#>         memory_per_job: 2048
#>         output_type: ~
#>         create_index: ~
#>     sbg:toolAuthor: Broad Institute
#>     sbg:createdOn: 1450911168
#>     sbg:categories:
#>     - SAM/BAM-Processing
#>     sbg:contributors:
#>     - bix-demo
#>     sbg:links:
#>     - id: http://broadinstitute.github.io/picard/index.html
#>       label: Homepage
#>     - id: https://github.com/broadinstitute/picard/releases/tag/1.138
#>       label: Source Code
#>     - id: http://broadinstitute.github.io/picard/
#>       label: Wiki
#>     - id: https://github.com/broadinstitute/picard/zipball/master
#>       label: Download
#>     - id: http://broadinstitute.github.io/picard/
#>       label: Publication
#>     sbg:project: bix-demo/picard-1-140-demo
#>     sbg:createdBy: bix-demo
#>     sbg:toolkitVersion: '1.140'
#>     sbg:id: sevenbridges/public-apps/picard-sortsam-1-140/2
#>     sbg:license: MIT License, Apache 2.0 Licence
#>     sbg:revision: 2
#>     sbg:cmdPreview: java -Xmx2048M -jar /opt/picard-tools-1.140/picard.jar SortSam
#>       OUTPUT=example.tested.sorted.bam INPUT=/root/dir/example.tested.bam SORT_ORDER=coordinate   INPUT=/root/dir/example.tested.bam
#>       SORT_ORDER=coordinate  /root/dir/example.tested.bam
#>     sbg:modifiedOn: 1450911170
#>     sbg:modifiedBy: bix-demo
#>     sbg:revisionsInfo:
#>     - sbg:modifiedBy: bix-demo
#>       sbg:modifiedOn: 1450911168
#>       sbg:revision: 0
#>     - sbg:modifiedBy: bix-demo
#>       sbg:modifiedOn: 1450911169
#>       sbg:revision: 1
#>     - sbg:modifiedBy: bix-demo
#>       sbg:modifiedOn: 1450911170
#>       sbg:revision: 2
#>     sbg:toolkit: Picard
#>     id: sevenbridges/public-apps/picard-sortsam-1-140/2
#>     inputs:
#>     - type:
#>       - 'null'
#>       - name: validation_stringency
#>         symbols:
#>         - STRICT
#>         - LENIENT
#>         - SILENT
#>         type: enum
#>       label: Validation stringency
#>       description: 'Validation stringency for all SAM files read by this program.
#>         Setting stringency to SILENT can improve performance when processing a BAM
#>         file in which variable-length data (read, qualities, tags) do not otherwise
#>         need to be decoded. This option can be set to ''null'' to clear the default
#>         value. Possible values: {STRICT, LENIENT, SILENT}.'
#>       streamable: no
#>       id: '#validation_stringency'
#>       inputBinding:
#>         position: 0
#>         prefix: VALIDATION_STRINGENCY=
#>         separate: no
#>         valueFrom:
#>           engine: '#cwl-js-engine'
#>           script: |-
#>             {
#>               if ($job.inputs.validation_stringency)
#>               {
#>                 return $job.inputs.validation_stringency
#>               }
#>               else
#>               {
#>                 return "SILENT"
#>               }
#>             }
#>           class: Expression
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Other input types
#>       sbg:toolDefaultValue: SILENT
#>       required: no
#>     - type:
#>       - name: sort_order
#>         symbols:
#>         - Unsorted
#>         - Queryname
#>         - Coordinate
#>         type: enum
#>       label: Sort order
#>       description: 'Sort order of the output file. Possible values: {unsorted, queryname,
#>         coordinate}.'
#>       streamable: no
#>       id: '#sort_order'
#>       inputBinding:
#>         position: 3
#>         prefix: SORT_ORDER=
#>         separate: no
#>         valueFrom:
#>           engine: '#cwl-js-engine'
#>           script: |-
#>             {
#>               p = $job.inputs.sort_order.toLowerCase()
#>               return p
#>             }
#>           class: Expression
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Other input types
#>       sbg:toolDefaultValue: Coordinate
#>       sbg:altPrefix: SO
#>       required: yes
#>     - type:
#>       - 'null'
#>       - name: quiet
#>         symbols:
#>         - 'True'
#>         - 'False'
#>         type: enum
#>       label: Quiet
#>       description: 'This parameter indicates whether to suppress job-summary info
#>         on System.err. This option can be set to ''null'' to clear the default value.
#>         Possible values: {true, false}.'
#>       streamable: no
#>       id: '#quiet'
#>       inputBinding:
#>         position: 0
#>         prefix: QUIET=
#>         separate: no
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Other input types
#>       sbg:toolDefaultValue: 'False'
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: output_type
#>         symbols:
#>         - BAM
#>         - SAM
#>         - SAME AS INPUT
#>         type: enum
#>       label: Output format
#>       description: Since Picard tools can output both SAM and BAM files, user can
#>         choose the format of the output file.
#>       streamable: no
#>       id: '#output_type'
#>       sbg:category: Other input types
#>       sbg:toolDefaultValue: SAME AS INPUT
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Memory per job
#>       description: Amount of RAM memory to be used per job. Defaults to 2048 MB for
#>         single threaded jobs.
#>       streamable: no
#>       id: '#memory_per_job'
#>       sbg:toolDefaultValue: '2048'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Max records in RAM
#>       description: When writing SAM files that need to be sorted, this parameter will
#>         specify the number of records stored in RAM before spilling to disk. Increasing
#>         this number reduces the number of file handles needed to sort a SAM file,
#>         and increases the amount of RAM needed. This option can be set to 'null' to
#>         clear the default value.
#>       streamable: no
#>       id: '#max_records_in_ram'
#>       inputBinding:
#>         position: 0
#>         prefix: MAX_RECORDS_IN_RAM=
#>         separate: no
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Other input types
#>       sbg:toolDefaultValue: '500000'
#>       required: no
#>     - type:
#>       - File
#>       label: Input BAM
#>       description: The BAM or SAM file to sort.
#>       streamable: no
#>       id: '#input_bam'
#>       inputBinding:
#>         position: 1
#>         prefix: INPUT=
#>         separate: no
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: File inputs
#>       sbg:fileTypes: BAM, SAM
#>       sbg:altPrefix: I
#>       required: yes
#>     - type:
#>       - 'null'
#>       - name: create_index
#>         symbols:
#>         - 'True'
#>         - 'False'
#>         type: enum
#>       label: Create index
#>       description: 'This parameter indicates whether to create a BAM index when writing
#>         a coordinate-sorted BAM file. This option can be set to ''null'' to clear
#>         the default value. Possible values: {true, false}.'
#>       streamable: no
#>       id: '#create_index'
#>       inputBinding:
#>         position: 5
#>         prefix: CREATE_INDEX=
#>         separate: no
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Other input types
#>       sbg:toolDefaultValue: 'False'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Compression level
#>       description: Compression level for all compressed files created (e.g. BAM and
#>         GELI). This option can be set to 'null' to clear the default value.
#>       streamable: no
#>       id: '#compression_level'
#>       inputBinding:
#>         position: 0
#>         prefix: COMPRESSION_LEVEL=
#>         separate: no
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Other input types
#>       sbg:toolDefaultValue: '5'
#>       required: no
#>     outputs:
#>     - type:
#>       - 'null'
#>       - File
#>       label: Sorted BAM/SAM
#>       description: Sorted BAM or SAM file.
#>       streamable: no
#>       id: '#sorted_bam'
#>       outputBinding:
#>         glob: '*.sorted.?am'
#>       sbg:fileTypes: BAM, SAM
#>     requirements:
#>     - class: ExpressionEngineRequirement
#>       id: '#cwl-js-engine'
#>       requirements:
#>       - class: DockerRequirement
#>         dockerPull: rabix/js-engine
#>       engineCommand: cwl-engine.js
#>     hints:
#>     - class: DockerRequirement
#>       dockerPull: images.sbgenomics.com/mladenlsbg/picard:1.140
#>       dockerImageId: eab0e70b6629
#>     - class: sbg:CPURequirement
#>       value: 1
#>     - class: sbg:MemRequirement
#>       value:
#>         engine: '#cwl-js-engine'
#>         script: "{\n  if($job.inputs.memory_per_job){\n  \treturn $job.inputs.memory_per_job\n
#>           \ }\n  \treturn 2048\n}"
#>         class: Expression
#>     label: Picard SortSam
#>     description: Picard SortSam sorts the input SAM or BAM. Input and output formats
#>       are determined by the file extension.
#>     class: CommandLineTool
#>     baseCommand:
#>     - java
#>     - class: Expression
#>       script: "{   \n  if($job.inputs.memory_per_job){\n    return '-Xmx'.concat($job.inputs.memory_per_job,
#>         'M')\n  }   \n  \treturn '-Xmx2048M'\n}"
#>       engine: '#cwl-js-engine'
#>     - -jar
#>     - /opt/picard-tools-1.140/picard.jar
#>     - SortSam
#>     arguments:
#>     - position: 0
#>       prefix: OUTPUT=
#>       separate: no
#>       valueFrom:
#>         engine: '#cwl-js-engine'
#>         script: "{\n  filename = $job.inputs.input_bam.path\n  ext = $job.inputs.output_type\n\nif
#>           (ext === \"BAM\")\n{\n    return filename.split('.').slice(0, -1).concat(\"sorted.bam\").join(\".\").replace(/^.*[\\\\\\/]/,
#>           '')\n    }\n\nelse if (ext === \"SAM\")\n{\n    return filename.split('.').slice(0,
#>           -1).concat(\"sorted.sam\").join('.').replace(/^.*[\\\\\\/]/, '')\n}\n\nelse
#>           \n{\n\treturn filename.split('.').slice(0, -1).concat(\"sorted.\"+filename.split('.').slice(-1)[0]).join(\".\").replace(/^.*[\\\\\\/]/,
#>           '')\n}\n}"
#>         class: Expression
#>     - position: 1000
#>       separate: yes
#>       valueFrom:
#>         engine: '#cwl-js-engine'
#>         script: "{\n  filename = $job.inputs.input_bam.path\n  \n  /* figuring out
#>           output file type */\n  ext = $job.inputs.output_type\n  if (ext === \"BAM\")\n
#>           \ {\n    out_extension = \"BAM\"\n  }\n  else if (ext === \"SAM\")\n  {\n
#>           \   out_extension = \"SAM\"\n  }\n  else \n  {\n\tout_extension = filename.split('.').slice(-1)[0].toUpperCase()\n
#>           \ }  \n  \n  /* if exist moving .bai in bam.bai */\n  if ($job.inputs.create_index
#>           === 'True' && $job.inputs.sort_order === 'Coordinate' && out_extension ==
#>           \"BAM\")\n  {\n    \n    old_name = filename.split('.').slice(0, -1).concat('sorted.bai').join('.').replace(/^.*[\\\\\\/]/,
#>           '')\n    new_name = filename.split('.').slice(0, -1).concat('sorted.bam.bai').join('.').replace(/^.*[\\\\\\/]/,
#>           '')\n    return \"; mv \" + \" \" + old_name + \" \" + new_name\n  }\n\n}"
#>         class: Expression
#>     stdin: ''
#>     stdout: ''
#>     successCodes: []
#>     temporaryFailCodes: []
#>     x: 773.0831807
#>     'y': 470.9165939
#>   sbg:x: 500.0
#>   sbg:y: 200.0
#> - id: '#STAR'
#>   inputs:
#>   - id: '#STAR.winFlankNbins'
#>   - id: '#STAR.winBinNbits'
#>   - id: '#STAR.winAnchorMultimapNmax'
#>     source: '#winAnchorMultimapNmax'
#>   - id: '#STAR.winAnchorDistNbins'
#>     source: '#winAnchorDistNbins'
#>   - id: '#STAR.twopassMode'
#>   - id: '#STAR.twopass1readsN'
#>   - id: '#STAR.sjdbScore'
#>   - id: '#STAR.sjdbOverhang'
#>     default: 100
#>   - id: '#STAR.sjdbInsertSave'
#>   - id: '#STAR.sjdbGTFtagExonParentTranscript'
#>   - id: '#STAR.sjdbGTFtagExonParentGene'
#>   - id: '#STAR.sjdbGTFfile'
#>     source: '#sjdbGTFfile'
#>   - id: '#STAR.sjdbGTFfeatureExon'
#>   - id: '#STAR.sjdbGTFchrPrefix'
#>   - id: '#STAR.seedSearchStartLmaxOverLread'
#>   - id: '#STAR.seedSearchStartLmax'
#>   - id: '#STAR.seedSearchLmax'
#>   - id: '#STAR.seedPerWindowNmax'
#>   - id: '#STAR.seedPerReadNmax'
#>   - id: '#STAR.seedNoneLociPerWindow'
#>   - id: '#STAR.seedMultimapNmax'
#>   - id: '#STAR.scoreStitchSJshift'
#>   - id: '#STAR.scoreInsOpen'
#>   - id: '#STAR.scoreInsBase'
#>   - id: '#STAR.scoreGenomicLengthLog2scale'
#>   - id: '#STAR.scoreGapNoncan'
#>   - id: '#STAR.scoreGapGCAG'
#>   - id: '#STAR.scoreGapATAC'
#>   - id: '#STAR.scoreGap'
#>   - id: '#STAR.scoreDelOpen'
#>   - id: '#STAR.scoreDelBase'
#>   - id: '#STAR.rg_seq_center'
#>   - id: '#STAR.rg_sample_id'
#>   - id: '#STAR.rg_platform_unit_id'
#>   - id: '#STAR.rg_platform'
#>   - id: '#STAR.rg_mfl'
#>   - id: '#STAR.rg_library_id'
#>   - id: '#STAR.reads'
#>     source: '#SBG_FASTQ_Quality_Detector.result'
#>   - id: '#STAR.readMatesLengthsIn'
#>   - id: '#STAR.readMapNumber'
#>   - id: '#STAR.quantTranscriptomeBan'
#>   - id: '#STAR.quantMode'
#>     default: TranscriptomeSAM
#>   - id: '#STAR.outSortingType'
#>     default: SortedByCoordinate
#>   - id: '#STAR.outSJfilterReads'
#>   - id: '#STAR.outSJfilterOverhangMin'
#>   - id: '#STAR.outSJfilterIntronMaxVsReadN'
#>   - id: '#STAR.outSJfilterDistToOtherSJmin'
#>   - id: '#STAR.outSJfilterCountUniqueMin'
#>   - id: '#STAR.outSJfilterCountTotalMin'
#>   - id: '#STAR.outSAMunmapped'
#>   - id: '#STAR.outSAMtype'
#>     default: BAM
#>   - id: '#STAR.outSAMstrandField'
#>   - id: '#STAR.outSAMreadID'
#>   - id: '#STAR.outSAMprimaryFlag'
#>   - id: '#STAR.outSAMorder'
#>   - id: '#STAR.outSAMmode'
#>   - id: '#STAR.outSAMmapqUnique'
#>   - id: '#STAR.outSAMheaderPG'
#>   - id: '#STAR.outSAMheaderHD'
#>   - id: '#STAR.outSAMflagOR'
#>   - id: '#STAR.outSAMflagAND'
#>   - id: '#STAR.outSAMattributes'
#>   - id: '#STAR.outReadsUnmapped'
#>     default: Fastx
#>   - id: '#STAR.outQSconversionAdd'
#>   - id: '#STAR.outFilterType'
#>   - id: '#STAR.outFilterScoreMinOverLread'
#>   - id: '#STAR.outFilterScoreMin'
#>   - id: '#STAR.outFilterMultimapScoreRange'
#>   - id: '#STAR.outFilterMultimapNmax'
#>   - id: '#STAR.outFilterMismatchNoverReadLmax'
#>   - id: '#STAR.outFilterMismatchNoverLmax'
#>   - id: '#STAR.outFilterMismatchNmax'
#>   - id: '#STAR.outFilterMatchNminOverLread'
#>   - id: '#STAR.outFilterMatchNmin'
#>   - id: '#STAR.outFilterIntronMotifs'
#>   - id: '#STAR.limitSjdbInsertNsj'
#>   - id: '#STAR.limitOutSJoneRead'
#>   - id: '#STAR.limitOutSJcollapsed'
#>   - id: '#STAR.limitBAMsortRAM'
#>   - id: '#STAR.genomeDirName'
#>   - id: '#STAR.genome'
#>     source: '#STAR_Genome_Generate.genome'
#>   - id: '#STAR.clip5pNbases'
#>   - id: '#STAR.clip3pNbases'
#>   - id: '#STAR.clip3pAfterAdapterNbases'
#>   - id: '#STAR.clip3pAdapterSeq'
#>   - id: '#STAR.clip3pAdapterMMp'
#>   - id: '#STAR.chimSegmentMin'
#>   - id: '#STAR.chimScoreSeparation'
#>   - id: '#STAR.chimScoreMin'
#>   - id: '#STAR.chimScoreJunctionNonGTAG'
#>   - id: '#STAR.chimScoreDropMax'
#>   - id: '#STAR.chimOutType'
#>   - id: '#STAR.chimJunctionOverhangMin'
#>   - id: '#STAR.alignWindowsPerReadNmax'
#>   - id: '#STAR.alignTranscriptsPerWindowNmax'
#>   - id: '#STAR.alignTranscriptsPerReadNmax'
#>   - id: '#STAR.alignSplicedMateMapLminOverLmate'
#>   - id: '#STAR.alignSplicedMateMapLmin'
#>   - id: '#STAR.alignSoftClipAtReferenceEnds'
#>   - id: '#STAR.alignSJoverhangMin'
#>   - id: '#STAR.alignSJDBoverhangMin'
#>   - id: '#STAR.alignMatesGapMax'
#>   - id: '#STAR.alignIntronMin'
#>   - id: '#STAR.alignIntronMax'
#>   - id: '#STAR.alignEndsType'
#>   outputs:
#>   - id: '#STAR.unmapped_reads'
#>   - id: '#STAR.transcriptome_aligned_reads'
#>   - id: '#STAR.splice_junctions'
#>   - id: '#STAR.reads_per_gene'
#>   - id: '#STAR.log_files'
#>   - id: '#STAR.intermediate_genome'
#>   - id: '#STAR.chimeric_junctions'
#>   - id: '#STAR.chimeric_alignments'
#>   - id: '#STAR.aligned_reads'
#>   hints: []
#>   run:
#>     sbg:validationErrors: []
#>     sbg:sbgMaintained: no
#>     sbg:latestRevision: 4
#>     sbg:job:
#>       allocatedResources:
#>         mem: 60000
#>         cpu: 15
#>       inputs:
#>         alignWindowsPerReadNmax: 0
#>         outSAMheaderPG: outSAMheaderPG
#>         GENOME_DIR_NAME: ''
#>         outFilterMatchNminOverLread: 0
#>         rg_platform_unit_id: rg_platform_unit
#>         alignTranscriptsPerReadNmax: 0
#>         readMapNumber: 0
#>         alignSplicedMateMapLminOverLmate: 0
#>         alignMatesGapMax: 0
#>         outFilterMultimapNmax: 0
#>         clip5pNbases:
#>         - 0
#>         outSAMstrandField: None
#>         readMatesLengthsIn: NotEqual
#>         outSAMattributes: Standard
#>         seedMultimapNmax: 0
#>         rg_mfl: rg_mfl
#>         chimSegmentMin: 0
#>         winAnchorDistNbins: 0
#>         outSortingType: SortedByCoordinate
#>         outFilterMultimapScoreRange: 0
#>         sjdbInsertSave: Basic
#>         clip3pAfterAdapterNbases:
#>         - 0
#>         scoreDelBase: 0
#>         outFilterMatchNmin: 0
#>         twopass1readsN: 0
#>         outSAMunmapped: None
#>         genome:
#>           size: 0
#>           secondaryFiles: []
#>           class: File
#>           path: genome.ext
#>         sjdbGTFtagExonParentTranscript: ''
#>         limitBAMsortRAM: 0
#>         alignEndsType: Local
#>         seedNoneLociPerWindow: 0
#>         rg_sample_id: rg_sample
#>         sjdbGTFtagExonParentGene: ''
#>         chimScoreMin: 0
#>         outSJfilterIntronMaxVsReadN:
#>         - 0
#>         twopassMode: Basic
#>         alignSplicedMateMapLmin: 0
#>         outSJfilterReads: All
#>         outSAMprimaryFlag: OneBestScore
#>         outSJfilterCountTotalMin:
#>         - 3
#>         - 1
#>         - 1
#>         - 1
#>         outSAMorder: Paired
#>         outSAMflagAND: 0
#>         chimScoreSeparation: 0
#>         alignSJoverhangMin: 0
#>         outFilterScoreMin: 0
#>         seedSearchStartLmax: 0
#>         scoreGapGCAG: 0
#>         scoreGenomicLengthLog2scale: 0
#>         outFilterIntronMotifs: None
#>         outFilterMismatchNmax: 0
#>         reads:
#>         - size: 0
#>           secondaryFiles: []
#>           class: File
#>           metadata:
#>             format: fastq
#>             paired_end: '1'
#>             seq_center: illumina
#>           path: /test-data/mate_1.fastq.bz2
#>         scoreGap: 0
#>         outSJfilterOverhangMin:
#>         - 30
#>         - 12
#>         - 12
#>         - 12
#>         outSAMflagOR: 0
#>         outSAMmode: Full
#>         rg_library_id: ''
#>         chimScoreJunctionNonGTAG: 0
#>         scoreInsOpen: 0
#>         clip3pAdapterSeq:
#>         - clip3pAdapterSeq
#>         chimScoreDropMax: 0
#>         outFilterType: Normal
#>         scoreGapATAC: 0
#>         rg_platform: Ion Torrent PGM
#>         clip3pAdapterMMp:
#>         - 0
#>         sjdbGTFfeatureExon: ''
#>         outQSconversionAdd: 0
#>         quantMode: TranscriptomeSAM
#>         alignIntronMin: 0
#>         scoreInsBase: 0
#>         scoreGapNoncan: 0
#>         seedSearchLmax: 0
#>         outSJfilterDistToOtherSJmin:
#>         - 0
#>         outFilterScoreMinOverLread: 0
#>         alignSJDBoverhangMin: 0
#>         limitOutSJcollapsed: 0
#>         winAnchorMultimapNmax: 0
#>         outFilterMismatchNoverLmax: 0
#>         rg_seq_center: ''
#>         outSAMheaderHD: outSAMheaderHD
#>         chimOutType: Within
#>         quantTranscriptomeBan: IndelSoftclipSingleend
#>         limitOutSJoneRead: 0
#>         alignTranscriptsPerWindowNmax: 0
#>         sjdbOverhang: ~
#>         outReadsUnmapped: Fastx
#>         scoreStitchSJshift: 0
#>         seedPerWindowNmax: 0
#>         outSJfilterCountUniqueMin:
#>         - 3
#>         - 1
#>         - 1
#>         - 1
#>         scoreDelOpen: 0
#>         sjdbGTFfile:
#>         - path: /demo/test-data/chr20.gtf
#>         clip3pNbases:
#>         - 0
#>         - 3
#>         winBinNbits: 0
#>         sjdbScore: ~
#>         seedSearchStartLmaxOverLread: 0
#>         alignIntronMax: 0
#>         seedPerReadNmax: 0
#>         outFilterMismatchNoverReadLmax: 0
#>         winFlankNbins: 0
#>         sjdbGTFchrPrefix: chrPrefix
#>         alignSoftClipAtReferenceEnds: 'Yes'
#>         outSAMreadID: Standard
#>         outSAMtype: BAM
#>         chimJunctionOverhangMin: 0
#>         limitSjdbInsertNsj: 0
#>         outSAMmapqUnique: 0
#>     sbg:toolAuthor: Alexander Dobin/CSHL
#>     sbg:createdOn: 1450911471
#>     sbg:categories:
#>     - Alignment
#>     sbg:contributors:
#>     - ana_d
#>     - bix-demo
#>     - uros_sipetic
#>     sbg:links:
#>     - id: https://github.com/alexdobin/STAR
#>       label: Homepage
#>     - id: https://github.com/alexdobin/STAR/releases
#>       label: Releases
#>     - id: https://github.com/alexdobin/STAR/blob/master/doc/STARmanual.pdf
#>       label: Manual
#>     - id: https://groups.google.com/forum/#!forum/rna-star
#>       label: Support
#>     - id: http://www.ncbi.nlm.nih.gov/pubmed/23104886
#>       label: Publication
#>     sbg:project: bix-demo/star-2-4-2a-demo
#>     sbg:createdBy: bix-demo
#>     sbg:toolkitVersion: 2.4.2a
#>     sbg:id: sevenbridges/public-apps/star/4
#>     sbg:license: GNU General Public License v3.0 only
#>     sbg:revision: 4
#>     sbg:cmdPreview: tar -xvf genome.ext && /opt/STAR --runThreadN 15  --readFilesCommand
#>       bzcat  --sjdbGTFfile /demo/test-data/chr20.gtf  --sjdbGTFchrPrefix chrPrefix
#>       --sjdbInsertSave Basic  --twopass1readsN 0  --chimOutType WithinBAM  --outSAMattrRGline
#>       ID:1 CN:illumina PI:rg_mfl PL:Ion_Torrent_PGM PU:rg_platform_unit SM:rg_sample  --quantMode
#>       TranscriptomeSAM --outFileNamePrefix ./mate_1.fastq.bz2.  --readFilesIn /test-data/mate_1.fastq.bz2  &&
#>       tar -vcf mate_1.fastq.bz2._STARgenome.tar ./mate_1.fastq.bz2._STARgenome  &&
#>       mv mate_1.fastq.bz2.Unmapped.out.mate1 mate_1.fastq.bz2.Unmapped.out.mate1.fastq
#>     sbg:modifiedOn: 1462889222
#>     sbg:modifiedBy: ana_d
#>     sbg:revisionsInfo:
#>     - sbg:modifiedBy: bix-demo
#>       sbg:modifiedOn: 1450911471
#>       sbg:revision: 0
#>     - sbg:modifiedBy: bix-demo
#>       sbg:modifiedOn: 1450911473
#>       sbg:revision: 1
#>     - sbg:modifiedBy: bix-demo
#>       sbg:modifiedOn: 1450911475
#>       sbg:revision: 2
#>     - sbg:modifiedBy: uros_sipetic
#>       sbg:modifiedOn: 1462878528
#>       sbg:revision: 3
#>     - sbg:modifiedBy: ana_d
#>       sbg:modifiedOn: 1462889222
#>       sbg:revision: 4
#>     sbg:toolkit: STAR
#>     id: sevenbridges/public-apps/star/4
#>     inputs:
#>     - type:
#>       - 'null'
#>       - int
#>       label: Flanking regions size
#>       description: =log2(winFlank), where win Flank is the size of the left and right
#>         flanking regions for each window (int>0).
#>       streamable: no
#>       id: '#winFlankNbins'
#>       inputBinding:
#>         position: 0
#>         prefix: --winFlankNbins
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Windows, Anchors, Binning
#>       sbg:includeInPorts: yes
#>       sbg:toolDefaultValue: '4'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Bin size
#>       description: =log2(winBin), where winBin is the size of the bin for the windows/clustering,
#>         each window will occupy an integer number of bins (int>0).
#>       streamable: no
#>       id: '#winBinNbits'
#>       inputBinding:
#>         position: 0
#>         prefix: --winBinNbits
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Windows, Anchors, Binning
#>       sbg:includeInPorts: yes
#>       sbg:toolDefaultValue: '16'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Max loci anchors
#>       description: Max number of loci anchors are allowed to map to (int>0).
#>       streamable: no
#>       id: '#winAnchorMultimapNmax'
#>       inputBinding:
#>         position: 0
#>         prefix: --winAnchorMultimapNmax
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Windows, Anchors, Binning
#>       sbg:toolDefaultValue: '50'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Max bins between anchors
#>       description: Max number of bins between two anchors that allows aggregation
#>         of anchors into one window (int>0).
#>       streamable: no
#>       id: '#winAnchorDistNbins'
#>       inputBinding:
#>         position: 0
#>         prefix: --winAnchorDistNbins
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Windows, Anchors, Binning
#>       sbg:toolDefaultValue: '9'
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: twopassMode
#>         symbols:
#>         - None
#>         - Basic
#>         type: enum
#>       label: Two-pass mode
#>       description: '2-pass mapping mode. None: 1-pass mapping; Basic: basic 2-pass
#>         mapping, with all 1st pass junctions inserted into the genome indices on the
#>         fly.'
#>       streamable: no
#>       id: '#twopassMode'
#>       inputBinding:
#>         position: 0
#>         prefix: --twopassMode
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: 2-pass mapping
#>       sbg:toolDefaultValue: None
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Reads to process in 1st step
#>       description: 'Number of reads to process for the 1st step. 0: 1-step only, no
#>         2nd pass; use very large number to map all reads in the first step (int>0).'
#>       streamable: no
#>       id: '#twopass1readsN'
#>       sbg:category: 2-pass mapping
#>       sbg:toolDefaultValue: '-1'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Extra alignment score
#>       description: Extra alignment score for alignments that cross database junctions.
#>       streamable: no
#>       id: '#sjdbScore'
#>       sbg:category: Splice junctions database
#>       sbg:toolDefaultValue: '2'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: '"Overhang" length'
#>       description: Length of the donor/acceptor sequence on each side of the junctions,
#>         ideally = (mate_length - 1) (int >= 0), if int = 0, splice junction database
#>         is not used.
#>       streamable: no
#>       id: '#sjdbOverhang'
#>       sbg:category: Splice junctions database
#>       sbg:toolDefaultValue: '100'
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: sjdbInsertSave
#>         symbols:
#>         - Basic
#>         - All
#>         - None
#>         type: enum
#>       label: Save junction files
#>       description: 'Which files to save when sjdb junctions are inserted on the fly
#>         at the mapping step. None: not saving files at all; Basic: only small junction/transcript
#>         files; All: all files including big Genome, SA and SAindex. These files are
#>         output as archive.'
#>       streamable: no
#>       id: '#sjdbInsertSave'
#>       sbg:category: Splice junctions database
#>       sbg:toolDefaultValue: None
#>       required: no
#>     - type:
#>       - 'null'
#>       - string
#>       label: Exons' parents name
#>       description: Tag name to be used as exons' transcript-parents.
#>       streamable: no
#>       id: '#sjdbGTFtagExonParentTranscript'
#>       sbg:category: Splice junctions database
#>       sbg:toolDefaultValue: transcript_id
#>       required: no
#>     - type:
#>       - 'null'
#>       - string
#>       label: Gene name
#>       description: Tag name to be used as exons' gene-parents.
#>       streamable: no
#>       id: '#sjdbGTFtagExonParentGene'
#>       sbg:category: Splice junctions database
#>       sbg:toolDefaultValue: gene_id
#>       required: no
#>     - type:
#>       - 'null'
#>       - items: File
#>         type: array
#>       label: Splice junction file
#>       description: Gene model annotations and/or known transcripts. No need to include
#>         this input, except in case of using "on the fly" annotations.
#>       streamable: no
#>       id: '#sjdbGTFfile'
#>       sbg:category: Basic
#>       sbg:fileTypes: GTF, GFF, TXT
#>       required: no
#>     - type:
#>       - 'null'
#>       - string
#>       label: Set exons feature
#>       description: Feature type in GTF file to be used as exons for building transcripts.
#>       streamable: no
#>       id: '#sjdbGTFfeatureExon'
#>       sbg:category: Splice junctions database
#>       sbg:toolDefaultValue: exon
#>       required: no
#>     - type:
#>       - 'null'
#>       - string
#>       label: Chromosome names
#>       description: Prefix for chromosome names in a GTF file (e.g. 'chr' for using
#>         ENSMEBL annotations with UCSC geneomes).
#>       streamable: no
#>       id: '#sjdbGTFchrPrefix'
#>       sbg:category: Splice junctions database
#>       sbg:toolDefaultValue: '-'
#>       required: no
#>     - type:
#>       - 'null'
#>       - float
#>       label: Search start point normalized
#>       description: seedSearchStartLmax normalized to read length (sum of mates' lengths
#>         for paired-end reads).
#>       streamable: no
#>       id: '#seedSearchStartLmaxOverLread'
#>       inputBinding:
#>         position: 0
#>         prefix: --seedSearchStartLmaxOverLread
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: '1.0'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Search start point
#>       description: Defines the search start point through the read - the read is split
#>         into pieces no longer than this value (int>0).
#>       streamable: no
#>       id: '#seedSearchStartLmax'
#>       inputBinding:
#>         position: 0
#>         prefix: --seedSearchStartLmax
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: '50'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Max seed length
#>       description: Defines the maximum length of the seeds, if =0 max seed length
#>         is infinite (int>=0).
#>       streamable: no
#>       id: '#seedSearchLmax'
#>       inputBinding:
#>         position: 0
#>         prefix: --seedSearchLmax
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: '0'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Max seeds per window
#>       description: Max number of seeds per window (int>=0).
#>       streamable: no
#>       id: '#seedPerWindowNmax'
#>       inputBinding:
#>         position: 0
#>         prefix: --seedPerWindowNmax
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: '50'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Max seeds per read
#>       description: Max number of seeds per read (int>=0).
#>       streamable: no
#>       id: '#seedPerReadNmax'
#>       inputBinding:
#>         position: 0
#>         prefix: --seedPerReadNmax
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: '1000'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Max one-seed loci per window
#>       description: Max number of one seed loci per window (int>=0).
#>       streamable: no
#>       id: '#seedNoneLociPerWindow'
#>       inputBinding:
#>         position: 0
#>         prefix: --seedNoneLociPerWindow
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: '10'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Filter pieces for stitching
#>       description: Only pieces that map fewer than this value are utilized in the
#>         stitching procedure (int>=0).
#>       streamable: no
#>       id: '#seedMultimapNmax'
#>       inputBinding:
#>         position: 0
#>         prefix: --seedMultimapNmax
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: '10000'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Max score reduction
#>       description: Maximum score reduction while searching for SJ boundaries in the
#>         stitching step.
#>       streamable: no
#>       id: '#scoreStitchSJshift'
#>       inputBinding:
#>         position: 0
#>         prefix: --scoreStitchSJshift
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Scoring
#>       sbg:toolDefaultValue: '1'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Insertion Open Penalty
#>       description: Insertion open penalty.
#>       streamable: no
#>       id: '#scoreInsOpen'
#>       inputBinding:
#>         position: 0
#>         prefix: --scoreInsOpen
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Scoring
#>       sbg:toolDefaultValue: '-2'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Insertion extension penalty
#>       description: Insertion extension penalty per base (in addition to --scoreInsOpen).
#>       streamable: no
#>       id: '#scoreInsBase'
#>       inputBinding:
#>         position: 0
#>         prefix: --scoreInsBase
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Scoring
#>       sbg:toolDefaultValue: '-2'
#>       required: no
#>     - type:
#>       - 'null'
#>       - float
#>       label: Log scaled score
#>       description: 'Extra score logarithmically scaled with genomic length of the
#>         alignment: <int>*log2(genomicLength).'
#>       streamable: no
#>       id: '#scoreGenomicLengthLog2scale'
#>       inputBinding:
#>         position: 0
#>         prefix: --scoreGenomicLengthLog2scale
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Scoring
#>       sbg:toolDefaultValue: '-0.25'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Non-canonical gap open
#>       description: Non-canonical gap open penalty (in addition to --scoreGap).
#>       streamable: no
#>       id: '#scoreGapNoncan'
#>       inputBinding:
#>         position: 0
#>         prefix: --scoreGapNoncan
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Scoring
#>       sbg:toolDefaultValue: '-8'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: GC/AG and CT/GC gap open
#>       description: GC/AG and CT/GC gap open penalty (in addition to --scoreGap).
#>       streamable: no
#>       id: '#scoreGapGCAG'
#>       inputBinding:
#>         position: 0
#>         prefix: --scoreGapGCAG
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Scoring
#>       sbg:toolDefaultValue: '-4'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: AT/AC and GT/AT gap open
#>       description: AT/AC and GT/AT gap open penalty (in addition to --scoreGap).
#>       streamable: no
#>       id: '#scoreGapATAC'
#>       inputBinding:
#>         position: 0
#>         prefix: --scoreGapATAC
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Scoring
#>       sbg:toolDefaultValue: '-8'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Gap open penalty
#>       description: Gap open penalty.
#>       streamable: no
#>       id: '#scoreGap'
#>       inputBinding:
#>         position: 0
#>         prefix: --scoreGap
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Scoring
#>       sbg:toolDefaultValue: '0'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Deletion open penalty
#>       description: Deletion open penalty.
#>       streamable: no
#>       id: '#scoreDelOpen'
#>       inputBinding:
#>         position: 0
#>         prefix: --scoreDelOpen
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Scoring
#>       sbg:toolDefaultValue: '-2'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Deletion extension penalty
#>       description: Deletion extension penalty per base (in addition to --scoreDelOpen).
#>       streamable: no
#>       id: '#scoreDelBase'
#>       inputBinding:
#>         position: 0
#>         prefix: --scoreDelBase
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Scoring
#>       sbg:toolDefaultValue: '-2'
#>       required: no
#>     - type:
#>       - 'null'
#>       - string
#>       label: Sequencing center
#>       description: Specify the sequencing center for RG line.
#>       streamable: no
#>       id: '#rg_seq_center'
#>       sbg:category: Read group
#>       sbg:toolDefaultValue: Inferred from metadata
#>       required: no
#>     - type:
#>       - 'null'
#>       - string
#>       label: Sample ID
#>       description: Specify the sample ID for RG line.
#>       streamable: no
#>       id: '#rg_sample_id'
#>       sbg:category: Read group
#>       sbg:toolDefaultValue: Inferred from metadata
#>       required: no
#>     - type:
#>       - 'null'
#>       - string
#>       label: Platform unit ID
#>       description: Specify the platform unit ID for RG line.
#>       streamable: no
#>       id: '#rg_platform_unit_id'
#>       sbg:category: Read group
#>       sbg:toolDefaultValue: Inferred from metadata
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: rg_platform
#>         symbols:
#>         - LS 454
#>         - Helicos
#>         - Illumina
#>         - ABI SOLiD
#>         - Ion Torrent PGM
#>         - PacBio
#>         type: enum
#>       label: Platform
#>       description: Specify the version of the technology that was used for sequencing
#>         or assaying.
#>       streamable: no
#>       id: '#rg_platform'
#>       sbg:category: Read group
#>       sbg:toolDefaultValue: Inferred from metadata
#>       required: no
#>     - type:
#>       - 'null'
#>       - string
#>       label: Median fragment length
#>       description: Specify the median fragment length for RG line.
#>       streamable: no
#>       id: '#rg_mfl'
#>       sbg:category: Read group
#>       sbg:toolDefaultValue: Inferred from metadata
#>       required: no
#>     - type:
#>       - 'null'
#>       - string
#>       label: Library ID
#>       description: Specify the library ID for RG line.
#>       streamable: no
#>       id: '#rg_library_id'
#>       sbg:category: Read group
#>       sbg:toolDefaultValue: Inferred from metadata
#>       required: no
#>     - type:
#>       - items: File
#>         type: array
#>       label: Read sequence
#>       description: Read sequence.
#>       streamable: no
#>       id: '#reads'
#>       inputBinding:
#>         position: 10
#>         separate: yes
#>         itemSeparator: ' '
#>         valueFrom:
#>           engine: '#cwl-js-engine'
#>           script: "{\t\n  var list = [].concat($job.inputs.reads)\n  \n  var resp
#>             = []\n  \n  if (list.length == 1){\n    resp.push(list[0].path)\n    \n
#>             \ }else if (list.length == 2){    \n    \n    left = \"\"\n    right =
#>             \"\"\n      \n    for (index = 0; index < list.length; ++index) {\n      \n
#>             \     if (list[index].metadata != null){\n        if (list[index].metadata.paired_end
#>             == 1){\n          left = list[index].path\n        }else if (list[index].metadata.paired_end
#>             == 2){\n          right = list[index].path\n        }\n      }\n    }\n
#>             \   \n    if (left != \"\" && right != \"\"){      \n      resp.push(left)\n
#>             \     resp.push(right)\n    }\n  }\n  else if (list.length > 2){\n    left
#>             = []\n    right = []\n      \n    for (index = 0; index < list.length;
#>             ++index) {\n      \n      if (list[index].metadata != null){\n        if
#>             (list[index].metadata.paired_end == 1){\n          left.push(list[index].path)\n
#>             \       }else if (list[index].metadata.paired_end == 2){\n          right.push(list[index].path)\n
#>             \       }\n      }\n    }\n    left_join = left.join()\n    right_join
#>             = right.join()\n    if (left != [] && right != []){      \n      resp.push(left_join)\n
#>             \     resp.push(right_join)\n    }\t\n  }\n  \n  if(resp.length > 0){
#>             \   \n    return \"--readFilesIn \".concat(resp.join(\" \"))\n  }\n}"
#>           class: Expression
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Basic
#>       sbg:fileTypes: FASTA, FASTQ, FA, FQ, FASTQ.GZ, FQ.GZ, FASTQ.BZ2, FQ.BZ2
#>       required: yes
#>     - type:
#>       - 'null'
#>       - name: readMatesLengthsIn
#>         symbols:
#>         - NotEqual
#>         - Equal
#>         type: enum
#>       label: Reads lengths
#>       description: Equal/Not equal - lengths of names, sequences, qualities for both
#>         mates are the same/not the same. "Not equal" is safe in all situations.
#>       streamable: no
#>       id: '#readMatesLengthsIn'
#>       inputBinding:
#>         position: 0
#>         prefix: --readMatesLengthsIn
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Read parameters
#>       sbg:toolDefaultValue: NotEqual
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Reads to map
#>       description: Number of reads to map from the beginning of the file.
#>       streamable: no
#>       id: '#readMapNumber'
#>       inputBinding:
#>         position: 0
#>         prefix: --readMapNumber
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Read parameters
#>       sbg:toolDefaultValue: '-1'
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: quantTranscriptomeBan
#>         symbols:
#>         - IndelSoftclipSingleend
#>         - Singleend
#>         type: enum
#>       label: Prohibit alignment type
#>       description: 'Prohibit various alignment type. IndelSoftclipSingleend: prohibit
#>         indels, soft clipping and single-end alignments - compatible with RSEM; Singleend:
#>         prohibit single-end alignments.'
#>       streamable: no
#>       id: '#quantTranscriptomeBan'
#>       inputBinding:
#>         position: 0
#>         prefix: --quantTranscriptomeBan
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Quantification of Annotations
#>       sbg:toolDefaultValue: IndelSoftclipSingleend
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: quantMode
#>         symbols:
#>         - TranscriptomeSAM
#>         - GeneCounts
#>         type: enum
#>       label: Quantification mode
#>       description: Types of quantification requested. 'TranscriptomeSAM' option outputs
#>         SAM/BAM alignments to transcriptome into a separate file. With 'GeneCounts'
#>         option, STAR will count number of reads per gene while mapping.
#>       streamable: no
#>       id: '#quantMode'
#>       sbg:category: Quantification of Annotations
#>       sbg:toolDefaultValue: '-'
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: outSortingType
#>         symbols:
#>         - Unsorted
#>         - SortedByCoordinate
#>         - Unsorted SortedByCoordinate
#>         type: enum
#>       label: Output sorting type
#>       description: Type of output sorting.
#>       streamable: no
#>       id: '#outSortingType'
#>       sbg:category: Output
#>       sbg:toolDefaultValue: SortedByCoordinate
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: outSJfilterReads
#>         symbols:
#>         - All
#>         - Unique
#>         type: enum
#>       label: Collapsed junctions reads
#>       description: 'Which reads to consider for collapsed splice junctions output.
#>         All: all reads, unique- and multi-mappers; Unique: uniquely mapping reads
#>         only.'
#>       streamable: no
#>       id: '#outSJfilterReads'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSJfilterReads
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: 'Output filtering: splice junctions'
#>       sbg:toolDefaultValue: All
#>       required: no
#>     - type:
#>       - 'null'
#>       - items: int
#>         type: array
#>       label: Min overhang SJ
#>       description: Minimum overhang length for splice junctions on both sides for
#>         each of the motifs. To set no output for desired motif, assign -1 to the corresponding
#>         field. Does not apply to annotated junctions.
#>       streamable: no
#>       id: '#outSJfilterOverhangMin'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSJfilterOverhangMin
#>         separate: yes
#>         itemSeparator: ' '
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: 'Output filtering: splice junctions'
#>       sbg:toolDefaultValue: 30 12 12 12
#>       required: no
#>     - type:
#>       - 'null'
#>       - items: int
#>         type: array
#>       label: Max gap allowed
#>       description: 'Maximum gap allowed for junctions supported by 1,2,3...N reads
#>         (int >= 0) i.e. by default junctions supported by 1 read can have gaps <=50000b,
#>         by 2 reads: <=100000b, by 3 reads: <=200000. By 4 or more reads: any gap <=alignIntronMax.
#>         Does not apply to annotated junctions.'
#>       streamable: no
#>       id: '#outSJfilterIntronMaxVsReadN'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSJfilterIntronMaxVsReadN
#>         separate: yes
#>         itemSeparator: ' '
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: 'Output filtering: splice junctions'
#>       sbg:toolDefaultValue: 50000 100000 200000
#>       required: no
#>     - type:
#>       - 'null'
#>       - items: int
#>         type: array
#>       label: Min distance to other donor/acceptor
#>       description: Minimum allowed distance to other junctions' donor/acceptor for
#>         each of the motifs (int >= 0). Does not apply to annotated junctions.
#>       streamable: no
#>       id: '#outSJfilterDistToOtherSJmin'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSJfilterDistToOtherSJmin
#>         separate: yes
#>         itemSeparator: ' '
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: 'Output filtering: splice junctions'
#>       sbg:toolDefaultValue: 10 0 5 10
#>       required: no
#>     - type:
#>       - 'null'
#>       - items: int
#>         type: array
#>       label: Min unique count
#>       description: Minimum uniquely mapping read count per junction for each of the
#>         motifs. To set no output for desired motif, assign -1 to the corresponding
#>         field. Junctions are output if one of --outSJfilterCountUniqueMin OR --outSJfilterCountTotalMin
#>         conditions are satisfied. Does not apply to annotated junctions.
#>       streamable: no
#>       id: '#outSJfilterCountUniqueMin'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSJfilterCountUniqueMin
#>         separate: yes
#>         itemSeparator: ' '
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: 'Output filtering: splice junctions'
#>       sbg:toolDefaultValue: 3 1 1 1
#>       required: no
#>     - type:
#>       - 'null'
#>       - items: int
#>         type: array
#>       label: Min total count
#>       description: Minimum total (multi-mapping+unique) read count per junction for
#>         each of the motifs. To set no output for desired motif, assign -1 to the corresponding
#>         field. Junctions are output if one of --outSJfilterCountUniqueMin OR --outSJfilterCountTotalMin
#>         conditions are satisfied. Does not apply to annotated junctions.
#>       streamable: no
#>       id: '#outSJfilterCountTotalMin'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSJfilterCountTotalMin
#>         separate: yes
#>         itemSeparator: ' '
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: 'Output filtering: splice junctions'
#>       sbg:toolDefaultValue: 3 1 1 1
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: outSAMunmapped
#>         symbols:
#>         - None
#>         - Within
#>         type: enum
#>       label: Write unmapped in SAM
#>       description: 'Output of unmapped reads in the SAM format. None: no output Within:
#>         output unmapped reads within the main SAM file (i.e. Aligned.out.sam).'
#>       streamable: no
#>       id: '#outSAMunmapped'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSAMunmapped
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output
#>       sbg:toolDefaultValue: None
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: outSAMtype
#>         symbols:
#>         - SAM
#>         - BAM
#>         type: enum
#>       label: Output format
#>       description: Format of output alignments.
#>       streamable: no
#>       id: '#outSAMtype'
#>       inputBinding:
#>         position: 0
#>         separate: yes
#>         valueFrom:
#>           engine: '#cwl-js-engine'
#>           script: |-
#>             {
#>               SAM_type = $job.inputs.outSAMtype
#>               SORT_type = $job.inputs.outSortingType
#>               if (SAM_type && SORT_type) {
#>                 return "--outSAMtype ".concat(SAM_type, " ", SORT_type)
#>               }
#>             }
#>           class: Expression
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output
#>       sbg:toolDefaultValue: SAM
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: outSAMstrandField
#>         symbols:
#>         - None
#>         - intronMotif
#>         type: enum
#>       label: Strand field flag
#>       description: 'Cufflinks-like strand field flag. None: not used; intronMotif:
#>         strand derived from the intron motif. Reads with inconsistent and/or non-canonical
#>         introns are filtered out.'
#>       streamable: no
#>       id: '#outSAMstrandField'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSAMstrandField
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output
#>       sbg:toolDefaultValue: None
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: outSAMreadID
#>         symbols:
#>         - Standard
#>         - Number
#>         type: enum
#>       label: Read ID
#>       description: 'Read ID record type. Standard: first word (until space) from the
#>         FASTx read ID line, removing /1,/2 from the end; Number: read number (index)
#>         in the FASTx file.'
#>       streamable: no
#>       id: '#outSAMreadID'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSAMreadID
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output
#>       sbg:toolDefaultValue: Standard
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: outSAMprimaryFlag
#>         symbols:
#>         - OneBestScore
#>         - AllBestScore
#>         type: enum
#>       label: Primary alignments
#>       description: 'Which alignments are considered primary - all others will be marked
#>         with 0x100 bit in the FLAG. OneBestScore: only one alignment with the best
#>         score is primary; AllBestScore: all alignments with the best score are primary.'
#>       streamable: no
#>       id: '#outSAMprimaryFlag'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSAMprimaryFlag
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output
#>       sbg:toolDefaultValue: OneBestScore
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: outSAMorder
#>         symbols:
#>         - Paired
#>         - PairedKeepInputOrder
#>         type: enum
#>       label: Sorting in SAM
#>       description: 'Type of sorting for the SAM output. Paired: one mate after the
#>         other for all paired alignments; PairedKeepInputOrder: one mate after the
#>         other for all paired alignments, the order is kept the same as in the input
#>         FASTQ files.'
#>       streamable: no
#>       id: '#outSAMorder'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSAMorder
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output
#>       sbg:toolDefaultValue: Paired
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: outSAMmode
#>         symbols:
#>         - Full
#>         - NoQS
#>         type: enum
#>       label: SAM mode
#>       description: 'Mode of SAM output. Full: full SAM output; NoQS: full SAM but
#>         without quality scores.'
#>       streamable: no
#>       id: '#outSAMmode'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSAMmode
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output
#>       sbg:toolDefaultValue: Full
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: MAPQ value
#>       description: MAPQ value for unique mappers (0 to 255).
#>       streamable: no
#>       id: '#outSAMmapqUnique'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSAMmapqUnique
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output
#>       sbg:toolDefaultValue: '255'
#>       required: no
#>     - type:
#>       - 'null'
#>       - string
#>       label: SAM header @PG
#>       description: Extra @PG (software) line of the SAM header (in addition to STAR).
#>       streamable: no
#>       id: '#outSAMheaderPG'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSAMheaderPG
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output
#>       sbg:toolDefaultValue: '-'
#>       required: no
#>     - type:
#>       - 'null'
#>       - string
#>       label: SAM header @HD
#>       description: '@HD (header) line of the SAM header.'
#>       streamable: no
#>       id: '#outSAMheaderHD'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSAMheaderHD
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output
#>       sbg:toolDefaultValue: '-'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: OR SAM flag
#>       description: Set specific bits of the SAM FLAG.
#>       streamable: no
#>       id: '#outSAMflagOR'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSAMflagOR
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output
#>       sbg:toolDefaultValue: '0'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: AND SAM flag
#>       description: Set specific bits of the SAM FLAG.
#>       streamable: no
#>       id: '#outSAMflagAND'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSAMflagAND
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output
#>       sbg:toolDefaultValue: '65535'
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: outSAMattributes
#>         symbols:
#>         - Standard
#>         - NH
#>         - All
#>         - None
#>         type: enum
#>       label: SAM attributes
#>       description: 'Desired SAM attributes, in the order desired for the output SAM.
#>         NH: any combination in any order; Standard: NH HI AS nM; All: NH HI AS nM
#>         NM MD jM jI; None: no attributes.'
#>       streamable: no
#>       id: '#outSAMattributes'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSAMattributes
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output
#>       sbg:toolDefaultValue: Standard
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: outReadsUnmapped
#>         symbols:
#>         - None
#>         - Fastx
#>         type: enum
#>       label: Output unmapped reads
#>       description: 'Output of unmapped reads (besides SAM). None: no output; Fastx:
#>         output in separate fasta/fastq files, Unmapped.out.mate1/2.'
#>       streamable: no
#>       id: '#outReadsUnmapped'
#>       inputBinding:
#>         position: 0
#>         prefix: --outReadsUnmapped
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output
#>       sbg:toolDefaultValue: None
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Quality conversion
#>       description: Add this number to the quality score (e.g. to convert from Illumina
#>         to Sanger, use -31).
#>       streamable: no
#>       id: '#outQSconversionAdd'
#>       inputBinding:
#>         position: 0
#>         prefix: --outQSconversionAdd
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output
#>       sbg:toolDefaultValue: '0'
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: outFilterType
#>         symbols:
#>         - Normal
#>         - BySJout
#>         type: enum
#>       label: Filtering type
#>       description: 'Type of filtering. Normal: standard filtering using only current
#>         alignment; BySJout: keep only those reads that contain junctions that passed
#>         filtering into SJ.out.tab.'
#>       streamable: no
#>       id: '#outFilterType'
#>       inputBinding:
#>         position: 0
#>         prefix: --outFilterType
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output filtering
#>       sbg:toolDefaultValue: Normal
#>       required: no
#>     - type:
#>       - 'null'
#>       - float
#>       label: Min score normalized
#>       description: '''Minimum score'' normalized to read length (sum of mates'' lengths
#>         for paired-end reads).'
#>       streamable: no
#>       id: '#outFilterScoreMinOverLread'
#>       inputBinding:
#>         position: 0
#>         prefix: --outFilterScoreMinOverLread
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output filtering
#>       sbg:toolDefaultValue: '0.66'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Min score
#>       description: Alignment will be output only if its score is higher than this
#>         value.
#>       streamable: no
#>       id: '#outFilterScoreMin'
#>       inputBinding:
#>         position: 0
#>         prefix: --outFilterScoreMin
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output filtering
#>       sbg:toolDefaultValue: '0'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Multimapping score range
#>       description: The score range below the maximum score for multimapping alignments.
#>       streamable: no
#>       id: '#outFilterMultimapScoreRange'
#>       inputBinding:
#>         position: 0
#>         prefix: --outFilterMultimapScoreRange
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output filtering
#>       sbg:toolDefaultValue: '1'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Max number of mappings
#>       description: Read alignments will be output only if the read maps fewer than
#>         this value, otherwise no alignments will be output.
#>       streamable: no
#>       id: '#outFilterMultimapNmax'
#>       inputBinding:
#>         position: 0
#>         prefix: --outFilterMultimapNmax
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output filtering
#>       sbg:toolDefaultValue: '10'
#>       required: no
#>     - type:
#>       - 'null'
#>       - float
#>       label: Mismatches to *read* length
#>       description: Alignment will be output only if its ratio of mismatches to *read*
#>         length is less than this value.
#>       streamable: no
#>       id: '#outFilterMismatchNoverReadLmax'
#>       inputBinding:
#>         position: 0
#>         prefix: --outFilterMismatchNoverReadLmax
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output filtering
#>       sbg:toolDefaultValue: '1'
#>       required: no
#>     - type:
#>       - 'null'
#>       - float
#>       label: Mismatches to *mapped* length
#>       description: Alignment will be output only if its ratio of mismatches to *mapped*
#>         length is less than this value.
#>       streamable: no
#>       id: '#outFilterMismatchNoverLmax'
#>       inputBinding:
#>         position: 0
#>         prefix: --outFilterMismatchNoverLmax
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output filtering
#>       sbg:toolDefaultValue: '0.3'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Max number of mismatches
#>       description: Alignment will be output only if it has fewer mismatches than this
#>         value.
#>       streamable: no
#>       id: '#outFilterMismatchNmax'
#>       inputBinding:
#>         position: 0
#>         prefix: --outFilterMismatchNmax
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output filtering
#>       sbg:toolDefaultValue: '10'
#>       required: no
#>     - type:
#>       - 'null'
#>       - float
#>       label: Min matched bases normalized
#>       description: '''Minimum matched bases'' normalized to read length (sum of mates
#>         lengths for paired-end reads).'
#>       streamable: no
#>       id: '#outFilterMatchNminOverLread'
#>       inputBinding:
#>         position: 0
#>         prefix: --outFilterMatchNminOverLread
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output filtering
#>       sbg:toolDefaultValue: '0.66'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Min matched bases
#>       description: Alignment will be output only if the number of matched bases is
#>         higher than this value.
#>       streamable: no
#>       id: '#outFilterMatchNmin'
#>       inputBinding:
#>         position: 0
#>         prefix: --outFilterMatchNmin
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output filtering
#>       sbg:toolDefaultValue: '0'
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: outFilterIntronMotifs
#>         symbols:
#>         - None
#>         - RemoveNoncanonical
#>         - RemoveNoncanonicalUnannotated
#>         type: enum
#>       label: Motifs filtering
#>       description: 'Filter alignment using their motifs. None: no filtering; RemoveNoncanonical:
#>         filter out alignments that contain non-canonical junctions; RemoveNoncanonicalUnannotated:
#>         filter out alignments that contain non-canonical unannotated junctions when
#>         using annotated splice junctions database. The annotated non-canonical junctions
#>         will be kept.'
#>       streamable: no
#>       id: '#outFilterIntronMotifs'
#>       inputBinding:
#>         position: 0
#>         prefix: --outFilterIntronMotifs
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output filtering
#>       sbg:toolDefaultValue: None
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Max insert junctions
#>       description: Maximum number of junction to be inserted to the genome on the
#>         fly at the mapping stage, including those from annotations and those detected
#>         in the 1st step of the 2-pass run.
#>       streamable: no
#>       id: '#limitSjdbInsertNsj'
#>       inputBinding:
#>         position: 0
#>         prefix: --limitSjdbInsertNsj
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Limits
#>       sbg:toolDefaultValue: '1000000'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Junctions max number
#>       description: Max number of junctions for one read (including all multi-mappers).
#>       streamable: no
#>       id: '#limitOutSJoneRead'
#>       inputBinding:
#>         position: 0
#>         prefix: --limitOutSJoneRead
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Limits
#>       sbg:toolDefaultValue: '1000'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Collapsed junctions max number
#>       description: Max number of collapsed junctions.
#>       streamable: no
#>       id: '#limitOutSJcollapsed'
#>       inputBinding:
#>         position: 0
#>         prefix: --limitOutSJcollapsed
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Limits
#>       sbg:toolDefaultValue: '1000000'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Limit BAM sorting memory
#>       description: Maximum available RAM for sorting BAM. If set to 0, it will be
#>         set to the genome index size.
#>       streamable: no
#>       id: '#limitBAMsortRAM'
#>       inputBinding:
#>         position: 0
#>         prefix: --limitBAMsortRAM
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Limits
#>       sbg:toolDefaultValue: '0'
#>       required: no
#>     - type:
#>       - 'null'
#>       - string
#>       label: Genome dir name
#>       description: Name of the directory which contains genome files (when genome.tar
#>         is uncompressed).
#>       streamable: no
#>       id: '#genomeDirName'
#>       inputBinding:
#>         position: 0
#>         prefix: --genomeDir
#>         separate: yes
#>         valueFrom:
#>           engine: '#cwl-js-engine'
#>           script: $job.inputs.genomeDirName || "genomeDir"
#>           class: Expression
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Basic
#>       sbg:toolDefaultValue: genomeDir
#>       required: no
#>     - type:
#>       - File
#>       label: Genome files
#>       description: Genome files created using STAR Genome Generate.
#>       streamable: no
#>       id: '#genome'
#>       sbg:category: Basic
#>       sbg:fileTypes: TAR
#>       required: yes
#>     - type:
#>       - 'null'
#>       - items: int
#>         type: array
#>       label: Clip 5p bases
#>       description: Number of bases to clip from 5p of each mate. In case only one
#>         value is given, it will be assumed the same for both mates.
#>       streamable: no
#>       id: '#clip5pNbases'
#>       inputBinding:
#>         position: 0
#>         prefix: --clip5pNbases
#>         separate: yes
#>         itemSeparator: ' '
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Read parameters
#>       sbg:toolDefaultValue: '0'
#>       required: no
#>     - type:
#>       - 'null'
#>       - items: int
#>         type: array
#>       label: Clip 3p bases
#>       description: Number of bases to clip from 3p of each mate. In case only one
#>         value is given, it will be assumed the same for both mates.
#>       streamable: no
#>       id: '#clip3pNbases'
#>       inputBinding:
#>         position: 0
#>         prefix: --clip3pNbases
#>         separate: yes
#>         itemSeparator: ' '
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Read parameters
#>       sbg:toolDefaultValue: '0'
#>       required: no
#>     - type:
#>       - 'null'
#>       - items: int
#>         type: array
#>       label: Clip 3p after adapter seq.
#>       description: Number of bases to clip from 3p of each mate after the adapter
#>         clipping. In case only one value is given, it will be assumed the same for
#>         both mates.
#>       streamable: no
#>       id: '#clip3pAfterAdapterNbases'
#>       inputBinding:
#>         position: 0
#>         prefix: --clip3pAfterAdapterNbases
#>         separate: yes
#>         itemSeparator: ' '
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Read parameters
#>       sbg:toolDefaultValue: '0'
#>       required: no
#>     - type:
#>       - 'null'
#>       - items: string
#>         type: array
#>       label: Clip 3p adapter sequence
#>       description: Adapter sequence to clip from 3p of each mate. In case only one
#>         value is given, it will be assumed the same for both mates.
#>       streamable: no
#>       id: '#clip3pAdapterSeq'
#>       inputBinding:
#>         position: 0
#>         prefix: --clip3pAdapterSeq
#>         separate: yes
#>         itemSeparator: ' '
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Read parameters
#>       sbg:toolDefaultValue: '-'
#>       required: no
#>     - type:
#>       - 'null'
#>       - items: float
#>         type: array
#>       label: Max mismatches proportions
#>       description: Max proportion of mismatches for 3p adapter clipping for each mate.
#>         In case only one value is given, it will be assumed the same for both mates.
#>       streamable: no
#>       id: '#clip3pAdapterMMp'
#>       inputBinding:
#>         position: 0
#>         prefix: --clip3pAdapterMMp
#>         separate: yes
#>         itemSeparator: ' '
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Read parameters
#>       sbg:toolDefaultValue: '0.1'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Min segment length
#>       description: Minimum length of chimeric segment length, if =0, no chimeric output
#>         (int>=0).
#>       streamable: no
#>       id: '#chimSegmentMin'
#>       inputBinding:
#>         position: 0
#>         prefix: --chimSegmentMin
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Chimeric Alignments
#>       sbg:toolDefaultValue: '15'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Min separation score
#>       description: Minimum difference (separation) between the best chimeric score
#>         and the next one (int>=0).
#>       streamable: no
#>       id: '#chimScoreSeparation'
#>       inputBinding:
#>         position: 0
#>         prefix: --chimScoreSeparation
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Chimeric Alignments
#>       sbg:toolDefaultValue: '10'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Min total score
#>       description: Minimum total (summed) score of the chimeric segments (int>=0).
#>       streamable: no
#>       id: '#chimScoreMin'
#>       inputBinding:
#>         position: 0
#>         prefix: --chimScoreMin
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Chimeric Alignments
#>       sbg:toolDefaultValue: '0'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Non-GT/AG penalty
#>       description: Penalty for a non-GT/AG chimeric junction.
#>       streamable: no
#>       id: '#chimScoreJunctionNonGTAG'
#>       inputBinding:
#>         position: 0
#>         prefix: --chimScoreJunctionNonGTAG
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Chimeric Alignments
#>       sbg:toolDefaultValue: '-1'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Max drop score
#>       description: Max drop (difference) of chimeric score (the sum of scores of all
#>         chimeric segements) from the read length (int>=0).
#>       streamable: no
#>       id: '#chimScoreDropMax'
#>       inputBinding:
#>         position: 0
#>         prefix: --chimScoreDropMax
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Chimeric Alignments
#>       sbg:toolDefaultValue: '20'
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: chimOutType
#>         symbols:
#>         - SeparateSAMold
#>         - Within
#>         type: enum
#>       label: Chimeric output type
#>       description: 'Type of chimeric output. SeparateSAMold: output old SAM into separate
#>         Chimeric.out.sam file; Within: output into main aligned SAM/BAM files.'
#>       streamable: no
#>       id: '#chimOutType'
#>       sbg:category: Chimeric Alignments
#>       sbg:toolDefaultValue: SeparateSAMold
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Min junction overhang
#>       description: Minimum overhang for a chimeric junction (int>=0).
#>       streamable: no
#>       id: '#chimJunctionOverhangMin'
#>       inputBinding:
#>         position: 0
#>         prefix: --chimJunctionOverhangMin
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Chimeric Alignments
#>       sbg:toolDefaultValue: '20'
#>       required: no
#>     - type:
#>       - 'null'
#>       - float
#>       label: Max windows per read
#>       description: Max number of windows per read (int>0).
#>       streamable: no
#>       id: '#alignWindowsPerReadNmax'
#>       inputBinding:
#>         position: 0
#>         prefix: --alignWindowsPerReadNmax
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: '10000'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Max transcripts per window
#>       description: Max number of transcripts per window (int>0).
#>       streamable: no
#>       id: '#alignTranscriptsPerWindowNmax'
#>       inputBinding:
#>         position: 0
#>         prefix: --alignTranscriptsPerWindowNmax
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: '100'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Max transcripts per read
#>       description: Max number of different alignments per read to consider (int>0).
#>       streamable: no
#>       id: '#alignTranscriptsPerReadNmax'
#>       inputBinding:
#>         position: 0
#>         prefix: --alignTranscriptsPerReadNmax
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: '10000'
#>       required: no
#>     - type:
#>       - 'null'
#>       - float
#>       label: Min mapped length normalized
#>       description: alignSplicedMateMapLmin normalized to mate length (float>0).
#>       streamable: no
#>       id: '#alignSplicedMateMapLminOverLmate'
#>       inputBinding:
#>         position: 0
#>         prefix: --alignSplicedMateMapLminOverLmate
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: '0.66'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Min mapped length
#>       description: Minimum mapped length for a read mate that is spliced (int>0).
#>       streamable: no
#>       id: '#alignSplicedMateMapLmin'
#>       inputBinding:
#>         position: 0
#>         prefix: --alignSplicedMateMapLmin
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: '0'
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: alignSoftClipAtReferenceEnds
#>         symbols:
#>         - 'Yes'
#>         - 'No'
#>         type: enum
#>       label: Soft clipping
#>       description: 'Option which allows soft clipping of alignments at the reference
#>         (chromosome) ends. Can be disabled for compatibility with Cufflinks/Cuffmerge.
#>         Yes: Enables soft clipping; No: Disables soft clipping.'
#>       streamable: no
#>       id: '#alignSoftClipAtReferenceEnds'
#>       inputBinding:
#>         position: 0
#>         prefix: --alignSoftClipAtReferenceEnds
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: 'Yes'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Min overhang
#>       description: Minimum overhang (i.e. block size) for spliced alignments (int>0).
#>       streamable: no
#>       id: '#alignSJoverhangMin'
#>       inputBinding:
#>         position: 0
#>         prefix: --alignSJoverhangMin
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: '5'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: 'Min overhang: annotated'
#>       description: Minimum overhang (i.e. block size) for annotated (sjdb) spliced
#>         alignments (int>0).
#>       streamable: no
#>       id: '#alignSJDBoverhangMin'
#>       inputBinding:
#>         position: 0
#>         prefix: --alignSJDBoverhangMin
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: '3'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Max mates gap
#>       description: Maximum gap between two mates, if 0, max intron gap will be determined
#>         by (2^winBinNbits)*winAnchorDistNbins.
#>       streamable: no
#>       id: '#alignMatesGapMax'
#>       inputBinding:
#>         position: 0
#>         prefix: --alignMatesGapMax
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: '0'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Min intron size
#>       description: 'Minimum intron size: genomic gap is considered intron if its length
#>         >= alignIntronMin, otherwise it is considered Deletion (int>=0).'
#>       streamable: no
#>       id: '#alignIntronMin'
#>       inputBinding:
#>         position: 0
#>         prefix: --alignIntronMin
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: '21'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Max intron size
#>       description: Maximum intron size, if 0, max intron size will be determined by
#>         (2^winBinNbits)*winAnchorDistNbins.
#>       streamable: no
#>       id: '#alignIntronMax'
#>       inputBinding:
#>         position: 0
#>         prefix: --alignIntronMax
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: '0'
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: alignEndsType
#>         symbols:
#>         - Local
#>         - EndToEnd
#>         type: enum
#>       label: Alignment type
#>       description: 'Type of read ends alignment. Local: standard local alignment with
#>         soft-clipping allowed. EndToEnd: force end to end read alignment, do not soft-clip.'
#>       streamable: no
#>       id: '#alignEndsType'
#>       inputBinding:
#>         position: 0
#>         prefix: --alignEndsType
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: Local
#>       required: no
#>     outputs:
#>     - type:
#>       - 'null'
#>       - items: File
#>         type: array
#>       label: Unmapped reads
#>       description: Output of unmapped reads.
#>       streamable: no
#>       id: '#unmapped_reads'
#>       outputBinding:
#>         glob: '*Unmapped.out*'
#>       sbg:fileTypes: FASTQ
#>     - type:
#>       - 'null'
#>       - File
#>       label: Transcriptome alignments
#>       description: Alignments translated into transcript coordinates.
#>       streamable: no
#>       id: '#transcriptome_aligned_reads'
#>       outputBinding:
#>         glob: '*Transcriptome*'
#>       sbg:fileTypes: BAM
#>     - type:
#>       - 'null'
#>       - File
#>       label: Splice junctions
#>       description: High confidence collapsed splice junctions in tab-delimited format.
#>         Only junctions supported by uniquely mapping reads are reported.
#>       streamable: no
#>       id: '#splice_junctions'
#>       outputBinding:
#>         glob: '*SJ.out.tab'
#>       sbg:fileTypes: TAB
#>     - type:
#>       - 'null'
#>       - File
#>       label: Reads per gene
#>       description: File with number of reads per gene. A read is counted if it overlaps
#>         (1nt or more) one and only one gene.
#>       streamable: no
#>       id: '#reads_per_gene'
#>       outputBinding:
#>         glob: '*ReadsPerGene*'
#>       sbg:fileTypes: TAB
#>     - type:
#>       - 'null'
#>       - items: File
#>         type: array
#>       label: Log files
#>       description: Log files produced during alignment.
#>       streamable: no
#>       id: '#log_files'
#>       outputBinding:
#>         glob: '*Log*.out'
#>       sbg:fileTypes: OUT
#>     - type:
#>       - 'null'
#>       - File
#>       label: Intermediate genome files
#>       description: Archive with genome files produced when annotations are included
#>         on the fly (in the mapping step).
#>       streamable: no
#>       id: '#intermediate_genome'
#>       outputBinding:
#>         glob: '*_STARgenome.tar'
#>       sbg:fileTypes: TAR
#>     - type:
#>       - 'null'
#>       - File
#>       label: Chimeric junctions
#>       description: If chimSegmentMin in 'Chimeric Alignments' section is set to 0,
#>         'Chimeric Junctions' won't be output.
#>       streamable: no
#>       id: '#chimeric_junctions'
#>       outputBinding:
#>         glob: '*Chimeric.out.junction'
#>       sbg:fileTypes: JUNCTION
#>     - type:
#>       - 'null'
#>       - File
#>       label: Chimeric alignments
#>       description: Aligned Chimeric sequences SAM - if chimSegmentMin = 0, no Chimeric
#>         Alignment SAM and Chimeric Junctions outputs.
#>       streamable: no
#>       id: '#chimeric_alignments'
#>       outputBinding:
#>         glob: '*.Chimeric.out.sam'
#>       sbg:fileTypes: SAM
#>     - type:
#>       - 'null'
#>       - File
#>       label: Aligned SAM/BAM
#>       description: Aligned sequence in SAM/BAM format.
#>       streamable: no
#>       id: '#aligned_reads'
#>       outputBinding:
#>         glob:
#>           engine: '#cwl-js-engine'
#>           script: |-
#>             {
#>               if ($job.inputs.outSortingType == 'SortedByCoordinate') {
#>                 sort_name = '.sortedByCoord'
#>               }
#>               else {
#>                 sort_name = ''
#>               }
#>               if ($job.inputs.outSAMtype == 'BAM') {
#>                 sam_name = "*.Aligned".concat( sort_name, '.out.bam')
#>               }
#>               else {
#>                 sam_name = "*.Aligned.out.sam"
#>               }
#>               return sam_name
#>             }
#>           class: Expression
#>       sbg:fileTypes: SAM, BAM
#>     requirements:
#>     - class: ExpressionEngineRequirement
#>       id: '#cwl-js-engine'
#>       requirements:
#>       - class: DockerRequirement
#>         dockerPull: rabix/js-engine
#>     hints:
#>     - class: DockerRequirement
#>       dockerPull: images.sbgenomics.com/ana_d/star:2.4.2a
#>       dockerImageId: a4b0ad2c3cae
#>     - class: sbg:MemRequirement
#>       value: 60000
#>     - class: sbg:CPURequirement
#>       value: 15
#>     label: STAR
#>     description: STAR is an ultrafast universal RNA-seq aligner. It has very high
#>       mapping speed, accurate alignment of contiguous and spliced reads, detection
#>       of polyA-tails, non-canonical splices and chimeric (fusion) junctions. It works
#>       with reads starting from lengths ~15 bases up to ~300 bases. In case of having
#>       longer reads, use of STAR Long is recommended.
#>     class: CommandLineTool
#>     baseCommand:
#>     - tar
#>     - -xvf
#>     - class: Expression
#>       script: $job.inputs.genome.path
#>       engine: '#cwl-js-engine'
#>     - '&&'
#>     - /opt/STAR
#>     - --runThreadN
#>     - class: Expression
#>       script: |-
#>         {
#>           return $job.allocatedResources.cpu
#>         }
#>       engine: '#cwl-js-engine'
#>     arguments:
#>     - position: 0
#>       separate: yes
#>       valueFrom:
#>         engine: '#cwl-js-engine'
#>         script: |-
#>           {
#>             file = [].concat($job.inputs.reads)[0].path
#>             extension = /(?:\.([^.]+))?$/.exec(file)[1]
#>             if (extension == "gz") {
#>               return "--readFilesCommand zcat"
#>             } else if (extension == "bz2") {
#>               return "--readFilesCommand bzcat"
#>             }
#>           }
#>         class: Expression
#>     - position: 0
#>       separate: yes
#>       valueFrom:
#>         engine: '#cwl-js-engine'
#>         script: "{\t\n  var sjFormat = \"False\"\n  var gtfgffFormat = \"False\"\n
#>           \ var list = $job.inputs.sjdbGTFfile\n  var paths_list = []\n  var joined_paths
#>           = \"\"\n  \n  if (list) {\n    list.forEach(function(f){return paths_list.push(f.path)})\n
#>           \   joined_paths = paths_list.join(\" \")\n\n\n    paths_list.forEach(function(f){\n
#>           \     ext = f.replace(/^.*\\./, '')\n      if (ext == \"gff\" || ext ==
#>           \"gtf\") {\n        gtfgffFormat = \"True\"\n        return gtfgffFormat\n
#>           \     }\n      if (ext == \"txt\") {\n        sjFormat = \"True\"\n        return
#>           sjFormat\n      }\n    })\n\n    if ($job.inputs.sjdbGTFfile && $job.inputs.sjdbInsertSave
#>           != \"None\") {\n      if (sjFormat == \"True\") {\n        return \"--sjdbFileChrStartEnd
#>           \".concat(joined_paths)\n      }\n      else if (gtfgffFormat == \"True\")
#>           {\n        return \"--sjdbGTFfile \".concat(joined_paths)\n      }\n    }\n
#>           \ }\n}"
#>         class: Expression
#>     - position: 0
#>       separate: yes
#>       valueFrom:
#>         engine: '#cwl-js-engine'
#>         script: "{\n  a = b = c = d = e = f = g = []\n  if ($job.inputs.sjdbGTFchrPrefix)
#>           {\n    a = [\"--sjdbGTFchrPrefix\", $job.inputs.sjdbGTFchrPrefix]\n  }\n
#>           \ if ($job.inputs.sjdbGTFfeatureExon) {\n    b = [\"--sjdbGTFfeatureExon\",
#>           $job.inputs.sjdbGTFfeatureExon]\n  }\n  if ($job.inputs.sjdbGTFtagExonParentTranscript)
#>           {\n    c = [\"--sjdbGTFtagExonParentTranscript\", $job.inputs.sjdbGTFtagExonParentTranscript]\n
#>           \ }\n  if ($job.inputs.sjdbGTFtagExonParentGene) {\n    d = [\"--sjdbGTFtagExonParentGene\",
#>           $job.inputs.sjdbGTFtagExonParentGene]\n  }\n  if ($job.inputs.sjdbOverhang)
#>           {\n    e = [\"--sjdbOverhang\", $job.inputs.sjdbOverhang]\n  }\n  if ($job.inputs.sjdbScore)
#>           {\n    f = [\"--sjdbScore\", $job.inputs.sjdbScore]\n  }\n  if ($job.inputs.sjdbInsertSave)
#>           {\n    g = [\"--sjdbInsertSave\", $job.inputs.sjdbInsertSave]\n  }\n  \n
#>           \ \n  \n  if ($job.inputs.sjdbInsertSave != \"None\" && $job.inputs.sjdbGTFfile)
#>           {\n    new_list = a.concat(b, c, d, e, f, g)\n    return new_list.join(\"
#>           \")\n  }\n}"
#>         class: Expression
#>     - position: 0
#>       separate: yes
#>       valueFrom:
#>         engine: '#cwl-js-engine'
#>         script: |-
#>           {
#>             if ($job.inputs.twopassMode == "Basic") {
#>               return "--twopass1readsN ".concat($job.inputs.twopass1readsN)
#>             }
#>           }
#>         class: Expression
#>     - position: 0
#>       separate: yes
#>       valueFrom:
#>         engine: '#cwl-js-engine'
#>         script: |-
#>           {
#>             if ($job.inputs.chimOutType == "Within") {
#>               return "--chimOutType ".concat("Within", $job.inputs.outSAMtype)
#>             }
#>             else {
#>               return "--chimOutType SeparateSAMold"
#>             }
#>           }
#>         class: Expression
#>     - position: 0
#>       separate: yes
#>       valueFrom:
#>         engine: '#cwl-js-engine'
#>         script: "{\n  var param_list = []\n  \n  function add_param(key, value){\n
#>           \   if (value == \"\") {\n      return\n    }\n    else {\n      return
#>           param_list.push(key.concat(\":\", value))\n    }\n  }\n  \n  add_param('ID',
#>           \"1\")\n  if ($job.inputs.rg_seq_center) {\n    add_param('CN', $job.inputs.rg_seq_center)\n
#>           \ } else if ([].concat($job.inputs.reads)[0].metadata.seq_center) {\n    add_param('CN',
#>           [].concat($job.inputs.reads)[0].metadata.seq_center)\n  }\n  if ($job.inputs.rg_library_id)
#>           {\n    add_param('LB', $job.inputs.rg_library_id)\n  } else if ([].concat($job.inputs.reads)[0].metadata.library_id)
#>           {\n    add_param('LB', [].concat($job.inputs.reads)[0].metadata.library_id)\n
#>           \ }\n  if ($job.inputs.rg_mfl) {\n    add_param('PI', $job.inputs.rg_mfl)\n
#>           \ } else if ([].concat($job.inputs.reads)[0].metadata.median_fragment_length)
#>           {\n    add_param('PI', [].concat($job.inputs.reads)[0].metadata.median_fragment_length)\n
#>           \ }\n  if ($job.inputs.rg_platform) {\n    add_param('PL', $job.inputs.rg_platform.replace(/
#>           /g,\"_\"))\n  } else if ([].concat($job.inputs.reads)[0].metadata.platform)
#>           {\n    add_param('PL', [].concat($job.inputs.reads)[0].metadata.platform.replace(/
#>           /g,\"_\"))\n  }\n  if ($job.inputs.rg_platform_unit_id) {\n    add_param('PU',
#>           $job.inputs.rg_platform_unit_id)\n  } else if ([].concat($job.inputs.reads)[0].metadata.platform_unit_id)
#>           {\n    add_param('PU', [].concat($job.inputs.reads)[0].metadata.platform_unit_id)\n
#>           \ }\n  if ($job.inputs.rg_sample_id) {\n    add_param('SM', $job.inputs.rg_sample_id)\n
#>           \ } else if ([].concat($job.inputs.reads)[0].metadata.sample_id) {\n    add_param('SM',
#>           [].concat($job.inputs.reads)[0].metadata.sample_id)\n  }\n  return \"--outSAMattrRGline
#>           \".concat(param_list.join(\" \"))\n}"
#>         class: Expression
#>     - position: 0
#>       separate: yes
#>       valueFrom:
#>         engine: '#cwl-js-engine'
#>         script: |-
#>           {
#>             if ($job.inputs.sjdbGTFfile && $job.inputs.quantMode) {
#>               return "--quantMode ".concat($job.inputs.quantMode)
#>             }
#>           }
#>         class: Expression
#>     - position: 100
#>       separate: yes
#>       valueFrom:
#>         engine: '#cwl-js-engine'
#>         script: "{\n  function sharedStart(array){\n  var A= array.concat().sort(),
#>           \n      a1= A[0], a2= A[A.length-1], L= a1.length, i= 0;\n  while(i<L &&
#>           a1.charAt(i)=== a2.charAt(i)) i++;\n  return a1.substring(0, i);\n  }\n
#>           \ path_list = []\n  arr = [].concat($job.inputs.reads)\n  arr.forEach(function(f){return
#>           path_list.push(f.path.replace(/\\\\/g,'/').replace( /.*\\//, '' ))})\n  common_prefix
#>           = sharedStart(path_list)\n  intermediate = common_prefix.replace( /\\-$|\\_$|\\.$/,
#>           '' ).concat(\"._STARgenome\")\n  source = \"./\".concat(intermediate)\n
#>           \ destination = intermediate.concat(\".tar\")\n  if ($job.inputs.sjdbGTFfile
#>           && $job.inputs.sjdbInsertSave && $job.inputs.sjdbInsertSave != \"None\")
#>           {\n    return \"&& tar -vcf \".concat(destination, \" \", source)\n  }\n}"
#>         class: Expression
#>     - position: 0
#>       prefix: --outFileNamePrefix
#>       separate: yes
#>       valueFrom:
#>         engine: '#cwl-js-engine'
#>         script: "{\n  function sharedStart(array){\n  var A= array.concat().sort(),
#>           \n      a1= A[0], a2= A[A.length-1], L= a1.length, i= 0;\n  while(i<L &&
#>           a1.charAt(i)=== a2.charAt(i)) i++;\n  return a1.substring(0, i);\n  }\n
#>           \ path_list = []\n  arr = [].concat($job.inputs.reads)\n  arr.forEach(function(f){return
#>           path_list.push(f.path.replace(/\\\\/g,'/').replace( /.*\\//, '' ))})\n  common_prefix
#>           = sharedStart(path_list)\n  return \"./\".concat(common_prefix.replace(
#>           /\\-$|\\_$|\\.$/, '' ), \".\")\n}"
#>         class: Expression
#>     - position: 101
#>       separate: yes
#>       valueFrom:
#>         engine: '#cwl-js-engine'
#>         script: "{\n  function sharedStart(array){\n  var A= array.concat().sort(),
#>           \n      a1= A[0], a2= A[A.length-1], L= a1.length, i= 0;\n  while(i<L &&
#>           a1.charAt(i)=== a2.charAt(i)) i++;\n  return a1.substring(0, i);\n  }\n
#>           \ path_list = []\n  arr = [].concat($job.inputs.reads)\n  arr.forEach(function(f){return
#>           path_list.push(f.path.replace(/\\\\/g,'/').replace( /.*\\//, '' ))})\n  common_prefix
#>           = sharedStart(path_list)\n  mate1 = common_prefix.replace( /\\-$|\\_$|\\.$/,
#>           '' ).concat(\".Unmapped.out.mate1\")\n  mate2 = common_prefix.replace( /\\-$|\\_$|\\.$/,
#>           '' ).concat(\".Unmapped.out.mate2\")\n  mate1fq = mate1.concat(\".fastq\")\n
#>           \ mate2fq = mate2.concat(\".fastq\")\n  if ($job.inputs.outReadsUnmapped
#>           == \"Fastx\" && arr.length > 1) {\n    return \"&& mv \".concat(mate1, \"
#>           \", mate1fq, \" && mv \", mate2, \" \", mate2fq)\n  }\n  else if ($job.inputs.outReadsUnmapped
#>           == \"Fastx\" && arr.length == 1) {\n    return \"&& mv \".concat(mate1,
#>           \" \", mate1fq)\n  }\n}"
#>         class: Expression
#>     stdin: ''
#>     stdout: ''
#>     successCodes: []
#>     temporaryFailCodes: []
#>     x: 624.0
#>     'y': 323
#>   sbg:x: 700.0
#>   sbg:y: 200.0
#> sbg:canvas_zoom: 0.6
#> sbg:canvas_y: -16
#> sbg:canvas_x: -41
#> 
# get required node
f1$get_required()
#>            fastq genomeFastaFiles 
#>        "File..."           "File" 
# set required node
f1$steps[[1]]$run$set_required("genomeChrBinNbits")
#> not implemented yet!
f1$get_required()
#>            fastq genomeFastaFiles 
#>        "File..."           "File" 
f1$steps[[1]]$run$set_required("genomeChrBinNbits", FALSE)
#> not implemented yet!
f1$get_required()
#>            fastq genomeFastaFiles 
#>        "File..."           "File" 
# get Tool object from Flow by id and name
f1$list_tool()
#>                        label
#> 1       STAR Genome Generate
#> 2 SBG FASTQ Quality Detector
#> 3             Picard SortSam
#> 4                       STAR
#>                                                   sbgid
#> 1       sevenbridges/public-apps/star-genome-generate/1
#> 2 sevenbridges/public-apps/sbg-fastq-quality-detector/3
#> 3       sevenbridges/public-apps/picard-sortsam-1-140/2
#> 4                       sevenbridges/public-apps/star/4
#>                            id
#> 1       #STAR_Genome_Generate
#> 2 #SBG_FASTQ_Quality_Detector
#> 3             #Picard_SortSam
#> 4                       #STAR
# return two
f1$get_tool("STAR")
#> [[1]]
#> sbg:validationErrors: []
#> sbg:sbgMaintained: no
#> sbg:latestRevision: 1
#> sbg:job:
#>   allocatedResources:
#>     mem: 60000
#>     cpu: 15
#>   inputs:
#>     sjdbScore: 0
#>     sjdbGTFfeatureExon: sjdbGTFfeatureExon
#>     sjdbOverhang: 0
#>     sjdbGTFtagExonParentTranscript: sjdbGTFtagExonParentTranscript
#>     genomeChrBinNbits: genomeChrBinNbits
#>     genomeSAsparseD: 0
#>     sjdbGTFfile:
#>     - size: 0
#>       secondaryFiles: []
#>       class: File
#>       path: /demo/test-files/chr20.gtf
#>     sjdbGTFtagExonParentGene: sjdbGTFtagExonParentGene
#>     genomeFastaFiles:
#>       size: 0
#>       secondaryFiles: []
#>       class: File
#>       path: /sbgenomics/test-data/chr20.fa
#>     sjdbGTFchrPrefix: sjdbGTFchrPrefix
#>     genomeSAindexNbases: 0
#> sbg:toolAuthor: Alexander Dobin/CSHL
#> sbg:createdOn: 1450911469
#> sbg:categories:
#> - Alignment
#> sbg:contributors:
#> - bix-demo
#> sbg:links:
#> - id: https://github.com/alexdobin/STAR
#>   label: Homepage
#> - id: https://github.com/alexdobin/STAR/releases
#>   label: Releases
#> - id: https://github.com/alexdobin/STAR/blob/master/doc/STARmanual.pdf
#>   label: Manual
#> - id: https://groups.google.com/forum/#!forum/rna-star
#>   label: Support
#> - id: http://www.ncbi.nlm.nih.gov/pubmed/23104886
#>   label: Publication
#> sbg:project: bix-demo/star-2-4-2a-demo
#> sbg:createdBy: bix-demo
#> sbg:toolkitVersion: 2.4.2a
#> sbg:id: sevenbridges/public-apps/star-genome-generate/1
#> sbg:license: GNU General Public License v3.0 only
#> sbg:revision: 1
#> sbg:cmdPreview: mkdir genomeDir && /opt/STAR --runMode genomeGenerate --genomeDir
#>   ./genomeDir --runThreadN 15 --genomeFastaFiles /sbgenomics/test-data/chr20.fa --genomeChrBinNbits
#>   genomeChrBinNbits --genomeSAindexNbases 0 --genomeSAsparseD 0 --sjdbGTFfeatureExon
#>   sjdbGTFfeatureExon --sjdbGTFtagExonParentTranscript sjdbGTFtagExonParentTranscript
#>   --sjdbGTFtagExonParentGene sjdbGTFtagExonParentGene --sjdbOverhang 0 --sjdbScore
#>   0 --sjdbGTFchrPrefix sjdbGTFchrPrefix  --sjdbGTFfile /demo/test-files/chr20.gtf  &&
#>   tar -vcf genome.tar ./genomeDir /sbgenomics/test-data/chr20.fa
#> sbg:modifiedOn: 1450911470
#> sbg:modifiedBy: bix-demo
#> sbg:revisionsInfo:
#> - sbg:modifiedBy: bix-demo
#>   sbg:modifiedOn: 1450911469
#>   sbg:revision: 0
#> - sbg:modifiedBy: bix-demo
#>   sbg:modifiedOn: 1450911470
#>   sbg:revision: 1
#> sbg:toolkit: STAR
#> id: sevenbridges/public-apps/star-genome-generate/1
#> inputs:
#> - type:
#>   - 'null'
#>   - int
#>   label: Extra alignment score
#>   description: Extra alignment score for alignments that cross database junctions.
#>   streamable: no
#>   id: '#sjdbScore'
#>   inputBinding:
#>     position: 0
#>     prefix: --sjdbScore
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Splice junctions db parameters
#>   sbg:includeInPorts: yes
#>   sbg:toolDefaultValue: '2'
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: '"Overhang" length'
#>   description: Length of the donor/acceptor sequence on each side of the junctions,
#>     ideally = (mate_length - 1) (int >= 0), if int = 0, splice junction database is
#>     not used.
#>   streamable: no
#>   id: '#sjdbOverhang'
#>   inputBinding:
#>     position: 0
#>     prefix: --sjdbOverhang
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Splice junctions db parameters
#>   sbg:includeInPorts: yes
#>   sbg:toolDefaultValue: '100'
#>   required: no
#> - type:
#>   - 'null'
#>   - string
#>   label: Exons' parents name
#>   description: Tag name to be used as exons' transcript-parents.
#>   streamable: no
#>   id: '#sjdbGTFtagExonParentTranscript'
#>   inputBinding:
#>     position: 0
#>     prefix: --sjdbGTFtagExonParentTranscript
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Splice junctions db parameters
#>   sbg:toolDefaultValue: transcript_id
#>   required: no
#> - type:
#>   - 'null'
#>   - string
#>   label: Gene name
#>   description: Tag name to be used as exons' gene-parents.
#>   streamable: no
#>   id: '#sjdbGTFtagExonParentGene'
#>   inputBinding:
#>     position: 0
#>     prefix: --sjdbGTFtagExonParentGene
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Splice junctions db parameters
#>   sbg:toolDefaultValue: gene_id
#>   required: no
#> - type:
#>   - 'null'
#>   - items: File
#>     type: array
#>   label: Splice junction file
#>   description: Gene model annotations and/or known transcripts.
#>   streamable: no
#>   id: '#sjdbGTFfile'
#>   sbg:category: Basic
#>   sbg:fileTypes: GTF, GFF, TXT
#>   required: no
#> - type:
#>   - 'null'
#>   - string
#>   label: Set exons feature
#>   description: Feature type in GTF file to be used as exons for building transcripts.
#>   streamable: no
#>   id: '#sjdbGTFfeatureExon'
#>   inputBinding:
#>     position: 0
#>     prefix: --sjdbGTFfeatureExon
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Splice junctions db parameters
#>   sbg:toolDefaultValue: exon
#>   required: no
#> - type:
#>   - 'null'
#>   - string
#>   label: Chromosome names
#>   description: Prefix for chromosome names in a GTF file (e.g. 'chr' for using ENSMEBL
#>     annotations with UCSC geneomes).
#>   streamable: no
#>   id: '#sjdbGTFchrPrefix'
#>   inputBinding:
#>     position: 0
#>     prefix: --sjdbGTFchrPrefix
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Splice junctions db parameters
#>   sbg:toolDefaultValue: '-'
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: Suffux array sparsity
#>   description: 'Distance between indices: use bigger numbers to decrease needed RAM
#>     at the cost of mapping speed reduction (int>0).'
#>   streamable: no
#>   id: '#genomeSAsparseD'
#>   inputBinding:
#>     position: 0
#>     prefix: --genomeSAsparseD
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Genome generation parameters
#>   sbg:toolDefaultValue: '1'
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: Pre-indexing string length
#>   description: Length (bases) of the SA pre-indexing string. Typically between 10
#>     and 15. Longer strings will use much more memory, but allow faster searches. For
#>     small genomes, this number needs to be scaled down, with a typical value of min(14,
#>     log2(GenomeLength)/2 - 1). For example, for 1 megaBase genome, this is equal to
#>     9, for 100 kiloBase genome, this is equal to 7.
#>   streamable: no
#>   id: '#genomeSAindexNbases'
#>   inputBinding:
#>     position: 0
#>     prefix: --genomeSAindexNbases
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Genome generation parameters
#>   sbg:toolDefaultValue: '14'
#>   required: no
#> - type:
#>   - File
#>   label: Genome fasta files
#>   description: Reference sequence to which to align the reads.
#>   streamable: no
#>   id: '#genomeFastaFiles'
#>   inputBinding:
#>     position: 0
#>     prefix: --genomeFastaFiles
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Basic
#>   sbg:fileTypes: FASTA, FA
#>   required: yes
#> - type:
#>   - 'null'
#>   - string
#>   label: Bins size
#>   description: 'Set log2(chrBin), where chrBin is the size (bits) of the bins for
#>     genome storage: each chromosome will occupy an integer number of bins. If you
#>     are using a genome with a large (>5,000) number of chrosomes/scaffolds, you may
#>     need to reduce this number to reduce RAM consumption. The following scaling is
#>     recomended: genomeChrBinNbits = min(18, log2(GenomeLength/NumberOfReferences)).
#>     For example, for 3 gigaBase genome with 100,000 chromosomes/scaffolds, this is
#>     equal to 15.'
#>   streamable: no
#>   id: '#genomeChrBinNbits'
#>   inputBinding:
#>     position: 0
#>     prefix: --genomeChrBinNbits
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Genome generation parameters
#>   sbg:toolDefaultValue: '18'
#>   required: no
#> outputs:
#> - type:
#>   - 'null'
#>   - File
#>   label: Genome Files
#>   description: Genome files comprise binary genome sequence, suffix arrays, text chromosome
#>     names/lengths, splice junctions coordinates, and transcripts/genes information.
#>   streamable: no
#>   id: '#genome'
#>   outputBinding:
#>     glob: '*.tar'
#>   sbg:fileTypes: TAR
#> requirements:
#> - class: ExpressionEngineRequirement
#>   id: '#cwl-js-engine'
#>   requirements:
#>   - class: DockerRequirement
#>     dockerPull: rabix/js-engine
#> hints:
#> - class: DockerRequirement
#>   dockerPull: images.sbgenomics.com/ana_d/star:2.4.2a
#>   dockerImageId: a4b0ad2c3cae
#> - class: sbg:CPURequirement
#>   value: 15
#> - class: sbg:MemRequirement
#>   value: 60000
#> label: STAR Genome Generate
#> description: STAR Genome Generate is a tool that generates genome index files. One
#>   set of files should be generated per each genome/annotation combination. Once produced,
#>   these files could be used as long as genome/annotation combination stays the same.
#>   Also, STAR Genome Generate which produced these files and STAR aligner using them
#>   must be the same toolkit version.
#> class: CommandLineTool
#> baseCommand:
#> - mkdir
#> - genomeDir
#> - '&&'
#> - /opt/STAR
#> - --runMode
#> - genomeGenerate
#> - --genomeDir
#> - ./genomeDir
#> - --runThreadN
#> - class: Expression
#>   script: |-
#>     {
#>       return $job.allocatedResources.cpu
#>     }
#>   engine: '#cwl-js-engine'
#> arguments:
#> - position: 99
#>   separate: yes
#>   valueFrom: '&& tar -vcf genome.tar ./genomeDir'
#> - position: 0
#>   separate: yes
#>   valueFrom:
#>     engine: '#cwl-js-engine'
#>     script: "{\t\n  var sjFormat = \"False\"\n  var gtfgffFormat = \"False\"\n  var
#>       list = $job.inputs.sjdbGTFfile\n  var paths_list = []\n  var joined_paths =
#>       \"\"\n  \n  if (list) {\n    list.forEach(function(f){return paths_list.push(f.path)})\n
#>       \   joined_paths = paths_list.join(\" \")\n\n\n    paths_list.forEach(function(f){\n
#>       \     ext = f.replace(/^.*\\./, '')\n      if (ext == \"gff\" || ext == \"gtf\")
#>       {\n        gtfgffFormat = \"True\"\n        return gtfgffFormat\n      }\n      if
#>       (ext == \"txt\") {\n        sjFormat = \"True\"\n        return sjFormat\n      }\n
#>       \   })\n\n    if ($job.inputs.sjdbGTFfile && $job.inputs.sjdbInsertSave != \"None\")
#>       {\n      if (sjFormat == \"True\") {\n        return \"--sjdbFileChrStartEnd
#>       \".concat(joined_paths)\n      }\n      else if (gtfgffFormat == \"True\") {\n
#>       \       return \"--sjdbGTFfile \".concat(joined_paths)\n      }\n    }\n  }\n}"
#>     class: Expression
#> stdin: ''
#> stdout: ''
#> successCodes: []
#> temporaryFailCodes: []
#> x: 384.0832266
#> 'y': 446.4998957
#> 
#> 
#> [[2]]
#> sbg:validationErrors: []
#> sbg:sbgMaintained: no
#> sbg:latestRevision: 4
#> sbg:job:
#>   allocatedResources:
#>     mem: 60000
#>     cpu: 15
#>   inputs:
#>     alignWindowsPerReadNmax: 0
#>     outSAMheaderPG: outSAMheaderPG
#>     GENOME_DIR_NAME: ''
#>     outFilterMatchNminOverLread: 0
#>     rg_platform_unit_id: rg_platform_unit
#>     alignTranscriptsPerReadNmax: 0
#>     readMapNumber: 0
#>     alignSplicedMateMapLminOverLmate: 0
#>     alignMatesGapMax: 0
#>     outFilterMultimapNmax: 0
#>     clip5pNbases:
#>     - 0
#>     outSAMstrandField: None
#>     readMatesLengthsIn: NotEqual
#>     outSAMattributes: Standard
#>     seedMultimapNmax: 0
#>     rg_mfl: rg_mfl
#>     chimSegmentMin: 0
#>     winAnchorDistNbins: 0
#>     outSortingType: SortedByCoordinate
#>     outFilterMultimapScoreRange: 0
#>     sjdbInsertSave: Basic
#>     clip3pAfterAdapterNbases:
#>     - 0
#>     scoreDelBase: 0
#>     outFilterMatchNmin: 0
#>     twopass1readsN: 0
#>     outSAMunmapped: None
#>     genome:
#>       size: 0
#>       secondaryFiles: []
#>       class: File
#>       path: genome.ext
#>     sjdbGTFtagExonParentTranscript: ''
#>     limitBAMsortRAM: 0
#>     alignEndsType: Local
#>     seedNoneLociPerWindow: 0
#>     rg_sample_id: rg_sample
#>     sjdbGTFtagExonParentGene: ''
#>     chimScoreMin: 0
#>     outSJfilterIntronMaxVsReadN:
#>     - 0
#>     twopassMode: Basic
#>     alignSplicedMateMapLmin: 0
#>     outSJfilterReads: All
#>     outSAMprimaryFlag: OneBestScore
#>     outSJfilterCountTotalMin:
#>     - 3
#>     - 1
#>     - 1
#>     - 1
#>     outSAMorder: Paired
#>     outSAMflagAND: 0
#>     chimScoreSeparation: 0
#>     alignSJoverhangMin: 0
#>     outFilterScoreMin: 0
#>     seedSearchStartLmax: 0
#>     scoreGapGCAG: 0
#>     scoreGenomicLengthLog2scale: 0
#>     outFilterIntronMotifs: None
#>     outFilterMismatchNmax: 0
#>     reads:
#>     - size: 0
#>       secondaryFiles: []
#>       class: File
#>       metadata:
#>         format: fastq
#>         paired_end: '1'
#>         seq_center: illumina
#>       path: /test-data/mate_1.fastq.bz2
#>     scoreGap: 0
#>     outSJfilterOverhangMin:
#>     - 30
#>     - 12
#>     - 12
#>     - 12
#>     outSAMflagOR: 0
#>     outSAMmode: Full
#>     rg_library_id: ''
#>     chimScoreJunctionNonGTAG: 0
#>     scoreInsOpen: 0
#>     clip3pAdapterSeq:
#>     - clip3pAdapterSeq
#>     chimScoreDropMax: 0
#>     outFilterType: Normal
#>     scoreGapATAC: 0
#>     rg_platform: Ion Torrent PGM
#>     clip3pAdapterMMp:
#>     - 0
#>     sjdbGTFfeatureExon: ''
#>     outQSconversionAdd: 0
#>     quantMode: TranscriptomeSAM
#>     alignIntronMin: 0
#>     scoreInsBase: 0
#>     scoreGapNoncan: 0
#>     seedSearchLmax: 0
#>     outSJfilterDistToOtherSJmin:
#>     - 0
#>     outFilterScoreMinOverLread: 0
#>     alignSJDBoverhangMin: 0
#>     limitOutSJcollapsed: 0
#>     winAnchorMultimapNmax: 0
#>     outFilterMismatchNoverLmax: 0
#>     rg_seq_center: ''
#>     outSAMheaderHD: outSAMheaderHD
#>     chimOutType: Within
#>     quantTranscriptomeBan: IndelSoftclipSingleend
#>     limitOutSJoneRead: 0
#>     alignTranscriptsPerWindowNmax: 0
#>     sjdbOverhang: ~
#>     outReadsUnmapped: Fastx
#>     scoreStitchSJshift: 0
#>     seedPerWindowNmax: 0
#>     outSJfilterCountUniqueMin:
#>     - 3
#>     - 1
#>     - 1
#>     - 1
#>     scoreDelOpen: 0
#>     sjdbGTFfile:
#>     - path: /demo/test-data/chr20.gtf
#>     clip3pNbases:
#>     - 0
#>     - 3
#>     winBinNbits: 0
#>     sjdbScore: ~
#>     seedSearchStartLmaxOverLread: 0
#>     alignIntronMax: 0
#>     seedPerReadNmax: 0
#>     outFilterMismatchNoverReadLmax: 0
#>     winFlankNbins: 0
#>     sjdbGTFchrPrefix: chrPrefix
#>     alignSoftClipAtReferenceEnds: 'Yes'
#>     outSAMreadID: Standard
#>     outSAMtype: BAM
#>     chimJunctionOverhangMin: 0
#>     limitSjdbInsertNsj: 0
#>     outSAMmapqUnique: 0
#> sbg:toolAuthor: Alexander Dobin/CSHL
#> sbg:createdOn: 1450911471
#> sbg:categories:
#> - Alignment
#> sbg:contributors:
#> - ana_d
#> - bix-demo
#> - uros_sipetic
#> sbg:links:
#> - id: https://github.com/alexdobin/STAR
#>   label: Homepage
#> - id: https://github.com/alexdobin/STAR/releases
#>   label: Releases
#> - id: https://github.com/alexdobin/STAR/blob/master/doc/STARmanual.pdf
#>   label: Manual
#> - id: https://groups.google.com/forum/#!forum/rna-star
#>   label: Support
#> - id: http://www.ncbi.nlm.nih.gov/pubmed/23104886
#>   label: Publication
#> sbg:project: bix-demo/star-2-4-2a-demo
#> sbg:createdBy: bix-demo
#> sbg:toolkitVersion: 2.4.2a
#> sbg:id: sevenbridges/public-apps/star/4
#> sbg:license: GNU General Public License v3.0 only
#> sbg:revision: 4
#> sbg:cmdPreview: tar -xvf genome.ext && /opt/STAR --runThreadN 15  --readFilesCommand
#>   bzcat  --sjdbGTFfile /demo/test-data/chr20.gtf  --sjdbGTFchrPrefix chrPrefix --sjdbInsertSave
#>   Basic  --twopass1readsN 0  --chimOutType WithinBAM  --outSAMattrRGline ID:1 CN:illumina
#>   PI:rg_mfl PL:Ion_Torrent_PGM PU:rg_platform_unit SM:rg_sample  --quantMode TranscriptomeSAM
#>   --outFileNamePrefix ./mate_1.fastq.bz2.  --readFilesIn /test-data/mate_1.fastq.bz2  &&
#>   tar -vcf mate_1.fastq.bz2._STARgenome.tar ./mate_1.fastq.bz2._STARgenome  && mv
#>   mate_1.fastq.bz2.Unmapped.out.mate1 mate_1.fastq.bz2.Unmapped.out.mate1.fastq
#> sbg:modifiedOn: 1462889222
#> sbg:modifiedBy: ana_d
#> sbg:revisionsInfo:
#> - sbg:modifiedBy: bix-demo
#>   sbg:modifiedOn: 1450911471
#>   sbg:revision: 0
#> - sbg:modifiedBy: bix-demo
#>   sbg:modifiedOn: 1450911473
#>   sbg:revision: 1
#> - sbg:modifiedBy: bix-demo
#>   sbg:modifiedOn: 1450911475
#>   sbg:revision: 2
#> - sbg:modifiedBy: uros_sipetic
#>   sbg:modifiedOn: 1462878528
#>   sbg:revision: 3
#> - sbg:modifiedBy: ana_d
#>   sbg:modifiedOn: 1462889222
#>   sbg:revision: 4
#> sbg:toolkit: STAR
#> id: sevenbridges/public-apps/star/4
#> inputs:
#> - type:
#>   - 'null'
#>   - int
#>   label: Flanking regions size
#>   description: =log2(winFlank), where win Flank is the size of the left and right
#>     flanking regions for each window (int>0).
#>   streamable: no
#>   id: '#winFlankNbins'
#>   inputBinding:
#>     position: 0
#>     prefix: --winFlankNbins
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Windows, Anchors, Binning
#>   sbg:includeInPorts: yes
#>   sbg:toolDefaultValue: '4'
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: Bin size
#>   description: =log2(winBin), where winBin is the size of the bin for the windows/clustering,
#>     each window will occupy an integer number of bins (int>0).
#>   streamable: no
#>   id: '#winBinNbits'
#>   inputBinding:
#>     position: 0
#>     prefix: --winBinNbits
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Windows, Anchors, Binning
#>   sbg:includeInPorts: yes
#>   sbg:toolDefaultValue: '16'
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: Max loci anchors
#>   description: Max number of loci anchors are allowed to map to (int>0).
#>   streamable: no
#>   id: '#winAnchorMultimapNmax'
#>   inputBinding:
#>     position: 0
#>     prefix: --winAnchorMultimapNmax
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Windows, Anchors, Binning
#>   sbg:toolDefaultValue: '50'
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: Max bins between anchors
#>   description: Max number of bins between two anchors that allows aggregation of anchors
#>     into one window (int>0).
#>   streamable: no
#>   id: '#winAnchorDistNbins'
#>   inputBinding:
#>     position: 0
#>     prefix: --winAnchorDistNbins
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Windows, Anchors, Binning
#>   sbg:toolDefaultValue: '9'
#>   required: no
#> - type:
#>   - 'null'
#>   - name: twopassMode
#>     symbols:
#>     - None
#>     - Basic
#>     type: enum
#>   label: Two-pass mode
#>   description: '2-pass mapping mode. None: 1-pass mapping; Basic: basic 2-pass mapping,
#>     with all 1st pass junctions inserted into the genome indices on the fly.'
#>   streamable: no
#>   id: '#twopassMode'
#>   inputBinding:
#>     position: 0
#>     prefix: --twopassMode
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: 2-pass mapping
#>   sbg:toolDefaultValue: None
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: Reads to process in 1st step
#>   description: 'Number of reads to process for the 1st step. 0: 1-step only, no 2nd
#>     pass; use very large number to map all reads in the first step (int>0).'
#>   streamable: no
#>   id: '#twopass1readsN'
#>   sbg:category: 2-pass mapping
#>   sbg:toolDefaultValue: '-1'
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: Extra alignment score
#>   description: Extra alignment score for alignments that cross database junctions.
#>   streamable: no
#>   id: '#sjdbScore'
#>   sbg:category: Splice junctions database
#>   sbg:toolDefaultValue: '2'
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: '"Overhang" length'
#>   description: Length of the donor/acceptor sequence on each side of the junctions,
#>     ideally = (mate_length - 1) (int >= 0), if int = 0, splice junction database is
#>     not used.
#>   streamable: no
#>   id: '#sjdbOverhang'
#>   sbg:category: Splice junctions database
#>   sbg:toolDefaultValue: '100'
#>   required: no
#> - type:
#>   - 'null'
#>   - name: sjdbInsertSave
#>     symbols:
#>     - Basic
#>     - All
#>     - None
#>     type: enum
#>   label: Save junction files
#>   description: 'Which files to save when sjdb junctions are inserted on the fly at
#>     the mapping step. None: not saving files at all; Basic: only small junction/transcript
#>     files; All: all files including big Genome, SA and SAindex. These files are output
#>     as archive.'
#>   streamable: no
#>   id: '#sjdbInsertSave'
#>   sbg:category: Splice junctions database
#>   sbg:toolDefaultValue: None
#>   required: no
#> - type:
#>   - 'null'
#>   - string
#>   label: Exons' parents name
#>   description: Tag name to be used as exons' transcript-parents.
#>   streamable: no
#>   id: '#sjdbGTFtagExonParentTranscript'
#>   sbg:category: Splice junctions database
#>   sbg:toolDefaultValue: transcript_id
#>   required: no
#> - type:
#>   - 'null'
#>   - string
#>   label: Gene name
#>   description: Tag name to be used as exons' gene-parents.
#>   streamable: no
#>   id: '#sjdbGTFtagExonParentGene'
#>   sbg:category: Splice junctions database
#>   sbg:toolDefaultValue: gene_id
#>   required: no
#> - type:
#>   - 'null'
#>   - items: File
#>     type: array
#>   label: Splice junction file
#>   description: Gene model annotations and/or known transcripts. No need to include
#>     this input, except in case of using "on the fly" annotations.
#>   streamable: no
#>   id: '#sjdbGTFfile'
#>   sbg:category: Basic
#>   sbg:fileTypes: GTF, GFF, TXT
#>   required: no
#> - type:
#>   - 'null'
#>   - string
#>   label: Set exons feature
#>   description: Feature type in GTF file to be used as exons for building transcripts.
#>   streamable: no
#>   id: '#sjdbGTFfeatureExon'
#>   sbg:category: Splice junctions database
#>   sbg:toolDefaultValue: exon
#>   required: no
#> - type:
#>   - 'null'
#>   - string
#>   label: Chromosome names
#>   description: Prefix for chromosome names in a GTF file (e.g. 'chr' for using ENSMEBL
#>     annotations with UCSC geneomes).
#>   streamable: no
#>   id: '#sjdbGTFchrPrefix'
#>   sbg:category: Splice junctions database
#>   sbg:toolDefaultValue: '-'
#>   required: no
#> - type:
#>   - 'null'
#>   - float
#>   label: Search start point normalized
#>   description: seedSearchStartLmax normalized to read length (sum of mates' lengths
#>     for paired-end reads).
#>   streamable: no
#>   id: '#seedSearchStartLmaxOverLread'
#>   inputBinding:
#>     position: 0
#>     prefix: --seedSearchStartLmaxOverLread
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Alignments and Seeding
#>   sbg:toolDefaultValue: '1.0'
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: Search start point
#>   description: Defines the search start point through the read - the read is split
#>     into pieces no longer than this value (int>0).
#>   streamable: no
#>   id: '#seedSearchStartLmax'
#>   inputBinding:
#>     position: 0
#>     prefix: --seedSearchStartLmax
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Alignments and Seeding
#>   sbg:toolDefaultValue: '50'
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: Max seed length
#>   description: Defines the maximum length of the seeds, if =0 max seed length is infinite
#>     (int>=0).
#>   streamable: no
#>   id: '#seedSearchLmax'
#>   inputBinding:
#>     position: 0
#>     prefix: --seedSearchLmax
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Alignments and Seeding
#>   sbg:toolDefaultValue: '0'
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: Max seeds per window
#>   description: Max number of seeds per window (int>=0).
#>   streamable: no
#>   id: '#seedPerWindowNmax'
#>   inputBinding:
#>     position: 0
#>     prefix: --seedPerWindowNmax
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Alignments and Seeding
#>   sbg:toolDefaultValue: '50'
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: Max seeds per read
#>   description: Max number of seeds per read (int>=0).
#>   streamable: no
#>   id: '#seedPerReadNmax'
#>   inputBinding:
#>     position: 0
#>     prefix: --seedPerReadNmax
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Alignments and Seeding
#>   sbg:toolDefaultValue: '1000'
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: Max one-seed loci per window
#>   description: Max number of one seed loci per window (int>=0).
#>   streamable: no
#>   id: '#seedNoneLociPerWindow'
#>   inputBinding:
#>     position: 0
#>     prefix: --seedNoneLociPerWindow
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Alignments and Seeding
#>   sbg:toolDefaultValue: '10'
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: Filter pieces for stitching
#>   description: Only pieces that map fewer than this value are utilized in the stitching
#>     procedure (int>=0).
#>   streamable: no
#>   id: '#seedMultimapNmax'
#>   inputBinding:
#>     position: 0
#>     prefix: --seedMultimapNmax
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Alignments and Seeding
#>   sbg:toolDefaultValue: '10000'
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: Max score reduction
#>   description: Maximum score reduction while searching for SJ boundaries in the stitching
#>     step.
#>   streamable: no
#>   id: '#scoreStitchSJshift'
#>   inputBinding:
#>     position: 0
#>     prefix: --scoreStitchSJshift
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Scoring
#>   sbg:toolDefaultValue: '1'
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: Insertion Open Penalty
#>   description: Insertion open penalty.
#>   streamable: no
#>   id: '#scoreInsOpen'
#>   inputBinding:
#>     position: 0
#>     prefix: --scoreInsOpen
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Scoring
#>   sbg:toolDefaultValue: '-2'
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: Insertion extension penalty
#>   description: Insertion extension penalty per base (in addition to --scoreInsOpen).
#>   streamable: no
#>   id: '#scoreInsBase'
#>   inputBinding:
#>     position: 0
#>     prefix: --scoreInsBase
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Scoring
#>   sbg:toolDefaultValue: '-2'
#>   required: no
#> - type:
#>   - 'null'
#>   - float
#>   label: Log scaled score
#>   description: 'Extra score logarithmically scaled with genomic length of the alignment:
#>     <int>*log2(genomicLength).'
#>   streamable: no
#>   id: '#scoreGenomicLengthLog2scale'
#>   inputBinding:
#>     position: 0
#>     prefix: --scoreGenomicLengthLog2scale
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Scoring
#>   sbg:toolDefaultValue: '-0.25'
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: Non-canonical gap open
#>   description: Non-canonical gap open penalty (in addition to --scoreGap).
#>   streamable: no
#>   id: '#scoreGapNoncan'
#>   inputBinding:
#>     position: 0
#>     prefix: --scoreGapNoncan
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Scoring
#>   sbg:toolDefaultValue: '-8'
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: GC/AG and CT/GC gap open
#>   description: GC/AG and CT/GC gap open penalty (in addition to --scoreGap).
#>   streamable: no
#>   id: '#scoreGapGCAG'
#>   inputBinding:
#>     position: 0
#>     prefix: --scoreGapGCAG
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Scoring
#>   sbg:toolDefaultValue: '-4'
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: AT/AC and GT/AT gap open
#>   description: AT/AC and GT/AT gap open penalty (in addition to --scoreGap).
#>   streamable: no
#>   id: '#scoreGapATAC'
#>   inputBinding:
#>     position: 0
#>     prefix: --scoreGapATAC
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Scoring
#>   sbg:toolDefaultValue: '-8'
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: Gap open penalty
#>   description: Gap open penalty.
#>   streamable: no
#>   id: '#scoreGap'
#>   inputBinding:
#>     position: 0
#>     prefix: --scoreGap
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Scoring
#>   sbg:toolDefaultValue: '0'
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: Deletion open penalty
#>   description: Deletion open penalty.
#>   streamable: no
#>   id: '#scoreDelOpen'
#>   inputBinding:
#>     position: 0
#>     prefix: --scoreDelOpen
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Scoring
#>   sbg:toolDefaultValue: '-2'
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: Deletion extension penalty
#>   description: Deletion extension penalty per base (in addition to --scoreDelOpen).
#>   streamable: no
#>   id: '#scoreDelBase'
#>   inputBinding:
#>     position: 0
#>     prefix: --scoreDelBase
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Scoring
#>   sbg:toolDefaultValue: '-2'
#>   required: no
#> - type:
#>   - 'null'
#>   - string
#>   label: Sequencing center
#>   description: Specify the sequencing center for RG line.
#>   streamable: no
#>   id: '#rg_seq_center'
#>   sbg:category: Read group
#>   sbg:toolDefaultValue: Inferred from metadata
#>   required: no
#> - type:
#>   - 'null'
#>   - string
#>   label: Sample ID
#>   description: Specify the sample ID for RG line.
#>   streamable: no
#>   id: '#rg_sample_id'
#>   sbg:category: Read group
#>   sbg:toolDefaultValue: Inferred from metadata
#>   required: no
#> - type:
#>   - 'null'
#>   - string
#>   label: Platform unit ID
#>   description: Specify the platform unit ID for RG line.
#>   streamable: no
#>   id: '#rg_platform_unit_id'
#>   sbg:category: Read group
#>   sbg:toolDefaultValue: Inferred from metadata
#>   required: no
#> - type:
#>   - 'null'
#>   - name: rg_platform
#>     symbols:
#>     - LS 454
#>     - Helicos
#>     - Illumina
#>     - ABI SOLiD
#>     - Ion Torrent PGM
#>     - PacBio
#>     type: enum
#>   label: Platform
#>   description: Specify the version of the technology that was used for sequencing
#>     or assaying.
#>   streamable: no
#>   id: '#rg_platform'
#>   sbg:category: Read group
#>   sbg:toolDefaultValue: Inferred from metadata
#>   required: no
#> - type:
#>   - 'null'
#>   - string
#>   label: Median fragment length
#>   description: Specify the median fragment length for RG line.
#>   streamable: no
#>   id: '#rg_mfl'
#>   sbg:category: Read group
#>   sbg:toolDefaultValue: Inferred from metadata
#>   required: no
#> - type:
#>   - 'null'
#>   - string
#>   label: Library ID
#>   description: Specify the library ID for RG line.
#>   streamable: no
#>   id: '#rg_library_id'
#>   sbg:category: Read group
#>   sbg:toolDefaultValue: Inferred from metadata
#>   required: no
#> - type:
#>   - items: File
#>     type: array
#>   label: Read sequence
#>   description: Read sequence.
#>   streamable: no
#>   id: '#reads'
#>   inputBinding:
#>     position: 10
#>     separate: yes
#>     itemSeparator: ' '
#>     valueFrom:
#>       engine: '#cwl-js-engine'
#>       script: "{\t\n  var list = [].concat($job.inputs.reads)\n  \n  var resp = []\n
#>         \ \n  if (list.length == 1){\n    resp.push(list[0].path)\n    \n  }else if
#>         (list.length == 2){    \n    \n    left = \"\"\n    right = \"\"\n      \n
#>         \   for (index = 0; index < list.length; ++index) {\n      \n      if (list[index].metadata
#>         != null){\n        if (list[index].metadata.paired_end == 1){\n          left
#>         = list[index].path\n        }else if (list[index].metadata.paired_end == 2){\n
#>         \         right = list[index].path\n        }\n      }\n    }\n    \n    if
#>         (left != \"\" && right != \"\"){      \n      resp.push(left)\n      resp.push(right)\n
#>         \   }\n  }\n  else if (list.length > 2){\n    left = []\n    right = []\n
#>         \     \n    for (index = 0; index < list.length; ++index) {\n      \n      if
#>         (list[index].metadata != null){\n        if (list[index].metadata.paired_end
#>         == 1){\n          left.push(list[index].path)\n        }else if (list[index].metadata.paired_end
#>         == 2){\n          right.push(list[index].path)\n        }\n      }\n    }\n
#>         \   left_join = left.join()\n    right_join = right.join()\n    if (left !=
#>         [] && right != []){      \n      resp.push(left_join)\n      resp.push(right_join)\n
#>         \   }\t\n  }\n  \n  if(resp.length > 0){    \n    return \"--readFilesIn \".concat(resp.join(\"
#>         \"))\n  }\n}"
#>       class: Expression
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Basic
#>   sbg:fileTypes: FASTA, FASTQ, FA, FQ, FASTQ.GZ, FQ.GZ, FASTQ.BZ2, FQ.BZ2
#>   required: yes
#> - type:
#>   - 'null'
#>   - name: readMatesLengthsIn
#>     symbols:
#>     - NotEqual
#>     - Equal
#>     type: enum
#>   label: Reads lengths
#>   description: Equal/Not equal - lengths of names, sequences, qualities for both mates
#>     are the same/not the same. "Not equal" is safe in all situations.
#>   streamable: no
#>   id: '#readMatesLengthsIn'
#>   inputBinding:
#>     position: 0
#>     prefix: --readMatesLengthsIn
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Read parameters
#>   sbg:toolDefaultValue: NotEqual
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: Reads to map
#>   description: Number of reads to map from the beginning of the file.
#>   streamable: no
#>   id: '#readMapNumber'
#>   inputBinding:
#>     position: 0
#>     prefix: --readMapNumber
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Read parameters
#>   sbg:toolDefaultValue: '-1'
#>   required: no
#> - type:
#>   - 'null'
#>   - name: quantTranscriptomeBan
#>     symbols:
#>     - IndelSoftclipSingleend
#>     - Singleend
#>     type: enum
#>   label: Prohibit alignment type
#>   description: 'Prohibit various alignment type. IndelSoftclipSingleend: prohibit
#>     indels, soft clipping and single-end alignments - compatible with RSEM; Singleend:
#>     prohibit single-end alignments.'
#>   streamable: no
#>   id: '#quantTranscriptomeBan'
#>   inputBinding:
#>     position: 0
#>     prefix: --quantTranscriptomeBan
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Quantification of Annotations
#>   sbg:toolDefaultValue: IndelSoftclipSingleend
#>   required: no
#> - type:
#>   - 'null'
#>   - name: quantMode
#>     symbols:
#>     - TranscriptomeSAM
#>     - GeneCounts
#>     type: enum
#>   label: Quantification mode
#>   description: Types of quantification requested. 'TranscriptomeSAM' option outputs
#>     SAM/BAM alignments to transcriptome into a separate file. With 'GeneCounts' option,
#>     STAR will count number of reads per gene while mapping.
#>   streamable: no
#>   id: '#quantMode'
#>   sbg:category: Quantification of Annotations
#>   sbg:toolDefaultValue: '-'
#>   required: no
#> - type:
#>   - 'null'
#>   - name: outSortingType
#>     symbols:
#>     - Unsorted
#>     - SortedByCoordinate
#>     - Unsorted SortedByCoordinate
#>     type: enum
#>   label: Output sorting type
#>   description: Type of output sorting.
#>   streamable: no
#>   id: '#outSortingType'
#>   sbg:category: Output
#>   sbg:toolDefaultValue: SortedByCoordinate
#>   required: no
#> - type:
#>   - 'null'
#>   - name: outSJfilterReads
#>     symbols:
#>     - All
#>     - Unique
#>     type: enum
#>   label: Collapsed junctions reads
#>   description: 'Which reads to consider for collapsed splice junctions output. All:
#>     all reads, unique- and multi-mappers; Unique: uniquely mapping reads only.'
#>   streamable: no
#>   id: '#outSJfilterReads'
#>   inputBinding:
#>     position: 0
#>     prefix: --outSJfilterReads
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: 'Output filtering: splice junctions'
#>   sbg:toolDefaultValue: All
#>   required: no
#> - type:
#>   - 'null'
#>   - items: int
#>     type: array
#>   label: Min overhang SJ
#>   description: Minimum overhang length for splice junctions on both sides for each
#>     of the motifs. To set no output for desired motif, assign -1 to the corresponding
#>     field. Does not apply to annotated junctions.
#>   streamable: no
#>   id: '#outSJfilterOverhangMin'
#>   inputBinding:
#>     position: 0
#>     prefix: --outSJfilterOverhangMin
#>     separate: yes
#>     itemSeparator: ' '
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: 'Output filtering: splice junctions'
#>   sbg:toolDefaultValue: 30 12 12 12
#>   required: no
#> - type:
#>   - 'null'
#>   - items: int
#>     type: array
#>   label: Max gap allowed
#>   description: 'Maximum gap allowed for junctions supported by 1,2,3...N reads (int
#>     >= 0) i.e. by default junctions supported by 1 read can have gaps <=50000b, by
#>     2 reads: <=100000b, by 3 reads: <=200000. By 4 or more reads: any gap <=alignIntronMax.
#>     Does not apply to annotated junctions.'
#>   streamable: no
#>   id: '#outSJfilterIntronMaxVsReadN'
#>   inputBinding:
#>     position: 0
#>     prefix: --outSJfilterIntronMaxVsReadN
#>     separate: yes
#>     itemSeparator: ' '
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: 'Output filtering: splice junctions'
#>   sbg:toolDefaultValue: 50000 100000 200000
#>   required: no
#> - type:
#>   - 'null'
#>   - items: int
#>     type: array
#>   label: Min distance to other donor/acceptor
#>   description: Minimum allowed distance to other junctions' donor/acceptor for each
#>     of the motifs (int >= 0). Does not apply to annotated junctions.
#>   streamable: no
#>   id: '#outSJfilterDistToOtherSJmin'
#>   inputBinding:
#>     position: 0
#>     prefix: --outSJfilterDistToOtherSJmin
#>     separate: yes
#>     itemSeparator: ' '
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: 'Output filtering: splice junctions'
#>   sbg:toolDefaultValue: 10 0 5 10
#>   required: no
#> - type:
#>   - 'null'
#>   - items: int
#>     type: array
#>   label: Min unique count
#>   description: Minimum uniquely mapping read count per junction for each of the motifs.
#>     To set no output for desired motif, assign -1 to the corresponding field. Junctions
#>     are output if one of --outSJfilterCountUniqueMin OR --outSJfilterCountTotalMin
#>     conditions are satisfied. Does not apply to annotated junctions.
#>   streamable: no
#>   id: '#outSJfilterCountUniqueMin'
#>   inputBinding:
#>     position: 0
#>     prefix: --outSJfilterCountUniqueMin
#>     separate: yes
#>     itemSeparator: ' '
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: 'Output filtering: splice junctions'
#>   sbg:toolDefaultValue: 3 1 1 1
#>   required: no
#> - type:
#>   - 'null'
#>   - items: int
#>     type: array
#>   label: Min total count
#>   description: Minimum total (multi-mapping+unique) read count per junction for each
#>     of the motifs. To set no output for desired motif, assign -1 to the corresponding
#>     field. Junctions are output if one of --outSJfilterCountUniqueMin OR --outSJfilterCountTotalMin
#>     conditions are satisfied. Does not apply to annotated junctions.
#>   streamable: no
#>   id: '#outSJfilterCountTotalMin'
#>   inputBinding:
#>     position: 0
#>     prefix: --outSJfilterCountTotalMin
#>     separate: yes
#>     itemSeparator: ' '
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: 'Output filtering: splice junctions'
#>   sbg:toolDefaultValue: 3 1 1 1
#>   required: no
#> - type:
#>   - 'null'
#>   - name: outSAMunmapped
#>     symbols:
#>     - None
#>     - Within
#>     type: enum
#>   label: Write unmapped in SAM
#>   description: 'Output of unmapped reads in the SAM format. None: no output Within:
#>     output unmapped reads within the main SAM file (i.e. Aligned.out.sam).'
#>   streamable: no
#>   id: '#outSAMunmapped'
#>   inputBinding:
#>     position: 0
#>     prefix: --outSAMunmapped
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Output
#>   sbg:toolDefaultValue: None
#>   required: no
#> - type:
#>   - 'null'
#>   - name: outSAMtype
#>     symbols:
#>     - SAM
#>     - BAM
#>     type: enum
#>   label: Output format
#>   description: Format of output alignments.
#>   streamable: no
#>   id: '#outSAMtype'
#>   inputBinding:
#>     position: 0
#>     separate: yes
#>     valueFrom:
#>       engine: '#cwl-js-engine'
#>       script: |-
#>         {
#>           SAM_type = $job.inputs.outSAMtype
#>           SORT_type = $job.inputs.outSortingType
#>           if (SAM_type && SORT_type) {
#>             return "--outSAMtype ".concat(SAM_type, " ", SORT_type)
#>           }
#>         }
#>       class: Expression
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Output
#>   sbg:toolDefaultValue: SAM
#>   required: no
#> - type:
#>   - 'null'
#>   - name: outSAMstrandField
#>     symbols:
#>     - None
#>     - intronMotif
#>     type: enum
#>   label: Strand field flag
#>   description: 'Cufflinks-like strand field flag. None: not used; intronMotif: strand
#>     derived from the intron motif. Reads with inconsistent and/or non-canonical introns
#>     are filtered out.'
#>   streamable: no
#>   id: '#outSAMstrandField'
#>   inputBinding:
#>     position: 0
#>     prefix: --outSAMstrandField
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Output
#>   sbg:toolDefaultValue: None
#>   required: no
#> - type:
#>   - 'null'
#>   - name: outSAMreadID
#>     symbols:
#>     - Standard
#>     - Number
#>     type: enum
#>   label: Read ID
#>   description: 'Read ID record type. Standard: first word (until space) from the FASTx
#>     read ID line, removing /1,/2 from the end; Number: read number (index) in the
#>     FASTx file.'
#>   streamable: no
#>   id: '#outSAMreadID'
#>   inputBinding:
#>     position: 0
#>     prefix: --outSAMreadID
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Output
#>   sbg:toolDefaultValue: Standard
#>   required: no
#> - type:
#>   - 'null'
#>   - name: outSAMprimaryFlag
#>     symbols:
#>     - OneBestScore
#>     - AllBestScore
#>     type: enum
#>   label: Primary alignments
#>   description: 'Which alignments are considered primary - all others will be marked
#>     with 0x100 bit in the FLAG. OneBestScore: only one alignment with the best score
#>     is primary; AllBestScore: all alignments with the best score are primary.'
#>   streamable: no
#>   id: '#outSAMprimaryFlag'
#>   inputBinding:
#>     position: 0
#>     prefix: --outSAMprimaryFlag
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Output
#>   sbg:toolDefaultValue: OneBestScore
#>   required: no
#> - type:
#>   - 'null'
#>   - name: outSAMorder
#>     symbols:
#>     - Paired
#>     - PairedKeepInputOrder
#>     type: enum
#>   label: Sorting in SAM
#>   description: 'Type of sorting for the SAM output. Paired: one mate after the other
#>     for all paired alignments; PairedKeepInputOrder: one mate after the other for
#>     all paired alignments, the order is kept the same as in the input FASTQ files.'
#>   streamable: no
#>   id: '#outSAMorder'
#>   inputBinding:
#>     position: 0
#>     prefix: --outSAMorder
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Output
#>   sbg:toolDefaultValue: Paired
#>   required: no
#> - type:
#>   - 'null'
#>   - name: outSAMmode
#>     symbols:
#>     - Full
#>     - NoQS
#>     type: enum
#>   label: SAM mode
#>   description: 'Mode of SAM output. Full: full SAM output; NoQS: full SAM but without
#>     quality scores.'
#>   streamable: no
#>   id: '#outSAMmode'
#>   inputBinding:
#>     position: 0
#>     prefix: --outSAMmode
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Output
#>   sbg:toolDefaultValue: Full
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: MAPQ value
#>   description: MAPQ value for unique mappers (0 to 255).
#>   streamable: no
#>   id: '#outSAMmapqUnique'
#>   inputBinding:
#>     position: 0
#>     prefix: --outSAMmapqUnique
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Output
#>   sbg:toolDefaultValue: '255'
#>   required: no
#> - type:
#>   - 'null'
#>   - string
#>   label: SAM header @PG
#>   description: Extra @PG (software) line of the SAM header (in addition to STAR).
#>   streamable: no
#>   id: '#outSAMheaderPG'
#>   inputBinding:
#>     position: 0
#>     prefix: --outSAMheaderPG
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Output
#>   sbg:toolDefaultValue: '-'
#>   required: no
#> - type:
#>   - 'null'
#>   - string
#>   label: SAM header @HD
#>   description: '@HD (header) line of the SAM header.'
#>   streamable: no
#>   id: '#outSAMheaderHD'
#>   inputBinding:
#>     position: 0
#>     prefix: --outSAMheaderHD
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Output
#>   sbg:toolDefaultValue: '-'
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: OR SAM flag
#>   description: Set specific bits of the SAM FLAG.
#>   streamable: no
#>   id: '#outSAMflagOR'
#>   inputBinding:
#>     position: 0
#>     prefix: --outSAMflagOR
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Output
#>   sbg:toolDefaultValue: '0'
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: AND SAM flag
#>   description: Set specific bits of the SAM FLAG.
#>   streamable: no
#>   id: '#outSAMflagAND'
#>   inputBinding:
#>     position: 0
#>     prefix: --outSAMflagAND
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Output
#>   sbg:toolDefaultValue: '65535'
#>   required: no
#> - type:
#>   - 'null'
#>   - name: outSAMattributes
#>     symbols:
#>     - Standard
#>     - NH
#>     - All
#>     - None
#>     type: enum
#>   label: SAM attributes
#>   description: 'Desired SAM attributes, in the order desired for the output SAM. NH:
#>     any combination in any order; Standard: NH HI AS nM; All: NH HI AS nM NM MD jM
#>     jI; None: no attributes.'
#>   streamable: no
#>   id: '#outSAMattributes'
#>   inputBinding:
#>     position: 0
#>     prefix: --outSAMattributes
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Output
#>   sbg:toolDefaultValue: Standard
#>   required: no
#> - type:
#>   - 'null'
#>   - name: outReadsUnmapped
#>     symbols:
#>     - None
#>     - Fastx
#>     type: enum
#>   label: Output unmapped reads
#>   description: 'Output of unmapped reads (besides SAM). None: no output; Fastx: output
#>     in separate fasta/fastq files, Unmapped.out.mate1/2.'
#>   streamable: no
#>   id: '#outReadsUnmapped'
#>   inputBinding:
#>     position: 0
#>     prefix: --outReadsUnmapped
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Output
#>   sbg:toolDefaultValue: None
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: Quality conversion
#>   description: Add this number to the quality score (e.g. to convert from Illumina
#>     to Sanger, use -31).
#>   streamable: no
#>   id: '#outQSconversionAdd'
#>   inputBinding:
#>     position: 0
#>     prefix: --outQSconversionAdd
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Output
#>   sbg:toolDefaultValue: '0'
#>   required: no
#> - type:
#>   - 'null'
#>   - name: outFilterType
#>     symbols:
#>     - Normal
#>     - BySJout
#>     type: enum
#>   label: Filtering type
#>   description: 'Type of filtering. Normal: standard filtering using only current alignment;
#>     BySJout: keep only those reads that contain junctions that passed filtering into
#>     SJ.out.tab.'
#>   streamable: no
#>   id: '#outFilterType'
#>   inputBinding:
#>     position: 0
#>     prefix: --outFilterType
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Output filtering
#>   sbg:toolDefaultValue: Normal
#>   required: no
#> - type:
#>   - 'null'
#>   - float
#>   label: Min score normalized
#>   description: '''Minimum score'' normalized to read length (sum of mates'' lengths
#>     for paired-end reads).'
#>   streamable: no
#>   id: '#outFilterScoreMinOverLread'
#>   inputBinding:
#>     position: 0
#>     prefix: --outFilterScoreMinOverLread
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Output filtering
#>   sbg:toolDefaultValue: '0.66'
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: Min score
#>   description: Alignment will be output only if its score is higher than this value.
#>   streamable: no
#>   id: '#outFilterScoreMin'
#>   inputBinding:
#>     position: 0
#>     prefix: --outFilterScoreMin
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Output filtering
#>   sbg:toolDefaultValue: '0'
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: Multimapping score range
#>   description: The score range below the maximum score for multimapping alignments.
#>   streamable: no
#>   id: '#outFilterMultimapScoreRange'
#>   inputBinding:
#>     position: 0
#>     prefix: --outFilterMultimapScoreRange
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Output filtering
#>   sbg:toolDefaultValue: '1'
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: Max number of mappings
#>   description: Read alignments will be output only if the read maps fewer than this
#>     value, otherwise no alignments will be output.
#>   streamable: no
#>   id: '#outFilterMultimapNmax'
#>   inputBinding:
#>     position: 0
#>     prefix: --outFilterMultimapNmax
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Output filtering
#>   sbg:toolDefaultValue: '10'
#>   required: no
#> - type:
#>   - 'null'
#>   - float
#>   label: Mismatches to *read* length
#>   description: Alignment will be output only if its ratio of mismatches to *read*
#>     length is less than this value.
#>   streamable: no
#>   id: '#outFilterMismatchNoverReadLmax'
#>   inputBinding:
#>     position: 0
#>     prefix: --outFilterMismatchNoverReadLmax
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Output filtering
#>   sbg:toolDefaultValue: '1'
#>   required: no
#> - type:
#>   - 'null'
#>   - float
#>   label: Mismatches to *mapped* length
#>   description: Alignment will be output only if its ratio of mismatches to *mapped*
#>     length is less than this value.
#>   streamable: no
#>   id: '#outFilterMismatchNoverLmax'
#>   inputBinding:
#>     position: 0
#>     prefix: --outFilterMismatchNoverLmax
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Output filtering
#>   sbg:toolDefaultValue: '0.3'
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: Max number of mismatches
#>   description: Alignment will be output only if it has fewer mismatches than this
#>     value.
#>   streamable: no
#>   id: '#outFilterMismatchNmax'
#>   inputBinding:
#>     position: 0
#>     prefix: --outFilterMismatchNmax
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Output filtering
#>   sbg:toolDefaultValue: '10'
#>   required: no
#> - type:
#>   - 'null'
#>   - float
#>   label: Min matched bases normalized
#>   description: '''Minimum matched bases'' normalized to read length (sum of mates
#>     lengths for paired-end reads).'
#>   streamable: no
#>   id: '#outFilterMatchNminOverLread'
#>   inputBinding:
#>     position: 0
#>     prefix: --outFilterMatchNminOverLread
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Output filtering
#>   sbg:toolDefaultValue: '0.66'
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: Min matched bases
#>   description: Alignment will be output only if the number of matched bases is higher
#>     than this value.
#>   streamable: no
#>   id: '#outFilterMatchNmin'
#>   inputBinding:
#>     position: 0
#>     prefix: --outFilterMatchNmin
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Output filtering
#>   sbg:toolDefaultValue: '0'
#>   required: no
#> - type:
#>   - 'null'
#>   - name: outFilterIntronMotifs
#>     symbols:
#>     - None
#>     - RemoveNoncanonical
#>     - RemoveNoncanonicalUnannotated
#>     type: enum
#>   label: Motifs filtering
#>   description: 'Filter alignment using their motifs. None: no filtering; RemoveNoncanonical:
#>     filter out alignments that contain non-canonical junctions; RemoveNoncanonicalUnannotated:
#>     filter out alignments that contain non-canonical unannotated junctions when using
#>     annotated splice junctions database. The annotated non-canonical junctions will
#>     be kept.'
#>   streamable: no
#>   id: '#outFilterIntronMotifs'
#>   inputBinding:
#>     position: 0
#>     prefix: --outFilterIntronMotifs
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Output filtering
#>   sbg:toolDefaultValue: None
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: Max insert junctions
#>   description: Maximum number of junction to be inserted to the genome on the fly
#>     at the mapping stage, including those from annotations and those detected in the
#>     1st step of the 2-pass run.
#>   streamable: no
#>   id: '#limitSjdbInsertNsj'
#>   inputBinding:
#>     position: 0
#>     prefix: --limitSjdbInsertNsj
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Limits
#>   sbg:toolDefaultValue: '1000000'
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: Junctions max number
#>   description: Max number of junctions for one read (including all multi-mappers).
#>   streamable: no
#>   id: '#limitOutSJoneRead'
#>   inputBinding:
#>     position: 0
#>     prefix: --limitOutSJoneRead
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Limits
#>   sbg:toolDefaultValue: '1000'
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: Collapsed junctions max number
#>   description: Max number of collapsed junctions.
#>   streamable: no
#>   id: '#limitOutSJcollapsed'
#>   inputBinding:
#>     position: 0
#>     prefix: --limitOutSJcollapsed
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Limits
#>   sbg:toolDefaultValue: '1000000'
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: Limit BAM sorting memory
#>   description: Maximum available RAM for sorting BAM. If set to 0, it will be set
#>     to the genome index size.
#>   streamable: no
#>   id: '#limitBAMsortRAM'
#>   inputBinding:
#>     position: 0
#>     prefix: --limitBAMsortRAM
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Limits
#>   sbg:toolDefaultValue: '0'
#>   required: no
#> - type:
#>   - 'null'
#>   - string
#>   label: Genome dir name
#>   description: Name of the directory which contains genome files (when genome.tar
#>     is uncompressed).
#>   streamable: no
#>   id: '#genomeDirName'
#>   inputBinding:
#>     position: 0
#>     prefix: --genomeDir
#>     separate: yes
#>     valueFrom:
#>       engine: '#cwl-js-engine'
#>       script: $job.inputs.genomeDirName || "genomeDir"
#>       class: Expression
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Basic
#>   sbg:toolDefaultValue: genomeDir
#>   required: no
#> - type:
#>   - File
#>   label: Genome files
#>   description: Genome files created using STAR Genome Generate.
#>   streamable: no
#>   id: '#genome'
#>   sbg:category: Basic
#>   sbg:fileTypes: TAR
#>   required: yes
#> - type:
#>   - 'null'
#>   - items: int
#>     type: array
#>   label: Clip 5p bases
#>   description: Number of bases to clip from 5p of each mate. In case only one value
#>     is given, it will be assumed the same for both mates.
#>   streamable: no
#>   id: '#clip5pNbases'
#>   inputBinding:
#>     position: 0
#>     prefix: --clip5pNbases
#>     separate: yes
#>     itemSeparator: ' '
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Read parameters
#>   sbg:toolDefaultValue: '0'
#>   required: no
#> - type:
#>   - 'null'
#>   - items: int
#>     type: array
#>   label: Clip 3p bases
#>   description: Number of bases to clip from 3p of each mate. In case only one value
#>     is given, it will be assumed the same for both mates.
#>   streamable: no
#>   id: '#clip3pNbases'
#>   inputBinding:
#>     position: 0
#>     prefix: --clip3pNbases
#>     separate: yes
#>     itemSeparator: ' '
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Read parameters
#>   sbg:toolDefaultValue: '0'
#>   required: no
#> - type:
#>   - 'null'
#>   - items: int
#>     type: array
#>   label: Clip 3p after adapter seq.
#>   description: Number of bases to clip from 3p of each mate after the adapter clipping.
#>     In case only one value is given, it will be assumed the same for both mates.
#>   streamable: no
#>   id: '#clip3pAfterAdapterNbases'
#>   inputBinding:
#>     position: 0
#>     prefix: --clip3pAfterAdapterNbases
#>     separate: yes
#>     itemSeparator: ' '
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Read parameters
#>   sbg:toolDefaultValue: '0'
#>   required: no
#> - type:
#>   - 'null'
#>   - items: string
#>     type: array
#>   label: Clip 3p adapter sequence
#>   description: Adapter sequence to clip from 3p of each mate. In case only one value
#>     is given, it will be assumed the same for both mates.
#>   streamable: no
#>   id: '#clip3pAdapterSeq'
#>   inputBinding:
#>     position: 0
#>     prefix: --clip3pAdapterSeq
#>     separate: yes
#>     itemSeparator: ' '
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Read parameters
#>   sbg:toolDefaultValue: '-'
#>   required: no
#> - type:
#>   - 'null'
#>   - items: float
#>     type: array
#>   label: Max mismatches proportions
#>   description: Max proportion of mismatches for 3p adapter clipping for each mate.
#>     In case only one value is given, it will be assumed the same for both mates.
#>   streamable: no
#>   id: '#clip3pAdapterMMp'
#>   inputBinding:
#>     position: 0
#>     prefix: --clip3pAdapterMMp
#>     separate: yes
#>     itemSeparator: ' '
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Read parameters
#>   sbg:toolDefaultValue: '0.1'
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: Min segment length
#>   description: Minimum length of chimeric segment length, if =0, no chimeric output
#>     (int>=0).
#>   streamable: no
#>   id: '#chimSegmentMin'
#>   inputBinding:
#>     position: 0
#>     prefix: --chimSegmentMin
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Chimeric Alignments
#>   sbg:toolDefaultValue: '15'
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: Min separation score
#>   description: Minimum difference (separation) between the best chimeric score and
#>     the next one (int>=0).
#>   streamable: no
#>   id: '#chimScoreSeparation'
#>   inputBinding:
#>     position: 0
#>     prefix: --chimScoreSeparation
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Chimeric Alignments
#>   sbg:toolDefaultValue: '10'
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: Min total score
#>   description: Minimum total (summed) score of the chimeric segments (int>=0).
#>   streamable: no
#>   id: '#chimScoreMin'
#>   inputBinding:
#>     position: 0
#>     prefix: --chimScoreMin
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Chimeric Alignments
#>   sbg:toolDefaultValue: '0'
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: Non-GT/AG penalty
#>   description: Penalty for a non-GT/AG chimeric junction.
#>   streamable: no
#>   id: '#chimScoreJunctionNonGTAG'
#>   inputBinding:
#>     position: 0
#>     prefix: --chimScoreJunctionNonGTAG
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Chimeric Alignments
#>   sbg:toolDefaultValue: '-1'
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: Max drop score
#>   description: Max drop (difference) of chimeric score (the sum of scores of all chimeric
#>     segements) from the read length (int>=0).
#>   streamable: no
#>   id: '#chimScoreDropMax'
#>   inputBinding:
#>     position: 0
#>     prefix: --chimScoreDropMax
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Chimeric Alignments
#>   sbg:toolDefaultValue: '20'
#>   required: no
#> - type:
#>   - 'null'
#>   - name: chimOutType
#>     symbols:
#>     - SeparateSAMold
#>     - Within
#>     type: enum
#>   label: Chimeric output type
#>   description: 'Type of chimeric output. SeparateSAMold: output old SAM into separate
#>     Chimeric.out.sam file; Within: output into main aligned SAM/BAM files.'
#>   streamable: no
#>   id: '#chimOutType'
#>   sbg:category: Chimeric Alignments
#>   sbg:toolDefaultValue: SeparateSAMold
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: Min junction overhang
#>   description: Minimum overhang for a chimeric junction (int>=0).
#>   streamable: no
#>   id: '#chimJunctionOverhangMin'
#>   inputBinding:
#>     position: 0
#>     prefix: --chimJunctionOverhangMin
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Chimeric Alignments
#>   sbg:toolDefaultValue: '20'
#>   required: no
#> - type:
#>   - 'null'
#>   - float
#>   label: Max windows per read
#>   description: Max number of windows per read (int>0).
#>   streamable: no
#>   id: '#alignWindowsPerReadNmax'
#>   inputBinding:
#>     position: 0
#>     prefix: --alignWindowsPerReadNmax
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Alignments and Seeding
#>   sbg:toolDefaultValue: '10000'
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: Max transcripts per window
#>   description: Max number of transcripts per window (int>0).
#>   streamable: no
#>   id: '#alignTranscriptsPerWindowNmax'
#>   inputBinding:
#>     position: 0
#>     prefix: --alignTranscriptsPerWindowNmax
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Alignments and Seeding
#>   sbg:toolDefaultValue: '100'
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: Max transcripts per read
#>   description: Max number of different alignments per read to consider (int>0).
#>   streamable: no
#>   id: '#alignTranscriptsPerReadNmax'
#>   inputBinding:
#>     position: 0
#>     prefix: --alignTranscriptsPerReadNmax
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Alignments and Seeding
#>   sbg:toolDefaultValue: '10000'
#>   required: no
#> - type:
#>   - 'null'
#>   - float
#>   label: Min mapped length normalized
#>   description: alignSplicedMateMapLmin normalized to mate length (float>0).
#>   streamable: no
#>   id: '#alignSplicedMateMapLminOverLmate'
#>   inputBinding:
#>     position: 0
#>     prefix: --alignSplicedMateMapLminOverLmate
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Alignments and Seeding
#>   sbg:toolDefaultValue: '0.66'
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: Min mapped length
#>   description: Minimum mapped length for a read mate that is spliced (int>0).
#>   streamable: no
#>   id: '#alignSplicedMateMapLmin'
#>   inputBinding:
#>     position: 0
#>     prefix: --alignSplicedMateMapLmin
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Alignments and Seeding
#>   sbg:toolDefaultValue: '0'
#>   required: no
#> - type:
#>   - 'null'
#>   - name: alignSoftClipAtReferenceEnds
#>     symbols:
#>     - 'Yes'
#>     - 'No'
#>     type: enum
#>   label: Soft clipping
#>   description: 'Option which allows soft clipping of alignments at the reference (chromosome)
#>     ends. Can be disabled for compatibility with Cufflinks/Cuffmerge. Yes: Enables
#>     soft clipping; No: Disables soft clipping.'
#>   streamable: no
#>   id: '#alignSoftClipAtReferenceEnds'
#>   inputBinding:
#>     position: 0
#>     prefix: --alignSoftClipAtReferenceEnds
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Alignments and Seeding
#>   sbg:toolDefaultValue: 'Yes'
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: Min overhang
#>   description: Minimum overhang (i.e. block size) for spliced alignments (int>0).
#>   streamable: no
#>   id: '#alignSJoverhangMin'
#>   inputBinding:
#>     position: 0
#>     prefix: --alignSJoverhangMin
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Alignments and Seeding
#>   sbg:toolDefaultValue: '5'
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: 'Min overhang: annotated'
#>   description: Minimum overhang (i.e. block size) for annotated (sjdb) spliced alignments
#>     (int>0).
#>   streamable: no
#>   id: '#alignSJDBoverhangMin'
#>   inputBinding:
#>     position: 0
#>     prefix: --alignSJDBoverhangMin
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Alignments and Seeding
#>   sbg:toolDefaultValue: '3'
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: Max mates gap
#>   description: Maximum gap between two mates, if 0, max intron gap will be determined
#>     by (2^winBinNbits)*winAnchorDistNbins.
#>   streamable: no
#>   id: '#alignMatesGapMax'
#>   inputBinding:
#>     position: 0
#>     prefix: --alignMatesGapMax
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Alignments and Seeding
#>   sbg:toolDefaultValue: '0'
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: Min intron size
#>   description: 'Minimum intron size: genomic gap is considered intron if its length
#>     >= alignIntronMin, otherwise it is considered Deletion (int>=0).'
#>   streamable: no
#>   id: '#alignIntronMin'
#>   inputBinding:
#>     position: 0
#>     prefix: --alignIntronMin
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Alignments and Seeding
#>   sbg:toolDefaultValue: '21'
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: Max intron size
#>   description: Maximum intron size, if 0, max intron size will be determined by (2^winBinNbits)*winAnchorDistNbins.
#>   streamable: no
#>   id: '#alignIntronMax'
#>   inputBinding:
#>     position: 0
#>     prefix: --alignIntronMax
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Alignments and Seeding
#>   sbg:toolDefaultValue: '0'
#>   required: no
#> - type:
#>   - 'null'
#>   - name: alignEndsType
#>     symbols:
#>     - Local
#>     - EndToEnd
#>     type: enum
#>   label: Alignment type
#>   description: 'Type of read ends alignment. Local: standard local alignment with
#>     soft-clipping allowed. EndToEnd: force end to end read alignment, do not soft-clip.'
#>   streamable: no
#>   id: '#alignEndsType'
#>   inputBinding:
#>     position: 0
#>     prefix: --alignEndsType
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Alignments and Seeding
#>   sbg:toolDefaultValue: Local
#>   required: no
#> outputs:
#> - type:
#>   - 'null'
#>   - items: File
#>     type: array
#>   label: Unmapped reads
#>   description: Output of unmapped reads.
#>   streamable: no
#>   id: '#unmapped_reads'
#>   outputBinding:
#>     glob: '*Unmapped.out*'
#>   sbg:fileTypes: FASTQ
#> - type:
#>   - 'null'
#>   - File
#>   label: Transcriptome alignments
#>   description: Alignments translated into transcript coordinates.
#>   streamable: no
#>   id: '#transcriptome_aligned_reads'
#>   outputBinding:
#>     glob: '*Transcriptome*'
#>   sbg:fileTypes: BAM
#> - type:
#>   - 'null'
#>   - File
#>   label: Splice junctions
#>   description: High confidence collapsed splice junctions in tab-delimited format.
#>     Only junctions supported by uniquely mapping reads are reported.
#>   streamable: no
#>   id: '#splice_junctions'
#>   outputBinding:
#>     glob: '*SJ.out.tab'
#>   sbg:fileTypes: TAB
#> - type:
#>   - 'null'
#>   - File
#>   label: Reads per gene
#>   description: File with number of reads per gene. A read is counted if it overlaps
#>     (1nt or more) one and only one gene.
#>   streamable: no
#>   id: '#reads_per_gene'
#>   outputBinding:
#>     glob: '*ReadsPerGene*'
#>   sbg:fileTypes: TAB
#> - type:
#>   - 'null'
#>   - items: File
#>     type: array
#>   label: Log files
#>   description: Log files produced during alignment.
#>   streamable: no
#>   id: '#log_files'
#>   outputBinding:
#>     glob: '*Log*.out'
#>   sbg:fileTypes: OUT
#> - type:
#>   - 'null'
#>   - File
#>   label: Intermediate genome files
#>   description: Archive with genome files produced when annotations are included on
#>     the fly (in the mapping step).
#>   streamable: no
#>   id: '#intermediate_genome'
#>   outputBinding:
#>     glob: '*_STARgenome.tar'
#>   sbg:fileTypes: TAR
#> - type:
#>   - 'null'
#>   - File
#>   label: Chimeric junctions
#>   description: If chimSegmentMin in 'Chimeric Alignments' section is set to 0, 'Chimeric
#>     Junctions' won't be output.
#>   streamable: no
#>   id: '#chimeric_junctions'
#>   outputBinding:
#>     glob: '*Chimeric.out.junction'
#>   sbg:fileTypes: JUNCTION
#> - type:
#>   - 'null'
#>   - File
#>   label: Chimeric alignments
#>   description: Aligned Chimeric sequences SAM - if chimSegmentMin = 0, no Chimeric
#>     Alignment SAM and Chimeric Junctions outputs.
#>   streamable: no
#>   id: '#chimeric_alignments'
#>   outputBinding:
#>     glob: '*.Chimeric.out.sam'
#>   sbg:fileTypes: SAM
#> - type:
#>   - 'null'
#>   - File
#>   label: Aligned SAM/BAM
#>   description: Aligned sequence in SAM/BAM format.
#>   streamable: no
#>   id: '#aligned_reads'
#>   outputBinding:
#>     glob:
#>       engine: '#cwl-js-engine'
#>       script: |-
#>         {
#>           if ($job.inputs.outSortingType == 'SortedByCoordinate') {
#>             sort_name = '.sortedByCoord'
#>           }
#>           else {
#>             sort_name = ''
#>           }
#>           if ($job.inputs.outSAMtype == 'BAM') {
#>             sam_name = "*.Aligned".concat( sort_name, '.out.bam')
#>           }
#>           else {
#>             sam_name = "*.Aligned.out.sam"
#>           }
#>           return sam_name
#>         }
#>       class: Expression
#>   sbg:fileTypes: SAM, BAM
#> requirements:
#> - class: ExpressionEngineRequirement
#>   id: '#cwl-js-engine'
#>   requirements:
#>   - class: DockerRequirement
#>     dockerPull: rabix/js-engine
#> hints:
#> - class: DockerRequirement
#>   dockerPull: images.sbgenomics.com/ana_d/star:2.4.2a
#>   dockerImageId: a4b0ad2c3cae
#> - class: sbg:MemRequirement
#>   value: 60000
#> - class: sbg:CPURequirement
#>   value: 15
#> label: STAR
#> description: STAR is an ultrafast universal RNA-seq aligner. It has very high mapping
#>   speed, accurate alignment of contiguous and spliced reads, detection of polyA-tails,
#>   non-canonical splices and chimeric (fusion) junctions. It works with reads starting
#>   from lengths ~15 bases up to ~300 bases. In case of having longer reads, use of
#>   STAR Long is recommended.
#> class: CommandLineTool
#> baseCommand:
#> - tar
#> - -xvf
#> - class: Expression
#>   script: $job.inputs.genome.path
#>   engine: '#cwl-js-engine'
#> - '&&'
#> - /opt/STAR
#> - --runThreadN
#> - class: Expression
#>   script: |-
#>     {
#>       return $job.allocatedResources.cpu
#>     }
#>   engine: '#cwl-js-engine'
#> arguments:
#> - position: 0
#>   separate: yes
#>   valueFrom:
#>     engine: '#cwl-js-engine'
#>     script: |-
#>       {
#>         file = [].concat($job.inputs.reads)[0].path
#>         extension = /(?:\.([^.]+))?$/.exec(file)[1]
#>         if (extension == "gz") {
#>           return "--readFilesCommand zcat"
#>         } else if (extension == "bz2") {
#>           return "--readFilesCommand bzcat"
#>         }
#>       }
#>     class: Expression
#> - position: 0
#>   separate: yes
#>   valueFrom:
#>     engine: '#cwl-js-engine'
#>     script: "{\t\n  var sjFormat = \"False\"\n  var gtfgffFormat = \"False\"\n  var
#>       list = $job.inputs.sjdbGTFfile\n  var paths_list = []\n  var joined_paths =
#>       \"\"\n  \n  if (list) {\n    list.forEach(function(f){return paths_list.push(f.path)})\n
#>       \   joined_paths = paths_list.join(\" \")\n\n\n    paths_list.forEach(function(f){\n
#>       \     ext = f.replace(/^.*\\./, '')\n      if (ext == \"gff\" || ext == \"gtf\")
#>       {\n        gtfgffFormat = \"True\"\n        return gtfgffFormat\n      }\n      if
#>       (ext == \"txt\") {\n        sjFormat = \"True\"\n        return sjFormat\n      }\n
#>       \   })\n\n    if ($job.inputs.sjdbGTFfile && $job.inputs.sjdbInsertSave != \"None\")
#>       {\n      if (sjFormat == \"True\") {\n        return \"--sjdbFileChrStartEnd
#>       \".concat(joined_paths)\n      }\n      else if (gtfgffFormat == \"True\") {\n
#>       \       return \"--sjdbGTFfile \".concat(joined_paths)\n      }\n    }\n  }\n}"
#>     class: Expression
#> - position: 0
#>   separate: yes
#>   valueFrom:
#>     engine: '#cwl-js-engine'
#>     script: "{\n  a = b = c = d = e = f = g = []\n  if ($job.inputs.sjdbGTFchrPrefix)
#>       {\n    a = [\"--sjdbGTFchrPrefix\", $job.inputs.sjdbGTFchrPrefix]\n  }\n  if
#>       ($job.inputs.sjdbGTFfeatureExon) {\n    b = [\"--sjdbGTFfeatureExon\", $job.inputs.sjdbGTFfeatureExon]\n
#>       \ }\n  if ($job.inputs.sjdbGTFtagExonParentTranscript) {\n    c = [\"--sjdbGTFtagExonParentTranscript\",
#>       $job.inputs.sjdbGTFtagExonParentTranscript]\n  }\n  if ($job.inputs.sjdbGTFtagExonParentGene)
#>       {\n    d = [\"--sjdbGTFtagExonParentGene\", $job.inputs.sjdbGTFtagExonParentGene]\n
#>       \ }\n  if ($job.inputs.sjdbOverhang) {\n    e = [\"--sjdbOverhang\", $job.inputs.sjdbOverhang]\n
#>       \ }\n  if ($job.inputs.sjdbScore) {\n    f = [\"--sjdbScore\", $job.inputs.sjdbScore]\n
#>       \ }\n  if ($job.inputs.sjdbInsertSave) {\n    g = [\"--sjdbInsertSave\", $job.inputs.sjdbInsertSave]\n
#>       \ }\n  \n  \n  \n  if ($job.inputs.sjdbInsertSave != \"None\" && $job.inputs.sjdbGTFfile)
#>       {\n    new_list = a.concat(b, c, d, e, f, g)\n    return new_list.join(\" \")\n
#>       \ }\n}"
#>     class: Expression
#> - position: 0
#>   separate: yes
#>   valueFrom:
#>     engine: '#cwl-js-engine'
#>     script: |-
#>       {
#>         if ($job.inputs.twopassMode == "Basic") {
#>           return "--twopass1readsN ".concat($job.inputs.twopass1readsN)
#>         }
#>       }
#>     class: Expression
#> - position: 0
#>   separate: yes
#>   valueFrom:
#>     engine: '#cwl-js-engine'
#>     script: |-
#>       {
#>         if ($job.inputs.chimOutType == "Within") {
#>           return "--chimOutType ".concat("Within", $job.inputs.outSAMtype)
#>         }
#>         else {
#>           return "--chimOutType SeparateSAMold"
#>         }
#>       }
#>     class: Expression
#> - position: 0
#>   separate: yes
#>   valueFrom:
#>     engine: '#cwl-js-engine'
#>     script: "{\n  var param_list = []\n  \n  function add_param(key, value){\n    if
#>       (value == \"\") {\n      return\n    }\n    else {\n      return param_list.push(key.concat(\":\",
#>       value))\n    }\n  }\n  \n  add_param('ID', \"1\")\n  if ($job.inputs.rg_seq_center)
#>       {\n    add_param('CN', $job.inputs.rg_seq_center)\n  } else if ([].concat($job.inputs.reads)[0].metadata.seq_center)
#>       {\n    add_param('CN', [].concat($job.inputs.reads)[0].metadata.seq_center)\n
#>       \ }\n  if ($job.inputs.rg_library_id) {\n    add_param('LB', $job.inputs.rg_library_id)\n
#>       \ } else if ([].concat($job.inputs.reads)[0].metadata.library_id) {\n    add_param('LB',
#>       [].concat($job.inputs.reads)[0].metadata.library_id)\n  }\n  if ($job.inputs.rg_mfl)
#>       {\n    add_param('PI', $job.inputs.rg_mfl)\n  } else if ([].concat($job.inputs.reads)[0].metadata.median_fragment_length)
#>       {\n    add_param('PI', [].concat($job.inputs.reads)[0].metadata.median_fragment_length)\n
#>       \ }\n  if ($job.inputs.rg_platform) {\n    add_param('PL', $job.inputs.rg_platform.replace(/
#>       /g,\"_\"))\n  } else if ([].concat($job.inputs.reads)[0].metadata.platform)
#>       {\n    add_param('PL', [].concat($job.inputs.reads)[0].metadata.platform.replace(/
#>       /g,\"_\"))\n  }\n  if ($job.inputs.rg_platform_unit_id) {\n    add_param('PU',
#>       $job.inputs.rg_platform_unit_id)\n  } else if ([].concat($job.inputs.reads)[0].metadata.platform_unit_id)
#>       {\n    add_param('PU', [].concat($job.inputs.reads)[0].metadata.platform_unit_id)\n
#>       \ }\n  if ($job.inputs.rg_sample_id) {\n    add_param('SM', $job.inputs.rg_sample_id)\n
#>       \ } else if ([].concat($job.inputs.reads)[0].metadata.sample_id) {\n    add_param('SM',
#>       [].concat($job.inputs.reads)[0].metadata.sample_id)\n  }\n  return \"--outSAMattrRGline
#>       \".concat(param_list.join(\" \"))\n}"
#>     class: Expression
#> - position: 0
#>   separate: yes
#>   valueFrom:
#>     engine: '#cwl-js-engine'
#>     script: |-
#>       {
#>         if ($job.inputs.sjdbGTFfile && $job.inputs.quantMode) {
#>           return "--quantMode ".concat($job.inputs.quantMode)
#>         }
#>       }
#>     class: Expression
#> - position: 100
#>   separate: yes
#>   valueFrom:
#>     engine: '#cwl-js-engine'
#>     script: "{\n  function sharedStart(array){\n  var A= array.concat().sort(), \n
#>       \     a1= A[0], a2= A[A.length-1], L= a1.length, i= 0;\n  while(i<L && a1.charAt(i)===
#>       a2.charAt(i)) i++;\n  return a1.substring(0, i);\n  }\n  path_list = []\n  arr
#>       = [].concat($job.inputs.reads)\n  arr.forEach(function(f){return path_list.push(f.path.replace(/\\\\/g,'/').replace(
#>       /.*\\//, '' ))})\n  common_prefix = sharedStart(path_list)\n  intermediate =
#>       common_prefix.replace( /\\-$|\\_$|\\.$/, '' ).concat(\"._STARgenome\")\n  source
#>       = \"./\".concat(intermediate)\n  destination = intermediate.concat(\".tar\")\n
#>       \ if ($job.inputs.sjdbGTFfile && $job.inputs.sjdbInsertSave && $job.inputs.sjdbInsertSave
#>       != \"None\") {\n    return \"&& tar -vcf \".concat(destination, \" \", source)\n
#>       \ }\n}"
#>     class: Expression
#> - position: 0
#>   prefix: --outFileNamePrefix
#>   separate: yes
#>   valueFrom:
#>     engine: '#cwl-js-engine'
#>     script: "{\n  function sharedStart(array){\n  var A= array.concat().sort(), \n
#>       \     a1= A[0], a2= A[A.length-1], L= a1.length, i= 0;\n  while(i<L && a1.charAt(i)===
#>       a2.charAt(i)) i++;\n  return a1.substring(0, i);\n  }\n  path_list = []\n  arr
#>       = [].concat($job.inputs.reads)\n  arr.forEach(function(f){return path_list.push(f.path.replace(/\\\\/g,'/').replace(
#>       /.*\\//, '' ))})\n  common_prefix = sharedStart(path_list)\n  return \"./\".concat(common_prefix.replace(
#>       /\\-$|\\_$|\\.$/, '' ), \".\")\n}"
#>     class: Expression
#> - position: 101
#>   separate: yes
#>   valueFrom:
#>     engine: '#cwl-js-engine'
#>     script: "{\n  function sharedStart(array){\n  var A= array.concat().sort(), \n
#>       \     a1= A[0], a2= A[A.length-1], L= a1.length, i= 0;\n  while(i<L && a1.charAt(i)===
#>       a2.charAt(i)) i++;\n  return a1.substring(0, i);\n  }\n  path_list = []\n  arr
#>       = [].concat($job.inputs.reads)\n  arr.forEach(function(f){return path_list.push(f.path.replace(/\\\\/g,'/').replace(
#>       /.*\\//, '' ))})\n  common_prefix = sharedStart(path_list)\n  mate1 = common_prefix.replace(
#>       /\\-$|\\_$|\\.$/, '' ).concat(\".Unmapped.out.mate1\")\n  mate2 = common_prefix.replace(
#>       /\\-$|\\_$|\\.$/, '' ).concat(\".Unmapped.out.mate2\")\n  mate1fq = mate1.concat(\".fastq\")\n
#>       \ mate2fq = mate2.concat(\".fastq\")\n  if ($job.inputs.outReadsUnmapped ==
#>       \"Fastx\" && arr.length > 1) {\n    return \"&& mv \".concat(mate1, \" \", mate1fq,
#>       \" && mv \", mate2, \" \", mate2fq)\n  }\n  else if ($job.inputs.outReadsUnmapped
#>       == \"Fastx\" && arr.length == 1) {\n    return \"&& mv \".concat(mate1, \" \",
#>       mate1fq)\n  }\n}"
#>     class: Expression
#> stdin: ''
#> stdout: ''
#> successCodes: []
#> temporaryFailCodes: []
#> x: 624.0
#> 'y': 323
#> 
#> 
# return one
f1$get_tool("^STAR$")
#> sbg:validationErrors: []
#> sbg:sbgMaintained: no
#> sbg:latestRevision: 4
#> sbg:job:
#>   allocatedResources:
#>     mem: 60000
#>     cpu: 15
#>   inputs:
#>     alignWindowsPerReadNmax: 0
#>     outSAMheaderPG: outSAMheaderPG
#>     GENOME_DIR_NAME: ''
#>     outFilterMatchNminOverLread: 0
#>     rg_platform_unit_id: rg_platform_unit
#>     alignTranscriptsPerReadNmax: 0
#>     readMapNumber: 0
#>     alignSplicedMateMapLminOverLmate: 0
#>     alignMatesGapMax: 0
#>     outFilterMultimapNmax: 0
#>     clip5pNbases:
#>     - 0
#>     outSAMstrandField: None
#>     readMatesLengthsIn: NotEqual
#>     outSAMattributes: Standard
#>     seedMultimapNmax: 0
#>     rg_mfl: rg_mfl
#>     chimSegmentMin: 0
#>     winAnchorDistNbins: 0
#>     outSortingType: SortedByCoordinate
#>     outFilterMultimapScoreRange: 0
#>     sjdbInsertSave: Basic
#>     clip3pAfterAdapterNbases:
#>     - 0
#>     scoreDelBase: 0
#>     outFilterMatchNmin: 0
#>     twopass1readsN: 0
#>     outSAMunmapped: None
#>     genome:
#>       size: 0
#>       secondaryFiles: []
#>       class: File
#>       path: genome.ext
#>     sjdbGTFtagExonParentTranscript: ''
#>     limitBAMsortRAM: 0
#>     alignEndsType: Local
#>     seedNoneLociPerWindow: 0
#>     rg_sample_id: rg_sample
#>     sjdbGTFtagExonParentGene: ''
#>     chimScoreMin: 0
#>     outSJfilterIntronMaxVsReadN:
#>     - 0
#>     twopassMode: Basic
#>     alignSplicedMateMapLmin: 0
#>     outSJfilterReads: All
#>     outSAMprimaryFlag: OneBestScore
#>     outSJfilterCountTotalMin:
#>     - 3
#>     - 1
#>     - 1
#>     - 1
#>     outSAMorder: Paired
#>     outSAMflagAND: 0
#>     chimScoreSeparation: 0
#>     alignSJoverhangMin: 0
#>     outFilterScoreMin: 0
#>     seedSearchStartLmax: 0
#>     scoreGapGCAG: 0
#>     scoreGenomicLengthLog2scale: 0
#>     outFilterIntronMotifs: None
#>     outFilterMismatchNmax: 0
#>     reads:
#>     - size: 0
#>       secondaryFiles: []
#>       class: File
#>       metadata:
#>         format: fastq
#>         paired_end: '1'
#>         seq_center: illumina
#>       path: /test-data/mate_1.fastq.bz2
#>     scoreGap: 0
#>     outSJfilterOverhangMin:
#>     - 30
#>     - 12
#>     - 12
#>     - 12
#>     outSAMflagOR: 0
#>     outSAMmode: Full
#>     rg_library_id: ''
#>     chimScoreJunctionNonGTAG: 0
#>     scoreInsOpen: 0
#>     clip3pAdapterSeq:
#>     - clip3pAdapterSeq
#>     chimScoreDropMax: 0
#>     outFilterType: Normal
#>     scoreGapATAC: 0
#>     rg_platform: Ion Torrent PGM
#>     clip3pAdapterMMp:
#>     - 0
#>     sjdbGTFfeatureExon: ''
#>     outQSconversionAdd: 0
#>     quantMode: TranscriptomeSAM
#>     alignIntronMin: 0
#>     scoreInsBase: 0
#>     scoreGapNoncan: 0
#>     seedSearchLmax: 0
#>     outSJfilterDistToOtherSJmin:
#>     - 0
#>     outFilterScoreMinOverLread: 0
#>     alignSJDBoverhangMin: 0
#>     limitOutSJcollapsed: 0
#>     winAnchorMultimapNmax: 0
#>     outFilterMismatchNoverLmax: 0
#>     rg_seq_center: ''
#>     outSAMheaderHD: outSAMheaderHD
#>     chimOutType: Within
#>     quantTranscriptomeBan: IndelSoftclipSingleend
#>     limitOutSJoneRead: 0
#>     alignTranscriptsPerWindowNmax: 0
#>     sjdbOverhang: ~
#>     outReadsUnmapped: Fastx
#>     scoreStitchSJshift: 0
#>     seedPerWindowNmax: 0
#>     outSJfilterCountUniqueMin:
#>     - 3
#>     - 1
#>     - 1
#>     - 1
#>     scoreDelOpen: 0
#>     sjdbGTFfile:
#>     - path: /demo/test-data/chr20.gtf
#>     clip3pNbases:
#>     - 0
#>     - 3
#>     winBinNbits: 0
#>     sjdbScore: ~
#>     seedSearchStartLmaxOverLread: 0
#>     alignIntronMax: 0
#>     seedPerReadNmax: 0
#>     outFilterMismatchNoverReadLmax: 0
#>     winFlankNbins: 0
#>     sjdbGTFchrPrefix: chrPrefix
#>     alignSoftClipAtReferenceEnds: 'Yes'
#>     outSAMreadID: Standard
#>     outSAMtype: BAM
#>     chimJunctionOverhangMin: 0
#>     limitSjdbInsertNsj: 0
#>     outSAMmapqUnique: 0
#> sbg:toolAuthor: Alexander Dobin/CSHL
#> sbg:createdOn: 1450911471
#> sbg:categories:
#> - Alignment
#> sbg:contributors:
#> - ana_d
#> - bix-demo
#> - uros_sipetic
#> sbg:links:
#> - id: https://github.com/alexdobin/STAR
#>   label: Homepage
#> - id: https://github.com/alexdobin/STAR/releases
#>   label: Releases
#> - id: https://github.com/alexdobin/STAR/blob/master/doc/STARmanual.pdf
#>   label: Manual
#> - id: https://groups.google.com/forum/#!forum/rna-star
#>   label: Support
#> - id: http://www.ncbi.nlm.nih.gov/pubmed/23104886
#>   label: Publication
#> sbg:project: bix-demo/star-2-4-2a-demo
#> sbg:createdBy: bix-demo
#> sbg:toolkitVersion: 2.4.2a
#> sbg:id: sevenbridges/public-apps/star/4
#> sbg:license: GNU General Public License v3.0 only
#> sbg:revision: 4
#> sbg:cmdPreview: tar -xvf genome.ext && /opt/STAR --runThreadN 15  --readFilesCommand
#>   bzcat  --sjdbGTFfile /demo/test-data/chr20.gtf  --sjdbGTFchrPrefix chrPrefix --sjdbInsertSave
#>   Basic  --twopass1readsN 0  --chimOutType WithinBAM  --outSAMattrRGline ID:1 CN:illumina
#>   PI:rg_mfl PL:Ion_Torrent_PGM PU:rg_platform_unit SM:rg_sample  --quantMode TranscriptomeSAM
#>   --outFileNamePrefix ./mate_1.fastq.bz2.  --readFilesIn /test-data/mate_1.fastq.bz2  &&
#>   tar -vcf mate_1.fastq.bz2._STARgenome.tar ./mate_1.fastq.bz2._STARgenome  && mv
#>   mate_1.fastq.bz2.Unmapped.out.mate1 mate_1.fastq.bz2.Unmapped.out.mate1.fastq
#> sbg:modifiedOn: 1462889222
#> sbg:modifiedBy: ana_d
#> sbg:revisionsInfo:
#> - sbg:modifiedBy: bix-demo
#>   sbg:modifiedOn: 1450911471
#>   sbg:revision: 0
#> - sbg:modifiedBy: bix-demo
#>   sbg:modifiedOn: 1450911473
#>   sbg:revision: 1
#> - sbg:modifiedBy: bix-demo
#>   sbg:modifiedOn: 1450911475
#>   sbg:revision: 2
#> - sbg:modifiedBy: uros_sipetic
#>   sbg:modifiedOn: 1462878528
#>   sbg:revision: 3
#> - sbg:modifiedBy: ana_d
#>   sbg:modifiedOn: 1462889222
#>   sbg:revision: 4
#> sbg:toolkit: STAR
#> id: sevenbridges/public-apps/star/4
#> inputs:
#> - type:
#>   - 'null'
#>   - int
#>   label: Flanking regions size
#>   description: =log2(winFlank), where win Flank is the size of the left and right
#>     flanking regions for each window (int>0).
#>   streamable: no
#>   id: '#winFlankNbins'
#>   inputBinding:
#>     position: 0
#>     prefix: --winFlankNbins
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Windows, Anchors, Binning
#>   sbg:includeInPorts: yes
#>   sbg:toolDefaultValue: '4'
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: Bin size
#>   description: =log2(winBin), where winBin is the size of the bin for the windows/clustering,
#>     each window will occupy an integer number of bins (int>0).
#>   streamable: no
#>   id: '#winBinNbits'
#>   inputBinding:
#>     position: 0
#>     prefix: --winBinNbits
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Windows, Anchors, Binning
#>   sbg:includeInPorts: yes
#>   sbg:toolDefaultValue: '16'
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: Max loci anchors
#>   description: Max number of loci anchors are allowed to map to (int>0).
#>   streamable: no
#>   id: '#winAnchorMultimapNmax'
#>   inputBinding:
#>     position: 0
#>     prefix: --winAnchorMultimapNmax
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Windows, Anchors, Binning
#>   sbg:toolDefaultValue: '50'
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: Max bins between anchors
#>   description: Max number of bins between two anchors that allows aggregation of anchors
#>     into one window (int>0).
#>   streamable: no
#>   id: '#winAnchorDistNbins'
#>   inputBinding:
#>     position: 0
#>     prefix: --winAnchorDistNbins
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Windows, Anchors, Binning
#>   sbg:toolDefaultValue: '9'
#>   required: no
#> - type:
#>   - 'null'
#>   - name: twopassMode
#>     symbols:
#>     - None
#>     - Basic
#>     type: enum
#>   label: Two-pass mode
#>   description: '2-pass mapping mode. None: 1-pass mapping; Basic: basic 2-pass mapping,
#>     with all 1st pass junctions inserted into the genome indices on the fly.'
#>   streamable: no
#>   id: '#twopassMode'
#>   inputBinding:
#>     position: 0
#>     prefix: --twopassMode
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: 2-pass mapping
#>   sbg:toolDefaultValue: None
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: Reads to process in 1st step
#>   description: 'Number of reads to process for the 1st step. 0: 1-step only, no 2nd
#>     pass; use very large number to map all reads in the first step (int>0).'
#>   streamable: no
#>   id: '#twopass1readsN'
#>   sbg:category: 2-pass mapping
#>   sbg:toolDefaultValue: '-1'
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: Extra alignment score
#>   description: Extra alignment score for alignments that cross database junctions.
#>   streamable: no
#>   id: '#sjdbScore'
#>   sbg:category: Splice junctions database
#>   sbg:toolDefaultValue: '2'
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: '"Overhang" length'
#>   description: Length of the donor/acceptor sequence on each side of the junctions,
#>     ideally = (mate_length - 1) (int >= 0), if int = 0, splice junction database is
#>     not used.
#>   streamable: no
#>   id: '#sjdbOverhang'
#>   sbg:category: Splice junctions database
#>   sbg:toolDefaultValue: '100'
#>   required: no
#> - type:
#>   - 'null'
#>   - name: sjdbInsertSave
#>     symbols:
#>     - Basic
#>     - All
#>     - None
#>     type: enum
#>   label: Save junction files
#>   description: 'Which files to save when sjdb junctions are inserted on the fly at
#>     the mapping step. None: not saving files at all; Basic: only small junction/transcript
#>     files; All: all files including big Genome, SA and SAindex. These files are output
#>     as archive.'
#>   streamable: no
#>   id: '#sjdbInsertSave'
#>   sbg:category: Splice junctions database
#>   sbg:toolDefaultValue: None
#>   required: no
#> - type:
#>   - 'null'
#>   - string
#>   label: Exons' parents name
#>   description: Tag name to be used as exons' transcript-parents.
#>   streamable: no
#>   id: '#sjdbGTFtagExonParentTranscript'
#>   sbg:category: Splice junctions database
#>   sbg:toolDefaultValue: transcript_id
#>   required: no
#> - type:
#>   - 'null'
#>   - string
#>   label: Gene name
#>   description: Tag name to be used as exons' gene-parents.
#>   streamable: no
#>   id: '#sjdbGTFtagExonParentGene'
#>   sbg:category: Splice junctions database
#>   sbg:toolDefaultValue: gene_id
#>   required: no
#> - type:
#>   - 'null'
#>   - items: File
#>     type: array
#>   label: Splice junction file
#>   description: Gene model annotations and/or known transcripts. No need to include
#>     this input, except in case of using "on the fly" annotations.
#>   streamable: no
#>   id: '#sjdbGTFfile'
#>   sbg:category: Basic
#>   sbg:fileTypes: GTF, GFF, TXT
#>   required: no
#> - type:
#>   - 'null'
#>   - string
#>   label: Set exons feature
#>   description: Feature type in GTF file to be used as exons for building transcripts.
#>   streamable: no
#>   id: '#sjdbGTFfeatureExon'
#>   sbg:category: Splice junctions database
#>   sbg:toolDefaultValue: exon
#>   required: no
#> - type:
#>   - 'null'
#>   - string
#>   label: Chromosome names
#>   description: Prefix for chromosome names in a GTF file (e.g. 'chr' for using ENSMEBL
#>     annotations with UCSC geneomes).
#>   streamable: no
#>   id: '#sjdbGTFchrPrefix'
#>   sbg:category: Splice junctions database
#>   sbg:toolDefaultValue: '-'
#>   required: no
#> - type:
#>   - 'null'
#>   - float
#>   label: Search start point normalized
#>   description: seedSearchStartLmax normalized to read length (sum of mates' lengths
#>     for paired-end reads).
#>   streamable: no
#>   id: '#seedSearchStartLmaxOverLread'
#>   inputBinding:
#>     position: 0
#>     prefix: --seedSearchStartLmaxOverLread
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Alignments and Seeding
#>   sbg:toolDefaultValue: '1.0'
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: Search start point
#>   description: Defines the search start point through the read - the read is split
#>     into pieces no longer than this value (int>0).
#>   streamable: no
#>   id: '#seedSearchStartLmax'
#>   inputBinding:
#>     position: 0
#>     prefix: --seedSearchStartLmax
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Alignments and Seeding
#>   sbg:toolDefaultValue: '50'
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: Max seed length
#>   description: Defines the maximum length of the seeds, if =0 max seed length is infinite
#>     (int>=0).
#>   streamable: no
#>   id: '#seedSearchLmax'
#>   inputBinding:
#>     position: 0
#>     prefix: --seedSearchLmax
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Alignments and Seeding
#>   sbg:toolDefaultValue: '0'
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: Max seeds per window
#>   description: Max number of seeds per window (int>=0).
#>   streamable: no
#>   id: '#seedPerWindowNmax'
#>   inputBinding:
#>     position: 0
#>     prefix: --seedPerWindowNmax
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Alignments and Seeding
#>   sbg:toolDefaultValue: '50'
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: Max seeds per read
#>   description: Max number of seeds per read (int>=0).
#>   streamable: no
#>   id: '#seedPerReadNmax'
#>   inputBinding:
#>     position: 0
#>     prefix: --seedPerReadNmax
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Alignments and Seeding
#>   sbg:toolDefaultValue: '1000'
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: Max one-seed loci per window
#>   description: Max number of one seed loci per window (int>=0).
#>   streamable: no
#>   id: '#seedNoneLociPerWindow'
#>   inputBinding:
#>     position: 0
#>     prefix: --seedNoneLociPerWindow
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Alignments and Seeding
#>   sbg:toolDefaultValue: '10'
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: Filter pieces for stitching
#>   description: Only pieces that map fewer than this value are utilized in the stitching
#>     procedure (int>=0).
#>   streamable: no
#>   id: '#seedMultimapNmax'
#>   inputBinding:
#>     position: 0
#>     prefix: --seedMultimapNmax
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Alignments and Seeding
#>   sbg:toolDefaultValue: '10000'
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: Max score reduction
#>   description: Maximum score reduction while searching for SJ boundaries in the stitching
#>     step.
#>   streamable: no
#>   id: '#scoreStitchSJshift'
#>   inputBinding:
#>     position: 0
#>     prefix: --scoreStitchSJshift
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Scoring
#>   sbg:toolDefaultValue: '1'
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: Insertion Open Penalty
#>   description: Insertion open penalty.
#>   streamable: no
#>   id: '#scoreInsOpen'
#>   inputBinding:
#>     position: 0
#>     prefix: --scoreInsOpen
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Scoring
#>   sbg:toolDefaultValue: '-2'
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: Insertion extension penalty
#>   description: Insertion extension penalty per base (in addition to --scoreInsOpen).
#>   streamable: no
#>   id: '#scoreInsBase'
#>   inputBinding:
#>     position: 0
#>     prefix: --scoreInsBase
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Scoring
#>   sbg:toolDefaultValue: '-2'
#>   required: no
#> - type:
#>   - 'null'
#>   - float
#>   label: Log scaled score
#>   description: 'Extra score logarithmically scaled with genomic length of the alignment:
#>     <int>*log2(genomicLength).'
#>   streamable: no
#>   id: '#scoreGenomicLengthLog2scale'
#>   inputBinding:
#>     position: 0
#>     prefix: --scoreGenomicLengthLog2scale
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Scoring
#>   sbg:toolDefaultValue: '-0.25'
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: Non-canonical gap open
#>   description: Non-canonical gap open penalty (in addition to --scoreGap).
#>   streamable: no
#>   id: '#scoreGapNoncan'
#>   inputBinding:
#>     position: 0
#>     prefix: --scoreGapNoncan
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Scoring
#>   sbg:toolDefaultValue: '-8'
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: GC/AG and CT/GC gap open
#>   description: GC/AG and CT/GC gap open penalty (in addition to --scoreGap).
#>   streamable: no
#>   id: '#scoreGapGCAG'
#>   inputBinding:
#>     position: 0
#>     prefix: --scoreGapGCAG
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Scoring
#>   sbg:toolDefaultValue: '-4'
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: AT/AC and GT/AT gap open
#>   description: AT/AC and GT/AT gap open penalty (in addition to --scoreGap).
#>   streamable: no
#>   id: '#scoreGapATAC'
#>   inputBinding:
#>     position: 0
#>     prefix: --scoreGapATAC
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Scoring
#>   sbg:toolDefaultValue: '-8'
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: Gap open penalty
#>   description: Gap open penalty.
#>   streamable: no
#>   id: '#scoreGap'
#>   inputBinding:
#>     position: 0
#>     prefix: --scoreGap
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Scoring
#>   sbg:toolDefaultValue: '0'
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: Deletion open penalty
#>   description: Deletion open penalty.
#>   streamable: no
#>   id: '#scoreDelOpen'
#>   inputBinding:
#>     position: 0
#>     prefix: --scoreDelOpen
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Scoring
#>   sbg:toolDefaultValue: '-2'
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: Deletion extension penalty
#>   description: Deletion extension penalty per base (in addition to --scoreDelOpen).
#>   streamable: no
#>   id: '#scoreDelBase'
#>   inputBinding:
#>     position: 0
#>     prefix: --scoreDelBase
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Scoring
#>   sbg:toolDefaultValue: '-2'
#>   required: no
#> - type:
#>   - 'null'
#>   - string
#>   label: Sequencing center
#>   description: Specify the sequencing center for RG line.
#>   streamable: no
#>   id: '#rg_seq_center'
#>   sbg:category: Read group
#>   sbg:toolDefaultValue: Inferred from metadata
#>   required: no
#> - type:
#>   - 'null'
#>   - string
#>   label: Sample ID
#>   description: Specify the sample ID for RG line.
#>   streamable: no
#>   id: '#rg_sample_id'
#>   sbg:category: Read group
#>   sbg:toolDefaultValue: Inferred from metadata
#>   required: no
#> - type:
#>   - 'null'
#>   - string
#>   label: Platform unit ID
#>   description: Specify the platform unit ID for RG line.
#>   streamable: no
#>   id: '#rg_platform_unit_id'
#>   sbg:category: Read group
#>   sbg:toolDefaultValue: Inferred from metadata
#>   required: no
#> - type:
#>   - 'null'
#>   - name: rg_platform
#>     symbols:
#>     - LS 454
#>     - Helicos
#>     - Illumina
#>     - ABI SOLiD
#>     - Ion Torrent PGM
#>     - PacBio
#>     type: enum
#>   label: Platform
#>   description: Specify the version of the technology that was used for sequencing
#>     or assaying.
#>   streamable: no
#>   id: '#rg_platform'
#>   sbg:category: Read group
#>   sbg:toolDefaultValue: Inferred from metadata
#>   required: no
#> - type:
#>   - 'null'
#>   - string
#>   label: Median fragment length
#>   description: Specify the median fragment length for RG line.
#>   streamable: no
#>   id: '#rg_mfl'
#>   sbg:category: Read group
#>   sbg:toolDefaultValue: Inferred from metadata
#>   required: no
#> - type:
#>   - 'null'
#>   - string
#>   label: Library ID
#>   description: Specify the library ID for RG line.
#>   streamable: no
#>   id: '#rg_library_id'
#>   sbg:category: Read group
#>   sbg:toolDefaultValue: Inferred from metadata
#>   required: no
#> - type:
#>   - items: File
#>     type: array
#>   label: Read sequence
#>   description: Read sequence.
#>   streamable: no
#>   id: '#reads'
#>   inputBinding:
#>     position: 10
#>     separate: yes
#>     itemSeparator: ' '
#>     valueFrom:
#>       engine: '#cwl-js-engine'
#>       script: "{\t\n  var list = [].concat($job.inputs.reads)\n  \n  var resp = []\n
#>         \ \n  if (list.length == 1){\n    resp.push(list[0].path)\n    \n  }else if
#>         (list.length == 2){    \n    \n    left = \"\"\n    right = \"\"\n      \n
#>         \   for (index = 0; index < list.length; ++index) {\n      \n      if (list[index].metadata
#>         != null){\n        if (list[index].metadata.paired_end == 1){\n          left
#>         = list[index].path\n        }else if (list[index].metadata.paired_end == 2){\n
#>         \         right = list[index].path\n        }\n      }\n    }\n    \n    if
#>         (left != \"\" && right != \"\"){      \n      resp.push(left)\n      resp.push(right)\n
#>         \   }\n  }\n  else if (list.length > 2){\n    left = []\n    right = []\n
#>         \     \n    for (index = 0; index < list.length; ++index) {\n      \n      if
#>         (list[index].metadata != null){\n        if (list[index].metadata.paired_end
#>         == 1){\n          left.push(list[index].path)\n        }else if (list[index].metadata.paired_end
#>         == 2){\n          right.push(list[index].path)\n        }\n      }\n    }\n
#>         \   left_join = left.join()\n    right_join = right.join()\n    if (left !=
#>         [] && right != []){      \n      resp.push(left_join)\n      resp.push(right_join)\n
#>         \   }\t\n  }\n  \n  if(resp.length > 0){    \n    return \"--readFilesIn \".concat(resp.join(\"
#>         \"))\n  }\n}"
#>       class: Expression
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Basic
#>   sbg:fileTypes: FASTA, FASTQ, FA, FQ, FASTQ.GZ, FQ.GZ, FASTQ.BZ2, FQ.BZ2
#>   required: yes
#> - type:
#>   - 'null'
#>   - name: readMatesLengthsIn
#>     symbols:
#>     - NotEqual
#>     - Equal
#>     type: enum
#>   label: Reads lengths
#>   description: Equal/Not equal - lengths of names, sequences, qualities for both mates
#>     are the same/not the same. "Not equal" is safe in all situations.
#>   streamable: no
#>   id: '#readMatesLengthsIn'
#>   inputBinding:
#>     position: 0
#>     prefix: --readMatesLengthsIn
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Read parameters
#>   sbg:toolDefaultValue: NotEqual
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: Reads to map
#>   description: Number of reads to map from the beginning of the file.
#>   streamable: no
#>   id: '#readMapNumber'
#>   inputBinding:
#>     position: 0
#>     prefix: --readMapNumber
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Read parameters
#>   sbg:toolDefaultValue: '-1'
#>   required: no
#> - type:
#>   - 'null'
#>   - name: quantTranscriptomeBan
#>     symbols:
#>     - IndelSoftclipSingleend
#>     - Singleend
#>     type: enum
#>   label: Prohibit alignment type
#>   description: 'Prohibit various alignment type. IndelSoftclipSingleend: prohibit
#>     indels, soft clipping and single-end alignments - compatible with RSEM; Singleend:
#>     prohibit single-end alignments.'
#>   streamable: no
#>   id: '#quantTranscriptomeBan'
#>   inputBinding:
#>     position: 0
#>     prefix: --quantTranscriptomeBan
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Quantification of Annotations
#>   sbg:toolDefaultValue: IndelSoftclipSingleend
#>   required: no
#> - type:
#>   - 'null'
#>   - name: quantMode
#>     symbols:
#>     - TranscriptomeSAM
#>     - GeneCounts
#>     type: enum
#>   label: Quantification mode
#>   description: Types of quantification requested. 'TranscriptomeSAM' option outputs
#>     SAM/BAM alignments to transcriptome into a separate file. With 'GeneCounts' option,
#>     STAR will count number of reads per gene while mapping.
#>   streamable: no
#>   id: '#quantMode'
#>   sbg:category: Quantification of Annotations
#>   sbg:toolDefaultValue: '-'
#>   required: no
#> - type:
#>   - 'null'
#>   - name: outSortingType
#>     symbols:
#>     - Unsorted
#>     - SortedByCoordinate
#>     - Unsorted SortedByCoordinate
#>     type: enum
#>   label: Output sorting type
#>   description: Type of output sorting.
#>   streamable: no
#>   id: '#outSortingType'
#>   sbg:category: Output
#>   sbg:toolDefaultValue: SortedByCoordinate
#>   required: no
#> - type:
#>   - 'null'
#>   - name: outSJfilterReads
#>     symbols:
#>     - All
#>     - Unique
#>     type: enum
#>   label: Collapsed junctions reads
#>   description: 'Which reads to consider for collapsed splice junctions output. All:
#>     all reads, unique- and multi-mappers; Unique: uniquely mapping reads only.'
#>   streamable: no
#>   id: '#outSJfilterReads'
#>   inputBinding:
#>     position: 0
#>     prefix: --outSJfilterReads
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: 'Output filtering: splice junctions'
#>   sbg:toolDefaultValue: All
#>   required: no
#> - type:
#>   - 'null'
#>   - items: int
#>     type: array
#>   label: Min overhang SJ
#>   description: Minimum overhang length for splice junctions on both sides for each
#>     of the motifs. To set no output for desired motif, assign -1 to the corresponding
#>     field. Does not apply to annotated junctions.
#>   streamable: no
#>   id: '#outSJfilterOverhangMin'
#>   inputBinding:
#>     position: 0
#>     prefix: --outSJfilterOverhangMin
#>     separate: yes
#>     itemSeparator: ' '
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: 'Output filtering: splice junctions'
#>   sbg:toolDefaultValue: 30 12 12 12
#>   required: no
#> - type:
#>   - 'null'
#>   - items: int
#>     type: array
#>   label: Max gap allowed
#>   description: 'Maximum gap allowed for junctions supported by 1,2,3...N reads (int
#>     >= 0) i.e. by default junctions supported by 1 read can have gaps <=50000b, by
#>     2 reads: <=100000b, by 3 reads: <=200000. By 4 or more reads: any gap <=alignIntronMax.
#>     Does not apply to annotated junctions.'
#>   streamable: no
#>   id: '#outSJfilterIntronMaxVsReadN'
#>   inputBinding:
#>     position: 0
#>     prefix: --outSJfilterIntronMaxVsReadN
#>     separate: yes
#>     itemSeparator: ' '
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: 'Output filtering: splice junctions'
#>   sbg:toolDefaultValue: 50000 100000 200000
#>   required: no
#> - type:
#>   - 'null'
#>   - items: int
#>     type: array
#>   label: Min distance to other donor/acceptor
#>   description: Minimum allowed distance to other junctions' donor/acceptor for each
#>     of the motifs (int >= 0). Does not apply to annotated junctions.
#>   streamable: no
#>   id: '#outSJfilterDistToOtherSJmin'
#>   inputBinding:
#>     position: 0
#>     prefix: --outSJfilterDistToOtherSJmin
#>     separate: yes
#>     itemSeparator: ' '
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: 'Output filtering: splice junctions'
#>   sbg:toolDefaultValue: 10 0 5 10
#>   required: no
#> - type:
#>   - 'null'
#>   - items: int
#>     type: array
#>   label: Min unique count
#>   description: Minimum uniquely mapping read count per junction for each of the motifs.
#>     To set no output for desired motif, assign -1 to the corresponding field. Junctions
#>     are output if one of --outSJfilterCountUniqueMin OR --outSJfilterCountTotalMin
#>     conditions are satisfied. Does not apply to annotated junctions.
#>   streamable: no
#>   id: '#outSJfilterCountUniqueMin'
#>   inputBinding:
#>     position: 0
#>     prefix: --outSJfilterCountUniqueMin
#>     separate: yes
#>     itemSeparator: ' '
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: 'Output filtering: splice junctions'
#>   sbg:toolDefaultValue: 3 1 1 1
#>   required: no
#> - type:
#>   - 'null'
#>   - items: int
#>     type: array
#>   label: Min total count
#>   description: Minimum total (multi-mapping+unique) read count per junction for each
#>     of the motifs. To set no output for desired motif, assign -1 to the corresponding
#>     field. Junctions are output if one of --outSJfilterCountUniqueMin OR --outSJfilterCountTotalMin
#>     conditions are satisfied. Does not apply to annotated junctions.
#>   streamable: no
#>   id: '#outSJfilterCountTotalMin'
#>   inputBinding:
#>     position: 0
#>     prefix: --outSJfilterCountTotalMin
#>     separate: yes
#>     itemSeparator: ' '
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: 'Output filtering: splice junctions'
#>   sbg:toolDefaultValue: 3 1 1 1
#>   required: no
#> - type:
#>   - 'null'
#>   - name: outSAMunmapped
#>     symbols:
#>     - None
#>     - Within
#>     type: enum
#>   label: Write unmapped in SAM
#>   description: 'Output of unmapped reads in the SAM format. None: no output Within:
#>     output unmapped reads within the main SAM file (i.e. Aligned.out.sam).'
#>   streamable: no
#>   id: '#outSAMunmapped'
#>   inputBinding:
#>     position: 0
#>     prefix: --outSAMunmapped
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Output
#>   sbg:toolDefaultValue: None
#>   required: no
#> - type:
#>   - 'null'
#>   - name: outSAMtype
#>     symbols:
#>     - SAM
#>     - BAM
#>     type: enum
#>   label: Output format
#>   description: Format of output alignments.
#>   streamable: no
#>   id: '#outSAMtype'
#>   inputBinding:
#>     position: 0
#>     separate: yes
#>     valueFrom:
#>       engine: '#cwl-js-engine'
#>       script: |-
#>         {
#>           SAM_type = $job.inputs.outSAMtype
#>           SORT_type = $job.inputs.outSortingType
#>           if (SAM_type && SORT_type) {
#>             return "--outSAMtype ".concat(SAM_type, " ", SORT_type)
#>           }
#>         }
#>       class: Expression
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Output
#>   sbg:toolDefaultValue: SAM
#>   required: no
#> - type:
#>   - 'null'
#>   - name: outSAMstrandField
#>     symbols:
#>     - None
#>     - intronMotif
#>     type: enum
#>   label: Strand field flag
#>   description: 'Cufflinks-like strand field flag. None: not used; intronMotif: strand
#>     derived from the intron motif. Reads with inconsistent and/or non-canonical introns
#>     are filtered out.'
#>   streamable: no
#>   id: '#outSAMstrandField'
#>   inputBinding:
#>     position: 0
#>     prefix: --outSAMstrandField
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Output
#>   sbg:toolDefaultValue: None
#>   required: no
#> - type:
#>   - 'null'
#>   - name: outSAMreadID
#>     symbols:
#>     - Standard
#>     - Number
#>     type: enum
#>   label: Read ID
#>   description: 'Read ID record type. Standard: first word (until space) from the FASTx
#>     read ID line, removing /1,/2 from the end; Number: read number (index) in the
#>     FASTx file.'
#>   streamable: no
#>   id: '#outSAMreadID'
#>   inputBinding:
#>     position: 0
#>     prefix: --outSAMreadID
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Output
#>   sbg:toolDefaultValue: Standard
#>   required: no
#> - type:
#>   - 'null'
#>   - name: outSAMprimaryFlag
#>     symbols:
#>     - OneBestScore
#>     - AllBestScore
#>     type: enum
#>   label: Primary alignments
#>   description: 'Which alignments are considered primary - all others will be marked
#>     with 0x100 bit in the FLAG. OneBestScore: only one alignment with the best score
#>     is primary; AllBestScore: all alignments with the best score are primary.'
#>   streamable: no
#>   id: '#outSAMprimaryFlag'
#>   inputBinding:
#>     position: 0
#>     prefix: --outSAMprimaryFlag
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Output
#>   sbg:toolDefaultValue: OneBestScore
#>   required: no
#> - type:
#>   - 'null'
#>   - name: outSAMorder
#>     symbols:
#>     - Paired
#>     - PairedKeepInputOrder
#>     type: enum
#>   label: Sorting in SAM
#>   description: 'Type of sorting for the SAM output. Paired: one mate after the other
#>     for all paired alignments; PairedKeepInputOrder: one mate after the other for
#>     all paired alignments, the order is kept the same as in the input FASTQ files.'
#>   streamable: no
#>   id: '#outSAMorder'
#>   inputBinding:
#>     position: 0
#>     prefix: --outSAMorder
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Output
#>   sbg:toolDefaultValue: Paired
#>   required: no
#> - type:
#>   - 'null'
#>   - name: outSAMmode
#>     symbols:
#>     - Full
#>     - NoQS
#>     type: enum
#>   label: SAM mode
#>   description: 'Mode of SAM output. Full: full SAM output; NoQS: full SAM but without
#>     quality scores.'
#>   streamable: no
#>   id: '#outSAMmode'
#>   inputBinding:
#>     position: 0
#>     prefix: --outSAMmode
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Output
#>   sbg:toolDefaultValue: Full
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: MAPQ value
#>   description: MAPQ value for unique mappers (0 to 255).
#>   streamable: no
#>   id: '#outSAMmapqUnique'
#>   inputBinding:
#>     position: 0
#>     prefix: --outSAMmapqUnique
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Output
#>   sbg:toolDefaultValue: '255'
#>   required: no
#> - type:
#>   - 'null'
#>   - string
#>   label: SAM header @PG
#>   description: Extra @PG (software) line of the SAM header (in addition to STAR).
#>   streamable: no
#>   id: '#outSAMheaderPG'
#>   inputBinding:
#>     position: 0
#>     prefix: --outSAMheaderPG
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Output
#>   sbg:toolDefaultValue: '-'
#>   required: no
#> - type:
#>   - 'null'
#>   - string
#>   label: SAM header @HD
#>   description: '@HD (header) line of the SAM header.'
#>   streamable: no
#>   id: '#outSAMheaderHD'
#>   inputBinding:
#>     position: 0
#>     prefix: --outSAMheaderHD
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Output
#>   sbg:toolDefaultValue: '-'
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: OR SAM flag
#>   description: Set specific bits of the SAM FLAG.
#>   streamable: no
#>   id: '#outSAMflagOR'
#>   inputBinding:
#>     position: 0
#>     prefix: --outSAMflagOR
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Output
#>   sbg:toolDefaultValue: '0'
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: AND SAM flag
#>   description: Set specific bits of the SAM FLAG.
#>   streamable: no
#>   id: '#outSAMflagAND'
#>   inputBinding:
#>     position: 0
#>     prefix: --outSAMflagAND
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Output
#>   sbg:toolDefaultValue: '65535'
#>   required: no
#> - type:
#>   - 'null'
#>   - name: outSAMattributes
#>     symbols:
#>     - Standard
#>     - NH
#>     - All
#>     - None
#>     type: enum
#>   label: SAM attributes
#>   description: 'Desired SAM attributes, in the order desired for the output SAM. NH:
#>     any combination in any order; Standard: NH HI AS nM; All: NH HI AS nM NM MD jM
#>     jI; None: no attributes.'
#>   streamable: no
#>   id: '#outSAMattributes'
#>   inputBinding:
#>     position: 0
#>     prefix: --outSAMattributes
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Output
#>   sbg:toolDefaultValue: Standard
#>   required: no
#> - type:
#>   - 'null'
#>   - name: outReadsUnmapped
#>     symbols:
#>     - None
#>     - Fastx
#>     type: enum
#>   label: Output unmapped reads
#>   description: 'Output of unmapped reads (besides SAM). None: no output; Fastx: output
#>     in separate fasta/fastq files, Unmapped.out.mate1/2.'
#>   streamable: no
#>   id: '#outReadsUnmapped'
#>   inputBinding:
#>     position: 0
#>     prefix: --outReadsUnmapped
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Output
#>   sbg:toolDefaultValue: None
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: Quality conversion
#>   description: Add this number to the quality score (e.g. to convert from Illumina
#>     to Sanger, use -31).
#>   streamable: no
#>   id: '#outQSconversionAdd'
#>   inputBinding:
#>     position: 0
#>     prefix: --outQSconversionAdd
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Output
#>   sbg:toolDefaultValue: '0'
#>   required: no
#> - type:
#>   - 'null'
#>   - name: outFilterType
#>     symbols:
#>     - Normal
#>     - BySJout
#>     type: enum
#>   label: Filtering type
#>   description: 'Type of filtering. Normal: standard filtering using only current alignment;
#>     BySJout: keep only those reads that contain junctions that passed filtering into
#>     SJ.out.tab.'
#>   streamable: no
#>   id: '#outFilterType'
#>   inputBinding:
#>     position: 0
#>     prefix: --outFilterType
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Output filtering
#>   sbg:toolDefaultValue: Normal
#>   required: no
#> - type:
#>   - 'null'
#>   - float
#>   label: Min score normalized
#>   description: '''Minimum score'' normalized to read length (sum of mates'' lengths
#>     for paired-end reads).'
#>   streamable: no
#>   id: '#outFilterScoreMinOverLread'
#>   inputBinding:
#>     position: 0
#>     prefix: --outFilterScoreMinOverLread
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Output filtering
#>   sbg:toolDefaultValue: '0.66'
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: Min score
#>   description: Alignment will be output only if its score is higher than this value.
#>   streamable: no
#>   id: '#outFilterScoreMin'
#>   inputBinding:
#>     position: 0
#>     prefix: --outFilterScoreMin
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Output filtering
#>   sbg:toolDefaultValue: '0'
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: Multimapping score range
#>   description: The score range below the maximum score for multimapping alignments.
#>   streamable: no
#>   id: '#outFilterMultimapScoreRange'
#>   inputBinding:
#>     position: 0
#>     prefix: --outFilterMultimapScoreRange
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Output filtering
#>   sbg:toolDefaultValue: '1'
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: Max number of mappings
#>   description: Read alignments will be output only if the read maps fewer than this
#>     value, otherwise no alignments will be output.
#>   streamable: no
#>   id: '#outFilterMultimapNmax'
#>   inputBinding:
#>     position: 0
#>     prefix: --outFilterMultimapNmax
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Output filtering
#>   sbg:toolDefaultValue: '10'
#>   required: no
#> - type:
#>   - 'null'
#>   - float
#>   label: Mismatches to *read* length
#>   description: Alignment will be output only if its ratio of mismatches to *read*
#>     length is less than this value.
#>   streamable: no
#>   id: '#outFilterMismatchNoverReadLmax'
#>   inputBinding:
#>     position: 0
#>     prefix: --outFilterMismatchNoverReadLmax
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Output filtering
#>   sbg:toolDefaultValue: '1'
#>   required: no
#> - type:
#>   - 'null'
#>   - float
#>   label: Mismatches to *mapped* length
#>   description: Alignment will be output only if its ratio of mismatches to *mapped*
#>     length is less than this value.
#>   streamable: no
#>   id: '#outFilterMismatchNoverLmax'
#>   inputBinding:
#>     position: 0
#>     prefix: --outFilterMismatchNoverLmax
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Output filtering
#>   sbg:toolDefaultValue: '0.3'
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: Max number of mismatches
#>   description: Alignment will be output only if it has fewer mismatches than this
#>     value.
#>   streamable: no
#>   id: '#outFilterMismatchNmax'
#>   inputBinding:
#>     position: 0
#>     prefix: --outFilterMismatchNmax
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Output filtering
#>   sbg:toolDefaultValue: '10'
#>   required: no
#> - type:
#>   - 'null'
#>   - float
#>   label: Min matched bases normalized
#>   description: '''Minimum matched bases'' normalized to read length (sum of mates
#>     lengths for paired-end reads).'
#>   streamable: no
#>   id: '#outFilterMatchNminOverLread'
#>   inputBinding:
#>     position: 0
#>     prefix: --outFilterMatchNminOverLread
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Output filtering
#>   sbg:toolDefaultValue: '0.66'
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: Min matched bases
#>   description: Alignment will be output only if the number of matched bases is higher
#>     than this value.
#>   streamable: no
#>   id: '#outFilterMatchNmin'
#>   inputBinding:
#>     position: 0
#>     prefix: --outFilterMatchNmin
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Output filtering
#>   sbg:toolDefaultValue: '0'
#>   required: no
#> - type:
#>   - 'null'
#>   - name: outFilterIntronMotifs
#>     symbols:
#>     - None
#>     - RemoveNoncanonical
#>     - RemoveNoncanonicalUnannotated
#>     type: enum
#>   label: Motifs filtering
#>   description: 'Filter alignment using their motifs. None: no filtering; RemoveNoncanonical:
#>     filter out alignments that contain non-canonical junctions; RemoveNoncanonicalUnannotated:
#>     filter out alignments that contain non-canonical unannotated junctions when using
#>     annotated splice junctions database. The annotated non-canonical junctions will
#>     be kept.'
#>   streamable: no
#>   id: '#outFilterIntronMotifs'
#>   inputBinding:
#>     position: 0
#>     prefix: --outFilterIntronMotifs
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Output filtering
#>   sbg:toolDefaultValue: None
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: Max insert junctions
#>   description: Maximum number of junction to be inserted to the genome on the fly
#>     at the mapping stage, including those from annotations and those detected in the
#>     1st step of the 2-pass run.
#>   streamable: no
#>   id: '#limitSjdbInsertNsj'
#>   inputBinding:
#>     position: 0
#>     prefix: --limitSjdbInsertNsj
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Limits
#>   sbg:toolDefaultValue: '1000000'
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: Junctions max number
#>   description: Max number of junctions for one read (including all multi-mappers).
#>   streamable: no
#>   id: '#limitOutSJoneRead'
#>   inputBinding:
#>     position: 0
#>     prefix: --limitOutSJoneRead
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Limits
#>   sbg:toolDefaultValue: '1000'
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: Collapsed junctions max number
#>   description: Max number of collapsed junctions.
#>   streamable: no
#>   id: '#limitOutSJcollapsed'
#>   inputBinding:
#>     position: 0
#>     prefix: --limitOutSJcollapsed
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Limits
#>   sbg:toolDefaultValue: '1000000'
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: Limit BAM sorting memory
#>   description: Maximum available RAM for sorting BAM. If set to 0, it will be set
#>     to the genome index size.
#>   streamable: no
#>   id: '#limitBAMsortRAM'
#>   inputBinding:
#>     position: 0
#>     prefix: --limitBAMsortRAM
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Limits
#>   sbg:toolDefaultValue: '0'
#>   required: no
#> - type:
#>   - 'null'
#>   - string
#>   label: Genome dir name
#>   description: Name of the directory which contains genome files (when genome.tar
#>     is uncompressed).
#>   streamable: no
#>   id: '#genomeDirName'
#>   inputBinding:
#>     position: 0
#>     prefix: --genomeDir
#>     separate: yes
#>     valueFrom:
#>       engine: '#cwl-js-engine'
#>       script: $job.inputs.genomeDirName || "genomeDir"
#>       class: Expression
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Basic
#>   sbg:toolDefaultValue: genomeDir
#>   required: no
#> - type:
#>   - File
#>   label: Genome files
#>   description: Genome files created using STAR Genome Generate.
#>   streamable: no
#>   id: '#genome'
#>   sbg:category: Basic
#>   sbg:fileTypes: TAR
#>   required: yes
#> - type:
#>   - 'null'
#>   - items: int
#>     type: array
#>   label: Clip 5p bases
#>   description: Number of bases to clip from 5p of each mate. In case only one value
#>     is given, it will be assumed the same for both mates.
#>   streamable: no
#>   id: '#clip5pNbases'
#>   inputBinding:
#>     position: 0
#>     prefix: --clip5pNbases
#>     separate: yes
#>     itemSeparator: ' '
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Read parameters
#>   sbg:toolDefaultValue: '0'
#>   required: no
#> - type:
#>   - 'null'
#>   - items: int
#>     type: array
#>   label: Clip 3p bases
#>   description: Number of bases to clip from 3p of each mate. In case only one value
#>     is given, it will be assumed the same for both mates.
#>   streamable: no
#>   id: '#clip3pNbases'
#>   inputBinding:
#>     position: 0
#>     prefix: --clip3pNbases
#>     separate: yes
#>     itemSeparator: ' '
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Read parameters
#>   sbg:toolDefaultValue: '0'
#>   required: no
#> - type:
#>   - 'null'
#>   - items: int
#>     type: array
#>   label: Clip 3p after adapter seq.
#>   description: Number of bases to clip from 3p of each mate after the adapter clipping.
#>     In case only one value is given, it will be assumed the same for both mates.
#>   streamable: no
#>   id: '#clip3pAfterAdapterNbases'
#>   inputBinding:
#>     position: 0
#>     prefix: --clip3pAfterAdapterNbases
#>     separate: yes
#>     itemSeparator: ' '
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Read parameters
#>   sbg:toolDefaultValue: '0'
#>   required: no
#> - type:
#>   - 'null'
#>   - items: string
#>     type: array
#>   label: Clip 3p adapter sequence
#>   description: Adapter sequence to clip from 3p of each mate. In case only one value
#>     is given, it will be assumed the same for both mates.
#>   streamable: no
#>   id: '#clip3pAdapterSeq'
#>   inputBinding:
#>     position: 0
#>     prefix: --clip3pAdapterSeq
#>     separate: yes
#>     itemSeparator: ' '
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Read parameters
#>   sbg:toolDefaultValue: '-'
#>   required: no
#> - type:
#>   - 'null'
#>   - items: float
#>     type: array
#>   label: Max mismatches proportions
#>   description: Max proportion of mismatches for 3p adapter clipping for each mate.
#>     In case only one value is given, it will be assumed the same for both mates.
#>   streamable: no
#>   id: '#clip3pAdapterMMp'
#>   inputBinding:
#>     position: 0
#>     prefix: --clip3pAdapterMMp
#>     separate: yes
#>     itemSeparator: ' '
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Read parameters
#>   sbg:toolDefaultValue: '0.1'
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: Min segment length
#>   description: Minimum length of chimeric segment length, if =0, no chimeric output
#>     (int>=0).
#>   streamable: no
#>   id: '#chimSegmentMin'
#>   inputBinding:
#>     position: 0
#>     prefix: --chimSegmentMin
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Chimeric Alignments
#>   sbg:toolDefaultValue: '15'
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: Min separation score
#>   description: Minimum difference (separation) between the best chimeric score and
#>     the next one (int>=0).
#>   streamable: no
#>   id: '#chimScoreSeparation'
#>   inputBinding:
#>     position: 0
#>     prefix: --chimScoreSeparation
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Chimeric Alignments
#>   sbg:toolDefaultValue: '10'
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: Min total score
#>   description: Minimum total (summed) score of the chimeric segments (int>=0).
#>   streamable: no
#>   id: '#chimScoreMin'
#>   inputBinding:
#>     position: 0
#>     prefix: --chimScoreMin
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Chimeric Alignments
#>   sbg:toolDefaultValue: '0'
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: Non-GT/AG penalty
#>   description: Penalty for a non-GT/AG chimeric junction.
#>   streamable: no
#>   id: '#chimScoreJunctionNonGTAG'
#>   inputBinding:
#>     position: 0
#>     prefix: --chimScoreJunctionNonGTAG
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Chimeric Alignments
#>   sbg:toolDefaultValue: '-1'
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: Max drop score
#>   description: Max drop (difference) of chimeric score (the sum of scores of all chimeric
#>     segements) from the read length (int>=0).
#>   streamable: no
#>   id: '#chimScoreDropMax'
#>   inputBinding:
#>     position: 0
#>     prefix: --chimScoreDropMax
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Chimeric Alignments
#>   sbg:toolDefaultValue: '20'
#>   required: no
#> - type:
#>   - 'null'
#>   - name: chimOutType
#>     symbols:
#>     - SeparateSAMold
#>     - Within
#>     type: enum
#>   label: Chimeric output type
#>   description: 'Type of chimeric output. SeparateSAMold: output old SAM into separate
#>     Chimeric.out.sam file; Within: output into main aligned SAM/BAM files.'
#>   streamable: no
#>   id: '#chimOutType'
#>   sbg:category: Chimeric Alignments
#>   sbg:toolDefaultValue: SeparateSAMold
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: Min junction overhang
#>   description: Minimum overhang for a chimeric junction (int>=0).
#>   streamable: no
#>   id: '#chimJunctionOverhangMin'
#>   inputBinding:
#>     position: 0
#>     prefix: --chimJunctionOverhangMin
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Chimeric Alignments
#>   sbg:toolDefaultValue: '20'
#>   required: no
#> - type:
#>   - 'null'
#>   - float
#>   label: Max windows per read
#>   description: Max number of windows per read (int>0).
#>   streamable: no
#>   id: '#alignWindowsPerReadNmax'
#>   inputBinding:
#>     position: 0
#>     prefix: --alignWindowsPerReadNmax
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Alignments and Seeding
#>   sbg:toolDefaultValue: '10000'
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: Max transcripts per window
#>   description: Max number of transcripts per window (int>0).
#>   streamable: no
#>   id: '#alignTranscriptsPerWindowNmax'
#>   inputBinding:
#>     position: 0
#>     prefix: --alignTranscriptsPerWindowNmax
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Alignments and Seeding
#>   sbg:toolDefaultValue: '100'
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: Max transcripts per read
#>   description: Max number of different alignments per read to consider (int>0).
#>   streamable: no
#>   id: '#alignTranscriptsPerReadNmax'
#>   inputBinding:
#>     position: 0
#>     prefix: --alignTranscriptsPerReadNmax
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Alignments and Seeding
#>   sbg:toolDefaultValue: '10000'
#>   required: no
#> - type:
#>   - 'null'
#>   - float
#>   label: Min mapped length normalized
#>   description: alignSplicedMateMapLmin normalized to mate length (float>0).
#>   streamable: no
#>   id: '#alignSplicedMateMapLminOverLmate'
#>   inputBinding:
#>     position: 0
#>     prefix: --alignSplicedMateMapLminOverLmate
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Alignments and Seeding
#>   sbg:toolDefaultValue: '0.66'
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: Min mapped length
#>   description: Minimum mapped length for a read mate that is spliced (int>0).
#>   streamable: no
#>   id: '#alignSplicedMateMapLmin'
#>   inputBinding:
#>     position: 0
#>     prefix: --alignSplicedMateMapLmin
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Alignments and Seeding
#>   sbg:toolDefaultValue: '0'
#>   required: no
#> - type:
#>   - 'null'
#>   - name: alignSoftClipAtReferenceEnds
#>     symbols:
#>     - 'Yes'
#>     - 'No'
#>     type: enum
#>   label: Soft clipping
#>   description: 'Option which allows soft clipping of alignments at the reference (chromosome)
#>     ends. Can be disabled for compatibility with Cufflinks/Cuffmerge. Yes: Enables
#>     soft clipping; No: Disables soft clipping.'
#>   streamable: no
#>   id: '#alignSoftClipAtReferenceEnds'
#>   inputBinding:
#>     position: 0
#>     prefix: --alignSoftClipAtReferenceEnds
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Alignments and Seeding
#>   sbg:toolDefaultValue: 'Yes'
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: Min overhang
#>   description: Minimum overhang (i.e. block size) for spliced alignments (int>0).
#>   streamable: no
#>   id: '#alignSJoverhangMin'
#>   inputBinding:
#>     position: 0
#>     prefix: --alignSJoverhangMin
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Alignments and Seeding
#>   sbg:toolDefaultValue: '5'
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: 'Min overhang: annotated'
#>   description: Minimum overhang (i.e. block size) for annotated (sjdb) spliced alignments
#>     (int>0).
#>   streamable: no
#>   id: '#alignSJDBoverhangMin'
#>   inputBinding:
#>     position: 0
#>     prefix: --alignSJDBoverhangMin
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Alignments and Seeding
#>   sbg:toolDefaultValue: '3'
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: Max mates gap
#>   description: Maximum gap between two mates, if 0, max intron gap will be determined
#>     by (2^winBinNbits)*winAnchorDistNbins.
#>   streamable: no
#>   id: '#alignMatesGapMax'
#>   inputBinding:
#>     position: 0
#>     prefix: --alignMatesGapMax
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Alignments and Seeding
#>   sbg:toolDefaultValue: '0'
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: Min intron size
#>   description: 'Minimum intron size: genomic gap is considered intron if its length
#>     >= alignIntronMin, otherwise it is considered Deletion (int>=0).'
#>   streamable: no
#>   id: '#alignIntronMin'
#>   inputBinding:
#>     position: 0
#>     prefix: --alignIntronMin
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Alignments and Seeding
#>   sbg:toolDefaultValue: '21'
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: Max intron size
#>   description: Maximum intron size, if 0, max intron size will be determined by (2^winBinNbits)*winAnchorDistNbins.
#>   streamable: no
#>   id: '#alignIntronMax'
#>   inputBinding:
#>     position: 0
#>     prefix: --alignIntronMax
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Alignments and Seeding
#>   sbg:toolDefaultValue: '0'
#>   required: no
#> - type:
#>   - 'null'
#>   - name: alignEndsType
#>     symbols:
#>     - Local
#>     - EndToEnd
#>     type: enum
#>   label: Alignment type
#>   description: 'Type of read ends alignment. Local: standard local alignment with
#>     soft-clipping allowed. EndToEnd: force end to end read alignment, do not soft-clip.'
#>   streamable: no
#>   id: '#alignEndsType'
#>   inputBinding:
#>     position: 0
#>     prefix: --alignEndsType
#>     separate: yes
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Alignments and Seeding
#>   sbg:toolDefaultValue: Local
#>   required: no
#> outputs:
#> - type:
#>   - 'null'
#>   - items: File
#>     type: array
#>   label: Unmapped reads
#>   description: Output of unmapped reads.
#>   streamable: no
#>   id: '#unmapped_reads'
#>   outputBinding:
#>     glob: '*Unmapped.out*'
#>   sbg:fileTypes: FASTQ
#> - type:
#>   - 'null'
#>   - File
#>   label: Transcriptome alignments
#>   description: Alignments translated into transcript coordinates.
#>   streamable: no
#>   id: '#transcriptome_aligned_reads'
#>   outputBinding:
#>     glob: '*Transcriptome*'
#>   sbg:fileTypes: BAM
#> - type:
#>   - 'null'
#>   - File
#>   label: Splice junctions
#>   description: High confidence collapsed splice junctions in tab-delimited format.
#>     Only junctions supported by uniquely mapping reads are reported.
#>   streamable: no
#>   id: '#splice_junctions'
#>   outputBinding:
#>     glob: '*SJ.out.tab'
#>   sbg:fileTypes: TAB
#> - type:
#>   - 'null'
#>   - File
#>   label: Reads per gene
#>   description: File with number of reads per gene. A read is counted if it overlaps
#>     (1nt or more) one and only one gene.
#>   streamable: no
#>   id: '#reads_per_gene'
#>   outputBinding:
#>     glob: '*ReadsPerGene*'
#>   sbg:fileTypes: TAB
#> - type:
#>   - 'null'
#>   - items: File
#>     type: array
#>   label: Log files
#>   description: Log files produced during alignment.
#>   streamable: no
#>   id: '#log_files'
#>   outputBinding:
#>     glob: '*Log*.out'
#>   sbg:fileTypes: OUT
#> - type:
#>   - 'null'
#>   - File
#>   label: Intermediate genome files
#>   description: Archive with genome files produced when annotations are included on
#>     the fly (in the mapping step).
#>   streamable: no
#>   id: '#intermediate_genome'
#>   outputBinding:
#>     glob: '*_STARgenome.tar'
#>   sbg:fileTypes: TAR
#> - type:
#>   - 'null'
#>   - File
#>   label: Chimeric junctions
#>   description: If chimSegmentMin in 'Chimeric Alignments' section is set to 0, 'Chimeric
#>     Junctions' won't be output.
#>   streamable: no
#>   id: '#chimeric_junctions'
#>   outputBinding:
#>     glob: '*Chimeric.out.junction'
#>   sbg:fileTypes: JUNCTION
#> - type:
#>   - 'null'
#>   - File
#>   label: Chimeric alignments
#>   description: Aligned Chimeric sequences SAM - if chimSegmentMin = 0, no Chimeric
#>     Alignment SAM and Chimeric Junctions outputs.
#>   streamable: no
#>   id: '#chimeric_alignments'
#>   outputBinding:
#>     glob: '*.Chimeric.out.sam'
#>   sbg:fileTypes: SAM
#> - type:
#>   - 'null'
#>   - File
#>   label: Aligned SAM/BAM
#>   description: Aligned sequence in SAM/BAM format.
#>   streamable: no
#>   id: '#aligned_reads'
#>   outputBinding:
#>     glob:
#>       engine: '#cwl-js-engine'
#>       script: |-
#>         {
#>           if ($job.inputs.outSortingType == 'SortedByCoordinate') {
#>             sort_name = '.sortedByCoord'
#>           }
#>           else {
#>             sort_name = ''
#>           }
#>           if ($job.inputs.outSAMtype == 'BAM') {
#>             sam_name = "*.Aligned".concat( sort_name, '.out.bam')
#>           }
#>           else {
#>             sam_name = "*.Aligned.out.sam"
#>           }
#>           return sam_name
#>         }
#>       class: Expression
#>   sbg:fileTypes: SAM, BAM
#> requirements:
#> - class: ExpressionEngineRequirement
#>   id: '#cwl-js-engine'
#>   requirements:
#>   - class: DockerRequirement
#>     dockerPull: rabix/js-engine
#> hints:
#> - class: DockerRequirement
#>   dockerPull: images.sbgenomics.com/ana_d/star:2.4.2a
#>   dockerImageId: a4b0ad2c3cae
#> - class: sbg:MemRequirement
#>   value: 60000
#> - class: sbg:CPURequirement
#>   value: 15
#> label: STAR
#> description: STAR is an ultrafast universal RNA-seq aligner. It has very high mapping
#>   speed, accurate alignment of contiguous and spliced reads, detection of polyA-tails,
#>   non-canonical splices and chimeric (fusion) junctions. It works with reads starting
#>   from lengths ~15 bases up to ~300 bases. In case of having longer reads, use of
#>   STAR Long is recommended.
#> class: CommandLineTool
#> baseCommand:
#> - tar
#> - -xvf
#> - class: Expression
#>   script: $job.inputs.genome.path
#>   engine: '#cwl-js-engine'
#> - '&&'
#> - /opt/STAR
#> - --runThreadN
#> - class: Expression
#>   script: |-
#>     {
#>       return $job.allocatedResources.cpu
#>     }
#>   engine: '#cwl-js-engine'
#> arguments:
#> - position: 0
#>   separate: yes
#>   valueFrom:
#>     engine: '#cwl-js-engine'
#>     script: |-
#>       {
#>         file = [].concat($job.inputs.reads)[0].path
#>         extension = /(?:\.([^.]+))?$/.exec(file)[1]
#>         if (extension == "gz") {
#>           return "--readFilesCommand zcat"
#>         } else if (extension == "bz2") {
#>           return "--readFilesCommand bzcat"
#>         }
#>       }
#>     class: Expression
#> - position: 0
#>   separate: yes
#>   valueFrom:
#>     engine: '#cwl-js-engine'
#>     script: "{\t\n  var sjFormat = \"False\"\n  var gtfgffFormat = \"False\"\n  var
#>       list = $job.inputs.sjdbGTFfile\n  var paths_list = []\n  var joined_paths =
#>       \"\"\n  \n  if (list) {\n    list.forEach(function(f){return paths_list.push(f.path)})\n
#>       \   joined_paths = paths_list.join(\" \")\n\n\n    paths_list.forEach(function(f){\n
#>       \     ext = f.replace(/^.*\\./, '')\n      if (ext == \"gff\" || ext == \"gtf\")
#>       {\n        gtfgffFormat = \"True\"\n        return gtfgffFormat\n      }\n      if
#>       (ext == \"txt\") {\n        sjFormat = \"True\"\n        return sjFormat\n      }\n
#>       \   })\n\n    if ($job.inputs.sjdbGTFfile && $job.inputs.sjdbInsertSave != \"None\")
#>       {\n      if (sjFormat == \"True\") {\n        return \"--sjdbFileChrStartEnd
#>       \".concat(joined_paths)\n      }\n      else if (gtfgffFormat == \"True\") {\n
#>       \       return \"--sjdbGTFfile \".concat(joined_paths)\n      }\n    }\n  }\n}"
#>     class: Expression
#> - position: 0
#>   separate: yes
#>   valueFrom:
#>     engine: '#cwl-js-engine'
#>     script: "{\n  a = b = c = d = e = f = g = []\n  if ($job.inputs.sjdbGTFchrPrefix)
#>       {\n    a = [\"--sjdbGTFchrPrefix\", $job.inputs.sjdbGTFchrPrefix]\n  }\n  if
#>       ($job.inputs.sjdbGTFfeatureExon) {\n    b = [\"--sjdbGTFfeatureExon\", $job.inputs.sjdbGTFfeatureExon]\n
#>       \ }\n  if ($job.inputs.sjdbGTFtagExonParentTranscript) {\n    c = [\"--sjdbGTFtagExonParentTranscript\",
#>       $job.inputs.sjdbGTFtagExonParentTranscript]\n  }\n  if ($job.inputs.sjdbGTFtagExonParentGene)
#>       {\n    d = [\"--sjdbGTFtagExonParentGene\", $job.inputs.sjdbGTFtagExonParentGene]\n
#>       \ }\n  if ($job.inputs.sjdbOverhang) {\n    e = [\"--sjdbOverhang\", $job.inputs.sjdbOverhang]\n
#>       \ }\n  if ($job.inputs.sjdbScore) {\n    f = [\"--sjdbScore\", $job.inputs.sjdbScore]\n
#>       \ }\n  if ($job.inputs.sjdbInsertSave) {\n    g = [\"--sjdbInsertSave\", $job.inputs.sjdbInsertSave]\n
#>       \ }\n  \n  \n  \n  if ($job.inputs.sjdbInsertSave != \"None\" && $job.inputs.sjdbGTFfile)
#>       {\n    new_list = a.concat(b, c, d, e, f, g)\n    return new_list.join(\" \")\n
#>       \ }\n}"
#>     class: Expression
#> - position: 0
#>   separate: yes
#>   valueFrom:
#>     engine: '#cwl-js-engine'
#>     script: |-
#>       {
#>         if ($job.inputs.twopassMode == "Basic") {
#>           return "--twopass1readsN ".concat($job.inputs.twopass1readsN)
#>         }
#>       }
#>     class: Expression
#> - position: 0
#>   separate: yes
#>   valueFrom:
#>     engine: '#cwl-js-engine'
#>     script: |-
#>       {
#>         if ($job.inputs.chimOutType == "Within") {
#>           return "--chimOutType ".concat("Within", $job.inputs.outSAMtype)
#>         }
#>         else {
#>           return "--chimOutType SeparateSAMold"
#>         }
#>       }
#>     class: Expression
#> - position: 0
#>   separate: yes
#>   valueFrom:
#>     engine: '#cwl-js-engine'
#>     script: "{\n  var param_list = []\n  \n  function add_param(key, value){\n    if
#>       (value == \"\") {\n      return\n    }\n    else {\n      return param_list.push(key.concat(\":\",
#>       value))\n    }\n  }\n  \n  add_param('ID', \"1\")\n  if ($job.inputs.rg_seq_center)
#>       {\n    add_param('CN', $job.inputs.rg_seq_center)\n  } else if ([].concat($job.inputs.reads)[0].metadata.seq_center)
#>       {\n    add_param('CN', [].concat($job.inputs.reads)[0].metadata.seq_center)\n
#>       \ }\n  if ($job.inputs.rg_library_id) {\n    add_param('LB', $job.inputs.rg_library_id)\n
#>       \ } else if ([].concat($job.inputs.reads)[0].metadata.library_id) {\n    add_param('LB',
#>       [].concat($job.inputs.reads)[0].metadata.library_id)\n  }\n  if ($job.inputs.rg_mfl)
#>       {\n    add_param('PI', $job.inputs.rg_mfl)\n  } else if ([].concat($job.inputs.reads)[0].metadata.median_fragment_length)
#>       {\n    add_param('PI', [].concat($job.inputs.reads)[0].metadata.median_fragment_length)\n
#>       \ }\n  if ($job.inputs.rg_platform) {\n    add_param('PL', $job.inputs.rg_platform.replace(/
#>       /g,\"_\"))\n  } else if ([].concat($job.inputs.reads)[0].metadata.platform)
#>       {\n    add_param('PL', [].concat($job.inputs.reads)[0].metadata.platform.replace(/
#>       /g,\"_\"))\n  }\n  if ($job.inputs.rg_platform_unit_id) {\n    add_param('PU',
#>       $job.inputs.rg_platform_unit_id)\n  } else if ([].concat($job.inputs.reads)[0].metadata.platform_unit_id)
#>       {\n    add_param('PU', [].concat($job.inputs.reads)[0].metadata.platform_unit_id)\n
#>       \ }\n  if ($job.inputs.rg_sample_id) {\n    add_param('SM', $job.inputs.rg_sample_id)\n
#>       \ } else if ([].concat($job.inputs.reads)[0].metadata.sample_id) {\n    add_param('SM',
#>       [].concat($job.inputs.reads)[0].metadata.sample_id)\n  }\n  return \"--outSAMattrRGline
#>       \".concat(param_list.join(\" \"))\n}"
#>     class: Expression
#> - position: 0
#>   separate: yes
#>   valueFrom:
#>     engine: '#cwl-js-engine'
#>     script: |-
#>       {
#>         if ($job.inputs.sjdbGTFfile && $job.inputs.quantMode) {
#>           return "--quantMode ".concat($job.inputs.quantMode)
#>         }
#>       }
#>     class: Expression
#> - position: 100
#>   separate: yes
#>   valueFrom:
#>     engine: '#cwl-js-engine'
#>     script: "{\n  function sharedStart(array){\n  var A= array.concat().sort(), \n
#>       \     a1= A[0], a2= A[A.length-1], L= a1.length, i= 0;\n  while(i<L && a1.charAt(i)===
#>       a2.charAt(i)) i++;\n  return a1.substring(0, i);\n  }\n  path_list = []\n  arr
#>       = [].concat($job.inputs.reads)\n  arr.forEach(function(f){return path_list.push(f.path.replace(/\\\\/g,'/').replace(
#>       /.*\\//, '' ))})\n  common_prefix = sharedStart(path_list)\n  intermediate =
#>       common_prefix.replace( /\\-$|\\_$|\\.$/, '' ).concat(\"._STARgenome\")\n  source
#>       = \"./\".concat(intermediate)\n  destination = intermediate.concat(\".tar\")\n
#>       \ if ($job.inputs.sjdbGTFfile && $job.inputs.sjdbInsertSave && $job.inputs.sjdbInsertSave
#>       != \"None\") {\n    return \"&& tar -vcf \".concat(destination, \" \", source)\n
#>       \ }\n}"
#>     class: Expression
#> - position: 0
#>   prefix: --outFileNamePrefix
#>   separate: yes
#>   valueFrom:
#>     engine: '#cwl-js-engine'
#>     script: "{\n  function sharedStart(array){\n  var A= array.concat().sort(), \n
#>       \     a1= A[0], a2= A[A.length-1], L= a1.length, i= 0;\n  while(i<L && a1.charAt(i)===
#>       a2.charAt(i)) i++;\n  return a1.substring(0, i);\n  }\n  path_list = []\n  arr
#>       = [].concat($job.inputs.reads)\n  arr.forEach(function(f){return path_list.push(f.path.replace(/\\\\/g,'/').replace(
#>       /.*\\//, '' ))})\n  common_prefix = sharedStart(path_list)\n  return \"./\".concat(common_prefix.replace(
#>       /\\-$|\\_$|\\.$/, '' ), \".\")\n}"
#>     class: Expression
#> - position: 101
#>   separate: yes
#>   valueFrom:
#>     engine: '#cwl-js-engine'
#>     script: "{\n  function sharedStart(array){\n  var A= array.concat().sort(), \n
#>       \     a1= A[0], a2= A[A.length-1], L= a1.length, i= 0;\n  while(i<L && a1.charAt(i)===
#>       a2.charAt(i)) i++;\n  return a1.substring(0, i);\n  }\n  path_list = []\n  arr
#>       = [].concat($job.inputs.reads)\n  arr.forEach(function(f){return path_list.push(f.path.replace(/\\\\/g,'/').replace(
#>       /.*\\//, '' ))})\n  common_prefix = sharedStart(path_list)\n  mate1 = common_prefix.replace(
#>       /\\-$|\\_$|\\.$/, '' ).concat(\".Unmapped.out.mate1\")\n  mate2 = common_prefix.replace(
#>       /\\-$|\\_$|\\.$/, '' ).concat(\".Unmapped.out.mate2\")\n  mate1fq = mate1.concat(\".fastq\")\n
#>       \ mate2fq = mate2.concat(\".fastq\")\n  if ($job.inputs.outReadsUnmapped ==
#>       \"Fastx\" && arr.length > 1) {\n    return \"&& mv \".concat(mate1, \" \", mate1fq,
#>       \" && mv \", mate2, \" \", mate2fq)\n  }\n  else if ($job.inputs.outReadsUnmapped
#>       == \"Fastx\" && arr.length == 1) {\n    return \"&& mv \".concat(mate1, \" \",
#>       mate1fq)\n  }\n}"
#>     class: Expression
#> stdin: ''
#> stdout: ''
#> successCodes: []
#> temporaryFailCodes: []
#> x: 624.0
#> 'y': 323
#> 
# get included input ports
f1$get_input_port()
#> #STAR_Genome_Generate #STAR_Genome_Generate                 #STAR 
#>          "#sjdbScore"       "#sjdbOverhang"      "#winFlankNbins" 
#>                 #STAR 
#>        "#winBinNbits" 
# set included input ports
f1$set_input_port(c("#STAR.alignSJDBoverhangMin", "chimScoreSeparation"))
f1$get_input_port()
#>   #STAR_Genome_Generate   #STAR_Genome_Generate                   #STAR 
#>            "#sjdbScore"         "#sjdbOverhang"        "#winFlankNbins" 
#>                   #STAR                   #STAR                   #STAR 
#>          "#winBinNbits"  "#chimScoreSeparation" "#alignSJDBoverhangMin" 
f1$set_input_port(c("#STAR.alignSJDBoverhangMin", "chimScoreSeparation"), FALSE)
f1$get_input_port()
#> #STAR_Genome_Generate #STAR_Genome_Generate                 #STAR 
#>          "#sjdbScore"       "#sjdbOverhang"      "#winFlankNbins" 
#>                 #STAR 
#>        "#winBinNbits" 
f1$get_input_node()
#>         sjdbGTFfile               fastq    genomeFastaFiles 
#>      "#sjdbGTFfile"            "#fastq" "#genomeFastaFiles" 
f1$get_output_node()
#>                 unmapped_reads    transcriptome_aligned_reads 
#>              "#unmapped_reads" "#transcriptome_aligned_reads" 
#>               splice_junctions                 reads_per_gene 
#>            "#splice_junctions"              "#reads_per_gene" 
#>                      log_files             chimeric_junctions 
#>                   "#log_files"          "#chimeric_junctions" 
#>            intermediate_genome            chimeric_alignments 
#>         "#intermediate_genome"         "#chimeric_alignments" 
#>                     sorted_bam                         result 
#>                  "#sorted_bam"                      "#result" 
#>            intermediate_genome 
#>         "#intermediate_genome" 
f1$get_input_exposed()
#>    sjdbGTFtagExonParentTranscript          sjdbGTFtagExonParentGene 
#> "#sjdbGTFtagExonParentTranscript"       "#sjdbGTFtagExonParentGene" 
#>             winAnchorMultimapNmax                winAnchorDistNbins 
#>          "#winAnchorMultimapNmax"             "#winAnchorDistNbins" 
f1$step_input_id(TRUE)
#>                                                    int 
#>                      "#STAR_Genome_Generate.sjdbScore" 
#>                                                    int 
#>                   "#STAR_Genome_Generate.sjdbOverhang" 
#>                                                 string 
#> "#STAR_Genome_Generate.sjdbGTFtagExonParentTranscript" 
#>                                                 string 
#>       "#STAR_Genome_Generate.sjdbGTFtagExonParentGene" 
#>                                                File... 
#>                    "#STAR_Genome_Generate.sjdbGTFfile" 
#>                                                 string 
#>             "#STAR_Genome_Generate.sjdbGTFfeatureExon" 
#>                                                 string 
#>               "#STAR_Genome_Generate.sjdbGTFchrPrefix" 
#>                                                    int 
#>                "#STAR_Genome_Generate.genomeSAsparseD" 
#>                                                    int 
#>            "#STAR_Genome_Generate.genomeSAindexNbases" 
#>                                                   File 
#>               "#STAR_Genome_Generate.genomeFastaFiles" 
#>                                                 string 
#>              "#STAR_Genome_Generate.genomeChrBinNbits" 
#>                                                   File 
#>                    "#SBG_FASTQ_Quality_Detector.fastq" 
#>                                                   enum 
#>                "#Picard_SortSam.validation_stringency" 
#>                                                   enum 
#>                           "#Picard_SortSam.sort_order" 
#>                                                   enum 
#>                                "#Picard_SortSam.quiet" 
#>                                                   enum 
#>                          "#Picard_SortSam.output_type" 
#>                                                    int 
#>                       "#Picard_SortSam.memory_per_job" 
#>                                                    int 
#>                   "#Picard_SortSam.max_records_in_ram" 
#>                                                   File 
#>                            "#Picard_SortSam.input_bam" 
#>                                                   enum 
#>                         "#Picard_SortSam.create_index" 
#>                                                    int 
#>                    "#Picard_SortSam.compression_level" 
#>                                                    int 
#>                                  "#STAR.winFlankNbins" 
#>                                                    int 
#>                                    "#STAR.winBinNbits" 
#>                                                    int 
#>                          "#STAR.winAnchorMultimapNmax" 
#>                                                    int 
#>                             "#STAR.winAnchorDistNbins" 
#>                                                   enum 
#>                                    "#STAR.twopassMode" 
#>                                                    int 
#>                                 "#STAR.twopass1readsN" 
#>                                                    int 
#>                                      "#STAR.sjdbScore" 
#>                                                    int 
#>                                   "#STAR.sjdbOverhang" 
#>                                                   enum 
#>                                 "#STAR.sjdbInsertSave" 
#>                                                 string 
#>                 "#STAR.sjdbGTFtagExonParentTranscript" 
#>                                                 string 
#>                       "#STAR.sjdbGTFtagExonParentGene" 
#>                                                File... 
#>                                    "#STAR.sjdbGTFfile" 
#>                                                 string 
#>                             "#STAR.sjdbGTFfeatureExon" 
#>                                                 string 
#>                               "#STAR.sjdbGTFchrPrefix" 
#>                                                  float 
#>                   "#STAR.seedSearchStartLmaxOverLread" 
#>                                                    int 
#>                            "#STAR.seedSearchStartLmax" 
#>                                                    int 
#>                                 "#STAR.seedSearchLmax" 
#>                                                    int 
#>                              "#STAR.seedPerWindowNmax" 
#>                                                    int 
#>                                "#STAR.seedPerReadNmax" 
#>                                                    int 
#>                          "#STAR.seedNoneLociPerWindow" 
#>                                                    int 
#>                               "#STAR.seedMultimapNmax" 
#>                                                    int 
#>                             "#STAR.scoreStitchSJshift" 
#>                                                    int 
#>                                   "#STAR.scoreInsOpen" 
#>                                                    int 
#>                                   "#STAR.scoreInsBase" 
#>                                                  float 
#>                    "#STAR.scoreGenomicLengthLog2scale" 
#>                                                    int 
#>                                 "#STAR.scoreGapNoncan" 
#>                                                    int 
#>                                   "#STAR.scoreGapGCAG" 
#>                                                    int 
#>                                   "#STAR.scoreGapATAC" 
#>                                                    int 
#>                                       "#STAR.scoreGap" 
#>                                                    int 
#>                                   "#STAR.scoreDelOpen" 
#>                                                    int 
#>                                   "#STAR.scoreDelBase" 
#>                                                 string 
#>                                  "#STAR.rg_seq_center" 
#>                                                 string 
#>                                   "#STAR.rg_sample_id" 
#>                                                 string 
#>                            "#STAR.rg_platform_unit_id" 
#>                                                   enum 
#>                                    "#STAR.rg_platform" 
#>                                                 string 
#>                                         "#STAR.rg_mfl" 
#>                                                 string 
#>                                  "#STAR.rg_library_id" 
#>                                                File... 
#>                                          "#STAR.reads" 
#>                                                   enum 
#>                             "#STAR.readMatesLengthsIn" 
#>                                                    int 
#>                                  "#STAR.readMapNumber" 
#>                                                   enum 
#>                          "#STAR.quantTranscriptomeBan" 
#>                                                   enum 
#>                                      "#STAR.quantMode" 
#>                                                   enum 
#>                                 "#STAR.outSortingType" 
#>                                                   enum 
#>                               "#STAR.outSJfilterReads" 
#>                                                 int... 
#>                         "#STAR.outSJfilterOverhangMin" 
#>                                                 int... 
#>                    "#STAR.outSJfilterIntronMaxVsReadN" 
#>                                                 int... 
#>                    "#STAR.outSJfilterDistToOtherSJmin" 
#>                                                 int... 
#>                      "#STAR.outSJfilterCountUniqueMin" 
#>                                                 int... 
#>                       "#STAR.outSJfilterCountTotalMin" 
#>                                                   enum 
#>                                 "#STAR.outSAMunmapped" 
#>                                                   enum 
#>                                     "#STAR.outSAMtype" 
#>                                                   enum 
#>                              "#STAR.outSAMstrandField" 
#>                                                   enum 
#>                                   "#STAR.outSAMreadID" 
#>                                                   enum 
#>                              "#STAR.outSAMprimaryFlag" 
#>                                                   enum 
#>                                    "#STAR.outSAMorder" 
#>                                                   enum 
#>                                     "#STAR.outSAMmode" 
#>                                                    int 
#>                               "#STAR.outSAMmapqUnique" 
#>                                                 string 
#>                                 "#STAR.outSAMheaderPG" 
#>                                                 string 
#>                                 "#STAR.outSAMheaderHD" 
#>                                                    int 
#>                                   "#STAR.outSAMflagOR" 
#>                                                    int 
#>                                  "#STAR.outSAMflagAND" 
#>                                                   enum 
#>                               "#STAR.outSAMattributes" 
#>                                                   enum 
#>                               "#STAR.outReadsUnmapped" 
#>                                                    int 
#>                             "#STAR.outQSconversionAdd" 
#>                                                   enum 
#>                                  "#STAR.outFilterType" 
#>                                                  float 
#>                     "#STAR.outFilterScoreMinOverLread" 
#>                                                    int 
#>                              "#STAR.outFilterScoreMin" 
#>                                                    int 
#>                    "#STAR.outFilterMultimapScoreRange" 
#>                                                    int 
#>                          "#STAR.outFilterMultimapNmax" 
#>                                                  float 
#>                 "#STAR.outFilterMismatchNoverReadLmax" 
#>                                                  float 
#>                     "#STAR.outFilterMismatchNoverLmax" 
#>                                                    int 
#>                          "#STAR.outFilterMismatchNmax" 
#>                                                  float 
#>                    "#STAR.outFilterMatchNminOverLread" 
#>                                                    int 
#>                             "#STAR.outFilterMatchNmin" 
#>                                                   enum 
#>                          "#STAR.outFilterIntronMotifs" 
#>                                                    int 
#>                             "#STAR.limitSjdbInsertNsj" 
#>                                                    int 
#>                              "#STAR.limitOutSJoneRead" 
#>                                                    int 
#>                            "#STAR.limitOutSJcollapsed" 
#>                                                    int 
#>                                "#STAR.limitBAMsortRAM" 
#>                                                 string 
#>                                  "#STAR.genomeDirName" 
#>                                                   File 
#>                                         "#STAR.genome" 
#>                                                 int... 
#>                                   "#STAR.clip5pNbases" 
#>                                                 int... 
#>                                   "#STAR.clip3pNbases" 
#>                                                 int... 
#>                       "#STAR.clip3pAfterAdapterNbases" 
#>                                              string... 
#>                               "#STAR.clip3pAdapterSeq" 
#>                                               float... 
#>                               "#STAR.clip3pAdapterMMp" 
#>                                                    int 
#>                                 "#STAR.chimSegmentMin" 
#>                                                    int 
#>                            "#STAR.chimScoreSeparation" 
#>                                                    int 
#>                                   "#STAR.chimScoreMin" 
#>                                                    int 
#>                       "#STAR.chimScoreJunctionNonGTAG" 
#>                                                    int 
#>                               "#STAR.chimScoreDropMax" 
#>                                                   enum 
#>                                    "#STAR.chimOutType" 
#>                                                    int 
#>                        "#STAR.chimJunctionOverhangMin" 
#>                                                  float 
#>                        "#STAR.alignWindowsPerReadNmax" 
#>                                                    int 
#>                  "#STAR.alignTranscriptsPerWindowNmax" 
#>                                                    int 
#>                    "#STAR.alignTranscriptsPerReadNmax" 
#>                                                  float 
#>               "#STAR.alignSplicedMateMapLminOverLmate" 
#>                                                    int 
#>                        "#STAR.alignSplicedMateMapLmin" 
#>                                                   enum 
#>                   "#STAR.alignSoftClipAtReferenceEnds" 
#>                                                    int 
#>                             "#STAR.alignSJoverhangMin" 
#>                                                    int 
#>                           "#STAR.alignSJDBoverhangMin" 
#>                                                    int 
#>                               "#STAR.alignMatesGapMax" 
#>                                                    int 
#>                                 "#STAR.alignIntronMin" 
#>                                                    int 
#>                                 "#STAR.alignIntronMax" 
#>                                                   enum 
#>                                  "#STAR.alignEndsType" 
f1$input_id()
#> [1] "#sjdbGTFfile"                    "#fastq"                         
#> [3] "#genomeFastaFiles"               "#sjdbGTFtagExonParentTranscript"
#> [5] "#sjdbGTFtagExonParentGene"       "#winAnchorMultimapNmax"         
#> [7] "#winAnchorDistNbins"            
f1$set_flow_input("#STAR.reads")
#> sbg:validationErrors: []
#> sbg:sbgMaintained: no
#> sbg:latestRevision: 2
#> sbg:toolAuthor: Seven Bridges Genomics
#> sbg:createdOn: 1463601910
#> sbg:categories:
#> - Alignment
#> - RNA
#> sbg:contributors:
#> - tengfei
#> sbg:project: tengfei/quickstart
#> sbg:createdBy: tengfei
#> sbg:toolkitVersion: 2.4.2a
#> sbg:id: tengfei/quickstart/rna-seq-alignment-star-demo/2
#> sbg:license: Apache License 2.0
#> sbg:revision: 2
#> sbg:modifiedOn: 1463601974
#> sbg:modifiedBy: tengfei
#> sbg:revisionsInfo:
#> - sbg:modifiedBy: tengfei
#>   sbg:modifiedOn: 1463601910
#>   sbg:revision: 0
#> - sbg:modifiedBy: tengfei
#>   sbg:modifiedOn: 1463601952
#>   sbg:revision: 1
#> - sbg:modifiedBy: tengfei
#>   sbg:modifiedOn: 1463601974
#>   sbg:revision: 2
#> sbg:toolkit: STAR
#> id: '#tengfei/quickstart/rna-seq-alignment-star-demo/2'
#> inputs:
#> - type:
#>   - items: File
#>     type: array
#>   label: Read sequence
#>   description: Read sequence.
#>   streamable: no
#>   id: '#reads'
#>   inputBinding:
#>     position: 10
#>     separate: yes
#>     itemSeparator: ' '
#>     valueFrom:
#>       engine: '#cwl-js-engine'
#>       script: "{\t\n  var list = [].concat($job.inputs.reads)\n  \n  var resp = []\n
#>         \ \n  if (list.length == 1){\n    resp.push(list[0].path)\n    \n  }else if
#>         (list.length == 2){    \n    \n    left = \"\"\n    right = \"\"\n      \n
#>         \   for (index = 0; index < list.length; ++index) {\n      \n      if (list[index].metadata
#>         != null){\n        if (list[index].metadata.paired_end == 1){\n          left
#>         = list[index].path\n        }else if (list[index].metadata.paired_end == 2){\n
#>         \         right = list[index].path\n        }\n      }\n    }\n    \n    if
#>         (left != \"\" && right != \"\"){      \n      resp.push(left)\n      resp.push(right)\n
#>         \   }\n  }\n  else if (list.length > 2){\n    left = []\n    right = []\n
#>         \     \n    for (index = 0; index < list.length; ++index) {\n      \n      if
#>         (list[index].metadata != null){\n        if (list[index].metadata.paired_end
#>         == 1){\n          left.push(list[index].path)\n        }else if (list[index].metadata.paired_end
#>         == 2){\n          right.push(list[index].path)\n        }\n      }\n    }\n
#>         \   left_join = left.join()\n    right_join = right.join()\n    if (left !=
#>         [] && right != []){      \n      resp.push(left_join)\n      resp.push(right_join)\n
#>         \   }\t\n  }\n  \n  if(resp.length > 0){    \n    return \"--readFilesIn \".concat(resp.join(\"
#>         \"))\n  }\n}"
#>       class: Expression
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Basic
#>   sbg:fileTypes: FASTA, FASTQ, FA, FQ, FASTQ.GZ, FQ.GZ, FASTQ.BZ2, FQ.BZ2
#>   sbg:x: 200.0
#>   sbg:y: 200.0
#>   sbg:includeInPorts: yes
#>   required: yes
#> - type:
#>   - 'null'
#>   - items: File
#>     type: array
#>   label: sjdbGTFfile
#>   streamable: no
#>   id: '#sjdbGTFfile'
#>   sbg:x: 160.4999759
#>   sbg:y: 195.0833106
#>   sbg:includeInPorts: yes
#>   required: no
#> - type:
#>   - items: File
#>     type: array
#>   label: fastq
#>   streamable: no
#>   id: '#fastq'
#>   sbg:x: 164.2499914
#>   sbg:y: 323.7499502
#>   sbg:includeInPorts: yes
#>   required: yes
#> - type:
#>   - File
#>   label: genomeFastaFiles
#>   streamable: no
#>   id: '#genomeFastaFiles'
#>   sbg:x: 167.7499601
#>   sbg:y: 469.9999106
#>   sbg:includeInPorts: yes
#>   required: yes
#> - type:
#>   - 'null'
#>   - string
#>   label: Exons' parents name
#>   description: Tag name to be used as exons' transcript-parents.
#>   streamable: no
#>   id: '#sjdbGTFtagExonParentTranscript'
#>   sbg:category: Splice junctions db parameters
#>   sbg:x: 200.0
#>   sbg:y: 350.0
#>   sbg:includeInPorts: yes
#>   sbg:toolDefaultValue: transcript_id
#>   required: no
#> - type:
#>   - 'null'
#>   - string
#>   label: Gene name
#>   description: Tag name to be used as exons' gene-parents.
#>   streamable: no
#>   id: '#sjdbGTFtagExonParentGene'
#>   sbg:category: Splice junctions db parameters
#>   sbg:x: 200.0
#>   sbg:y: 400.0
#>   sbg:includeInPorts: yes
#>   sbg:toolDefaultValue: gene_id
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: Max loci anchors
#>   description: Max number of loci anchors are allowed to map to (int>0).
#>   streamable: no
#>   id: '#winAnchorMultimapNmax'
#>   sbg:category: Windows, Anchors, Binning
#>   sbg:x: 200.0
#>   sbg:y: 450.0
#>   sbg:includeInPorts: yes
#>   sbg:toolDefaultValue: '50'
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: Max bins between anchors
#>   description: Max number of bins between two anchors that allows aggregation of anchors
#>     into one window (int>0).
#>   streamable: no
#>   id: '#winAnchorDistNbins'
#>   sbg:category: Windows, Anchors, Binning
#>   sbg:x: 200.0
#>   sbg:y: 500.0
#>   sbg:includeInPorts: yes
#>   sbg:toolDefaultValue: '9'
#>   required: no
#> outputs:
#> - type:
#>   - 'null'
#>   - items: File
#>     type: array
#>   label: Unmapped reads
#>   description: Output of unmapped reads.
#>   streamable: no
#>   id: '#unmapped_reads'
#>   source: '#unmapped_reads'
#>   sbg:x: 800.0
#>   sbg:y: 200.0
#>   sbg:includeInPorts: yes
#>   required: no
#> - type:
#>   - 'null'
#>   - File
#>   label: Transcriptome alignments
#>   description: Alignments translated into transcript coordinates.
#>   streamable: no
#>   id: '#transcriptome_aligned_reads'
#>   source: '#transcriptome_aligned_reads'
#>   sbg:x: 800.0
#>   sbg:y: 233.3333333
#>   sbg:includeInPorts: yes
#>   required: no
#> - type:
#>   - 'null'
#>   - File
#>   label: Splice junctions
#>   description: High confidence collapsed splice junctions in tab-delimited format.
#>     Only junctions supported by uniquely mapping reads are reported.
#>   streamable: no
#>   id: '#splice_junctions'
#>   source: '#splice_junctions'
#>   sbg:x: 800.0
#>   sbg:y: 266.6666667
#>   sbg:includeInPorts: yes
#>   required: no
#> - type:
#>   - 'null'
#>   - File
#>   label: Reads per gene
#>   description: File with number of reads per gene. A read is counted if it overlaps
#>     (1nt or more) one and only one gene.
#>   streamable: no
#>   id: '#reads_per_gene'
#>   source: '#reads_per_gene'
#>   sbg:x: 800.0
#>   sbg:y: 300.0
#>   sbg:includeInPorts: yes
#>   required: no
#> - type:
#>   - 'null'
#>   - items: File
#>     type: array
#>   label: Log files
#>   description: Log files produced during alignment.
#>   streamable: no
#>   id: '#log_files'
#>   source: '#log_files'
#>   sbg:x: 800.0
#>   sbg:y: 333.3333333
#>   sbg:includeInPorts: yes
#>   required: no
#> - type:
#>   - 'null'
#>   - File
#>   label: Chimeric junctions
#>   description: If chimSegmentMin in 'Chimeric Alignments' section is set to 0, 'Chimeric
#>     Junctions' won't be output.
#>   streamable: no
#>   id: '#chimeric_junctions'
#>   source: '#chimeric_junctions'
#>   sbg:x: 800.0
#>   sbg:y: 366.6666667
#>   sbg:includeInPorts: yes
#>   required: no
#> - type:
#>   - 'null'
#>   - File
#>   label: Intermediate genome files
#>   description: Archive with genome files produced when annotations are included on
#>     the fly (in the mapping step).
#>   streamable: no
#>   id: '#intermediate_genome'
#>   source:
#>   - '#intermediate_genome'
#>   - intermediate_genome
#>   sbg:x: 800.0
#>   sbg:y: 400.0
#>   sbg:includeInPorts: yes
#>   required: no
#> - type:
#>   - 'null'
#>   - File
#>   label: Chimeric alignments
#>   description: Aligned Chimeric sequences SAM - if chimSegmentMin = 0, no Chimeric
#>     Alignment SAM and Chimeric Junctions outputs.
#>   streamable: no
#>   id: '#chimeric_alignments'
#>   source: '#chimeric_alignments'
#>   sbg:x: 800.0
#>   sbg:y: 433.3333333
#>   sbg:includeInPorts: yes
#>   required: no
#> - type:
#>   - 'null'
#>   - File
#>   label: Sorted BAM/SAM
#>   description: Sorted BAM or SAM file.
#>   streamable: no
#>   id: '#sorted_bam'
#>   source: '#sorted_bam'
#>   sbg:x: 800.0
#>   sbg:y: 466.6666667
#>   sbg:includeInPorts: yes
#>   required: no
#> - type:
#>   - 'null'
#>   - File
#>   label: Result
#>   description: Source FASTQ file with updated metadata.
#>   streamable: no
#>   id: '#result'
#>   source: '#result'
#>   sbg:x: 800.0
#>   sbg:y: 500.0
#>   sbg:includeInPorts: yes
#>   required: no
#> - type:
#>   - 'null'
#>   - File
#>   label: Intermediate genome files
#>   description: Archive with genome files produced when annotations are included on
#>     the fly (in the mapping step).
#>   streamable: no
#>   id: '#intermediate_genome'
#>   source:
#>   - '#intermediate_genome'
#>   - intermediate_genome
#>   sbg:x: 800.0
#>   sbg:y: 533.3333333
#>   sbg:includeInPorts: yes
#>   required: no
#> requirements:
#> - class: CreateFileRequirement
#>   fileDef: []
#> hints:
#> - class: sbg:AWSInstanceType
#>   value: c3.8xlarge
#> label: RNA-seq Alignment - STAR
#> description: "Alignment to a reference genome and transcriptome presents the first
#>   step of RNA-Seq analysis. This pipeline uses STAR, an ultrafast RNA-seq aligner
#>   capable of mapping full length RNA sequences and detecting de novo canonical junctions,
#>   non-canonical splices, and chimeric (fusion) transcripts. It is optimized for mammalian
#>   sequence reads, but fine tuning of its parameters enables customization to satisfy
#>   unique needs.\n\nSTAR accepts one file per sample (or two files for paired-end data).
#>   \ \nSplice junction annotations can optionally be collected from splice junction
#>   databases. Set the \"Overhang length\" parameter to a value larger than zero in
#>   order to use splice junction databases. For constant read length, this value should
#>   (ideally) be equal to mate length decreased by 1; for long reads with non-constant
#>   length, this value should be 100 (pipeline default). \nFastQC Analysis on FASTQ
#>   files reveals read length distribution. STAR can detect chimeric transcripts, but
#>   parameter \"Min segment length\" in \"Chimeric Alignments\" category must be adjusted
#>   to a desired minimum chimeric segment length. Aligned reads are reported in BAM
#>   format and can be viewed in a genome browser (such as IGV). A file containing detected
#>   splice junctions is also produced.\n\nUnmapped reads are reported in FASTQ format
#>   and can be included in an output BAM file. The \"Output unmapped reads\" and \"Write
#>   unmapped in SAM\" parameters enable unmapped output type selection."
#> class: Workflow
#> steps:
#> - id: '#STAR_Genome_Generate'
#>   inputs:
#>   - id: '#STAR_Genome_Generate.sjdbScore'
#>   - id: '#STAR_Genome_Generate.sjdbOverhang'
#>   - id: '#STAR_Genome_Generate.sjdbGTFtagExonParentTranscript'
#>     source: '#sjdbGTFtagExonParentTranscript'
#>   - id: '#STAR_Genome_Generate.sjdbGTFtagExonParentGene'
#>     source: '#sjdbGTFtagExonParentGene'
#>   - id: '#STAR_Genome_Generate.sjdbGTFfile'
#>     source: '#sjdbGTFfile'
#>   - id: '#STAR_Genome_Generate.sjdbGTFfeatureExon'
#>   - id: '#STAR_Genome_Generate.sjdbGTFchrPrefix'
#>   - id: '#STAR_Genome_Generate.genomeSAsparseD'
#>   - id: '#STAR_Genome_Generate.genomeSAindexNbases'
#>   - id: '#STAR_Genome_Generate.genomeFastaFiles'
#>     source: '#genomeFastaFiles'
#>   - id: '#STAR_Genome_Generate.genomeChrBinNbits'
#>   outputs:
#>   - id: '#STAR_Genome_Generate.genome'
#>   hints: []
#>   run:
#>     sbg:validationErrors: []
#>     sbg:sbgMaintained: no
#>     sbg:latestRevision: 1
#>     sbg:job:
#>       allocatedResources:
#>         mem: 60000
#>         cpu: 15
#>       inputs:
#>         sjdbScore: 0
#>         sjdbGTFfeatureExon: sjdbGTFfeatureExon
#>         sjdbOverhang: 0
#>         sjdbGTFtagExonParentTranscript: sjdbGTFtagExonParentTranscript
#>         genomeChrBinNbits: genomeChrBinNbits
#>         genomeSAsparseD: 0
#>         sjdbGTFfile:
#>         - size: 0
#>           secondaryFiles: []
#>           class: File
#>           path: /demo/test-files/chr20.gtf
#>         sjdbGTFtagExonParentGene: sjdbGTFtagExonParentGene
#>         genomeFastaFiles:
#>           size: 0
#>           secondaryFiles: []
#>           class: File
#>           path: /sbgenomics/test-data/chr20.fa
#>         sjdbGTFchrPrefix: sjdbGTFchrPrefix
#>         genomeSAindexNbases: 0
#>     sbg:toolAuthor: Alexander Dobin/CSHL
#>     sbg:createdOn: 1450911469
#>     sbg:categories:
#>     - Alignment
#>     sbg:contributors:
#>     - bix-demo
#>     sbg:links:
#>     - id: https://github.com/alexdobin/STAR
#>       label: Homepage
#>     - id: https://github.com/alexdobin/STAR/releases
#>       label: Releases
#>     - id: https://github.com/alexdobin/STAR/blob/master/doc/STARmanual.pdf
#>       label: Manual
#>     - id: https://groups.google.com/forum/#!forum/rna-star
#>       label: Support
#>     - id: http://www.ncbi.nlm.nih.gov/pubmed/23104886
#>       label: Publication
#>     sbg:project: bix-demo/star-2-4-2a-demo
#>     sbg:createdBy: bix-demo
#>     sbg:toolkitVersion: 2.4.2a
#>     sbg:id: sevenbridges/public-apps/star-genome-generate/1
#>     sbg:license: GNU General Public License v3.0 only
#>     sbg:revision: 1
#>     sbg:cmdPreview: mkdir genomeDir && /opt/STAR --runMode genomeGenerate --genomeDir
#>       ./genomeDir --runThreadN 15 --genomeFastaFiles /sbgenomics/test-data/chr20.fa
#>       --genomeChrBinNbits genomeChrBinNbits --genomeSAindexNbases 0 --genomeSAsparseD
#>       0 --sjdbGTFfeatureExon sjdbGTFfeatureExon --sjdbGTFtagExonParentTranscript sjdbGTFtagExonParentTranscript
#>       --sjdbGTFtagExonParentGene sjdbGTFtagExonParentGene --sjdbOverhang 0 --sjdbScore
#>       0 --sjdbGTFchrPrefix sjdbGTFchrPrefix  --sjdbGTFfile /demo/test-files/chr20.gtf  &&
#>       tar -vcf genome.tar ./genomeDir /sbgenomics/test-data/chr20.fa
#>     sbg:modifiedOn: 1450911470
#>     sbg:modifiedBy: bix-demo
#>     sbg:revisionsInfo:
#>     - sbg:modifiedBy: bix-demo
#>       sbg:modifiedOn: 1450911469
#>       sbg:revision: 0
#>     - sbg:modifiedBy: bix-demo
#>       sbg:modifiedOn: 1450911470
#>       sbg:revision: 1
#>     sbg:toolkit: STAR
#>     id: sevenbridges/public-apps/star-genome-generate/1
#>     inputs:
#>     - type:
#>       - 'null'
#>       - int
#>       label: Extra alignment score
#>       description: Extra alignment score for alignments that cross database junctions.
#>       streamable: no
#>       id: '#sjdbScore'
#>       inputBinding:
#>         position: 0
#>         prefix: --sjdbScore
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Splice junctions db parameters
#>       sbg:includeInPorts: yes
#>       sbg:toolDefaultValue: '2'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: '"Overhang" length'
#>       description: Length of the donor/acceptor sequence on each side of the junctions,
#>         ideally = (mate_length - 1) (int >= 0), if int = 0, splice junction database
#>         is not used.
#>       streamable: no
#>       id: '#sjdbOverhang'
#>       inputBinding:
#>         position: 0
#>         prefix: --sjdbOverhang
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Splice junctions db parameters
#>       sbg:includeInPorts: yes
#>       sbg:toolDefaultValue: '100'
#>       required: no
#>     - type:
#>       - 'null'
#>       - string
#>       label: Exons' parents name
#>       description: Tag name to be used as exons' transcript-parents.
#>       streamable: no
#>       id: '#sjdbGTFtagExonParentTranscript'
#>       inputBinding:
#>         position: 0
#>         prefix: --sjdbGTFtagExonParentTranscript
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Splice junctions db parameters
#>       sbg:toolDefaultValue: transcript_id
#>       required: no
#>     - type:
#>       - 'null'
#>       - string
#>       label: Gene name
#>       description: Tag name to be used as exons' gene-parents.
#>       streamable: no
#>       id: '#sjdbGTFtagExonParentGene'
#>       inputBinding:
#>         position: 0
#>         prefix: --sjdbGTFtagExonParentGene
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Splice junctions db parameters
#>       sbg:toolDefaultValue: gene_id
#>       required: no
#>     - type:
#>       - 'null'
#>       - items: File
#>         type: array
#>       label: Splice junction file
#>       description: Gene model annotations and/or known transcripts.
#>       streamable: no
#>       id: '#sjdbGTFfile'
#>       sbg:category: Basic
#>       sbg:fileTypes: GTF, GFF, TXT
#>       required: no
#>     - type:
#>       - 'null'
#>       - string
#>       label: Set exons feature
#>       description: Feature type in GTF file to be used as exons for building transcripts.
#>       streamable: no
#>       id: '#sjdbGTFfeatureExon'
#>       inputBinding:
#>         position: 0
#>         prefix: --sjdbGTFfeatureExon
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Splice junctions db parameters
#>       sbg:toolDefaultValue: exon
#>       required: no
#>     - type:
#>       - 'null'
#>       - string
#>       label: Chromosome names
#>       description: Prefix for chromosome names in a GTF file (e.g. 'chr' for using
#>         ENSMEBL annotations with UCSC geneomes).
#>       streamable: no
#>       id: '#sjdbGTFchrPrefix'
#>       inputBinding:
#>         position: 0
#>         prefix: --sjdbGTFchrPrefix
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Splice junctions db parameters
#>       sbg:toolDefaultValue: '-'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Suffux array sparsity
#>       description: 'Distance between indices: use bigger numbers to decrease needed
#>         RAM at the cost of mapping speed reduction (int>0).'
#>       streamable: no
#>       id: '#genomeSAsparseD'
#>       inputBinding:
#>         position: 0
#>         prefix: --genomeSAsparseD
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Genome generation parameters
#>       sbg:toolDefaultValue: '1'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Pre-indexing string length
#>       description: Length (bases) of the SA pre-indexing string. Typically between
#>         10 and 15. Longer strings will use much more memory, but allow faster searches.
#>         For small genomes, this number needs to be scaled down, with a typical value
#>         of min(14, log2(GenomeLength)/2 - 1). For example, for 1 megaBase genome,
#>         this is equal to 9, for 100 kiloBase genome, this is equal to 7.
#>       streamable: no
#>       id: '#genomeSAindexNbases'
#>       inputBinding:
#>         position: 0
#>         prefix: --genomeSAindexNbases
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Genome generation parameters
#>       sbg:toolDefaultValue: '14'
#>       required: no
#>     - type:
#>       - File
#>       label: Genome fasta files
#>       description: Reference sequence to which to align the reads.
#>       streamable: no
#>       id: '#genomeFastaFiles'
#>       inputBinding:
#>         position: 0
#>         prefix: --genomeFastaFiles
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Basic
#>       sbg:fileTypes: FASTA, FA
#>       required: yes
#>     - type:
#>       - 'null'
#>       - string
#>       label: Bins size
#>       description: 'Set log2(chrBin), where chrBin is the size (bits) of the bins
#>         for genome storage: each chromosome will occupy an integer number of bins.
#>         If you are using a genome with a large (>5,000) number of chrosomes/scaffolds,
#>         you may need to reduce this number to reduce RAM consumption. The following
#>         scaling is recomended: genomeChrBinNbits = min(18, log2(GenomeLength/NumberOfReferences)).
#>         For example, for 3 gigaBase genome with 100,000 chromosomes/scaffolds, this
#>         is equal to 15.'
#>       streamable: no
#>       id: '#genomeChrBinNbits'
#>       inputBinding:
#>         position: 0
#>         prefix: --genomeChrBinNbits
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Genome generation parameters
#>       sbg:toolDefaultValue: '18'
#>       required: no
#>     outputs:
#>     - type:
#>       - 'null'
#>       - File
#>       label: Genome Files
#>       description: Genome files comprise binary genome sequence, suffix arrays, text
#>         chromosome names/lengths, splice junctions coordinates, and transcripts/genes
#>         information.
#>       streamable: no
#>       id: '#genome'
#>       outputBinding:
#>         glob: '*.tar'
#>       sbg:fileTypes: TAR
#>     requirements:
#>     - class: ExpressionEngineRequirement
#>       id: '#cwl-js-engine'
#>       requirements:
#>       - class: DockerRequirement
#>         dockerPull: rabix/js-engine
#>     hints:
#>     - class: DockerRequirement
#>       dockerPull: images.sbgenomics.com/ana_d/star:2.4.2a
#>       dockerImageId: a4b0ad2c3cae
#>     - class: sbg:CPURequirement
#>       value: 15
#>     - class: sbg:MemRequirement
#>       value: 60000
#>     label: STAR Genome Generate
#>     description: STAR Genome Generate is a tool that generates genome index files.
#>       One set of files should be generated per each genome/annotation combination.
#>       Once produced, these files could be used as long as genome/annotation combination
#>       stays the same. Also, STAR Genome Generate which produced these files and STAR
#>       aligner using them must be the same toolkit version.
#>     class: CommandLineTool
#>     baseCommand:
#>     - mkdir
#>     - genomeDir
#>     - '&&'
#>     - /opt/STAR
#>     - --runMode
#>     - genomeGenerate
#>     - --genomeDir
#>     - ./genomeDir
#>     - --runThreadN
#>     - class: Expression
#>       script: |-
#>         {
#>           return $job.allocatedResources.cpu
#>         }
#>       engine: '#cwl-js-engine'
#>     arguments:
#>     - position: 99
#>       separate: yes
#>       valueFrom: '&& tar -vcf genome.tar ./genomeDir'
#>     - position: 0
#>       separate: yes
#>       valueFrom:
#>         engine: '#cwl-js-engine'
#>         script: "{\t\n  var sjFormat = \"False\"\n  var gtfgffFormat = \"False\"\n
#>           \ var list = $job.inputs.sjdbGTFfile\n  var paths_list = []\n  var joined_paths
#>           = \"\"\n  \n  if (list) {\n    list.forEach(function(f){return paths_list.push(f.path)})\n
#>           \   joined_paths = paths_list.join(\" \")\n\n\n    paths_list.forEach(function(f){\n
#>           \     ext = f.replace(/^.*\\./, '')\n      if (ext == \"gff\" || ext ==
#>           \"gtf\") {\n        gtfgffFormat = \"True\"\n        return gtfgffFormat\n
#>           \     }\n      if (ext == \"txt\") {\n        sjFormat = \"True\"\n        return
#>           sjFormat\n      }\n    })\n\n    if ($job.inputs.sjdbGTFfile && $job.inputs.sjdbInsertSave
#>           != \"None\") {\n      if (sjFormat == \"True\") {\n        return \"--sjdbFileChrStartEnd
#>           \".concat(joined_paths)\n      }\n      else if (gtfgffFormat == \"True\")
#>           {\n        return \"--sjdbGTFfile \".concat(joined_paths)\n      }\n    }\n
#>           \ }\n}"
#>         class: Expression
#>     stdin: ''
#>     stdout: ''
#>     successCodes: []
#>     temporaryFailCodes: []
#>     x: 384.0832266
#>     'y': 446.4998957
#>   sbg:x: 100.0
#>   sbg:y: 200.0
#> - id: '#SBG_FASTQ_Quality_Detector'
#>   inputs:
#>   - id: '#SBG_FASTQ_Quality_Detector.fastq'
#>     source: '#fastq'
#>   outputs:
#>   - id: '#SBG_FASTQ_Quality_Detector.result'
#>   hints: []
#>   run:
#>     sbg:validationErrors: []
#>     sbg:sbgMaintained: no
#>     sbg:latestRevision: 3
#>     sbg:job:
#>       allocatedResources:
#>         mem: 1000
#>         cpu: 1
#>       inputs:
#>         fastq:
#>           size: 0
#>           secondaryFiles: []
#>           class: File
#>           path: /path/to/fastq.ext
#>     sbg:toolAuthor: Seven Bridges Genomics
#>     sbg:createdOn: 1450911312
#>     sbg:categories:
#>     - FASTQ-Processing
#>     sbg:contributors:
#>     - bix-demo
#>     sbg:project: bix-demo/sbgtools-demo
#>     sbg:createdBy: bix-demo
#>     sbg:id: sevenbridges/public-apps/sbg-fastq-quality-detector/3
#>     sbg:license: Apache License 2.0
#>     sbg:revision: 3
#>     sbg:cmdPreview: python /opt/sbg_fastq_quality_scale_detector.py --fastq /path/to/fastq.ext
#>       /path/to/fastq.ext
#>     sbg:modifiedOn: 1450911314
#>     sbg:modifiedBy: bix-demo
#>     sbg:revisionsInfo:
#>     - sbg:modifiedBy: bix-demo
#>       sbg:modifiedOn: 1450911312
#>       sbg:revision: 0
#>     - sbg:modifiedBy: bix-demo
#>       sbg:modifiedOn: 1450911314
#>       sbg:revision: 3
#>     - sbg:modifiedBy: bix-demo
#>       sbg:modifiedOn: 1450911313
#>       sbg:revision: 1
#>     - sbg:modifiedBy: bix-demo
#>       sbg:modifiedOn: 1450911313
#>       sbg:revision: 2
#>     sbg:toolkit: SBGTools
#>     id: sevenbridges/public-apps/sbg-fastq-quality-detector/3
#>     inputs:
#>     - type:
#>       - File
#>       label: Fastq
#>       description: FASTQ file.
#>       streamable: no
#>       id: '#fastq'
#>       inputBinding:
#>         position: 0
#>         prefix: --fastq
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       required: yes
#>     outputs:
#>     - type:
#>       - 'null'
#>       - File
#>       label: Result
#>       description: Source FASTQ file with updated metadata.
#>       streamable: no
#>       id: '#result'
#>       outputBinding:
#>         glob: '*.fastq'
#>       sbg:fileTypes: FASTQ
#>     requirements:
#>     - class: CreateFileRequirement
#>       fileDef: []
#>     hints:
#>     - class: DockerRequirement
#>       dockerPull: images.sbgenomics.com/tziotas/sbg_fastq_quality_scale_detector:1.0
#>       dockerImageId: ''
#>     - class: sbg:CPURequirement
#>       value: 1
#>     - class: sbg:MemRequirement
#>       value: 1000
#>     label: SBG FASTQ Quality Detector
#>     description: FASTQ Quality Scale Detector detects which quality encoding scheme
#>       was used in your reads and automatically enters the proper value in the "Quality
#>       Scale" metadata field.
#>     class: CommandLineTool
#>     baseCommand:
#>     - python
#>     - /opt/sbg_fastq_quality_scale_detector.py
#>     arguments: []
#>     stdin: ''
#>     stdout: ''
#>     successCodes: []
#>     temporaryFailCodes: []
#>     x: 375.3333179
#>     'y': 323.5833156
#>   sbg:x: 300.0
#>   sbg:y: 200.0
#> - id: '#Picard_SortSam'
#>   inputs:
#>   - id: '#Picard_SortSam.validation_stringency'
#>     default: SILENT
#>   - id: '#Picard_SortSam.sort_order'
#>     default: Coordinate
#>   - id: '#Picard_SortSam.quiet'
#>   - id: '#Picard_SortSam.output_type'
#>   - id: '#Picard_SortSam.memory_per_job'
#>   - id: '#Picard_SortSam.max_records_in_ram'
#>   - id: '#Picard_SortSam.input_bam'
#>     source: '#STAR.aligned_reads'
#>   - id: '#Picard_SortSam.create_index'
#>     default: 'True'
#>   - id: '#Picard_SortSam.compression_level'
#>   outputs:
#>   - id: '#Picard_SortSam.sorted_bam'
#>   hints: []
#>   run:
#>     sbg:validationErrors: []
#>     sbg:sbgMaintained: no
#>     sbg:latestRevision: 2
#>     sbg:job:
#>       allocatedResources:
#>         mem: 2048
#>         cpu: 1
#>       inputs:
#>         sort_order: Coordinate
#>         input_bam:
#>           path: /root/dir/example.tested.bam
#>         memory_per_job: 2048
#>         output_type: ~
#>         create_index: ~
#>     sbg:toolAuthor: Broad Institute
#>     sbg:createdOn: 1450911168
#>     sbg:categories:
#>     - SAM/BAM-Processing
#>     sbg:contributors:
#>     - bix-demo
#>     sbg:links:
#>     - id: http://broadinstitute.github.io/picard/index.html
#>       label: Homepage
#>     - id: https://github.com/broadinstitute/picard/releases/tag/1.138
#>       label: Source Code
#>     - id: http://broadinstitute.github.io/picard/
#>       label: Wiki
#>     - id: https://github.com/broadinstitute/picard/zipball/master
#>       label: Download
#>     - id: http://broadinstitute.github.io/picard/
#>       label: Publication
#>     sbg:project: bix-demo/picard-1-140-demo
#>     sbg:createdBy: bix-demo
#>     sbg:toolkitVersion: '1.140'
#>     sbg:id: sevenbridges/public-apps/picard-sortsam-1-140/2
#>     sbg:license: MIT License, Apache 2.0 Licence
#>     sbg:revision: 2
#>     sbg:cmdPreview: java -Xmx2048M -jar /opt/picard-tools-1.140/picard.jar SortSam
#>       OUTPUT=example.tested.sorted.bam INPUT=/root/dir/example.tested.bam SORT_ORDER=coordinate   INPUT=/root/dir/example.tested.bam
#>       SORT_ORDER=coordinate  /root/dir/example.tested.bam
#>     sbg:modifiedOn: 1450911170
#>     sbg:modifiedBy: bix-demo
#>     sbg:revisionsInfo:
#>     - sbg:modifiedBy: bix-demo
#>       sbg:modifiedOn: 1450911168
#>       sbg:revision: 0
#>     - sbg:modifiedBy: bix-demo
#>       sbg:modifiedOn: 1450911169
#>       sbg:revision: 1
#>     - sbg:modifiedBy: bix-demo
#>       sbg:modifiedOn: 1450911170
#>       sbg:revision: 2
#>     sbg:toolkit: Picard
#>     id: sevenbridges/public-apps/picard-sortsam-1-140/2
#>     inputs:
#>     - type:
#>       - 'null'
#>       - name: validation_stringency
#>         symbols:
#>         - STRICT
#>         - LENIENT
#>         - SILENT
#>         type: enum
#>       label: Validation stringency
#>       description: 'Validation stringency for all SAM files read by this program.
#>         Setting stringency to SILENT can improve performance when processing a BAM
#>         file in which variable-length data (read, qualities, tags) do not otherwise
#>         need to be decoded. This option can be set to ''null'' to clear the default
#>         value. Possible values: {STRICT, LENIENT, SILENT}.'
#>       streamable: no
#>       id: '#validation_stringency'
#>       inputBinding:
#>         position: 0
#>         prefix: VALIDATION_STRINGENCY=
#>         separate: no
#>         valueFrom:
#>           engine: '#cwl-js-engine'
#>           script: |-
#>             {
#>               if ($job.inputs.validation_stringency)
#>               {
#>                 return $job.inputs.validation_stringency
#>               }
#>               else
#>               {
#>                 return "SILENT"
#>               }
#>             }
#>           class: Expression
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Other input types
#>       sbg:toolDefaultValue: SILENT
#>       required: no
#>     - type:
#>       - name: sort_order
#>         symbols:
#>         - Unsorted
#>         - Queryname
#>         - Coordinate
#>         type: enum
#>       label: Sort order
#>       description: 'Sort order of the output file. Possible values: {unsorted, queryname,
#>         coordinate}.'
#>       streamable: no
#>       id: '#sort_order'
#>       inputBinding:
#>         position: 3
#>         prefix: SORT_ORDER=
#>         separate: no
#>         valueFrom:
#>           engine: '#cwl-js-engine'
#>           script: |-
#>             {
#>               p = $job.inputs.sort_order.toLowerCase()
#>               return p
#>             }
#>           class: Expression
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Other input types
#>       sbg:toolDefaultValue: Coordinate
#>       sbg:altPrefix: SO
#>       required: yes
#>     - type:
#>       - 'null'
#>       - name: quiet
#>         symbols:
#>         - 'True'
#>         - 'False'
#>         type: enum
#>       label: Quiet
#>       description: 'This parameter indicates whether to suppress job-summary info
#>         on System.err. This option can be set to ''null'' to clear the default value.
#>         Possible values: {true, false}.'
#>       streamable: no
#>       id: '#quiet'
#>       inputBinding:
#>         position: 0
#>         prefix: QUIET=
#>         separate: no
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Other input types
#>       sbg:toolDefaultValue: 'False'
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: output_type
#>         symbols:
#>         - BAM
#>         - SAM
#>         - SAME AS INPUT
#>         type: enum
#>       label: Output format
#>       description: Since Picard tools can output both SAM and BAM files, user can
#>         choose the format of the output file.
#>       streamable: no
#>       id: '#output_type'
#>       sbg:category: Other input types
#>       sbg:toolDefaultValue: SAME AS INPUT
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Memory per job
#>       description: Amount of RAM memory to be used per job. Defaults to 2048 MB for
#>         single threaded jobs.
#>       streamable: no
#>       id: '#memory_per_job'
#>       sbg:toolDefaultValue: '2048'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Max records in RAM
#>       description: When writing SAM files that need to be sorted, this parameter will
#>         specify the number of records stored in RAM before spilling to disk. Increasing
#>         this number reduces the number of file handles needed to sort a SAM file,
#>         and increases the amount of RAM needed. This option can be set to 'null' to
#>         clear the default value.
#>       streamable: no
#>       id: '#max_records_in_ram'
#>       inputBinding:
#>         position: 0
#>         prefix: MAX_RECORDS_IN_RAM=
#>         separate: no
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Other input types
#>       sbg:toolDefaultValue: '500000'
#>       required: no
#>     - type:
#>       - File
#>       label: Input BAM
#>       description: The BAM or SAM file to sort.
#>       streamable: no
#>       id: '#input_bam'
#>       inputBinding:
#>         position: 1
#>         prefix: INPUT=
#>         separate: no
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: File inputs
#>       sbg:fileTypes: BAM, SAM
#>       sbg:altPrefix: I
#>       required: yes
#>     - type:
#>       - 'null'
#>       - name: create_index
#>         symbols:
#>         - 'True'
#>         - 'False'
#>         type: enum
#>       label: Create index
#>       description: 'This parameter indicates whether to create a BAM index when writing
#>         a coordinate-sorted BAM file. This option can be set to ''null'' to clear
#>         the default value. Possible values: {true, false}.'
#>       streamable: no
#>       id: '#create_index'
#>       inputBinding:
#>         position: 5
#>         prefix: CREATE_INDEX=
#>         separate: no
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Other input types
#>       sbg:toolDefaultValue: 'False'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Compression level
#>       description: Compression level for all compressed files created (e.g. BAM and
#>         GELI). This option can be set to 'null' to clear the default value.
#>       streamable: no
#>       id: '#compression_level'
#>       inputBinding:
#>         position: 0
#>         prefix: COMPRESSION_LEVEL=
#>         separate: no
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Other input types
#>       sbg:toolDefaultValue: '5'
#>       required: no
#>     outputs:
#>     - type:
#>       - 'null'
#>       - File
#>       label: Sorted BAM/SAM
#>       description: Sorted BAM or SAM file.
#>       streamable: no
#>       id: '#sorted_bam'
#>       outputBinding:
#>         glob: '*.sorted.?am'
#>       sbg:fileTypes: BAM, SAM
#>     requirements:
#>     - class: ExpressionEngineRequirement
#>       id: '#cwl-js-engine'
#>       requirements:
#>       - class: DockerRequirement
#>         dockerPull: rabix/js-engine
#>       engineCommand: cwl-engine.js
#>     hints:
#>     - class: DockerRequirement
#>       dockerPull: images.sbgenomics.com/mladenlsbg/picard:1.140
#>       dockerImageId: eab0e70b6629
#>     - class: sbg:CPURequirement
#>       value: 1
#>     - class: sbg:MemRequirement
#>       value:
#>         engine: '#cwl-js-engine'
#>         script: "{\n  if($job.inputs.memory_per_job){\n  \treturn $job.inputs.memory_per_job\n
#>           \ }\n  \treturn 2048\n}"
#>         class: Expression
#>     label: Picard SortSam
#>     description: Picard SortSam sorts the input SAM or BAM. Input and output formats
#>       are determined by the file extension.
#>     class: CommandLineTool
#>     baseCommand:
#>     - java
#>     - class: Expression
#>       script: "{   \n  if($job.inputs.memory_per_job){\n    return '-Xmx'.concat($job.inputs.memory_per_job,
#>         'M')\n  }   \n  \treturn '-Xmx2048M'\n}"
#>       engine: '#cwl-js-engine'
#>     - -jar
#>     - /opt/picard-tools-1.140/picard.jar
#>     - SortSam
#>     arguments:
#>     - position: 0
#>       prefix: OUTPUT=
#>       separate: no
#>       valueFrom:
#>         engine: '#cwl-js-engine'
#>         script: "{\n  filename = $job.inputs.input_bam.path\n  ext = $job.inputs.output_type\n\nif
#>           (ext === \"BAM\")\n{\n    return filename.split('.').slice(0, -1).concat(\"sorted.bam\").join(\".\").replace(/^.*[\\\\\\/]/,
#>           '')\n    }\n\nelse if (ext === \"SAM\")\n{\n    return filename.split('.').slice(0,
#>           -1).concat(\"sorted.sam\").join('.').replace(/^.*[\\\\\\/]/, '')\n}\n\nelse
#>           \n{\n\treturn filename.split('.').slice(0, -1).concat(\"sorted.\"+filename.split('.').slice(-1)[0]).join(\".\").replace(/^.*[\\\\\\/]/,
#>           '')\n}\n}"
#>         class: Expression
#>     - position: 1000
#>       separate: yes
#>       valueFrom:
#>         engine: '#cwl-js-engine'
#>         script: "{\n  filename = $job.inputs.input_bam.path\n  \n  /* figuring out
#>           output file type */\n  ext = $job.inputs.output_type\n  if (ext === \"BAM\")\n
#>           \ {\n    out_extension = \"BAM\"\n  }\n  else if (ext === \"SAM\")\n  {\n
#>           \   out_extension = \"SAM\"\n  }\n  else \n  {\n\tout_extension = filename.split('.').slice(-1)[0].toUpperCase()\n
#>           \ }  \n  \n  /* if exist moving .bai in bam.bai */\n  if ($job.inputs.create_index
#>           === 'True' && $job.inputs.sort_order === 'Coordinate' && out_extension ==
#>           \"BAM\")\n  {\n    \n    old_name = filename.split('.').slice(0, -1).concat('sorted.bai').join('.').replace(/^.*[\\\\\\/]/,
#>           '')\n    new_name = filename.split('.').slice(0, -1).concat('sorted.bam.bai').join('.').replace(/^.*[\\\\\\/]/,
#>           '')\n    return \"; mv \" + \" \" + old_name + \" \" + new_name\n  }\n\n}"
#>         class: Expression
#>     stdin: ''
#>     stdout: ''
#>     successCodes: []
#>     temporaryFailCodes: []
#>     x: 773.0831807
#>     'y': 470.9165939
#>   sbg:x: 500.0
#>   sbg:y: 200.0
#> - id: '#STAR'
#>   inputs:
#>   - id: '#STAR.winFlankNbins'
#>   - id: '#STAR.winBinNbits'
#>   - id: '#STAR.winAnchorMultimapNmax'
#>     source: '#winAnchorMultimapNmax'
#>   - id: '#STAR.winAnchorDistNbins'
#>     source: '#winAnchorDistNbins'
#>   - id: '#STAR.twopassMode'
#>   - id: '#STAR.twopass1readsN'
#>   - id: '#STAR.sjdbScore'
#>   - id: '#STAR.sjdbOverhang'
#>     default: 100
#>   - id: '#STAR.sjdbInsertSave'
#>   - id: '#STAR.sjdbGTFtagExonParentTranscript'
#>   - id: '#STAR.sjdbGTFtagExonParentGene'
#>   - id: '#STAR.sjdbGTFfile'
#>     source: '#sjdbGTFfile'
#>   - id: '#STAR.sjdbGTFfeatureExon'
#>   - id: '#STAR.sjdbGTFchrPrefix'
#>   - id: '#STAR.seedSearchStartLmaxOverLread'
#>   - id: '#STAR.seedSearchStartLmax'
#>   - id: '#STAR.seedSearchLmax'
#>   - id: '#STAR.seedPerWindowNmax'
#>   - id: '#STAR.seedPerReadNmax'
#>   - id: '#STAR.seedNoneLociPerWindow'
#>   - id: '#STAR.seedMultimapNmax'
#>   - id: '#STAR.scoreStitchSJshift'
#>   - id: '#STAR.scoreInsOpen'
#>   - id: '#STAR.scoreInsBase'
#>   - id: '#STAR.scoreGenomicLengthLog2scale'
#>   - id: '#STAR.scoreGapNoncan'
#>   - id: '#STAR.scoreGapGCAG'
#>   - id: '#STAR.scoreGapATAC'
#>   - id: '#STAR.scoreGap'
#>   - id: '#STAR.scoreDelOpen'
#>   - id: '#STAR.scoreDelBase'
#>   - id: '#STAR.rg_seq_center'
#>   - id: '#STAR.rg_sample_id'
#>   - id: '#STAR.rg_platform_unit_id'
#>   - id: '#STAR.rg_platform'
#>   - id: '#STAR.rg_mfl'
#>   - id: '#STAR.rg_library_id'
#>   - id: '#STAR.reads'
#>     source: '#reads'
#>   - id: '#STAR.readMatesLengthsIn'
#>   - id: '#STAR.readMapNumber'
#>   - id: '#STAR.quantTranscriptomeBan'
#>   - id: '#STAR.quantMode'
#>     default: TranscriptomeSAM
#>   - id: '#STAR.outSortingType'
#>     default: SortedByCoordinate
#>   - id: '#STAR.outSJfilterReads'
#>   - id: '#STAR.outSJfilterOverhangMin'
#>   - id: '#STAR.outSJfilterIntronMaxVsReadN'
#>   - id: '#STAR.outSJfilterDistToOtherSJmin'
#>   - id: '#STAR.outSJfilterCountUniqueMin'
#>   - id: '#STAR.outSJfilterCountTotalMin'
#>   - id: '#STAR.outSAMunmapped'
#>   - id: '#STAR.outSAMtype'
#>     default: BAM
#>   - id: '#STAR.outSAMstrandField'
#>   - id: '#STAR.outSAMreadID'
#>   - id: '#STAR.outSAMprimaryFlag'
#>   - id: '#STAR.outSAMorder'
#>   - id: '#STAR.outSAMmode'
#>   - id: '#STAR.outSAMmapqUnique'
#>   - id: '#STAR.outSAMheaderPG'
#>   - id: '#STAR.outSAMheaderHD'
#>   - id: '#STAR.outSAMflagOR'
#>   - id: '#STAR.outSAMflagAND'
#>   - id: '#STAR.outSAMattributes'
#>   - id: '#STAR.outReadsUnmapped'
#>     default: Fastx
#>   - id: '#STAR.outQSconversionAdd'
#>   - id: '#STAR.outFilterType'
#>   - id: '#STAR.outFilterScoreMinOverLread'
#>   - id: '#STAR.outFilterScoreMin'
#>   - id: '#STAR.outFilterMultimapScoreRange'
#>   - id: '#STAR.outFilterMultimapNmax'
#>   - id: '#STAR.outFilterMismatchNoverReadLmax'
#>   - id: '#STAR.outFilterMismatchNoverLmax'
#>   - id: '#STAR.outFilterMismatchNmax'
#>   - id: '#STAR.outFilterMatchNminOverLread'
#>   - id: '#STAR.outFilterMatchNmin'
#>   - id: '#STAR.outFilterIntronMotifs'
#>   - id: '#STAR.limitSjdbInsertNsj'
#>   - id: '#STAR.limitOutSJoneRead'
#>   - id: '#STAR.limitOutSJcollapsed'
#>   - id: '#STAR.limitBAMsortRAM'
#>   - id: '#STAR.genomeDirName'
#>   - id: '#STAR.genome'
#>     source: '#STAR_Genome_Generate.genome'
#>   - id: '#STAR.clip5pNbases'
#>   - id: '#STAR.clip3pNbases'
#>   - id: '#STAR.clip3pAfterAdapterNbases'
#>   - id: '#STAR.clip3pAdapterSeq'
#>   - id: '#STAR.clip3pAdapterMMp'
#>   - id: '#STAR.chimSegmentMin'
#>   - id: '#STAR.chimScoreSeparation'
#>   - id: '#STAR.chimScoreMin'
#>   - id: '#STAR.chimScoreJunctionNonGTAG'
#>   - id: '#STAR.chimScoreDropMax'
#>   - id: '#STAR.chimOutType'
#>   - id: '#STAR.chimJunctionOverhangMin'
#>   - id: '#STAR.alignWindowsPerReadNmax'
#>   - id: '#STAR.alignTranscriptsPerWindowNmax'
#>   - id: '#STAR.alignTranscriptsPerReadNmax'
#>   - id: '#STAR.alignSplicedMateMapLminOverLmate'
#>   - id: '#STAR.alignSplicedMateMapLmin'
#>   - id: '#STAR.alignSoftClipAtReferenceEnds'
#>   - id: '#STAR.alignSJoverhangMin'
#>   - id: '#STAR.alignSJDBoverhangMin'
#>   - id: '#STAR.alignMatesGapMax'
#>   - id: '#STAR.alignIntronMin'
#>   - id: '#STAR.alignIntronMax'
#>   - id: '#STAR.alignEndsType'
#>   outputs:
#>   - id: '#STAR.unmapped_reads'
#>   - id: '#STAR.transcriptome_aligned_reads'
#>   - id: '#STAR.splice_junctions'
#>   - id: '#STAR.reads_per_gene'
#>   - id: '#STAR.log_files'
#>   - id: '#STAR.intermediate_genome'
#>   - id: '#STAR.chimeric_junctions'
#>   - id: '#STAR.chimeric_alignments'
#>   - id: '#STAR.aligned_reads'
#>   hints: []
#>   run:
#>     sbg:validationErrors: []
#>     sbg:sbgMaintained: no
#>     sbg:latestRevision: 4
#>     sbg:job:
#>       allocatedResources:
#>         mem: 60000
#>         cpu: 15
#>       inputs:
#>         alignWindowsPerReadNmax: 0
#>         outSAMheaderPG: outSAMheaderPG
#>         GENOME_DIR_NAME: ''
#>         outFilterMatchNminOverLread: 0
#>         rg_platform_unit_id: rg_platform_unit
#>         alignTranscriptsPerReadNmax: 0
#>         readMapNumber: 0
#>         alignSplicedMateMapLminOverLmate: 0
#>         alignMatesGapMax: 0
#>         outFilterMultimapNmax: 0
#>         clip5pNbases:
#>         - 0
#>         outSAMstrandField: None
#>         readMatesLengthsIn: NotEqual
#>         outSAMattributes: Standard
#>         seedMultimapNmax: 0
#>         rg_mfl: rg_mfl
#>         chimSegmentMin: 0
#>         winAnchorDistNbins: 0
#>         outSortingType: SortedByCoordinate
#>         outFilterMultimapScoreRange: 0
#>         sjdbInsertSave: Basic
#>         clip3pAfterAdapterNbases:
#>         - 0
#>         scoreDelBase: 0
#>         outFilterMatchNmin: 0
#>         twopass1readsN: 0
#>         outSAMunmapped: None
#>         genome:
#>           size: 0
#>           secondaryFiles: []
#>           class: File
#>           path: genome.ext
#>         sjdbGTFtagExonParentTranscript: ''
#>         limitBAMsortRAM: 0
#>         alignEndsType: Local
#>         seedNoneLociPerWindow: 0
#>         rg_sample_id: rg_sample
#>         sjdbGTFtagExonParentGene: ''
#>         chimScoreMin: 0
#>         outSJfilterIntronMaxVsReadN:
#>         - 0
#>         twopassMode: Basic
#>         alignSplicedMateMapLmin: 0
#>         outSJfilterReads: All
#>         outSAMprimaryFlag: OneBestScore
#>         outSJfilterCountTotalMin:
#>         - 3
#>         - 1
#>         - 1
#>         - 1
#>         outSAMorder: Paired
#>         outSAMflagAND: 0
#>         chimScoreSeparation: 0
#>         alignSJoverhangMin: 0
#>         outFilterScoreMin: 0
#>         seedSearchStartLmax: 0
#>         scoreGapGCAG: 0
#>         scoreGenomicLengthLog2scale: 0
#>         outFilterIntronMotifs: None
#>         outFilterMismatchNmax: 0
#>         reads:
#>         - size: 0
#>           secondaryFiles: []
#>           class: File
#>           metadata:
#>             format: fastq
#>             paired_end: '1'
#>             seq_center: illumina
#>           path: /test-data/mate_1.fastq.bz2
#>         scoreGap: 0
#>         outSJfilterOverhangMin:
#>         - 30
#>         - 12
#>         - 12
#>         - 12
#>         outSAMflagOR: 0
#>         outSAMmode: Full
#>         rg_library_id: ''
#>         chimScoreJunctionNonGTAG: 0
#>         scoreInsOpen: 0
#>         clip3pAdapterSeq:
#>         - clip3pAdapterSeq
#>         chimScoreDropMax: 0
#>         outFilterType: Normal
#>         scoreGapATAC: 0
#>         rg_platform: Ion Torrent PGM
#>         clip3pAdapterMMp:
#>         - 0
#>         sjdbGTFfeatureExon: ''
#>         outQSconversionAdd: 0
#>         quantMode: TranscriptomeSAM
#>         alignIntronMin: 0
#>         scoreInsBase: 0
#>         scoreGapNoncan: 0
#>         seedSearchLmax: 0
#>         outSJfilterDistToOtherSJmin:
#>         - 0
#>         outFilterScoreMinOverLread: 0
#>         alignSJDBoverhangMin: 0
#>         limitOutSJcollapsed: 0
#>         winAnchorMultimapNmax: 0
#>         outFilterMismatchNoverLmax: 0
#>         rg_seq_center: ''
#>         outSAMheaderHD: outSAMheaderHD
#>         chimOutType: Within
#>         quantTranscriptomeBan: IndelSoftclipSingleend
#>         limitOutSJoneRead: 0
#>         alignTranscriptsPerWindowNmax: 0
#>         sjdbOverhang: ~
#>         outReadsUnmapped: Fastx
#>         scoreStitchSJshift: 0
#>         seedPerWindowNmax: 0
#>         outSJfilterCountUniqueMin:
#>         - 3
#>         - 1
#>         - 1
#>         - 1
#>         scoreDelOpen: 0
#>         sjdbGTFfile:
#>         - path: /demo/test-data/chr20.gtf
#>         clip3pNbases:
#>         - 0
#>         - 3
#>         winBinNbits: 0
#>         sjdbScore: ~
#>         seedSearchStartLmaxOverLread: 0
#>         alignIntronMax: 0
#>         seedPerReadNmax: 0
#>         outFilterMismatchNoverReadLmax: 0
#>         winFlankNbins: 0
#>         sjdbGTFchrPrefix: chrPrefix
#>         alignSoftClipAtReferenceEnds: 'Yes'
#>         outSAMreadID: Standard
#>         outSAMtype: BAM
#>         chimJunctionOverhangMin: 0
#>         limitSjdbInsertNsj: 0
#>         outSAMmapqUnique: 0
#>     sbg:toolAuthor: Alexander Dobin/CSHL
#>     sbg:createdOn: 1450911471
#>     sbg:categories:
#>     - Alignment
#>     sbg:contributors:
#>     - ana_d
#>     - bix-demo
#>     - uros_sipetic
#>     sbg:links:
#>     - id: https://github.com/alexdobin/STAR
#>       label: Homepage
#>     - id: https://github.com/alexdobin/STAR/releases
#>       label: Releases
#>     - id: https://github.com/alexdobin/STAR/blob/master/doc/STARmanual.pdf
#>       label: Manual
#>     - id: https://groups.google.com/forum/#!forum/rna-star
#>       label: Support
#>     - id: http://www.ncbi.nlm.nih.gov/pubmed/23104886
#>       label: Publication
#>     sbg:project: bix-demo/star-2-4-2a-demo
#>     sbg:createdBy: bix-demo
#>     sbg:toolkitVersion: 2.4.2a
#>     sbg:id: sevenbridges/public-apps/star/4
#>     sbg:license: GNU General Public License v3.0 only
#>     sbg:revision: 4
#>     sbg:cmdPreview: tar -xvf genome.ext && /opt/STAR --runThreadN 15  --readFilesCommand
#>       bzcat  --sjdbGTFfile /demo/test-data/chr20.gtf  --sjdbGTFchrPrefix chrPrefix
#>       --sjdbInsertSave Basic  --twopass1readsN 0  --chimOutType WithinBAM  --outSAMattrRGline
#>       ID:1 CN:illumina PI:rg_mfl PL:Ion_Torrent_PGM PU:rg_platform_unit SM:rg_sample  --quantMode
#>       TranscriptomeSAM --outFileNamePrefix ./mate_1.fastq.bz2.  --readFilesIn /test-data/mate_1.fastq.bz2  &&
#>       tar -vcf mate_1.fastq.bz2._STARgenome.tar ./mate_1.fastq.bz2._STARgenome  &&
#>       mv mate_1.fastq.bz2.Unmapped.out.mate1 mate_1.fastq.bz2.Unmapped.out.mate1.fastq
#>     sbg:modifiedOn: 1462889222
#>     sbg:modifiedBy: ana_d
#>     sbg:revisionsInfo:
#>     - sbg:modifiedBy: bix-demo
#>       sbg:modifiedOn: 1450911471
#>       sbg:revision: 0
#>     - sbg:modifiedBy: bix-demo
#>       sbg:modifiedOn: 1450911473
#>       sbg:revision: 1
#>     - sbg:modifiedBy: bix-demo
#>       sbg:modifiedOn: 1450911475
#>       sbg:revision: 2
#>     - sbg:modifiedBy: uros_sipetic
#>       sbg:modifiedOn: 1462878528
#>       sbg:revision: 3
#>     - sbg:modifiedBy: ana_d
#>       sbg:modifiedOn: 1462889222
#>       sbg:revision: 4
#>     sbg:toolkit: STAR
#>     id: sevenbridges/public-apps/star/4
#>     inputs:
#>     - type:
#>       - 'null'
#>       - int
#>       label: Flanking regions size
#>       description: =log2(winFlank), where win Flank is the size of the left and right
#>         flanking regions for each window (int>0).
#>       streamable: no
#>       id: '#winFlankNbins'
#>       inputBinding:
#>         position: 0
#>         prefix: --winFlankNbins
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Windows, Anchors, Binning
#>       sbg:includeInPorts: yes
#>       sbg:toolDefaultValue: '4'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Bin size
#>       description: =log2(winBin), where winBin is the size of the bin for the windows/clustering,
#>         each window will occupy an integer number of bins (int>0).
#>       streamable: no
#>       id: '#winBinNbits'
#>       inputBinding:
#>         position: 0
#>         prefix: --winBinNbits
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Windows, Anchors, Binning
#>       sbg:includeInPorts: yes
#>       sbg:toolDefaultValue: '16'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Max loci anchors
#>       description: Max number of loci anchors are allowed to map to (int>0).
#>       streamable: no
#>       id: '#winAnchorMultimapNmax'
#>       inputBinding:
#>         position: 0
#>         prefix: --winAnchorMultimapNmax
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Windows, Anchors, Binning
#>       sbg:toolDefaultValue: '50'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Max bins between anchors
#>       description: Max number of bins between two anchors that allows aggregation
#>         of anchors into one window (int>0).
#>       streamable: no
#>       id: '#winAnchorDistNbins'
#>       inputBinding:
#>         position: 0
#>         prefix: --winAnchorDistNbins
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Windows, Anchors, Binning
#>       sbg:toolDefaultValue: '9'
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: twopassMode
#>         symbols:
#>         - None
#>         - Basic
#>         type: enum
#>       label: Two-pass mode
#>       description: '2-pass mapping mode. None: 1-pass mapping; Basic: basic 2-pass
#>         mapping, with all 1st pass junctions inserted into the genome indices on the
#>         fly.'
#>       streamable: no
#>       id: '#twopassMode'
#>       inputBinding:
#>         position: 0
#>         prefix: --twopassMode
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: 2-pass mapping
#>       sbg:toolDefaultValue: None
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Reads to process in 1st step
#>       description: 'Number of reads to process for the 1st step. 0: 1-step only, no
#>         2nd pass; use very large number to map all reads in the first step (int>0).'
#>       streamable: no
#>       id: '#twopass1readsN'
#>       sbg:category: 2-pass mapping
#>       sbg:toolDefaultValue: '-1'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Extra alignment score
#>       description: Extra alignment score for alignments that cross database junctions.
#>       streamable: no
#>       id: '#sjdbScore'
#>       sbg:category: Splice junctions database
#>       sbg:toolDefaultValue: '2'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: '"Overhang" length'
#>       description: Length of the donor/acceptor sequence on each side of the junctions,
#>         ideally = (mate_length - 1) (int >= 0), if int = 0, splice junction database
#>         is not used.
#>       streamable: no
#>       id: '#sjdbOverhang'
#>       sbg:category: Splice junctions database
#>       sbg:toolDefaultValue: '100'
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: sjdbInsertSave
#>         symbols:
#>         - Basic
#>         - All
#>         - None
#>         type: enum
#>       label: Save junction files
#>       description: 'Which files to save when sjdb junctions are inserted on the fly
#>         at the mapping step. None: not saving files at all; Basic: only small junction/transcript
#>         files; All: all files including big Genome, SA and SAindex. These files are
#>         output as archive.'
#>       streamable: no
#>       id: '#sjdbInsertSave'
#>       sbg:category: Splice junctions database
#>       sbg:toolDefaultValue: None
#>       required: no
#>     - type:
#>       - 'null'
#>       - string
#>       label: Exons' parents name
#>       description: Tag name to be used as exons' transcript-parents.
#>       streamable: no
#>       id: '#sjdbGTFtagExonParentTranscript'
#>       sbg:category: Splice junctions database
#>       sbg:toolDefaultValue: transcript_id
#>       required: no
#>     - type:
#>       - 'null'
#>       - string
#>       label: Gene name
#>       description: Tag name to be used as exons' gene-parents.
#>       streamable: no
#>       id: '#sjdbGTFtagExonParentGene'
#>       sbg:category: Splice junctions database
#>       sbg:toolDefaultValue: gene_id
#>       required: no
#>     - type:
#>       - 'null'
#>       - items: File
#>         type: array
#>       label: Splice junction file
#>       description: Gene model annotations and/or known transcripts. No need to include
#>         this input, except in case of using "on the fly" annotations.
#>       streamable: no
#>       id: '#sjdbGTFfile'
#>       sbg:category: Basic
#>       sbg:fileTypes: GTF, GFF, TXT
#>       required: no
#>     - type:
#>       - 'null'
#>       - string
#>       label: Set exons feature
#>       description: Feature type in GTF file to be used as exons for building transcripts.
#>       streamable: no
#>       id: '#sjdbGTFfeatureExon'
#>       sbg:category: Splice junctions database
#>       sbg:toolDefaultValue: exon
#>       required: no
#>     - type:
#>       - 'null'
#>       - string
#>       label: Chromosome names
#>       description: Prefix for chromosome names in a GTF file (e.g. 'chr' for using
#>         ENSMEBL annotations with UCSC geneomes).
#>       streamable: no
#>       id: '#sjdbGTFchrPrefix'
#>       sbg:category: Splice junctions database
#>       sbg:toolDefaultValue: '-'
#>       required: no
#>     - type:
#>       - 'null'
#>       - float
#>       label: Search start point normalized
#>       description: seedSearchStartLmax normalized to read length (sum of mates' lengths
#>         for paired-end reads).
#>       streamable: no
#>       id: '#seedSearchStartLmaxOverLread'
#>       inputBinding:
#>         position: 0
#>         prefix: --seedSearchStartLmaxOverLread
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: '1.0'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Search start point
#>       description: Defines the search start point through the read - the read is split
#>         into pieces no longer than this value (int>0).
#>       streamable: no
#>       id: '#seedSearchStartLmax'
#>       inputBinding:
#>         position: 0
#>         prefix: --seedSearchStartLmax
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: '50'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Max seed length
#>       description: Defines the maximum length of the seeds, if =0 max seed length
#>         is infinite (int>=0).
#>       streamable: no
#>       id: '#seedSearchLmax'
#>       inputBinding:
#>         position: 0
#>         prefix: --seedSearchLmax
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: '0'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Max seeds per window
#>       description: Max number of seeds per window (int>=0).
#>       streamable: no
#>       id: '#seedPerWindowNmax'
#>       inputBinding:
#>         position: 0
#>         prefix: --seedPerWindowNmax
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: '50'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Max seeds per read
#>       description: Max number of seeds per read (int>=0).
#>       streamable: no
#>       id: '#seedPerReadNmax'
#>       inputBinding:
#>         position: 0
#>         prefix: --seedPerReadNmax
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: '1000'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Max one-seed loci per window
#>       description: Max number of one seed loci per window (int>=0).
#>       streamable: no
#>       id: '#seedNoneLociPerWindow'
#>       inputBinding:
#>         position: 0
#>         prefix: --seedNoneLociPerWindow
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: '10'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Filter pieces for stitching
#>       description: Only pieces that map fewer than this value are utilized in the
#>         stitching procedure (int>=0).
#>       streamable: no
#>       id: '#seedMultimapNmax'
#>       inputBinding:
#>         position: 0
#>         prefix: --seedMultimapNmax
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: '10000'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Max score reduction
#>       description: Maximum score reduction while searching for SJ boundaries in the
#>         stitching step.
#>       streamable: no
#>       id: '#scoreStitchSJshift'
#>       inputBinding:
#>         position: 0
#>         prefix: --scoreStitchSJshift
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Scoring
#>       sbg:toolDefaultValue: '1'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Insertion Open Penalty
#>       description: Insertion open penalty.
#>       streamable: no
#>       id: '#scoreInsOpen'
#>       inputBinding:
#>         position: 0
#>         prefix: --scoreInsOpen
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Scoring
#>       sbg:toolDefaultValue: '-2'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Insertion extension penalty
#>       description: Insertion extension penalty per base (in addition to --scoreInsOpen).
#>       streamable: no
#>       id: '#scoreInsBase'
#>       inputBinding:
#>         position: 0
#>         prefix: --scoreInsBase
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Scoring
#>       sbg:toolDefaultValue: '-2'
#>       required: no
#>     - type:
#>       - 'null'
#>       - float
#>       label: Log scaled score
#>       description: 'Extra score logarithmically scaled with genomic length of the
#>         alignment: <int>*log2(genomicLength).'
#>       streamable: no
#>       id: '#scoreGenomicLengthLog2scale'
#>       inputBinding:
#>         position: 0
#>         prefix: --scoreGenomicLengthLog2scale
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Scoring
#>       sbg:toolDefaultValue: '-0.25'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Non-canonical gap open
#>       description: Non-canonical gap open penalty (in addition to --scoreGap).
#>       streamable: no
#>       id: '#scoreGapNoncan'
#>       inputBinding:
#>         position: 0
#>         prefix: --scoreGapNoncan
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Scoring
#>       sbg:toolDefaultValue: '-8'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: GC/AG and CT/GC gap open
#>       description: GC/AG and CT/GC gap open penalty (in addition to --scoreGap).
#>       streamable: no
#>       id: '#scoreGapGCAG'
#>       inputBinding:
#>         position: 0
#>         prefix: --scoreGapGCAG
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Scoring
#>       sbg:toolDefaultValue: '-4'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: AT/AC and GT/AT gap open
#>       description: AT/AC and GT/AT gap open penalty (in addition to --scoreGap).
#>       streamable: no
#>       id: '#scoreGapATAC'
#>       inputBinding:
#>         position: 0
#>         prefix: --scoreGapATAC
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Scoring
#>       sbg:toolDefaultValue: '-8'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Gap open penalty
#>       description: Gap open penalty.
#>       streamable: no
#>       id: '#scoreGap'
#>       inputBinding:
#>         position: 0
#>         prefix: --scoreGap
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Scoring
#>       sbg:toolDefaultValue: '0'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Deletion open penalty
#>       description: Deletion open penalty.
#>       streamable: no
#>       id: '#scoreDelOpen'
#>       inputBinding:
#>         position: 0
#>         prefix: --scoreDelOpen
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Scoring
#>       sbg:toolDefaultValue: '-2'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Deletion extension penalty
#>       description: Deletion extension penalty per base (in addition to --scoreDelOpen).
#>       streamable: no
#>       id: '#scoreDelBase'
#>       inputBinding:
#>         position: 0
#>         prefix: --scoreDelBase
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Scoring
#>       sbg:toolDefaultValue: '-2'
#>       required: no
#>     - type:
#>       - 'null'
#>       - string
#>       label: Sequencing center
#>       description: Specify the sequencing center for RG line.
#>       streamable: no
#>       id: '#rg_seq_center'
#>       sbg:category: Read group
#>       sbg:toolDefaultValue: Inferred from metadata
#>       required: no
#>     - type:
#>       - 'null'
#>       - string
#>       label: Sample ID
#>       description: Specify the sample ID for RG line.
#>       streamable: no
#>       id: '#rg_sample_id'
#>       sbg:category: Read group
#>       sbg:toolDefaultValue: Inferred from metadata
#>       required: no
#>     - type:
#>       - 'null'
#>       - string
#>       label: Platform unit ID
#>       description: Specify the platform unit ID for RG line.
#>       streamable: no
#>       id: '#rg_platform_unit_id'
#>       sbg:category: Read group
#>       sbg:toolDefaultValue: Inferred from metadata
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: rg_platform
#>         symbols:
#>         - LS 454
#>         - Helicos
#>         - Illumina
#>         - ABI SOLiD
#>         - Ion Torrent PGM
#>         - PacBio
#>         type: enum
#>       label: Platform
#>       description: Specify the version of the technology that was used for sequencing
#>         or assaying.
#>       streamable: no
#>       id: '#rg_platform'
#>       sbg:category: Read group
#>       sbg:toolDefaultValue: Inferred from metadata
#>       required: no
#>     - type:
#>       - 'null'
#>       - string
#>       label: Median fragment length
#>       description: Specify the median fragment length for RG line.
#>       streamable: no
#>       id: '#rg_mfl'
#>       sbg:category: Read group
#>       sbg:toolDefaultValue: Inferred from metadata
#>       required: no
#>     - type:
#>       - 'null'
#>       - string
#>       label: Library ID
#>       description: Specify the library ID for RG line.
#>       streamable: no
#>       id: '#rg_library_id'
#>       sbg:category: Read group
#>       sbg:toolDefaultValue: Inferred from metadata
#>       required: no
#>     - type:
#>       - items: File
#>         type: array
#>       label: Read sequence
#>       description: Read sequence.
#>       streamable: no
#>       id: '#reads'
#>       inputBinding:
#>         position: 10
#>         separate: yes
#>         itemSeparator: ' '
#>         valueFrom:
#>           engine: '#cwl-js-engine'
#>           script: "{\t\n  var list = [].concat($job.inputs.reads)\n  \n  var resp
#>             = []\n  \n  if (list.length == 1){\n    resp.push(list[0].path)\n    \n
#>             \ }else if (list.length == 2){    \n    \n    left = \"\"\n    right =
#>             \"\"\n      \n    for (index = 0; index < list.length; ++index) {\n      \n
#>             \     if (list[index].metadata != null){\n        if (list[index].metadata.paired_end
#>             == 1){\n          left = list[index].path\n        }else if (list[index].metadata.paired_end
#>             == 2){\n          right = list[index].path\n        }\n      }\n    }\n
#>             \   \n    if (left != \"\" && right != \"\"){      \n      resp.push(left)\n
#>             \     resp.push(right)\n    }\n  }\n  else if (list.length > 2){\n    left
#>             = []\n    right = []\n      \n    for (index = 0; index < list.length;
#>             ++index) {\n      \n      if (list[index].metadata != null){\n        if
#>             (list[index].metadata.paired_end == 1){\n          left.push(list[index].path)\n
#>             \       }else if (list[index].metadata.paired_end == 2){\n          right.push(list[index].path)\n
#>             \       }\n      }\n    }\n    left_join = left.join()\n    right_join
#>             = right.join()\n    if (left != [] && right != []){      \n      resp.push(left_join)\n
#>             \     resp.push(right_join)\n    }\t\n  }\n  \n  if(resp.length > 0){
#>             \   \n    return \"--readFilesIn \".concat(resp.join(\" \"))\n  }\n}"
#>           class: Expression
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Basic
#>       sbg:fileTypes: FASTA, FASTQ, FA, FQ, FASTQ.GZ, FQ.GZ, FASTQ.BZ2, FQ.BZ2
#>       sbg:x: 200.0
#>       sbg:y: 200.0
#>       sbg:includeInPorts: yes
#>       required: yes
#>     - type:
#>       - 'null'
#>       - name: readMatesLengthsIn
#>         symbols:
#>         - NotEqual
#>         - Equal
#>         type: enum
#>       label: Reads lengths
#>       description: Equal/Not equal - lengths of names, sequences, qualities for both
#>         mates are the same/not the same. "Not equal" is safe in all situations.
#>       streamable: no
#>       id: '#readMatesLengthsIn'
#>       inputBinding:
#>         position: 0
#>         prefix: --readMatesLengthsIn
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Read parameters
#>       sbg:toolDefaultValue: NotEqual
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Reads to map
#>       description: Number of reads to map from the beginning of the file.
#>       streamable: no
#>       id: '#readMapNumber'
#>       inputBinding:
#>         position: 0
#>         prefix: --readMapNumber
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Read parameters
#>       sbg:toolDefaultValue: '-1'
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: quantTranscriptomeBan
#>         symbols:
#>         - IndelSoftclipSingleend
#>         - Singleend
#>         type: enum
#>       label: Prohibit alignment type
#>       description: 'Prohibit various alignment type. IndelSoftclipSingleend: prohibit
#>         indels, soft clipping and single-end alignments - compatible with RSEM; Singleend:
#>         prohibit single-end alignments.'
#>       streamable: no
#>       id: '#quantTranscriptomeBan'
#>       inputBinding:
#>         position: 0
#>         prefix: --quantTranscriptomeBan
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Quantification of Annotations
#>       sbg:toolDefaultValue: IndelSoftclipSingleend
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: quantMode
#>         symbols:
#>         - TranscriptomeSAM
#>         - GeneCounts
#>         type: enum
#>       label: Quantification mode
#>       description: Types of quantification requested. 'TranscriptomeSAM' option outputs
#>         SAM/BAM alignments to transcriptome into a separate file. With 'GeneCounts'
#>         option, STAR will count number of reads per gene while mapping.
#>       streamable: no
#>       id: '#quantMode'
#>       sbg:category: Quantification of Annotations
#>       sbg:toolDefaultValue: '-'
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: outSortingType
#>         symbols:
#>         - Unsorted
#>         - SortedByCoordinate
#>         - Unsorted SortedByCoordinate
#>         type: enum
#>       label: Output sorting type
#>       description: Type of output sorting.
#>       streamable: no
#>       id: '#outSortingType'
#>       sbg:category: Output
#>       sbg:toolDefaultValue: SortedByCoordinate
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: outSJfilterReads
#>         symbols:
#>         - All
#>         - Unique
#>         type: enum
#>       label: Collapsed junctions reads
#>       description: 'Which reads to consider for collapsed splice junctions output.
#>         All: all reads, unique- and multi-mappers; Unique: uniquely mapping reads
#>         only.'
#>       streamable: no
#>       id: '#outSJfilterReads'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSJfilterReads
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: 'Output filtering: splice junctions'
#>       sbg:toolDefaultValue: All
#>       required: no
#>     - type:
#>       - 'null'
#>       - items: int
#>         type: array
#>       label: Min overhang SJ
#>       description: Minimum overhang length for splice junctions on both sides for
#>         each of the motifs. To set no output for desired motif, assign -1 to the corresponding
#>         field. Does not apply to annotated junctions.
#>       streamable: no
#>       id: '#outSJfilterOverhangMin'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSJfilterOverhangMin
#>         separate: yes
#>         itemSeparator: ' '
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: 'Output filtering: splice junctions'
#>       sbg:toolDefaultValue: 30 12 12 12
#>       required: no
#>     - type:
#>       - 'null'
#>       - items: int
#>         type: array
#>       label: Max gap allowed
#>       description: 'Maximum gap allowed for junctions supported by 1,2,3...N reads
#>         (int >= 0) i.e. by default junctions supported by 1 read can have gaps <=50000b,
#>         by 2 reads: <=100000b, by 3 reads: <=200000. By 4 or more reads: any gap <=alignIntronMax.
#>         Does not apply to annotated junctions.'
#>       streamable: no
#>       id: '#outSJfilterIntronMaxVsReadN'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSJfilterIntronMaxVsReadN
#>         separate: yes
#>         itemSeparator: ' '
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: 'Output filtering: splice junctions'
#>       sbg:toolDefaultValue: 50000 100000 200000
#>       required: no
#>     - type:
#>       - 'null'
#>       - items: int
#>         type: array
#>       label: Min distance to other donor/acceptor
#>       description: Minimum allowed distance to other junctions' donor/acceptor for
#>         each of the motifs (int >= 0). Does not apply to annotated junctions.
#>       streamable: no
#>       id: '#outSJfilterDistToOtherSJmin'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSJfilterDistToOtherSJmin
#>         separate: yes
#>         itemSeparator: ' '
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: 'Output filtering: splice junctions'
#>       sbg:toolDefaultValue: 10 0 5 10
#>       required: no
#>     - type:
#>       - 'null'
#>       - items: int
#>         type: array
#>       label: Min unique count
#>       description: Minimum uniquely mapping read count per junction for each of the
#>         motifs. To set no output for desired motif, assign -1 to the corresponding
#>         field. Junctions are output if one of --outSJfilterCountUniqueMin OR --outSJfilterCountTotalMin
#>         conditions are satisfied. Does not apply to annotated junctions.
#>       streamable: no
#>       id: '#outSJfilterCountUniqueMin'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSJfilterCountUniqueMin
#>         separate: yes
#>         itemSeparator: ' '
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: 'Output filtering: splice junctions'
#>       sbg:toolDefaultValue: 3 1 1 1
#>       required: no
#>     - type:
#>       - 'null'
#>       - items: int
#>         type: array
#>       label: Min total count
#>       description: Minimum total (multi-mapping+unique) read count per junction for
#>         each of the motifs. To set no output for desired motif, assign -1 to the corresponding
#>         field. Junctions are output if one of --outSJfilterCountUniqueMin OR --outSJfilterCountTotalMin
#>         conditions are satisfied. Does not apply to annotated junctions.
#>       streamable: no
#>       id: '#outSJfilterCountTotalMin'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSJfilterCountTotalMin
#>         separate: yes
#>         itemSeparator: ' '
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: 'Output filtering: splice junctions'
#>       sbg:toolDefaultValue: 3 1 1 1
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: outSAMunmapped
#>         symbols:
#>         - None
#>         - Within
#>         type: enum
#>       label: Write unmapped in SAM
#>       description: 'Output of unmapped reads in the SAM format. None: no output Within:
#>         output unmapped reads within the main SAM file (i.e. Aligned.out.sam).'
#>       streamable: no
#>       id: '#outSAMunmapped'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSAMunmapped
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output
#>       sbg:toolDefaultValue: None
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: outSAMtype
#>         symbols:
#>         - SAM
#>         - BAM
#>         type: enum
#>       label: Output format
#>       description: Format of output alignments.
#>       streamable: no
#>       id: '#outSAMtype'
#>       inputBinding:
#>         position: 0
#>         separate: yes
#>         valueFrom:
#>           engine: '#cwl-js-engine'
#>           script: |-
#>             {
#>               SAM_type = $job.inputs.outSAMtype
#>               SORT_type = $job.inputs.outSortingType
#>               if (SAM_type && SORT_type) {
#>                 return "--outSAMtype ".concat(SAM_type, " ", SORT_type)
#>               }
#>             }
#>           class: Expression
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output
#>       sbg:toolDefaultValue: SAM
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: outSAMstrandField
#>         symbols:
#>         - None
#>         - intronMotif
#>         type: enum
#>       label: Strand field flag
#>       description: 'Cufflinks-like strand field flag. None: not used; intronMotif:
#>         strand derived from the intron motif. Reads with inconsistent and/or non-canonical
#>         introns are filtered out.'
#>       streamable: no
#>       id: '#outSAMstrandField'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSAMstrandField
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output
#>       sbg:toolDefaultValue: None
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: outSAMreadID
#>         symbols:
#>         - Standard
#>         - Number
#>         type: enum
#>       label: Read ID
#>       description: 'Read ID record type. Standard: first word (until space) from the
#>         FASTx read ID line, removing /1,/2 from the end; Number: read number (index)
#>         in the FASTx file.'
#>       streamable: no
#>       id: '#outSAMreadID'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSAMreadID
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output
#>       sbg:toolDefaultValue: Standard
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: outSAMprimaryFlag
#>         symbols:
#>         - OneBestScore
#>         - AllBestScore
#>         type: enum
#>       label: Primary alignments
#>       description: 'Which alignments are considered primary - all others will be marked
#>         with 0x100 bit in the FLAG. OneBestScore: only one alignment with the best
#>         score is primary; AllBestScore: all alignments with the best score are primary.'
#>       streamable: no
#>       id: '#outSAMprimaryFlag'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSAMprimaryFlag
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output
#>       sbg:toolDefaultValue: OneBestScore
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: outSAMorder
#>         symbols:
#>         - Paired
#>         - PairedKeepInputOrder
#>         type: enum
#>       label: Sorting in SAM
#>       description: 'Type of sorting for the SAM output. Paired: one mate after the
#>         other for all paired alignments; PairedKeepInputOrder: one mate after the
#>         other for all paired alignments, the order is kept the same as in the input
#>         FASTQ files.'
#>       streamable: no
#>       id: '#outSAMorder'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSAMorder
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output
#>       sbg:toolDefaultValue: Paired
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: outSAMmode
#>         symbols:
#>         - Full
#>         - NoQS
#>         type: enum
#>       label: SAM mode
#>       description: 'Mode of SAM output. Full: full SAM output; NoQS: full SAM but
#>         without quality scores.'
#>       streamable: no
#>       id: '#outSAMmode'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSAMmode
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output
#>       sbg:toolDefaultValue: Full
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: MAPQ value
#>       description: MAPQ value for unique mappers (0 to 255).
#>       streamable: no
#>       id: '#outSAMmapqUnique'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSAMmapqUnique
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output
#>       sbg:toolDefaultValue: '255'
#>       required: no
#>     - type:
#>       - 'null'
#>       - string
#>       label: SAM header @PG
#>       description: Extra @PG (software) line of the SAM header (in addition to STAR).
#>       streamable: no
#>       id: '#outSAMheaderPG'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSAMheaderPG
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output
#>       sbg:toolDefaultValue: '-'
#>       required: no
#>     - type:
#>       - 'null'
#>       - string
#>       label: SAM header @HD
#>       description: '@HD (header) line of the SAM header.'
#>       streamable: no
#>       id: '#outSAMheaderHD'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSAMheaderHD
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output
#>       sbg:toolDefaultValue: '-'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: OR SAM flag
#>       description: Set specific bits of the SAM FLAG.
#>       streamable: no
#>       id: '#outSAMflagOR'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSAMflagOR
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output
#>       sbg:toolDefaultValue: '0'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: AND SAM flag
#>       description: Set specific bits of the SAM FLAG.
#>       streamable: no
#>       id: '#outSAMflagAND'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSAMflagAND
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output
#>       sbg:toolDefaultValue: '65535'
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: outSAMattributes
#>         symbols:
#>         - Standard
#>         - NH
#>         - All
#>         - None
#>         type: enum
#>       label: SAM attributes
#>       description: 'Desired SAM attributes, in the order desired for the output SAM.
#>         NH: any combination in any order; Standard: NH HI AS nM; All: NH HI AS nM
#>         NM MD jM jI; None: no attributes.'
#>       streamable: no
#>       id: '#outSAMattributes'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSAMattributes
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output
#>       sbg:toolDefaultValue: Standard
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: outReadsUnmapped
#>         symbols:
#>         - None
#>         - Fastx
#>         type: enum
#>       label: Output unmapped reads
#>       description: 'Output of unmapped reads (besides SAM). None: no output; Fastx:
#>         output in separate fasta/fastq files, Unmapped.out.mate1/2.'
#>       streamable: no
#>       id: '#outReadsUnmapped'
#>       inputBinding:
#>         position: 0
#>         prefix: --outReadsUnmapped
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output
#>       sbg:toolDefaultValue: None
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Quality conversion
#>       description: Add this number to the quality score (e.g. to convert from Illumina
#>         to Sanger, use -31).
#>       streamable: no
#>       id: '#outQSconversionAdd'
#>       inputBinding:
#>         position: 0
#>         prefix: --outQSconversionAdd
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output
#>       sbg:toolDefaultValue: '0'
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: outFilterType
#>         symbols:
#>         - Normal
#>         - BySJout
#>         type: enum
#>       label: Filtering type
#>       description: 'Type of filtering. Normal: standard filtering using only current
#>         alignment; BySJout: keep only those reads that contain junctions that passed
#>         filtering into SJ.out.tab.'
#>       streamable: no
#>       id: '#outFilterType'
#>       inputBinding:
#>         position: 0
#>         prefix: --outFilterType
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output filtering
#>       sbg:toolDefaultValue: Normal
#>       required: no
#>     - type:
#>       - 'null'
#>       - float
#>       label: Min score normalized
#>       description: '''Minimum score'' normalized to read length (sum of mates'' lengths
#>         for paired-end reads).'
#>       streamable: no
#>       id: '#outFilterScoreMinOverLread'
#>       inputBinding:
#>         position: 0
#>         prefix: --outFilterScoreMinOverLread
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output filtering
#>       sbg:toolDefaultValue: '0.66'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Min score
#>       description: Alignment will be output only if its score is higher than this
#>         value.
#>       streamable: no
#>       id: '#outFilterScoreMin'
#>       inputBinding:
#>         position: 0
#>         prefix: --outFilterScoreMin
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output filtering
#>       sbg:toolDefaultValue: '0'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Multimapping score range
#>       description: The score range below the maximum score for multimapping alignments.
#>       streamable: no
#>       id: '#outFilterMultimapScoreRange'
#>       inputBinding:
#>         position: 0
#>         prefix: --outFilterMultimapScoreRange
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output filtering
#>       sbg:toolDefaultValue: '1'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Max number of mappings
#>       description: Read alignments will be output only if the read maps fewer than
#>         this value, otherwise no alignments will be output.
#>       streamable: no
#>       id: '#outFilterMultimapNmax'
#>       inputBinding:
#>         position: 0
#>         prefix: --outFilterMultimapNmax
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output filtering
#>       sbg:toolDefaultValue: '10'
#>       required: no
#>     - type:
#>       - 'null'
#>       - float
#>       label: Mismatches to *read* length
#>       description: Alignment will be output only if its ratio of mismatches to *read*
#>         length is less than this value.
#>       streamable: no
#>       id: '#outFilterMismatchNoverReadLmax'
#>       inputBinding:
#>         position: 0
#>         prefix: --outFilterMismatchNoverReadLmax
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output filtering
#>       sbg:toolDefaultValue: '1'
#>       required: no
#>     - type:
#>       - 'null'
#>       - float
#>       label: Mismatches to *mapped* length
#>       description: Alignment will be output only if its ratio of mismatches to *mapped*
#>         length is less than this value.
#>       streamable: no
#>       id: '#outFilterMismatchNoverLmax'
#>       inputBinding:
#>         position: 0
#>         prefix: --outFilterMismatchNoverLmax
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output filtering
#>       sbg:toolDefaultValue: '0.3'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Max number of mismatches
#>       description: Alignment will be output only if it has fewer mismatches than this
#>         value.
#>       streamable: no
#>       id: '#outFilterMismatchNmax'
#>       inputBinding:
#>         position: 0
#>         prefix: --outFilterMismatchNmax
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output filtering
#>       sbg:toolDefaultValue: '10'
#>       required: no
#>     - type:
#>       - 'null'
#>       - float
#>       label: Min matched bases normalized
#>       description: '''Minimum matched bases'' normalized to read length (sum of mates
#>         lengths for paired-end reads).'
#>       streamable: no
#>       id: '#outFilterMatchNminOverLread'
#>       inputBinding:
#>         position: 0
#>         prefix: --outFilterMatchNminOverLread
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output filtering
#>       sbg:toolDefaultValue: '0.66'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Min matched bases
#>       description: Alignment will be output only if the number of matched bases is
#>         higher than this value.
#>       streamable: no
#>       id: '#outFilterMatchNmin'
#>       inputBinding:
#>         position: 0
#>         prefix: --outFilterMatchNmin
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output filtering
#>       sbg:toolDefaultValue: '0'
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: outFilterIntronMotifs
#>         symbols:
#>         - None
#>         - RemoveNoncanonical
#>         - RemoveNoncanonicalUnannotated
#>         type: enum
#>       label: Motifs filtering
#>       description: 'Filter alignment using their motifs. None: no filtering; RemoveNoncanonical:
#>         filter out alignments that contain non-canonical junctions; RemoveNoncanonicalUnannotated:
#>         filter out alignments that contain non-canonical unannotated junctions when
#>         using annotated splice junctions database. The annotated non-canonical junctions
#>         will be kept.'
#>       streamable: no
#>       id: '#outFilterIntronMotifs'
#>       inputBinding:
#>         position: 0
#>         prefix: --outFilterIntronMotifs
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output filtering
#>       sbg:toolDefaultValue: None
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Max insert junctions
#>       description: Maximum number of junction to be inserted to the genome on the
#>         fly at the mapping stage, including those from annotations and those detected
#>         in the 1st step of the 2-pass run.
#>       streamable: no
#>       id: '#limitSjdbInsertNsj'
#>       inputBinding:
#>         position: 0
#>         prefix: --limitSjdbInsertNsj
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Limits
#>       sbg:toolDefaultValue: '1000000'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Junctions max number
#>       description: Max number of junctions for one read (including all multi-mappers).
#>       streamable: no
#>       id: '#limitOutSJoneRead'
#>       inputBinding:
#>         position: 0
#>         prefix: --limitOutSJoneRead
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Limits
#>       sbg:toolDefaultValue: '1000'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Collapsed junctions max number
#>       description: Max number of collapsed junctions.
#>       streamable: no
#>       id: '#limitOutSJcollapsed'
#>       inputBinding:
#>         position: 0
#>         prefix: --limitOutSJcollapsed
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Limits
#>       sbg:toolDefaultValue: '1000000'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Limit BAM sorting memory
#>       description: Maximum available RAM for sorting BAM. If set to 0, it will be
#>         set to the genome index size.
#>       streamable: no
#>       id: '#limitBAMsortRAM'
#>       inputBinding:
#>         position: 0
#>         prefix: --limitBAMsortRAM
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Limits
#>       sbg:toolDefaultValue: '0'
#>       required: no
#>     - type:
#>       - 'null'
#>       - string
#>       label: Genome dir name
#>       description: Name of the directory which contains genome files (when genome.tar
#>         is uncompressed).
#>       streamable: no
#>       id: '#genomeDirName'
#>       inputBinding:
#>         position: 0
#>         prefix: --genomeDir
#>         separate: yes
#>         valueFrom:
#>           engine: '#cwl-js-engine'
#>           script: $job.inputs.genomeDirName || "genomeDir"
#>           class: Expression
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Basic
#>       sbg:toolDefaultValue: genomeDir
#>       required: no
#>     - type:
#>       - File
#>       label: Genome files
#>       description: Genome files created using STAR Genome Generate.
#>       streamable: no
#>       id: '#genome'
#>       sbg:category: Basic
#>       sbg:fileTypes: TAR
#>       required: yes
#>     - type:
#>       - 'null'
#>       - items: int
#>         type: array
#>       label: Clip 5p bases
#>       description: Number of bases to clip from 5p of each mate. In case only one
#>         value is given, it will be assumed the same for both mates.
#>       streamable: no
#>       id: '#clip5pNbases'
#>       inputBinding:
#>         position: 0
#>         prefix: --clip5pNbases
#>         separate: yes
#>         itemSeparator: ' '
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Read parameters
#>       sbg:toolDefaultValue: '0'
#>       required: no
#>     - type:
#>       - 'null'
#>       - items: int
#>         type: array
#>       label: Clip 3p bases
#>       description: Number of bases to clip from 3p of each mate. In case only one
#>         value is given, it will be assumed the same for both mates.
#>       streamable: no
#>       id: '#clip3pNbases'
#>       inputBinding:
#>         position: 0
#>         prefix: --clip3pNbases
#>         separate: yes
#>         itemSeparator: ' '
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Read parameters
#>       sbg:toolDefaultValue: '0'
#>       required: no
#>     - type:
#>       - 'null'
#>       - items: int
#>         type: array
#>       label: Clip 3p after adapter seq.
#>       description: Number of bases to clip from 3p of each mate after the adapter
#>         clipping. In case only one value is given, it will be assumed the same for
#>         both mates.
#>       streamable: no
#>       id: '#clip3pAfterAdapterNbases'
#>       inputBinding:
#>         position: 0
#>         prefix: --clip3pAfterAdapterNbases
#>         separate: yes
#>         itemSeparator: ' '
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Read parameters
#>       sbg:toolDefaultValue: '0'
#>       required: no
#>     - type:
#>       - 'null'
#>       - items: string
#>         type: array
#>       label: Clip 3p adapter sequence
#>       description: Adapter sequence to clip from 3p of each mate. In case only one
#>         value is given, it will be assumed the same for both mates.
#>       streamable: no
#>       id: '#clip3pAdapterSeq'
#>       inputBinding:
#>         position: 0
#>         prefix: --clip3pAdapterSeq
#>         separate: yes
#>         itemSeparator: ' '
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Read parameters
#>       sbg:toolDefaultValue: '-'
#>       required: no
#>     - type:
#>       - 'null'
#>       - items: float
#>         type: array
#>       label: Max mismatches proportions
#>       description: Max proportion of mismatches for 3p adapter clipping for each mate.
#>         In case only one value is given, it will be assumed the same for both mates.
#>       streamable: no
#>       id: '#clip3pAdapterMMp'
#>       inputBinding:
#>         position: 0
#>         prefix: --clip3pAdapterMMp
#>         separate: yes
#>         itemSeparator: ' '
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Read parameters
#>       sbg:toolDefaultValue: '0.1'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Min segment length
#>       description: Minimum length of chimeric segment length, if =0, no chimeric output
#>         (int>=0).
#>       streamable: no
#>       id: '#chimSegmentMin'
#>       inputBinding:
#>         position: 0
#>         prefix: --chimSegmentMin
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Chimeric Alignments
#>       sbg:toolDefaultValue: '15'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Min separation score
#>       description: Minimum difference (separation) between the best chimeric score
#>         and the next one (int>=0).
#>       streamable: no
#>       id: '#chimScoreSeparation'
#>       inputBinding:
#>         position: 0
#>         prefix: --chimScoreSeparation
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Chimeric Alignments
#>       sbg:includeInPorts: no
#>       sbg:toolDefaultValue: '10'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Min total score
#>       description: Minimum total (summed) score of the chimeric segments (int>=0).
#>       streamable: no
#>       id: '#chimScoreMin'
#>       inputBinding:
#>         position: 0
#>         prefix: --chimScoreMin
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Chimeric Alignments
#>       sbg:toolDefaultValue: '0'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Non-GT/AG penalty
#>       description: Penalty for a non-GT/AG chimeric junction.
#>       streamable: no
#>       id: '#chimScoreJunctionNonGTAG'
#>       inputBinding:
#>         position: 0
#>         prefix: --chimScoreJunctionNonGTAG
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Chimeric Alignments
#>       sbg:toolDefaultValue: '-1'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Max drop score
#>       description: Max drop (difference) of chimeric score (the sum of scores of all
#>         chimeric segements) from the read length (int>=0).
#>       streamable: no
#>       id: '#chimScoreDropMax'
#>       inputBinding:
#>         position: 0
#>         prefix: --chimScoreDropMax
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Chimeric Alignments
#>       sbg:toolDefaultValue: '20'
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: chimOutType
#>         symbols:
#>         - SeparateSAMold
#>         - Within
#>         type: enum
#>       label: Chimeric output type
#>       description: 'Type of chimeric output. SeparateSAMold: output old SAM into separate
#>         Chimeric.out.sam file; Within: output into main aligned SAM/BAM files.'
#>       streamable: no
#>       id: '#chimOutType'
#>       sbg:category: Chimeric Alignments
#>       sbg:toolDefaultValue: SeparateSAMold
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Min junction overhang
#>       description: Minimum overhang for a chimeric junction (int>=0).
#>       streamable: no
#>       id: '#chimJunctionOverhangMin'
#>       inputBinding:
#>         position: 0
#>         prefix: --chimJunctionOverhangMin
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Chimeric Alignments
#>       sbg:toolDefaultValue: '20'
#>       required: no
#>     - type:
#>       - 'null'
#>       - float
#>       label: Max windows per read
#>       description: Max number of windows per read (int>0).
#>       streamable: no
#>       id: '#alignWindowsPerReadNmax'
#>       inputBinding:
#>         position: 0
#>         prefix: --alignWindowsPerReadNmax
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: '10000'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Max transcripts per window
#>       description: Max number of transcripts per window (int>0).
#>       streamable: no
#>       id: '#alignTranscriptsPerWindowNmax'
#>       inputBinding:
#>         position: 0
#>         prefix: --alignTranscriptsPerWindowNmax
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: '100'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Max transcripts per read
#>       description: Max number of different alignments per read to consider (int>0).
#>       streamable: no
#>       id: '#alignTranscriptsPerReadNmax'
#>       inputBinding:
#>         position: 0
#>         prefix: --alignTranscriptsPerReadNmax
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: '10000'
#>       required: no
#>     - type:
#>       - 'null'
#>       - float
#>       label: Min mapped length normalized
#>       description: alignSplicedMateMapLmin normalized to mate length (float>0).
#>       streamable: no
#>       id: '#alignSplicedMateMapLminOverLmate'
#>       inputBinding:
#>         position: 0
#>         prefix: --alignSplicedMateMapLminOverLmate
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: '0.66'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Min mapped length
#>       description: Minimum mapped length for a read mate that is spliced (int>0).
#>       streamable: no
#>       id: '#alignSplicedMateMapLmin'
#>       inputBinding:
#>         position: 0
#>         prefix: --alignSplicedMateMapLmin
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: '0'
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: alignSoftClipAtReferenceEnds
#>         symbols:
#>         - 'Yes'
#>         - 'No'
#>         type: enum
#>       label: Soft clipping
#>       description: 'Option which allows soft clipping of alignments at the reference
#>         (chromosome) ends. Can be disabled for compatibility with Cufflinks/Cuffmerge.
#>         Yes: Enables soft clipping; No: Disables soft clipping.'
#>       streamable: no
#>       id: '#alignSoftClipAtReferenceEnds'
#>       inputBinding:
#>         position: 0
#>         prefix: --alignSoftClipAtReferenceEnds
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: 'Yes'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Min overhang
#>       description: Minimum overhang (i.e. block size) for spliced alignments (int>0).
#>       streamable: no
#>       id: '#alignSJoverhangMin'
#>       inputBinding:
#>         position: 0
#>         prefix: --alignSJoverhangMin
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: '5'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: 'Min overhang: annotated'
#>       description: Minimum overhang (i.e. block size) for annotated (sjdb) spliced
#>         alignments (int>0).
#>       streamable: no
#>       id: '#alignSJDBoverhangMin'
#>       inputBinding:
#>         position: 0
#>         prefix: --alignSJDBoverhangMin
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:includeInPorts: no
#>       sbg:toolDefaultValue: '3'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Max mates gap
#>       description: Maximum gap between two mates, if 0, max intron gap will be determined
#>         by (2^winBinNbits)*winAnchorDistNbins.
#>       streamable: no
#>       id: '#alignMatesGapMax'
#>       inputBinding:
#>         position: 0
#>         prefix: --alignMatesGapMax
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: '0'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Min intron size
#>       description: 'Minimum intron size: genomic gap is considered intron if its length
#>         >= alignIntronMin, otherwise it is considered Deletion (int>=0).'
#>       streamable: no
#>       id: '#alignIntronMin'
#>       inputBinding:
#>         position: 0
#>         prefix: --alignIntronMin
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: '21'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Max intron size
#>       description: Maximum intron size, if 0, max intron size will be determined by
#>         (2^winBinNbits)*winAnchorDistNbins.
#>       streamable: no
#>       id: '#alignIntronMax'
#>       inputBinding:
#>         position: 0
#>         prefix: --alignIntronMax
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: '0'
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: alignEndsType
#>         symbols:
#>         - Local
#>         - EndToEnd
#>         type: enum
#>       label: Alignment type
#>       description: 'Type of read ends alignment. Local: standard local alignment with
#>         soft-clipping allowed. EndToEnd: force end to end read alignment, do not soft-clip.'
#>       streamable: no
#>       id: '#alignEndsType'
#>       inputBinding:
#>         position: 0
#>         prefix: --alignEndsType
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: Local
#>       required: no
#>     outputs:
#>     - type:
#>       - 'null'
#>       - items: File
#>         type: array
#>       label: Unmapped reads
#>       description: Output of unmapped reads.
#>       streamable: no
#>       id: '#unmapped_reads'
#>       outputBinding:
#>         glob: '*Unmapped.out*'
#>       sbg:fileTypes: FASTQ
#>     - type:
#>       - 'null'
#>       - File
#>       label: Transcriptome alignments
#>       description: Alignments translated into transcript coordinates.
#>       streamable: no
#>       id: '#transcriptome_aligned_reads'
#>       outputBinding:
#>         glob: '*Transcriptome*'
#>       sbg:fileTypes: BAM
#>     - type:
#>       - 'null'
#>       - File
#>       label: Splice junctions
#>       description: High confidence collapsed splice junctions in tab-delimited format.
#>         Only junctions supported by uniquely mapping reads are reported.
#>       streamable: no
#>       id: '#splice_junctions'
#>       outputBinding:
#>         glob: '*SJ.out.tab'
#>       sbg:fileTypes: TAB
#>     - type:
#>       - 'null'
#>       - File
#>       label: Reads per gene
#>       description: File with number of reads per gene. A read is counted if it overlaps
#>         (1nt or more) one and only one gene.
#>       streamable: no
#>       id: '#reads_per_gene'
#>       outputBinding:
#>         glob: '*ReadsPerGene*'
#>       sbg:fileTypes: TAB
#>     - type:
#>       - 'null'
#>       - items: File
#>         type: array
#>       label: Log files
#>       description: Log files produced during alignment.
#>       streamable: no
#>       id: '#log_files'
#>       outputBinding:
#>         glob: '*Log*.out'
#>       sbg:fileTypes: OUT
#>     - type:
#>       - 'null'
#>       - File
#>       label: Intermediate genome files
#>       description: Archive with genome files produced when annotations are included
#>         on the fly (in the mapping step).
#>       streamable: no
#>       id: '#intermediate_genome'
#>       outputBinding:
#>         glob: '*_STARgenome.tar'
#>       sbg:fileTypes: TAR
#>     - type:
#>       - 'null'
#>       - File
#>       label: Chimeric junctions
#>       description: If chimSegmentMin in 'Chimeric Alignments' section is set to 0,
#>         'Chimeric Junctions' won't be output.
#>       streamable: no
#>       id: '#chimeric_junctions'
#>       outputBinding:
#>         glob: '*Chimeric.out.junction'
#>       sbg:fileTypes: JUNCTION
#>     - type:
#>       - 'null'
#>       - File
#>       label: Chimeric alignments
#>       description: Aligned Chimeric sequences SAM - if chimSegmentMin = 0, no Chimeric
#>         Alignment SAM and Chimeric Junctions outputs.
#>       streamable: no
#>       id: '#chimeric_alignments'
#>       outputBinding:
#>         glob: '*.Chimeric.out.sam'
#>       sbg:fileTypes: SAM
#>     - type:
#>       - 'null'
#>       - File
#>       label: Aligned SAM/BAM
#>       description: Aligned sequence in SAM/BAM format.
#>       streamable: no
#>       id: '#aligned_reads'
#>       outputBinding:
#>         glob:
#>           engine: '#cwl-js-engine'
#>           script: |-
#>             {
#>               if ($job.inputs.outSortingType == 'SortedByCoordinate') {
#>                 sort_name = '.sortedByCoord'
#>               }
#>               else {
#>                 sort_name = ''
#>               }
#>               if ($job.inputs.outSAMtype == 'BAM') {
#>                 sam_name = "*.Aligned".concat( sort_name, '.out.bam')
#>               }
#>               else {
#>                 sam_name = "*.Aligned.out.sam"
#>               }
#>               return sam_name
#>             }
#>           class: Expression
#>       sbg:fileTypes: SAM, BAM
#>     requirements:
#>     - class: ExpressionEngineRequirement
#>       id: '#cwl-js-engine'
#>       requirements:
#>       - class: DockerRequirement
#>         dockerPull: rabix/js-engine
#>     hints:
#>     - class: DockerRequirement
#>       dockerPull: images.sbgenomics.com/ana_d/star:2.4.2a
#>       dockerImageId: a4b0ad2c3cae
#>     - class: sbg:MemRequirement
#>       value: 60000
#>     - class: sbg:CPURequirement
#>       value: 15
#>     label: STAR
#>     description: STAR is an ultrafast universal RNA-seq aligner. It has very high
#>       mapping speed, accurate alignment of contiguous and spliced reads, detection
#>       of polyA-tails, non-canonical splices and chimeric (fusion) junctions. It works
#>       with reads starting from lengths ~15 bases up to ~300 bases. In case of having
#>       longer reads, use of STAR Long is recommended.
#>     class: CommandLineTool
#>     baseCommand:
#>     - tar
#>     - -xvf
#>     - class: Expression
#>       script: $job.inputs.genome.path
#>       engine: '#cwl-js-engine'
#>     - '&&'
#>     - /opt/STAR
#>     - --runThreadN
#>     - class: Expression
#>       script: |-
#>         {
#>           return $job.allocatedResources.cpu
#>         }
#>       engine: '#cwl-js-engine'
#>     arguments:
#>     - position: 0
#>       separate: yes
#>       valueFrom:
#>         engine: '#cwl-js-engine'
#>         script: |-
#>           {
#>             file = [].concat($job.inputs.reads)[0].path
#>             extension = /(?:\.([^.]+))?$/.exec(file)[1]
#>             if (extension == "gz") {
#>               return "--readFilesCommand zcat"
#>             } else if (extension == "bz2") {
#>               return "--readFilesCommand bzcat"
#>             }
#>           }
#>         class: Expression
#>     - position: 0
#>       separate: yes
#>       valueFrom:
#>         engine: '#cwl-js-engine'
#>         script: "{\t\n  var sjFormat = \"False\"\n  var gtfgffFormat = \"False\"\n
#>           \ var list = $job.inputs.sjdbGTFfile\n  var paths_list = []\n  var joined_paths
#>           = \"\"\n  \n  if (list) {\n    list.forEach(function(f){return paths_list.push(f.path)})\n
#>           \   joined_paths = paths_list.join(\" \")\n\n\n    paths_list.forEach(function(f){\n
#>           \     ext = f.replace(/^.*\\./, '')\n      if (ext == \"gff\" || ext ==
#>           \"gtf\") {\n        gtfgffFormat = \"True\"\n        return gtfgffFormat\n
#>           \     }\n      if (ext == \"txt\") {\n        sjFormat = \"True\"\n        return
#>           sjFormat\n      }\n    })\n\n    if ($job.inputs.sjdbGTFfile && $job.inputs.sjdbInsertSave
#>           != \"None\") {\n      if (sjFormat == \"True\") {\n        return \"--sjdbFileChrStartEnd
#>           \".concat(joined_paths)\n      }\n      else if (gtfgffFormat == \"True\")
#>           {\n        return \"--sjdbGTFfile \".concat(joined_paths)\n      }\n    }\n
#>           \ }\n}"
#>         class: Expression
#>     - position: 0
#>       separate: yes
#>       valueFrom:
#>         engine: '#cwl-js-engine'
#>         script: "{\n  a = b = c = d = e = f = g = []\n  if ($job.inputs.sjdbGTFchrPrefix)
#>           {\n    a = [\"--sjdbGTFchrPrefix\", $job.inputs.sjdbGTFchrPrefix]\n  }\n
#>           \ if ($job.inputs.sjdbGTFfeatureExon) {\n    b = [\"--sjdbGTFfeatureExon\",
#>           $job.inputs.sjdbGTFfeatureExon]\n  }\n  if ($job.inputs.sjdbGTFtagExonParentTranscript)
#>           {\n    c = [\"--sjdbGTFtagExonParentTranscript\", $job.inputs.sjdbGTFtagExonParentTranscript]\n
#>           \ }\n  if ($job.inputs.sjdbGTFtagExonParentGene) {\n    d = [\"--sjdbGTFtagExonParentGene\",
#>           $job.inputs.sjdbGTFtagExonParentGene]\n  }\n  if ($job.inputs.sjdbOverhang)
#>           {\n    e = [\"--sjdbOverhang\", $job.inputs.sjdbOverhang]\n  }\n  if ($job.inputs.sjdbScore)
#>           {\n    f = [\"--sjdbScore\", $job.inputs.sjdbScore]\n  }\n  if ($job.inputs.sjdbInsertSave)
#>           {\n    g = [\"--sjdbInsertSave\", $job.inputs.sjdbInsertSave]\n  }\n  \n
#>           \ \n  \n  if ($job.inputs.sjdbInsertSave != \"None\" && $job.inputs.sjdbGTFfile)
#>           {\n    new_list = a.concat(b, c, d, e, f, g)\n    return new_list.join(\"
#>           \")\n  }\n}"
#>         class: Expression
#>     - position: 0
#>       separate: yes
#>       valueFrom:
#>         engine: '#cwl-js-engine'
#>         script: |-
#>           {
#>             if ($job.inputs.twopassMode == "Basic") {
#>               return "--twopass1readsN ".concat($job.inputs.twopass1readsN)
#>             }
#>           }
#>         class: Expression
#>     - position: 0
#>       separate: yes
#>       valueFrom:
#>         engine: '#cwl-js-engine'
#>         script: |-
#>           {
#>             if ($job.inputs.chimOutType == "Within") {
#>               return "--chimOutType ".concat("Within", $job.inputs.outSAMtype)
#>             }
#>             else {
#>               return "--chimOutType SeparateSAMold"
#>             }
#>           }
#>         class: Expression
#>     - position: 0
#>       separate: yes
#>       valueFrom:
#>         engine: '#cwl-js-engine'
#>         script: "{\n  var param_list = []\n  \n  function add_param(key, value){\n
#>           \   if (value == \"\") {\n      return\n    }\n    else {\n      return
#>           param_list.push(key.concat(\":\", value))\n    }\n  }\n  \n  add_param('ID',
#>           \"1\")\n  if ($job.inputs.rg_seq_center) {\n    add_param('CN', $job.inputs.rg_seq_center)\n
#>           \ } else if ([].concat($job.inputs.reads)[0].metadata.seq_center) {\n    add_param('CN',
#>           [].concat($job.inputs.reads)[0].metadata.seq_center)\n  }\n  if ($job.inputs.rg_library_id)
#>           {\n    add_param('LB', $job.inputs.rg_library_id)\n  } else if ([].concat($job.inputs.reads)[0].metadata.library_id)
#>           {\n    add_param('LB', [].concat($job.inputs.reads)[0].metadata.library_id)\n
#>           \ }\n  if ($job.inputs.rg_mfl) {\n    add_param('PI', $job.inputs.rg_mfl)\n
#>           \ } else if ([].concat($job.inputs.reads)[0].metadata.median_fragment_length)
#>           {\n    add_param('PI', [].concat($job.inputs.reads)[0].metadata.median_fragment_length)\n
#>           \ }\n  if ($job.inputs.rg_platform) {\n    add_param('PL', $job.inputs.rg_platform.replace(/
#>           /g,\"_\"))\n  } else if ([].concat($job.inputs.reads)[0].metadata.platform)
#>           {\n    add_param('PL', [].concat($job.inputs.reads)[0].metadata.platform.replace(/
#>           /g,\"_\"))\n  }\n  if ($job.inputs.rg_platform_unit_id) {\n    add_param('PU',
#>           $job.inputs.rg_platform_unit_id)\n  } else if ([].concat($job.inputs.reads)[0].metadata.platform_unit_id)
#>           {\n    add_param('PU', [].concat($job.inputs.reads)[0].metadata.platform_unit_id)\n
#>           \ }\n  if ($job.inputs.rg_sample_id) {\n    add_param('SM', $job.inputs.rg_sample_id)\n
#>           \ } else if ([].concat($job.inputs.reads)[0].metadata.sample_id) {\n    add_param('SM',
#>           [].concat($job.inputs.reads)[0].metadata.sample_id)\n  }\n  return \"--outSAMattrRGline
#>           \".concat(param_list.join(\" \"))\n}"
#>         class: Expression
#>     - position: 0
#>       separate: yes
#>       valueFrom:
#>         engine: '#cwl-js-engine'
#>         script: |-
#>           {
#>             if ($job.inputs.sjdbGTFfile && $job.inputs.quantMode) {
#>               return "--quantMode ".concat($job.inputs.quantMode)
#>             }
#>           }
#>         class: Expression
#>     - position: 100
#>       separate: yes
#>       valueFrom:
#>         engine: '#cwl-js-engine'
#>         script: "{\n  function sharedStart(array){\n  var A= array.concat().sort(),
#>           \n      a1= A[0], a2= A[A.length-1], L= a1.length, i= 0;\n  while(i<L &&
#>           a1.charAt(i)=== a2.charAt(i)) i++;\n  return a1.substring(0, i);\n  }\n
#>           \ path_list = []\n  arr = [].concat($job.inputs.reads)\n  arr.forEach(function(f){return
#>           path_list.push(f.path.replace(/\\\\/g,'/').replace( /.*\\//, '' ))})\n  common_prefix
#>           = sharedStart(path_list)\n  intermediate = common_prefix.replace( /\\-$|\\_$|\\.$/,
#>           '' ).concat(\"._STARgenome\")\n  source = \"./\".concat(intermediate)\n
#>           \ destination = intermediate.concat(\".tar\")\n  if ($job.inputs.sjdbGTFfile
#>           && $job.inputs.sjdbInsertSave && $job.inputs.sjdbInsertSave != \"None\")
#>           {\n    return \"&& tar -vcf \".concat(destination, \" \", source)\n  }\n}"
#>         class: Expression
#>     - position: 0
#>       prefix: --outFileNamePrefix
#>       separate: yes
#>       valueFrom:
#>         engine: '#cwl-js-engine'
#>         script: "{\n  function sharedStart(array){\n  var A= array.concat().sort(),
#>           \n      a1= A[0], a2= A[A.length-1], L= a1.length, i= 0;\n  while(i<L &&
#>           a1.charAt(i)=== a2.charAt(i)) i++;\n  return a1.substring(0, i);\n  }\n
#>           \ path_list = []\n  arr = [].concat($job.inputs.reads)\n  arr.forEach(function(f){return
#>           path_list.push(f.path.replace(/\\\\/g,'/').replace( /.*\\//, '' ))})\n  common_prefix
#>           = sharedStart(path_list)\n  return \"./\".concat(common_prefix.replace(
#>           /\\-$|\\_$|\\.$/, '' ), \".\")\n}"
#>         class: Expression
#>     - position: 101
#>       separate: yes
#>       valueFrom:
#>         engine: '#cwl-js-engine'
#>         script: "{\n  function sharedStart(array){\n  var A= array.concat().sort(),
#>           \n      a1= A[0], a2= A[A.length-1], L= a1.length, i= 0;\n  while(i<L &&
#>           a1.charAt(i)=== a2.charAt(i)) i++;\n  return a1.substring(0, i);\n  }\n
#>           \ path_list = []\n  arr = [].concat($job.inputs.reads)\n  arr.forEach(function(f){return
#>           path_list.push(f.path.replace(/\\\\/g,'/').replace( /.*\\//, '' ))})\n  common_prefix
#>           = sharedStart(path_list)\n  mate1 = common_prefix.replace( /\\-$|\\_$|\\.$/,
#>           '' ).concat(\".Unmapped.out.mate1\")\n  mate2 = common_prefix.replace( /\\-$|\\_$|\\.$/,
#>           '' ).concat(\".Unmapped.out.mate2\")\n  mate1fq = mate1.concat(\".fastq\")\n
#>           \ mate2fq = mate2.concat(\".fastq\")\n  if ($job.inputs.outReadsUnmapped
#>           == \"Fastx\" && arr.length > 1) {\n    return \"&& mv \".concat(mate1, \"
#>           \", mate1fq, \" && mv \", mate2, \" \", mate2fq)\n  }\n  else if ($job.inputs.outReadsUnmapped
#>           == \"Fastx\" && arr.length == 1) {\n    return \"&& mv \".concat(mate1,
#>           \" \", mate1fq)\n  }\n}"
#>         class: Expression
#>     stdin: ''
#>     stdout: ''
#>     successCodes: []
#>     temporaryFailCodes: []
#>     x: 624.0
#>     'y': 323
#>   sbg:x: 700.0
#>   sbg:y: 200.0
#> sbg:canvas_zoom: 0.6
#> sbg:canvas_y: -16
#> sbg:canvas_x: -41
#> 
f1$input_id()
#> [1] "#reads"                          "#sjdbGTFfile"                   
#> [3] "#fastq"                          "#genomeFastaFiles"              
#> [5] "#sjdbGTFtagExonParentTranscript" "#sjdbGTFtagExonParentGene"      
#> [7] "#winAnchorMultimapNmax"          "#winAnchorDistNbins"            
# batch
f1$set_batch("sjdbGTFfile", c("metadata.sample_id", "metadata.library_id"))
#> criteria provided, convert type from ITEM to CRITERIA
#> sbg:validationErrors: []
#> sbg:sbgMaintained: no
#> sbg:latestRevision: 2
#> sbg:toolAuthor: Seven Bridges Genomics
#> sbg:createdOn: 1463601910
#> sbg:categories:
#> - Alignment
#> - RNA
#> sbg:contributors:
#> - tengfei
#> sbg:project: tengfei/quickstart
#> sbg:createdBy: tengfei
#> sbg:toolkitVersion: 2.4.2a
#> sbg:id: tengfei/quickstart/rna-seq-alignment-star-demo/2
#> sbg:license: Apache License 2.0
#> sbg:revision: 2
#> sbg:modifiedOn: 1463601974
#> sbg:modifiedBy: tengfei
#> sbg:revisionsInfo:
#> - sbg:modifiedBy: tengfei
#>   sbg:modifiedOn: 1463601910
#>   sbg:revision: 0
#> - sbg:modifiedBy: tengfei
#>   sbg:modifiedOn: 1463601952
#>   sbg:revision: 1
#> - sbg:modifiedBy: tengfei
#>   sbg:modifiedOn: 1463601974
#>   sbg:revision: 2
#> sbg:toolkit: STAR
#> id: '#tengfei/quickstart/rna-seq-alignment-star-demo/2'
#> inputs:
#> - type:
#>   - items: File
#>     type: array
#>   label: Read sequence
#>   description: Read sequence.
#>   streamable: no
#>   id: '#reads'
#>   inputBinding:
#>     position: 10
#>     separate: yes
#>     itemSeparator: ' '
#>     valueFrom:
#>       engine: '#cwl-js-engine'
#>       script: "{\t\n  var list = [].concat($job.inputs.reads)\n  \n  var resp = []\n
#>         \ \n  if (list.length == 1){\n    resp.push(list[0].path)\n    \n  }else if
#>         (list.length == 2){    \n    \n    left = \"\"\n    right = \"\"\n      \n
#>         \   for (index = 0; index < list.length; ++index) {\n      \n      if (list[index].metadata
#>         != null){\n        if (list[index].metadata.paired_end == 1){\n          left
#>         = list[index].path\n        }else if (list[index].metadata.paired_end == 2){\n
#>         \         right = list[index].path\n        }\n      }\n    }\n    \n    if
#>         (left != \"\" && right != \"\"){      \n      resp.push(left)\n      resp.push(right)\n
#>         \   }\n  }\n  else if (list.length > 2){\n    left = []\n    right = []\n
#>         \     \n    for (index = 0; index < list.length; ++index) {\n      \n      if
#>         (list[index].metadata != null){\n        if (list[index].metadata.paired_end
#>         == 1){\n          left.push(list[index].path)\n        }else if (list[index].metadata.paired_end
#>         == 2){\n          right.push(list[index].path)\n        }\n      }\n    }\n
#>         \   left_join = left.join()\n    right_join = right.join()\n    if (left !=
#>         [] && right != []){      \n      resp.push(left_join)\n      resp.push(right_join)\n
#>         \   }\t\n  }\n  \n  if(resp.length > 0){    \n    return \"--readFilesIn \".concat(resp.join(\"
#>         \"))\n  }\n}"
#>       class: Expression
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Basic
#>   sbg:fileTypes: FASTA, FASTQ, FA, FQ, FASTQ.GZ, FQ.GZ, FASTQ.BZ2, FQ.BZ2
#>   sbg:x: 200.0
#>   sbg:y: 200.0
#>   sbg:includeInPorts: yes
#>   required: yes
#> - type:
#>   - 'null'
#>   - items: File
#>     type: array
#>   label: sjdbGTFfile
#>   streamable: no
#>   id: '#sjdbGTFfile'
#>   sbg:x: 160.4999759
#>   sbg:y: 195.0833106
#>   sbg:includeInPorts: yes
#>   required: no
#>   batchType: metadata.library_id
#> - type:
#>   - items: File
#>     type: array
#>   label: fastq
#>   streamable: no
#>   id: '#fastq'
#>   sbg:x: 164.2499914
#>   sbg:y: 323.7499502
#>   sbg:includeInPorts: yes
#>   required: yes
#> - type:
#>   - File
#>   label: genomeFastaFiles
#>   streamable: no
#>   id: '#genomeFastaFiles'
#>   sbg:x: 167.7499601
#>   sbg:y: 469.9999106
#>   sbg:includeInPorts: yes
#>   required: yes
#> - type:
#>   - 'null'
#>   - string
#>   label: Exons' parents name
#>   description: Tag name to be used as exons' transcript-parents.
#>   streamable: no
#>   id: '#sjdbGTFtagExonParentTranscript'
#>   sbg:category: Splice junctions db parameters
#>   sbg:x: 200.0
#>   sbg:y: 350.0
#>   sbg:includeInPorts: yes
#>   sbg:toolDefaultValue: transcript_id
#>   required: no
#> - type:
#>   - 'null'
#>   - string
#>   label: Gene name
#>   description: Tag name to be used as exons' gene-parents.
#>   streamable: no
#>   id: '#sjdbGTFtagExonParentGene'
#>   sbg:category: Splice junctions db parameters
#>   sbg:x: 200.0
#>   sbg:y: 400.0
#>   sbg:includeInPorts: yes
#>   sbg:toolDefaultValue: gene_id
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: Max loci anchors
#>   description: Max number of loci anchors are allowed to map to (int>0).
#>   streamable: no
#>   id: '#winAnchorMultimapNmax'
#>   sbg:category: Windows, Anchors, Binning
#>   sbg:x: 200.0
#>   sbg:y: 450.0
#>   sbg:includeInPorts: yes
#>   sbg:toolDefaultValue: '50'
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: Max bins between anchors
#>   description: Max number of bins between two anchors that allows aggregation of anchors
#>     into one window (int>0).
#>   streamable: no
#>   id: '#winAnchorDistNbins'
#>   sbg:category: Windows, Anchors, Binning
#>   sbg:x: 200.0
#>   sbg:y: 500.0
#>   sbg:includeInPorts: yes
#>   sbg:toolDefaultValue: '9'
#>   required: no
#> outputs:
#> - type:
#>   - 'null'
#>   - items: File
#>     type: array
#>   label: Unmapped reads
#>   description: Output of unmapped reads.
#>   streamable: no
#>   id: '#unmapped_reads'
#>   source: '#unmapped_reads'
#>   sbg:x: 800.0
#>   sbg:y: 200.0
#>   sbg:includeInPorts: yes
#>   required: no
#> - type:
#>   - 'null'
#>   - File
#>   label: Transcriptome alignments
#>   description: Alignments translated into transcript coordinates.
#>   streamable: no
#>   id: '#transcriptome_aligned_reads'
#>   source: '#transcriptome_aligned_reads'
#>   sbg:x: 800.0
#>   sbg:y: 233.3333333
#>   sbg:includeInPorts: yes
#>   required: no
#> - type:
#>   - 'null'
#>   - File
#>   label: Splice junctions
#>   description: High confidence collapsed splice junctions in tab-delimited format.
#>     Only junctions supported by uniquely mapping reads are reported.
#>   streamable: no
#>   id: '#splice_junctions'
#>   source: '#splice_junctions'
#>   sbg:x: 800.0
#>   sbg:y: 266.6666667
#>   sbg:includeInPorts: yes
#>   required: no
#> - type:
#>   - 'null'
#>   - File
#>   label: Reads per gene
#>   description: File with number of reads per gene. A read is counted if it overlaps
#>     (1nt or more) one and only one gene.
#>   streamable: no
#>   id: '#reads_per_gene'
#>   source: '#reads_per_gene'
#>   sbg:x: 800.0
#>   sbg:y: 300.0
#>   sbg:includeInPorts: yes
#>   required: no
#> - type:
#>   - 'null'
#>   - items: File
#>     type: array
#>   label: Log files
#>   description: Log files produced during alignment.
#>   streamable: no
#>   id: '#log_files'
#>   source: '#log_files'
#>   sbg:x: 800.0
#>   sbg:y: 333.3333333
#>   sbg:includeInPorts: yes
#>   required: no
#> - type:
#>   - 'null'
#>   - File
#>   label: Chimeric junctions
#>   description: If chimSegmentMin in 'Chimeric Alignments' section is set to 0, 'Chimeric
#>     Junctions' won't be output.
#>   streamable: no
#>   id: '#chimeric_junctions'
#>   source: '#chimeric_junctions'
#>   sbg:x: 800.0
#>   sbg:y: 366.6666667
#>   sbg:includeInPorts: yes
#>   required: no
#> - type:
#>   - 'null'
#>   - File
#>   label: Intermediate genome files
#>   description: Archive with genome files produced when annotations are included on
#>     the fly (in the mapping step).
#>   streamable: no
#>   id: '#intermediate_genome'
#>   source:
#>   - '#intermediate_genome'
#>   - intermediate_genome
#>   sbg:x: 800.0
#>   sbg:y: 400.0
#>   sbg:includeInPorts: yes
#>   required: no
#> - type:
#>   - 'null'
#>   - File
#>   label: Chimeric alignments
#>   description: Aligned Chimeric sequences SAM - if chimSegmentMin = 0, no Chimeric
#>     Alignment SAM and Chimeric Junctions outputs.
#>   streamable: no
#>   id: '#chimeric_alignments'
#>   source: '#chimeric_alignments'
#>   sbg:x: 800.0
#>   sbg:y: 433.3333333
#>   sbg:includeInPorts: yes
#>   required: no
#> - type:
#>   - 'null'
#>   - File
#>   label: Sorted BAM/SAM
#>   description: Sorted BAM or SAM file.
#>   streamable: no
#>   id: '#sorted_bam'
#>   source: '#sorted_bam'
#>   sbg:x: 800.0
#>   sbg:y: 466.6666667
#>   sbg:includeInPorts: yes
#>   required: no
#> - type:
#>   - 'null'
#>   - File
#>   label: Result
#>   description: Source FASTQ file with updated metadata.
#>   streamable: no
#>   id: '#result'
#>   source: '#result'
#>   sbg:x: 800.0
#>   sbg:y: 500.0
#>   sbg:includeInPorts: yes
#>   required: no
#> - type:
#>   - 'null'
#>   - File
#>   label: Intermediate genome files
#>   description: Archive with genome files produced when annotations are included on
#>     the fly (in the mapping step).
#>   streamable: no
#>   id: '#intermediate_genome'
#>   source:
#>   - '#intermediate_genome'
#>   - intermediate_genome
#>   sbg:x: 800.0
#>   sbg:y: 533.3333333
#>   sbg:includeInPorts: yes
#>   required: no
#> requirements:
#> - class: CreateFileRequirement
#>   fileDef: []
#> hints:
#> - class: sbg:AWSInstanceType
#>   value: c3.8xlarge
#> label: RNA-seq Alignment - STAR
#> description: "Alignment to a reference genome and transcriptome presents the first
#>   step of RNA-Seq analysis. This pipeline uses STAR, an ultrafast RNA-seq aligner
#>   capable of mapping full length RNA sequences and detecting de novo canonical junctions,
#>   non-canonical splices, and chimeric (fusion) transcripts. It is optimized for mammalian
#>   sequence reads, but fine tuning of its parameters enables customization to satisfy
#>   unique needs.\n\nSTAR accepts one file per sample (or two files for paired-end data).
#>   \ \nSplice junction annotations can optionally be collected from splice junction
#>   databases. Set the \"Overhang length\" parameter to a value larger than zero in
#>   order to use splice junction databases. For constant read length, this value should
#>   (ideally) be equal to mate length decreased by 1; for long reads with non-constant
#>   length, this value should be 100 (pipeline default). \nFastQC Analysis on FASTQ
#>   files reveals read length distribution. STAR can detect chimeric transcripts, but
#>   parameter \"Min segment length\" in \"Chimeric Alignments\" category must be adjusted
#>   to a desired minimum chimeric segment length. Aligned reads are reported in BAM
#>   format and can be viewed in a genome browser (such as IGV). A file containing detected
#>   splice junctions is also produced.\n\nUnmapped reads are reported in FASTQ format
#>   and can be included in an output BAM file. The \"Output unmapped reads\" and \"Write
#>   unmapped in SAM\" parameters enable unmapped output type selection."
#> class: Workflow
#> steps:
#> - id: '#STAR_Genome_Generate'
#>   inputs:
#>   - id: '#STAR_Genome_Generate.sjdbScore'
#>   - id: '#STAR_Genome_Generate.sjdbOverhang'
#>   - id: '#STAR_Genome_Generate.sjdbGTFtagExonParentTranscript'
#>     source: '#sjdbGTFtagExonParentTranscript'
#>   - id: '#STAR_Genome_Generate.sjdbGTFtagExonParentGene'
#>     source: '#sjdbGTFtagExonParentGene'
#>   - id: '#STAR_Genome_Generate.sjdbGTFfile'
#>     source: '#sjdbGTFfile'
#>   - id: '#STAR_Genome_Generate.sjdbGTFfeatureExon'
#>   - id: '#STAR_Genome_Generate.sjdbGTFchrPrefix'
#>   - id: '#STAR_Genome_Generate.genomeSAsparseD'
#>   - id: '#STAR_Genome_Generate.genomeSAindexNbases'
#>   - id: '#STAR_Genome_Generate.genomeFastaFiles'
#>     source: '#genomeFastaFiles'
#>   - id: '#STAR_Genome_Generate.genomeChrBinNbits'
#>   outputs:
#>   - id: '#STAR_Genome_Generate.genome'
#>   hints: []
#>   run:
#>     sbg:validationErrors: []
#>     sbg:sbgMaintained: no
#>     sbg:latestRevision: 1
#>     sbg:job:
#>       allocatedResources:
#>         mem: 60000
#>         cpu: 15
#>       inputs:
#>         sjdbScore: 0
#>         sjdbGTFfeatureExon: sjdbGTFfeatureExon
#>         sjdbOverhang: 0
#>         sjdbGTFtagExonParentTranscript: sjdbGTFtagExonParentTranscript
#>         genomeChrBinNbits: genomeChrBinNbits
#>         genomeSAsparseD: 0
#>         sjdbGTFfile:
#>         - size: 0
#>           secondaryFiles: []
#>           class: File
#>           path: /demo/test-files/chr20.gtf
#>         sjdbGTFtagExonParentGene: sjdbGTFtagExonParentGene
#>         genomeFastaFiles:
#>           size: 0
#>           secondaryFiles: []
#>           class: File
#>           path: /sbgenomics/test-data/chr20.fa
#>         sjdbGTFchrPrefix: sjdbGTFchrPrefix
#>         genomeSAindexNbases: 0
#>     sbg:toolAuthor: Alexander Dobin/CSHL
#>     sbg:createdOn: 1450911469
#>     sbg:categories:
#>     - Alignment
#>     sbg:contributors:
#>     - bix-demo
#>     sbg:links:
#>     - id: https://github.com/alexdobin/STAR
#>       label: Homepage
#>     - id: https://github.com/alexdobin/STAR/releases
#>       label: Releases
#>     - id: https://github.com/alexdobin/STAR/blob/master/doc/STARmanual.pdf
#>       label: Manual
#>     - id: https://groups.google.com/forum/#!forum/rna-star
#>       label: Support
#>     - id: http://www.ncbi.nlm.nih.gov/pubmed/23104886
#>       label: Publication
#>     sbg:project: bix-demo/star-2-4-2a-demo
#>     sbg:createdBy: bix-demo
#>     sbg:toolkitVersion: 2.4.2a
#>     sbg:id: sevenbridges/public-apps/star-genome-generate/1
#>     sbg:license: GNU General Public License v3.0 only
#>     sbg:revision: 1
#>     sbg:cmdPreview: mkdir genomeDir && /opt/STAR --runMode genomeGenerate --genomeDir
#>       ./genomeDir --runThreadN 15 --genomeFastaFiles /sbgenomics/test-data/chr20.fa
#>       --genomeChrBinNbits genomeChrBinNbits --genomeSAindexNbases 0 --genomeSAsparseD
#>       0 --sjdbGTFfeatureExon sjdbGTFfeatureExon --sjdbGTFtagExonParentTranscript sjdbGTFtagExonParentTranscript
#>       --sjdbGTFtagExonParentGene sjdbGTFtagExonParentGene --sjdbOverhang 0 --sjdbScore
#>       0 --sjdbGTFchrPrefix sjdbGTFchrPrefix  --sjdbGTFfile /demo/test-files/chr20.gtf  &&
#>       tar -vcf genome.tar ./genomeDir /sbgenomics/test-data/chr20.fa
#>     sbg:modifiedOn: 1450911470
#>     sbg:modifiedBy: bix-demo
#>     sbg:revisionsInfo:
#>     - sbg:modifiedBy: bix-demo
#>       sbg:modifiedOn: 1450911469
#>       sbg:revision: 0
#>     - sbg:modifiedBy: bix-demo
#>       sbg:modifiedOn: 1450911470
#>       sbg:revision: 1
#>     sbg:toolkit: STAR
#>     id: sevenbridges/public-apps/star-genome-generate/1
#>     inputs:
#>     - type:
#>       - 'null'
#>       - int
#>       label: Extra alignment score
#>       description: Extra alignment score for alignments that cross database junctions.
#>       streamable: no
#>       id: '#sjdbScore'
#>       inputBinding:
#>         position: 0
#>         prefix: --sjdbScore
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Splice junctions db parameters
#>       sbg:includeInPorts: yes
#>       sbg:toolDefaultValue: '2'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: '"Overhang" length'
#>       description: Length of the donor/acceptor sequence on each side of the junctions,
#>         ideally = (mate_length - 1) (int >= 0), if int = 0, splice junction database
#>         is not used.
#>       streamable: no
#>       id: '#sjdbOverhang'
#>       inputBinding:
#>         position: 0
#>         prefix: --sjdbOverhang
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Splice junctions db parameters
#>       sbg:includeInPorts: yes
#>       sbg:toolDefaultValue: '100'
#>       required: no
#>     - type:
#>       - 'null'
#>       - string
#>       label: Exons' parents name
#>       description: Tag name to be used as exons' transcript-parents.
#>       streamable: no
#>       id: '#sjdbGTFtagExonParentTranscript'
#>       inputBinding:
#>         position: 0
#>         prefix: --sjdbGTFtagExonParentTranscript
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Splice junctions db parameters
#>       sbg:toolDefaultValue: transcript_id
#>       required: no
#>     - type:
#>       - 'null'
#>       - string
#>       label: Gene name
#>       description: Tag name to be used as exons' gene-parents.
#>       streamable: no
#>       id: '#sjdbGTFtagExonParentGene'
#>       inputBinding:
#>         position: 0
#>         prefix: --sjdbGTFtagExonParentGene
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Splice junctions db parameters
#>       sbg:toolDefaultValue: gene_id
#>       required: no
#>     - type:
#>       - 'null'
#>       - items: File
#>         type: array
#>       label: Splice junction file
#>       description: Gene model annotations and/or known transcripts.
#>       streamable: no
#>       id: '#sjdbGTFfile'
#>       sbg:category: Basic
#>       sbg:fileTypes: GTF, GFF, TXT
#>       required: no
#>     - type:
#>       - 'null'
#>       - string
#>       label: Set exons feature
#>       description: Feature type in GTF file to be used as exons for building transcripts.
#>       streamable: no
#>       id: '#sjdbGTFfeatureExon'
#>       inputBinding:
#>         position: 0
#>         prefix: --sjdbGTFfeatureExon
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Splice junctions db parameters
#>       sbg:toolDefaultValue: exon
#>       required: no
#>     - type:
#>       - 'null'
#>       - string
#>       label: Chromosome names
#>       description: Prefix for chromosome names in a GTF file (e.g. 'chr' for using
#>         ENSMEBL annotations with UCSC geneomes).
#>       streamable: no
#>       id: '#sjdbGTFchrPrefix'
#>       inputBinding:
#>         position: 0
#>         prefix: --sjdbGTFchrPrefix
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Splice junctions db parameters
#>       sbg:toolDefaultValue: '-'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Suffux array sparsity
#>       description: 'Distance between indices: use bigger numbers to decrease needed
#>         RAM at the cost of mapping speed reduction (int>0).'
#>       streamable: no
#>       id: '#genomeSAsparseD'
#>       inputBinding:
#>         position: 0
#>         prefix: --genomeSAsparseD
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Genome generation parameters
#>       sbg:toolDefaultValue: '1'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Pre-indexing string length
#>       description: Length (bases) of the SA pre-indexing string. Typically between
#>         10 and 15. Longer strings will use much more memory, but allow faster searches.
#>         For small genomes, this number needs to be scaled down, with a typical value
#>         of min(14, log2(GenomeLength)/2 - 1). For example, for 1 megaBase genome,
#>         this is equal to 9, for 100 kiloBase genome, this is equal to 7.
#>       streamable: no
#>       id: '#genomeSAindexNbases'
#>       inputBinding:
#>         position: 0
#>         prefix: --genomeSAindexNbases
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Genome generation parameters
#>       sbg:toolDefaultValue: '14'
#>       required: no
#>     - type:
#>       - File
#>       label: Genome fasta files
#>       description: Reference sequence to which to align the reads.
#>       streamable: no
#>       id: '#genomeFastaFiles'
#>       inputBinding:
#>         position: 0
#>         prefix: --genomeFastaFiles
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Basic
#>       sbg:fileTypes: FASTA, FA
#>       required: yes
#>     - type:
#>       - 'null'
#>       - string
#>       label: Bins size
#>       description: 'Set log2(chrBin), where chrBin is the size (bits) of the bins
#>         for genome storage: each chromosome will occupy an integer number of bins.
#>         If you are using a genome with a large (>5,000) number of chrosomes/scaffolds,
#>         you may need to reduce this number to reduce RAM consumption. The following
#>         scaling is recomended: genomeChrBinNbits = min(18, log2(GenomeLength/NumberOfReferences)).
#>         For example, for 3 gigaBase genome with 100,000 chromosomes/scaffolds, this
#>         is equal to 15.'
#>       streamable: no
#>       id: '#genomeChrBinNbits'
#>       inputBinding:
#>         position: 0
#>         prefix: --genomeChrBinNbits
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Genome generation parameters
#>       sbg:toolDefaultValue: '18'
#>       required: no
#>     outputs:
#>     - type:
#>       - 'null'
#>       - File
#>       label: Genome Files
#>       description: Genome files comprise binary genome sequence, suffix arrays, text
#>         chromosome names/lengths, splice junctions coordinates, and transcripts/genes
#>         information.
#>       streamable: no
#>       id: '#genome'
#>       outputBinding:
#>         glob: '*.tar'
#>       sbg:fileTypes: TAR
#>     requirements:
#>     - class: ExpressionEngineRequirement
#>       id: '#cwl-js-engine'
#>       requirements:
#>       - class: DockerRequirement
#>         dockerPull: rabix/js-engine
#>     hints:
#>     - class: DockerRequirement
#>       dockerPull: images.sbgenomics.com/ana_d/star:2.4.2a
#>       dockerImageId: a4b0ad2c3cae
#>     - class: sbg:CPURequirement
#>       value: 15
#>     - class: sbg:MemRequirement
#>       value: 60000
#>     label: STAR Genome Generate
#>     description: STAR Genome Generate is a tool that generates genome index files.
#>       One set of files should be generated per each genome/annotation combination.
#>       Once produced, these files could be used as long as genome/annotation combination
#>       stays the same. Also, STAR Genome Generate which produced these files and STAR
#>       aligner using them must be the same toolkit version.
#>     class: CommandLineTool
#>     baseCommand:
#>     - mkdir
#>     - genomeDir
#>     - '&&'
#>     - /opt/STAR
#>     - --runMode
#>     - genomeGenerate
#>     - --genomeDir
#>     - ./genomeDir
#>     - --runThreadN
#>     - class: Expression
#>       script: |-
#>         {
#>           return $job.allocatedResources.cpu
#>         }
#>       engine: '#cwl-js-engine'
#>     arguments:
#>     - position: 99
#>       separate: yes
#>       valueFrom: '&& tar -vcf genome.tar ./genomeDir'
#>     - position: 0
#>       separate: yes
#>       valueFrom:
#>         engine: '#cwl-js-engine'
#>         script: "{\t\n  var sjFormat = \"False\"\n  var gtfgffFormat = \"False\"\n
#>           \ var list = $job.inputs.sjdbGTFfile\n  var paths_list = []\n  var joined_paths
#>           = \"\"\n  \n  if (list) {\n    list.forEach(function(f){return paths_list.push(f.path)})\n
#>           \   joined_paths = paths_list.join(\" \")\n\n\n    paths_list.forEach(function(f){\n
#>           \     ext = f.replace(/^.*\\./, '')\n      if (ext == \"gff\" || ext ==
#>           \"gtf\") {\n        gtfgffFormat = \"True\"\n        return gtfgffFormat\n
#>           \     }\n      if (ext == \"txt\") {\n        sjFormat = \"True\"\n        return
#>           sjFormat\n      }\n    })\n\n    if ($job.inputs.sjdbGTFfile && $job.inputs.sjdbInsertSave
#>           != \"None\") {\n      if (sjFormat == \"True\") {\n        return \"--sjdbFileChrStartEnd
#>           \".concat(joined_paths)\n      }\n      else if (gtfgffFormat == \"True\")
#>           {\n        return \"--sjdbGTFfile \".concat(joined_paths)\n      }\n    }\n
#>           \ }\n}"
#>         class: Expression
#>     stdin: ''
#>     stdout: ''
#>     successCodes: []
#>     temporaryFailCodes: []
#>     x: 384.0832266
#>     'y': 446.4998957
#>   sbg:x: 100.0
#>   sbg:y: 200.0
#> - id: '#SBG_FASTQ_Quality_Detector'
#>   inputs:
#>   - id: '#SBG_FASTQ_Quality_Detector.fastq'
#>     source: '#fastq'
#>   outputs:
#>   - id: '#SBG_FASTQ_Quality_Detector.result'
#>   hints: []
#>   run:
#>     sbg:validationErrors: []
#>     sbg:sbgMaintained: no
#>     sbg:latestRevision: 3
#>     sbg:job:
#>       allocatedResources:
#>         mem: 1000
#>         cpu: 1
#>       inputs:
#>         fastq:
#>           size: 0
#>           secondaryFiles: []
#>           class: File
#>           path: /path/to/fastq.ext
#>     sbg:toolAuthor: Seven Bridges Genomics
#>     sbg:createdOn: 1450911312
#>     sbg:categories:
#>     - FASTQ-Processing
#>     sbg:contributors:
#>     - bix-demo
#>     sbg:project: bix-demo/sbgtools-demo
#>     sbg:createdBy: bix-demo
#>     sbg:id: sevenbridges/public-apps/sbg-fastq-quality-detector/3
#>     sbg:license: Apache License 2.0
#>     sbg:revision: 3
#>     sbg:cmdPreview: python /opt/sbg_fastq_quality_scale_detector.py --fastq /path/to/fastq.ext
#>       /path/to/fastq.ext
#>     sbg:modifiedOn: 1450911314
#>     sbg:modifiedBy: bix-demo
#>     sbg:revisionsInfo:
#>     - sbg:modifiedBy: bix-demo
#>       sbg:modifiedOn: 1450911312
#>       sbg:revision: 0
#>     - sbg:modifiedBy: bix-demo
#>       sbg:modifiedOn: 1450911314
#>       sbg:revision: 3
#>     - sbg:modifiedBy: bix-demo
#>       sbg:modifiedOn: 1450911313
#>       sbg:revision: 1
#>     - sbg:modifiedBy: bix-demo
#>       sbg:modifiedOn: 1450911313
#>       sbg:revision: 2
#>     sbg:toolkit: SBGTools
#>     id: sevenbridges/public-apps/sbg-fastq-quality-detector/3
#>     inputs:
#>     - type:
#>       - File
#>       label: Fastq
#>       description: FASTQ file.
#>       streamable: no
#>       id: '#fastq'
#>       inputBinding:
#>         position: 0
#>         prefix: --fastq
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       required: yes
#>     outputs:
#>     - type:
#>       - 'null'
#>       - File
#>       label: Result
#>       description: Source FASTQ file with updated metadata.
#>       streamable: no
#>       id: '#result'
#>       outputBinding:
#>         glob: '*.fastq'
#>       sbg:fileTypes: FASTQ
#>     requirements:
#>     - class: CreateFileRequirement
#>       fileDef: []
#>     hints:
#>     - class: DockerRequirement
#>       dockerPull: images.sbgenomics.com/tziotas/sbg_fastq_quality_scale_detector:1.0
#>       dockerImageId: ''
#>     - class: sbg:CPURequirement
#>       value: 1
#>     - class: sbg:MemRequirement
#>       value: 1000
#>     label: SBG FASTQ Quality Detector
#>     description: FASTQ Quality Scale Detector detects which quality encoding scheme
#>       was used in your reads and automatically enters the proper value in the "Quality
#>       Scale" metadata field.
#>     class: CommandLineTool
#>     baseCommand:
#>     - python
#>     - /opt/sbg_fastq_quality_scale_detector.py
#>     arguments: []
#>     stdin: ''
#>     stdout: ''
#>     successCodes: []
#>     temporaryFailCodes: []
#>     x: 375.3333179
#>     'y': 323.5833156
#>   sbg:x: 300.0
#>   sbg:y: 200.0
#> - id: '#Picard_SortSam'
#>   inputs:
#>   - id: '#Picard_SortSam.validation_stringency'
#>     default: SILENT
#>   - id: '#Picard_SortSam.sort_order'
#>     default: Coordinate
#>   - id: '#Picard_SortSam.quiet'
#>   - id: '#Picard_SortSam.output_type'
#>   - id: '#Picard_SortSam.memory_per_job'
#>   - id: '#Picard_SortSam.max_records_in_ram'
#>   - id: '#Picard_SortSam.input_bam'
#>     source: '#STAR.aligned_reads'
#>   - id: '#Picard_SortSam.create_index'
#>     default: 'True'
#>   - id: '#Picard_SortSam.compression_level'
#>   outputs:
#>   - id: '#Picard_SortSam.sorted_bam'
#>   hints: []
#>   run:
#>     sbg:validationErrors: []
#>     sbg:sbgMaintained: no
#>     sbg:latestRevision: 2
#>     sbg:job:
#>       allocatedResources:
#>         mem: 2048
#>         cpu: 1
#>       inputs:
#>         sort_order: Coordinate
#>         input_bam:
#>           path: /root/dir/example.tested.bam
#>         memory_per_job: 2048
#>         output_type: ~
#>         create_index: ~
#>     sbg:toolAuthor: Broad Institute
#>     sbg:createdOn: 1450911168
#>     sbg:categories:
#>     - SAM/BAM-Processing
#>     sbg:contributors:
#>     - bix-demo
#>     sbg:links:
#>     - id: http://broadinstitute.github.io/picard/index.html
#>       label: Homepage
#>     - id: https://github.com/broadinstitute/picard/releases/tag/1.138
#>       label: Source Code
#>     - id: http://broadinstitute.github.io/picard/
#>       label: Wiki
#>     - id: https://github.com/broadinstitute/picard/zipball/master
#>       label: Download
#>     - id: http://broadinstitute.github.io/picard/
#>       label: Publication
#>     sbg:project: bix-demo/picard-1-140-demo
#>     sbg:createdBy: bix-demo
#>     sbg:toolkitVersion: '1.140'
#>     sbg:id: sevenbridges/public-apps/picard-sortsam-1-140/2
#>     sbg:license: MIT License, Apache 2.0 Licence
#>     sbg:revision: 2
#>     sbg:cmdPreview: java -Xmx2048M -jar /opt/picard-tools-1.140/picard.jar SortSam
#>       OUTPUT=example.tested.sorted.bam INPUT=/root/dir/example.tested.bam SORT_ORDER=coordinate   INPUT=/root/dir/example.tested.bam
#>       SORT_ORDER=coordinate  /root/dir/example.tested.bam
#>     sbg:modifiedOn: 1450911170
#>     sbg:modifiedBy: bix-demo
#>     sbg:revisionsInfo:
#>     - sbg:modifiedBy: bix-demo
#>       sbg:modifiedOn: 1450911168
#>       sbg:revision: 0
#>     - sbg:modifiedBy: bix-demo
#>       sbg:modifiedOn: 1450911169
#>       sbg:revision: 1
#>     - sbg:modifiedBy: bix-demo
#>       sbg:modifiedOn: 1450911170
#>       sbg:revision: 2
#>     sbg:toolkit: Picard
#>     id: sevenbridges/public-apps/picard-sortsam-1-140/2
#>     inputs:
#>     - type:
#>       - 'null'
#>       - name: validation_stringency
#>         symbols:
#>         - STRICT
#>         - LENIENT
#>         - SILENT
#>         type: enum
#>       label: Validation stringency
#>       description: 'Validation stringency for all SAM files read by this program.
#>         Setting stringency to SILENT can improve performance when processing a BAM
#>         file in which variable-length data (read, qualities, tags) do not otherwise
#>         need to be decoded. This option can be set to ''null'' to clear the default
#>         value. Possible values: {STRICT, LENIENT, SILENT}.'
#>       streamable: no
#>       id: '#validation_stringency'
#>       inputBinding:
#>         position: 0
#>         prefix: VALIDATION_STRINGENCY=
#>         separate: no
#>         valueFrom:
#>           engine: '#cwl-js-engine'
#>           script: |-
#>             {
#>               if ($job.inputs.validation_stringency)
#>               {
#>                 return $job.inputs.validation_stringency
#>               }
#>               else
#>               {
#>                 return "SILENT"
#>               }
#>             }
#>           class: Expression
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Other input types
#>       sbg:toolDefaultValue: SILENT
#>       required: no
#>     - type:
#>       - name: sort_order
#>         symbols:
#>         - Unsorted
#>         - Queryname
#>         - Coordinate
#>         type: enum
#>       label: Sort order
#>       description: 'Sort order of the output file. Possible values: {unsorted, queryname,
#>         coordinate}.'
#>       streamable: no
#>       id: '#sort_order'
#>       inputBinding:
#>         position: 3
#>         prefix: SORT_ORDER=
#>         separate: no
#>         valueFrom:
#>           engine: '#cwl-js-engine'
#>           script: |-
#>             {
#>               p = $job.inputs.sort_order.toLowerCase()
#>               return p
#>             }
#>           class: Expression
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Other input types
#>       sbg:toolDefaultValue: Coordinate
#>       sbg:altPrefix: SO
#>       required: yes
#>     - type:
#>       - 'null'
#>       - name: quiet
#>         symbols:
#>         - 'True'
#>         - 'False'
#>         type: enum
#>       label: Quiet
#>       description: 'This parameter indicates whether to suppress job-summary info
#>         on System.err. This option can be set to ''null'' to clear the default value.
#>         Possible values: {true, false}.'
#>       streamable: no
#>       id: '#quiet'
#>       inputBinding:
#>         position: 0
#>         prefix: QUIET=
#>         separate: no
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Other input types
#>       sbg:toolDefaultValue: 'False'
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: output_type
#>         symbols:
#>         - BAM
#>         - SAM
#>         - SAME AS INPUT
#>         type: enum
#>       label: Output format
#>       description: Since Picard tools can output both SAM and BAM files, user can
#>         choose the format of the output file.
#>       streamable: no
#>       id: '#output_type'
#>       sbg:category: Other input types
#>       sbg:toolDefaultValue: SAME AS INPUT
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Memory per job
#>       description: Amount of RAM memory to be used per job. Defaults to 2048 MB for
#>         single threaded jobs.
#>       streamable: no
#>       id: '#memory_per_job'
#>       sbg:toolDefaultValue: '2048'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Max records in RAM
#>       description: When writing SAM files that need to be sorted, this parameter will
#>         specify the number of records stored in RAM before spilling to disk. Increasing
#>         this number reduces the number of file handles needed to sort a SAM file,
#>         and increases the amount of RAM needed. This option can be set to 'null' to
#>         clear the default value.
#>       streamable: no
#>       id: '#max_records_in_ram'
#>       inputBinding:
#>         position: 0
#>         prefix: MAX_RECORDS_IN_RAM=
#>         separate: no
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Other input types
#>       sbg:toolDefaultValue: '500000'
#>       required: no
#>     - type:
#>       - File
#>       label: Input BAM
#>       description: The BAM or SAM file to sort.
#>       streamable: no
#>       id: '#input_bam'
#>       inputBinding:
#>         position: 1
#>         prefix: INPUT=
#>         separate: no
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: File inputs
#>       sbg:fileTypes: BAM, SAM
#>       sbg:altPrefix: I
#>       required: yes
#>     - type:
#>       - 'null'
#>       - name: create_index
#>         symbols:
#>         - 'True'
#>         - 'False'
#>         type: enum
#>       label: Create index
#>       description: 'This parameter indicates whether to create a BAM index when writing
#>         a coordinate-sorted BAM file. This option can be set to ''null'' to clear
#>         the default value. Possible values: {true, false}.'
#>       streamable: no
#>       id: '#create_index'
#>       inputBinding:
#>         position: 5
#>         prefix: CREATE_INDEX=
#>         separate: no
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Other input types
#>       sbg:toolDefaultValue: 'False'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Compression level
#>       description: Compression level for all compressed files created (e.g. BAM and
#>         GELI). This option can be set to 'null' to clear the default value.
#>       streamable: no
#>       id: '#compression_level'
#>       inputBinding:
#>         position: 0
#>         prefix: COMPRESSION_LEVEL=
#>         separate: no
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Other input types
#>       sbg:toolDefaultValue: '5'
#>       required: no
#>     outputs:
#>     - type:
#>       - 'null'
#>       - File
#>       label: Sorted BAM/SAM
#>       description: Sorted BAM or SAM file.
#>       streamable: no
#>       id: '#sorted_bam'
#>       outputBinding:
#>         glob: '*.sorted.?am'
#>       sbg:fileTypes: BAM, SAM
#>     requirements:
#>     - class: ExpressionEngineRequirement
#>       id: '#cwl-js-engine'
#>       requirements:
#>       - class: DockerRequirement
#>         dockerPull: rabix/js-engine
#>       engineCommand: cwl-engine.js
#>     hints:
#>     - class: DockerRequirement
#>       dockerPull: images.sbgenomics.com/mladenlsbg/picard:1.140
#>       dockerImageId: eab0e70b6629
#>     - class: sbg:CPURequirement
#>       value: 1
#>     - class: sbg:MemRequirement
#>       value:
#>         engine: '#cwl-js-engine'
#>         script: "{\n  if($job.inputs.memory_per_job){\n  \treturn $job.inputs.memory_per_job\n
#>           \ }\n  \treturn 2048\n}"
#>         class: Expression
#>     label: Picard SortSam
#>     description: Picard SortSam sorts the input SAM or BAM. Input and output formats
#>       are determined by the file extension.
#>     class: CommandLineTool
#>     baseCommand:
#>     - java
#>     - class: Expression
#>       script: "{   \n  if($job.inputs.memory_per_job){\n    return '-Xmx'.concat($job.inputs.memory_per_job,
#>         'M')\n  }   \n  \treturn '-Xmx2048M'\n}"
#>       engine: '#cwl-js-engine'
#>     - -jar
#>     - /opt/picard-tools-1.140/picard.jar
#>     - SortSam
#>     arguments:
#>     - position: 0
#>       prefix: OUTPUT=
#>       separate: no
#>       valueFrom:
#>         engine: '#cwl-js-engine'
#>         script: "{\n  filename = $job.inputs.input_bam.path\n  ext = $job.inputs.output_type\n\nif
#>           (ext === \"BAM\")\n{\n    return filename.split('.').slice(0, -1).concat(\"sorted.bam\").join(\".\").replace(/^.*[\\\\\\/]/,
#>           '')\n    }\n\nelse if (ext === \"SAM\")\n{\n    return filename.split('.').slice(0,
#>           -1).concat(\"sorted.sam\").join('.').replace(/^.*[\\\\\\/]/, '')\n}\n\nelse
#>           \n{\n\treturn filename.split('.').slice(0, -1).concat(\"sorted.\"+filename.split('.').slice(-1)[0]).join(\".\").replace(/^.*[\\\\\\/]/,
#>           '')\n}\n}"
#>         class: Expression
#>     - position: 1000
#>       separate: yes
#>       valueFrom:
#>         engine: '#cwl-js-engine'
#>         script: "{\n  filename = $job.inputs.input_bam.path\n  \n  /* figuring out
#>           output file type */\n  ext = $job.inputs.output_type\n  if (ext === \"BAM\")\n
#>           \ {\n    out_extension = \"BAM\"\n  }\n  else if (ext === \"SAM\")\n  {\n
#>           \   out_extension = \"SAM\"\n  }\n  else \n  {\n\tout_extension = filename.split('.').slice(-1)[0].toUpperCase()\n
#>           \ }  \n  \n  /* if exist moving .bai in bam.bai */\n  if ($job.inputs.create_index
#>           === 'True' && $job.inputs.sort_order === 'Coordinate' && out_extension ==
#>           \"BAM\")\n  {\n    \n    old_name = filename.split('.').slice(0, -1).concat('sorted.bai').join('.').replace(/^.*[\\\\\\/]/,
#>           '')\n    new_name = filename.split('.').slice(0, -1).concat('sorted.bam.bai').join('.').replace(/^.*[\\\\\\/]/,
#>           '')\n    return \"; mv \" + \" \" + old_name + \" \" + new_name\n  }\n\n}"
#>         class: Expression
#>     stdin: ''
#>     stdout: ''
#>     successCodes: []
#>     temporaryFailCodes: []
#>     x: 773.0831807
#>     'y': 470.9165939
#>   sbg:x: 500.0
#>   sbg:y: 200.0
#> - id: '#STAR'
#>   inputs:
#>   - id: '#STAR.winFlankNbins'
#>   - id: '#STAR.winBinNbits'
#>   - id: '#STAR.winAnchorMultimapNmax'
#>     source: '#winAnchorMultimapNmax'
#>   - id: '#STAR.winAnchorDistNbins'
#>     source: '#winAnchorDistNbins'
#>   - id: '#STAR.twopassMode'
#>   - id: '#STAR.twopass1readsN'
#>   - id: '#STAR.sjdbScore'
#>   - id: '#STAR.sjdbOverhang'
#>     default: 100
#>   - id: '#STAR.sjdbInsertSave'
#>   - id: '#STAR.sjdbGTFtagExonParentTranscript'
#>   - id: '#STAR.sjdbGTFtagExonParentGene'
#>   - id: '#STAR.sjdbGTFfile'
#>     source: '#sjdbGTFfile'
#>   - id: '#STAR.sjdbGTFfeatureExon'
#>   - id: '#STAR.sjdbGTFchrPrefix'
#>   - id: '#STAR.seedSearchStartLmaxOverLread'
#>   - id: '#STAR.seedSearchStartLmax'
#>   - id: '#STAR.seedSearchLmax'
#>   - id: '#STAR.seedPerWindowNmax'
#>   - id: '#STAR.seedPerReadNmax'
#>   - id: '#STAR.seedNoneLociPerWindow'
#>   - id: '#STAR.seedMultimapNmax'
#>   - id: '#STAR.scoreStitchSJshift'
#>   - id: '#STAR.scoreInsOpen'
#>   - id: '#STAR.scoreInsBase'
#>   - id: '#STAR.scoreGenomicLengthLog2scale'
#>   - id: '#STAR.scoreGapNoncan'
#>   - id: '#STAR.scoreGapGCAG'
#>   - id: '#STAR.scoreGapATAC'
#>   - id: '#STAR.scoreGap'
#>   - id: '#STAR.scoreDelOpen'
#>   - id: '#STAR.scoreDelBase'
#>   - id: '#STAR.rg_seq_center'
#>   - id: '#STAR.rg_sample_id'
#>   - id: '#STAR.rg_platform_unit_id'
#>   - id: '#STAR.rg_platform'
#>   - id: '#STAR.rg_mfl'
#>   - id: '#STAR.rg_library_id'
#>   - id: '#STAR.reads'
#>     source: '#reads'
#>   - id: '#STAR.readMatesLengthsIn'
#>   - id: '#STAR.readMapNumber'
#>   - id: '#STAR.quantTranscriptomeBan'
#>   - id: '#STAR.quantMode'
#>     default: TranscriptomeSAM
#>   - id: '#STAR.outSortingType'
#>     default: SortedByCoordinate
#>   - id: '#STAR.outSJfilterReads'
#>   - id: '#STAR.outSJfilterOverhangMin'
#>   - id: '#STAR.outSJfilterIntronMaxVsReadN'
#>   - id: '#STAR.outSJfilterDistToOtherSJmin'
#>   - id: '#STAR.outSJfilterCountUniqueMin'
#>   - id: '#STAR.outSJfilterCountTotalMin'
#>   - id: '#STAR.outSAMunmapped'
#>   - id: '#STAR.outSAMtype'
#>     default: BAM
#>   - id: '#STAR.outSAMstrandField'
#>   - id: '#STAR.outSAMreadID'
#>   - id: '#STAR.outSAMprimaryFlag'
#>   - id: '#STAR.outSAMorder'
#>   - id: '#STAR.outSAMmode'
#>   - id: '#STAR.outSAMmapqUnique'
#>   - id: '#STAR.outSAMheaderPG'
#>   - id: '#STAR.outSAMheaderHD'
#>   - id: '#STAR.outSAMflagOR'
#>   - id: '#STAR.outSAMflagAND'
#>   - id: '#STAR.outSAMattributes'
#>   - id: '#STAR.outReadsUnmapped'
#>     default: Fastx
#>   - id: '#STAR.outQSconversionAdd'
#>   - id: '#STAR.outFilterType'
#>   - id: '#STAR.outFilterScoreMinOverLread'
#>   - id: '#STAR.outFilterScoreMin'
#>   - id: '#STAR.outFilterMultimapScoreRange'
#>   - id: '#STAR.outFilterMultimapNmax'
#>   - id: '#STAR.outFilterMismatchNoverReadLmax'
#>   - id: '#STAR.outFilterMismatchNoverLmax'
#>   - id: '#STAR.outFilterMismatchNmax'
#>   - id: '#STAR.outFilterMatchNminOverLread'
#>   - id: '#STAR.outFilterMatchNmin'
#>   - id: '#STAR.outFilterIntronMotifs'
#>   - id: '#STAR.limitSjdbInsertNsj'
#>   - id: '#STAR.limitOutSJoneRead'
#>   - id: '#STAR.limitOutSJcollapsed'
#>   - id: '#STAR.limitBAMsortRAM'
#>   - id: '#STAR.genomeDirName'
#>   - id: '#STAR.genome'
#>     source: '#STAR_Genome_Generate.genome'
#>   - id: '#STAR.clip5pNbases'
#>   - id: '#STAR.clip3pNbases'
#>   - id: '#STAR.clip3pAfterAdapterNbases'
#>   - id: '#STAR.clip3pAdapterSeq'
#>   - id: '#STAR.clip3pAdapterMMp'
#>   - id: '#STAR.chimSegmentMin'
#>   - id: '#STAR.chimScoreSeparation'
#>   - id: '#STAR.chimScoreMin'
#>   - id: '#STAR.chimScoreJunctionNonGTAG'
#>   - id: '#STAR.chimScoreDropMax'
#>   - id: '#STAR.chimOutType'
#>   - id: '#STAR.chimJunctionOverhangMin'
#>   - id: '#STAR.alignWindowsPerReadNmax'
#>   - id: '#STAR.alignTranscriptsPerWindowNmax'
#>   - id: '#STAR.alignTranscriptsPerReadNmax'
#>   - id: '#STAR.alignSplicedMateMapLminOverLmate'
#>   - id: '#STAR.alignSplicedMateMapLmin'
#>   - id: '#STAR.alignSoftClipAtReferenceEnds'
#>   - id: '#STAR.alignSJoverhangMin'
#>   - id: '#STAR.alignSJDBoverhangMin'
#>   - id: '#STAR.alignMatesGapMax'
#>   - id: '#STAR.alignIntronMin'
#>   - id: '#STAR.alignIntronMax'
#>   - id: '#STAR.alignEndsType'
#>   outputs:
#>   - id: '#STAR.unmapped_reads'
#>   - id: '#STAR.transcriptome_aligned_reads'
#>   - id: '#STAR.splice_junctions'
#>   - id: '#STAR.reads_per_gene'
#>   - id: '#STAR.log_files'
#>   - id: '#STAR.intermediate_genome'
#>   - id: '#STAR.chimeric_junctions'
#>   - id: '#STAR.chimeric_alignments'
#>   - id: '#STAR.aligned_reads'
#>   hints: []
#>   run:
#>     sbg:validationErrors: []
#>     sbg:sbgMaintained: no
#>     sbg:latestRevision: 4
#>     sbg:job:
#>       allocatedResources:
#>         mem: 60000
#>         cpu: 15
#>       inputs:
#>         alignWindowsPerReadNmax: 0
#>         outSAMheaderPG: outSAMheaderPG
#>         GENOME_DIR_NAME: ''
#>         outFilterMatchNminOverLread: 0
#>         rg_platform_unit_id: rg_platform_unit
#>         alignTranscriptsPerReadNmax: 0
#>         readMapNumber: 0
#>         alignSplicedMateMapLminOverLmate: 0
#>         alignMatesGapMax: 0
#>         outFilterMultimapNmax: 0
#>         clip5pNbases:
#>         - 0
#>         outSAMstrandField: None
#>         readMatesLengthsIn: NotEqual
#>         outSAMattributes: Standard
#>         seedMultimapNmax: 0
#>         rg_mfl: rg_mfl
#>         chimSegmentMin: 0
#>         winAnchorDistNbins: 0
#>         outSortingType: SortedByCoordinate
#>         outFilterMultimapScoreRange: 0
#>         sjdbInsertSave: Basic
#>         clip3pAfterAdapterNbases:
#>         - 0
#>         scoreDelBase: 0
#>         outFilterMatchNmin: 0
#>         twopass1readsN: 0
#>         outSAMunmapped: None
#>         genome:
#>           size: 0
#>           secondaryFiles: []
#>           class: File
#>           path: genome.ext
#>         sjdbGTFtagExonParentTranscript: ''
#>         limitBAMsortRAM: 0
#>         alignEndsType: Local
#>         seedNoneLociPerWindow: 0
#>         rg_sample_id: rg_sample
#>         sjdbGTFtagExonParentGene: ''
#>         chimScoreMin: 0
#>         outSJfilterIntronMaxVsReadN:
#>         - 0
#>         twopassMode: Basic
#>         alignSplicedMateMapLmin: 0
#>         outSJfilterReads: All
#>         outSAMprimaryFlag: OneBestScore
#>         outSJfilterCountTotalMin:
#>         - 3
#>         - 1
#>         - 1
#>         - 1
#>         outSAMorder: Paired
#>         outSAMflagAND: 0
#>         chimScoreSeparation: 0
#>         alignSJoverhangMin: 0
#>         outFilterScoreMin: 0
#>         seedSearchStartLmax: 0
#>         scoreGapGCAG: 0
#>         scoreGenomicLengthLog2scale: 0
#>         outFilterIntronMotifs: None
#>         outFilterMismatchNmax: 0
#>         reads:
#>         - size: 0
#>           secondaryFiles: []
#>           class: File
#>           metadata:
#>             format: fastq
#>             paired_end: '1'
#>             seq_center: illumina
#>           path: /test-data/mate_1.fastq.bz2
#>         scoreGap: 0
#>         outSJfilterOverhangMin:
#>         - 30
#>         - 12
#>         - 12
#>         - 12
#>         outSAMflagOR: 0
#>         outSAMmode: Full
#>         rg_library_id: ''
#>         chimScoreJunctionNonGTAG: 0
#>         scoreInsOpen: 0
#>         clip3pAdapterSeq:
#>         - clip3pAdapterSeq
#>         chimScoreDropMax: 0
#>         outFilterType: Normal
#>         scoreGapATAC: 0
#>         rg_platform: Ion Torrent PGM
#>         clip3pAdapterMMp:
#>         - 0
#>         sjdbGTFfeatureExon: ''
#>         outQSconversionAdd: 0
#>         quantMode: TranscriptomeSAM
#>         alignIntronMin: 0
#>         scoreInsBase: 0
#>         scoreGapNoncan: 0
#>         seedSearchLmax: 0
#>         outSJfilterDistToOtherSJmin:
#>         - 0
#>         outFilterScoreMinOverLread: 0
#>         alignSJDBoverhangMin: 0
#>         limitOutSJcollapsed: 0
#>         winAnchorMultimapNmax: 0
#>         outFilterMismatchNoverLmax: 0
#>         rg_seq_center: ''
#>         outSAMheaderHD: outSAMheaderHD
#>         chimOutType: Within
#>         quantTranscriptomeBan: IndelSoftclipSingleend
#>         limitOutSJoneRead: 0
#>         alignTranscriptsPerWindowNmax: 0
#>         sjdbOverhang: ~
#>         outReadsUnmapped: Fastx
#>         scoreStitchSJshift: 0
#>         seedPerWindowNmax: 0
#>         outSJfilterCountUniqueMin:
#>         - 3
#>         - 1
#>         - 1
#>         - 1
#>         scoreDelOpen: 0
#>         sjdbGTFfile:
#>         - path: /demo/test-data/chr20.gtf
#>         clip3pNbases:
#>         - 0
#>         - 3
#>         winBinNbits: 0
#>         sjdbScore: ~
#>         seedSearchStartLmaxOverLread: 0
#>         alignIntronMax: 0
#>         seedPerReadNmax: 0
#>         outFilterMismatchNoverReadLmax: 0
#>         winFlankNbins: 0
#>         sjdbGTFchrPrefix: chrPrefix
#>         alignSoftClipAtReferenceEnds: 'Yes'
#>         outSAMreadID: Standard
#>         outSAMtype: BAM
#>         chimJunctionOverhangMin: 0
#>         limitSjdbInsertNsj: 0
#>         outSAMmapqUnique: 0
#>     sbg:toolAuthor: Alexander Dobin/CSHL
#>     sbg:createdOn: 1450911471
#>     sbg:categories:
#>     - Alignment
#>     sbg:contributors:
#>     - ana_d
#>     - bix-demo
#>     - uros_sipetic
#>     sbg:links:
#>     - id: https://github.com/alexdobin/STAR
#>       label: Homepage
#>     - id: https://github.com/alexdobin/STAR/releases
#>       label: Releases
#>     - id: https://github.com/alexdobin/STAR/blob/master/doc/STARmanual.pdf
#>       label: Manual
#>     - id: https://groups.google.com/forum/#!forum/rna-star
#>       label: Support
#>     - id: http://www.ncbi.nlm.nih.gov/pubmed/23104886
#>       label: Publication
#>     sbg:project: bix-demo/star-2-4-2a-demo
#>     sbg:createdBy: bix-demo
#>     sbg:toolkitVersion: 2.4.2a
#>     sbg:id: sevenbridges/public-apps/star/4
#>     sbg:license: GNU General Public License v3.0 only
#>     sbg:revision: 4
#>     sbg:cmdPreview: tar -xvf genome.ext && /opt/STAR --runThreadN 15  --readFilesCommand
#>       bzcat  --sjdbGTFfile /demo/test-data/chr20.gtf  --sjdbGTFchrPrefix chrPrefix
#>       --sjdbInsertSave Basic  --twopass1readsN 0  --chimOutType WithinBAM  --outSAMattrRGline
#>       ID:1 CN:illumina PI:rg_mfl PL:Ion_Torrent_PGM PU:rg_platform_unit SM:rg_sample  --quantMode
#>       TranscriptomeSAM --outFileNamePrefix ./mate_1.fastq.bz2.  --readFilesIn /test-data/mate_1.fastq.bz2  &&
#>       tar -vcf mate_1.fastq.bz2._STARgenome.tar ./mate_1.fastq.bz2._STARgenome  &&
#>       mv mate_1.fastq.bz2.Unmapped.out.mate1 mate_1.fastq.bz2.Unmapped.out.mate1.fastq
#>     sbg:modifiedOn: 1462889222
#>     sbg:modifiedBy: ana_d
#>     sbg:revisionsInfo:
#>     - sbg:modifiedBy: bix-demo
#>       sbg:modifiedOn: 1450911471
#>       sbg:revision: 0
#>     - sbg:modifiedBy: bix-demo
#>       sbg:modifiedOn: 1450911473
#>       sbg:revision: 1
#>     - sbg:modifiedBy: bix-demo
#>       sbg:modifiedOn: 1450911475
#>       sbg:revision: 2
#>     - sbg:modifiedBy: uros_sipetic
#>       sbg:modifiedOn: 1462878528
#>       sbg:revision: 3
#>     - sbg:modifiedBy: ana_d
#>       sbg:modifiedOn: 1462889222
#>       sbg:revision: 4
#>     sbg:toolkit: STAR
#>     id: sevenbridges/public-apps/star/4
#>     inputs:
#>     - type:
#>       - 'null'
#>       - int
#>       label: Flanking regions size
#>       description: =log2(winFlank), where win Flank is the size of the left and right
#>         flanking regions for each window (int>0).
#>       streamable: no
#>       id: '#winFlankNbins'
#>       inputBinding:
#>         position: 0
#>         prefix: --winFlankNbins
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Windows, Anchors, Binning
#>       sbg:includeInPorts: yes
#>       sbg:toolDefaultValue: '4'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Bin size
#>       description: =log2(winBin), where winBin is the size of the bin for the windows/clustering,
#>         each window will occupy an integer number of bins (int>0).
#>       streamable: no
#>       id: '#winBinNbits'
#>       inputBinding:
#>         position: 0
#>         prefix: --winBinNbits
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Windows, Anchors, Binning
#>       sbg:includeInPorts: yes
#>       sbg:toolDefaultValue: '16'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Max loci anchors
#>       description: Max number of loci anchors are allowed to map to (int>0).
#>       streamable: no
#>       id: '#winAnchorMultimapNmax'
#>       inputBinding:
#>         position: 0
#>         prefix: --winAnchorMultimapNmax
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Windows, Anchors, Binning
#>       sbg:toolDefaultValue: '50'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Max bins between anchors
#>       description: Max number of bins between two anchors that allows aggregation
#>         of anchors into one window (int>0).
#>       streamable: no
#>       id: '#winAnchorDistNbins'
#>       inputBinding:
#>         position: 0
#>         prefix: --winAnchorDistNbins
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Windows, Anchors, Binning
#>       sbg:toolDefaultValue: '9'
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: twopassMode
#>         symbols:
#>         - None
#>         - Basic
#>         type: enum
#>       label: Two-pass mode
#>       description: '2-pass mapping mode. None: 1-pass mapping; Basic: basic 2-pass
#>         mapping, with all 1st pass junctions inserted into the genome indices on the
#>         fly.'
#>       streamable: no
#>       id: '#twopassMode'
#>       inputBinding:
#>         position: 0
#>         prefix: --twopassMode
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: 2-pass mapping
#>       sbg:toolDefaultValue: None
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Reads to process in 1st step
#>       description: 'Number of reads to process for the 1st step. 0: 1-step only, no
#>         2nd pass; use very large number to map all reads in the first step (int>0).'
#>       streamable: no
#>       id: '#twopass1readsN'
#>       sbg:category: 2-pass mapping
#>       sbg:toolDefaultValue: '-1'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Extra alignment score
#>       description: Extra alignment score for alignments that cross database junctions.
#>       streamable: no
#>       id: '#sjdbScore'
#>       sbg:category: Splice junctions database
#>       sbg:toolDefaultValue: '2'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: '"Overhang" length'
#>       description: Length of the donor/acceptor sequence on each side of the junctions,
#>         ideally = (mate_length - 1) (int >= 0), if int = 0, splice junction database
#>         is not used.
#>       streamable: no
#>       id: '#sjdbOverhang'
#>       sbg:category: Splice junctions database
#>       sbg:toolDefaultValue: '100'
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: sjdbInsertSave
#>         symbols:
#>         - Basic
#>         - All
#>         - None
#>         type: enum
#>       label: Save junction files
#>       description: 'Which files to save when sjdb junctions are inserted on the fly
#>         at the mapping step. None: not saving files at all; Basic: only small junction/transcript
#>         files; All: all files including big Genome, SA and SAindex. These files are
#>         output as archive.'
#>       streamable: no
#>       id: '#sjdbInsertSave'
#>       sbg:category: Splice junctions database
#>       sbg:toolDefaultValue: None
#>       required: no
#>     - type:
#>       - 'null'
#>       - string
#>       label: Exons' parents name
#>       description: Tag name to be used as exons' transcript-parents.
#>       streamable: no
#>       id: '#sjdbGTFtagExonParentTranscript'
#>       sbg:category: Splice junctions database
#>       sbg:toolDefaultValue: transcript_id
#>       required: no
#>     - type:
#>       - 'null'
#>       - string
#>       label: Gene name
#>       description: Tag name to be used as exons' gene-parents.
#>       streamable: no
#>       id: '#sjdbGTFtagExonParentGene'
#>       sbg:category: Splice junctions database
#>       sbg:toolDefaultValue: gene_id
#>       required: no
#>     - type:
#>       - 'null'
#>       - items: File
#>         type: array
#>       label: Splice junction file
#>       description: Gene model annotations and/or known transcripts. No need to include
#>         this input, except in case of using "on the fly" annotations.
#>       streamable: no
#>       id: '#sjdbGTFfile'
#>       sbg:category: Basic
#>       sbg:fileTypes: GTF, GFF, TXT
#>       required: no
#>     - type:
#>       - 'null'
#>       - string
#>       label: Set exons feature
#>       description: Feature type in GTF file to be used as exons for building transcripts.
#>       streamable: no
#>       id: '#sjdbGTFfeatureExon'
#>       sbg:category: Splice junctions database
#>       sbg:toolDefaultValue: exon
#>       required: no
#>     - type:
#>       - 'null'
#>       - string
#>       label: Chromosome names
#>       description: Prefix for chromosome names in a GTF file (e.g. 'chr' for using
#>         ENSMEBL annotations with UCSC geneomes).
#>       streamable: no
#>       id: '#sjdbGTFchrPrefix'
#>       sbg:category: Splice junctions database
#>       sbg:toolDefaultValue: '-'
#>       required: no
#>     - type:
#>       - 'null'
#>       - float
#>       label: Search start point normalized
#>       description: seedSearchStartLmax normalized to read length (sum of mates' lengths
#>         for paired-end reads).
#>       streamable: no
#>       id: '#seedSearchStartLmaxOverLread'
#>       inputBinding:
#>         position: 0
#>         prefix: --seedSearchStartLmaxOverLread
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: '1.0'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Search start point
#>       description: Defines the search start point through the read - the read is split
#>         into pieces no longer than this value (int>0).
#>       streamable: no
#>       id: '#seedSearchStartLmax'
#>       inputBinding:
#>         position: 0
#>         prefix: --seedSearchStartLmax
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: '50'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Max seed length
#>       description: Defines the maximum length of the seeds, if =0 max seed length
#>         is infinite (int>=0).
#>       streamable: no
#>       id: '#seedSearchLmax'
#>       inputBinding:
#>         position: 0
#>         prefix: --seedSearchLmax
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: '0'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Max seeds per window
#>       description: Max number of seeds per window (int>=0).
#>       streamable: no
#>       id: '#seedPerWindowNmax'
#>       inputBinding:
#>         position: 0
#>         prefix: --seedPerWindowNmax
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: '50'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Max seeds per read
#>       description: Max number of seeds per read (int>=0).
#>       streamable: no
#>       id: '#seedPerReadNmax'
#>       inputBinding:
#>         position: 0
#>         prefix: --seedPerReadNmax
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: '1000'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Max one-seed loci per window
#>       description: Max number of one seed loci per window (int>=0).
#>       streamable: no
#>       id: '#seedNoneLociPerWindow'
#>       inputBinding:
#>         position: 0
#>         prefix: --seedNoneLociPerWindow
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: '10'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Filter pieces for stitching
#>       description: Only pieces that map fewer than this value are utilized in the
#>         stitching procedure (int>=0).
#>       streamable: no
#>       id: '#seedMultimapNmax'
#>       inputBinding:
#>         position: 0
#>         prefix: --seedMultimapNmax
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: '10000'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Max score reduction
#>       description: Maximum score reduction while searching for SJ boundaries in the
#>         stitching step.
#>       streamable: no
#>       id: '#scoreStitchSJshift'
#>       inputBinding:
#>         position: 0
#>         prefix: --scoreStitchSJshift
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Scoring
#>       sbg:toolDefaultValue: '1'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Insertion Open Penalty
#>       description: Insertion open penalty.
#>       streamable: no
#>       id: '#scoreInsOpen'
#>       inputBinding:
#>         position: 0
#>         prefix: --scoreInsOpen
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Scoring
#>       sbg:toolDefaultValue: '-2'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Insertion extension penalty
#>       description: Insertion extension penalty per base (in addition to --scoreInsOpen).
#>       streamable: no
#>       id: '#scoreInsBase'
#>       inputBinding:
#>         position: 0
#>         prefix: --scoreInsBase
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Scoring
#>       sbg:toolDefaultValue: '-2'
#>       required: no
#>     - type:
#>       - 'null'
#>       - float
#>       label: Log scaled score
#>       description: 'Extra score logarithmically scaled with genomic length of the
#>         alignment: <int>*log2(genomicLength).'
#>       streamable: no
#>       id: '#scoreGenomicLengthLog2scale'
#>       inputBinding:
#>         position: 0
#>         prefix: --scoreGenomicLengthLog2scale
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Scoring
#>       sbg:toolDefaultValue: '-0.25'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Non-canonical gap open
#>       description: Non-canonical gap open penalty (in addition to --scoreGap).
#>       streamable: no
#>       id: '#scoreGapNoncan'
#>       inputBinding:
#>         position: 0
#>         prefix: --scoreGapNoncan
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Scoring
#>       sbg:toolDefaultValue: '-8'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: GC/AG and CT/GC gap open
#>       description: GC/AG and CT/GC gap open penalty (in addition to --scoreGap).
#>       streamable: no
#>       id: '#scoreGapGCAG'
#>       inputBinding:
#>         position: 0
#>         prefix: --scoreGapGCAG
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Scoring
#>       sbg:toolDefaultValue: '-4'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: AT/AC and GT/AT gap open
#>       description: AT/AC and GT/AT gap open penalty (in addition to --scoreGap).
#>       streamable: no
#>       id: '#scoreGapATAC'
#>       inputBinding:
#>         position: 0
#>         prefix: --scoreGapATAC
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Scoring
#>       sbg:toolDefaultValue: '-8'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Gap open penalty
#>       description: Gap open penalty.
#>       streamable: no
#>       id: '#scoreGap'
#>       inputBinding:
#>         position: 0
#>         prefix: --scoreGap
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Scoring
#>       sbg:toolDefaultValue: '0'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Deletion open penalty
#>       description: Deletion open penalty.
#>       streamable: no
#>       id: '#scoreDelOpen'
#>       inputBinding:
#>         position: 0
#>         prefix: --scoreDelOpen
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Scoring
#>       sbg:toolDefaultValue: '-2'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Deletion extension penalty
#>       description: Deletion extension penalty per base (in addition to --scoreDelOpen).
#>       streamable: no
#>       id: '#scoreDelBase'
#>       inputBinding:
#>         position: 0
#>         prefix: --scoreDelBase
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Scoring
#>       sbg:toolDefaultValue: '-2'
#>       required: no
#>     - type:
#>       - 'null'
#>       - string
#>       label: Sequencing center
#>       description: Specify the sequencing center for RG line.
#>       streamable: no
#>       id: '#rg_seq_center'
#>       sbg:category: Read group
#>       sbg:toolDefaultValue: Inferred from metadata
#>       required: no
#>     - type:
#>       - 'null'
#>       - string
#>       label: Sample ID
#>       description: Specify the sample ID for RG line.
#>       streamable: no
#>       id: '#rg_sample_id'
#>       sbg:category: Read group
#>       sbg:toolDefaultValue: Inferred from metadata
#>       required: no
#>     - type:
#>       - 'null'
#>       - string
#>       label: Platform unit ID
#>       description: Specify the platform unit ID for RG line.
#>       streamable: no
#>       id: '#rg_platform_unit_id'
#>       sbg:category: Read group
#>       sbg:toolDefaultValue: Inferred from metadata
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: rg_platform
#>         symbols:
#>         - LS 454
#>         - Helicos
#>         - Illumina
#>         - ABI SOLiD
#>         - Ion Torrent PGM
#>         - PacBio
#>         type: enum
#>       label: Platform
#>       description: Specify the version of the technology that was used for sequencing
#>         or assaying.
#>       streamable: no
#>       id: '#rg_platform'
#>       sbg:category: Read group
#>       sbg:toolDefaultValue: Inferred from metadata
#>       required: no
#>     - type:
#>       - 'null'
#>       - string
#>       label: Median fragment length
#>       description: Specify the median fragment length for RG line.
#>       streamable: no
#>       id: '#rg_mfl'
#>       sbg:category: Read group
#>       sbg:toolDefaultValue: Inferred from metadata
#>       required: no
#>     - type:
#>       - 'null'
#>       - string
#>       label: Library ID
#>       description: Specify the library ID for RG line.
#>       streamable: no
#>       id: '#rg_library_id'
#>       sbg:category: Read group
#>       sbg:toolDefaultValue: Inferred from metadata
#>       required: no
#>     - type:
#>       - items: File
#>         type: array
#>       label: Read sequence
#>       description: Read sequence.
#>       streamable: no
#>       id: '#reads'
#>       inputBinding:
#>         position: 10
#>         separate: yes
#>         itemSeparator: ' '
#>         valueFrom:
#>           engine: '#cwl-js-engine'
#>           script: "{\t\n  var list = [].concat($job.inputs.reads)\n  \n  var resp
#>             = []\n  \n  if (list.length == 1){\n    resp.push(list[0].path)\n    \n
#>             \ }else if (list.length == 2){    \n    \n    left = \"\"\n    right =
#>             \"\"\n      \n    for (index = 0; index < list.length; ++index) {\n      \n
#>             \     if (list[index].metadata != null){\n        if (list[index].metadata.paired_end
#>             == 1){\n          left = list[index].path\n        }else if (list[index].metadata.paired_end
#>             == 2){\n          right = list[index].path\n        }\n      }\n    }\n
#>             \   \n    if (left != \"\" && right != \"\"){      \n      resp.push(left)\n
#>             \     resp.push(right)\n    }\n  }\n  else if (list.length > 2){\n    left
#>             = []\n    right = []\n      \n    for (index = 0; index < list.length;
#>             ++index) {\n      \n      if (list[index].metadata != null){\n        if
#>             (list[index].metadata.paired_end == 1){\n          left.push(list[index].path)\n
#>             \       }else if (list[index].metadata.paired_end == 2){\n          right.push(list[index].path)\n
#>             \       }\n      }\n    }\n    left_join = left.join()\n    right_join
#>             = right.join()\n    if (left != [] && right != []){      \n      resp.push(left_join)\n
#>             \     resp.push(right_join)\n    }\t\n  }\n  \n  if(resp.length > 0){
#>             \   \n    return \"--readFilesIn \".concat(resp.join(\" \"))\n  }\n}"
#>           class: Expression
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Basic
#>       sbg:fileTypes: FASTA, FASTQ, FA, FQ, FASTQ.GZ, FQ.GZ, FASTQ.BZ2, FQ.BZ2
#>       sbg:x: 200.0
#>       sbg:y: 200.0
#>       sbg:includeInPorts: yes
#>       required: yes
#>     - type:
#>       - 'null'
#>       - name: readMatesLengthsIn
#>         symbols:
#>         - NotEqual
#>         - Equal
#>         type: enum
#>       label: Reads lengths
#>       description: Equal/Not equal - lengths of names, sequences, qualities for both
#>         mates are the same/not the same. "Not equal" is safe in all situations.
#>       streamable: no
#>       id: '#readMatesLengthsIn'
#>       inputBinding:
#>         position: 0
#>         prefix: --readMatesLengthsIn
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Read parameters
#>       sbg:toolDefaultValue: NotEqual
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Reads to map
#>       description: Number of reads to map from the beginning of the file.
#>       streamable: no
#>       id: '#readMapNumber'
#>       inputBinding:
#>         position: 0
#>         prefix: --readMapNumber
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Read parameters
#>       sbg:toolDefaultValue: '-1'
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: quantTranscriptomeBan
#>         symbols:
#>         - IndelSoftclipSingleend
#>         - Singleend
#>         type: enum
#>       label: Prohibit alignment type
#>       description: 'Prohibit various alignment type. IndelSoftclipSingleend: prohibit
#>         indels, soft clipping and single-end alignments - compatible with RSEM; Singleend:
#>         prohibit single-end alignments.'
#>       streamable: no
#>       id: '#quantTranscriptomeBan'
#>       inputBinding:
#>         position: 0
#>         prefix: --quantTranscriptomeBan
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Quantification of Annotations
#>       sbg:toolDefaultValue: IndelSoftclipSingleend
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: quantMode
#>         symbols:
#>         - TranscriptomeSAM
#>         - GeneCounts
#>         type: enum
#>       label: Quantification mode
#>       description: Types of quantification requested. 'TranscriptomeSAM' option outputs
#>         SAM/BAM alignments to transcriptome into a separate file. With 'GeneCounts'
#>         option, STAR will count number of reads per gene while mapping.
#>       streamable: no
#>       id: '#quantMode'
#>       sbg:category: Quantification of Annotations
#>       sbg:toolDefaultValue: '-'
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: outSortingType
#>         symbols:
#>         - Unsorted
#>         - SortedByCoordinate
#>         - Unsorted SortedByCoordinate
#>         type: enum
#>       label: Output sorting type
#>       description: Type of output sorting.
#>       streamable: no
#>       id: '#outSortingType'
#>       sbg:category: Output
#>       sbg:toolDefaultValue: SortedByCoordinate
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: outSJfilterReads
#>         symbols:
#>         - All
#>         - Unique
#>         type: enum
#>       label: Collapsed junctions reads
#>       description: 'Which reads to consider for collapsed splice junctions output.
#>         All: all reads, unique- and multi-mappers; Unique: uniquely mapping reads
#>         only.'
#>       streamable: no
#>       id: '#outSJfilterReads'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSJfilterReads
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: 'Output filtering: splice junctions'
#>       sbg:toolDefaultValue: All
#>       required: no
#>     - type:
#>       - 'null'
#>       - items: int
#>         type: array
#>       label: Min overhang SJ
#>       description: Minimum overhang length for splice junctions on both sides for
#>         each of the motifs. To set no output for desired motif, assign -1 to the corresponding
#>         field. Does not apply to annotated junctions.
#>       streamable: no
#>       id: '#outSJfilterOverhangMin'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSJfilterOverhangMin
#>         separate: yes
#>         itemSeparator: ' '
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: 'Output filtering: splice junctions'
#>       sbg:toolDefaultValue: 30 12 12 12
#>       required: no
#>     - type:
#>       - 'null'
#>       - items: int
#>         type: array
#>       label: Max gap allowed
#>       description: 'Maximum gap allowed for junctions supported by 1,2,3...N reads
#>         (int >= 0) i.e. by default junctions supported by 1 read can have gaps <=50000b,
#>         by 2 reads: <=100000b, by 3 reads: <=200000. By 4 or more reads: any gap <=alignIntronMax.
#>         Does not apply to annotated junctions.'
#>       streamable: no
#>       id: '#outSJfilterIntronMaxVsReadN'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSJfilterIntronMaxVsReadN
#>         separate: yes
#>         itemSeparator: ' '
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: 'Output filtering: splice junctions'
#>       sbg:toolDefaultValue: 50000 100000 200000
#>       required: no
#>     - type:
#>       - 'null'
#>       - items: int
#>         type: array
#>       label: Min distance to other donor/acceptor
#>       description: Minimum allowed distance to other junctions' donor/acceptor for
#>         each of the motifs (int >= 0). Does not apply to annotated junctions.
#>       streamable: no
#>       id: '#outSJfilterDistToOtherSJmin'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSJfilterDistToOtherSJmin
#>         separate: yes
#>         itemSeparator: ' '
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: 'Output filtering: splice junctions'
#>       sbg:toolDefaultValue: 10 0 5 10
#>       required: no
#>     - type:
#>       - 'null'
#>       - items: int
#>         type: array
#>       label: Min unique count
#>       description: Minimum uniquely mapping read count per junction for each of the
#>         motifs. To set no output for desired motif, assign -1 to the corresponding
#>         field. Junctions are output if one of --outSJfilterCountUniqueMin OR --outSJfilterCountTotalMin
#>         conditions are satisfied. Does not apply to annotated junctions.
#>       streamable: no
#>       id: '#outSJfilterCountUniqueMin'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSJfilterCountUniqueMin
#>         separate: yes
#>         itemSeparator: ' '
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: 'Output filtering: splice junctions'
#>       sbg:toolDefaultValue: 3 1 1 1
#>       required: no
#>     - type:
#>       - 'null'
#>       - items: int
#>         type: array
#>       label: Min total count
#>       description: Minimum total (multi-mapping+unique) read count per junction for
#>         each of the motifs. To set no output for desired motif, assign -1 to the corresponding
#>         field. Junctions are output if one of --outSJfilterCountUniqueMin OR --outSJfilterCountTotalMin
#>         conditions are satisfied. Does not apply to annotated junctions.
#>       streamable: no
#>       id: '#outSJfilterCountTotalMin'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSJfilterCountTotalMin
#>         separate: yes
#>         itemSeparator: ' '
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: 'Output filtering: splice junctions'
#>       sbg:toolDefaultValue: 3 1 1 1
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: outSAMunmapped
#>         symbols:
#>         - None
#>         - Within
#>         type: enum
#>       label: Write unmapped in SAM
#>       description: 'Output of unmapped reads in the SAM format. None: no output Within:
#>         output unmapped reads within the main SAM file (i.e. Aligned.out.sam).'
#>       streamable: no
#>       id: '#outSAMunmapped'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSAMunmapped
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output
#>       sbg:toolDefaultValue: None
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: outSAMtype
#>         symbols:
#>         - SAM
#>         - BAM
#>         type: enum
#>       label: Output format
#>       description: Format of output alignments.
#>       streamable: no
#>       id: '#outSAMtype'
#>       inputBinding:
#>         position: 0
#>         separate: yes
#>         valueFrom:
#>           engine: '#cwl-js-engine'
#>           script: |-
#>             {
#>               SAM_type = $job.inputs.outSAMtype
#>               SORT_type = $job.inputs.outSortingType
#>               if (SAM_type && SORT_type) {
#>                 return "--outSAMtype ".concat(SAM_type, " ", SORT_type)
#>               }
#>             }
#>           class: Expression
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output
#>       sbg:toolDefaultValue: SAM
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: outSAMstrandField
#>         symbols:
#>         - None
#>         - intronMotif
#>         type: enum
#>       label: Strand field flag
#>       description: 'Cufflinks-like strand field flag. None: not used; intronMotif:
#>         strand derived from the intron motif. Reads with inconsistent and/or non-canonical
#>         introns are filtered out.'
#>       streamable: no
#>       id: '#outSAMstrandField'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSAMstrandField
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output
#>       sbg:toolDefaultValue: None
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: outSAMreadID
#>         symbols:
#>         - Standard
#>         - Number
#>         type: enum
#>       label: Read ID
#>       description: 'Read ID record type. Standard: first word (until space) from the
#>         FASTx read ID line, removing /1,/2 from the end; Number: read number (index)
#>         in the FASTx file.'
#>       streamable: no
#>       id: '#outSAMreadID'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSAMreadID
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output
#>       sbg:toolDefaultValue: Standard
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: outSAMprimaryFlag
#>         symbols:
#>         - OneBestScore
#>         - AllBestScore
#>         type: enum
#>       label: Primary alignments
#>       description: 'Which alignments are considered primary - all others will be marked
#>         with 0x100 bit in the FLAG. OneBestScore: only one alignment with the best
#>         score is primary; AllBestScore: all alignments with the best score are primary.'
#>       streamable: no
#>       id: '#outSAMprimaryFlag'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSAMprimaryFlag
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output
#>       sbg:toolDefaultValue: OneBestScore
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: outSAMorder
#>         symbols:
#>         - Paired
#>         - PairedKeepInputOrder
#>         type: enum
#>       label: Sorting in SAM
#>       description: 'Type of sorting for the SAM output. Paired: one mate after the
#>         other for all paired alignments; PairedKeepInputOrder: one mate after the
#>         other for all paired alignments, the order is kept the same as in the input
#>         FASTQ files.'
#>       streamable: no
#>       id: '#outSAMorder'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSAMorder
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output
#>       sbg:toolDefaultValue: Paired
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: outSAMmode
#>         symbols:
#>         - Full
#>         - NoQS
#>         type: enum
#>       label: SAM mode
#>       description: 'Mode of SAM output. Full: full SAM output; NoQS: full SAM but
#>         without quality scores.'
#>       streamable: no
#>       id: '#outSAMmode'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSAMmode
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output
#>       sbg:toolDefaultValue: Full
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: MAPQ value
#>       description: MAPQ value for unique mappers (0 to 255).
#>       streamable: no
#>       id: '#outSAMmapqUnique'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSAMmapqUnique
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output
#>       sbg:toolDefaultValue: '255'
#>       required: no
#>     - type:
#>       - 'null'
#>       - string
#>       label: SAM header @PG
#>       description: Extra @PG (software) line of the SAM header (in addition to STAR).
#>       streamable: no
#>       id: '#outSAMheaderPG'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSAMheaderPG
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output
#>       sbg:toolDefaultValue: '-'
#>       required: no
#>     - type:
#>       - 'null'
#>       - string
#>       label: SAM header @HD
#>       description: '@HD (header) line of the SAM header.'
#>       streamable: no
#>       id: '#outSAMheaderHD'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSAMheaderHD
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output
#>       sbg:toolDefaultValue: '-'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: OR SAM flag
#>       description: Set specific bits of the SAM FLAG.
#>       streamable: no
#>       id: '#outSAMflagOR'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSAMflagOR
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output
#>       sbg:toolDefaultValue: '0'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: AND SAM flag
#>       description: Set specific bits of the SAM FLAG.
#>       streamable: no
#>       id: '#outSAMflagAND'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSAMflagAND
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output
#>       sbg:toolDefaultValue: '65535'
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: outSAMattributes
#>         symbols:
#>         - Standard
#>         - NH
#>         - All
#>         - None
#>         type: enum
#>       label: SAM attributes
#>       description: 'Desired SAM attributes, in the order desired for the output SAM.
#>         NH: any combination in any order; Standard: NH HI AS nM; All: NH HI AS nM
#>         NM MD jM jI; None: no attributes.'
#>       streamable: no
#>       id: '#outSAMattributes'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSAMattributes
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output
#>       sbg:toolDefaultValue: Standard
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: outReadsUnmapped
#>         symbols:
#>         - None
#>         - Fastx
#>         type: enum
#>       label: Output unmapped reads
#>       description: 'Output of unmapped reads (besides SAM). None: no output; Fastx:
#>         output in separate fasta/fastq files, Unmapped.out.mate1/2.'
#>       streamable: no
#>       id: '#outReadsUnmapped'
#>       inputBinding:
#>         position: 0
#>         prefix: --outReadsUnmapped
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output
#>       sbg:toolDefaultValue: None
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Quality conversion
#>       description: Add this number to the quality score (e.g. to convert from Illumina
#>         to Sanger, use -31).
#>       streamable: no
#>       id: '#outQSconversionAdd'
#>       inputBinding:
#>         position: 0
#>         prefix: --outQSconversionAdd
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output
#>       sbg:toolDefaultValue: '0'
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: outFilterType
#>         symbols:
#>         - Normal
#>         - BySJout
#>         type: enum
#>       label: Filtering type
#>       description: 'Type of filtering. Normal: standard filtering using only current
#>         alignment; BySJout: keep only those reads that contain junctions that passed
#>         filtering into SJ.out.tab.'
#>       streamable: no
#>       id: '#outFilterType'
#>       inputBinding:
#>         position: 0
#>         prefix: --outFilterType
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output filtering
#>       sbg:toolDefaultValue: Normal
#>       required: no
#>     - type:
#>       - 'null'
#>       - float
#>       label: Min score normalized
#>       description: '''Minimum score'' normalized to read length (sum of mates'' lengths
#>         for paired-end reads).'
#>       streamable: no
#>       id: '#outFilterScoreMinOverLread'
#>       inputBinding:
#>         position: 0
#>         prefix: --outFilterScoreMinOverLread
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output filtering
#>       sbg:toolDefaultValue: '0.66'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Min score
#>       description: Alignment will be output only if its score is higher than this
#>         value.
#>       streamable: no
#>       id: '#outFilterScoreMin'
#>       inputBinding:
#>         position: 0
#>         prefix: --outFilterScoreMin
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output filtering
#>       sbg:toolDefaultValue: '0'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Multimapping score range
#>       description: The score range below the maximum score for multimapping alignments.
#>       streamable: no
#>       id: '#outFilterMultimapScoreRange'
#>       inputBinding:
#>         position: 0
#>         prefix: --outFilterMultimapScoreRange
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output filtering
#>       sbg:toolDefaultValue: '1'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Max number of mappings
#>       description: Read alignments will be output only if the read maps fewer than
#>         this value, otherwise no alignments will be output.
#>       streamable: no
#>       id: '#outFilterMultimapNmax'
#>       inputBinding:
#>         position: 0
#>         prefix: --outFilterMultimapNmax
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output filtering
#>       sbg:toolDefaultValue: '10'
#>       required: no
#>     - type:
#>       - 'null'
#>       - float
#>       label: Mismatches to *read* length
#>       description: Alignment will be output only if its ratio of mismatches to *read*
#>         length is less than this value.
#>       streamable: no
#>       id: '#outFilterMismatchNoverReadLmax'
#>       inputBinding:
#>         position: 0
#>         prefix: --outFilterMismatchNoverReadLmax
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output filtering
#>       sbg:toolDefaultValue: '1'
#>       required: no
#>     - type:
#>       - 'null'
#>       - float
#>       label: Mismatches to *mapped* length
#>       description: Alignment will be output only if its ratio of mismatches to *mapped*
#>         length is less than this value.
#>       streamable: no
#>       id: '#outFilterMismatchNoverLmax'
#>       inputBinding:
#>         position: 0
#>         prefix: --outFilterMismatchNoverLmax
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output filtering
#>       sbg:toolDefaultValue: '0.3'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Max number of mismatches
#>       description: Alignment will be output only if it has fewer mismatches than this
#>         value.
#>       streamable: no
#>       id: '#outFilterMismatchNmax'
#>       inputBinding:
#>         position: 0
#>         prefix: --outFilterMismatchNmax
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output filtering
#>       sbg:toolDefaultValue: '10'
#>       required: no
#>     - type:
#>       - 'null'
#>       - float
#>       label: Min matched bases normalized
#>       description: '''Minimum matched bases'' normalized to read length (sum of mates
#>         lengths for paired-end reads).'
#>       streamable: no
#>       id: '#outFilterMatchNminOverLread'
#>       inputBinding:
#>         position: 0
#>         prefix: --outFilterMatchNminOverLread
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output filtering
#>       sbg:toolDefaultValue: '0.66'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Min matched bases
#>       description: Alignment will be output only if the number of matched bases is
#>         higher than this value.
#>       streamable: no
#>       id: '#outFilterMatchNmin'
#>       inputBinding:
#>         position: 0
#>         prefix: --outFilterMatchNmin
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output filtering
#>       sbg:toolDefaultValue: '0'
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: outFilterIntronMotifs
#>         symbols:
#>         - None
#>         - RemoveNoncanonical
#>         - RemoveNoncanonicalUnannotated
#>         type: enum
#>       label: Motifs filtering
#>       description: 'Filter alignment using their motifs. None: no filtering; RemoveNoncanonical:
#>         filter out alignments that contain non-canonical junctions; RemoveNoncanonicalUnannotated:
#>         filter out alignments that contain non-canonical unannotated junctions when
#>         using annotated splice junctions database. The annotated non-canonical junctions
#>         will be kept.'
#>       streamable: no
#>       id: '#outFilterIntronMotifs'
#>       inputBinding:
#>         position: 0
#>         prefix: --outFilterIntronMotifs
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output filtering
#>       sbg:toolDefaultValue: None
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Max insert junctions
#>       description: Maximum number of junction to be inserted to the genome on the
#>         fly at the mapping stage, including those from annotations and those detected
#>         in the 1st step of the 2-pass run.
#>       streamable: no
#>       id: '#limitSjdbInsertNsj'
#>       inputBinding:
#>         position: 0
#>         prefix: --limitSjdbInsertNsj
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Limits
#>       sbg:toolDefaultValue: '1000000'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Junctions max number
#>       description: Max number of junctions for one read (including all multi-mappers).
#>       streamable: no
#>       id: '#limitOutSJoneRead'
#>       inputBinding:
#>         position: 0
#>         prefix: --limitOutSJoneRead
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Limits
#>       sbg:toolDefaultValue: '1000'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Collapsed junctions max number
#>       description: Max number of collapsed junctions.
#>       streamable: no
#>       id: '#limitOutSJcollapsed'
#>       inputBinding:
#>         position: 0
#>         prefix: --limitOutSJcollapsed
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Limits
#>       sbg:toolDefaultValue: '1000000'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Limit BAM sorting memory
#>       description: Maximum available RAM for sorting BAM. If set to 0, it will be
#>         set to the genome index size.
#>       streamable: no
#>       id: '#limitBAMsortRAM'
#>       inputBinding:
#>         position: 0
#>         prefix: --limitBAMsortRAM
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Limits
#>       sbg:toolDefaultValue: '0'
#>       required: no
#>     - type:
#>       - 'null'
#>       - string
#>       label: Genome dir name
#>       description: Name of the directory which contains genome files (when genome.tar
#>         is uncompressed).
#>       streamable: no
#>       id: '#genomeDirName'
#>       inputBinding:
#>         position: 0
#>         prefix: --genomeDir
#>         separate: yes
#>         valueFrom:
#>           engine: '#cwl-js-engine'
#>           script: $job.inputs.genomeDirName || "genomeDir"
#>           class: Expression
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Basic
#>       sbg:toolDefaultValue: genomeDir
#>       required: no
#>     - type:
#>       - File
#>       label: Genome files
#>       description: Genome files created using STAR Genome Generate.
#>       streamable: no
#>       id: '#genome'
#>       sbg:category: Basic
#>       sbg:fileTypes: TAR
#>       required: yes
#>     - type:
#>       - 'null'
#>       - items: int
#>         type: array
#>       label: Clip 5p bases
#>       description: Number of bases to clip from 5p of each mate. In case only one
#>         value is given, it will be assumed the same for both mates.
#>       streamable: no
#>       id: '#clip5pNbases'
#>       inputBinding:
#>         position: 0
#>         prefix: --clip5pNbases
#>         separate: yes
#>         itemSeparator: ' '
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Read parameters
#>       sbg:toolDefaultValue: '0'
#>       required: no
#>     - type:
#>       - 'null'
#>       - items: int
#>         type: array
#>       label: Clip 3p bases
#>       description: Number of bases to clip from 3p of each mate. In case only one
#>         value is given, it will be assumed the same for both mates.
#>       streamable: no
#>       id: '#clip3pNbases'
#>       inputBinding:
#>         position: 0
#>         prefix: --clip3pNbases
#>         separate: yes
#>         itemSeparator: ' '
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Read parameters
#>       sbg:toolDefaultValue: '0'
#>       required: no
#>     - type:
#>       - 'null'
#>       - items: int
#>         type: array
#>       label: Clip 3p after adapter seq.
#>       description: Number of bases to clip from 3p of each mate after the adapter
#>         clipping. In case only one value is given, it will be assumed the same for
#>         both mates.
#>       streamable: no
#>       id: '#clip3pAfterAdapterNbases'
#>       inputBinding:
#>         position: 0
#>         prefix: --clip3pAfterAdapterNbases
#>         separate: yes
#>         itemSeparator: ' '
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Read parameters
#>       sbg:toolDefaultValue: '0'
#>       required: no
#>     - type:
#>       - 'null'
#>       - items: string
#>         type: array
#>       label: Clip 3p adapter sequence
#>       description: Adapter sequence to clip from 3p of each mate. In case only one
#>         value is given, it will be assumed the same for both mates.
#>       streamable: no
#>       id: '#clip3pAdapterSeq'
#>       inputBinding:
#>         position: 0
#>         prefix: --clip3pAdapterSeq
#>         separate: yes
#>         itemSeparator: ' '
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Read parameters
#>       sbg:toolDefaultValue: '-'
#>       required: no
#>     - type:
#>       - 'null'
#>       - items: float
#>         type: array
#>       label: Max mismatches proportions
#>       description: Max proportion of mismatches for 3p adapter clipping for each mate.
#>         In case only one value is given, it will be assumed the same for both mates.
#>       streamable: no
#>       id: '#clip3pAdapterMMp'
#>       inputBinding:
#>         position: 0
#>         prefix: --clip3pAdapterMMp
#>         separate: yes
#>         itemSeparator: ' '
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Read parameters
#>       sbg:toolDefaultValue: '0.1'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Min segment length
#>       description: Minimum length of chimeric segment length, if =0, no chimeric output
#>         (int>=0).
#>       streamable: no
#>       id: '#chimSegmentMin'
#>       inputBinding:
#>         position: 0
#>         prefix: --chimSegmentMin
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Chimeric Alignments
#>       sbg:toolDefaultValue: '15'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Min separation score
#>       description: Minimum difference (separation) between the best chimeric score
#>         and the next one (int>=0).
#>       streamable: no
#>       id: '#chimScoreSeparation'
#>       inputBinding:
#>         position: 0
#>         prefix: --chimScoreSeparation
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Chimeric Alignments
#>       sbg:includeInPorts: no
#>       sbg:toolDefaultValue: '10'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Min total score
#>       description: Minimum total (summed) score of the chimeric segments (int>=0).
#>       streamable: no
#>       id: '#chimScoreMin'
#>       inputBinding:
#>         position: 0
#>         prefix: --chimScoreMin
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Chimeric Alignments
#>       sbg:toolDefaultValue: '0'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Non-GT/AG penalty
#>       description: Penalty for a non-GT/AG chimeric junction.
#>       streamable: no
#>       id: '#chimScoreJunctionNonGTAG'
#>       inputBinding:
#>         position: 0
#>         prefix: --chimScoreJunctionNonGTAG
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Chimeric Alignments
#>       sbg:toolDefaultValue: '-1'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Max drop score
#>       description: Max drop (difference) of chimeric score (the sum of scores of all
#>         chimeric segements) from the read length (int>=0).
#>       streamable: no
#>       id: '#chimScoreDropMax'
#>       inputBinding:
#>         position: 0
#>         prefix: --chimScoreDropMax
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Chimeric Alignments
#>       sbg:toolDefaultValue: '20'
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: chimOutType
#>         symbols:
#>         - SeparateSAMold
#>         - Within
#>         type: enum
#>       label: Chimeric output type
#>       description: 'Type of chimeric output. SeparateSAMold: output old SAM into separate
#>         Chimeric.out.sam file; Within: output into main aligned SAM/BAM files.'
#>       streamable: no
#>       id: '#chimOutType'
#>       sbg:category: Chimeric Alignments
#>       sbg:toolDefaultValue: SeparateSAMold
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Min junction overhang
#>       description: Minimum overhang for a chimeric junction (int>=0).
#>       streamable: no
#>       id: '#chimJunctionOverhangMin'
#>       inputBinding:
#>         position: 0
#>         prefix: --chimJunctionOverhangMin
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Chimeric Alignments
#>       sbg:toolDefaultValue: '20'
#>       required: no
#>     - type:
#>       - 'null'
#>       - float
#>       label: Max windows per read
#>       description: Max number of windows per read (int>0).
#>       streamable: no
#>       id: '#alignWindowsPerReadNmax'
#>       inputBinding:
#>         position: 0
#>         prefix: --alignWindowsPerReadNmax
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: '10000'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Max transcripts per window
#>       description: Max number of transcripts per window (int>0).
#>       streamable: no
#>       id: '#alignTranscriptsPerWindowNmax'
#>       inputBinding:
#>         position: 0
#>         prefix: --alignTranscriptsPerWindowNmax
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: '100'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Max transcripts per read
#>       description: Max number of different alignments per read to consider (int>0).
#>       streamable: no
#>       id: '#alignTranscriptsPerReadNmax'
#>       inputBinding:
#>         position: 0
#>         prefix: --alignTranscriptsPerReadNmax
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: '10000'
#>       required: no
#>     - type:
#>       - 'null'
#>       - float
#>       label: Min mapped length normalized
#>       description: alignSplicedMateMapLmin normalized to mate length (float>0).
#>       streamable: no
#>       id: '#alignSplicedMateMapLminOverLmate'
#>       inputBinding:
#>         position: 0
#>         prefix: --alignSplicedMateMapLminOverLmate
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: '0.66'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Min mapped length
#>       description: Minimum mapped length for a read mate that is spliced (int>0).
#>       streamable: no
#>       id: '#alignSplicedMateMapLmin'
#>       inputBinding:
#>         position: 0
#>         prefix: --alignSplicedMateMapLmin
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: '0'
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: alignSoftClipAtReferenceEnds
#>         symbols:
#>         - 'Yes'
#>         - 'No'
#>         type: enum
#>       label: Soft clipping
#>       description: 'Option which allows soft clipping of alignments at the reference
#>         (chromosome) ends. Can be disabled for compatibility with Cufflinks/Cuffmerge.
#>         Yes: Enables soft clipping; No: Disables soft clipping.'
#>       streamable: no
#>       id: '#alignSoftClipAtReferenceEnds'
#>       inputBinding:
#>         position: 0
#>         prefix: --alignSoftClipAtReferenceEnds
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: 'Yes'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Min overhang
#>       description: Minimum overhang (i.e. block size) for spliced alignments (int>0).
#>       streamable: no
#>       id: '#alignSJoverhangMin'
#>       inputBinding:
#>         position: 0
#>         prefix: --alignSJoverhangMin
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: '5'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: 'Min overhang: annotated'
#>       description: Minimum overhang (i.e. block size) for annotated (sjdb) spliced
#>         alignments (int>0).
#>       streamable: no
#>       id: '#alignSJDBoverhangMin'
#>       inputBinding:
#>         position: 0
#>         prefix: --alignSJDBoverhangMin
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:includeInPorts: no
#>       sbg:toolDefaultValue: '3'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Max mates gap
#>       description: Maximum gap between two mates, if 0, max intron gap will be determined
#>         by (2^winBinNbits)*winAnchorDistNbins.
#>       streamable: no
#>       id: '#alignMatesGapMax'
#>       inputBinding:
#>         position: 0
#>         prefix: --alignMatesGapMax
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: '0'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Min intron size
#>       description: 'Minimum intron size: genomic gap is considered intron if its length
#>         >= alignIntronMin, otherwise it is considered Deletion (int>=0).'
#>       streamable: no
#>       id: '#alignIntronMin'
#>       inputBinding:
#>         position: 0
#>         prefix: --alignIntronMin
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: '21'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Max intron size
#>       description: Maximum intron size, if 0, max intron size will be determined by
#>         (2^winBinNbits)*winAnchorDistNbins.
#>       streamable: no
#>       id: '#alignIntronMax'
#>       inputBinding:
#>         position: 0
#>         prefix: --alignIntronMax
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: '0'
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: alignEndsType
#>         symbols:
#>         - Local
#>         - EndToEnd
#>         type: enum
#>       label: Alignment type
#>       description: 'Type of read ends alignment. Local: standard local alignment with
#>         soft-clipping allowed. EndToEnd: force end to end read alignment, do not soft-clip.'
#>       streamable: no
#>       id: '#alignEndsType'
#>       inputBinding:
#>         position: 0
#>         prefix: --alignEndsType
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: Local
#>       required: no
#>     outputs:
#>     - type:
#>       - 'null'
#>       - items: File
#>         type: array
#>       label: Unmapped reads
#>       description: Output of unmapped reads.
#>       streamable: no
#>       id: '#unmapped_reads'
#>       outputBinding:
#>         glob: '*Unmapped.out*'
#>       sbg:fileTypes: FASTQ
#>     - type:
#>       - 'null'
#>       - File
#>       label: Transcriptome alignments
#>       description: Alignments translated into transcript coordinates.
#>       streamable: no
#>       id: '#transcriptome_aligned_reads'
#>       outputBinding:
#>         glob: '*Transcriptome*'
#>       sbg:fileTypes: BAM
#>     - type:
#>       - 'null'
#>       - File
#>       label: Splice junctions
#>       description: High confidence collapsed splice junctions in tab-delimited format.
#>         Only junctions supported by uniquely mapping reads are reported.
#>       streamable: no
#>       id: '#splice_junctions'
#>       outputBinding:
#>         glob: '*SJ.out.tab'
#>       sbg:fileTypes: TAB
#>     - type:
#>       - 'null'
#>       - File
#>       label: Reads per gene
#>       description: File with number of reads per gene. A read is counted if it overlaps
#>         (1nt or more) one and only one gene.
#>       streamable: no
#>       id: '#reads_per_gene'
#>       outputBinding:
#>         glob: '*ReadsPerGene*'
#>       sbg:fileTypes: TAB
#>     - type:
#>       - 'null'
#>       - items: File
#>         type: array
#>       label: Log files
#>       description: Log files produced during alignment.
#>       streamable: no
#>       id: '#log_files'
#>       outputBinding:
#>         glob: '*Log*.out'
#>       sbg:fileTypes: OUT
#>     - type:
#>       - 'null'
#>       - File
#>       label: Intermediate genome files
#>       description: Archive with genome files produced when annotations are included
#>         on the fly (in the mapping step).
#>       streamable: no
#>       id: '#intermediate_genome'
#>       outputBinding:
#>         glob: '*_STARgenome.tar'
#>       sbg:fileTypes: TAR
#>     - type:
#>       - 'null'
#>       - File
#>       label: Chimeric junctions
#>       description: If chimSegmentMin in 'Chimeric Alignments' section is set to 0,
#>         'Chimeric Junctions' won't be output.
#>       streamable: no
#>       id: '#chimeric_junctions'
#>       outputBinding:
#>         glob: '*Chimeric.out.junction'
#>       sbg:fileTypes: JUNCTION
#>     - type:
#>       - 'null'
#>       - File
#>       label: Chimeric alignments
#>       description: Aligned Chimeric sequences SAM - if chimSegmentMin = 0, no Chimeric
#>         Alignment SAM and Chimeric Junctions outputs.
#>       streamable: no
#>       id: '#chimeric_alignments'
#>       outputBinding:
#>         glob: '*.Chimeric.out.sam'
#>       sbg:fileTypes: SAM
#>     - type:
#>       - 'null'
#>       - File
#>       label: Aligned SAM/BAM
#>       description: Aligned sequence in SAM/BAM format.
#>       streamable: no
#>       id: '#aligned_reads'
#>       outputBinding:
#>         glob:
#>           engine: '#cwl-js-engine'
#>           script: |-
#>             {
#>               if ($job.inputs.outSortingType == 'SortedByCoordinate') {
#>                 sort_name = '.sortedByCoord'
#>               }
#>               else {
#>                 sort_name = ''
#>               }
#>               if ($job.inputs.outSAMtype == 'BAM') {
#>                 sam_name = "*.Aligned".concat( sort_name, '.out.bam')
#>               }
#>               else {
#>                 sam_name = "*.Aligned.out.sam"
#>               }
#>               return sam_name
#>             }
#>           class: Expression
#>       sbg:fileTypes: SAM, BAM
#>     requirements:
#>     - class: ExpressionEngineRequirement
#>       id: '#cwl-js-engine'
#>       requirements:
#>       - class: DockerRequirement
#>         dockerPull: rabix/js-engine
#>     hints:
#>     - class: DockerRequirement
#>       dockerPull: images.sbgenomics.com/ana_d/star:2.4.2a
#>       dockerImageId: a4b0ad2c3cae
#>     - class: sbg:MemRequirement
#>       value: 60000
#>     - class: sbg:CPURequirement
#>       value: 15
#>     label: STAR
#>     description: STAR is an ultrafast universal RNA-seq aligner. It has very high
#>       mapping speed, accurate alignment of contiguous and spliced reads, detection
#>       of polyA-tails, non-canonical splices and chimeric (fusion) junctions. It works
#>       with reads starting from lengths ~15 bases up to ~300 bases. In case of having
#>       longer reads, use of STAR Long is recommended.
#>     class: CommandLineTool
#>     baseCommand:
#>     - tar
#>     - -xvf
#>     - class: Expression
#>       script: $job.inputs.genome.path
#>       engine: '#cwl-js-engine'
#>     - '&&'
#>     - /opt/STAR
#>     - --runThreadN
#>     - class: Expression
#>       script: |-
#>         {
#>           return $job.allocatedResources.cpu
#>         }
#>       engine: '#cwl-js-engine'
#>     arguments:
#>     - position: 0
#>       separate: yes
#>       valueFrom:
#>         engine: '#cwl-js-engine'
#>         script: |-
#>           {
#>             file = [].concat($job.inputs.reads)[0].path
#>             extension = /(?:\.([^.]+))?$/.exec(file)[1]
#>             if (extension == "gz") {
#>               return "--readFilesCommand zcat"
#>             } else if (extension == "bz2") {
#>               return "--readFilesCommand bzcat"
#>             }
#>           }
#>         class: Expression
#>     - position: 0
#>       separate: yes
#>       valueFrom:
#>         engine: '#cwl-js-engine'
#>         script: "{\t\n  var sjFormat = \"False\"\n  var gtfgffFormat = \"False\"\n
#>           \ var list = $job.inputs.sjdbGTFfile\n  var paths_list = []\n  var joined_paths
#>           = \"\"\n  \n  if (list) {\n    list.forEach(function(f){return paths_list.push(f.path)})\n
#>           \   joined_paths = paths_list.join(\" \")\n\n\n    paths_list.forEach(function(f){\n
#>           \     ext = f.replace(/^.*\\./, '')\n      if (ext == \"gff\" || ext ==
#>           \"gtf\") {\n        gtfgffFormat = \"True\"\n        return gtfgffFormat\n
#>           \     }\n      if (ext == \"txt\") {\n        sjFormat = \"True\"\n        return
#>           sjFormat\n      }\n    })\n\n    if ($job.inputs.sjdbGTFfile && $job.inputs.sjdbInsertSave
#>           != \"None\") {\n      if (sjFormat == \"True\") {\n        return \"--sjdbFileChrStartEnd
#>           \".concat(joined_paths)\n      }\n      else if (gtfgffFormat == \"True\")
#>           {\n        return \"--sjdbGTFfile \".concat(joined_paths)\n      }\n    }\n
#>           \ }\n}"
#>         class: Expression
#>     - position: 0
#>       separate: yes
#>       valueFrom:
#>         engine: '#cwl-js-engine'
#>         script: "{\n  a = b = c = d = e = f = g = []\n  if ($job.inputs.sjdbGTFchrPrefix)
#>           {\n    a = [\"--sjdbGTFchrPrefix\", $job.inputs.sjdbGTFchrPrefix]\n  }\n
#>           \ if ($job.inputs.sjdbGTFfeatureExon) {\n    b = [\"--sjdbGTFfeatureExon\",
#>           $job.inputs.sjdbGTFfeatureExon]\n  }\n  if ($job.inputs.sjdbGTFtagExonParentTranscript)
#>           {\n    c = [\"--sjdbGTFtagExonParentTranscript\", $job.inputs.sjdbGTFtagExonParentTranscript]\n
#>           \ }\n  if ($job.inputs.sjdbGTFtagExonParentGene) {\n    d = [\"--sjdbGTFtagExonParentGene\",
#>           $job.inputs.sjdbGTFtagExonParentGene]\n  }\n  if ($job.inputs.sjdbOverhang)
#>           {\n    e = [\"--sjdbOverhang\", $job.inputs.sjdbOverhang]\n  }\n  if ($job.inputs.sjdbScore)
#>           {\n    f = [\"--sjdbScore\", $job.inputs.sjdbScore]\n  }\n  if ($job.inputs.sjdbInsertSave)
#>           {\n    g = [\"--sjdbInsertSave\", $job.inputs.sjdbInsertSave]\n  }\n  \n
#>           \ \n  \n  if ($job.inputs.sjdbInsertSave != \"None\" && $job.inputs.sjdbGTFfile)
#>           {\n    new_list = a.concat(b, c, d, e, f, g)\n    return new_list.join(\"
#>           \")\n  }\n}"
#>         class: Expression
#>     - position: 0
#>       separate: yes
#>       valueFrom:
#>         engine: '#cwl-js-engine'
#>         script: |-
#>           {
#>             if ($job.inputs.twopassMode == "Basic") {
#>               return "--twopass1readsN ".concat($job.inputs.twopass1readsN)
#>             }
#>           }
#>         class: Expression
#>     - position: 0
#>       separate: yes
#>       valueFrom:
#>         engine: '#cwl-js-engine'
#>         script: |-
#>           {
#>             if ($job.inputs.chimOutType == "Within") {
#>               return "--chimOutType ".concat("Within", $job.inputs.outSAMtype)
#>             }
#>             else {
#>               return "--chimOutType SeparateSAMold"
#>             }
#>           }
#>         class: Expression
#>     - position: 0
#>       separate: yes
#>       valueFrom:
#>         engine: '#cwl-js-engine'
#>         script: "{\n  var param_list = []\n  \n  function add_param(key, value){\n
#>           \   if (value == \"\") {\n      return\n    }\n    else {\n      return
#>           param_list.push(key.concat(\":\", value))\n    }\n  }\n  \n  add_param('ID',
#>           \"1\")\n  if ($job.inputs.rg_seq_center) {\n    add_param('CN', $job.inputs.rg_seq_center)\n
#>           \ } else if ([].concat($job.inputs.reads)[0].metadata.seq_center) {\n    add_param('CN',
#>           [].concat($job.inputs.reads)[0].metadata.seq_center)\n  }\n  if ($job.inputs.rg_library_id)
#>           {\n    add_param('LB', $job.inputs.rg_library_id)\n  } else if ([].concat($job.inputs.reads)[0].metadata.library_id)
#>           {\n    add_param('LB', [].concat($job.inputs.reads)[0].metadata.library_id)\n
#>           \ }\n  if ($job.inputs.rg_mfl) {\n    add_param('PI', $job.inputs.rg_mfl)\n
#>           \ } else if ([].concat($job.inputs.reads)[0].metadata.median_fragment_length)
#>           {\n    add_param('PI', [].concat($job.inputs.reads)[0].metadata.median_fragment_length)\n
#>           \ }\n  if ($job.inputs.rg_platform) {\n    add_param('PL', $job.inputs.rg_platform.replace(/
#>           /g,\"_\"))\n  } else if ([].concat($job.inputs.reads)[0].metadata.platform)
#>           {\n    add_param('PL', [].concat($job.inputs.reads)[0].metadata.platform.replace(/
#>           /g,\"_\"))\n  }\n  if ($job.inputs.rg_platform_unit_id) {\n    add_param('PU',
#>           $job.inputs.rg_platform_unit_id)\n  } else if ([].concat($job.inputs.reads)[0].metadata.platform_unit_id)
#>           {\n    add_param('PU', [].concat($job.inputs.reads)[0].metadata.platform_unit_id)\n
#>           \ }\n  if ($job.inputs.rg_sample_id) {\n    add_param('SM', $job.inputs.rg_sample_id)\n
#>           \ } else if ([].concat($job.inputs.reads)[0].metadata.sample_id) {\n    add_param('SM',
#>           [].concat($job.inputs.reads)[0].metadata.sample_id)\n  }\n  return \"--outSAMattrRGline
#>           \".concat(param_list.join(\" \"))\n}"
#>         class: Expression
#>     - position: 0
#>       separate: yes
#>       valueFrom:
#>         engine: '#cwl-js-engine'
#>         script: |-
#>           {
#>             if ($job.inputs.sjdbGTFfile && $job.inputs.quantMode) {
#>               return "--quantMode ".concat($job.inputs.quantMode)
#>             }
#>           }
#>         class: Expression
#>     - position: 100
#>       separate: yes
#>       valueFrom:
#>         engine: '#cwl-js-engine'
#>         script: "{\n  function sharedStart(array){\n  var A= array.concat().sort(),
#>           \n      a1= A[0], a2= A[A.length-1], L= a1.length, i= 0;\n  while(i<L &&
#>           a1.charAt(i)=== a2.charAt(i)) i++;\n  return a1.substring(0, i);\n  }\n
#>           \ path_list = []\n  arr = [].concat($job.inputs.reads)\n  arr.forEach(function(f){return
#>           path_list.push(f.path.replace(/\\\\/g,'/').replace( /.*\\//, '' ))})\n  common_prefix
#>           = sharedStart(path_list)\n  intermediate = common_prefix.replace( /\\-$|\\_$|\\.$/,
#>           '' ).concat(\"._STARgenome\")\n  source = \"./\".concat(intermediate)\n
#>           \ destination = intermediate.concat(\".tar\")\n  if ($job.inputs.sjdbGTFfile
#>           && $job.inputs.sjdbInsertSave && $job.inputs.sjdbInsertSave != \"None\")
#>           {\n    return \"&& tar -vcf \".concat(destination, \" \", source)\n  }\n}"
#>         class: Expression
#>     - position: 0
#>       prefix: --outFileNamePrefix
#>       separate: yes
#>       valueFrom:
#>         engine: '#cwl-js-engine'
#>         script: "{\n  function sharedStart(array){\n  var A= array.concat().sort(),
#>           \n      a1= A[0], a2= A[A.length-1], L= a1.length, i= 0;\n  while(i<L &&
#>           a1.charAt(i)=== a2.charAt(i)) i++;\n  return a1.substring(0, i);\n  }\n
#>           \ path_list = []\n  arr = [].concat($job.inputs.reads)\n  arr.forEach(function(f){return
#>           path_list.push(f.path.replace(/\\\\/g,'/').replace( /.*\\//, '' ))})\n  common_prefix
#>           = sharedStart(path_list)\n  return \"./\".concat(common_prefix.replace(
#>           /\\-$|\\_$|\\.$/, '' ), \".\")\n}"
#>         class: Expression
#>     - position: 101
#>       separate: yes
#>       valueFrom:
#>         engine: '#cwl-js-engine'
#>         script: "{\n  function sharedStart(array){\n  var A= array.concat().sort(),
#>           \n      a1= A[0], a2= A[A.length-1], L= a1.length, i= 0;\n  while(i<L &&
#>           a1.charAt(i)=== a2.charAt(i)) i++;\n  return a1.substring(0, i);\n  }\n
#>           \ path_list = []\n  arr = [].concat($job.inputs.reads)\n  arr.forEach(function(f){return
#>           path_list.push(f.path.replace(/\\\\/g,'/').replace( /.*\\//, '' ))})\n  common_prefix
#>           = sharedStart(path_list)\n  mate1 = common_prefix.replace( /\\-$|\\_$|\\.$/,
#>           '' ).concat(\".Unmapped.out.mate1\")\n  mate2 = common_prefix.replace( /\\-$|\\_$|\\.$/,
#>           '' ).concat(\".Unmapped.out.mate2\")\n  mate1fq = mate1.concat(\".fastq\")\n
#>           \ mate2fq = mate2.concat(\".fastq\")\n  if ($job.inputs.outReadsUnmapped
#>           == \"Fastx\" && arr.length > 1) {\n    return \"&& mv \".concat(mate1, \"
#>           \", mate1fq, \" && mv \", mate2, \" \", mate2fq)\n  }\n  else if ($job.inputs.outReadsUnmapped
#>           == \"Fastx\" && arr.length == 1) {\n    return \"&& mv \".concat(mate1,
#>           \" \", mate1fq)\n  }\n}"
#>         class: Expression
#>     stdin: ''
#>     stdout: ''
#>     successCodes: []
#>     temporaryFailCodes: []
#>     x: 624.0
#>     'y': 323
#>   sbg:x: 700.0
#>   sbg:y: 200.0
#> sbg:canvas_zoom: 0.6
#> sbg:canvas_y: -16
#> sbg:canvas_x: -41
#> sbg:batchInput: '#sjdbGTFfile'
#> sbg:batchBy:
#>   type: criteria
#>   criteria:
#>   - metadata.sample_id
#>   - metadata.library_id
#> 
f1$set_batch("sjdbGTFfile", type = "ITEM")
#> sbg:validationErrors: []
#> sbg:sbgMaintained: no
#> sbg:latestRevision: 2
#> sbg:toolAuthor: Seven Bridges Genomics
#> sbg:createdOn: 1463601910
#> sbg:categories:
#> - Alignment
#> - RNA
#> sbg:contributors:
#> - tengfei
#> sbg:project: tengfei/quickstart
#> sbg:createdBy: tengfei
#> sbg:toolkitVersion: 2.4.2a
#> sbg:id: tengfei/quickstart/rna-seq-alignment-star-demo/2
#> sbg:license: Apache License 2.0
#> sbg:revision: 2
#> sbg:modifiedOn: 1463601974
#> sbg:modifiedBy: tengfei
#> sbg:revisionsInfo:
#> - sbg:modifiedBy: tengfei
#>   sbg:modifiedOn: 1463601910
#>   sbg:revision: 0
#> - sbg:modifiedBy: tengfei
#>   sbg:modifiedOn: 1463601952
#>   sbg:revision: 1
#> - sbg:modifiedBy: tengfei
#>   sbg:modifiedOn: 1463601974
#>   sbg:revision: 2
#> sbg:toolkit: STAR
#> id: '#tengfei/quickstart/rna-seq-alignment-star-demo/2'
#> inputs:
#> - type:
#>   - items: File
#>     type: array
#>   label: Read sequence
#>   description: Read sequence.
#>   streamable: no
#>   id: '#reads'
#>   inputBinding:
#>     position: 10
#>     separate: yes
#>     itemSeparator: ' '
#>     valueFrom:
#>       engine: '#cwl-js-engine'
#>       script: "{\t\n  var list = [].concat($job.inputs.reads)\n  \n  var resp = []\n
#>         \ \n  if (list.length == 1){\n    resp.push(list[0].path)\n    \n  }else if
#>         (list.length == 2){    \n    \n    left = \"\"\n    right = \"\"\n      \n
#>         \   for (index = 0; index < list.length; ++index) {\n      \n      if (list[index].metadata
#>         != null){\n        if (list[index].metadata.paired_end == 1){\n          left
#>         = list[index].path\n        }else if (list[index].metadata.paired_end == 2){\n
#>         \         right = list[index].path\n        }\n      }\n    }\n    \n    if
#>         (left != \"\" && right != \"\"){      \n      resp.push(left)\n      resp.push(right)\n
#>         \   }\n  }\n  else if (list.length > 2){\n    left = []\n    right = []\n
#>         \     \n    for (index = 0; index < list.length; ++index) {\n      \n      if
#>         (list[index].metadata != null){\n        if (list[index].metadata.paired_end
#>         == 1){\n          left.push(list[index].path)\n        }else if (list[index].metadata.paired_end
#>         == 2){\n          right.push(list[index].path)\n        }\n      }\n    }\n
#>         \   left_join = left.join()\n    right_join = right.join()\n    if (left !=
#>         [] && right != []){      \n      resp.push(left_join)\n      resp.push(right_join)\n
#>         \   }\t\n  }\n  \n  if(resp.length > 0){    \n    return \"--readFilesIn \".concat(resp.join(\"
#>         \"))\n  }\n}"
#>       class: Expression
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Basic
#>   sbg:fileTypes: FASTA, FASTQ, FA, FQ, FASTQ.GZ, FQ.GZ, FASTQ.BZ2, FQ.BZ2
#>   sbg:x: 200.0
#>   sbg:y: 200.0
#>   sbg:includeInPorts: yes
#>   required: yes
#> - type:
#>   - 'null'
#>   - items: File
#>     type: array
#>   label: sjdbGTFfile
#>   streamable: no
#>   id: '#sjdbGTFfile'
#>   sbg:x: 160.4999759
#>   sbg:y: 195.0833106
#>   sbg:includeInPorts: yes
#>   required: no
#> - type:
#>   - items: File
#>     type: array
#>   label: fastq
#>   streamable: no
#>   id: '#fastq'
#>   sbg:x: 164.2499914
#>   sbg:y: 323.7499502
#>   sbg:includeInPorts: yes
#>   required: yes
#> - type:
#>   - File
#>   label: genomeFastaFiles
#>   streamable: no
#>   id: '#genomeFastaFiles'
#>   sbg:x: 167.7499601
#>   sbg:y: 469.9999106
#>   sbg:includeInPorts: yes
#>   required: yes
#> - type:
#>   - 'null'
#>   - string
#>   label: Exons' parents name
#>   description: Tag name to be used as exons' transcript-parents.
#>   streamable: no
#>   id: '#sjdbGTFtagExonParentTranscript'
#>   sbg:category: Splice junctions db parameters
#>   sbg:x: 200.0
#>   sbg:y: 350.0
#>   sbg:includeInPorts: yes
#>   sbg:toolDefaultValue: transcript_id
#>   required: no
#> - type:
#>   - 'null'
#>   - string
#>   label: Gene name
#>   description: Tag name to be used as exons' gene-parents.
#>   streamable: no
#>   id: '#sjdbGTFtagExonParentGene'
#>   sbg:category: Splice junctions db parameters
#>   sbg:x: 200.0
#>   sbg:y: 400.0
#>   sbg:includeInPorts: yes
#>   sbg:toolDefaultValue: gene_id
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: Max loci anchors
#>   description: Max number of loci anchors are allowed to map to (int>0).
#>   streamable: no
#>   id: '#winAnchorMultimapNmax'
#>   sbg:category: Windows, Anchors, Binning
#>   sbg:x: 200.0
#>   sbg:y: 450.0
#>   sbg:includeInPorts: yes
#>   sbg:toolDefaultValue: '50'
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: Max bins between anchors
#>   description: Max number of bins between two anchors that allows aggregation of anchors
#>     into one window (int>0).
#>   streamable: no
#>   id: '#winAnchorDistNbins'
#>   sbg:category: Windows, Anchors, Binning
#>   sbg:x: 200.0
#>   sbg:y: 500.0
#>   sbg:includeInPorts: yes
#>   sbg:toolDefaultValue: '9'
#>   required: no
#> outputs:
#> - type:
#>   - 'null'
#>   - items: File
#>     type: array
#>   label: Unmapped reads
#>   description: Output of unmapped reads.
#>   streamable: no
#>   id: '#unmapped_reads'
#>   source: '#unmapped_reads'
#>   sbg:x: 800.0
#>   sbg:y: 200.0
#>   sbg:includeInPorts: yes
#>   required: no
#> - type:
#>   - 'null'
#>   - File
#>   label: Transcriptome alignments
#>   description: Alignments translated into transcript coordinates.
#>   streamable: no
#>   id: '#transcriptome_aligned_reads'
#>   source: '#transcriptome_aligned_reads'
#>   sbg:x: 800.0
#>   sbg:y: 233.3333333
#>   sbg:includeInPorts: yes
#>   required: no
#> - type:
#>   - 'null'
#>   - File
#>   label: Splice junctions
#>   description: High confidence collapsed splice junctions in tab-delimited format.
#>     Only junctions supported by uniquely mapping reads are reported.
#>   streamable: no
#>   id: '#splice_junctions'
#>   source: '#splice_junctions'
#>   sbg:x: 800.0
#>   sbg:y: 266.6666667
#>   sbg:includeInPorts: yes
#>   required: no
#> - type:
#>   - 'null'
#>   - File
#>   label: Reads per gene
#>   description: File with number of reads per gene. A read is counted if it overlaps
#>     (1nt or more) one and only one gene.
#>   streamable: no
#>   id: '#reads_per_gene'
#>   source: '#reads_per_gene'
#>   sbg:x: 800.0
#>   sbg:y: 300.0
#>   sbg:includeInPorts: yes
#>   required: no
#> - type:
#>   - 'null'
#>   - items: File
#>     type: array
#>   label: Log files
#>   description: Log files produced during alignment.
#>   streamable: no
#>   id: '#log_files'
#>   source: '#log_files'
#>   sbg:x: 800.0
#>   sbg:y: 333.3333333
#>   sbg:includeInPorts: yes
#>   required: no
#> - type:
#>   - 'null'
#>   - File
#>   label: Chimeric junctions
#>   description: If chimSegmentMin in 'Chimeric Alignments' section is set to 0, 'Chimeric
#>     Junctions' won't be output.
#>   streamable: no
#>   id: '#chimeric_junctions'
#>   source: '#chimeric_junctions'
#>   sbg:x: 800.0
#>   sbg:y: 366.6666667
#>   sbg:includeInPorts: yes
#>   required: no
#> - type:
#>   - 'null'
#>   - File
#>   label: Intermediate genome files
#>   description: Archive with genome files produced when annotations are included on
#>     the fly (in the mapping step).
#>   streamable: no
#>   id: '#intermediate_genome'
#>   source:
#>   - '#intermediate_genome'
#>   - intermediate_genome
#>   sbg:x: 800.0
#>   sbg:y: 400.0
#>   sbg:includeInPorts: yes
#>   required: no
#> - type:
#>   - 'null'
#>   - File
#>   label: Chimeric alignments
#>   description: Aligned Chimeric sequences SAM - if chimSegmentMin = 0, no Chimeric
#>     Alignment SAM and Chimeric Junctions outputs.
#>   streamable: no
#>   id: '#chimeric_alignments'
#>   source: '#chimeric_alignments'
#>   sbg:x: 800.0
#>   sbg:y: 433.3333333
#>   sbg:includeInPorts: yes
#>   required: no
#> - type:
#>   - 'null'
#>   - File
#>   label: Sorted BAM/SAM
#>   description: Sorted BAM or SAM file.
#>   streamable: no
#>   id: '#sorted_bam'
#>   source: '#sorted_bam'
#>   sbg:x: 800.0
#>   sbg:y: 466.6666667
#>   sbg:includeInPorts: yes
#>   required: no
#> - type:
#>   - 'null'
#>   - File
#>   label: Result
#>   description: Source FASTQ file with updated metadata.
#>   streamable: no
#>   id: '#result'
#>   source: '#result'
#>   sbg:x: 800.0
#>   sbg:y: 500.0
#>   sbg:includeInPorts: yes
#>   required: no
#> - type:
#>   - 'null'
#>   - File
#>   label: Intermediate genome files
#>   description: Archive with genome files produced when annotations are included on
#>     the fly (in the mapping step).
#>   streamable: no
#>   id: '#intermediate_genome'
#>   source:
#>   - '#intermediate_genome'
#>   - intermediate_genome
#>   sbg:x: 800.0
#>   sbg:y: 533.3333333
#>   sbg:includeInPorts: yes
#>   required: no
#> requirements:
#> - class: CreateFileRequirement
#>   fileDef: []
#> hints:
#> - class: sbg:AWSInstanceType
#>   value: c3.8xlarge
#> label: RNA-seq Alignment - STAR
#> description: "Alignment to a reference genome and transcriptome presents the first
#>   step of RNA-Seq analysis. This pipeline uses STAR, an ultrafast RNA-seq aligner
#>   capable of mapping full length RNA sequences and detecting de novo canonical junctions,
#>   non-canonical splices, and chimeric (fusion) transcripts. It is optimized for mammalian
#>   sequence reads, but fine tuning of its parameters enables customization to satisfy
#>   unique needs.\n\nSTAR accepts one file per sample (or two files for paired-end data).
#>   \ \nSplice junction annotations can optionally be collected from splice junction
#>   databases. Set the \"Overhang length\" parameter to a value larger than zero in
#>   order to use splice junction databases. For constant read length, this value should
#>   (ideally) be equal to mate length decreased by 1; for long reads with non-constant
#>   length, this value should be 100 (pipeline default). \nFastQC Analysis on FASTQ
#>   files reveals read length distribution. STAR can detect chimeric transcripts, but
#>   parameter \"Min segment length\" in \"Chimeric Alignments\" category must be adjusted
#>   to a desired minimum chimeric segment length. Aligned reads are reported in BAM
#>   format and can be viewed in a genome browser (such as IGV). A file containing detected
#>   splice junctions is also produced.\n\nUnmapped reads are reported in FASTQ format
#>   and can be included in an output BAM file. The \"Output unmapped reads\" and \"Write
#>   unmapped in SAM\" parameters enable unmapped output type selection."
#> class: Workflow
#> steps:
#> - id: '#STAR_Genome_Generate'
#>   inputs:
#>   - id: '#STAR_Genome_Generate.sjdbScore'
#>   - id: '#STAR_Genome_Generate.sjdbOverhang'
#>   - id: '#STAR_Genome_Generate.sjdbGTFtagExonParentTranscript'
#>     source: '#sjdbGTFtagExonParentTranscript'
#>   - id: '#STAR_Genome_Generate.sjdbGTFtagExonParentGene'
#>     source: '#sjdbGTFtagExonParentGene'
#>   - id: '#STAR_Genome_Generate.sjdbGTFfile'
#>     source: '#sjdbGTFfile'
#>   - id: '#STAR_Genome_Generate.sjdbGTFfeatureExon'
#>   - id: '#STAR_Genome_Generate.sjdbGTFchrPrefix'
#>   - id: '#STAR_Genome_Generate.genomeSAsparseD'
#>   - id: '#STAR_Genome_Generate.genomeSAindexNbases'
#>   - id: '#STAR_Genome_Generate.genomeFastaFiles'
#>     source: '#genomeFastaFiles'
#>   - id: '#STAR_Genome_Generate.genomeChrBinNbits'
#>   outputs:
#>   - id: '#STAR_Genome_Generate.genome'
#>   hints: []
#>   run:
#>     sbg:validationErrors: []
#>     sbg:sbgMaintained: no
#>     sbg:latestRevision: 1
#>     sbg:job:
#>       allocatedResources:
#>         mem: 60000
#>         cpu: 15
#>       inputs:
#>         sjdbScore: 0
#>         sjdbGTFfeatureExon: sjdbGTFfeatureExon
#>         sjdbOverhang: 0
#>         sjdbGTFtagExonParentTranscript: sjdbGTFtagExonParentTranscript
#>         genomeChrBinNbits: genomeChrBinNbits
#>         genomeSAsparseD: 0
#>         sjdbGTFfile:
#>         - size: 0
#>           secondaryFiles: []
#>           class: File
#>           path: /demo/test-files/chr20.gtf
#>         sjdbGTFtagExonParentGene: sjdbGTFtagExonParentGene
#>         genomeFastaFiles:
#>           size: 0
#>           secondaryFiles: []
#>           class: File
#>           path: /sbgenomics/test-data/chr20.fa
#>         sjdbGTFchrPrefix: sjdbGTFchrPrefix
#>         genomeSAindexNbases: 0
#>     sbg:toolAuthor: Alexander Dobin/CSHL
#>     sbg:createdOn: 1450911469
#>     sbg:categories:
#>     - Alignment
#>     sbg:contributors:
#>     - bix-demo
#>     sbg:links:
#>     - id: https://github.com/alexdobin/STAR
#>       label: Homepage
#>     - id: https://github.com/alexdobin/STAR/releases
#>       label: Releases
#>     - id: https://github.com/alexdobin/STAR/blob/master/doc/STARmanual.pdf
#>       label: Manual
#>     - id: https://groups.google.com/forum/#!forum/rna-star
#>       label: Support
#>     - id: http://www.ncbi.nlm.nih.gov/pubmed/23104886
#>       label: Publication
#>     sbg:project: bix-demo/star-2-4-2a-demo
#>     sbg:createdBy: bix-demo
#>     sbg:toolkitVersion: 2.4.2a
#>     sbg:id: sevenbridges/public-apps/star-genome-generate/1
#>     sbg:license: GNU General Public License v3.0 only
#>     sbg:revision: 1
#>     sbg:cmdPreview: mkdir genomeDir && /opt/STAR --runMode genomeGenerate --genomeDir
#>       ./genomeDir --runThreadN 15 --genomeFastaFiles /sbgenomics/test-data/chr20.fa
#>       --genomeChrBinNbits genomeChrBinNbits --genomeSAindexNbases 0 --genomeSAsparseD
#>       0 --sjdbGTFfeatureExon sjdbGTFfeatureExon --sjdbGTFtagExonParentTranscript sjdbGTFtagExonParentTranscript
#>       --sjdbGTFtagExonParentGene sjdbGTFtagExonParentGene --sjdbOverhang 0 --sjdbScore
#>       0 --sjdbGTFchrPrefix sjdbGTFchrPrefix  --sjdbGTFfile /demo/test-files/chr20.gtf  &&
#>       tar -vcf genome.tar ./genomeDir /sbgenomics/test-data/chr20.fa
#>     sbg:modifiedOn: 1450911470
#>     sbg:modifiedBy: bix-demo
#>     sbg:revisionsInfo:
#>     - sbg:modifiedBy: bix-demo
#>       sbg:modifiedOn: 1450911469
#>       sbg:revision: 0
#>     - sbg:modifiedBy: bix-demo
#>       sbg:modifiedOn: 1450911470
#>       sbg:revision: 1
#>     sbg:toolkit: STAR
#>     id: sevenbridges/public-apps/star-genome-generate/1
#>     inputs:
#>     - type:
#>       - 'null'
#>       - int
#>       label: Extra alignment score
#>       description: Extra alignment score for alignments that cross database junctions.
#>       streamable: no
#>       id: '#sjdbScore'
#>       inputBinding:
#>         position: 0
#>         prefix: --sjdbScore
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Splice junctions db parameters
#>       sbg:includeInPorts: yes
#>       sbg:toolDefaultValue: '2'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: '"Overhang" length'
#>       description: Length of the donor/acceptor sequence on each side of the junctions,
#>         ideally = (mate_length - 1) (int >= 0), if int = 0, splice junction database
#>         is not used.
#>       streamable: no
#>       id: '#sjdbOverhang'
#>       inputBinding:
#>         position: 0
#>         prefix: --sjdbOverhang
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Splice junctions db parameters
#>       sbg:includeInPorts: yes
#>       sbg:toolDefaultValue: '100'
#>       required: no
#>     - type:
#>       - 'null'
#>       - string
#>       label: Exons' parents name
#>       description: Tag name to be used as exons' transcript-parents.
#>       streamable: no
#>       id: '#sjdbGTFtagExonParentTranscript'
#>       inputBinding:
#>         position: 0
#>         prefix: --sjdbGTFtagExonParentTranscript
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Splice junctions db parameters
#>       sbg:toolDefaultValue: transcript_id
#>       required: no
#>     - type:
#>       - 'null'
#>       - string
#>       label: Gene name
#>       description: Tag name to be used as exons' gene-parents.
#>       streamable: no
#>       id: '#sjdbGTFtagExonParentGene'
#>       inputBinding:
#>         position: 0
#>         prefix: --sjdbGTFtagExonParentGene
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Splice junctions db parameters
#>       sbg:toolDefaultValue: gene_id
#>       required: no
#>     - type:
#>       - 'null'
#>       - items: File
#>         type: array
#>       label: Splice junction file
#>       description: Gene model annotations and/or known transcripts.
#>       streamable: no
#>       id: '#sjdbGTFfile'
#>       sbg:category: Basic
#>       sbg:fileTypes: GTF, GFF, TXT
#>       required: no
#>     - type:
#>       - 'null'
#>       - string
#>       label: Set exons feature
#>       description: Feature type in GTF file to be used as exons for building transcripts.
#>       streamable: no
#>       id: '#sjdbGTFfeatureExon'
#>       inputBinding:
#>         position: 0
#>         prefix: --sjdbGTFfeatureExon
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Splice junctions db parameters
#>       sbg:toolDefaultValue: exon
#>       required: no
#>     - type:
#>       - 'null'
#>       - string
#>       label: Chromosome names
#>       description: Prefix for chromosome names in a GTF file (e.g. 'chr' for using
#>         ENSMEBL annotations with UCSC geneomes).
#>       streamable: no
#>       id: '#sjdbGTFchrPrefix'
#>       inputBinding:
#>         position: 0
#>         prefix: --sjdbGTFchrPrefix
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Splice junctions db parameters
#>       sbg:toolDefaultValue: '-'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Suffux array sparsity
#>       description: 'Distance between indices: use bigger numbers to decrease needed
#>         RAM at the cost of mapping speed reduction (int>0).'
#>       streamable: no
#>       id: '#genomeSAsparseD'
#>       inputBinding:
#>         position: 0
#>         prefix: --genomeSAsparseD
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Genome generation parameters
#>       sbg:toolDefaultValue: '1'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Pre-indexing string length
#>       description: Length (bases) of the SA pre-indexing string. Typically between
#>         10 and 15. Longer strings will use much more memory, but allow faster searches.
#>         For small genomes, this number needs to be scaled down, with a typical value
#>         of min(14, log2(GenomeLength)/2 - 1). For example, for 1 megaBase genome,
#>         this is equal to 9, for 100 kiloBase genome, this is equal to 7.
#>       streamable: no
#>       id: '#genomeSAindexNbases'
#>       inputBinding:
#>         position: 0
#>         prefix: --genomeSAindexNbases
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Genome generation parameters
#>       sbg:toolDefaultValue: '14'
#>       required: no
#>     - type:
#>       - File
#>       label: Genome fasta files
#>       description: Reference sequence to which to align the reads.
#>       streamable: no
#>       id: '#genomeFastaFiles'
#>       inputBinding:
#>         position: 0
#>         prefix: --genomeFastaFiles
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Basic
#>       sbg:fileTypes: FASTA, FA
#>       required: yes
#>     - type:
#>       - 'null'
#>       - string
#>       label: Bins size
#>       description: 'Set log2(chrBin), where chrBin is the size (bits) of the bins
#>         for genome storage: each chromosome will occupy an integer number of bins.
#>         If you are using a genome with a large (>5,000) number of chrosomes/scaffolds,
#>         you may need to reduce this number to reduce RAM consumption. The following
#>         scaling is recomended: genomeChrBinNbits = min(18, log2(GenomeLength/NumberOfReferences)).
#>         For example, for 3 gigaBase genome with 100,000 chromosomes/scaffolds, this
#>         is equal to 15.'
#>       streamable: no
#>       id: '#genomeChrBinNbits'
#>       inputBinding:
#>         position: 0
#>         prefix: --genomeChrBinNbits
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Genome generation parameters
#>       sbg:toolDefaultValue: '18'
#>       required: no
#>     outputs:
#>     - type:
#>       - 'null'
#>       - File
#>       label: Genome Files
#>       description: Genome files comprise binary genome sequence, suffix arrays, text
#>         chromosome names/lengths, splice junctions coordinates, and transcripts/genes
#>         information.
#>       streamable: no
#>       id: '#genome'
#>       outputBinding:
#>         glob: '*.tar'
#>       sbg:fileTypes: TAR
#>     requirements:
#>     - class: ExpressionEngineRequirement
#>       id: '#cwl-js-engine'
#>       requirements:
#>       - class: DockerRequirement
#>         dockerPull: rabix/js-engine
#>     hints:
#>     - class: DockerRequirement
#>       dockerPull: images.sbgenomics.com/ana_d/star:2.4.2a
#>       dockerImageId: a4b0ad2c3cae
#>     - class: sbg:CPURequirement
#>       value: 15
#>     - class: sbg:MemRequirement
#>       value: 60000
#>     label: STAR Genome Generate
#>     description: STAR Genome Generate is a tool that generates genome index files.
#>       One set of files should be generated per each genome/annotation combination.
#>       Once produced, these files could be used as long as genome/annotation combination
#>       stays the same. Also, STAR Genome Generate which produced these files and STAR
#>       aligner using them must be the same toolkit version.
#>     class: CommandLineTool
#>     baseCommand:
#>     - mkdir
#>     - genomeDir
#>     - '&&'
#>     - /opt/STAR
#>     - --runMode
#>     - genomeGenerate
#>     - --genomeDir
#>     - ./genomeDir
#>     - --runThreadN
#>     - class: Expression
#>       script: |-
#>         {
#>           return $job.allocatedResources.cpu
#>         }
#>       engine: '#cwl-js-engine'
#>     arguments:
#>     - position: 99
#>       separate: yes
#>       valueFrom: '&& tar -vcf genome.tar ./genomeDir'
#>     - position: 0
#>       separate: yes
#>       valueFrom:
#>         engine: '#cwl-js-engine'
#>         script: "{\t\n  var sjFormat = \"False\"\n  var gtfgffFormat = \"False\"\n
#>           \ var list = $job.inputs.sjdbGTFfile\n  var paths_list = []\n  var joined_paths
#>           = \"\"\n  \n  if (list) {\n    list.forEach(function(f){return paths_list.push(f.path)})\n
#>           \   joined_paths = paths_list.join(\" \")\n\n\n    paths_list.forEach(function(f){\n
#>           \     ext = f.replace(/^.*\\./, '')\n      if (ext == \"gff\" || ext ==
#>           \"gtf\") {\n        gtfgffFormat = \"True\"\n        return gtfgffFormat\n
#>           \     }\n      if (ext == \"txt\") {\n        sjFormat = \"True\"\n        return
#>           sjFormat\n      }\n    })\n\n    if ($job.inputs.sjdbGTFfile && $job.inputs.sjdbInsertSave
#>           != \"None\") {\n      if (sjFormat == \"True\") {\n        return \"--sjdbFileChrStartEnd
#>           \".concat(joined_paths)\n      }\n      else if (gtfgffFormat == \"True\")
#>           {\n        return \"--sjdbGTFfile \".concat(joined_paths)\n      }\n    }\n
#>           \ }\n}"
#>         class: Expression
#>     stdin: ''
#>     stdout: ''
#>     successCodes: []
#>     temporaryFailCodes: []
#>     x: 384.0832266
#>     'y': 446.4998957
#>   sbg:x: 100.0
#>   sbg:y: 200.0
#> - id: '#SBG_FASTQ_Quality_Detector'
#>   inputs:
#>   - id: '#SBG_FASTQ_Quality_Detector.fastq'
#>     source: '#fastq'
#>   outputs:
#>   - id: '#SBG_FASTQ_Quality_Detector.result'
#>   hints: []
#>   run:
#>     sbg:validationErrors: []
#>     sbg:sbgMaintained: no
#>     sbg:latestRevision: 3
#>     sbg:job:
#>       allocatedResources:
#>         mem: 1000
#>         cpu: 1
#>       inputs:
#>         fastq:
#>           size: 0
#>           secondaryFiles: []
#>           class: File
#>           path: /path/to/fastq.ext
#>     sbg:toolAuthor: Seven Bridges Genomics
#>     sbg:createdOn: 1450911312
#>     sbg:categories:
#>     - FASTQ-Processing
#>     sbg:contributors:
#>     - bix-demo
#>     sbg:project: bix-demo/sbgtools-demo
#>     sbg:createdBy: bix-demo
#>     sbg:id: sevenbridges/public-apps/sbg-fastq-quality-detector/3
#>     sbg:license: Apache License 2.0
#>     sbg:revision: 3
#>     sbg:cmdPreview: python /opt/sbg_fastq_quality_scale_detector.py --fastq /path/to/fastq.ext
#>       /path/to/fastq.ext
#>     sbg:modifiedOn: 1450911314
#>     sbg:modifiedBy: bix-demo
#>     sbg:revisionsInfo:
#>     - sbg:modifiedBy: bix-demo
#>       sbg:modifiedOn: 1450911312
#>       sbg:revision: 0
#>     - sbg:modifiedBy: bix-demo
#>       sbg:modifiedOn: 1450911314
#>       sbg:revision: 3
#>     - sbg:modifiedBy: bix-demo
#>       sbg:modifiedOn: 1450911313
#>       sbg:revision: 1
#>     - sbg:modifiedBy: bix-demo
#>       sbg:modifiedOn: 1450911313
#>       sbg:revision: 2
#>     sbg:toolkit: SBGTools
#>     id: sevenbridges/public-apps/sbg-fastq-quality-detector/3
#>     inputs:
#>     - type:
#>       - File
#>       label: Fastq
#>       description: FASTQ file.
#>       streamable: no
#>       id: '#fastq'
#>       inputBinding:
#>         position: 0
#>         prefix: --fastq
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       required: yes
#>     outputs:
#>     - type:
#>       - 'null'
#>       - File
#>       label: Result
#>       description: Source FASTQ file with updated metadata.
#>       streamable: no
#>       id: '#result'
#>       outputBinding:
#>         glob: '*.fastq'
#>       sbg:fileTypes: FASTQ
#>     requirements:
#>     - class: CreateFileRequirement
#>       fileDef: []
#>     hints:
#>     - class: DockerRequirement
#>       dockerPull: images.sbgenomics.com/tziotas/sbg_fastq_quality_scale_detector:1.0
#>       dockerImageId: ''
#>     - class: sbg:CPURequirement
#>       value: 1
#>     - class: sbg:MemRequirement
#>       value: 1000
#>     label: SBG FASTQ Quality Detector
#>     description: FASTQ Quality Scale Detector detects which quality encoding scheme
#>       was used in your reads and automatically enters the proper value in the "Quality
#>       Scale" metadata field.
#>     class: CommandLineTool
#>     baseCommand:
#>     - python
#>     - /opt/sbg_fastq_quality_scale_detector.py
#>     arguments: []
#>     stdin: ''
#>     stdout: ''
#>     successCodes: []
#>     temporaryFailCodes: []
#>     x: 375.3333179
#>     'y': 323.5833156
#>   sbg:x: 300.0
#>   sbg:y: 200.0
#> - id: '#Picard_SortSam'
#>   inputs:
#>   - id: '#Picard_SortSam.validation_stringency'
#>     default: SILENT
#>   - id: '#Picard_SortSam.sort_order'
#>     default: Coordinate
#>   - id: '#Picard_SortSam.quiet'
#>   - id: '#Picard_SortSam.output_type'
#>   - id: '#Picard_SortSam.memory_per_job'
#>   - id: '#Picard_SortSam.max_records_in_ram'
#>   - id: '#Picard_SortSam.input_bam'
#>     source: '#STAR.aligned_reads'
#>   - id: '#Picard_SortSam.create_index'
#>     default: 'True'
#>   - id: '#Picard_SortSam.compression_level'
#>   outputs:
#>   - id: '#Picard_SortSam.sorted_bam'
#>   hints: []
#>   run:
#>     sbg:validationErrors: []
#>     sbg:sbgMaintained: no
#>     sbg:latestRevision: 2
#>     sbg:job:
#>       allocatedResources:
#>         mem: 2048
#>         cpu: 1
#>       inputs:
#>         sort_order: Coordinate
#>         input_bam:
#>           path: /root/dir/example.tested.bam
#>         memory_per_job: 2048
#>         output_type: ~
#>         create_index: ~
#>     sbg:toolAuthor: Broad Institute
#>     sbg:createdOn: 1450911168
#>     sbg:categories:
#>     - SAM/BAM-Processing
#>     sbg:contributors:
#>     - bix-demo
#>     sbg:links:
#>     - id: http://broadinstitute.github.io/picard/index.html
#>       label: Homepage
#>     - id: https://github.com/broadinstitute/picard/releases/tag/1.138
#>       label: Source Code
#>     - id: http://broadinstitute.github.io/picard/
#>       label: Wiki
#>     - id: https://github.com/broadinstitute/picard/zipball/master
#>       label: Download
#>     - id: http://broadinstitute.github.io/picard/
#>       label: Publication
#>     sbg:project: bix-demo/picard-1-140-demo
#>     sbg:createdBy: bix-demo
#>     sbg:toolkitVersion: '1.140'
#>     sbg:id: sevenbridges/public-apps/picard-sortsam-1-140/2
#>     sbg:license: MIT License, Apache 2.0 Licence
#>     sbg:revision: 2
#>     sbg:cmdPreview: java -Xmx2048M -jar /opt/picard-tools-1.140/picard.jar SortSam
#>       OUTPUT=example.tested.sorted.bam INPUT=/root/dir/example.tested.bam SORT_ORDER=coordinate   INPUT=/root/dir/example.tested.bam
#>       SORT_ORDER=coordinate  /root/dir/example.tested.bam
#>     sbg:modifiedOn: 1450911170
#>     sbg:modifiedBy: bix-demo
#>     sbg:revisionsInfo:
#>     - sbg:modifiedBy: bix-demo
#>       sbg:modifiedOn: 1450911168
#>       sbg:revision: 0
#>     - sbg:modifiedBy: bix-demo
#>       sbg:modifiedOn: 1450911169
#>       sbg:revision: 1
#>     - sbg:modifiedBy: bix-demo
#>       sbg:modifiedOn: 1450911170
#>       sbg:revision: 2
#>     sbg:toolkit: Picard
#>     id: sevenbridges/public-apps/picard-sortsam-1-140/2
#>     inputs:
#>     - type:
#>       - 'null'
#>       - name: validation_stringency
#>         symbols:
#>         - STRICT
#>         - LENIENT
#>         - SILENT
#>         type: enum
#>       label: Validation stringency
#>       description: 'Validation stringency for all SAM files read by this program.
#>         Setting stringency to SILENT can improve performance when processing a BAM
#>         file in which variable-length data (read, qualities, tags) do not otherwise
#>         need to be decoded. This option can be set to ''null'' to clear the default
#>         value. Possible values: {STRICT, LENIENT, SILENT}.'
#>       streamable: no
#>       id: '#validation_stringency'
#>       inputBinding:
#>         position: 0
#>         prefix: VALIDATION_STRINGENCY=
#>         separate: no
#>         valueFrom:
#>           engine: '#cwl-js-engine'
#>           script: |-
#>             {
#>               if ($job.inputs.validation_stringency)
#>               {
#>                 return $job.inputs.validation_stringency
#>               }
#>               else
#>               {
#>                 return "SILENT"
#>               }
#>             }
#>           class: Expression
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Other input types
#>       sbg:toolDefaultValue: SILENT
#>       required: no
#>     - type:
#>       - name: sort_order
#>         symbols:
#>         - Unsorted
#>         - Queryname
#>         - Coordinate
#>         type: enum
#>       label: Sort order
#>       description: 'Sort order of the output file. Possible values: {unsorted, queryname,
#>         coordinate}.'
#>       streamable: no
#>       id: '#sort_order'
#>       inputBinding:
#>         position: 3
#>         prefix: SORT_ORDER=
#>         separate: no
#>         valueFrom:
#>           engine: '#cwl-js-engine'
#>           script: |-
#>             {
#>               p = $job.inputs.sort_order.toLowerCase()
#>               return p
#>             }
#>           class: Expression
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Other input types
#>       sbg:toolDefaultValue: Coordinate
#>       sbg:altPrefix: SO
#>       required: yes
#>     - type:
#>       - 'null'
#>       - name: quiet
#>         symbols:
#>         - 'True'
#>         - 'False'
#>         type: enum
#>       label: Quiet
#>       description: 'This parameter indicates whether to suppress job-summary info
#>         on System.err. This option can be set to ''null'' to clear the default value.
#>         Possible values: {true, false}.'
#>       streamable: no
#>       id: '#quiet'
#>       inputBinding:
#>         position: 0
#>         prefix: QUIET=
#>         separate: no
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Other input types
#>       sbg:toolDefaultValue: 'False'
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: output_type
#>         symbols:
#>         - BAM
#>         - SAM
#>         - SAME AS INPUT
#>         type: enum
#>       label: Output format
#>       description: Since Picard tools can output both SAM and BAM files, user can
#>         choose the format of the output file.
#>       streamable: no
#>       id: '#output_type'
#>       sbg:category: Other input types
#>       sbg:toolDefaultValue: SAME AS INPUT
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Memory per job
#>       description: Amount of RAM memory to be used per job. Defaults to 2048 MB for
#>         single threaded jobs.
#>       streamable: no
#>       id: '#memory_per_job'
#>       sbg:toolDefaultValue: '2048'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Max records in RAM
#>       description: When writing SAM files that need to be sorted, this parameter will
#>         specify the number of records stored in RAM before spilling to disk. Increasing
#>         this number reduces the number of file handles needed to sort a SAM file,
#>         and increases the amount of RAM needed. This option can be set to 'null' to
#>         clear the default value.
#>       streamable: no
#>       id: '#max_records_in_ram'
#>       inputBinding:
#>         position: 0
#>         prefix: MAX_RECORDS_IN_RAM=
#>         separate: no
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Other input types
#>       sbg:toolDefaultValue: '500000'
#>       required: no
#>     - type:
#>       - File
#>       label: Input BAM
#>       description: The BAM or SAM file to sort.
#>       streamable: no
#>       id: '#input_bam'
#>       inputBinding:
#>         position: 1
#>         prefix: INPUT=
#>         separate: no
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: File inputs
#>       sbg:fileTypes: BAM, SAM
#>       sbg:altPrefix: I
#>       required: yes
#>     - type:
#>       - 'null'
#>       - name: create_index
#>         symbols:
#>         - 'True'
#>         - 'False'
#>         type: enum
#>       label: Create index
#>       description: 'This parameter indicates whether to create a BAM index when writing
#>         a coordinate-sorted BAM file. This option can be set to ''null'' to clear
#>         the default value. Possible values: {true, false}.'
#>       streamable: no
#>       id: '#create_index'
#>       inputBinding:
#>         position: 5
#>         prefix: CREATE_INDEX=
#>         separate: no
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Other input types
#>       sbg:toolDefaultValue: 'False'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Compression level
#>       description: Compression level for all compressed files created (e.g. BAM and
#>         GELI). This option can be set to 'null' to clear the default value.
#>       streamable: no
#>       id: '#compression_level'
#>       inputBinding:
#>         position: 0
#>         prefix: COMPRESSION_LEVEL=
#>         separate: no
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Other input types
#>       sbg:toolDefaultValue: '5'
#>       required: no
#>     outputs:
#>     - type:
#>       - 'null'
#>       - File
#>       label: Sorted BAM/SAM
#>       description: Sorted BAM or SAM file.
#>       streamable: no
#>       id: '#sorted_bam'
#>       outputBinding:
#>         glob: '*.sorted.?am'
#>       sbg:fileTypes: BAM, SAM
#>     requirements:
#>     - class: ExpressionEngineRequirement
#>       id: '#cwl-js-engine'
#>       requirements:
#>       - class: DockerRequirement
#>         dockerPull: rabix/js-engine
#>       engineCommand: cwl-engine.js
#>     hints:
#>     - class: DockerRequirement
#>       dockerPull: images.sbgenomics.com/mladenlsbg/picard:1.140
#>       dockerImageId: eab0e70b6629
#>     - class: sbg:CPURequirement
#>       value: 1
#>     - class: sbg:MemRequirement
#>       value:
#>         engine: '#cwl-js-engine'
#>         script: "{\n  if($job.inputs.memory_per_job){\n  \treturn $job.inputs.memory_per_job\n
#>           \ }\n  \treturn 2048\n}"
#>         class: Expression
#>     label: Picard SortSam
#>     description: Picard SortSam sorts the input SAM or BAM. Input and output formats
#>       are determined by the file extension.
#>     class: CommandLineTool
#>     baseCommand:
#>     - java
#>     - class: Expression
#>       script: "{   \n  if($job.inputs.memory_per_job){\n    return '-Xmx'.concat($job.inputs.memory_per_job,
#>         'M')\n  }   \n  \treturn '-Xmx2048M'\n}"
#>       engine: '#cwl-js-engine'
#>     - -jar
#>     - /opt/picard-tools-1.140/picard.jar
#>     - SortSam
#>     arguments:
#>     - position: 0
#>       prefix: OUTPUT=
#>       separate: no
#>       valueFrom:
#>         engine: '#cwl-js-engine'
#>         script: "{\n  filename = $job.inputs.input_bam.path\n  ext = $job.inputs.output_type\n\nif
#>           (ext === \"BAM\")\n{\n    return filename.split('.').slice(0, -1).concat(\"sorted.bam\").join(\".\").replace(/^.*[\\\\\\/]/,
#>           '')\n    }\n\nelse if (ext === \"SAM\")\n{\n    return filename.split('.').slice(0,
#>           -1).concat(\"sorted.sam\").join('.').replace(/^.*[\\\\\\/]/, '')\n}\n\nelse
#>           \n{\n\treturn filename.split('.').slice(0, -1).concat(\"sorted.\"+filename.split('.').slice(-1)[0]).join(\".\").replace(/^.*[\\\\\\/]/,
#>           '')\n}\n}"
#>         class: Expression
#>     - position: 1000
#>       separate: yes
#>       valueFrom:
#>         engine: '#cwl-js-engine'
#>         script: "{\n  filename = $job.inputs.input_bam.path\n  \n  /* figuring out
#>           output file type */\n  ext = $job.inputs.output_type\n  if (ext === \"BAM\")\n
#>           \ {\n    out_extension = \"BAM\"\n  }\n  else if (ext === \"SAM\")\n  {\n
#>           \   out_extension = \"SAM\"\n  }\n  else \n  {\n\tout_extension = filename.split('.').slice(-1)[0].toUpperCase()\n
#>           \ }  \n  \n  /* if exist moving .bai in bam.bai */\n  if ($job.inputs.create_index
#>           === 'True' && $job.inputs.sort_order === 'Coordinate' && out_extension ==
#>           \"BAM\")\n  {\n    \n    old_name = filename.split('.').slice(0, -1).concat('sorted.bai').join('.').replace(/^.*[\\\\\\/]/,
#>           '')\n    new_name = filename.split('.').slice(0, -1).concat('sorted.bam.bai').join('.').replace(/^.*[\\\\\\/]/,
#>           '')\n    return \"; mv \" + \" \" + old_name + \" \" + new_name\n  }\n\n}"
#>         class: Expression
#>     stdin: ''
#>     stdout: ''
#>     successCodes: []
#>     temporaryFailCodes: []
#>     x: 773.0831807
#>     'y': 470.9165939
#>   sbg:x: 500.0
#>   sbg:y: 200.0
#> - id: '#STAR'
#>   inputs:
#>   - id: '#STAR.winFlankNbins'
#>   - id: '#STAR.winBinNbits'
#>   - id: '#STAR.winAnchorMultimapNmax'
#>     source: '#winAnchorMultimapNmax'
#>   - id: '#STAR.winAnchorDistNbins'
#>     source: '#winAnchorDistNbins'
#>   - id: '#STAR.twopassMode'
#>   - id: '#STAR.twopass1readsN'
#>   - id: '#STAR.sjdbScore'
#>   - id: '#STAR.sjdbOverhang'
#>     default: 100
#>   - id: '#STAR.sjdbInsertSave'
#>   - id: '#STAR.sjdbGTFtagExonParentTranscript'
#>   - id: '#STAR.sjdbGTFtagExonParentGene'
#>   - id: '#STAR.sjdbGTFfile'
#>     source: '#sjdbGTFfile'
#>   - id: '#STAR.sjdbGTFfeatureExon'
#>   - id: '#STAR.sjdbGTFchrPrefix'
#>   - id: '#STAR.seedSearchStartLmaxOverLread'
#>   - id: '#STAR.seedSearchStartLmax'
#>   - id: '#STAR.seedSearchLmax'
#>   - id: '#STAR.seedPerWindowNmax'
#>   - id: '#STAR.seedPerReadNmax'
#>   - id: '#STAR.seedNoneLociPerWindow'
#>   - id: '#STAR.seedMultimapNmax'
#>   - id: '#STAR.scoreStitchSJshift'
#>   - id: '#STAR.scoreInsOpen'
#>   - id: '#STAR.scoreInsBase'
#>   - id: '#STAR.scoreGenomicLengthLog2scale'
#>   - id: '#STAR.scoreGapNoncan'
#>   - id: '#STAR.scoreGapGCAG'
#>   - id: '#STAR.scoreGapATAC'
#>   - id: '#STAR.scoreGap'
#>   - id: '#STAR.scoreDelOpen'
#>   - id: '#STAR.scoreDelBase'
#>   - id: '#STAR.rg_seq_center'
#>   - id: '#STAR.rg_sample_id'
#>   - id: '#STAR.rg_platform_unit_id'
#>   - id: '#STAR.rg_platform'
#>   - id: '#STAR.rg_mfl'
#>   - id: '#STAR.rg_library_id'
#>   - id: '#STAR.reads'
#>     source: '#reads'
#>   - id: '#STAR.readMatesLengthsIn'
#>   - id: '#STAR.readMapNumber'
#>   - id: '#STAR.quantTranscriptomeBan'
#>   - id: '#STAR.quantMode'
#>     default: TranscriptomeSAM
#>   - id: '#STAR.outSortingType'
#>     default: SortedByCoordinate
#>   - id: '#STAR.outSJfilterReads'
#>   - id: '#STAR.outSJfilterOverhangMin'
#>   - id: '#STAR.outSJfilterIntronMaxVsReadN'
#>   - id: '#STAR.outSJfilterDistToOtherSJmin'
#>   - id: '#STAR.outSJfilterCountUniqueMin'
#>   - id: '#STAR.outSJfilterCountTotalMin'
#>   - id: '#STAR.outSAMunmapped'
#>   - id: '#STAR.outSAMtype'
#>     default: BAM
#>   - id: '#STAR.outSAMstrandField'
#>   - id: '#STAR.outSAMreadID'
#>   - id: '#STAR.outSAMprimaryFlag'
#>   - id: '#STAR.outSAMorder'
#>   - id: '#STAR.outSAMmode'
#>   - id: '#STAR.outSAMmapqUnique'
#>   - id: '#STAR.outSAMheaderPG'
#>   - id: '#STAR.outSAMheaderHD'
#>   - id: '#STAR.outSAMflagOR'
#>   - id: '#STAR.outSAMflagAND'
#>   - id: '#STAR.outSAMattributes'
#>   - id: '#STAR.outReadsUnmapped'
#>     default: Fastx
#>   - id: '#STAR.outQSconversionAdd'
#>   - id: '#STAR.outFilterType'
#>   - id: '#STAR.outFilterScoreMinOverLread'
#>   - id: '#STAR.outFilterScoreMin'
#>   - id: '#STAR.outFilterMultimapScoreRange'
#>   - id: '#STAR.outFilterMultimapNmax'
#>   - id: '#STAR.outFilterMismatchNoverReadLmax'
#>   - id: '#STAR.outFilterMismatchNoverLmax'
#>   - id: '#STAR.outFilterMismatchNmax'
#>   - id: '#STAR.outFilterMatchNminOverLread'
#>   - id: '#STAR.outFilterMatchNmin'
#>   - id: '#STAR.outFilterIntronMotifs'
#>   - id: '#STAR.limitSjdbInsertNsj'
#>   - id: '#STAR.limitOutSJoneRead'
#>   - id: '#STAR.limitOutSJcollapsed'
#>   - id: '#STAR.limitBAMsortRAM'
#>   - id: '#STAR.genomeDirName'
#>   - id: '#STAR.genome'
#>     source: '#STAR_Genome_Generate.genome'
#>   - id: '#STAR.clip5pNbases'
#>   - id: '#STAR.clip3pNbases'
#>   - id: '#STAR.clip3pAfterAdapterNbases'
#>   - id: '#STAR.clip3pAdapterSeq'
#>   - id: '#STAR.clip3pAdapterMMp'
#>   - id: '#STAR.chimSegmentMin'
#>   - id: '#STAR.chimScoreSeparation'
#>   - id: '#STAR.chimScoreMin'
#>   - id: '#STAR.chimScoreJunctionNonGTAG'
#>   - id: '#STAR.chimScoreDropMax'
#>   - id: '#STAR.chimOutType'
#>   - id: '#STAR.chimJunctionOverhangMin'
#>   - id: '#STAR.alignWindowsPerReadNmax'
#>   - id: '#STAR.alignTranscriptsPerWindowNmax'
#>   - id: '#STAR.alignTranscriptsPerReadNmax'
#>   - id: '#STAR.alignSplicedMateMapLminOverLmate'
#>   - id: '#STAR.alignSplicedMateMapLmin'
#>   - id: '#STAR.alignSoftClipAtReferenceEnds'
#>   - id: '#STAR.alignSJoverhangMin'
#>   - id: '#STAR.alignSJDBoverhangMin'
#>   - id: '#STAR.alignMatesGapMax'
#>   - id: '#STAR.alignIntronMin'
#>   - id: '#STAR.alignIntronMax'
#>   - id: '#STAR.alignEndsType'
#>   outputs:
#>   - id: '#STAR.unmapped_reads'
#>   - id: '#STAR.transcriptome_aligned_reads'
#>   - id: '#STAR.splice_junctions'
#>   - id: '#STAR.reads_per_gene'
#>   - id: '#STAR.log_files'
#>   - id: '#STAR.intermediate_genome'
#>   - id: '#STAR.chimeric_junctions'
#>   - id: '#STAR.chimeric_alignments'
#>   - id: '#STAR.aligned_reads'
#>   hints: []
#>   run:
#>     sbg:validationErrors: []
#>     sbg:sbgMaintained: no
#>     sbg:latestRevision: 4
#>     sbg:job:
#>       allocatedResources:
#>         mem: 60000
#>         cpu: 15
#>       inputs:
#>         alignWindowsPerReadNmax: 0
#>         outSAMheaderPG: outSAMheaderPG
#>         GENOME_DIR_NAME: ''
#>         outFilterMatchNminOverLread: 0
#>         rg_platform_unit_id: rg_platform_unit
#>         alignTranscriptsPerReadNmax: 0
#>         readMapNumber: 0
#>         alignSplicedMateMapLminOverLmate: 0
#>         alignMatesGapMax: 0
#>         outFilterMultimapNmax: 0
#>         clip5pNbases:
#>         - 0
#>         outSAMstrandField: None
#>         readMatesLengthsIn: NotEqual
#>         outSAMattributes: Standard
#>         seedMultimapNmax: 0
#>         rg_mfl: rg_mfl
#>         chimSegmentMin: 0
#>         winAnchorDistNbins: 0
#>         outSortingType: SortedByCoordinate
#>         outFilterMultimapScoreRange: 0
#>         sjdbInsertSave: Basic
#>         clip3pAfterAdapterNbases:
#>         - 0
#>         scoreDelBase: 0
#>         outFilterMatchNmin: 0
#>         twopass1readsN: 0
#>         outSAMunmapped: None
#>         genome:
#>           size: 0
#>           secondaryFiles: []
#>           class: File
#>           path: genome.ext
#>         sjdbGTFtagExonParentTranscript: ''
#>         limitBAMsortRAM: 0
#>         alignEndsType: Local
#>         seedNoneLociPerWindow: 0
#>         rg_sample_id: rg_sample
#>         sjdbGTFtagExonParentGene: ''
#>         chimScoreMin: 0
#>         outSJfilterIntronMaxVsReadN:
#>         - 0
#>         twopassMode: Basic
#>         alignSplicedMateMapLmin: 0
#>         outSJfilterReads: All
#>         outSAMprimaryFlag: OneBestScore
#>         outSJfilterCountTotalMin:
#>         - 3
#>         - 1
#>         - 1
#>         - 1
#>         outSAMorder: Paired
#>         outSAMflagAND: 0
#>         chimScoreSeparation: 0
#>         alignSJoverhangMin: 0
#>         outFilterScoreMin: 0
#>         seedSearchStartLmax: 0
#>         scoreGapGCAG: 0
#>         scoreGenomicLengthLog2scale: 0
#>         outFilterIntronMotifs: None
#>         outFilterMismatchNmax: 0
#>         reads:
#>         - size: 0
#>           secondaryFiles: []
#>           class: File
#>           metadata:
#>             format: fastq
#>             paired_end: '1'
#>             seq_center: illumina
#>           path: /test-data/mate_1.fastq.bz2
#>         scoreGap: 0
#>         outSJfilterOverhangMin:
#>         - 30
#>         - 12
#>         - 12
#>         - 12
#>         outSAMflagOR: 0
#>         outSAMmode: Full
#>         rg_library_id: ''
#>         chimScoreJunctionNonGTAG: 0
#>         scoreInsOpen: 0
#>         clip3pAdapterSeq:
#>         - clip3pAdapterSeq
#>         chimScoreDropMax: 0
#>         outFilterType: Normal
#>         scoreGapATAC: 0
#>         rg_platform: Ion Torrent PGM
#>         clip3pAdapterMMp:
#>         - 0
#>         sjdbGTFfeatureExon: ''
#>         outQSconversionAdd: 0
#>         quantMode: TranscriptomeSAM
#>         alignIntronMin: 0
#>         scoreInsBase: 0
#>         scoreGapNoncan: 0
#>         seedSearchLmax: 0
#>         outSJfilterDistToOtherSJmin:
#>         - 0
#>         outFilterScoreMinOverLread: 0
#>         alignSJDBoverhangMin: 0
#>         limitOutSJcollapsed: 0
#>         winAnchorMultimapNmax: 0
#>         outFilterMismatchNoverLmax: 0
#>         rg_seq_center: ''
#>         outSAMheaderHD: outSAMheaderHD
#>         chimOutType: Within
#>         quantTranscriptomeBan: IndelSoftclipSingleend
#>         limitOutSJoneRead: 0
#>         alignTranscriptsPerWindowNmax: 0
#>         sjdbOverhang: ~
#>         outReadsUnmapped: Fastx
#>         scoreStitchSJshift: 0
#>         seedPerWindowNmax: 0
#>         outSJfilterCountUniqueMin:
#>         - 3
#>         - 1
#>         - 1
#>         - 1
#>         scoreDelOpen: 0
#>         sjdbGTFfile:
#>         - path: /demo/test-data/chr20.gtf
#>         clip3pNbases:
#>         - 0
#>         - 3
#>         winBinNbits: 0
#>         sjdbScore: ~
#>         seedSearchStartLmaxOverLread: 0
#>         alignIntronMax: 0
#>         seedPerReadNmax: 0
#>         outFilterMismatchNoverReadLmax: 0
#>         winFlankNbins: 0
#>         sjdbGTFchrPrefix: chrPrefix
#>         alignSoftClipAtReferenceEnds: 'Yes'
#>         outSAMreadID: Standard
#>         outSAMtype: BAM
#>         chimJunctionOverhangMin: 0
#>         limitSjdbInsertNsj: 0
#>         outSAMmapqUnique: 0
#>     sbg:toolAuthor: Alexander Dobin/CSHL
#>     sbg:createdOn: 1450911471
#>     sbg:categories:
#>     - Alignment
#>     sbg:contributors:
#>     - ana_d
#>     - bix-demo
#>     - uros_sipetic
#>     sbg:links:
#>     - id: https://github.com/alexdobin/STAR
#>       label: Homepage
#>     - id: https://github.com/alexdobin/STAR/releases
#>       label: Releases
#>     - id: https://github.com/alexdobin/STAR/blob/master/doc/STARmanual.pdf
#>       label: Manual
#>     - id: https://groups.google.com/forum/#!forum/rna-star
#>       label: Support
#>     - id: http://www.ncbi.nlm.nih.gov/pubmed/23104886
#>       label: Publication
#>     sbg:project: bix-demo/star-2-4-2a-demo
#>     sbg:createdBy: bix-demo
#>     sbg:toolkitVersion: 2.4.2a
#>     sbg:id: sevenbridges/public-apps/star/4
#>     sbg:license: GNU General Public License v3.0 only
#>     sbg:revision: 4
#>     sbg:cmdPreview: tar -xvf genome.ext && /opt/STAR --runThreadN 15  --readFilesCommand
#>       bzcat  --sjdbGTFfile /demo/test-data/chr20.gtf  --sjdbGTFchrPrefix chrPrefix
#>       --sjdbInsertSave Basic  --twopass1readsN 0  --chimOutType WithinBAM  --outSAMattrRGline
#>       ID:1 CN:illumina PI:rg_mfl PL:Ion_Torrent_PGM PU:rg_platform_unit SM:rg_sample  --quantMode
#>       TranscriptomeSAM --outFileNamePrefix ./mate_1.fastq.bz2.  --readFilesIn /test-data/mate_1.fastq.bz2  &&
#>       tar -vcf mate_1.fastq.bz2._STARgenome.tar ./mate_1.fastq.bz2._STARgenome  &&
#>       mv mate_1.fastq.bz2.Unmapped.out.mate1 mate_1.fastq.bz2.Unmapped.out.mate1.fastq
#>     sbg:modifiedOn: 1462889222
#>     sbg:modifiedBy: ana_d
#>     sbg:revisionsInfo:
#>     - sbg:modifiedBy: bix-demo
#>       sbg:modifiedOn: 1450911471
#>       sbg:revision: 0
#>     - sbg:modifiedBy: bix-demo
#>       sbg:modifiedOn: 1450911473
#>       sbg:revision: 1
#>     - sbg:modifiedBy: bix-demo
#>       sbg:modifiedOn: 1450911475
#>       sbg:revision: 2
#>     - sbg:modifiedBy: uros_sipetic
#>       sbg:modifiedOn: 1462878528
#>       sbg:revision: 3
#>     - sbg:modifiedBy: ana_d
#>       sbg:modifiedOn: 1462889222
#>       sbg:revision: 4
#>     sbg:toolkit: STAR
#>     id: sevenbridges/public-apps/star/4
#>     inputs:
#>     - type:
#>       - 'null'
#>       - int
#>       label: Flanking regions size
#>       description: =log2(winFlank), where win Flank is the size of the left and right
#>         flanking regions for each window (int>0).
#>       streamable: no
#>       id: '#winFlankNbins'
#>       inputBinding:
#>         position: 0
#>         prefix: --winFlankNbins
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Windows, Anchors, Binning
#>       sbg:includeInPorts: yes
#>       sbg:toolDefaultValue: '4'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Bin size
#>       description: =log2(winBin), where winBin is the size of the bin for the windows/clustering,
#>         each window will occupy an integer number of bins (int>0).
#>       streamable: no
#>       id: '#winBinNbits'
#>       inputBinding:
#>         position: 0
#>         prefix: --winBinNbits
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Windows, Anchors, Binning
#>       sbg:includeInPorts: yes
#>       sbg:toolDefaultValue: '16'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Max loci anchors
#>       description: Max number of loci anchors are allowed to map to (int>0).
#>       streamable: no
#>       id: '#winAnchorMultimapNmax'
#>       inputBinding:
#>         position: 0
#>         prefix: --winAnchorMultimapNmax
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Windows, Anchors, Binning
#>       sbg:toolDefaultValue: '50'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Max bins between anchors
#>       description: Max number of bins between two anchors that allows aggregation
#>         of anchors into one window (int>0).
#>       streamable: no
#>       id: '#winAnchorDistNbins'
#>       inputBinding:
#>         position: 0
#>         prefix: --winAnchorDistNbins
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Windows, Anchors, Binning
#>       sbg:toolDefaultValue: '9'
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: twopassMode
#>         symbols:
#>         - None
#>         - Basic
#>         type: enum
#>       label: Two-pass mode
#>       description: '2-pass mapping mode. None: 1-pass mapping; Basic: basic 2-pass
#>         mapping, with all 1st pass junctions inserted into the genome indices on the
#>         fly.'
#>       streamable: no
#>       id: '#twopassMode'
#>       inputBinding:
#>         position: 0
#>         prefix: --twopassMode
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: 2-pass mapping
#>       sbg:toolDefaultValue: None
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Reads to process in 1st step
#>       description: 'Number of reads to process for the 1st step. 0: 1-step only, no
#>         2nd pass; use very large number to map all reads in the first step (int>0).'
#>       streamable: no
#>       id: '#twopass1readsN'
#>       sbg:category: 2-pass mapping
#>       sbg:toolDefaultValue: '-1'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Extra alignment score
#>       description: Extra alignment score for alignments that cross database junctions.
#>       streamable: no
#>       id: '#sjdbScore'
#>       sbg:category: Splice junctions database
#>       sbg:toolDefaultValue: '2'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: '"Overhang" length'
#>       description: Length of the donor/acceptor sequence on each side of the junctions,
#>         ideally = (mate_length - 1) (int >= 0), if int = 0, splice junction database
#>         is not used.
#>       streamable: no
#>       id: '#sjdbOverhang'
#>       sbg:category: Splice junctions database
#>       sbg:toolDefaultValue: '100'
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: sjdbInsertSave
#>         symbols:
#>         - Basic
#>         - All
#>         - None
#>         type: enum
#>       label: Save junction files
#>       description: 'Which files to save when sjdb junctions are inserted on the fly
#>         at the mapping step. None: not saving files at all; Basic: only small junction/transcript
#>         files; All: all files including big Genome, SA and SAindex. These files are
#>         output as archive.'
#>       streamable: no
#>       id: '#sjdbInsertSave'
#>       sbg:category: Splice junctions database
#>       sbg:toolDefaultValue: None
#>       required: no
#>     - type:
#>       - 'null'
#>       - string
#>       label: Exons' parents name
#>       description: Tag name to be used as exons' transcript-parents.
#>       streamable: no
#>       id: '#sjdbGTFtagExonParentTranscript'
#>       sbg:category: Splice junctions database
#>       sbg:toolDefaultValue: transcript_id
#>       required: no
#>     - type:
#>       - 'null'
#>       - string
#>       label: Gene name
#>       description: Tag name to be used as exons' gene-parents.
#>       streamable: no
#>       id: '#sjdbGTFtagExonParentGene'
#>       sbg:category: Splice junctions database
#>       sbg:toolDefaultValue: gene_id
#>       required: no
#>     - type:
#>       - 'null'
#>       - items: File
#>         type: array
#>       label: Splice junction file
#>       description: Gene model annotations and/or known transcripts. No need to include
#>         this input, except in case of using "on the fly" annotations.
#>       streamable: no
#>       id: '#sjdbGTFfile'
#>       sbg:category: Basic
#>       sbg:fileTypes: GTF, GFF, TXT
#>       required: no
#>     - type:
#>       - 'null'
#>       - string
#>       label: Set exons feature
#>       description: Feature type in GTF file to be used as exons for building transcripts.
#>       streamable: no
#>       id: '#sjdbGTFfeatureExon'
#>       sbg:category: Splice junctions database
#>       sbg:toolDefaultValue: exon
#>       required: no
#>     - type:
#>       - 'null'
#>       - string
#>       label: Chromosome names
#>       description: Prefix for chromosome names in a GTF file (e.g. 'chr' for using
#>         ENSMEBL annotations with UCSC geneomes).
#>       streamable: no
#>       id: '#sjdbGTFchrPrefix'
#>       sbg:category: Splice junctions database
#>       sbg:toolDefaultValue: '-'
#>       required: no
#>     - type:
#>       - 'null'
#>       - float
#>       label: Search start point normalized
#>       description: seedSearchStartLmax normalized to read length (sum of mates' lengths
#>         for paired-end reads).
#>       streamable: no
#>       id: '#seedSearchStartLmaxOverLread'
#>       inputBinding:
#>         position: 0
#>         prefix: --seedSearchStartLmaxOverLread
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: '1.0'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Search start point
#>       description: Defines the search start point through the read - the read is split
#>         into pieces no longer than this value (int>0).
#>       streamable: no
#>       id: '#seedSearchStartLmax'
#>       inputBinding:
#>         position: 0
#>         prefix: --seedSearchStartLmax
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: '50'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Max seed length
#>       description: Defines the maximum length of the seeds, if =0 max seed length
#>         is infinite (int>=0).
#>       streamable: no
#>       id: '#seedSearchLmax'
#>       inputBinding:
#>         position: 0
#>         prefix: --seedSearchLmax
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: '0'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Max seeds per window
#>       description: Max number of seeds per window (int>=0).
#>       streamable: no
#>       id: '#seedPerWindowNmax'
#>       inputBinding:
#>         position: 0
#>         prefix: --seedPerWindowNmax
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: '50'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Max seeds per read
#>       description: Max number of seeds per read (int>=0).
#>       streamable: no
#>       id: '#seedPerReadNmax'
#>       inputBinding:
#>         position: 0
#>         prefix: --seedPerReadNmax
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: '1000'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Max one-seed loci per window
#>       description: Max number of one seed loci per window (int>=0).
#>       streamable: no
#>       id: '#seedNoneLociPerWindow'
#>       inputBinding:
#>         position: 0
#>         prefix: --seedNoneLociPerWindow
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: '10'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Filter pieces for stitching
#>       description: Only pieces that map fewer than this value are utilized in the
#>         stitching procedure (int>=0).
#>       streamable: no
#>       id: '#seedMultimapNmax'
#>       inputBinding:
#>         position: 0
#>         prefix: --seedMultimapNmax
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: '10000'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Max score reduction
#>       description: Maximum score reduction while searching for SJ boundaries in the
#>         stitching step.
#>       streamable: no
#>       id: '#scoreStitchSJshift'
#>       inputBinding:
#>         position: 0
#>         prefix: --scoreStitchSJshift
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Scoring
#>       sbg:toolDefaultValue: '1'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Insertion Open Penalty
#>       description: Insertion open penalty.
#>       streamable: no
#>       id: '#scoreInsOpen'
#>       inputBinding:
#>         position: 0
#>         prefix: --scoreInsOpen
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Scoring
#>       sbg:toolDefaultValue: '-2'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Insertion extension penalty
#>       description: Insertion extension penalty per base (in addition to --scoreInsOpen).
#>       streamable: no
#>       id: '#scoreInsBase'
#>       inputBinding:
#>         position: 0
#>         prefix: --scoreInsBase
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Scoring
#>       sbg:toolDefaultValue: '-2'
#>       required: no
#>     - type:
#>       - 'null'
#>       - float
#>       label: Log scaled score
#>       description: 'Extra score logarithmically scaled with genomic length of the
#>         alignment: <int>*log2(genomicLength).'
#>       streamable: no
#>       id: '#scoreGenomicLengthLog2scale'
#>       inputBinding:
#>         position: 0
#>         prefix: --scoreGenomicLengthLog2scale
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Scoring
#>       sbg:toolDefaultValue: '-0.25'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Non-canonical gap open
#>       description: Non-canonical gap open penalty (in addition to --scoreGap).
#>       streamable: no
#>       id: '#scoreGapNoncan'
#>       inputBinding:
#>         position: 0
#>         prefix: --scoreGapNoncan
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Scoring
#>       sbg:toolDefaultValue: '-8'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: GC/AG and CT/GC gap open
#>       description: GC/AG and CT/GC gap open penalty (in addition to --scoreGap).
#>       streamable: no
#>       id: '#scoreGapGCAG'
#>       inputBinding:
#>         position: 0
#>         prefix: --scoreGapGCAG
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Scoring
#>       sbg:toolDefaultValue: '-4'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: AT/AC and GT/AT gap open
#>       description: AT/AC and GT/AT gap open penalty (in addition to --scoreGap).
#>       streamable: no
#>       id: '#scoreGapATAC'
#>       inputBinding:
#>         position: 0
#>         prefix: --scoreGapATAC
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Scoring
#>       sbg:toolDefaultValue: '-8'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Gap open penalty
#>       description: Gap open penalty.
#>       streamable: no
#>       id: '#scoreGap'
#>       inputBinding:
#>         position: 0
#>         prefix: --scoreGap
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Scoring
#>       sbg:toolDefaultValue: '0'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Deletion open penalty
#>       description: Deletion open penalty.
#>       streamable: no
#>       id: '#scoreDelOpen'
#>       inputBinding:
#>         position: 0
#>         prefix: --scoreDelOpen
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Scoring
#>       sbg:toolDefaultValue: '-2'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Deletion extension penalty
#>       description: Deletion extension penalty per base (in addition to --scoreDelOpen).
#>       streamable: no
#>       id: '#scoreDelBase'
#>       inputBinding:
#>         position: 0
#>         prefix: --scoreDelBase
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Scoring
#>       sbg:toolDefaultValue: '-2'
#>       required: no
#>     - type:
#>       - 'null'
#>       - string
#>       label: Sequencing center
#>       description: Specify the sequencing center for RG line.
#>       streamable: no
#>       id: '#rg_seq_center'
#>       sbg:category: Read group
#>       sbg:toolDefaultValue: Inferred from metadata
#>       required: no
#>     - type:
#>       - 'null'
#>       - string
#>       label: Sample ID
#>       description: Specify the sample ID for RG line.
#>       streamable: no
#>       id: '#rg_sample_id'
#>       sbg:category: Read group
#>       sbg:toolDefaultValue: Inferred from metadata
#>       required: no
#>     - type:
#>       - 'null'
#>       - string
#>       label: Platform unit ID
#>       description: Specify the platform unit ID for RG line.
#>       streamable: no
#>       id: '#rg_platform_unit_id'
#>       sbg:category: Read group
#>       sbg:toolDefaultValue: Inferred from metadata
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: rg_platform
#>         symbols:
#>         - LS 454
#>         - Helicos
#>         - Illumina
#>         - ABI SOLiD
#>         - Ion Torrent PGM
#>         - PacBio
#>         type: enum
#>       label: Platform
#>       description: Specify the version of the technology that was used for sequencing
#>         or assaying.
#>       streamable: no
#>       id: '#rg_platform'
#>       sbg:category: Read group
#>       sbg:toolDefaultValue: Inferred from metadata
#>       required: no
#>     - type:
#>       - 'null'
#>       - string
#>       label: Median fragment length
#>       description: Specify the median fragment length for RG line.
#>       streamable: no
#>       id: '#rg_mfl'
#>       sbg:category: Read group
#>       sbg:toolDefaultValue: Inferred from metadata
#>       required: no
#>     - type:
#>       - 'null'
#>       - string
#>       label: Library ID
#>       description: Specify the library ID for RG line.
#>       streamable: no
#>       id: '#rg_library_id'
#>       sbg:category: Read group
#>       sbg:toolDefaultValue: Inferred from metadata
#>       required: no
#>     - type:
#>       - items: File
#>         type: array
#>       label: Read sequence
#>       description: Read sequence.
#>       streamable: no
#>       id: '#reads'
#>       inputBinding:
#>         position: 10
#>         separate: yes
#>         itemSeparator: ' '
#>         valueFrom:
#>           engine: '#cwl-js-engine'
#>           script: "{\t\n  var list = [].concat($job.inputs.reads)\n  \n  var resp
#>             = []\n  \n  if (list.length == 1){\n    resp.push(list[0].path)\n    \n
#>             \ }else if (list.length == 2){    \n    \n    left = \"\"\n    right =
#>             \"\"\n      \n    for (index = 0; index < list.length; ++index) {\n      \n
#>             \     if (list[index].metadata != null){\n        if (list[index].metadata.paired_end
#>             == 1){\n          left = list[index].path\n        }else if (list[index].metadata.paired_end
#>             == 2){\n          right = list[index].path\n        }\n      }\n    }\n
#>             \   \n    if (left != \"\" && right != \"\"){      \n      resp.push(left)\n
#>             \     resp.push(right)\n    }\n  }\n  else if (list.length > 2){\n    left
#>             = []\n    right = []\n      \n    for (index = 0; index < list.length;
#>             ++index) {\n      \n      if (list[index].metadata != null){\n        if
#>             (list[index].metadata.paired_end == 1){\n          left.push(list[index].path)\n
#>             \       }else if (list[index].metadata.paired_end == 2){\n          right.push(list[index].path)\n
#>             \       }\n      }\n    }\n    left_join = left.join()\n    right_join
#>             = right.join()\n    if (left != [] && right != []){      \n      resp.push(left_join)\n
#>             \     resp.push(right_join)\n    }\t\n  }\n  \n  if(resp.length > 0){
#>             \   \n    return \"--readFilesIn \".concat(resp.join(\" \"))\n  }\n}"
#>           class: Expression
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Basic
#>       sbg:fileTypes: FASTA, FASTQ, FA, FQ, FASTQ.GZ, FQ.GZ, FASTQ.BZ2, FQ.BZ2
#>       sbg:x: 200.0
#>       sbg:y: 200.0
#>       sbg:includeInPorts: yes
#>       required: yes
#>     - type:
#>       - 'null'
#>       - name: readMatesLengthsIn
#>         symbols:
#>         - NotEqual
#>         - Equal
#>         type: enum
#>       label: Reads lengths
#>       description: Equal/Not equal - lengths of names, sequences, qualities for both
#>         mates are the same/not the same. "Not equal" is safe in all situations.
#>       streamable: no
#>       id: '#readMatesLengthsIn'
#>       inputBinding:
#>         position: 0
#>         prefix: --readMatesLengthsIn
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Read parameters
#>       sbg:toolDefaultValue: NotEqual
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Reads to map
#>       description: Number of reads to map from the beginning of the file.
#>       streamable: no
#>       id: '#readMapNumber'
#>       inputBinding:
#>         position: 0
#>         prefix: --readMapNumber
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Read parameters
#>       sbg:toolDefaultValue: '-1'
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: quantTranscriptomeBan
#>         symbols:
#>         - IndelSoftclipSingleend
#>         - Singleend
#>         type: enum
#>       label: Prohibit alignment type
#>       description: 'Prohibit various alignment type. IndelSoftclipSingleend: prohibit
#>         indels, soft clipping and single-end alignments - compatible with RSEM; Singleend:
#>         prohibit single-end alignments.'
#>       streamable: no
#>       id: '#quantTranscriptomeBan'
#>       inputBinding:
#>         position: 0
#>         prefix: --quantTranscriptomeBan
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Quantification of Annotations
#>       sbg:toolDefaultValue: IndelSoftclipSingleend
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: quantMode
#>         symbols:
#>         - TranscriptomeSAM
#>         - GeneCounts
#>         type: enum
#>       label: Quantification mode
#>       description: Types of quantification requested. 'TranscriptomeSAM' option outputs
#>         SAM/BAM alignments to transcriptome into a separate file. With 'GeneCounts'
#>         option, STAR will count number of reads per gene while mapping.
#>       streamable: no
#>       id: '#quantMode'
#>       sbg:category: Quantification of Annotations
#>       sbg:toolDefaultValue: '-'
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: outSortingType
#>         symbols:
#>         - Unsorted
#>         - SortedByCoordinate
#>         - Unsorted SortedByCoordinate
#>         type: enum
#>       label: Output sorting type
#>       description: Type of output sorting.
#>       streamable: no
#>       id: '#outSortingType'
#>       sbg:category: Output
#>       sbg:toolDefaultValue: SortedByCoordinate
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: outSJfilterReads
#>         symbols:
#>         - All
#>         - Unique
#>         type: enum
#>       label: Collapsed junctions reads
#>       description: 'Which reads to consider for collapsed splice junctions output.
#>         All: all reads, unique- and multi-mappers; Unique: uniquely mapping reads
#>         only.'
#>       streamable: no
#>       id: '#outSJfilterReads'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSJfilterReads
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: 'Output filtering: splice junctions'
#>       sbg:toolDefaultValue: All
#>       required: no
#>     - type:
#>       - 'null'
#>       - items: int
#>         type: array
#>       label: Min overhang SJ
#>       description: Minimum overhang length for splice junctions on both sides for
#>         each of the motifs. To set no output for desired motif, assign -1 to the corresponding
#>         field. Does not apply to annotated junctions.
#>       streamable: no
#>       id: '#outSJfilterOverhangMin'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSJfilterOverhangMin
#>         separate: yes
#>         itemSeparator: ' '
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: 'Output filtering: splice junctions'
#>       sbg:toolDefaultValue: 30 12 12 12
#>       required: no
#>     - type:
#>       - 'null'
#>       - items: int
#>         type: array
#>       label: Max gap allowed
#>       description: 'Maximum gap allowed for junctions supported by 1,2,3...N reads
#>         (int >= 0) i.e. by default junctions supported by 1 read can have gaps <=50000b,
#>         by 2 reads: <=100000b, by 3 reads: <=200000. By 4 or more reads: any gap <=alignIntronMax.
#>         Does not apply to annotated junctions.'
#>       streamable: no
#>       id: '#outSJfilterIntronMaxVsReadN'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSJfilterIntronMaxVsReadN
#>         separate: yes
#>         itemSeparator: ' '
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: 'Output filtering: splice junctions'
#>       sbg:toolDefaultValue: 50000 100000 200000
#>       required: no
#>     - type:
#>       - 'null'
#>       - items: int
#>         type: array
#>       label: Min distance to other donor/acceptor
#>       description: Minimum allowed distance to other junctions' donor/acceptor for
#>         each of the motifs (int >= 0). Does not apply to annotated junctions.
#>       streamable: no
#>       id: '#outSJfilterDistToOtherSJmin'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSJfilterDistToOtherSJmin
#>         separate: yes
#>         itemSeparator: ' '
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: 'Output filtering: splice junctions'
#>       sbg:toolDefaultValue: 10 0 5 10
#>       required: no
#>     - type:
#>       - 'null'
#>       - items: int
#>         type: array
#>       label: Min unique count
#>       description: Minimum uniquely mapping read count per junction for each of the
#>         motifs. To set no output for desired motif, assign -1 to the corresponding
#>         field. Junctions are output if one of --outSJfilterCountUniqueMin OR --outSJfilterCountTotalMin
#>         conditions are satisfied. Does not apply to annotated junctions.
#>       streamable: no
#>       id: '#outSJfilterCountUniqueMin'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSJfilterCountUniqueMin
#>         separate: yes
#>         itemSeparator: ' '
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: 'Output filtering: splice junctions'
#>       sbg:toolDefaultValue: 3 1 1 1
#>       required: no
#>     - type:
#>       - 'null'
#>       - items: int
#>         type: array
#>       label: Min total count
#>       description: Minimum total (multi-mapping+unique) read count per junction for
#>         each of the motifs. To set no output for desired motif, assign -1 to the corresponding
#>         field. Junctions are output if one of --outSJfilterCountUniqueMin OR --outSJfilterCountTotalMin
#>         conditions are satisfied. Does not apply to annotated junctions.
#>       streamable: no
#>       id: '#outSJfilterCountTotalMin'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSJfilterCountTotalMin
#>         separate: yes
#>         itemSeparator: ' '
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: 'Output filtering: splice junctions'
#>       sbg:toolDefaultValue: 3 1 1 1
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: outSAMunmapped
#>         symbols:
#>         - None
#>         - Within
#>         type: enum
#>       label: Write unmapped in SAM
#>       description: 'Output of unmapped reads in the SAM format. None: no output Within:
#>         output unmapped reads within the main SAM file (i.e. Aligned.out.sam).'
#>       streamable: no
#>       id: '#outSAMunmapped'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSAMunmapped
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output
#>       sbg:toolDefaultValue: None
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: outSAMtype
#>         symbols:
#>         - SAM
#>         - BAM
#>         type: enum
#>       label: Output format
#>       description: Format of output alignments.
#>       streamable: no
#>       id: '#outSAMtype'
#>       inputBinding:
#>         position: 0
#>         separate: yes
#>         valueFrom:
#>           engine: '#cwl-js-engine'
#>           script: |-
#>             {
#>               SAM_type = $job.inputs.outSAMtype
#>               SORT_type = $job.inputs.outSortingType
#>               if (SAM_type && SORT_type) {
#>                 return "--outSAMtype ".concat(SAM_type, " ", SORT_type)
#>               }
#>             }
#>           class: Expression
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output
#>       sbg:toolDefaultValue: SAM
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: outSAMstrandField
#>         symbols:
#>         - None
#>         - intronMotif
#>         type: enum
#>       label: Strand field flag
#>       description: 'Cufflinks-like strand field flag. None: not used; intronMotif:
#>         strand derived from the intron motif. Reads with inconsistent and/or non-canonical
#>         introns are filtered out.'
#>       streamable: no
#>       id: '#outSAMstrandField'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSAMstrandField
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output
#>       sbg:toolDefaultValue: None
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: outSAMreadID
#>         symbols:
#>         - Standard
#>         - Number
#>         type: enum
#>       label: Read ID
#>       description: 'Read ID record type. Standard: first word (until space) from the
#>         FASTx read ID line, removing /1,/2 from the end; Number: read number (index)
#>         in the FASTx file.'
#>       streamable: no
#>       id: '#outSAMreadID'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSAMreadID
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output
#>       sbg:toolDefaultValue: Standard
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: outSAMprimaryFlag
#>         symbols:
#>         - OneBestScore
#>         - AllBestScore
#>         type: enum
#>       label: Primary alignments
#>       description: 'Which alignments are considered primary - all others will be marked
#>         with 0x100 bit in the FLAG. OneBestScore: only one alignment with the best
#>         score is primary; AllBestScore: all alignments with the best score are primary.'
#>       streamable: no
#>       id: '#outSAMprimaryFlag'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSAMprimaryFlag
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output
#>       sbg:toolDefaultValue: OneBestScore
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: outSAMorder
#>         symbols:
#>         - Paired
#>         - PairedKeepInputOrder
#>         type: enum
#>       label: Sorting in SAM
#>       description: 'Type of sorting for the SAM output. Paired: one mate after the
#>         other for all paired alignments; PairedKeepInputOrder: one mate after the
#>         other for all paired alignments, the order is kept the same as in the input
#>         FASTQ files.'
#>       streamable: no
#>       id: '#outSAMorder'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSAMorder
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output
#>       sbg:toolDefaultValue: Paired
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: outSAMmode
#>         symbols:
#>         - Full
#>         - NoQS
#>         type: enum
#>       label: SAM mode
#>       description: 'Mode of SAM output. Full: full SAM output; NoQS: full SAM but
#>         without quality scores.'
#>       streamable: no
#>       id: '#outSAMmode'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSAMmode
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output
#>       sbg:toolDefaultValue: Full
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: MAPQ value
#>       description: MAPQ value for unique mappers (0 to 255).
#>       streamable: no
#>       id: '#outSAMmapqUnique'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSAMmapqUnique
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output
#>       sbg:toolDefaultValue: '255'
#>       required: no
#>     - type:
#>       - 'null'
#>       - string
#>       label: SAM header @PG
#>       description: Extra @PG (software) line of the SAM header (in addition to STAR).
#>       streamable: no
#>       id: '#outSAMheaderPG'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSAMheaderPG
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output
#>       sbg:toolDefaultValue: '-'
#>       required: no
#>     - type:
#>       - 'null'
#>       - string
#>       label: SAM header @HD
#>       description: '@HD (header) line of the SAM header.'
#>       streamable: no
#>       id: '#outSAMheaderHD'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSAMheaderHD
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output
#>       sbg:toolDefaultValue: '-'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: OR SAM flag
#>       description: Set specific bits of the SAM FLAG.
#>       streamable: no
#>       id: '#outSAMflagOR'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSAMflagOR
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output
#>       sbg:toolDefaultValue: '0'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: AND SAM flag
#>       description: Set specific bits of the SAM FLAG.
#>       streamable: no
#>       id: '#outSAMflagAND'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSAMflagAND
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output
#>       sbg:toolDefaultValue: '65535'
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: outSAMattributes
#>         symbols:
#>         - Standard
#>         - NH
#>         - All
#>         - None
#>         type: enum
#>       label: SAM attributes
#>       description: 'Desired SAM attributes, in the order desired for the output SAM.
#>         NH: any combination in any order; Standard: NH HI AS nM; All: NH HI AS nM
#>         NM MD jM jI; None: no attributes.'
#>       streamable: no
#>       id: '#outSAMattributes'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSAMattributes
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output
#>       sbg:toolDefaultValue: Standard
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: outReadsUnmapped
#>         symbols:
#>         - None
#>         - Fastx
#>         type: enum
#>       label: Output unmapped reads
#>       description: 'Output of unmapped reads (besides SAM). None: no output; Fastx:
#>         output in separate fasta/fastq files, Unmapped.out.mate1/2.'
#>       streamable: no
#>       id: '#outReadsUnmapped'
#>       inputBinding:
#>         position: 0
#>         prefix: --outReadsUnmapped
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output
#>       sbg:toolDefaultValue: None
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Quality conversion
#>       description: Add this number to the quality score (e.g. to convert from Illumina
#>         to Sanger, use -31).
#>       streamable: no
#>       id: '#outQSconversionAdd'
#>       inputBinding:
#>         position: 0
#>         prefix: --outQSconversionAdd
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output
#>       sbg:toolDefaultValue: '0'
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: outFilterType
#>         symbols:
#>         - Normal
#>         - BySJout
#>         type: enum
#>       label: Filtering type
#>       description: 'Type of filtering. Normal: standard filtering using only current
#>         alignment; BySJout: keep only those reads that contain junctions that passed
#>         filtering into SJ.out.tab.'
#>       streamable: no
#>       id: '#outFilterType'
#>       inputBinding:
#>         position: 0
#>         prefix: --outFilterType
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output filtering
#>       sbg:toolDefaultValue: Normal
#>       required: no
#>     - type:
#>       - 'null'
#>       - float
#>       label: Min score normalized
#>       description: '''Minimum score'' normalized to read length (sum of mates'' lengths
#>         for paired-end reads).'
#>       streamable: no
#>       id: '#outFilterScoreMinOverLread'
#>       inputBinding:
#>         position: 0
#>         prefix: --outFilterScoreMinOverLread
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output filtering
#>       sbg:toolDefaultValue: '0.66'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Min score
#>       description: Alignment will be output only if its score is higher than this
#>         value.
#>       streamable: no
#>       id: '#outFilterScoreMin'
#>       inputBinding:
#>         position: 0
#>         prefix: --outFilterScoreMin
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output filtering
#>       sbg:toolDefaultValue: '0'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Multimapping score range
#>       description: The score range below the maximum score for multimapping alignments.
#>       streamable: no
#>       id: '#outFilterMultimapScoreRange'
#>       inputBinding:
#>         position: 0
#>         prefix: --outFilterMultimapScoreRange
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output filtering
#>       sbg:toolDefaultValue: '1'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Max number of mappings
#>       description: Read alignments will be output only if the read maps fewer than
#>         this value, otherwise no alignments will be output.
#>       streamable: no
#>       id: '#outFilterMultimapNmax'
#>       inputBinding:
#>         position: 0
#>         prefix: --outFilterMultimapNmax
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output filtering
#>       sbg:toolDefaultValue: '10'
#>       required: no
#>     - type:
#>       - 'null'
#>       - float
#>       label: Mismatches to *read* length
#>       description: Alignment will be output only if its ratio of mismatches to *read*
#>         length is less than this value.
#>       streamable: no
#>       id: '#outFilterMismatchNoverReadLmax'
#>       inputBinding:
#>         position: 0
#>         prefix: --outFilterMismatchNoverReadLmax
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output filtering
#>       sbg:toolDefaultValue: '1'
#>       required: no
#>     - type:
#>       - 'null'
#>       - float
#>       label: Mismatches to *mapped* length
#>       description: Alignment will be output only if its ratio of mismatches to *mapped*
#>         length is less than this value.
#>       streamable: no
#>       id: '#outFilterMismatchNoverLmax'
#>       inputBinding:
#>         position: 0
#>         prefix: --outFilterMismatchNoverLmax
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output filtering
#>       sbg:toolDefaultValue: '0.3'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Max number of mismatches
#>       description: Alignment will be output only if it has fewer mismatches than this
#>         value.
#>       streamable: no
#>       id: '#outFilterMismatchNmax'
#>       inputBinding:
#>         position: 0
#>         prefix: --outFilterMismatchNmax
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output filtering
#>       sbg:toolDefaultValue: '10'
#>       required: no
#>     - type:
#>       - 'null'
#>       - float
#>       label: Min matched bases normalized
#>       description: '''Minimum matched bases'' normalized to read length (sum of mates
#>         lengths for paired-end reads).'
#>       streamable: no
#>       id: '#outFilterMatchNminOverLread'
#>       inputBinding:
#>         position: 0
#>         prefix: --outFilterMatchNminOverLread
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output filtering
#>       sbg:toolDefaultValue: '0.66'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Min matched bases
#>       description: Alignment will be output only if the number of matched bases is
#>         higher than this value.
#>       streamable: no
#>       id: '#outFilterMatchNmin'
#>       inputBinding:
#>         position: 0
#>         prefix: --outFilterMatchNmin
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output filtering
#>       sbg:toolDefaultValue: '0'
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: outFilterIntronMotifs
#>         symbols:
#>         - None
#>         - RemoveNoncanonical
#>         - RemoveNoncanonicalUnannotated
#>         type: enum
#>       label: Motifs filtering
#>       description: 'Filter alignment using their motifs. None: no filtering; RemoveNoncanonical:
#>         filter out alignments that contain non-canonical junctions; RemoveNoncanonicalUnannotated:
#>         filter out alignments that contain non-canonical unannotated junctions when
#>         using annotated splice junctions database. The annotated non-canonical junctions
#>         will be kept.'
#>       streamable: no
#>       id: '#outFilterIntronMotifs'
#>       inputBinding:
#>         position: 0
#>         prefix: --outFilterIntronMotifs
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output filtering
#>       sbg:toolDefaultValue: None
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Max insert junctions
#>       description: Maximum number of junction to be inserted to the genome on the
#>         fly at the mapping stage, including those from annotations and those detected
#>         in the 1st step of the 2-pass run.
#>       streamable: no
#>       id: '#limitSjdbInsertNsj'
#>       inputBinding:
#>         position: 0
#>         prefix: --limitSjdbInsertNsj
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Limits
#>       sbg:toolDefaultValue: '1000000'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Junctions max number
#>       description: Max number of junctions for one read (including all multi-mappers).
#>       streamable: no
#>       id: '#limitOutSJoneRead'
#>       inputBinding:
#>         position: 0
#>         prefix: --limitOutSJoneRead
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Limits
#>       sbg:toolDefaultValue: '1000'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Collapsed junctions max number
#>       description: Max number of collapsed junctions.
#>       streamable: no
#>       id: '#limitOutSJcollapsed'
#>       inputBinding:
#>         position: 0
#>         prefix: --limitOutSJcollapsed
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Limits
#>       sbg:toolDefaultValue: '1000000'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Limit BAM sorting memory
#>       description: Maximum available RAM for sorting BAM. If set to 0, it will be
#>         set to the genome index size.
#>       streamable: no
#>       id: '#limitBAMsortRAM'
#>       inputBinding:
#>         position: 0
#>         prefix: --limitBAMsortRAM
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Limits
#>       sbg:toolDefaultValue: '0'
#>       required: no
#>     - type:
#>       - 'null'
#>       - string
#>       label: Genome dir name
#>       description: Name of the directory which contains genome files (when genome.tar
#>         is uncompressed).
#>       streamable: no
#>       id: '#genomeDirName'
#>       inputBinding:
#>         position: 0
#>         prefix: --genomeDir
#>         separate: yes
#>         valueFrom:
#>           engine: '#cwl-js-engine'
#>           script: $job.inputs.genomeDirName || "genomeDir"
#>           class: Expression
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Basic
#>       sbg:toolDefaultValue: genomeDir
#>       required: no
#>     - type:
#>       - File
#>       label: Genome files
#>       description: Genome files created using STAR Genome Generate.
#>       streamable: no
#>       id: '#genome'
#>       sbg:category: Basic
#>       sbg:fileTypes: TAR
#>       required: yes
#>     - type:
#>       - 'null'
#>       - items: int
#>         type: array
#>       label: Clip 5p bases
#>       description: Number of bases to clip from 5p of each mate. In case only one
#>         value is given, it will be assumed the same for both mates.
#>       streamable: no
#>       id: '#clip5pNbases'
#>       inputBinding:
#>         position: 0
#>         prefix: --clip5pNbases
#>         separate: yes
#>         itemSeparator: ' '
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Read parameters
#>       sbg:toolDefaultValue: '0'
#>       required: no
#>     - type:
#>       - 'null'
#>       - items: int
#>         type: array
#>       label: Clip 3p bases
#>       description: Number of bases to clip from 3p of each mate. In case only one
#>         value is given, it will be assumed the same for both mates.
#>       streamable: no
#>       id: '#clip3pNbases'
#>       inputBinding:
#>         position: 0
#>         prefix: --clip3pNbases
#>         separate: yes
#>         itemSeparator: ' '
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Read parameters
#>       sbg:toolDefaultValue: '0'
#>       required: no
#>     - type:
#>       - 'null'
#>       - items: int
#>         type: array
#>       label: Clip 3p after adapter seq.
#>       description: Number of bases to clip from 3p of each mate after the adapter
#>         clipping. In case only one value is given, it will be assumed the same for
#>         both mates.
#>       streamable: no
#>       id: '#clip3pAfterAdapterNbases'
#>       inputBinding:
#>         position: 0
#>         prefix: --clip3pAfterAdapterNbases
#>         separate: yes
#>         itemSeparator: ' '
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Read parameters
#>       sbg:toolDefaultValue: '0'
#>       required: no
#>     - type:
#>       - 'null'
#>       - items: string
#>         type: array
#>       label: Clip 3p adapter sequence
#>       description: Adapter sequence to clip from 3p of each mate. In case only one
#>         value is given, it will be assumed the same for both mates.
#>       streamable: no
#>       id: '#clip3pAdapterSeq'
#>       inputBinding:
#>         position: 0
#>         prefix: --clip3pAdapterSeq
#>         separate: yes
#>         itemSeparator: ' '
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Read parameters
#>       sbg:toolDefaultValue: '-'
#>       required: no
#>     - type:
#>       - 'null'
#>       - items: float
#>         type: array
#>       label: Max mismatches proportions
#>       description: Max proportion of mismatches for 3p adapter clipping for each mate.
#>         In case only one value is given, it will be assumed the same for both mates.
#>       streamable: no
#>       id: '#clip3pAdapterMMp'
#>       inputBinding:
#>         position: 0
#>         prefix: --clip3pAdapterMMp
#>         separate: yes
#>         itemSeparator: ' '
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Read parameters
#>       sbg:toolDefaultValue: '0.1'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Min segment length
#>       description: Minimum length of chimeric segment length, if =0, no chimeric output
#>         (int>=0).
#>       streamable: no
#>       id: '#chimSegmentMin'
#>       inputBinding:
#>         position: 0
#>         prefix: --chimSegmentMin
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Chimeric Alignments
#>       sbg:toolDefaultValue: '15'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Min separation score
#>       description: Minimum difference (separation) between the best chimeric score
#>         and the next one (int>=0).
#>       streamable: no
#>       id: '#chimScoreSeparation'
#>       inputBinding:
#>         position: 0
#>         prefix: --chimScoreSeparation
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Chimeric Alignments
#>       sbg:includeInPorts: no
#>       sbg:toolDefaultValue: '10'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Min total score
#>       description: Minimum total (summed) score of the chimeric segments (int>=0).
#>       streamable: no
#>       id: '#chimScoreMin'
#>       inputBinding:
#>         position: 0
#>         prefix: --chimScoreMin
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Chimeric Alignments
#>       sbg:toolDefaultValue: '0'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Non-GT/AG penalty
#>       description: Penalty for a non-GT/AG chimeric junction.
#>       streamable: no
#>       id: '#chimScoreJunctionNonGTAG'
#>       inputBinding:
#>         position: 0
#>         prefix: --chimScoreJunctionNonGTAG
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Chimeric Alignments
#>       sbg:toolDefaultValue: '-1'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Max drop score
#>       description: Max drop (difference) of chimeric score (the sum of scores of all
#>         chimeric segements) from the read length (int>=0).
#>       streamable: no
#>       id: '#chimScoreDropMax'
#>       inputBinding:
#>         position: 0
#>         prefix: --chimScoreDropMax
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Chimeric Alignments
#>       sbg:toolDefaultValue: '20'
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: chimOutType
#>         symbols:
#>         - SeparateSAMold
#>         - Within
#>         type: enum
#>       label: Chimeric output type
#>       description: 'Type of chimeric output. SeparateSAMold: output old SAM into separate
#>         Chimeric.out.sam file; Within: output into main aligned SAM/BAM files.'
#>       streamable: no
#>       id: '#chimOutType'
#>       sbg:category: Chimeric Alignments
#>       sbg:toolDefaultValue: SeparateSAMold
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Min junction overhang
#>       description: Minimum overhang for a chimeric junction (int>=0).
#>       streamable: no
#>       id: '#chimJunctionOverhangMin'
#>       inputBinding:
#>         position: 0
#>         prefix: --chimJunctionOverhangMin
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Chimeric Alignments
#>       sbg:toolDefaultValue: '20'
#>       required: no
#>     - type:
#>       - 'null'
#>       - float
#>       label: Max windows per read
#>       description: Max number of windows per read (int>0).
#>       streamable: no
#>       id: '#alignWindowsPerReadNmax'
#>       inputBinding:
#>         position: 0
#>         prefix: --alignWindowsPerReadNmax
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: '10000'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Max transcripts per window
#>       description: Max number of transcripts per window (int>0).
#>       streamable: no
#>       id: '#alignTranscriptsPerWindowNmax'
#>       inputBinding:
#>         position: 0
#>         prefix: --alignTranscriptsPerWindowNmax
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: '100'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Max transcripts per read
#>       description: Max number of different alignments per read to consider (int>0).
#>       streamable: no
#>       id: '#alignTranscriptsPerReadNmax'
#>       inputBinding:
#>         position: 0
#>         prefix: --alignTranscriptsPerReadNmax
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: '10000'
#>       required: no
#>     - type:
#>       - 'null'
#>       - float
#>       label: Min mapped length normalized
#>       description: alignSplicedMateMapLmin normalized to mate length (float>0).
#>       streamable: no
#>       id: '#alignSplicedMateMapLminOverLmate'
#>       inputBinding:
#>         position: 0
#>         prefix: --alignSplicedMateMapLminOverLmate
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: '0.66'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Min mapped length
#>       description: Minimum mapped length for a read mate that is spliced (int>0).
#>       streamable: no
#>       id: '#alignSplicedMateMapLmin'
#>       inputBinding:
#>         position: 0
#>         prefix: --alignSplicedMateMapLmin
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: '0'
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: alignSoftClipAtReferenceEnds
#>         symbols:
#>         - 'Yes'
#>         - 'No'
#>         type: enum
#>       label: Soft clipping
#>       description: 'Option which allows soft clipping of alignments at the reference
#>         (chromosome) ends. Can be disabled for compatibility with Cufflinks/Cuffmerge.
#>         Yes: Enables soft clipping; No: Disables soft clipping.'
#>       streamable: no
#>       id: '#alignSoftClipAtReferenceEnds'
#>       inputBinding:
#>         position: 0
#>         prefix: --alignSoftClipAtReferenceEnds
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: 'Yes'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Min overhang
#>       description: Minimum overhang (i.e. block size) for spliced alignments (int>0).
#>       streamable: no
#>       id: '#alignSJoverhangMin'
#>       inputBinding:
#>         position: 0
#>         prefix: --alignSJoverhangMin
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: '5'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: 'Min overhang: annotated'
#>       description: Minimum overhang (i.e. block size) for annotated (sjdb) spliced
#>         alignments (int>0).
#>       streamable: no
#>       id: '#alignSJDBoverhangMin'
#>       inputBinding:
#>         position: 0
#>         prefix: --alignSJDBoverhangMin
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:includeInPorts: no
#>       sbg:toolDefaultValue: '3'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Max mates gap
#>       description: Maximum gap between two mates, if 0, max intron gap will be determined
#>         by (2^winBinNbits)*winAnchorDistNbins.
#>       streamable: no
#>       id: '#alignMatesGapMax'
#>       inputBinding:
#>         position: 0
#>         prefix: --alignMatesGapMax
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: '0'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Min intron size
#>       description: 'Minimum intron size: genomic gap is considered intron if its length
#>         >= alignIntronMin, otherwise it is considered Deletion (int>=0).'
#>       streamable: no
#>       id: '#alignIntronMin'
#>       inputBinding:
#>         position: 0
#>         prefix: --alignIntronMin
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: '21'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Max intron size
#>       description: Maximum intron size, if 0, max intron size will be determined by
#>         (2^winBinNbits)*winAnchorDistNbins.
#>       streamable: no
#>       id: '#alignIntronMax'
#>       inputBinding:
#>         position: 0
#>         prefix: --alignIntronMax
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: '0'
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: alignEndsType
#>         symbols:
#>         - Local
#>         - EndToEnd
#>         type: enum
#>       label: Alignment type
#>       description: 'Type of read ends alignment. Local: standard local alignment with
#>         soft-clipping allowed. EndToEnd: force end to end read alignment, do not soft-clip.'
#>       streamable: no
#>       id: '#alignEndsType'
#>       inputBinding:
#>         position: 0
#>         prefix: --alignEndsType
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: Local
#>       required: no
#>     outputs:
#>     - type:
#>       - 'null'
#>       - items: File
#>         type: array
#>       label: Unmapped reads
#>       description: Output of unmapped reads.
#>       streamable: no
#>       id: '#unmapped_reads'
#>       outputBinding:
#>         glob: '*Unmapped.out*'
#>       sbg:fileTypes: FASTQ
#>     - type:
#>       - 'null'
#>       - File
#>       label: Transcriptome alignments
#>       description: Alignments translated into transcript coordinates.
#>       streamable: no
#>       id: '#transcriptome_aligned_reads'
#>       outputBinding:
#>         glob: '*Transcriptome*'
#>       sbg:fileTypes: BAM
#>     - type:
#>       - 'null'
#>       - File
#>       label: Splice junctions
#>       description: High confidence collapsed splice junctions in tab-delimited format.
#>         Only junctions supported by uniquely mapping reads are reported.
#>       streamable: no
#>       id: '#splice_junctions'
#>       outputBinding:
#>         glob: '*SJ.out.tab'
#>       sbg:fileTypes: TAB
#>     - type:
#>       - 'null'
#>       - File
#>       label: Reads per gene
#>       description: File with number of reads per gene. A read is counted if it overlaps
#>         (1nt or more) one and only one gene.
#>       streamable: no
#>       id: '#reads_per_gene'
#>       outputBinding:
#>         glob: '*ReadsPerGene*'
#>       sbg:fileTypes: TAB
#>     - type:
#>       - 'null'
#>       - items: File
#>         type: array
#>       label: Log files
#>       description: Log files produced during alignment.
#>       streamable: no
#>       id: '#log_files'
#>       outputBinding:
#>         glob: '*Log*.out'
#>       sbg:fileTypes: OUT
#>     - type:
#>       - 'null'
#>       - File
#>       label: Intermediate genome files
#>       description: Archive with genome files produced when annotations are included
#>         on the fly (in the mapping step).
#>       streamable: no
#>       id: '#intermediate_genome'
#>       outputBinding:
#>         glob: '*_STARgenome.tar'
#>       sbg:fileTypes: TAR
#>     - type:
#>       - 'null'
#>       - File
#>       label: Chimeric junctions
#>       description: If chimSegmentMin in 'Chimeric Alignments' section is set to 0,
#>         'Chimeric Junctions' won't be output.
#>       streamable: no
#>       id: '#chimeric_junctions'
#>       outputBinding:
#>         glob: '*Chimeric.out.junction'
#>       sbg:fileTypes: JUNCTION
#>     - type:
#>       - 'null'
#>       - File
#>       label: Chimeric alignments
#>       description: Aligned Chimeric sequences SAM - if chimSegmentMin = 0, no Chimeric
#>         Alignment SAM and Chimeric Junctions outputs.
#>       streamable: no
#>       id: '#chimeric_alignments'
#>       outputBinding:
#>         glob: '*.Chimeric.out.sam'
#>       sbg:fileTypes: SAM
#>     - type:
#>       - 'null'
#>       - File
#>       label: Aligned SAM/BAM
#>       description: Aligned sequence in SAM/BAM format.
#>       streamable: no
#>       id: '#aligned_reads'
#>       outputBinding:
#>         glob:
#>           engine: '#cwl-js-engine'
#>           script: |-
#>             {
#>               if ($job.inputs.outSortingType == 'SortedByCoordinate') {
#>                 sort_name = '.sortedByCoord'
#>               }
#>               else {
#>                 sort_name = ''
#>               }
#>               if ($job.inputs.outSAMtype == 'BAM') {
#>                 sam_name = "*.Aligned".concat( sort_name, '.out.bam')
#>               }
#>               else {
#>                 sam_name = "*.Aligned.out.sam"
#>               }
#>               return sam_name
#>             }
#>           class: Expression
#>       sbg:fileTypes: SAM, BAM
#>     requirements:
#>     - class: ExpressionEngineRequirement
#>       id: '#cwl-js-engine'
#>       requirements:
#>       - class: DockerRequirement
#>         dockerPull: rabix/js-engine
#>     hints:
#>     - class: DockerRequirement
#>       dockerPull: images.sbgenomics.com/ana_d/star:2.4.2a
#>       dockerImageId: a4b0ad2c3cae
#>     - class: sbg:MemRequirement
#>       value: 60000
#>     - class: sbg:CPURequirement
#>       value: 15
#>     label: STAR
#>     description: STAR is an ultrafast universal RNA-seq aligner. It has very high
#>       mapping speed, accurate alignment of contiguous and spliced reads, detection
#>       of polyA-tails, non-canonical splices and chimeric (fusion) junctions. It works
#>       with reads starting from lengths ~15 bases up to ~300 bases. In case of having
#>       longer reads, use of STAR Long is recommended.
#>     class: CommandLineTool
#>     baseCommand:
#>     - tar
#>     - -xvf
#>     - class: Expression
#>       script: $job.inputs.genome.path
#>       engine: '#cwl-js-engine'
#>     - '&&'
#>     - /opt/STAR
#>     - --runThreadN
#>     - class: Expression
#>       script: |-
#>         {
#>           return $job.allocatedResources.cpu
#>         }
#>       engine: '#cwl-js-engine'
#>     arguments:
#>     - position: 0
#>       separate: yes
#>       valueFrom:
#>         engine: '#cwl-js-engine'
#>         script: |-
#>           {
#>             file = [].concat($job.inputs.reads)[0].path
#>             extension = /(?:\.([^.]+))?$/.exec(file)[1]
#>             if (extension == "gz") {
#>               return "--readFilesCommand zcat"
#>             } else if (extension == "bz2") {
#>               return "--readFilesCommand bzcat"
#>             }
#>           }
#>         class: Expression
#>     - position: 0
#>       separate: yes
#>       valueFrom:
#>         engine: '#cwl-js-engine'
#>         script: "{\t\n  var sjFormat = \"False\"\n  var gtfgffFormat = \"False\"\n
#>           \ var list = $job.inputs.sjdbGTFfile\n  var paths_list = []\n  var joined_paths
#>           = \"\"\n  \n  if (list) {\n    list.forEach(function(f){return paths_list.push(f.path)})\n
#>           \   joined_paths = paths_list.join(\" \")\n\n\n    paths_list.forEach(function(f){\n
#>           \     ext = f.replace(/^.*\\./, '')\n      if (ext == \"gff\" || ext ==
#>           \"gtf\") {\n        gtfgffFormat = \"True\"\n        return gtfgffFormat\n
#>           \     }\n      if (ext == \"txt\") {\n        sjFormat = \"True\"\n        return
#>           sjFormat\n      }\n    })\n\n    if ($job.inputs.sjdbGTFfile && $job.inputs.sjdbInsertSave
#>           != \"None\") {\n      if (sjFormat == \"True\") {\n        return \"--sjdbFileChrStartEnd
#>           \".concat(joined_paths)\n      }\n      else if (gtfgffFormat == \"True\")
#>           {\n        return \"--sjdbGTFfile \".concat(joined_paths)\n      }\n    }\n
#>           \ }\n}"
#>         class: Expression
#>     - position: 0
#>       separate: yes
#>       valueFrom:
#>         engine: '#cwl-js-engine'
#>         script: "{\n  a = b = c = d = e = f = g = []\n  if ($job.inputs.sjdbGTFchrPrefix)
#>           {\n    a = [\"--sjdbGTFchrPrefix\", $job.inputs.sjdbGTFchrPrefix]\n  }\n
#>           \ if ($job.inputs.sjdbGTFfeatureExon) {\n    b = [\"--sjdbGTFfeatureExon\",
#>           $job.inputs.sjdbGTFfeatureExon]\n  }\n  if ($job.inputs.sjdbGTFtagExonParentTranscript)
#>           {\n    c = [\"--sjdbGTFtagExonParentTranscript\", $job.inputs.sjdbGTFtagExonParentTranscript]\n
#>           \ }\n  if ($job.inputs.sjdbGTFtagExonParentGene) {\n    d = [\"--sjdbGTFtagExonParentGene\",
#>           $job.inputs.sjdbGTFtagExonParentGene]\n  }\n  if ($job.inputs.sjdbOverhang)
#>           {\n    e = [\"--sjdbOverhang\", $job.inputs.sjdbOverhang]\n  }\n  if ($job.inputs.sjdbScore)
#>           {\n    f = [\"--sjdbScore\", $job.inputs.sjdbScore]\n  }\n  if ($job.inputs.sjdbInsertSave)
#>           {\n    g = [\"--sjdbInsertSave\", $job.inputs.sjdbInsertSave]\n  }\n  \n
#>           \ \n  \n  if ($job.inputs.sjdbInsertSave != \"None\" && $job.inputs.sjdbGTFfile)
#>           {\n    new_list = a.concat(b, c, d, e, f, g)\n    return new_list.join(\"
#>           \")\n  }\n}"
#>         class: Expression
#>     - position: 0
#>       separate: yes
#>       valueFrom:
#>         engine: '#cwl-js-engine'
#>         script: |-
#>           {
#>             if ($job.inputs.twopassMode == "Basic") {
#>               return "--twopass1readsN ".concat($job.inputs.twopass1readsN)
#>             }
#>           }
#>         class: Expression
#>     - position: 0
#>       separate: yes
#>       valueFrom:
#>         engine: '#cwl-js-engine'
#>         script: |-
#>           {
#>             if ($job.inputs.chimOutType == "Within") {
#>               return "--chimOutType ".concat("Within", $job.inputs.outSAMtype)
#>             }
#>             else {
#>               return "--chimOutType SeparateSAMold"
#>             }
#>           }
#>         class: Expression
#>     - position: 0
#>       separate: yes
#>       valueFrom:
#>         engine: '#cwl-js-engine'
#>         script: "{\n  var param_list = []\n  \n  function add_param(key, value){\n
#>           \   if (value == \"\") {\n      return\n    }\n    else {\n      return
#>           param_list.push(key.concat(\":\", value))\n    }\n  }\n  \n  add_param('ID',
#>           \"1\")\n  if ($job.inputs.rg_seq_center) {\n    add_param('CN', $job.inputs.rg_seq_center)\n
#>           \ } else if ([].concat($job.inputs.reads)[0].metadata.seq_center) {\n    add_param('CN',
#>           [].concat($job.inputs.reads)[0].metadata.seq_center)\n  }\n  if ($job.inputs.rg_library_id)
#>           {\n    add_param('LB', $job.inputs.rg_library_id)\n  } else if ([].concat($job.inputs.reads)[0].metadata.library_id)
#>           {\n    add_param('LB', [].concat($job.inputs.reads)[0].metadata.library_id)\n
#>           \ }\n  if ($job.inputs.rg_mfl) {\n    add_param('PI', $job.inputs.rg_mfl)\n
#>           \ } else if ([].concat($job.inputs.reads)[0].metadata.median_fragment_length)
#>           {\n    add_param('PI', [].concat($job.inputs.reads)[0].metadata.median_fragment_length)\n
#>           \ }\n  if ($job.inputs.rg_platform) {\n    add_param('PL', $job.inputs.rg_platform.replace(/
#>           /g,\"_\"))\n  } else if ([].concat($job.inputs.reads)[0].metadata.platform)
#>           {\n    add_param('PL', [].concat($job.inputs.reads)[0].metadata.platform.replace(/
#>           /g,\"_\"))\n  }\n  if ($job.inputs.rg_platform_unit_id) {\n    add_param('PU',
#>           $job.inputs.rg_platform_unit_id)\n  } else if ([].concat($job.inputs.reads)[0].metadata.platform_unit_id)
#>           {\n    add_param('PU', [].concat($job.inputs.reads)[0].metadata.platform_unit_id)\n
#>           \ }\n  if ($job.inputs.rg_sample_id) {\n    add_param('SM', $job.inputs.rg_sample_id)\n
#>           \ } else if ([].concat($job.inputs.reads)[0].metadata.sample_id) {\n    add_param('SM',
#>           [].concat($job.inputs.reads)[0].metadata.sample_id)\n  }\n  return \"--outSAMattrRGline
#>           \".concat(param_list.join(\" \"))\n}"
#>         class: Expression
#>     - position: 0
#>       separate: yes
#>       valueFrom:
#>         engine: '#cwl-js-engine'
#>         script: |-
#>           {
#>             if ($job.inputs.sjdbGTFfile && $job.inputs.quantMode) {
#>               return "--quantMode ".concat($job.inputs.quantMode)
#>             }
#>           }
#>         class: Expression
#>     - position: 100
#>       separate: yes
#>       valueFrom:
#>         engine: '#cwl-js-engine'
#>         script: "{\n  function sharedStart(array){\n  var A= array.concat().sort(),
#>           \n      a1= A[0], a2= A[A.length-1], L= a1.length, i= 0;\n  while(i<L &&
#>           a1.charAt(i)=== a2.charAt(i)) i++;\n  return a1.substring(0, i);\n  }\n
#>           \ path_list = []\n  arr = [].concat($job.inputs.reads)\n  arr.forEach(function(f){return
#>           path_list.push(f.path.replace(/\\\\/g,'/').replace( /.*\\//, '' ))})\n  common_prefix
#>           = sharedStart(path_list)\n  intermediate = common_prefix.replace( /\\-$|\\_$|\\.$/,
#>           '' ).concat(\"._STARgenome\")\n  source = \"./\".concat(intermediate)\n
#>           \ destination = intermediate.concat(\".tar\")\n  if ($job.inputs.sjdbGTFfile
#>           && $job.inputs.sjdbInsertSave && $job.inputs.sjdbInsertSave != \"None\")
#>           {\n    return \"&& tar -vcf \".concat(destination, \" \", source)\n  }\n}"
#>         class: Expression
#>     - position: 0
#>       prefix: --outFileNamePrefix
#>       separate: yes
#>       valueFrom:
#>         engine: '#cwl-js-engine'
#>         script: "{\n  function sharedStart(array){\n  var A= array.concat().sort(),
#>           \n      a1= A[0], a2= A[A.length-1], L= a1.length, i= 0;\n  while(i<L &&
#>           a1.charAt(i)=== a2.charAt(i)) i++;\n  return a1.substring(0, i);\n  }\n
#>           \ path_list = []\n  arr = [].concat($job.inputs.reads)\n  arr.forEach(function(f){return
#>           path_list.push(f.path.replace(/\\\\/g,'/').replace( /.*\\//, '' ))})\n  common_prefix
#>           = sharedStart(path_list)\n  return \"./\".concat(common_prefix.replace(
#>           /\\-$|\\_$|\\.$/, '' ), \".\")\n}"
#>         class: Expression
#>     - position: 101
#>       separate: yes
#>       valueFrom:
#>         engine: '#cwl-js-engine'
#>         script: "{\n  function sharedStart(array){\n  var A= array.concat().sort(),
#>           \n      a1= A[0], a2= A[A.length-1], L= a1.length, i= 0;\n  while(i<L &&
#>           a1.charAt(i)=== a2.charAt(i)) i++;\n  return a1.substring(0, i);\n  }\n
#>           \ path_list = []\n  arr = [].concat($job.inputs.reads)\n  arr.forEach(function(f){return
#>           path_list.push(f.path.replace(/\\\\/g,'/').replace( /.*\\//, '' ))})\n  common_prefix
#>           = sharedStart(path_list)\n  mate1 = common_prefix.replace( /\\-$|\\_$|\\.$/,
#>           '' ).concat(\".Unmapped.out.mate1\")\n  mate2 = common_prefix.replace( /\\-$|\\_$|\\.$/,
#>           '' ).concat(\".Unmapped.out.mate2\")\n  mate1fq = mate1.concat(\".fastq\")\n
#>           \ mate2fq = mate2.concat(\".fastq\")\n  if ($job.inputs.outReadsUnmapped
#>           == \"Fastx\" && arr.length > 1) {\n    return \"&& mv \".concat(mate1, \"
#>           \", mate1fq, \" && mv \", mate2, \" \", mate2fq)\n  }\n  else if ($job.inputs.outReadsUnmapped
#>           == \"Fastx\" && arr.length == 1) {\n    return \"&& mv \".concat(mate1,
#>           \" \", mate1fq)\n  }\n}"
#>         class: Expression
#>     stdin: ''
#>     stdout: ''
#>     successCodes: []
#>     temporaryFailCodes: []
#>     x: 624.0
#>     'y': 323
#>   sbg:x: 700.0
#>   sbg:y: 200.0
#> sbg:canvas_zoom: 0.6
#> sbg:canvas_y: -16
#> sbg:canvas_x: -41
#> sbg:batchInput: '#sjdbGTFfile'
#> sbg:batchBy:
#>   type: item
#> 
# add source to id
f1$link_map()
#>                                                      id
#> 1  #STAR_Genome_Generate.sjdbGTFtagExonParentTranscript
#> 2        #STAR_Genome_Generate.sjdbGTFtagExonParentGene
#> 3                     #STAR_Genome_Generate.sjdbGTFfile
#> 4                #STAR_Genome_Generate.genomeFastaFiles
#> 5                     #SBG_FASTQ_Quality_Detector.fastq
#> 6                             #Picard_SortSam.input_bam
#> 7                           #STAR.winAnchorMultimapNmax
#> 8                              #STAR.winAnchorDistNbins
#> 9                                     #STAR.sjdbGTFfile
#> 10                                          #STAR.reads
#> 11                                         #STAR.genome
#> 12                                      #unmapped_reads
#> 13                         #transcriptome_aligned_reads
#> 14                                    #splice_junctions
#> 15                                      #reads_per_gene
#> 16                                           #log_files
#> 17                                  #chimeric_junctions
#> 18                                 #intermediate_genome
#> 19                                 #intermediate_genome
#> 20                                 #chimeric_alignments
#> 21                                          #sorted_bam
#> 22                                              #result
#> 23                                 #intermediate_genome
#> 24                                 #intermediate_genome
#>                             source   type
#> 1  #sjdbGTFtagExonParentTranscript  input
#> 2        #sjdbGTFtagExonParentGene  input
#> 3                     #sjdbGTFfile  input
#> 4                #genomeFastaFiles  input
#> 5                           #fastq  input
#> 6              #STAR.aligned_reads  input
#> 7           #winAnchorMultimapNmax  input
#> 8              #winAnchorDistNbins  input
#> 9                     #sjdbGTFfile  input
#> 10                          #reads  input
#> 11    #STAR_Genome_Generate.genome  input
#> 12                 #unmapped_reads output
#> 13    #transcriptome_aligned_reads output
#> 14               #splice_junctions output
#> 15                 #reads_per_gene output
#> 16                      #log_files output
#> 17             #chimeric_junctions output
#> 18            #intermediate_genome output
#> 19             intermediate_genome output
#> 20            #chimeric_alignments output
#> 21                     #sorted_bam output
#> 22                         #result output
#> 23            #intermediate_genome output
#> 24             intermediate_genome output
f1$add_source_to_id(c("test1", "test2"), c("#STAR.genome", "#STAR.reads"))
#> sbg:validationErrors: []
#> sbg:sbgMaintained: no
#> sbg:latestRevision: 2
#> sbg:toolAuthor: Seven Bridges Genomics
#> sbg:createdOn: 1463601910
#> sbg:categories:
#> - Alignment
#> - RNA
#> sbg:contributors:
#> - tengfei
#> sbg:project: tengfei/quickstart
#> sbg:createdBy: tengfei
#> sbg:toolkitVersion: 2.4.2a
#> sbg:id: tengfei/quickstart/rna-seq-alignment-star-demo/2
#> sbg:license: Apache License 2.0
#> sbg:revision: 2
#> sbg:modifiedOn: 1463601974
#> sbg:modifiedBy: tengfei
#> sbg:revisionsInfo:
#> - sbg:modifiedBy: tengfei
#>   sbg:modifiedOn: 1463601910
#>   sbg:revision: 0
#> - sbg:modifiedBy: tengfei
#>   sbg:modifiedOn: 1463601952
#>   sbg:revision: 1
#> - sbg:modifiedBy: tengfei
#>   sbg:modifiedOn: 1463601974
#>   sbg:revision: 2
#> sbg:toolkit: STAR
#> id: '#tengfei/quickstart/rna-seq-alignment-star-demo/2'
#> inputs:
#> - type:
#>   - items: File
#>     type: array
#>   label: Read sequence
#>   description: Read sequence.
#>   streamable: no
#>   id: '#reads'
#>   inputBinding:
#>     position: 10
#>     separate: yes
#>     itemSeparator: ' '
#>     valueFrom:
#>       engine: '#cwl-js-engine'
#>       script: "{\t\n  var list = [].concat($job.inputs.reads)\n  \n  var resp = []\n
#>         \ \n  if (list.length == 1){\n    resp.push(list[0].path)\n    \n  }else if
#>         (list.length == 2){    \n    \n    left = \"\"\n    right = \"\"\n      \n
#>         \   for (index = 0; index < list.length; ++index) {\n      \n      if (list[index].metadata
#>         != null){\n        if (list[index].metadata.paired_end == 1){\n          left
#>         = list[index].path\n        }else if (list[index].metadata.paired_end == 2){\n
#>         \         right = list[index].path\n        }\n      }\n    }\n    \n    if
#>         (left != \"\" && right != \"\"){      \n      resp.push(left)\n      resp.push(right)\n
#>         \   }\n  }\n  else if (list.length > 2){\n    left = []\n    right = []\n
#>         \     \n    for (index = 0; index < list.length; ++index) {\n      \n      if
#>         (list[index].metadata != null){\n        if (list[index].metadata.paired_end
#>         == 1){\n          left.push(list[index].path)\n        }else if (list[index].metadata.paired_end
#>         == 2){\n          right.push(list[index].path)\n        }\n      }\n    }\n
#>         \   left_join = left.join()\n    right_join = right.join()\n    if (left !=
#>         [] && right != []){      \n      resp.push(left_join)\n      resp.push(right_join)\n
#>         \   }\t\n  }\n  \n  if(resp.length > 0){    \n    return \"--readFilesIn \".concat(resp.join(\"
#>         \"))\n  }\n}"
#>       class: Expression
#>     shellQuote: no
#>     sbg:cmdInclude: yes
#>     streamable: no
#>     separator: ' '
#>   sbg:category: Basic
#>   sbg:fileTypes: FASTA, FASTQ, FA, FQ, FASTQ.GZ, FQ.GZ, FASTQ.BZ2, FQ.BZ2
#>   sbg:x: 200.0
#>   sbg:y: 200.0
#>   sbg:includeInPorts: yes
#>   required: yes
#> - type:
#>   - 'null'
#>   - items: File
#>     type: array
#>   label: sjdbGTFfile
#>   streamable: no
#>   id: '#sjdbGTFfile'
#>   sbg:x: 160.4999759
#>   sbg:y: 195.0833106
#>   sbg:includeInPorts: yes
#>   required: no
#> - type:
#>   - items: File
#>     type: array
#>   label: fastq
#>   streamable: no
#>   id: '#fastq'
#>   sbg:x: 164.2499914
#>   sbg:y: 323.7499502
#>   sbg:includeInPorts: yes
#>   required: yes
#> - type:
#>   - File
#>   label: genomeFastaFiles
#>   streamable: no
#>   id: '#genomeFastaFiles'
#>   sbg:x: 167.7499601
#>   sbg:y: 469.9999106
#>   sbg:includeInPorts: yes
#>   required: yes
#> - type:
#>   - 'null'
#>   - string
#>   label: Exons' parents name
#>   description: Tag name to be used as exons' transcript-parents.
#>   streamable: no
#>   id: '#sjdbGTFtagExonParentTranscript'
#>   sbg:category: Splice junctions db parameters
#>   sbg:x: 200.0
#>   sbg:y: 350.0
#>   sbg:includeInPorts: yes
#>   sbg:toolDefaultValue: transcript_id
#>   required: no
#> - type:
#>   - 'null'
#>   - string
#>   label: Gene name
#>   description: Tag name to be used as exons' gene-parents.
#>   streamable: no
#>   id: '#sjdbGTFtagExonParentGene'
#>   sbg:category: Splice junctions db parameters
#>   sbg:x: 200.0
#>   sbg:y: 400.0
#>   sbg:includeInPorts: yes
#>   sbg:toolDefaultValue: gene_id
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: Max loci anchors
#>   description: Max number of loci anchors are allowed to map to (int>0).
#>   streamable: no
#>   id: '#winAnchorMultimapNmax'
#>   sbg:category: Windows, Anchors, Binning
#>   sbg:x: 200.0
#>   sbg:y: 450.0
#>   sbg:includeInPorts: yes
#>   sbg:toolDefaultValue: '50'
#>   required: no
#> - type:
#>   - 'null'
#>   - int
#>   label: Max bins between anchors
#>   description: Max number of bins between two anchors that allows aggregation of anchors
#>     into one window (int>0).
#>   streamable: no
#>   id: '#winAnchorDistNbins'
#>   sbg:category: Windows, Anchors, Binning
#>   sbg:x: 200.0
#>   sbg:y: 500.0
#>   sbg:includeInPorts: yes
#>   sbg:toolDefaultValue: '9'
#>   required: no
#> outputs:
#> - type:
#>   - 'null'
#>   - items: File
#>     type: array
#>   label: Unmapped reads
#>   description: Output of unmapped reads.
#>   streamable: no
#>   id: '#unmapped_reads'
#>   source: '#unmapped_reads'
#>   sbg:x: 800.0
#>   sbg:y: 200.0
#>   sbg:includeInPorts: yes
#>   required: no
#> - type:
#>   - 'null'
#>   - File
#>   label: Transcriptome alignments
#>   description: Alignments translated into transcript coordinates.
#>   streamable: no
#>   id: '#transcriptome_aligned_reads'
#>   source: '#transcriptome_aligned_reads'
#>   sbg:x: 800.0
#>   sbg:y: 233.3333333
#>   sbg:includeInPorts: yes
#>   required: no
#> - type:
#>   - 'null'
#>   - File
#>   label: Splice junctions
#>   description: High confidence collapsed splice junctions in tab-delimited format.
#>     Only junctions supported by uniquely mapping reads are reported.
#>   streamable: no
#>   id: '#splice_junctions'
#>   source: '#splice_junctions'
#>   sbg:x: 800.0
#>   sbg:y: 266.6666667
#>   sbg:includeInPorts: yes
#>   required: no
#> - type:
#>   - 'null'
#>   - File
#>   label: Reads per gene
#>   description: File with number of reads per gene. A read is counted if it overlaps
#>     (1nt or more) one and only one gene.
#>   streamable: no
#>   id: '#reads_per_gene'
#>   source: '#reads_per_gene'
#>   sbg:x: 800.0
#>   sbg:y: 300.0
#>   sbg:includeInPorts: yes
#>   required: no
#> - type:
#>   - 'null'
#>   - items: File
#>     type: array
#>   label: Log files
#>   description: Log files produced during alignment.
#>   streamable: no
#>   id: '#log_files'
#>   source: '#log_files'
#>   sbg:x: 800.0
#>   sbg:y: 333.3333333
#>   sbg:includeInPorts: yes
#>   required: no
#> - type:
#>   - 'null'
#>   - File
#>   label: Chimeric junctions
#>   description: If chimSegmentMin in 'Chimeric Alignments' section is set to 0, 'Chimeric
#>     Junctions' won't be output.
#>   streamable: no
#>   id: '#chimeric_junctions'
#>   source: '#chimeric_junctions'
#>   sbg:x: 800.0
#>   sbg:y: 366.6666667
#>   sbg:includeInPorts: yes
#>   required: no
#> - type:
#>   - 'null'
#>   - File
#>   label: Intermediate genome files
#>   description: Archive with genome files produced when annotations are included on
#>     the fly (in the mapping step).
#>   streamable: no
#>   id: '#intermediate_genome'
#>   source:
#>   - '#intermediate_genome'
#>   - intermediate_genome
#>   sbg:x: 800.0
#>   sbg:y: 400.0
#>   sbg:includeInPorts: yes
#>   required: no
#> - type:
#>   - 'null'
#>   - File
#>   label: Chimeric alignments
#>   description: Aligned Chimeric sequences SAM - if chimSegmentMin = 0, no Chimeric
#>     Alignment SAM and Chimeric Junctions outputs.
#>   streamable: no
#>   id: '#chimeric_alignments'
#>   source: '#chimeric_alignments'
#>   sbg:x: 800.0
#>   sbg:y: 433.3333333
#>   sbg:includeInPorts: yes
#>   required: no
#> - type:
#>   - 'null'
#>   - File
#>   label: Sorted BAM/SAM
#>   description: Sorted BAM or SAM file.
#>   streamable: no
#>   id: '#sorted_bam'
#>   source: '#sorted_bam'
#>   sbg:x: 800.0
#>   sbg:y: 466.6666667
#>   sbg:includeInPorts: yes
#>   required: no
#> - type:
#>   - 'null'
#>   - File
#>   label: Result
#>   description: Source FASTQ file with updated metadata.
#>   streamable: no
#>   id: '#result'
#>   source: '#result'
#>   sbg:x: 800.0
#>   sbg:y: 500.0
#>   sbg:includeInPorts: yes
#>   required: no
#> - type:
#>   - 'null'
#>   - File
#>   label: Intermediate genome files
#>   description: Archive with genome files produced when annotations are included on
#>     the fly (in the mapping step).
#>   streamable: no
#>   id: '#intermediate_genome'
#>   source:
#>   - '#intermediate_genome'
#>   - intermediate_genome
#>   sbg:x: 800.0
#>   sbg:y: 533.3333333
#>   sbg:includeInPorts: yes
#>   required: no
#> requirements:
#> - class: CreateFileRequirement
#>   fileDef: []
#> hints:
#> - class: sbg:AWSInstanceType
#>   value: c3.8xlarge
#> label: RNA-seq Alignment - STAR
#> description: "Alignment to a reference genome and transcriptome presents the first
#>   step of RNA-Seq analysis. This pipeline uses STAR, an ultrafast RNA-seq aligner
#>   capable of mapping full length RNA sequences and detecting de novo canonical junctions,
#>   non-canonical splices, and chimeric (fusion) transcripts. It is optimized for mammalian
#>   sequence reads, but fine tuning of its parameters enables customization to satisfy
#>   unique needs.\n\nSTAR accepts one file per sample (or two files for paired-end data).
#>   \ \nSplice junction annotations can optionally be collected from splice junction
#>   databases. Set the \"Overhang length\" parameter to a value larger than zero in
#>   order to use splice junction databases. For constant read length, this value should
#>   (ideally) be equal to mate length decreased by 1; for long reads with non-constant
#>   length, this value should be 100 (pipeline default). \nFastQC Analysis on FASTQ
#>   files reveals read length distribution. STAR can detect chimeric transcripts, but
#>   parameter \"Min segment length\" in \"Chimeric Alignments\" category must be adjusted
#>   to a desired minimum chimeric segment length. Aligned reads are reported in BAM
#>   format and can be viewed in a genome browser (such as IGV). A file containing detected
#>   splice junctions is also produced.\n\nUnmapped reads are reported in FASTQ format
#>   and can be included in an output BAM file. The \"Output unmapped reads\" and \"Write
#>   unmapped in SAM\" parameters enable unmapped output type selection."
#> class: Workflow
#> steps:
#> - id: '#STAR_Genome_Generate'
#>   inputs:
#>   - id: '#STAR_Genome_Generate.sjdbScore'
#>   - id: '#STAR_Genome_Generate.sjdbOverhang'
#>   - id: '#STAR_Genome_Generate.sjdbGTFtagExonParentTranscript'
#>     source: '#sjdbGTFtagExonParentTranscript'
#>   - id: '#STAR_Genome_Generate.sjdbGTFtagExonParentGene'
#>     source: '#sjdbGTFtagExonParentGene'
#>   - id: '#STAR_Genome_Generate.sjdbGTFfile'
#>     source: '#sjdbGTFfile'
#>   - id: '#STAR_Genome_Generate.sjdbGTFfeatureExon'
#>   - id: '#STAR_Genome_Generate.sjdbGTFchrPrefix'
#>   - id: '#STAR_Genome_Generate.genomeSAsparseD'
#>   - id: '#STAR_Genome_Generate.genomeSAindexNbases'
#>   - id: '#STAR_Genome_Generate.genomeFastaFiles'
#>     source: '#genomeFastaFiles'
#>   - id: '#STAR_Genome_Generate.genomeChrBinNbits'
#>   outputs:
#>   - id: '#STAR_Genome_Generate.genome'
#>   hints: []
#>   run:
#>     sbg:validationErrors: []
#>     sbg:sbgMaintained: no
#>     sbg:latestRevision: 1
#>     sbg:job:
#>       allocatedResources:
#>         mem: 60000
#>         cpu: 15
#>       inputs:
#>         sjdbScore: 0
#>         sjdbGTFfeatureExon: sjdbGTFfeatureExon
#>         sjdbOverhang: 0
#>         sjdbGTFtagExonParentTranscript: sjdbGTFtagExonParentTranscript
#>         genomeChrBinNbits: genomeChrBinNbits
#>         genomeSAsparseD: 0
#>         sjdbGTFfile:
#>         - size: 0
#>           secondaryFiles: []
#>           class: File
#>           path: /demo/test-files/chr20.gtf
#>         sjdbGTFtagExonParentGene: sjdbGTFtagExonParentGene
#>         genomeFastaFiles:
#>           size: 0
#>           secondaryFiles: []
#>           class: File
#>           path: /sbgenomics/test-data/chr20.fa
#>         sjdbGTFchrPrefix: sjdbGTFchrPrefix
#>         genomeSAindexNbases: 0
#>     sbg:toolAuthor: Alexander Dobin/CSHL
#>     sbg:createdOn: 1450911469
#>     sbg:categories:
#>     - Alignment
#>     sbg:contributors:
#>     - bix-demo
#>     sbg:links:
#>     - id: https://github.com/alexdobin/STAR
#>       label: Homepage
#>     - id: https://github.com/alexdobin/STAR/releases
#>       label: Releases
#>     - id: https://github.com/alexdobin/STAR/blob/master/doc/STARmanual.pdf
#>       label: Manual
#>     - id: https://groups.google.com/forum/#!forum/rna-star
#>       label: Support
#>     - id: http://www.ncbi.nlm.nih.gov/pubmed/23104886
#>       label: Publication
#>     sbg:project: bix-demo/star-2-4-2a-demo
#>     sbg:createdBy: bix-demo
#>     sbg:toolkitVersion: 2.4.2a
#>     sbg:id: sevenbridges/public-apps/star-genome-generate/1
#>     sbg:license: GNU General Public License v3.0 only
#>     sbg:revision: 1
#>     sbg:cmdPreview: mkdir genomeDir && /opt/STAR --runMode genomeGenerate --genomeDir
#>       ./genomeDir --runThreadN 15 --genomeFastaFiles /sbgenomics/test-data/chr20.fa
#>       --genomeChrBinNbits genomeChrBinNbits --genomeSAindexNbases 0 --genomeSAsparseD
#>       0 --sjdbGTFfeatureExon sjdbGTFfeatureExon --sjdbGTFtagExonParentTranscript sjdbGTFtagExonParentTranscript
#>       --sjdbGTFtagExonParentGene sjdbGTFtagExonParentGene --sjdbOverhang 0 --sjdbScore
#>       0 --sjdbGTFchrPrefix sjdbGTFchrPrefix  --sjdbGTFfile /demo/test-files/chr20.gtf  &&
#>       tar -vcf genome.tar ./genomeDir /sbgenomics/test-data/chr20.fa
#>     sbg:modifiedOn: 1450911470
#>     sbg:modifiedBy: bix-demo
#>     sbg:revisionsInfo:
#>     - sbg:modifiedBy: bix-demo
#>       sbg:modifiedOn: 1450911469
#>       sbg:revision: 0
#>     - sbg:modifiedBy: bix-demo
#>       sbg:modifiedOn: 1450911470
#>       sbg:revision: 1
#>     sbg:toolkit: STAR
#>     id: sevenbridges/public-apps/star-genome-generate/1
#>     inputs:
#>     - type:
#>       - 'null'
#>       - int
#>       label: Extra alignment score
#>       description: Extra alignment score for alignments that cross database junctions.
#>       streamable: no
#>       id: '#sjdbScore'
#>       inputBinding:
#>         position: 0
#>         prefix: --sjdbScore
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Splice junctions db parameters
#>       sbg:includeInPorts: yes
#>       sbg:toolDefaultValue: '2'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: '"Overhang" length'
#>       description: Length of the donor/acceptor sequence on each side of the junctions,
#>         ideally = (mate_length - 1) (int >= 0), if int = 0, splice junction database
#>         is not used.
#>       streamable: no
#>       id: '#sjdbOverhang'
#>       inputBinding:
#>         position: 0
#>         prefix: --sjdbOverhang
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Splice junctions db parameters
#>       sbg:includeInPorts: yes
#>       sbg:toolDefaultValue: '100'
#>       required: no
#>     - type:
#>       - 'null'
#>       - string
#>       label: Exons' parents name
#>       description: Tag name to be used as exons' transcript-parents.
#>       streamable: no
#>       id: '#sjdbGTFtagExonParentTranscript'
#>       inputBinding:
#>         position: 0
#>         prefix: --sjdbGTFtagExonParentTranscript
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Splice junctions db parameters
#>       sbg:toolDefaultValue: transcript_id
#>       required: no
#>     - type:
#>       - 'null'
#>       - string
#>       label: Gene name
#>       description: Tag name to be used as exons' gene-parents.
#>       streamable: no
#>       id: '#sjdbGTFtagExonParentGene'
#>       inputBinding:
#>         position: 0
#>         prefix: --sjdbGTFtagExonParentGene
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Splice junctions db parameters
#>       sbg:toolDefaultValue: gene_id
#>       required: no
#>     - type:
#>       - 'null'
#>       - items: File
#>         type: array
#>       label: Splice junction file
#>       description: Gene model annotations and/or known transcripts.
#>       streamable: no
#>       id: '#sjdbGTFfile'
#>       sbg:category: Basic
#>       sbg:fileTypes: GTF, GFF, TXT
#>       required: no
#>     - type:
#>       - 'null'
#>       - string
#>       label: Set exons feature
#>       description: Feature type in GTF file to be used as exons for building transcripts.
#>       streamable: no
#>       id: '#sjdbGTFfeatureExon'
#>       inputBinding:
#>         position: 0
#>         prefix: --sjdbGTFfeatureExon
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Splice junctions db parameters
#>       sbg:toolDefaultValue: exon
#>       required: no
#>     - type:
#>       - 'null'
#>       - string
#>       label: Chromosome names
#>       description: Prefix for chromosome names in a GTF file (e.g. 'chr' for using
#>         ENSMEBL annotations with UCSC geneomes).
#>       streamable: no
#>       id: '#sjdbGTFchrPrefix'
#>       inputBinding:
#>         position: 0
#>         prefix: --sjdbGTFchrPrefix
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Splice junctions db parameters
#>       sbg:toolDefaultValue: '-'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Suffux array sparsity
#>       description: 'Distance between indices: use bigger numbers to decrease needed
#>         RAM at the cost of mapping speed reduction (int>0).'
#>       streamable: no
#>       id: '#genomeSAsparseD'
#>       inputBinding:
#>         position: 0
#>         prefix: --genomeSAsparseD
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Genome generation parameters
#>       sbg:toolDefaultValue: '1'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Pre-indexing string length
#>       description: Length (bases) of the SA pre-indexing string. Typically between
#>         10 and 15. Longer strings will use much more memory, but allow faster searches.
#>         For small genomes, this number needs to be scaled down, with a typical value
#>         of min(14, log2(GenomeLength)/2 - 1). For example, for 1 megaBase genome,
#>         this is equal to 9, for 100 kiloBase genome, this is equal to 7.
#>       streamable: no
#>       id: '#genomeSAindexNbases'
#>       inputBinding:
#>         position: 0
#>         prefix: --genomeSAindexNbases
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Genome generation parameters
#>       sbg:toolDefaultValue: '14'
#>       required: no
#>     - type:
#>       - File
#>       label: Genome fasta files
#>       description: Reference sequence to which to align the reads.
#>       streamable: no
#>       id: '#genomeFastaFiles'
#>       inputBinding:
#>         position: 0
#>         prefix: --genomeFastaFiles
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Basic
#>       sbg:fileTypes: FASTA, FA
#>       required: yes
#>     - type:
#>       - 'null'
#>       - string
#>       label: Bins size
#>       description: 'Set log2(chrBin), where chrBin is the size (bits) of the bins
#>         for genome storage: each chromosome will occupy an integer number of bins.
#>         If you are using a genome with a large (>5,000) number of chrosomes/scaffolds,
#>         you may need to reduce this number to reduce RAM consumption. The following
#>         scaling is recomended: genomeChrBinNbits = min(18, log2(GenomeLength/NumberOfReferences)).
#>         For example, for 3 gigaBase genome with 100,000 chromosomes/scaffolds, this
#>         is equal to 15.'
#>       streamable: no
#>       id: '#genomeChrBinNbits'
#>       inputBinding:
#>         position: 0
#>         prefix: --genomeChrBinNbits
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Genome generation parameters
#>       sbg:toolDefaultValue: '18'
#>       required: no
#>     outputs:
#>     - type:
#>       - 'null'
#>       - File
#>       label: Genome Files
#>       description: Genome files comprise binary genome sequence, suffix arrays, text
#>         chromosome names/lengths, splice junctions coordinates, and transcripts/genes
#>         information.
#>       streamable: no
#>       id: '#genome'
#>       outputBinding:
#>         glob: '*.tar'
#>       sbg:fileTypes: TAR
#>     requirements:
#>     - class: ExpressionEngineRequirement
#>       id: '#cwl-js-engine'
#>       requirements:
#>       - class: DockerRequirement
#>         dockerPull: rabix/js-engine
#>     hints:
#>     - class: DockerRequirement
#>       dockerPull: images.sbgenomics.com/ana_d/star:2.4.2a
#>       dockerImageId: a4b0ad2c3cae
#>     - class: sbg:CPURequirement
#>       value: 15
#>     - class: sbg:MemRequirement
#>       value: 60000
#>     label: STAR Genome Generate
#>     description: STAR Genome Generate is a tool that generates genome index files.
#>       One set of files should be generated per each genome/annotation combination.
#>       Once produced, these files could be used as long as genome/annotation combination
#>       stays the same. Also, STAR Genome Generate which produced these files and STAR
#>       aligner using them must be the same toolkit version.
#>     class: CommandLineTool
#>     baseCommand:
#>     - mkdir
#>     - genomeDir
#>     - '&&'
#>     - /opt/STAR
#>     - --runMode
#>     - genomeGenerate
#>     - --genomeDir
#>     - ./genomeDir
#>     - --runThreadN
#>     - class: Expression
#>       script: |-
#>         {
#>           return $job.allocatedResources.cpu
#>         }
#>       engine: '#cwl-js-engine'
#>     arguments:
#>     - position: 99
#>       separate: yes
#>       valueFrom: '&& tar -vcf genome.tar ./genomeDir'
#>     - position: 0
#>       separate: yes
#>       valueFrom:
#>         engine: '#cwl-js-engine'
#>         script: "{\t\n  var sjFormat = \"False\"\n  var gtfgffFormat = \"False\"\n
#>           \ var list = $job.inputs.sjdbGTFfile\n  var paths_list = []\n  var joined_paths
#>           = \"\"\n  \n  if (list) {\n    list.forEach(function(f){return paths_list.push(f.path)})\n
#>           \   joined_paths = paths_list.join(\" \")\n\n\n    paths_list.forEach(function(f){\n
#>           \     ext = f.replace(/^.*\\./, '')\n      if (ext == \"gff\" || ext ==
#>           \"gtf\") {\n        gtfgffFormat = \"True\"\n        return gtfgffFormat\n
#>           \     }\n      if (ext == \"txt\") {\n        sjFormat = \"True\"\n        return
#>           sjFormat\n      }\n    })\n\n    if ($job.inputs.sjdbGTFfile && $job.inputs.sjdbInsertSave
#>           != \"None\") {\n      if (sjFormat == \"True\") {\n        return \"--sjdbFileChrStartEnd
#>           \".concat(joined_paths)\n      }\n      else if (gtfgffFormat == \"True\")
#>           {\n        return \"--sjdbGTFfile \".concat(joined_paths)\n      }\n    }\n
#>           \ }\n}"
#>         class: Expression
#>     stdin: ''
#>     stdout: ''
#>     successCodes: []
#>     temporaryFailCodes: []
#>     x: 384.0832266
#>     'y': 446.4998957
#>   sbg:x: 100.0
#>   sbg:y: 200.0
#> - id: '#SBG_FASTQ_Quality_Detector'
#>   inputs:
#>   - id: '#SBG_FASTQ_Quality_Detector.fastq'
#>     source: '#fastq'
#>   outputs:
#>   - id: '#SBG_FASTQ_Quality_Detector.result'
#>   hints: []
#>   run:
#>     sbg:validationErrors: []
#>     sbg:sbgMaintained: no
#>     sbg:latestRevision: 3
#>     sbg:job:
#>       allocatedResources:
#>         mem: 1000
#>         cpu: 1
#>       inputs:
#>         fastq:
#>           size: 0
#>           secondaryFiles: []
#>           class: File
#>           path: /path/to/fastq.ext
#>     sbg:toolAuthor: Seven Bridges Genomics
#>     sbg:createdOn: 1450911312
#>     sbg:categories:
#>     - FASTQ-Processing
#>     sbg:contributors:
#>     - bix-demo
#>     sbg:project: bix-demo/sbgtools-demo
#>     sbg:createdBy: bix-demo
#>     sbg:id: sevenbridges/public-apps/sbg-fastq-quality-detector/3
#>     sbg:license: Apache License 2.0
#>     sbg:revision: 3
#>     sbg:cmdPreview: python /opt/sbg_fastq_quality_scale_detector.py --fastq /path/to/fastq.ext
#>       /path/to/fastq.ext
#>     sbg:modifiedOn: 1450911314
#>     sbg:modifiedBy: bix-demo
#>     sbg:revisionsInfo:
#>     - sbg:modifiedBy: bix-demo
#>       sbg:modifiedOn: 1450911312
#>       sbg:revision: 0
#>     - sbg:modifiedBy: bix-demo
#>       sbg:modifiedOn: 1450911314
#>       sbg:revision: 3
#>     - sbg:modifiedBy: bix-demo
#>       sbg:modifiedOn: 1450911313
#>       sbg:revision: 1
#>     - sbg:modifiedBy: bix-demo
#>       sbg:modifiedOn: 1450911313
#>       sbg:revision: 2
#>     sbg:toolkit: SBGTools
#>     id: sevenbridges/public-apps/sbg-fastq-quality-detector/3
#>     inputs:
#>     - type:
#>       - File
#>       label: Fastq
#>       description: FASTQ file.
#>       streamable: no
#>       id: '#fastq'
#>       inputBinding:
#>         position: 0
#>         prefix: --fastq
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       required: yes
#>     outputs:
#>     - type:
#>       - 'null'
#>       - File
#>       label: Result
#>       description: Source FASTQ file with updated metadata.
#>       streamable: no
#>       id: '#result'
#>       outputBinding:
#>         glob: '*.fastq'
#>       sbg:fileTypes: FASTQ
#>     requirements:
#>     - class: CreateFileRequirement
#>       fileDef: []
#>     hints:
#>     - class: DockerRequirement
#>       dockerPull: images.sbgenomics.com/tziotas/sbg_fastq_quality_scale_detector:1.0
#>       dockerImageId: ''
#>     - class: sbg:CPURequirement
#>       value: 1
#>     - class: sbg:MemRequirement
#>       value: 1000
#>     label: SBG FASTQ Quality Detector
#>     description: FASTQ Quality Scale Detector detects which quality encoding scheme
#>       was used in your reads and automatically enters the proper value in the "Quality
#>       Scale" metadata field.
#>     class: CommandLineTool
#>     baseCommand:
#>     - python
#>     - /opt/sbg_fastq_quality_scale_detector.py
#>     arguments: []
#>     stdin: ''
#>     stdout: ''
#>     successCodes: []
#>     temporaryFailCodes: []
#>     x: 375.3333179
#>     'y': 323.5833156
#>   sbg:x: 300.0
#>   sbg:y: 200.0
#> - id: '#Picard_SortSam'
#>   inputs:
#>   - id: '#Picard_SortSam.validation_stringency'
#>     default: SILENT
#>   - id: '#Picard_SortSam.sort_order'
#>     default: Coordinate
#>   - id: '#Picard_SortSam.quiet'
#>   - id: '#Picard_SortSam.output_type'
#>   - id: '#Picard_SortSam.memory_per_job'
#>   - id: '#Picard_SortSam.max_records_in_ram'
#>   - id: '#Picard_SortSam.input_bam'
#>     source: '#STAR.aligned_reads'
#>   - id: '#Picard_SortSam.create_index'
#>     default: 'True'
#>   - id: '#Picard_SortSam.compression_level'
#>   outputs:
#>   - id: '#Picard_SortSam.sorted_bam'
#>   hints: []
#>   run:
#>     sbg:validationErrors: []
#>     sbg:sbgMaintained: no
#>     sbg:latestRevision: 2
#>     sbg:job:
#>       allocatedResources:
#>         mem: 2048
#>         cpu: 1
#>       inputs:
#>         sort_order: Coordinate
#>         input_bam:
#>           path: /root/dir/example.tested.bam
#>         memory_per_job: 2048
#>         output_type: ~
#>         create_index: ~
#>     sbg:toolAuthor: Broad Institute
#>     sbg:createdOn: 1450911168
#>     sbg:categories:
#>     - SAM/BAM-Processing
#>     sbg:contributors:
#>     - bix-demo
#>     sbg:links:
#>     - id: http://broadinstitute.github.io/picard/index.html
#>       label: Homepage
#>     - id: https://github.com/broadinstitute/picard/releases/tag/1.138
#>       label: Source Code
#>     - id: http://broadinstitute.github.io/picard/
#>       label: Wiki
#>     - id: https://github.com/broadinstitute/picard/zipball/master
#>       label: Download
#>     - id: http://broadinstitute.github.io/picard/
#>       label: Publication
#>     sbg:project: bix-demo/picard-1-140-demo
#>     sbg:createdBy: bix-demo
#>     sbg:toolkitVersion: '1.140'
#>     sbg:id: sevenbridges/public-apps/picard-sortsam-1-140/2
#>     sbg:license: MIT License, Apache 2.0 Licence
#>     sbg:revision: 2
#>     sbg:cmdPreview: java -Xmx2048M -jar /opt/picard-tools-1.140/picard.jar SortSam
#>       OUTPUT=example.tested.sorted.bam INPUT=/root/dir/example.tested.bam SORT_ORDER=coordinate   INPUT=/root/dir/example.tested.bam
#>       SORT_ORDER=coordinate  /root/dir/example.tested.bam
#>     sbg:modifiedOn: 1450911170
#>     sbg:modifiedBy: bix-demo
#>     sbg:revisionsInfo:
#>     - sbg:modifiedBy: bix-demo
#>       sbg:modifiedOn: 1450911168
#>       sbg:revision: 0
#>     - sbg:modifiedBy: bix-demo
#>       sbg:modifiedOn: 1450911169
#>       sbg:revision: 1
#>     - sbg:modifiedBy: bix-demo
#>       sbg:modifiedOn: 1450911170
#>       sbg:revision: 2
#>     sbg:toolkit: Picard
#>     id: sevenbridges/public-apps/picard-sortsam-1-140/2
#>     inputs:
#>     - type:
#>       - 'null'
#>       - name: validation_stringency
#>         symbols:
#>         - STRICT
#>         - LENIENT
#>         - SILENT
#>         type: enum
#>       label: Validation stringency
#>       description: 'Validation stringency for all SAM files read by this program.
#>         Setting stringency to SILENT can improve performance when processing a BAM
#>         file in which variable-length data (read, qualities, tags) do not otherwise
#>         need to be decoded. This option can be set to ''null'' to clear the default
#>         value. Possible values: {STRICT, LENIENT, SILENT}.'
#>       streamable: no
#>       id: '#validation_stringency'
#>       inputBinding:
#>         position: 0
#>         prefix: VALIDATION_STRINGENCY=
#>         separate: no
#>         valueFrom:
#>           engine: '#cwl-js-engine'
#>           script: |-
#>             {
#>               if ($job.inputs.validation_stringency)
#>               {
#>                 return $job.inputs.validation_stringency
#>               }
#>               else
#>               {
#>                 return "SILENT"
#>               }
#>             }
#>           class: Expression
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Other input types
#>       sbg:toolDefaultValue: SILENT
#>       required: no
#>     - type:
#>       - name: sort_order
#>         symbols:
#>         - Unsorted
#>         - Queryname
#>         - Coordinate
#>         type: enum
#>       label: Sort order
#>       description: 'Sort order of the output file. Possible values: {unsorted, queryname,
#>         coordinate}.'
#>       streamable: no
#>       id: '#sort_order'
#>       inputBinding:
#>         position: 3
#>         prefix: SORT_ORDER=
#>         separate: no
#>         valueFrom:
#>           engine: '#cwl-js-engine'
#>           script: |-
#>             {
#>               p = $job.inputs.sort_order.toLowerCase()
#>               return p
#>             }
#>           class: Expression
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Other input types
#>       sbg:toolDefaultValue: Coordinate
#>       sbg:altPrefix: SO
#>       required: yes
#>     - type:
#>       - 'null'
#>       - name: quiet
#>         symbols:
#>         - 'True'
#>         - 'False'
#>         type: enum
#>       label: Quiet
#>       description: 'This parameter indicates whether to suppress job-summary info
#>         on System.err. This option can be set to ''null'' to clear the default value.
#>         Possible values: {true, false}.'
#>       streamable: no
#>       id: '#quiet'
#>       inputBinding:
#>         position: 0
#>         prefix: QUIET=
#>         separate: no
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Other input types
#>       sbg:toolDefaultValue: 'False'
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: output_type
#>         symbols:
#>         - BAM
#>         - SAM
#>         - SAME AS INPUT
#>         type: enum
#>       label: Output format
#>       description: Since Picard tools can output both SAM and BAM files, user can
#>         choose the format of the output file.
#>       streamable: no
#>       id: '#output_type'
#>       sbg:category: Other input types
#>       sbg:toolDefaultValue: SAME AS INPUT
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Memory per job
#>       description: Amount of RAM memory to be used per job. Defaults to 2048 MB for
#>         single threaded jobs.
#>       streamable: no
#>       id: '#memory_per_job'
#>       sbg:toolDefaultValue: '2048'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Max records in RAM
#>       description: When writing SAM files that need to be sorted, this parameter will
#>         specify the number of records stored in RAM before spilling to disk. Increasing
#>         this number reduces the number of file handles needed to sort a SAM file,
#>         and increases the amount of RAM needed. This option can be set to 'null' to
#>         clear the default value.
#>       streamable: no
#>       id: '#max_records_in_ram'
#>       inputBinding:
#>         position: 0
#>         prefix: MAX_RECORDS_IN_RAM=
#>         separate: no
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Other input types
#>       sbg:toolDefaultValue: '500000'
#>       required: no
#>     - type:
#>       - File
#>       label: Input BAM
#>       description: The BAM or SAM file to sort.
#>       streamable: no
#>       id: '#input_bam'
#>       inputBinding:
#>         position: 1
#>         prefix: INPUT=
#>         separate: no
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: File inputs
#>       sbg:fileTypes: BAM, SAM
#>       sbg:altPrefix: I
#>       required: yes
#>     - type:
#>       - 'null'
#>       - name: create_index
#>         symbols:
#>         - 'True'
#>         - 'False'
#>         type: enum
#>       label: Create index
#>       description: 'This parameter indicates whether to create a BAM index when writing
#>         a coordinate-sorted BAM file. This option can be set to ''null'' to clear
#>         the default value. Possible values: {true, false}.'
#>       streamable: no
#>       id: '#create_index'
#>       inputBinding:
#>         position: 5
#>         prefix: CREATE_INDEX=
#>         separate: no
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Other input types
#>       sbg:toolDefaultValue: 'False'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Compression level
#>       description: Compression level for all compressed files created (e.g. BAM and
#>         GELI). This option can be set to 'null' to clear the default value.
#>       streamable: no
#>       id: '#compression_level'
#>       inputBinding:
#>         position: 0
#>         prefix: COMPRESSION_LEVEL=
#>         separate: no
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Other input types
#>       sbg:toolDefaultValue: '5'
#>       required: no
#>     outputs:
#>     - type:
#>       - 'null'
#>       - File
#>       label: Sorted BAM/SAM
#>       description: Sorted BAM or SAM file.
#>       streamable: no
#>       id: '#sorted_bam'
#>       outputBinding:
#>         glob: '*.sorted.?am'
#>       sbg:fileTypes: BAM, SAM
#>     requirements:
#>     - class: ExpressionEngineRequirement
#>       id: '#cwl-js-engine'
#>       requirements:
#>       - class: DockerRequirement
#>         dockerPull: rabix/js-engine
#>       engineCommand: cwl-engine.js
#>     hints:
#>     - class: DockerRequirement
#>       dockerPull: images.sbgenomics.com/mladenlsbg/picard:1.140
#>       dockerImageId: eab0e70b6629
#>     - class: sbg:CPURequirement
#>       value: 1
#>     - class: sbg:MemRequirement
#>       value:
#>         engine: '#cwl-js-engine'
#>         script: "{\n  if($job.inputs.memory_per_job){\n  \treturn $job.inputs.memory_per_job\n
#>           \ }\n  \treturn 2048\n}"
#>         class: Expression
#>     label: Picard SortSam
#>     description: Picard SortSam sorts the input SAM or BAM. Input and output formats
#>       are determined by the file extension.
#>     class: CommandLineTool
#>     baseCommand:
#>     - java
#>     - class: Expression
#>       script: "{   \n  if($job.inputs.memory_per_job){\n    return '-Xmx'.concat($job.inputs.memory_per_job,
#>         'M')\n  }   \n  \treturn '-Xmx2048M'\n}"
#>       engine: '#cwl-js-engine'
#>     - -jar
#>     - /opt/picard-tools-1.140/picard.jar
#>     - SortSam
#>     arguments:
#>     - position: 0
#>       prefix: OUTPUT=
#>       separate: no
#>       valueFrom:
#>         engine: '#cwl-js-engine'
#>         script: "{\n  filename = $job.inputs.input_bam.path\n  ext = $job.inputs.output_type\n\nif
#>           (ext === \"BAM\")\n{\n    return filename.split('.').slice(0, -1).concat(\"sorted.bam\").join(\".\").replace(/^.*[\\\\\\/]/,
#>           '')\n    }\n\nelse if (ext === \"SAM\")\n{\n    return filename.split('.').slice(0,
#>           -1).concat(\"sorted.sam\").join('.').replace(/^.*[\\\\\\/]/, '')\n}\n\nelse
#>           \n{\n\treturn filename.split('.').slice(0, -1).concat(\"sorted.\"+filename.split('.').slice(-1)[0]).join(\".\").replace(/^.*[\\\\\\/]/,
#>           '')\n}\n}"
#>         class: Expression
#>     - position: 1000
#>       separate: yes
#>       valueFrom:
#>         engine: '#cwl-js-engine'
#>         script: "{\n  filename = $job.inputs.input_bam.path\n  \n  /* figuring out
#>           output file type */\n  ext = $job.inputs.output_type\n  if (ext === \"BAM\")\n
#>           \ {\n    out_extension = \"BAM\"\n  }\n  else if (ext === \"SAM\")\n  {\n
#>           \   out_extension = \"SAM\"\n  }\n  else \n  {\n\tout_extension = filename.split('.').slice(-1)[0].toUpperCase()\n
#>           \ }  \n  \n  /* if exist moving .bai in bam.bai */\n  if ($job.inputs.create_index
#>           === 'True' && $job.inputs.sort_order === 'Coordinate' && out_extension ==
#>           \"BAM\")\n  {\n    \n    old_name = filename.split('.').slice(0, -1).concat('sorted.bai').join('.').replace(/^.*[\\\\\\/]/,
#>           '')\n    new_name = filename.split('.').slice(0, -1).concat('sorted.bam.bai').join('.').replace(/^.*[\\\\\\/]/,
#>           '')\n    return \"; mv \" + \" \" + old_name + \" \" + new_name\n  }\n\n}"
#>         class: Expression
#>     stdin: ''
#>     stdout: ''
#>     successCodes: []
#>     temporaryFailCodes: []
#>     x: 773.0831807
#>     'y': 470.9165939
#>   sbg:x: 500.0
#>   sbg:y: 200.0
#> - id: '#STAR'
#>   inputs:
#>   - id: '#STAR.winFlankNbins'
#>   - id: '#STAR.winBinNbits'
#>   - id: '#STAR.winAnchorMultimapNmax'
#>     source: '#winAnchorMultimapNmax'
#>   - id: '#STAR.winAnchorDistNbins'
#>     source: '#winAnchorDistNbins'
#>   - id: '#STAR.twopassMode'
#>   - id: '#STAR.twopass1readsN'
#>   - id: '#STAR.sjdbScore'
#>   - id: '#STAR.sjdbOverhang'
#>     default: 100
#>   - id: '#STAR.sjdbInsertSave'
#>   - id: '#STAR.sjdbGTFtagExonParentTranscript'
#>   - id: '#STAR.sjdbGTFtagExonParentGene'
#>   - id: '#STAR.sjdbGTFfile'
#>     source: '#sjdbGTFfile'
#>   - id: '#STAR.sjdbGTFfeatureExon'
#>   - id: '#STAR.sjdbGTFchrPrefix'
#>   - id: '#STAR.seedSearchStartLmaxOverLread'
#>   - id: '#STAR.seedSearchStartLmax'
#>   - id: '#STAR.seedSearchLmax'
#>   - id: '#STAR.seedPerWindowNmax'
#>   - id: '#STAR.seedPerReadNmax'
#>   - id: '#STAR.seedNoneLociPerWindow'
#>   - id: '#STAR.seedMultimapNmax'
#>   - id: '#STAR.scoreStitchSJshift'
#>   - id: '#STAR.scoreInsOpen'
#>   - id: '#STAR.scoreInsBase'
#>   - id: '#STAR.scoreGenomicLengthLog2scale'
#>   - id: '#STAR.scoreGapNoncan'
#>   - id: '#STAR.scoreGapGCAG'
#>   - id: '#STAR.scoreGapATAC'
#>   - id: '#STAR.scoreGap'
#>   - id: '#STAR.scoreDelOpen'
#>   - id: '#STAR.scoreDelBase'
#>   - id: '#STAR.rg_seq_center'
#>   - id: '#STAR.rg_sample_id'
#>   - id: '#STAR.rg_platform_unit_id'
#>   - id: '#STAR.rg_platform'
#>   - id: '#STAR.rg_mfl'
#>   - id: '#STAR.rg_library_id'
#>   - id: '#STAR.reads'
#>     source:
#>     - '#reads'
#>     - test2
#>   - id: '#STAR.readMatesLengthsIn'
#>   - id: '#STAR.readMapNumber'
#>   - id: '#STAR.quantTranscriptomeBan'
#>   - id: '#STAR.quantMode'
#>     default: TranscriptomeSAM
#>   - id: '#STAR.outSortingType'
#>     default: SortedByCoordinate
#>   - id: '#STAR.outSJfilterReads'
#>   - id: '#STAR.outSJfilterOverhangMin'
#>   - id: '#STAR.outSJfilterIntronMaxVsReadN'
#>   - id: '#STAR.outSJfilterDistToOtherSJmin'
#>   - id: '#STAR.outSJfilterCountUniqueMin'
#>   - id: '#STAR.outSJfilterCountTotalMin'
#>   - id: '#STAR.outSAMunmapped'
#>   - id: '#STAR.outSAMtype'
#>     default: BAM
#>   - id: '#STAR.outSAMstrandField'
#>   - id: '#STAR.outSAMreadID'
#>   - id: '#STAR.outSAMprimaryFlag'
#>   - id: '#STAR.outSAMorder'
#>   - id: '#STAR.outSAMmode'
#>   - id: '#STAR.outSAMmapqUnique'
#>   - id: '#STAR.outSAMheaderPG'
#>   - id: '#STAR.outSAMheaderHD'
#>   - id: '#STAR.outSAMflagOR'
#>   - id: '#STAR.outSAMflagAND'
#>   - id: '#STAR.outSAMattributes'
#>   - id: '#STAR.outReadsUnmapped'
#>     default: Fastx
#>   - id: '#STAR.outQSconversionAdd'
#>   - id: '#STAR.outFilterType'
#>   - id: '#STAR.outFilterScoreMinOverLread'
#>   - id: '#STAR.outFilterScoreMin'
#>   - id: '#STAR.outFilterMultimapScoreRange'
#>   - id: '#STAR.outFilterMultimapNmax'
#>   - id: '#STAR.outFilterMismatchNoverReadLmax'
#>   - id: '#STAR.outFilterMismatchNoverLmax'
#>   - id: '#STAR.outFilterMismatchNmax'
#>   - id: '#STAR.outFilterMatchNminOverLread'
#>   - id: '#STAR.outFilterMatchNmin'
#>   - id: '#STAR.outFilterIntronMotifs'
#>   - id: '#STAR.limitSjdbInsertNsj'
#>   - id: '#STAR.limitOutSJoneRead'
#>   - id: '#STAR.limitOutSJcollapsed'
#>   - id: '#STAR.limitBAMsortRAM'
#>   - id: '#STAR.genomeDirName'
#>   - id: '#STAR.genome'
#>     source:
#>     - '#STAR_Genome_Generate.genome'
#>     - test1
#>   - id: '#STAR.clip5pNbases'
#>   - id: '#STAR.clip3pNbases'
#>   - id: '#STAR.clip3pAfterAdapterNbases'
#>   - id: '#STAR.clip3pAdapterSeq'
#>   - id: '#STAR.clip3pAdapterMMp'
#>   - id: '#STAR.chimSegmentMin'
#>   - id: '#STAR.chimScoreSeparation'
#>   - id: '#STAR.chimScoreMin'
#>   - id: '#STAR.chimScoreJunctionNonGTAG'
#>   - id: '#STAR.chimScoreDropMax'
#>   - id: '#STAR.chimOutType'
#>   - id: '#STAR.chimJunctionOverhangMin'
#>   - id: '#STAR.alignWindowsPerReadNmax'
#>   - id: '#STAR.alignTranscriptsPerWindowNmax'
#>   - id: '#STAR.alignTranscriptsPerReadNmax'
#>   - id: '#STAR.alignSplicedMateMapLminOverLmate'
#>   - id: '#STAR.alignSplicedMateMapLmin'
#>   - id: '#STAR.alignSoftClipAtReferenceEnds'
#>   - id: '#STAR.alignSJoverhangMin'
#>   - id: '#STAR.alignSJDBoverhangMin'
#>   - id: '#STAR.alignMatesGapMax'
#>   - id: '#STAR.alignIntronMin'
#>   - id: '#STAR.alignIntronMax'
#>   - id: '#STAR.alignEndsType'
#>   outputs:
#>   - id: '#STAR.unmapped_reads'
#>   - id: '#STAR.transcriptome_aligned_reads'
#>   - id: '#STAR.splice_junctions'
#>   - id: '#STAR.reads_per_gene'
#>   - id: '#STAR.log_files'
#>   - id: '#STAR.intermediate_genome'
#>   - id: '#STAR.chimeric_junctions'
#>   - id: '#STAR.chimeric_alignments'
#>   - id: '#STAR.aligned_reads'
#>   hints: []
#>   run:
#>     sbg:validationErrors: []
#>     sbg:sbgMaintained: no
#>     sbg:latestRevision: 4
#>     sbg:job:
#>       allocatedResources:
#>         mem: 60000
#>         cpu: 15
#>       inputs:
#>         alignWindowsPerReadNmax: 0
#>         outSAMheaderPG: outSAMheaderPG
#>         GENOME_DIR_NAME: ''
#>         outFilterMatchNminOverLread: 0
#>         rg_platform_unit_id: rg_platform_unit
#>         alignTranscriptsPerReadNmax: 0
#>         readMapNumber: 0
#>         alignSplicedMateMapLminOverLmate: 0
#>         alignMatesGapMax: 0
#>         outFilterMultimapNmax: 0
#>         clip5pNbases:
#>         - 0
#>         outSAMstrandField: None
#>         readMatesLengthsIn: NotEqual
#>         outSAMattributes: Standard
#>         seedMultimapNmax: 0
#>         rg_mfl: rg_mfl
#>         chimSegmentMin: 0
#>         winAnchorDistNbins: 0
#>         outSortingType: SortedByCoordinate
#>         outFilterMultimapScoreRange: 0
#>         sjdbInsertSave: Basic
#>         clip3pAfterAdapterNbases:
#>         - 0
#>         scoreDelBase: 0
#>         outFilterMatchNmin: 0
#>         twopass1readsN: 0
#>         outSAMunmapped: None
#>         genome:
#>           size: 0
#>           secondaryFiles: []
#>           class: File
#>           path: genome.ext
#>         sjdbGTFtagExonParentTranscript: ''
#>         limitBAMsortRAM: 0
#>         alignEndsType: Local
#>         seedNoneLociPerWindow: 0
#>         rg_sample_id: rg_sample
#>         sjdbGTFtagExonParentGene: ''
#>         chimScoreMin: 0
#>         outSJfilterIntronMaxVsReadN:
#>         - 0
#>         twopassMode: Basic
#>         alignSplicedMateMapLmin: 0
#>         outSJfilterReads: All
#>         outSAMprimaryFlag: OneBestScore
#>         outSJfilterCountTotalMin:
#>         - 3
#>         - 1
#>         - 1
#>         - 1
#>         outSAMorder: Paired
#>         outSAMflagAND: 0
#>         chimScoreSeparation: 0
#>         alignSJoverhangMin: 0
#>         outFilterScoreMin: 0
#>         seedSearchStartLmax: 0
#>         scoreGapGCAG: 0
#>         scoreGenomicLengthLog2scale: 0
#>         outFilterIntronMotifs: None
#>         outFilterMismatchNmax: 0
#>         reads:
#>         - size: 0
#>           secondaryFiles: []
#>           class: File
#>           metadata:
#>             format: fastq
#>             paired_end: '1'
#>             seq_center: illumina
#>           path: /test-data/mate_1.fastq.bz2
#>         scoreGap: 0
#>         outSJfilterOverhangMin:
#>         - 30
#>         - 12
#>         - 12
#>         - 12
#>         outSAMflagOR: 0
#>         outSAMmode: Full
#>         rg_library_id: ''
#>         chimScoreJunctionNonGTAG: 0
#>         scoreInsOpen: 0
#>         clip3pAdapterSeq:
#>         - clip3pAdapterSeq
#>         chimScoreDropMax: 0
#>         outFilterType: Normal
#>         scoreGapATAC: 0
#>         rg_platform: Ion Torrent PGM
#>         clip3pAdapterMMp:
#>         - 0
#>         sjdbGTFfeatureExon: ''
#>         outQSconversionAdd: 0
#>         quantMode: TranscriptomeSAM
#>         alignIntronMin: 0
#>         scoreInsBase: 0
#>         scoreGapNoncan: 0
#>         seedSearchLmax: 0
#>         outSJfilterDistToOtherSJmin:
#>         - 0
#>         outFilterScoreMinOverLread: 0
#>         alignSJDBoverhangMin: 0
#>         limitOutSJcollapsed: 0
#>         winAnchorMultimapNmax: 0
#>         outFilterMismatchNoverLmax: 0
#>         rg_seq_center: ''
#>         outSAMheaderHD: outSAMheaderHD
#>         chimOutType: Within
#>         quantTranscriptomeBan: IndelSoftclipSingleend
#>         limitOutSJoneRead: 0
#>         alignTranscriptsPerWindowNmax: 0
#>         sjdbOverhang: ~
#>         outReadsUnmapped: Fastx
#>         scoreStitchSJshift: 0
#>         seedPerWindowNmax: 0
#>         outSJfilterCountUniqueMin:
#>         - 3
#>         - 1
#>         - 1
#>         - 1
#>         scoreDelOpen: 0
#>         sjdbGTFfile:
#>         - path: /demo/test-data/chr20.gtf
#>         clip3pNbases:
#>         - 0
#>         - 3
#>         winBinNbits: 0
#>         sjdbScore: ~
#>         seedSearchStartLmaxOverLread: 0
#>         alignIntronMax: 0
#>         seedPerReadNmax: 0
#>         outFilterMismatchNoverReadLmax: 0
#>         winFlankNbins: 0
#>         sjdbGTFchrPrefix: chrPrefix
#>         alignSoftClipAtReferenceEnds: 'Yes'
#>         outSAMreadID: Standard
#>         outSAMtype: BAM
#>         chimJunctionOverhangMin: 0
#>         limitSjdbInsertNsj: 0
#>         outSAMmapqUnique: 0
#>     sbg:toolAuthor: Alexander Dobin/CSHL
#>     sbg:createdOn: 1450911471
#>     sbg:categories:
#>     - Alignment
#>     sbg:contributors:
#>     - ana_d
#>     - bix-demo
#>     - uros_sipetic
#>     sbg:links:
#>     - id: https://github.com/alexdobin/STAR
#>       label: Homepage
#>     - id: https://github.com/alexdobin/STAR/releases
#>       label: Releases
#>     - id: https://github.com/alexdobin/STAR/blob/master/doc/STARmanual.pdf
#>       label: Manual
#>     - id: https://groups.google.com/forum/#!forum/rna-star
#>       label: Support
#>     - id: http://www.ncbi.nlm.nih.gov/pubmed/23104886
#>       label: Publication
#>     sbg:project: bix-demo/star-2-4-2a-demo
#>     sbg:createdBy: bix-demo
#>     sbg:toolkitVersion: 2.4.2a
#>     sbg:id: sevenbridges/public-apps/star/4
#>     sbg:license: GNU General Public License v3.0 only
#>     sbg:revision: 4
#>     sbg:cmdPreview: tar -xvf genome.ext && /opt/STAR --runThreadN 15  --readFilesCommand
#>       bzcat  --sjdbGTFfile /demo/test-data/chr20.gtf  --sjdbGTFchrPrefix chrPrefix
#>       --sjdbInsertSave Basic  --twopass1readsN 0  --chimOutType WithinBAM  --outSAMattrRGline
#>       ID:1 CN:illumina PI:rg_mfl PL:Ion_Torrent_PGM PU:rg_platform_unit SM:rg_sample  --quantMode
#>       TranscriptomeSAM --outFileNamePrefix ./mate_1.fastq.bz2.  --readFilesIn /test-data/mate_1.fastq.bz2  &&
#>       tar -vcf mate_1.fastq.bz2._STARgenome.tar ./mate_1.fastq.bz2._STARgenome  &&
#>       mv mate_1.fastq.bz2.Unmapped.out.mate1 mate_1.fastq.bz2.Unmapped.out.mate1.fastq
#>     sbg:modifiedOn: 1462889222
#>     sbg:modifiedBy: ana_d
#>     sbg:revisionsInfo:
#>     - sbg:modifiedBy: bix-demo
#>       sbg:modifiedOn: 1450911471
#>       sbg:revision: 0
#>     - sbg:modifiedBy: bix-demo
#>       sbg:modifiedOn: 1450911473
#>       sbg:revision: 1
#>     - sbg:modifiedBy: bix-demo
#>       sbg:modifiedOn: 1450911475
#>       sbg:revision: 2
#>     - sbg:modifiedBy: uros_sipetic
#>       sbg:modifiedOn: 1462878528
#>       sbg:revision: 3
#>     - sbg:modifiedBy: ana_d
#>       sbg:modifiedOn: 1462889222
#>       sbg:revision: 4
#>     sbg:toolkit: STAR
#>     id: sevenbridges/public-apps/star/4
#>     inputs:
#>     - type:
#>       - 'null'
#>       - int
#>       label: Flanking regions size
#>       description: =log2(winFlank), where win Flank is the size of the left and right
#>         flanking regions for each window (int>0).
#>       streamable: no
#>       id: '#winFlankNbins'
#>       inputBinding:
#>         position: 0
#>         prefix: --winFlankNbins
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Windows, Anchors, Binning
#>       sbg:includeInPorts: yes
#>       sbg:toolDefaultValue: '4'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Bin size
#>       description: =log2(winBin), where winBin is the size of the bin for the windows/clustering,
#>         each window will occupy an integer number of bins (int>0).
#>       streamable: no
#>       id: '#winBinNbits'
#>       inputBinding:
#>         position: 0
#>         prefix: --winBinNbits
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Windows, Anchors, Binning
#>       sbg:includeInPorts: yes
#>       sbg:toolDefaultValue: '16'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Max loci anchors
#>       description: Max number of loci anchors are allowed to map to (int>0).
#>       streamable: no
#>       id: '#winAnchorMultimapNmax'
#>       inputBinding:
#>         position: 0
#>         prefix: --winAnchorMultimapNmax
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Windows, Anchors, Binning
#>       sbg:toolDefaultValue: '50'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Max bins between anchors
#>       description: Max number of bins between two anchors that allows aggregation
#>         of anchors into one window (int>0).
#>       streamable: no
#>       id: '#winAnchorDistNbins'
#>       inputBinding:
#>         position: 0
#>         prefix: --winAnchorDistNbins
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Windows, Anchors, Binning
#>       sbg:toolDefaultValue: '9'
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: twopassMode
#>         symbols:
#>         - None
#>         - Basic
#>         type: enum
#>       label: Two-pass mode
#>       description: '2-pass mapping mode. None: 1-pass mapping; Basic: basic 2-pass
#>         mapping, with all 1st pass junctions inserted into the genome indices on the
#>         fly.'
#>       streamable: no
#>       id: '#twopassMode'
#>       inputBinding:
#>         position: 0
#>         prefix: --twopassMode
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: 2-pass mapping
#>       sbg:toolDefaultValue: None
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Reads to process in 1st step
#>       description: 'Number of reads to process for the 1st step. 0: 1-step only, no
#>         2nd pass; use very large number to map all reads in the first step (int>0).'
#>       streamable: no
#>       id: '#twopass1readsN'
#>       sbg:category: 2-pass mapping
#>       sbg:toolDefaultValue: '-1'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Extra alignment score
#>       description: Extra alignment score for alignments that cross database junctions.
#>       streamable: no
#>       id: '#sjdbScore'
#>       sbg:category: Splice junctions database
#>       sbg:toolDefaultValue: '2'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: '"Overhang" length'
#>       description: Length of the donor/acceptor sequence on each side of the junctions,
#>         ideally = (mate_length - 1) (int >= 0), if int = 0, splice junction database
#>         is not used.
#>       streamable: no
#>       id: '#sjdbOverhang'
#>       sbg:category: Splice junctions database
#>       sbg:toolDefaultValue: '100'
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: sjdbInsertSave
#>         symbols:
#>         - Basic
#>         - All
#>         - None
#>         type: enum
#>       label: Save junction files
#>       description: 'Which files to save when sjdb junctions are inserted on the fly
#>         at the mapping step. None: not saving files at all; Basic: only small junction/transcript
#>         files; All: all files including big Genome, SA and SAindex. These files are
#>         output as archive.'
#>       streamable: no
#>       id: '#sjdbInsertSave'
#>       sbg:category: Splice junctions database
#>       sbg:toolDefaultValue: None
#>       required: no
#>     - type:
#>       - 'null'
#>       - string
#>       label: Exons' parents name
#>       description: Tag name to be used as exons' transcript-parents.
#>       streamable: no
#>       id: '#sjdbGTFtagExonParentTranscript'
#>       sbg:category: Splice junctions database
#>       sbg:toolDefaultValue: transcript_id
#>       required: no
#>     - type:
#>       - 'null'
#>       - string
#>       label: Gene name
#>       description: Tag name to be used as exons' gene-parents.
#>       streamable: no
#>       id: '#sjdbGTFtagExonParentGene'
#>       sbg:category: Splice junctions database
#>       sbg:toolDefaultValue: gene_id
#>       required: no
#>     - type:
#>       - 'null'
#>       - items: File
#>         type: array
#>       label: Splice junction file
#>       description: Gene model annotations and/or known transcripts. No need to include
#>         this input, except in case of using "on the fly" annotations.
#>       streamable: no
#>       id: '#sjdbGTFfile'
#>       sbg:category: Basic
#>       sbg:fileTypes: GTF, GFF, TXT
#>       required: no
#>     - type:
#>       - 'null'
#>       - string
#>       label: Set exons feature
#>       description: Feature type in GTF file to be used as exons for building transcripts.
#>       streamable: no
#>       id: '#sjdbGTFfeatureExon'
#>       sbg:category: Splice junctions database
#>       sbg:toolDefaultValue: exon
#>       required: no
#>     - type:
#>       - 'null'
#>       - string
#>       label: Chromosome names
#>       description: Prefix for chromosome names in a GTF file (e.g. 'chr' for using
#>         ENSMEBL annotations with UCSC geneomes).
#>       streamable: no
#>       id: '#sjdbGTFchrPrefix'
#>       sbg:category: Splice junctions database
#>       sbg:toolDefaultValue: '-'
#>       required: no
#>     - type:
#>       - 'null'
#>       - float
#>       label: Search start point normalized
#>       description: seedSearchStartLmax normalized to read length (sum of mates' lengths
#>         for paired-end reads).
#>       streamable: no
#>       id: '#seedSearchStartLmaxOverLread'
#>       inputBinding:
#>         position: 0
#>         prefix: --seedSearchStartLmaxOverLread
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: '1.0'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Search start point
#>       description: Defines the search start point through the read - the read is split
#>         into pieces no longer than this value (int>0).
#>       streamable: no
#>       id: '#seedSearchStartLmax'
#>       inputBinding:
#>         position: 0
#>         prefix: --seedSearchStartLmax
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: '50'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Max seed length
#>       description: Defines the maximum length of the seeds, if =0 max seed length
#>         is infinite (int>=0).
#>       streamable: no
#>       id: '#seedSearchLmax'
#>       inputBinding:
#>         position: 0
#>         prefix: --seedSearchLmax
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: '0'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Max seeds per window
#>       description: Max number of seeds per window (int>=0).
#>       streamable: no
#>       id: '#seedPerWindowNmax'
#>       inputBinding:
#>         position: 0
#>         prefix: --seedPerWindowNmax
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: '50'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Max seeds per read
#>       description: Max number of seeds per read (int>=0).
#>       streamable: no
#>       id: '#seedPerReadNmax'
#>       inputBinding:
#>         position: 0
#>         prefix: --seedPerReadNmax
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: '1000'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Max one-seed loci per window
#>       description: Max number of one seed loci per window (int>=0).
#>       streamable: no
#>       id: '#seedNoneLociPerWindow'
#>       inputBinding:
#>         position: 0
#>         prefix: --seedNoneLociPerWindow
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: '10'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Filter pieces for stitching
#>       description: Only pieces that map fewer than this value are utilized in the
#>         stitching procedure (int>=0).
#>       streamable: no
#>       id: '#seedMultimapNmax'
#>       inputBinding:
#>         position: 0
#>         prefix: --seedMultimapNmax
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: '10000'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Max score reduction
#>       description: Maximum score reduction while searching for SJ boundaries in the
#>         stitching step.
#>       streamable: no
#>       id: '#scoreStitchSJshift'
#>       inputBinding:
#>         position: 0
#>         prefix: --scoreStitchSJshift
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Scoring
#>       sbg:toolDefaultValue: '1'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Insertion Open Penalty
#>       description: Insertion open penalty.
#>       streamable: no
#>       id: '#scoreInsOpen'
#>       inputBinding:
#>         position: 0
#>         prefix: --scoreInsOpen
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Scoring
#>       sbg:toolDefaultValue: '-2'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Insertion extension penalty
#>       description: Insertion extension penalty per base (in addition to --scoreInsOpen).
#>       streamable: no
#>       id: '#scoreInsBase'
#>       inputBinding:
#>         position: 0
#>         prefix: --scoreInsBase
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Scoring
#>       sbg:toolDefaultValue: '-2'
#>       required: no
#>     - type:
#>       - 'null'
#>       - float
#>       label: Log scaled score
#>       description: 'Extra score logarithmically scaled with genomic length of the
#>         alignment: <int>*log2(genomicLength).'
#>       streamable: no
#>       id: '#scoreGenomicLengthLog2scale'
#>       inputBinding:
#>         position: 0
#>         prefix: --scoreGenomicLengthLog2scale
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Scoring
#>       sbg:toolDefaultValue: '-0.25'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Non-canonical gap open
#>       description: Non-canonical gap open penalty (in addition to --scoreGap).
#>       streamable: no
#>       id: '#scoreGapNoncan'
#>       inputBinding:
#>         position: 0
#>         prefix: --scoreGapNoncan
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Scoring
#>       sbg:toolDefaultValue: '-8'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: GC/AG and CT/GC gap open
#>       description: GC/AG and CT/GC gap open penalty (in addition to --scoreGap).
#>       streamable: no
#>       id: '#scoreGapGCAG'
#>       inputBinding:
#>         position: 0
#>         prefix: --scoreGapGCAG
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Scoring
#>       sbg:toolDefaultValue: '-4'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: AT/AC and GT/AT gap open
#>       description: AT/AC and GT/AT gap open penalty (in addition to --scoreGap).
#>       streamable: no
#>       id: '#scoreGapATAC'
#>       inputBinding:
#>         position: 0
#>         prefix: --scoreGapATAC
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Scoring
#>       sbg:toolDefaultValue: '-8'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Gap open penalty
#>       description: Gap open penalty.
#>       streamable: no
#>       id: '#scoreGap'
#>       inputBinding:
#>         position: 0
#>         prefix: --scoreGap
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Scoring
#>       sbg:toolDefaultValue: '0'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Deletion open penalty
#>       description: Deletion open penalty.
#>       streamable: no
#>       id: '#scoreDelOpen'
#>       inputBinding:
#>         position: 0
#>         prefix: --scoreDelOpen
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Scoring
#>       sbg:toolDefaultValue: '-2'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Deletion extension penalty
#>       description: Deletion extension penalty per base (in addition to --scoreDelOpen).
#>       streamable: no
#>       id: '#scoreDelBase'
#>       inputBinding:
#>         position: 0
#>         prefix: --scoreDelBase
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Scoring
#>       sbg:toolDefaultValue: '-2'
#>       required: no
#>     - type:
#>       - 'null'
#>       - string
#>       label: Sequencing center
#>       description: Specify the sequencing center for RG line.
#>       streamable: no
#>       id: '#rg_seq_center'
#>       sbg:category: Read group
#>       sbg:toolDefaultValue: Inferred from metadata
#>       required: no
#>     - type:
#>       - 'null'
#>       - string
#>       label: Sample ID
#>       description: Specify the sample ID for RG line.
#>       streamable: no
#>       id: '#rg_sample_id'
#>       sbg:category: Read group
#>       sbg:toolDefaultValue: Inferred from metadata
#>       required: no
#>     - type:
#>       - 'null'
#>       - string
#>       label: Platform unit ID
#>       description: Specify the platform unit ID for RG line.
#>       streamable: no
#>       id: '#rg_platform_unit_id'
#>       sbg:category: Read group
#>       sbg:toolDefaultValue: Inferred from metadata
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: rg_platform
#>         symbols:
#>         - LS 454
#>         - Helicos
#>         - Illumina
#>         - ABI SOLiD
#>         - Ion Torrent PGM
#>         - PacBio
#>         type: enum
#>       label: Platform
#>       description: Specify the version of the technology that was used for sequencing
#>         or assaying.
#>       streamable: no
#>       id: '#rg_platform'
#>       sbg:category: Read group
#>       sbg:toolDefaultValue: Inferred from metadata
#>       required: no
#>     - type:
#>       - 'null'
#>       - string
#>       label: Median fragment length
#>       description: Specify the median fragment length for RG line.
#>       streamable: no
#>       id: '#rg_mfl'
#>       sbg:category: Read group
#>       sbg:toolDefaultValue: Inferred from metadata
#>       required: no
#>     - type:
#>       - 'null'
#>       - string
#>       label: Library ID
#>       description: Specify the library ID for RG line.
#>       streamable: no
#>       id: '#rg_library_id'
#>       sbg:category: Read group
#>       sbg:toolDefaultValue: Inferred from metadata
#>       required: no
#>     - type:
#>       - items: File
#>         type: array
#>       label: Read sequence
#>       description: Read sequence.
#>       streamable: no
#>       id: '#reads'
#>       inputBinding:
#>         position: 10
#>         separate: yes
#>         itemSeparator: ' '
#>         valueFrom:
#>           engine: '#cwl-js-engine'
#>           script: "{\t\n  var list = [].concat($job.inputs.reads)\n  \n  var resp
#>             = []\n  \n  if (list.length == 1){\n    resp.push(list[0].path)\n    \n
#>             \ }else if (list.length == 2){    \n    \n    left = \"\"\n    right =
#>             \"\"\n      \n    for (index = 0; index < list.length; ++index) {\n      \n
#>             \     if (list[index].metadata != null){\n        if (list[index].metadata.paired_end
#>             == 1){\n          left = list[index].path\n        }else if (list[index].metadata.paired_end
#>             == 2){\n          right = list[index].path\n        }\n      }\n    }\n
#>             \   \n    if (left != \"\" && right != \"\"){      \n      resp.push(left)\n
#>             \     resp.push(right)\n    }\n  }\n  else if (list.length > 2){\n    left
#>             = []\n    right = []\n      \n    for (index = 0; index < list.length;
#>             ++index) {\n      \n      if (list[index].metadata != null){\n        if
#>             (list[index].metadata.paired_end == 1){\n          left.push(list[index].path)\n
#>             \       }else if (list[index].metadata.paired_end == 2){\n          right.push(list[index].path)\n
#>             \       }\n      }\n    }\n    left_join = left.join()\n    right_join
#>             = right.join()\n    if (left != [] && right != []){      \n      resp.push(left_join)\n
#>             \     resp.push(right_join)\n    }\t\n  }\n  \n  if(resp.length > 0){
#>             \   \n    return \"--readFilesIn \".concat(resp.join(\" \"))\n  }\n}"
#>           class: Expression
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Basic
#>       sbg:fileTypes: FASTA, FASTQ, FA, FQ, FASTQ.GZ, FQ.GZ, FASTQ.BZ2, FQ.BZ2
#>       sbg:x: 200.0
#>       sbg:y: 200.0
#>       sbg:includeInPorts: yes
#>       required: yes
#>     - type:
#>       - 'null'
#>       - name: readMatesLengthsIn
#>         symbols:
#>         - NotEqual
#>         - Equal
#>         type: enum
#>       label: Reads lengths
#>       description: Equal/Not equal - lengths of names, sequences, qualities for both
#>         mates are the same/not the same. "Not equal" is safe in all situations.
#>       streamable: no
#>       id: '#readMatesLengthsIn'
#>       inputBinding:
#>         position: 0
#>         prefix: --readMatesLengthsIn
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Read parameters
#>       sbg:toolDefaultValue: NotEqual
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Reads to map
#>       description: Number of reads to map from the beginning of the file.
#>       streamable: no
#>       id: '#readMapNumber'
#>       inputBinding:
#>         position: 0
#>         prefix: --readMapNumber
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Read parameters
#>       sbg:toolDefaultValue: '-1'
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: quantTranscriptomeBan
#>         symbols:
#>         - IndelSoftclipSingleend
#>         - Singleend
#>         type: enum
#>       label: Prohibit alignment type
#>       description: 'Prohibit various alignment type. IndelSoftclipSingleend: prohibit
#>         indels, soft clipping and single-end alignments - compatible with RSEM; Singleend:
#>         prohibit single-end alignments.'
#>       streamable: no
#>       id: '#quantTranscriptomeBan'
#>       inputBinding:
#>         position: 0
#>         prefix: --quantTranscriptomeBan
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Quantification of Annotations
#>       sbg:toolDefaultValue: IndelSoftclipSingleend
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: quantMode
#>         symbols:
#>         - TranscriptomeSAM
#>         - GeneCounts
#>         type: enum
#>       label: Quantification mode
#>       description: Types of quantification requested. 'TranscriptomeSAM' option outputs
#>         SAM/BAM alignments to transcriptome into a separate file. With 'GeneCounts'
#>         option, STAR will count number of reads per gene while mapping.
#>       streamable: no
#>       id: '#quantMode'
#>       sbg:category: Quantification of Annotations
#>       sbg:toolDefaultValue: '-'
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: outSortingType
#>         symbols:
#>         - Unsorted
#>         - SortedByCoordinate
#>         - Unsorted SortedByCoordinate
#>         type: enum
#>       label: Output sorting type
#>       description: Type of output sorting.
#>       streamable: no
#>       id: '#outSortingType'
#>       sbg:category: Output
#>       sbg:toolDefaultValue: SortedByCoordinate
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: outSJfilterReads
#>         symbols:
#>         - All
#>         - Unique
#>         type: enum
#>       label: Collapsed junctions reads
#>       description: 'Which reads to consider for collapsed splice junctions output.
#>         All: all reads, unique- and multi-mappers; Unique: uniquely mapping reads
#>         only.'
#>       streamable: no
#>       id: '#outSJfilterReads'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSJfilterReads
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: 'Output filtering: splice junctions'
#>       sbg:toolDefaultValue: All
#>       required: no
#>     - type:
#>       - 'null'
#>       - items: int
#>         type: array
#>       label: Min overhang SJ
#>       description: Minimum overhang length for splice junctions on both sides for
#>         each of the motifs. To set no output for desired motif, assign -1 to the corresponding
#>         field. Does not apply to annotated junctions.
#>       streamable: no
#>       id: '#outSJfilterOverhangMin'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSJfilterOverhangMin
#>         separate: yes
#>         itemSeparator: ' '
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: 'Output filtering: splice junctions'
#>       sbg:toolDefaultValue: 30 12 12 12
#>       required: no
#>     - type:
#>       - 'null'
#>       - items: int
#>         type: array
#>       label: Max gap allowed
#>       description: 'Maximum gap allowed for junctions supported by 1,2,3...N reads
#>         (int >= 0) i.e. by default junctions supported by 1 read can have gaps <=50000b,
#>         by 2 reads: <=100000b, by 3 reads: <=200000. By 4 or more reads: any gap <=alignIntronMax.
#>         Does not apply to annotated junctions.'
#>       streamable: no
#>       id: '#outSJfilterIntronMaxVsReadN'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSJfilterIntronMaxVsReadN
#>         separate: yes
#>         itemSeparator: ' '
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: 'Output filtering: splice junctions'
#>       sbg:toolDefaultValue: 50000 100000 200000
#>       required: no
#>     - type:
#>       - 'null'
#>       - items: int
#>         type: array
#>       label: Min distance to other donor/acceptor
#>       description: Minimum allowed distance to other junctions' donor/acceptor for
#>         each of the motifs (int >= 0). Does not apply to annotated junctions.
#>       streamable: no
#>       id: '#outSJfilterDistToOtherSJmin'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSJfilterDistToOtherSJmin
#>         separate: yes
#>         itemSeparator: ' '
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: 'Output filtering: splice junctions'
#>       sbg:toolDefaultValue: 10 0 5 10
#>       required: no
#>     - type:
#>       - 'null'
#>       - items: int
#>         type: array
#>       label: Min unique count
#>       description: Minimum uniquely mapping read count per junction for each of the
#>         motifs. To set no output for desired motif, assign -1 to the corresponding
#>         field. Junctions are output if one of --outSJfilterCountUniqueMin OR --outSJfilterCountTotalMin
#>         conditions are satisfied. Does not apply to annotated junctions.
#>       streamable: no
#>       id: '#outSJfilterCountUniqueMin'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSJfilterCountUniqueMin
#>         separate: yes
#>         itemSeparator: ' '
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: 'Output filtering: splice junctions'
#>       sbg:toolDefaultValue: 3 1 1 1
#>       required: no
#>     - type:
#>       - 'null'
#>       - items: int
#>         type: array
#>       label: Min total count
#>       description: Minimum total (multi-mapping+unique) read count per junction for
#>         each of the motifs. To set no output for desired motif, assign -1 to the corresponding
#>         field. Junctions are output if one of --outSJfilterCountUniqueMin OR --outSJfilterCountTotalMin
#>         conditions are satisfied. Does not apply to annotated junctions.
#>       streamable: no
#>       id: '#outSJfilterCountTotalMin'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSJfilterCountTotalMin
#>         separate: yes
#>         itemSeparator: ' '
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: 'Output filtering: splice junctions'
#>       sbg:toolDefaultValue: 3 1 1 1
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: outSAMunmapped
#>         symbols:
#>         - None
#>         - Within
#>         type: enum
#>       label: Write unmapped in SAM
#>       description: 'Output of unmapped reads in the SAM format. None: no output Within:
#>         output unmapped reads within the main SAM file (i.e. Aligned.out.sam).'
#>       streamable: no
#>       id: '#outSAMunmapped'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSAMunmapped
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output
#>       sbg:toolDefaultValue: None
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: outSAMtype
#>         symbols:
#>         - SAM
#>         - BAM
#>         type: enum
#>       label: Output format
#>       description: Format of output alignments.
#>       streamable: no
#>       id: '#outSAMtype'
#>       inputBinding:
#>         position: 0
#>         separate: yes
#>         valueFrom:
#>           engine: '#cwl-js-engine'
#>           script: |-
#>             {
#>               SAM_type = $job.inputs.outSAMtype
#>               SORT_type = $job.inputs.outSortingType
#>               if (SAM_type && SORT_type) {
#>                 return "--outSAMtype ".concat(SAM_type, " ", SORT_type)
#>               }
#>             }
#>           class: Expression
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output
#>       sbg:toolDefaultValue: SAM
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: outSAMstrandField
#>         symbols:
#>         - None
#>         - intronMotif
#>         type: enum
#>       label: Strand field flag
#>       description: 'Cufflinks-like strand field flag. None: not used; intronMotif:
#>         strand derived from the intron motif. Reads with inconsistent and/or non-canonical
#>         introns are filtered out.'
#>       streamable: no
#>       id: '#outSAMstrandField'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSAMstrandField
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output
#>       sbg:toolDefaultValue: None
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: outSAMreadID
#>         symbols:
#>         - Standard
#>         - Number
#>         type: enum
#>       label: Read ID
#>       description: 'Read ID record type. Standard: first word (until space) from the
#>         FASTx read ID line, removing /1,/2 from the end; Number: read number (index)
#>         in the FASTx file.'
#>       streamable: no
#>       id: '#outSAMreadID'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSAMreadID
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output
#>       sbg:toolDefaultValue: Standard
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: outSAMprimaryFlag
#>         symbols:
#>         - OneBestScore
#>         - AllBestScore
#>         type: enum
#>       label: Primary alignments
#>       description: 'Which alignments are considered primary - all others will be marked
#>         with 0x100 bit in the FLAG. OneBestScore: only one alignment with the best
#>         score is primary; AllBestScore: all alignments with the best score are primary.'
#>       streamable: no
#>       id: '#outSAMprimaryFlag'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSAMprimaryFlag
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output
#>       sbg:toolDefaultValue: OneBestScore
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: outSAMorder
#>         symbols:
#>         - Paired
#>         - PairedKeepInputOrder
#>         type: enum
#>       label: Sorting in SAM
#>       description: 'Type of sorting for the SAM output. Paired: one mate after the
#>         other for all paired alignments; PairedKeepInputOrder: one mate after the
#>         other for all paired alignments, the order is kept the same as in the input
#>         FASTQ files.'
#>       streamable: no
#>       id: '#outSAMorder'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSAMorder
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output
#>       sbg:toolDefaultValue: Paired
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: outSAMmode
#>         symbols:
#>         - Full
#>         - NoQS
#>         type: enum
#>       label: SAM mode
#>       description: 'Mode of SAM output. Full: full SAM output; NoQS: full SAM but
#>         without quality scores.'
#>       streamable: no
#>       id: '#outSAMmode'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSAMmode
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output
#>       sbg:toolDefaultValue: Full
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: MAPQ value
#>       description: MAPQ value for unique mappers (0 to 255).
#>       streamable: no
#>       id: '#outSAMmapqUnique'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSAMmapqUnique
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output
#>       sbg:toolDefaultValue: '255'
#>       required: no
#>     - type:
#>       - 'null'
#>       - string
#>       label: SAM header @PG
#>       description: Extra @PG (software) line of the SAM header (in addition to STAR).
#>       streamable: no
#>       id: '#outSAMheaderPG'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSAMheaderPG
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output
#>       sbg:toolDefaultValue: '-'
#>       required: no
#>     - type:
#>       - 'null'
#>       - string
#>       label: SAM header @HD
#>       description: '@HD (header) line of the SAM header.'
#>       streamable: no
#>       id: '#outSAMheaderHD'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSAMheaderHD
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output
#>       sbg:toolDefaultValue: '-'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: OR SAM flag
#>       description: Set specific bits of the SAM FLAG.
#>       streamable: no
#>       id: '#outSAMflagOR'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSAMflagOR
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output
#>       sbg:toolDefaultValue: '0'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: AND SAM flag
#>       description: Set specific bits of the SAM FLAG.
#>       streamable: no
#>       id: '#outSAMflagAND'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSAMflagAND
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output
#>       sbg:toolDefaultValue: '65535'
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: outSAMattributes
#>         symbols:
#>         - Standard
#>         - NH
#>         - All
#>         - None
#>         type: enum
#>       label: SAM attributes
#>       description: 'Desired SAM attributes, in the order desired for the output SAM.
#>         NH: any combination in any order; Standard: NH HI AS nM; All: NH HI AS nM
#>         NM MD jM jI; None: no attributes.'
#>       streamable: no
#>       id: '#outSAMattributes'
#>       inputBinding:
#>         position: 0
#>         prefix: --outSAMattributes
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output
#>       sbg:toolDefaultValue: Standard
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: outReadsUnmapped
#>         symbols:
#>         - None
#>         - Fastx
#>         type: enum
#>       label: Output unmapped reads
#>       description: 'Output of unmapped reads (besides SAM). None: no output; Fastx:
#>         output in separate fasta/fastq files, Unmapped.out.mate1/2.'
#>       streamable: no
#>       id: '#outReadsUnmapped'
#>       inputBinding:
#>         position: 0
#>         prefix: --outReadsUnmapped
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output
#>       sbg:toolDefaultValue: None
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Quality conversion
#>       description: Add this number to the quality score (e.g. to convert from Illumina
#>         to Sanger, use -31).
#>       streamable: no
#>       id: '#outQSconversionAdd'
#>       inputBinding:
#>         position: 0
#>         prefix: --outQSconversionAdd
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output
#>       sbg:toolDefaultValue: '0'
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: outFilterType
#>         symbols:
#>         - Normal
#>         - BySJout
#>         type: enum
#>       label: Filtering type
#>       description: 'Type of filtering. Normal: standard filtering using only current
#>         alignment; BySJout: keep only those reads that contain junctions that passed
#>         filtering into SJ.out.tab.'
#>       streamable: no
#>       id: '#outFilterType'
#>       inputBinding:
#>         position: 0
#>         prefix: --outFilterType
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output filtering
#>       sbg:toolDefaultValue: Normal
#>       required: no
#>     - type:
#>       - 'null'
#>       - float
#>       label: Min score normalized
#>       description: '''Minimum score'' normalized to read length (sum of mates'' lengths
#>         for paired-end reads).'
#>       streamable: no
#>       id: '#outFilterScoreMinOverLread'
#>       inputBinding:
#>         position: 0
#>         prefix: --outFilterScoreMinOverLread
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output filtering
#>       sbg:toolDefaultValue: '0.66'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Min score
#>       description: Alignment will be output only if its score is higher than this
#>         value.
#>       streamable: no
#>       id: '#outFilterScoreMin'
#>       inputBinding:
#>         position: 0
#>         prefix: --outFilterScoreMin
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output filtering
#>       sbg:toolDefaultValue: '0'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Multimapping score range
#>       description: The score range below the maximum score for multimapping alignments.
#>       streamable: no
#>       id: '#outFilterMultimapScoreRange'
#>       inputBinding:
#>         position: 0
#>         prefix: --outFilterMultimapScoreRange
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output filtering
#>       sbg:toolDefaultValue: '1'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Max number of mappings
#>       description: Read alignments will be output only if the read maps fewer than
#>         this value, otherwise no alignments will be output.
#>       streamable: no
#>       id: '#outFilterMultimapNmax'
#>       inputBinding:
#>         position: 0
#>         prefix: --outFilterMultimapNmax
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output filtering
#>       sbg:toolDefaultValue: '10'
#>       required: no
#>     - type:
#>       - 'null'
#>       - float
#>       label: Mismatches to *read* length
#>       description: Alignment will be output only if its ratio of mismatches to *read*
#>         length is less than this value.
#>       streamable: no
#>       id: '#outFilterMismatchNoverReadLmax'
#>       inputBinding:
#>         position: 0
#>         prefix: --outFilterMismatchNoverReadLmax
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output filtering
#>       sbg:toolDefaultValue: '1'
#>       required: no
#>     - type:
#>       - 'null'
#>       - float
#>       label: Mismatches to *mapped* length
#>       description: Alignment will be output only if its ratio of mismatches to *mapped*
#>         length is less than this value.
#>       streamable: no
#>       id: '#outFilterMismatchNoverLmax'
#>       inputBinding:
#>         position: 0
#>         prefix: --outFilterMismatchNoverLmax
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output filtering
#>       sbg:toolDefaultValue: '0.3'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Max number of mismatches
#>       description: Alignment will be output only if it has fewer mismatches than this
#>         value.
#>       streamable: no
#>       id: '#outFilterMismatchNmax'
#>       inputBinding:
#>         position: 0
#>         prefix: --outFilterMismatchNmax
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output filtering
#>       sbg:toolDefaultValue: '10'
#>       required: no
#>     - type:
#>       - 'null'
#>       - float
#>       label: Min matched bases normalized
#>       description: '''Minimum matched bases'' normalized to read length (sum of mates
#>         lengths for paired-end reads).'
#>       streamable: no
#>       id: '#outFilterMatchNminOverLread'
#>       inputBinding:
#>         position: 0
#>         prefix: --outFilterMatchNminOverLread
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output filtering
#>       sbg:toolDefaultValue: '0.66'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Min matched bases
#>       description: Alignment will be output only if the number of matched bases is
#>         higher than this value.
#>       streamable: no
#>       id: '#outFilterMatchNmin'
#>       inputBinding:
#>         position: 0
#>         prefix: --outFilterMatchNmin
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output filtering
#>       sbg:toolDefaultValue: '0'
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: outFilterIntronMotifs
#>         symbols:
#>         - None
#>         - RemoveNoncanonical
#>         - RemoveNoncanonicalUnannotated
#>         type: enum
#>       label: Motifs filtering
#>       description: 'Filter alignment using their motifs. None: no filtering; RemoveNoncanonical:
#>         filter out alignments that contain non-canonical junctions; RemoveNoncanonicalUnannotated:
#>         filter out alignments that contain non-canonical unannotated junctions when
#>         using annotated splice junctions database. The annotated non-canonical junctions
#>         will be kept.'
#>       streamable: no
#>       id: '#outFilterIntronMotifs'
#>       inputBinding:
#>         position: 0
#>         prefix: --outFilterIntronMotifs
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Output filtering
#>       sbg:toolDefaultValue: None
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Max insert junctions
#>       description: Maximum number of junction to be inserted to the genome on the
#>         fly at the mapping stage, including those from annotations and those detected
#>         in the 1st step of the 2-pass run.
#>       streamable: no
#>       id: '#limitSjdbInsertNsj'
#>       inputBinding:
#>         position: 0
#>         prefix: --limitSjdbInsertNsj
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Limits
#>       sbg:toolDefaultValue: '1000000'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Junctions max number
#>       description: Max number of junctions for one read (including all multi-mappers).
#>       streamable: no
#>       id: '#limitOutSJoneRead'
#>       inputBinding:
#>         position: 0
#>         prefix: --limitOutSJoneRead
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Limits
#>       sbg:toolDefaultValue: '1000'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Collapsed junctions max number
#>       description: Max number of collapsed junctions.
#>       streamable: no
#>       id: '#limitOutSJcollapsed'
#>       inputBinding:
#>         position: 0
#>         prefix: --limitOutSJcollapsed
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Limits
#>       sbg:toolDefaultValue: '1000000'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Limit BAM sorting memory
#>       description: Maximum available RAM for sorting BAM. If set to 0, it will be
#>         set to the genome index size.
#>       streamable: no
#>       id: '#limitBAMsortRAM'
#>       inputBinding:
#>         position: 0
#>         prefix: --limitBAMsortRAM
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Limits
#>       sbg:toolDefaultValue: '0'
#>       required: no
#>     - type:
#>       - 'null'
#>       - string
#>       label: Genome dir name
#>       description: Name of the directory which contains genome files (when genome.tar
#>         is uncompressed).
#>       streamable: no
#>       id: '#genomeDirName'
#>       inputBinding:
#>         position: 0
#>         prefix: --genomeDir
#>         separate: yes
#>         valueFrom:
#>           engine: '#cwl-js-engine'
#>           script: $job.inputs.genomeDirName || "genomeDir"
#>           class: Expression
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Basic
#>       sbg:toolDefaultValue: genomeDir
#>       required: no
#>     - type:
#>       - File
#>       label: Genome files
#>       description: Genome files created using STAR Genome Generate.
#>       streamable: no
#>       id: '#genome'
#>       sbg:category: Basic
#>       sbg:fileTypes: TAR
#>       required: yes
#>     - type:
#>       - 'null'
#>       - items: int
#>         type: array
#>       label: Clip 5p bases
#>       description: Number of bases to clip from 5p of each mate. In case only one
#>         value is given, it will be assumed the same for both mates.
#>       streamable: no
#>       id: '#clip5pNbases'
#>       inputBinding:
#>         position: 0
#>         prefix: --clip5pNbases
#>         separate: yes
#>         itemSeparator: ' '
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Read parameters
#>       sbg:toolDefaultValue: '0'
#>       required: no
#>     - type:
#>       - 'null'
#>       - items: int
#>         type: array
#>       label: Clip 3p bases
#>       description: Number of bases to clip from 3p of each mate. In case only one
#>         value is given, it will be assumed the same for both mates.
#>       streamable: no
#>       id: '#clip3pNbases'
#>       inputBinding:
#>         position: 0
#>         prefix: --clip3pNbases
#>         separate: yes
#>         itemSeparator: ' '
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Read parameters
#>       sbg:toolDefaultValue: '0'
#>       required: no
#>     - type:
#>       - 'null'
#>       - items: int
#>         type: array
#>       label: Clip 3p after adapter seq.
#>       description: Number of bases to clip from 3p of each mate after the adapter
#>         clipping. In case only one value is given, it will be assumed the same for
#>         both mates.
#>       streamable: no
#>       id: '#clip3pAfterAdapterNbases'
#>       inputBinding:
#>         position: 0
#>         prefix: --clip3pAfterAdapterNbases
#>         separate: yes
#>         itemSeparator: ' '
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Read parameters
#>       sbg:toolDefaultValue: '0'
#>       required: no
#>     - type:
#>       - 'null'
#>       - items: string
#>         type: array
#>       label: Clip 3p adapter sequence
#>       description: Adapter sequence to clip from 3p of each mate. In case only one
#>         value is given, it will be assumed the same for both mates.
#>       streamable: no
#>       id: '#clip3pAdapterSeq'
#>       inputBinding:
#>         position: 0
#>         prefix: --clip3pAdapterSeq
#>         separate: yes
#>         itemSeparator: ' '
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Read parameters
#>       sbg:toolDefaultValue: '-'
#>       required: no
#>     - type:
#>       - 'null'
#>       - items: float
#>         type: array
#>       label: Max mismatches proportions
#>       description: Max proportion of mismatches for 3p adapter clipping for each mate.
#>         In case only one value is given, it will be assumed the same for both mates.
#>       streamable: no
#>       id: '#clip3pAdapterMMp'
#>       inputBinding:
#>         position: 0
#>         prefix: --clip3pAdapterMMp
#>         separate: yes
#>         itemSeparator: ' '
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Read parameters
#>       sbg:toolDefaultValue: '0.1'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Min segment length
#>       description: Minimum length of chimeric segment length, if =0, no chimeric output
#>         (int>=0).
#>       streamable: no
#>       id: '#chimSegmentMin'
#>       inputBinding:
#>         position: 0
#>         prefix: --chimSegmentMin
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Chimeric Alignments
#>       sbg:toolDefaultValue: '15'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Min separation score
#>       description: Minimum difference (separation) between the best chimeric score
#>         and the next one (int>=0).
#>       streamable: no
#>       id: '#chimScoreSeparation'
#>       inputBinding:
#>         position: 0
#>         prefix: --chimScoreSeparation
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Chimeric Alignments
#>       sbg:includeInPorts: no
#>       sbg:toolDefaultValue: '10'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Min total score
#>       description: Minimum total (summed) score of the chimeric segments (int>=0).
#>       streamable: no
#>       id: '#chimScoreMin'
#>       inputBinding:
#>         position: 0
#>         prefix: --chimScoreMin
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Chimeric Alignments
#>       sbg:toolDefaultValue: '0'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Non-GT/AG penalty
#>       description: Penalty for a non-GT/AG chimeric junction.
#>       streamable: no
#>       id: '#chimScoreJunctionNonGTAG'
#>       inputBinding:
#>         position: 0
#>         prefix: --chimScoreJunctionNonGTAG
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Chimeric Alignments
#>       sbg:toolDefaultValue: '-1'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Max drop score
#>       description: Max drop (difference) of chimeric score (the sum of scores of all
#>         chimeric segements) from the read length (int>=0).
#>       streamable: no
#>       id: '#chimScoreDropMax'
#>       inputBinding:
#>         position: 0
#>         prefix: --chimScoreDropMax
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Chimeric Alignments
#>       sbg:toolDefaultValue: '20'
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: chimOutType
#>         symbols:
#>         - SeparateSAMold
#>         - Within
#>         type: enum
#>       label: Chimeric output type
#>       description: 'Type of chimeric output. SeparateSAMold: output old SAM into separate
#>         Chimeric.out.sam file; Within: output into main aligned SAM/BAM files.'
#>       streamable: no
#>       id: '#chimOutType'
#>       sbg:category: Chimeric Alignments
#>       sbg:toolDefaultValue: SeparateSAMold
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Min junction overhang
#>       description: Minimum overhang for a chimeric junction (int>=0).
#>       streamable: no
#>       id: '#chimJunctionOverhangMin'
#>       inputBinding:
#>         position: 0
#>         prefix: --chimJunctionOverhangMin
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Chimeric Alignments
#>       sbg:toolDefaultValue: '20'
#>       required: no
#>     - type:
#>       - 'null'
#>       - float
#>       label: Max windows per read
#>       description: Max number of windows per read (int>0).
#>       streamable: no
#>       id: '#alignWindowsPerReadNmax'
#>       inputBinding:
#>         position: 0
#>         prefix: --alignWindowsPerReadNmax
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: '10000'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Max transcripts per window
#>       description: Max number of transcripts per window (int>0).
#>       streamable: no
#>       id: '#alignTranscriptsPerWindowNmax'
#>       inputBinding:
#>         position: 0
#>         prefix: --alignTranscriptsPerWindowNmax
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: '100'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Max transcripts per read
#>       description: Max number of different alignments per read to consider (int>0).
#>       streamable: no
#>       id: '#alignTranscriptsPerReadNmax'
#>       inputBinding:
#>         position: 0
#>         prefix: --alignTranscriptsPerReadNmax
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: '10000'
#>       required: no
#>     - type:
#>       - 'null'
#>       - float
#>       label: Min mapped length normalized
#>       description: alignSplicedMateMapLmin normalized to mate length (float>0).
#>       streamable: no
#>       id: '#alignSplicedMateMapLminOverLmate'
#>       inputBinding:
#>         position: 0
#>         prefix: --alignSplicedMateMapLminOverLmate
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: '0.66'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Min mapped length
#>       description: Minimum mapped length for a read mate that is spliced (int>0).
#>       streamable: no
#>       id: '#alignSplicedMateMapLmin'
#>       inputBinding:
#>         position: 0
#>         prefix: --alignSplicedMateMapLmin
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: '0'
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: alignSoftClipAtReferenceEnds
#>         symbols:
#>         - 'Yes'
#>         - 'No'
#>         type: enum
#>       label: Soft clipping
#>       description: 'Option which allows soft clipping of alignments at the reference
#>         (chromosome) ends. Can be disabled for compatibility with Cufflinks/Cuffmerge.
#>         Yes: Enables soft clipping; No: Disables soft clipping.'
#>       streamable: no
#>       id: '#alignSoftClipAtReferenceEnds'
#>       inputBinding:
#>         position: 0
#>         prefix: --alignSoftClipAtReferenceEnds
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: 'Yes'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Min overhang
#>       description: Minimum overhang (i.e. block size) for spliced alignments (int>0).
#>       streamable: no
#>       id: '#alignSJoverhangMin'
#>       inputBinding:
#>         position: 0
#>         prefix: --alignSJoverhangMin
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: '5'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: 'Min overhang: annotated'
#>       description: Minimum overhang (i.e. block size) for annotated (sjdb) spliced
#>         alignments (int>0).
#>       streamable: no
#>       id: '#alignSJDBoverhangMin'
#>       inputBinding:
#>         position: 0
#>         prefix: --alignSJDBoverhangMin
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:includeInPorts: no
#>       sbg:toolDefaultValue: '3'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Max mates gap
#>       description: Maximum gap between two mates, if 0, max intron gap will be determined
#>         by (2^winBinNbits)*winAnchorDistNbins.
#>       streamable: no
#>       id: '#alignMatesGapMax'
#>       inputBinding:
#>         position: 0
#>         prefix: --alignMatesGapMax
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: '0'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Min intron size
#>       description: 'Minimum intron size: genomic gap is considered intron if its length
#>         >= alignIntronMin, otherwise it is considered Deletion (int>=0).'
#>       streamable: no
#>       id: '#alignIntronMin'
#>       inputBinding:
#>         position: 0
#>         prefix: --alignIntronMin
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: '21'
#>       required: no
#>     - type:
#>       - 'null'
#>       - int
#>       label: Max intron size
#>       description: Maximum intron size, if 0, max intron size will be determined by
#>         (2^winBinNbits)*winAnchorDistNbins.
#>       streamable: no
#>       id: '#alignIntronMax'
#>       inputBinding:
#>         position: 0
#>         prefix: --alignIntronMax
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: '0'
#>       required: no
#>     - type:
#>       - 'null'
#>       - name: alignEndsType
#>         symbols:
#>         - Local
#>         - EndToEnd
#>         type: enum
#>       label: Alignment type
#>       description: 'Type of read ends alignment. Local: standard local alignment with
#>         soft-clipping allowed. EndToEnd: force end to end read alignment, do not soft-clip.'
#>       streamable: no
#>       id: '#alignEndsType'
#>       inputBinding:
#>         position: 0
#>         prefix: --alignEndsType
#>         separate: yes
#>         shellQuote: no
#>         sbg:cmdInclude: yes
#>         streamable: no
#>         separator: ' '
#>       sbg:category: Alignments and Seeding
#>       sbg:toolDefaultValue: Local
#>       required: no
#>     outputs:
#>     - type:
#>       - 'null'
#>       - items: File
#>         type: array
#>       label: Unmapped reads
#>       description: Output of unmapped reads.
#>       streamable: no
#>       id: '#unmapped_reads'
#>       outputBinding:
#>         glob: '*Unmapped.out*'
#>       sbg:fileTypes: FASTQ
#>     - type:
#>       - 'null'
#>       - File
#>       label: Transcriptome alignments
#>       description: Alignments translated into transcript coordinates.
#>       streamable: no
#>       id: '#transcriptome_aligned_reads'
#>       outputBinding:
#>         glob: '*Transcriptome*'
#>       sbg:fileTypes: BAM
#>     - type:
#>       - 'null'
#>       - File
#>       label: Splice junctions
#>       description: High confidence collapsed splice junctions in tab-delimited format.
#>         Only junctions supported by uniquely mapping reads are reported.
#>       streamable: no
#>       id: '#splice_junctions'
#>       outputBinding:
#>         glob: '*SJ.out.tab'
#>       sbg:fileTypes: TAB
#>     - type:
#>       - 'null'
#>       - File
#>       label: Reads per gene
#>       description: File with number of reads per gene. A read is counted if it overlaps
#>         (1nt or more) one and only one gene.
#>       streamable: no
#>       id: '#reads_per_gene'
#>       outputBinding:
#>         glob: '*ReadsPerGene*'
#>       sbg:fileTypes: TAB
#>     - type:
#>       - 'null'
#>       - items: File
#>         type: array
#>       label: Log files
#>       description: Log files produced during alignment.
#>       streamable: no
#>       id: '#log_files'
#>       outputBinding:
#>         glob: '*Log*.out'
#>       sbg:fileTypes: OUT
#>     - type:
#>       - 'null'
#>       - File
#>       label: Intermediate genome files
#>       description: Archive with genome files produced when annotations are included
#>         on the fly (in the mapping step).
#>       streamable: no
#>       id: '#intermediate_genome'
#>       outputBinding:
#>         glob: '*_STARgenome.tar'
#>       sbg:fileTypes: TAR
#>     - type:
#>       - 'null'
#>       - File
#>       label: Chimeric junctions
#>       description: If chimSegmentMin in 'Chimeric Alignments' section is set to 0,
#>         'Chimeric Junctions' won't be output.
#>       streamable: no
#>       id: '#chimeric_junctions'
#>       outputBinding:
#>         glob: '*Chimeric.out.junction'
#>       sbg:fileTypes: JUNCTION
#>     - type:
#>       - 'null'
#>       - File
#>       label: Chimeric alignments
#>       description: Aligned Chimeric sequences SAM - if chimSegmentMin = 0, no Chimeric
#>         Alignment SAM and Chimeric Junctions outputs.
#>       streamable: no
#>       id: '#chimeric_alignments'
#>       outputBinding:
#>         glob: '*.Chimeric.out.sam'
#>       sbg:fileTypes: SAM
#>     - type:
#>       - 'null'
#>       - File
#>       label: Aligned SAM/BAM
#>       description: Aligned sequence in SAM/BAM format.
#>       streamable: no
#>       id: '#aligned_reads'
#>       outputBinding:
#>         glob:
#>           engine: '#cwl-js-engine'
#>           script: |-
#>             {
#>               if ($job.inputs.outSortingType == 'SortedByCoordinate') {
#>                 sort_name = '.sortedByCoord'
#>               }
#>               else {
#>                 sort_name = ''
#>               }
#>               if ($job.inputs.outSAMtype == 'BAM') {
#>                 sam_name = "*.Aligned".concat( sort_name, '.out.bam')
#>               }
#>               else {
#>                 sam_name = "*.Aligned.out.sam"
#>               }
#>               return sam_name
#>             }
#>           class: Expression
#>       sbg:fileTypes: SAM, BAM
#>     requirements:
#>     - class: ExpressionEngineRequirement
#>       id: '#cwl-js-engine'
#>       requirements:
#>       - class: DockerRequirement
#>         dockerPull: rabix/js-engine
#>     hints:
#>     - class: DockerRequirement
#>       dockerPull: images.sbgenomics.com/ana_d/star:2.4.2a
#>       dockerImageId: a4b0ad2c3cae
#>     - class: sbg:MemRequirement
#>       value: 60000
#>     - class: sbg:CPURequirement
#>       value: 15
#>     label: STAR
#>     description: STAR is an ultrafast universal RNA-seq aligner. It has very high
#>       mapping speed, accurate alignment of contiguous and spliced reads, detection
#>       of polyA-tails, non-canonical splices and chimeric (fusion) junctions. It works
#>       with reads starting from lengths ~15 bases up to ~300 bases. In case of having
#>       longer reads, use of STAR Long is recommended.
#>     class: CommandLineTool
#>     baseCommand:
#>     - tar
#>     - -xvf
#>     - class: Expression
#>       script: $job.inputs.genome.path
#>       engine: '#cwl-js-engine'
#>     - '&&'
#>     - /opt/STAR
#>     - --runThreadN
#>     - class: Expression
#>       script: |-
#>         {
#>           return $job.allocatedResources.cpu
#>         }
#>       engine: '#cwl-js-engine'
#>     arguments:
#>     - position: 0
#>       separate: yes
#>       valueFrom:
#>         engine: '#cwl-js-engine'
#>         script: |-
#>           {
#>             file = [].concat($job.inputs.reads)[0].path
#>             extension = /(?:\.([^.]+))?$/.exec(file)[1]
#>             if (extension == "gz") {
#>               return "--readFilesCommand zcat"
#>             } else if (extension == "bz2") {
#>               return "--readFilesCommand bzcat"
#>             }
#>           }
#>         class: Expression
#>     - position: 0
#>       separate: yes
#>       valueFrom:
#>         engine: '#cwl-js-engine'
#>         script: "{\t\n  var sjFormat = \"False\"\n  var gtfgffFormat = \"False\"\n
#>           \ var list = $job.inputs.sjdbGTFfile\n  var paths_list = []\n  var joined_paths
#>           = \"\"\n  \n  if (list) {\n    list.forEach(function(f){return paths_list.push(f.path)})\n
#>           \   joined_paths = paths_list.join(\" \")\n\n\n    paths_list.forEach(function(f){\n
#>           \     ext = f.replace(/^.*\\./, '')\n      if (ext == \"gff\" || ext ==
#>           \"gtf\") {\n        gtfgffFormat = \"True\"\n        return gtfgffFormat\n
#>           \     }\n      if (ext == \"txt\") {\n        sjFormat = \"True\"\n        return
#>           sjFormat\n      }\n    })\n\n    if ($job.inputs.sjdbGTFfile && $job.inputs.sjdbInsertSave
#>           != \"None\") {\n      if (sjFormat == \"True\") {\n        return \"--sjdbFileChrStartEnd
#>           \".concat(joined_paths)\n      }\n      else if (gtfgffFormat == \"True\")
#>           {\n        return \"--sjdbGTFfile \".concat(joined_paths)\n      }\n    }\n
#>           \ }\n}"
#>         class: Expression
#>     - position: 0
#>       separate: yes
#>       valueFrom:
#>         engine: '#cwl-js-engine'
#>         script: "{\n  a = b = c = d = e = f = g = []\n  if ($job.inputs.sjdbGTFchrPrefix)
#>           {\n    a = [\"--sjdbGTFchrPrefix\", $job.inputs.sjdbGTFchrPrefix]\n  }\n
#>           \ if ($job.inputs.sjdbGTFfeatureExon) {\n    b = [\"--sjdbGTFfeatureExon\",
#>           $job.inputs.sjdbGTFfeatureExon]\n  }\n  if ($job.inputs.sjdbGTFtagExonParentTranscript)
#>           {\n    c = [\"--sjdbGTFtagExonParentTranscript\", $job.inputs.sjdbGTFtagExonParentTranscript]\n
#>           \ }\n  if ($job.inputs.sjdbGTFtagExonParentGene) {\n    d = [\"--sjdbGTFtagExonParentGene\",
#>           $job.inputs.sjdbGTFtagExonParentGene]\n  }\n  if ($job.inputs.sjdbOverhang)
#>           {\n    e = [\"--sjdbOverhang\", $job.inputs.sjdbOverhang]\n  }\n  if ($job.inputs.sjdbScore)
#>           {\n    f = [\"--sjdbScore\", $job.inputs.sjdbScore]\n  }\n  if ($job.inputs.sjdbInsertSave)
#>           {\n    g = [\"--sjdbInsertSave\", $job.inputs.sjdbInsertSave]\n  }\n  \n
#>           \ \n  \n  if ($job.inputs.sjdbInsertSave != \"None\" && $job.inputs.sjdbGTFfile)
#>           {\n    new_list = a.concat(b, c, d, e, f, g)\n    return new_list.join(\"
#>           \")\n  }\n}"
#>         class: Expression
#>     - position: 0
#>       separate: yes
#>       valueFrom:
#>         engine: '#cwl-js-engine'
#>         script: |-
#>           {
#>             if ($job.inputs.twopassMode == "Basic") {
#>               return "--twopass1readsN ".concat($job.inputs.twopass1readsN)
#>             }
#>           }
#>         class: Expression
#>     - position: 0
#>       separate: yes
#>       valueFrom:
#>         engine: '#cwl-js-engine'
#>         script: |-
#>           {
#>             if ($job.inputs.chimOutType == "Within") {
#>               return "--chimOutType ".concat("Within", $job.inputs.outSAMtype)
#>             }
#>             else {
#>               return "--chimOutType SeparateSAMold"
#>             }
#>           }
#>         class: Expression
#>     - position: 0
#>       separate: yes
#>       valueFrom:
#>         engine: '#cwl-js-engine'
#>         script: "{\n  var param_list = []\n  \n  function add_param(key, value){\n
#>           \   if (value == \"\") {\n      return\n    }\n    else {\n      return
#>           param_list.push(key.concat(\":\", value))\n    }\n  }\n  \n  add_param('ID',
#>           \"1\")\n  if ($job.inputs.rg_seq_center) {\n    add_param('CN', $job.inputs.rg_seq_center)\n
#>           \ } else if ([].concat($job.inputs.reads)[0].metadata.seq_center) {\n    add_param('CN',
#>           [].concat($job.inputs.reads)[0].metadata.seq_center)\n  }\n  if ($job.inputs.rg_library_id)
#>           {\n    add_param('LB', $job.inputs.rg_library_id)\n  } else if ([].concat($job.inputs.reads)[0].metadata.library_id)
#>           {\n    add_param('LB', [].concat($job.inputs.reads)[0].metadata.library_id)\n
#>           \ }\n  if ($job.inputs.rg_mfl) {\n    add_param('PI', $job.inputs.rg_mfl)\n
#>           \ } else if ([].concat($job.inputs.reads)[0].metadata.median_fragment_length)
#>           {\n    add_param('PI', [].concat($job.inputs.reads)[0].metadata.median_fragment_length)\n
#>           \ }\n  if ($job.inputs.rg_platform) {\n    add_param('PL', $job.inputs.rg_platform.replace(/
#>           /g,\"_\"))\n  } else if ([].concat($job.inputs.reads)[0].metadata.platform)
#>           {\n    add_param('PL', [].concat($job.inputs.reads)[0].metadata.platform.replace(/
#>           /g,\"_\"))\n  }\n  if ($job.inputs.rg_platform_unit_id) {\n    add_param('PU',
#>           $job.inputs.rg_platform_unit_id)\n  } else if ([].concat($job.inputs.reads)[0].metadata.platform_unit_id)
#>           {\n    add_param('PU', [].concat($job.inputs.reads)[0].metadata.platform_unit_id)\n
#>           \ }\n  if ($job.inputs.rg_sample_id) {\n    add_param('SM', $job.inputs.rg_sample_id)\n
#>           \ } else if ([].concat($job.inputs.reads)[0].metadata.sample_id) {\n    add_param('SM',
#>           [].concat($job.inputs.reads)[0].metadata.sample_id)\n  }\n  return \"--outSAMattrRGline
#>           \".concat(param_list.join(\" \"))\n}"
#>         class: Expression
#>     - position: 0
#>       separate: yes
#>       valueFrom:
#>         engine: '#cwl-js-engine'
#>         script: |-
#>           {
#>             if ($job.inputs.sjdbGTFfile && $job.inputs.quantMode) {
#>               return "--quantMode ".concat($job.inputs.quantMode)
#>             }
#>           }
#>         class: Expression
#>     - position: 100
#>       separate: yes
#>       valueFrom:
#>         engine: '#cwl-js-engine'
#>         script: "{\n  function sharedStart(array){\n  var A= array.concat().sort(),
#>           \n      a1= A[0], a2= A[A.length-1], L= a1.length, i= 0;\n  while(i<L &&
#>           a1.charAt(i)=== a2.charAt(i)) i++;\n  return a1.substring(0, i);\n  }\n
#>           \ path_list = []\n  arr = [].concat($job.inputs.reads)\n  arr.forEach(function(f){return
#>           path_list.push(f.path.replace(/\\\\/g,'/').replace( /.*\\//, '' ))})\n  common_prefix
#>           = sharedStart(path_list)\n  intermediate = common_prefix.replace( /\\-$|\\_$|\\.$/,
#>           '' ).concat(\"._STARgenome\")\n  source = \"./\".concat(intermediate)\n
#>           \ destination = intermediate.concat(\".tar\")\n  if ($job.inputs.sjdbGTFfile
#>           && $job.inputs.sjdbInsertSave && $job.inputs.sjdbInsertSave != \"None\")
#>           {\n    return \"&& tar -vcf \".concat(destination, \" \", source)\n  }\n}"
#>         class: Expression
#>     - position: 0
#>       prefix: --outFileNamePrefix
#>       separate: yes
#>       valueFrom:
#>         engine: '#cwl-js-engine'
#>         script: "{\n  function sharedStart(array){\n  var A= array.concat().sort(),
#>           \n      a1= A[0], a2= A[A.length-1], L= a1.length, i= 0;\n  while(i<L &&
#>           a1.charAt(i)=== a2.charAt(i)) i++;\n  return a1.substring(0, i);\n  }\n
#>           \ path_list = []\n  arr = [].concat($job.inputs.reads)\n  arr.forEach(function(f){return
#>           path_list.push(f.path.replace(/\\\\/g,'/').replace( /.*\\//, '' ))})\n  common_prefix
#>           = sharedStart(path_list)\n  return \"./\".concat(common_prefix.replace(
#>           /\\-$|\\_$|\\.$/, '' ), \".\")\n}"
#>         class: Expression
#>     - position: 101
#>       separate: yes
#>       valueFrom:
#>         engine: '#cwl-js-engine'
#>         script: "{\n  function sharedStart(array){\n  var A= array.concat().sort(),
#>           \n      a1= A[0], a2= A[A.length-1], L= a1.length, i= 0;\n  while(i<L &&
#>           a1.charAt(i)=== a2.charAt(i)) i++;\n  return a1.substring(0, i);\n  }\n
#>           \ path_list = []\n  arr = [].concat($job.inputs.reads)\n  arr.forEach(function(f){return
#>           path_list.push(f.path.replace(/\\\\/g,'/').replace( /.*\\//, '' ))})\n  common_prefix
#>           = sharedStart(path_list)\n  mate1 = common_prefix.replace( /\\-$|\\_$|\\.$/,
#>           '' ).concat(\".Unmapped.out.mate1\")\n  mate2 = common_prefix.replace( /\\-$|\\_$|\\.$/,
#>           '' ).concat(\".Unmapped.out.mate2\")\n  mate1fq = mate1.concat(\".fastq\")\n
#>           \ mate2fq = mate2.concat(\".fastq\")\n  if ($job.inputs.outReadsUnmapped
#>           == \"Fastx\" && arr.length > 1) {\n    return \"&& mv \".concat(mate1, \"
#>           \", mate1fq, \" && mv \", mate2, \" \", mate2fq)\n  }\n  else if ($job.inputs.outReadsUnmapped
#>           == \"Fastx\" && arr.length == 1) {\n    return \"&& mv \".concat(mate1,
#>           \" \", mate1fq)\n  }\n}"
#>         class: Expression
#>     stdin: ''
#>     stdout: ''
#>     successCodes: []
#>     temporaryFailCodes: []
#>     x: 624.0
#>     'y': 323
#>   sbg:x: 700.0
#>   sbg:y: 200.0
#> sbg:canvas_zoom: 0.6
#> sbg:canvas_y: -16
#> sbg:canvas_x: -41
#> sbg:batchInput: '#sjdbGTFfile'
#> sbg:batchBy:
#>   type: item
#> 
f1$link_map()
#>                                                      id
#> 1  #STAR_Genome_Generate.sjdbGTFtagExonParentTranscript
#> 2        #STAR_Genome_Generate.sjdbGTFtagExonParentGene
#> 3                     #STAR_Genome_Generate.sjdbGTFfile
#> 4                #STAR_Genome_Generate.genomeFastaFiles
#> 5                     #SBG_FASTQ_Quality_Detector.fastq
#> 6                             #Picard_SortSam.input_bam
#> 7                           #STAR.winAnchorMultimapNmax
#> 8                              #STAR.winAnchorDistNbins
#> 9                                     #STAR.sjdbGTFfile
#> 10                                          #STAR.reads
#> 11                                          #STAR.reads
#> 12                                         #STAR.genome
#> 13                                         #STAR.genome
#> 14                                      #unmapped_reads
#> 15                         #transcriptome_aligned_reads
#> 16                                    #splice_junctions
#> 17                                      #reads_per_gene
#> 18                                           #log_files
#> 19                                  #chimeric_junctions
#> 20                                 #intermediate_genome
#> 21                                 #intermediate_genome
#> 22                                 #chimeric_alignments
#> 23                                          #sorted_bam
#> 24                                              #result
#> 25                                 #intermediate_genome
#> 26                                 #intermediate_genome
#>                             source   type
#> 1  #sjdbGTFtagExonParentTranscript  input
#> 2        #sjdbGTFtagExonParentGene  input
#> 3                     #sjdbGTFfile  input
#> 4                #genomeFastaFiles  input
#> 5                           #fastq  input
#> 6              #STAR.aligned_reads  input
#> 7           #winAnchorMultimapNmax  input
#> 8              #winAnchorDistNbins  input
#> 9                     #sjdbGTFfile  input
#> 10                          #reads  input
#> 11                           test2  input
#> 12    #STAR_Genome_Generate.genome  input
#> 13                           test1  input
#> 14                 #unmapped_reads output
#> 15    #transcriptome_aligned_reads output
#> 16               #splice_junctions output
#> 17                 #reads_per_gene output
#> 18                      #log_files output
#> 19             #chimeric_junctions output
#> 20            #intermediate_genome output
#> 21             intermediate_genome output
#> 22            #chimeric_alignments output
#> 23                     #sorted_bam output
#> 24                         #result output
#> 25            #intermediate_genome output
#> 26             intermediate_genome output