diff --git a/nfcore_star_salmon/nfcore_star_salmon.ows b/nfcore_star_salmon/nfcore_star_salmon.ows new file mode 100644 index 00000000..8be1b9b2 --- /dev/null +++ b/nfcore_star_salmon/nfcore_star_salmon.ows @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + {'alignEndsProtrude': ['0', 'ConcordantPair'], 'alignEndsType': 'Local', 'alignIntronMax': 0, 'alignIntronMin': 21, 'alignMatesGapMax': 0, 'alignSJDBoverhangMin': 3, 'alignSJoverhangMin': 5, 'alignSJstitchMismatchNmax': 0, 'alignSoftClipAtReferenceEnds': 'Yes', 'alignSplicedMateMapLmin': 0, 'alignSplicedMateMapLminOverLmate': 0.66, 'alignTranscriptsPerReadNmax': 10000, 'alignTranscriptsPerWindowNmax': 100, 'alignWindowsPerReadNmax': 10000, 'apelist': False, 'bamRemoveDuplicatesMate2basesN': 0, 'bamRemoveDuplicatesType': '', 'chimFilter': 'banGenomicN', 'chimJunctionOverhangMin': 20, 'chimOutType': 'SeparateSAMold', 'chimScoreDropMax': 20, 'chimScoreJunctionNonGTAG': -1, 'chimScoreMin': 0, 'chimScoreSeparation': 10, 'chimSegmentMin': 0, 'chimSegmentReadGapMax': 0, 'clip3pAdapterMMp': ['0.1'], 'clip3pAdapterSeq': [], 'clip3pAfterAdapterNbases': ['0'], 'clip3pNbases': ['0'], 'clip5pNbases': ['0'], 'controlAreaVisible': True, 'exportGraphics': False, 'genomeDir': '/data/GenomeDir', 'genomeLoad': 'NoSharedMemory', 'inputConnectionsStore': {}, 'iterate': False, 'iterateSettings': {'iterableAttrs': ['readFilesIn', 'clip3pNbases', 'clip5pNbases', 'clip3pAdapterSeq', 'clip3pAdapterMMp', 'clip3pAfterAdapterNbases', 'alignEndsProtrude']}, 'limitIObufferSize': 150000000, 'limitOutSAMoneReadBytes': 100000, 'multipleSample': False, 'nWorkers': 1, 'optionsChecked': {'apelist': False, 'spelist': False, 'parametersFiles': False, 'sysShell': False, 'runThreadN': False, 'runRNGseed': False, 'readFilesCommand': False, 'readMapNumber': False, 'readMatesLengthsIn': False, 'readNameSeparator': False, 'clip3pNbases': False, 'clip5pNbases': False, 'clip3pAdapterSeq': False, 'clip3pAdapterMMp': False, 'clip3pAfterAdapterNbases': False, 'limitIObufferSize': False, 'limitOutSAMoneReadBytes': False, 'outTmpDir': False, 'outStd': False, 'outReadsUnmapped': False, 'outMultimapperOrder': False, 'outSAMtype': False, 'outSAMmode': False, 'outSAMstrandField': False, 'outSAMattributes': False, 'outSAMattrIHstart': False, 'outSAMunmapped': False, 'outSAMorder': False, 'outSAMprimaryFlag': False, 'outSAMreadID': False, 'outSAMmapqUnique': False, 'outSAMflagOR': False, 'outSAMflagAND': False, 'outSAMattrRGline': False, 'outSAMheaderHD': False, 'outSAMheaderPG': False, 'outSAMheaderCommentFile': False, 'outSAMfilter': False, 'outSAMmultNmax': False, 'outBAMcompression': False, 'outBAMsortingThreadN': False, 'bamRemoveDuplicatesType': False, 'bamRemoveDuplicatesMate2basesN': False, 'outWigType': False, 'outWigStrand': False, 'outWigReferencesPrefix': False, 'outWigNorm': False, 'outFilterType': False, 'outFilterMultimapScoreRange': False, 'outFilterMultimapNmax': False, 'outFilterMismatchNmax': False, 'outFilterMismatchNoverLmax ': False, 'outFilterMismatchNoverReadLmax': False, 'outFilterScoreMin': False, 'outFilterScoreMinOverLread': False, 'outFilterMatchNmin': False, 'outFilterMatchNminOverLread': False, 'outFilterIntronMotifs': False, 'scoreGap': False, 'scoreGapNoncan': False, 'scoreGapGCAG': False, 'scoreGapATAC': False, 'scoreGenomicLengthLog2scale': False, 'scoreDelOpen': False, 'scoreDelBase': False, 'scoreInsOpen': False, 'scoreInsBase': False, 'scoreStitchSJshift': False, 'seedSearchStartLmax': False, 'seedSearchStartLmaxOverLread': False, 'seedSearchLmax': False, 'seedMultimapNmax': False, 'seedPerReadNmax': False, 'seedPerWindowNmax': False, 'seedNoneLociPerWindow': False, 'alignIntronMin': False, 'alignIntronMax': False, 'alignMatesGapMax': False, 'alignSJoverhangMin': False, 'alignSJstitchMismatchNmax': False, 'alignSJDBoverhangMin': False, 'alignSplicedMateMapLmin': False, 'alignSplicedMateMapLminOverLmate': False, 'alignWindowsPerReadNmax': False, 'alignTranscriptsPerWindowNmax': False, 'alignTranscriptsPerReadNmax': False, 'alignEndsType': False, 'alignEndsProtrude': False, 'alignSoftClipAtReferenceEnds': False, 'winAnchorMultimapNmax': False, 'winBinNbits': False, 'winAnchorDistNbins': False, 'winFlankNbins': False, 'winReadCoverageRelativeMin': False, 'winReadCoverageBasesMin': False, 'chimOutType': False, 'chimSegmentMin': False, 'chimScoreMin': False, 'chimScoreDropMax': False, 'chimScoreSeparation': False, 'chimScoreJunctionNonGTAG': False, 'chimJunctionOverhangMin': False, 'chimSegmentReadGapMax': False, 'chimFilter': False, 'quantMode': False, 'quantTranscriptomeBAMcompression': False, 'quantTranscriptomeBan': False, 'twopassMode': False, 'twopass1readsN ': False, 'genomeLoad': False, 'outputFilePrefix': False, 'multipleSample': False}, 'outBAMcompression': 1, 'outBAMsortingThreadN': 0, 'outFilterIntronMotifs': '', 'outFilterMatchNmin': 0, 'outFilterMatchNminOverLread': 0.66, 'outFilterMismatchNmax': 10, 'outFilterMismatchNoverLmax': 0.3, 'outFilterMismatchNoverReadLmax': 1.0, 'outFilterMultimapNmax': 10, 'outFilterMultimapScoreRange': 1, 'outFilterScoreMin': 0, 'outFilterScoreMinOverLread': 0.66, 'outFilterType': 'Normal', 'outMultimapperOrder': 'Old_2.4', 'outReadsUnmapped': '', 'outSAMattrIHstart': 1, 'outSAMattrRGline': '', 'outSAMattributes': 'Standard', 'outSAMfilter': '', 'outSAMflagAND': 65535, 'outSAMflagOR': 0, 'outSAMheaderCommentFile': '', 'outSAMheaderHD': '', 'outSAMheaderPG': '', 'outSAMmapqUnique': 255, 'outSAMmode': 'Full', 'outSAMmultNmax': -1, 'outSAMorder': 'Paired', 'outSAMprimaryFlag': 'OneBestScore', 'outSAMreadID': 'Standard', 'outSAMstrandField': '', 'outSAMtype': 'SAM', 'outSAMunmapped': '', 'outStd': 'Log', 'outTmpDir': '', 'outWigNorm': 'RPM', 'outWigReferencesPrefix': '', 'outWigStrand': 'Stranded', 'outWigType': '', 'outputDir': '', 'outputFilePrefix': '', 'parametersFiles': '', 'quantMode': '', 'quantTranscriptomeBAMcompression': 1, 'quantTranscriptomeBan': 'IndelSoftclipSingleend', 'readFilesCommand': '', 'readFilesIn': [], 'readMapNumber': -1, 'readMatesLengthsIn': 'NotEqual', 'readNameSeparator': '/', 'runMode': 0, 'runRNGseed': 777, 'runThreadN': 1, 'runTriggers': [], 'savedWidgetGeometry': None, 'scoreDelBase': -2, 'scoreDelOpen': -2, 'scoreGap': 0, 'scoreGapATAC': -8, 'scoreGapGCAG': -4, 'scoreGapNoncan': -8, 'scoreGenomicLengthLog2scale': -0.25, 'scoreInsBase': -2, 'scoreInsOpen': -2, 'scoreStitchSJshift': 1, 'seedMultimapNmax': 10000, 'seedNoneLociPerWindow': 10, 'seedPerReadNmax': 1000, 'seedPerWindowNmax': 50, 'seedSearchLmax': 0, 'seedSearchStartLmax': 50, 'seedSearchStartLmaxOverLread': 1.0, 'spelist': False, 'sysShell': '/bin/sh', 'triggerReady': {}, 'twopass1readsN': -1, 'twopassMode': '', 'useGpu': False, 'useScheduler': False, 'winAnchorDistNbins': 9, 'winAnchorMultimapNmax': 50, 'winBinNbits': 16, 'winFlankNbins': 4, 'winReadCoverageBasesMin': 0, 'winReadCoverageRelativeMin': 0.5, '__version__': 1} + {'controlAreaVisible': True, 'exportGraphics': False, 'genomeChrBinNbits': '18', 'genomeDir': '', 'genomeFastaFiles': [], 'genomeSAindexNbases': 14, 'genomeSAsparseD': 1, 'genomeSuffixLengthMax': -1, 'inputConnectionsStore': {}, 'iterate': False, 'iterateSettings': {'iterableAttrs': ['genomeFastaFiles', 'sjdbFileChrStartEnd ']}, 'nWorkers': 1, 'optionsChecked': {'genomeChrBinNbits': False, 'genomeSAindexNbases': False, 'genomeSAsparseD': False, 'genomeSuffixLengthMax': False, 'runThreadN': False, 'sjdbGTFfile': False, 'sjdbFileChrStartEnd ': False, 'sjdbGTFchrPrefix ': False, 'sjdbGTFfeatureExon': False, 'sjdbGTFtagExonParentTranscript': False, 'sjdbGTFtagExonParentGene': False, 'sjdbOverhang': False, 'sjdbScore': False, 'sjdbInsertSave ': False}, 'rmode': 'genomeGenerate', 'runMode': 0, 'runThreadN': 1, 'runTriggers': [], 'savedWidgetGeometry': None, 'sjdbFileChrStartEnd': [], 'sjdbGTFchrPrefix': 'chr', 'sjdbGTFfeatureExon': 'exon', 'sjdbGTFfile': '', 'sjdbGTFtagExonParentGene': 'gene_id', 'sjdbGTFtagExonParentTranscript': 'transcript_id', 'sjdbInsertSave': 'Basic', 'sjdbOverhang': 100, 'sjdbScore': 2, 'triggerReady': {}, 'useGpu': False, 'useScheduler': False, '__version__': 1} + {'URL': [], 'concatenateFile': '', 'controlAreaVisible': True, 'decompress': True, 'directory': '', 'exportGraphics': False, 'inputConnectionsStore': {}, 'iterate': False, 'iterateSettings': {'iterableAttrs': ['URL']}, 'nWorkers': 1, 'optionsChecked': {'decompress': False, 'concatenateFile': False}, 'runMode': 0, 'runTriggers': [], 'savedWidgetGeometry': None, 'triggerReady': {}, 'useGpu': False, 'useScheduler': False, '__version__': 1} + {'awsdir': '/data/.aws', 'bucket': 'myBucket', 'controlAreaVisible': True, 'dirs': [], 'downloadDir': '/data', 'exportGraphics': False, 'inputConnectionsStore': {}, 'iterate': False, 'iterateSettings': {'iterableAttrs': ['dirs']}, 'key': '', 'nWorkers': 1, 'nthreads': 0, 'optionsChecked': {'nthreads': False, 'key': False, 'secret': False, 'region': False}, 'region': 'us-east-2', 'runMode': 0, 'runTriggers': [], 'savedWidgetGeometry': None, 'secret': '', 'triggerReady': {}, 'useGpu': False, 'useScheduler': False, '__version__': 1} + {'autoDetermineRegions': True, 'batch': '', 'controlAreaVisible': True, 'exportGraphics': False, 'genome': 'hg38', 'inputConnectionsStore': {}, 'inputFile': [], 'iterate': False, 'iterateSettings': {'iterableAttrs': ['inputFile']}, 'nWorkers': 1, 'optionsChecked': {'genome': False, 'batch': False, 'autoDetermineRegions': False}, 'runMode': 0, 'runTriggers': [], 'savedWidgetGeometry': None, 'triggerReady': {}, 'useGpu': False, 'useScheduler': False, '__version__': 1} + {'controlAreaVisible': True, 'exportGraphics': False, 'inputConnectionsStore': {}, 'inputDir': '', 'inputFiles': [], 'iterate': False, 'iterateSettings': {'iterableAttrs': ['inputFiles']}, 'nWorkers': 1, 'optionsChecked': {'inputFiles': False, 'outputDir': False, 'inputDir': False}, 'outputDir': '', 'runMode': 0, 'runTriggers': [], 'savedWidgetGeometry': None, 'triggerReady': {}, 'useGpu': False, 'useScheduler': False, '__version__': 1} + {'command': 'quant', 'controlAreaVisible': True, 'exportGraphics': False, 'inputConnectionsStore': {}, 'iterate': False, 'iterateSettings': {'iterableAttrs': [], 'nWorkers': 1}, 'nWorkers': 1, 'optionsChecked': {'File': False}, 'runMode': 0, 'runTriggers': [], 'savedWidgetGeometry': b'\x01\xd9\xd0\xcb\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x7f\x00\x00\x04\x19\x00\x00\x00\x00\x00\x00\x00\x18\x00\x00\x07\x7f\x00\x00\x04\x16\x00\x00\x00\x00\x02\x00\x00\x00\x07\x80', 'triggerReady': {}, 'useGpu': False, 'useScheduler': False, '__version__': 1} + + \ No newline at end of file diff --git a/nfcore_star_salmon/widgets/nfcore_star_salmon/S3_download/Dockerfiles/Dockerfile b/nfcore_star_salmon/widgets/nfcore_star_salmon/S3_download/Dockerfiles/Dockerfile new file mode 100644 index 00000000..511d128d --- /dev/null +++ b/nfcore_star_salmon/widgets/nfcore_star_salmon/S3_download/Dockerfiles/Dockerfile @@ -0,0 +1,6 @@ +FROM python:3.8.0-alpine3.10 +ARG CLI_VERSION=1.16.272 +RUN apk upgrade && apk add --no-cache nano bash zip jq +RUN pip install --upgrade pip && pip install --no-cache-dir awscli==$CLI_VERSION && \ + mkdir /root/.aws +COPY download.sh /usr/local/bin/download.sh diff --git a/nfcore_star_salmon/widgets/nfcore_star_salmon/S3_download/Dockerfiles/download.sh b/nfcore_star_salmon/widgets/nfcore_star_salmon/S3_download/Dockerfiles/download.sh new file mode 100755 index 00000000..79381222 --- /dev/null +++ b/nfcore_star_salmon/widgets/nfcore_star_salmon/S3_download/Dockerfiles/download.sh @@ -0,0 +1,113 @@ +#!/bin/bash + +awsdir=$1 +bucket=$2 +outputDir=$3 + +error=0 +mkdir -p outputDir +cp -r $awsdir/* /root/.aws || exit 1 + +copy_wildcard(){ + echo "parsing wildcards in $1" + local my_str=$1 + local max_attempts=4 + #if there is no / then we search from the base bucket + local my_glob="" + local wildcard=$my_str + if [[ $glob == */* ]]; then + #split into a glob (directory) and wildcard string + no_wc="${my_str%%['!'@#\$%^\&*()+]*}" + my_glob="${no_wc%/*}"/ + wildcard="${my_str#$my_glob}" + fi + local command=(nice aws s3 cp --exclude "*" --include="$wildcard" --recursive s3://$bucket/$my_glob $outputDir) + local attempts + for attempts in {1..$max_attempts}; do + echo "${command[@]}" + if "${command[@]}" ; then + return + fi + done + echo "error in ${command[@]}" + exit 1 + +} + +copy_directory(){ + echo "copying directory object $1" + local attempts + local max_attempts=2 + local command=(nice aws s3 cp --recursive s3://$bucket/$1 $outputDir/$dest) + for attempts in {1..$max_attempts}; do + echo "${command[@]}" + if "${command[@]}" ; then + return + fi + done + echo "error in ${command[@]}" + exit 1 + +} + +copy_file(){ + echo "copying file object $1" + destination=basename $1 + local attempts + local max_attempts=2 + local command=(nice aws s3 cp s3://$bucket/$1 $outputDir/$dest) + for attempts in {1..$max_attempts}; do + echo "${command[@]}" + if "${command[@]}" ; then + return + fi + done + echo "error in ${command[@]}" + exit 1 +} + +copy(){ + local my_glob=$1 + echo "$my_glob" + if [[ $my_glob == *['!'@#\$%^\&*()+]* ]]; then + copy_wildcard $my_glob || error=1 + elif [ "${my_glob: -1}" == "/" ]; then + copy_directory $my_glob || error=1 + else + copy_file $my_glob || error=1 + fi +} + +multiCopy(){ + lasti=$((${#globs[@]} - 1)) + for i in $(seq 0 ${lasti}); do + if ( mkdir $lockDir/lock$i 2> /dev/null ); then + glob=${globs[i]} + echo "thread $1 copying $glob" + copy $glob + fi + done +} +if [ -z $DIRS ] || [ "$DIRS" == "[]" ]; then + echo "no bucket object given to download" + exit 1 +fi +globs=( $(echo $DIRS | jq -r '.[]') ) + +if [ -z $nThreads ] || (( $nThreads == 1 )) || (( $nThreads == 0 )); then + #use single thread + echo "Using single thread" + for glob in "${globs[@]}"; do + copy $glob + done +else + lockDir=/tmp/locks.$$ + mkdir -p $lockDir + for i in $(seq 2 $nThreads); do + multiCopy $i & + done + multiCopy 1 & + wait + rm -rf $lockDir +fi +exit $error diff --git a/nfcore_star_salmon/widgets/nfcore_star_salmon/S3_download/S3_download.attrs b/nfcore_star_salmon/widgets/nfcore_star_salmon/S3_download/S3_download.attrs new file mode 100644 index 00000000..4fc498f3 --- /dev/null +++ b/nfcore_star_salmon/widgets/nfcore_star_salmon/S3_download/S3_download.attrs @@ -0,0 +1 @@ +{"autoMap": null, "buildCommand": null, "command": null, "description": null, "docker_image_name": null, "docker_image_tag": null, "icon": null, "inputs": null, "name": "S3_upload", "outputs": null, "parameters": null, "priority": null, "volumes": null, "runDockerMap": null} \ No newline at end of file diff --git a/nfcore_star_salmon/widgets/nfcore_star_salmon/S3_download/S3_download.json b/nfcore_star_salmon/widgets/nfcore_star_salmon/S3_download/S3_download.json new file mode 100644 index 00000000..99e77b3a --- /dev/null +++ b/nfcore_star_salmon/widgets/nfcore_star_salmon/S3_download/S3_download.json @@ -0,0 +1 @@ +{"name": "S3_download", "description": "Enter and output a file", "docker_image_name": "biodepot/s3download", "docker_image_tag": "1.16.272__python_3.8.0__alpine-3.10__e2962454", "priority": "10", "icon": null, "inputs": {"py/reduce": [{"py/type": "collections.OrderedDict"}, {"py/tuple": []}, null, null, {"py/tuple": [{"py/tuple": ["Trigger", {"callback": null, "type": {"py/type": "builtins.str"}}]}, {"py/tuple": ["awsdir", {"callback": null, "type": {"py/type": "builtins.str"}}]}, {"py/tuple": ["bucket", {"callback": null, "type": {"py/type": "builtins.str"}}]}, {"py/tuple": ["downloadDir", {"callback": null, "type": {"py/type": "builtins.str"}}]}]}]}, "outputs": {"py/reduce": [{"py/type": "collections.OrderedDict"}, {"py/tuple": []}, null, null, {"py/tuple": [{"py/tuple": ["downloadDir", {"default": null, "type": {"py/type": "builtins.str"}}]}]}]}, "volumes": null, "ports": null, "parameters": {"py/reduce": [{"py/type": "collections.OrderedDict"}, {"py/tuple": []}, null, null, {"py/tuple": [{"py/tuple": ["awsdir", {"default": "/data/.aws", "flag": null, "argument": true, "label": "AWS directory", "type": "directory"}]}, {"py/tuple": ["bucket", {"default": "myBucket", "flag": null, "argument": true, "label": "S3 bucket", "type": "str"}]}, {"py/tuple": ["downloadDir", {"default": "/data", "flag": null, "argument": true, "label": "Directory to download to", "type": "directory"}]}, {"py/tuple": ["dirs", {"flag": null, "label": "S3 objects to download", "type": "text list", "env": "DIRS"}]}, {"py/tuple": ["nthreads", {"flag": null, "label": "Number of Threads", "type": "int", "env": "nThreads"}]}, {"py/tuple": ["key", {"flag": null, "label": "AWS Access key", "type": "str", "env": "AWS_ACCESS_KEY_ID"}]}, {"py/tuple": ["secret", {"flag": null, "label": "AWS Secret", "type": "str", "env": "AWS_SECRET_ACCESS_KEY"}]}, {"py/tuple": ["region", {"default": "us-east-2", "flag": null, "label": "Region", "type": "str", "env": "AWS_DEFAULT_REGION"}]}]}]}, "command": ["download.sh"], "autoMap": true, "runDockerMap": null, "persistentSettings": "all", "requiredParameters": ["awsdir", "bucket", "downloadDir", "dirs"]} \ No newline at end of file diff --git a/nfcore_star_salmon/widgets/nfcore_star_salmon/S3_download/S3_download.py b/nfcore_star_salmon/widgets/nfcore_star_salmon/S3_download/S3_download.py new file mode 100755 index 00000000..d7e919f8 --- /dev/null +++ b/nfcore_star_salmon/widgets/nfcore_star_salmon/S3_download/S3_download.py @@ -0,0 +1,71 @@ +import os +import glob +import sys +import functools +import jsonpickle +from collections import OrderedDict +from Orange.widgets import widget, gui, settings +import Orange.data +from Orange.data.io import FileFormat +from DockerClient import DockerClient +from BwBase import OWBwBWidget, ConnectionDict, BwbGuiElements, getIconName, getJsonName +from PyQt5 import QtWidgets, QtGui + +class OWS3_download(OWBwBWidget): + name = "S3_download" + description = "Enter and output a file" + priority = 10 + icon = getIconName(__file__,"downloadS3.png") + want_main_area = False + docker_image_name = "biodepot/s3download" + docker_image_tag = "1.16.272__python_3.8.0__alpine-3.10__e2962454" + inputs = [("Trigger",str,"handleInputsTrigger"),("awsdir",str,"handleInputsawsdir"),("bucket",str,"handleInputsbucket"),("downloadDir",str,"handleInputsdownloadDir")] + outputs = [("downloadDir",str)] + pset=functools.partial(settings.Setting,schema_only=True) + runMode=pset(0) + exportGraphics=pset(False) + runTriggers=pset([]) + triggerReady=pset({}) + inputConnectionsStore=pset({}) + optionsChecked=pset({}) + awsdir=pset("/data/.aws") + bucket=pset("myBucket") + downloadDir=pset("/data") + dirs=pset([]) + nthreads=pset(None) + key=pset(None) + secret=pset(None) + region=pset("us-east-2") + def __init__(self): + super().__init__(self.docker_image_name, self.docker_image_tag) + with open(getJsonName(__file__,"S3_download")) as f: + self.data=jsonpickle.decode(f.read()) + f.close() + self.initVolumes() + self.inputConnections = ConnectionDict(self.inputConnectionsStore) + self.drawGUI() + def handleInputsTrigger(self, value, *args): + if args and len(args) > 0: + self.handleInputs("Trigger", value, args[0][0], test=args[0][3]) + else: + self.handleInputs("inputFile", value, None, False) + def handleInputsawsdir(self, value, *args): + if args and len(args) > 0: + self.handleInputs("awsdir", value, args[0][0], test=args[0][3]) + else: + self.handleInputs("inputFile", value, None, False) + def handleInputsbucket(self, value, *args): + if args and len(args) > 0: + self.handleInputs("bucket", value, args[0][0], test=args[0][3]) + else: + self.handleInputs("inputFile", value, None, False) + def handleInputsdownloadDir(self, value, *args): + if args and len(args) > 0: + self.handleInputs("downloadDir", value, args[0][0], test=args[0][3]) + else: + self.handleInputs("inputFile", value, None, False) + def handleOutputs(self): + outputValue=None + if hasattr(self,"downloadDir"): + outputValue=getattr(self,"downloadDir") + self.send("downloadDir", outputValue) diff --git a/nfcore_star_salmon/widgets/nfcore_star_salmon/S3_download/S3_download.states b/nfcore_star_salmon/widgets/nfcore_star_salmon/S3_download/S3_download.states new file mode 100644 index 00000000..94677b85 --- /dev/null +++ b/nfcore_star_salmon/widgets/nfcore_star_salmon/S3_download/S3_download.states @@ -0,0 +1 @@ +{"addBuildDate": [true, true], "autoMap": [true, true], "buildCommand": [true, ""], "command": [true, "download.sh"], "description": [[null, null], [true, "description:"], [true, "Enter and output a file"]], "docker_image_name": [[null, null], [true, "docker_image_name:"], [true, "biodepot/s3download"]], "docker_image_tag": [[null, null], [true, "docker_image_tag:"], [true, "1.16.272__python_3.8.0__alpine-3.10__e2962454"]], "icon": [[null, null], [true, "icon:"], [true, ""]], "inputs": [[[[null, null], [true, "Name"], [true, "Trigger"]], [[true, false], [true, "callback"], [false, ""]], [[true, 0, ["str", "dict", "Orange.data.Table"]], [true, "Type:"]]], [[[null, null], [true, "Name"], [true, "awsdir"]], [[true, false], [true, "callback"], [false, ""]], [[true, 0, ["str", "dict", "Orange.data.Table"]], [true, "Type:"]]], [[[null, null], [true, "Name"], [true, "bucket"]], [[true, false], [true, "callback"], [false, ""]], [[true, 0, ["str", "dict", "Orange.data.Table"]], [true, "Type:"]]], [[[null, null], [true, "Name"], [true, "downloadDir"]], [[true, false], [true, "callback"], [false, ""]], [[true, 0, ["str", "dict", "Orange.data.Table"]], [true, "Type:"]]]], "name": "S3_upload", "outputs": [[[[null, null], [true, "Name"], [true, "downloadDir"]], [[true, false], [true, "Default value"], [false, ""]], [[true, 0, ["str", "dict", "Orange.data.Table"]], [true, "Type:"]]]], "parameters": [[[[null, null], [true, "Name"], [true, "awsdir"]], [[true, 3, ["str", "file", "file list", "directory", "directory list", "bool", "bool list", "text list", "int", "int list", "double", "double list", "patternQuery"]], [true, "Type:"]], [[true, false], [true, "flag"], [false, ""]], [true, true], [[true, false], [true, "env"], [false, ""]], [[true, true], [true, "label"], [true, "AWS directory"]], [[true, true], [true, "default"], [true, "/data/.aws"]], [[true, false], [true, "group"], [false, ""]], [true, false]], [[[null, null], [true, "Name"], [true, "bucket"]], [[true, 0, ["str", "file", "file list", "directory", "directory list", "bool", "bool list", "text list", "int", "int list", "double", "double list", "patternQuery"]], [true, "Type:"]], [[true, false], [true, "flag"], [false, ""]], [true, true], [[true, false], [true, "env"], [false, ""]], [[true, true], [true, "label"], [true, "S3 bucket"]], [[true, true], [true, "default"], [true, "myBucket"]], [[true, false], [true, "group"], [false, ""]], [true, false]], [[[null, null], [true, "Name"], [true, "downloadDir"]], [[true, 3, ["str", "file", "file list", "directory", "directory list", "bool", "bool list", "text list", "int", "int list", "double", "double list", "patternQuery"]], [true, "Type:"]], [[true, false], [true, "flag"], [false, ""]], [true, true], [[true, false], [true, "env"], [false, ""]], [[true, true], [true, "label"], [true, "Directory to download to"]], [[true, true], [true, "default"], [true, "/data"]], [[true, false], [true, "group"], [false, ""]], [true, false]], [[[null, null], [true, "Name"], [true, "dirs"]], [[true, 7, ["str", "file", "file list", "directory", "directory list", "bool", "bool list", "text list", "int", "int list", "double", "double list", "patternQuery"]], [true, "Type:"]], [[true, false], [true, "flag"], [false, ""]], [true, false], [[true, true], [true, "env"], [true, "DIRS"]], [[true, true], [true, "label"], [true, "S3 objects to download"]], [[true, false], [true, "default"], [false, ""]], [[true, false], [true, "group"], [false, ""]], [true, false]], [[[null, null], [true, "Name"], [true, "nthreads"]], [[true, 8, ["str", "file", "file list", "directory", "directory list", "bool", "bool list", "text list", "int", "int list", "double", "double list", "patternQuery"]], [true, "Type:"]], [[true, false], [true, "flag"], [false, ""]], [true, false], [[true, true], [true, "env"], [true, "nThreads"]], [[true, true], [true, "label"], [true, "Number of Threads"]], [[true, false], [true, "default"], [false, ""]], [[true, false], [true, "group"], [false, ""]], [true, true]], [[[null, null], [true, "Name"], [true, "key"]], [[true, 0, ["str", "file", "file list", "directory", "directory list", "bool", "bool list", "text list", "int", "int list", "double", "double list", "patternQuery"]], [true, "Type:"]], [[true, false], [true, "flag"], [false, ""]], [true, false], [[true, true], [true, "env"], [true, "AWS_ACCESS_KEY_ID"]], [[true, true], [true, "label"], [true, "AWS Access key"]], [[true, false], [true, "default"], [false, ""]], [[true, false], [true, "group"], [false, ""]], [true, true]], [[[null, null], [true, "Name"], [true, "secret"]], [[true, 0, ["str", "file", "file list", "directory", "directory list", "bool", "bool list", "text list", "int", "int list", "double", "double list", "patternQuery"]], [true, "Type:"]], [[true, false], [true, "flag"], [false, ""]], [true, false], [[true, true], [true, "env"], [true, "AWS_SECRET_ACCESS_KEY"]], [[true, true], [true, "label"], [true, "AWS Secret"]], [[true, false], [true, "default"], [false, ""]], [[true, false], [true, "group"], [false, ""]], [true, true]], [[[null, null], [true, "Name"], [true, "region"]], [[true, 0, ["str", "file", "file list", "directory", "directory list", "bool", "bool list", "text list", "int", "int list", "double", "double list", "patternQuery"]], [true, "Type:"]], [[true, false], [true, "flag"], [false, ""]], [true, false], [[true, true], [true, "env"], [true, "AWS_DEFAULT_REGION"]], [[true, true], [true, "label"], [true, "Region"]], [[true, true], [true, "default"], [true, "us-east-2"]], [[true, false], [true, "group"], [false, ""]], [true, true]]], "priority": [[null, null], [true, "priority:"], [true, "10"]], "runDockerMap": [true, false]} \ No newline at end of file diff --git a/nfcore_star_salmon/widgets/nfcore_star_salmon/S3_download/icon/downloadS3.png b/nfcore_star_salmon/widgets/nfcore_star_salmon/S3_download/icon/downloadS3.png new file mode 100644 index 00000000..d6dd40e2 Binary files /dev/null and b/nfcore_star_salmon/widgets/nfcore_star_salmon/S3_download/icon/downloadS3.png differ diff --git a/nfcore_star_salmon/widgets/nfcore_star_salmon/__init__.py b/nfcore_star_salmon/widgets/nfcore_star_salmon/__init__.py new file mode 100644 index 00000000..4b99609c --- /dev/null +++ b/nfcore_star_salmon/widgets/nfcore_star_salmon/__init__.py @@ -0,0 +1,10 @@ +import sysconfig + +# Category metadata. + +# Category icon show in the menu +ICON = "icon/RNAseq.png" + +# Background color for category background in menu +# and widget icon background in workflow. +BACKGROUND = "#ffffcb" diff --git a/nfcore_star_salmon/widgets/nfcore_star_salmon/downloadURL/Dockerfiles/Dockerfile b/nfcore_star_salmon/widgets/nfcore_star_salmon/downloadURL/Dockerfiles/Dockerfile new file mode 100644 index 00000000..65688fc9 --- /dev/null +++ b/nfcore_star_salmon/widgets/nfcore_star_salmon/downloadURL/Dockerfiles/Dockerfile @@ -0,0 +1,5 @@ +FROM alpine:3.15 +RUN adduser --disabled-password -s /bin/bash user +RUN apk update upgrade --no-cache && apk add bash curl wget unzip tar bzip2 grep \ + && rm -rf /var/cache/apk* +COPY download.sh /root/. diff --git a/nfcore_star_salmon/widgets/nfcore_star_salmon/downloadURL/Dockerfiles/download.sh b/nfcore_star_salmon/widgets/nfcore_star_salmon/downloadURL/Dockerfiles/download.sh new file mode 100755 index 00000000..8b2a8501 --- /dev/null +++ b/nfcore_star_salmon/widgets/nfcore_star_salmon/downloadURL/Dockerfiles/download.sh @@ -0,0 +1,252 @@ +#!/bin/bash + +function checkFilename(){ + echo "check zero length" + [[ -n "$filename" ]] || return 1 + echo "check too long" + [[ $(echo "${#filename}") -lt 255 ]] || return 1 + echo "check character" + [[ $filename =~ ^[0-9a-zA-Z._-]+$ ]] || return 1 + echo "check first char" + [[ $(echo $filename | cut -c1-1) =~ ^[0-9a-zA-Z]+$ ]] || return 1 + return 0 +} + +function getFilename(){ + curlret=0 + unset filename + echo "finding filename for url $url" + tempDir="$(mktemp -d /tmp/XXXXXXXXX)" + #make a temporary directory without write permissions to force curl to quit after obtaining filename + chmod -w $tempDir + filename=$(cd $tempDir; su user -c "wget --content-disposition $url |& grep denied | sed 's/.*denied //; s/:.*//'") + checkFilename && return + filename=$(su user -c "curl -JLO $url |& grep -m 1 Warning | sed 's/.* file //; s/:.*//'") + checkFilename && return + filename="${url##*/}" +} + +function findGoogleFilename(){ + if [[ $1 == *drive.google.com/file/d/* ]]; then + fileID=$(echo "$1" | sed -n -e 's/.*drive\.google\.com\/file\/d\///p' | sed 's:/.*::') + else + fileID=$(echo "$1" | sed -n -e 's/.*\?id\=//p') + fileID=${fileID%%/*} + fi + echo "fileID is ${fileID}" + filename=$(curl -s -L "$1" | sed -n -e 's/.*.*//p') + echo curl -s -L "$1" + [ -z "$filename" ] && echo "Unable to find filename - cannot download from google" && exit 1 + #try to get download code from session cookie + echo "filename is $filename" + echo "curl -s -c ./cookie 'https://drive.google.com/uc?export=download&id=${fileID}'" + formText=$(curl -s -c ./cookie "https://drive.google.com/uc?export=download&id=${fileID}") + code=$(cat ./cookie | grep -o 'download_warning.*' | cut -f2) + [[ -z "$code" ]] && code=$(echo "$formText" | grep -oP '(?<=;confirm=).*(?=\" method)') + #code= $(echo $text | grep -oP '(?<=;confirm=).*(?=\" method)') + echo $formText + echo $code + #echo "curl -c ./cookie 'https://drive.google.com/uc?export=download&id=${fileID}' &> /dev/null" + + if [[ -n "$code" ]]; then + echo "code is $code" + else + echo "no code found" + fi +} + +function decompString(){ + unset dcmd + unset zipFlag + if [ -n "$decompress" ]; then + case $1 in + *.tar.bz2 | *.tbz2 ) + if [ -n "$concatenateFile" ]; then + dcmd="| tar -xjOf - >> $concatenateFile" + else + dcmd='| tar -xjf -' + fi + return + ;; + *.tar.gz | *.tgz) + if [ -n "$concatenateFile" ]; then + dcmd="| tar -xzOf - >> $concatenateFile" + else + dcmd='| tar -xzf -' + fi + return + ;; + *.tar) + if [ -n "$concatenateFile" ]; then + dcmd="| tar -xOf - >> $concatenateFile" + else + dcmd='| tar -xf -' + fi + return + ;; + *.gz) + if [ -n "$concatenateFile" ]; then + dcmd="| gzip -d >> $concatenateFile" + else + local outputname=$(basename "$1" .gz) + dcmd="| gzip -d > $outputname" + fi + return + ;; + *.bz2) + if [ -n "$concatenateFile" ]; then + dcmd="| bzip2 -d >> $concatenateFile" + else + local outputname=$(basename "$1" .bz2) + dcmd="| bzip2 -d > $outputname" + fi + return + ;; + *.zip) + zipFlag=1 + if [ -n "$concatenateFile" ]; then + dcmd="&& unzip -p >> $concatenateFile" + else + dcmd="&& unzip -o '$filename' && rm '$filename'" + fi + return + ;; + esac + fi + if [ -n "$concatenateFile" ]; then + dcmd=">> $concatenateFile" + else + dcmd="-o $filename" + fi +} + +while [[ $# -gt 0 ]] ; do + case $1 in + --decompress) + decompress=1 + ;; + --directory) + mkdir -p $2 + cd $2 + shift + ;; + --concatenateFile) + concatenateFile=$2 + shift + ;; + --noClobber) + noClobber=1 + ;; + *) + urls+=("$1") + ;; + esac + shift +done + +#empty the concatenateFile if it exists +#do it here instead of in parse loop because in case the directory change comes after the concatenate +if [ -n "$concatenateFile" ]; then + bash -c "> $concatenateFile" +fi + +#loop through the urls +status=0 +for url in "${urls[@]}" ; do + #if it falls through all code - then there is an error. + curlret=1 + if [[ $url == *drive.google.com* ]]; then + #find filename and fileID and keep cookie + findGoogleFilename $url + decompString "$filename" + echo "google drive url is $url filename is $filename fileID is $fileID code is $code dcmd is $dcmd" + if [[ -n "$filename" ]]; then + if [ -n "$noClobber" ] && [ -f "$filename" ]; then + echo "File $filename is already present, skipping download" + shift + continue + fi + if [ -z "$code" ]; then + echo No problem with virus check no verification needed + cmd="curl -L 'https://docs.google.com/uc?export=download&id=${fileID}' " + else + echo "Verification code to bypass virus scan is $code " + cmd="curl -Lb ./cookie 'https://drive.google.com/uc?export=download&confirm=${code}&id=$fileID' " + fi + if [[ -n $zipFlag ]]; then + cmd+="-o '$filename' " + fi + cmd+="$dcmd" + echo "$cmd" + bash -c "$cmd" + curlret=$? + rm -f ./cookie + else + echo "did not download $url - can't find filename - authentication may be required" + fi + else + echo "url $url is not from google drive" + getFilename + if [ -n "$noClobber" ] && [ -f "$filename" ]; then + echo "File $filename is already present, skipping download" + shift + continue + fi + echo "$filename" + if [ -n "$decompress" ]; then + # check for a log that should contain all extracted objects + if [ -s "$filename.log" ] && [ -n "$noClobber" ]; then + skipDownload=true + while read f; do + if [ ! -e "$f" ]; then + # if we are here then one of the extracted objects does not exist + skipDownload=false + break + fi + done < $filename.log + if $skipDownload; then + shift + continue + fi + fi + decompString "$filename" + # make a temp directory to store file content then move to permanent location after + tmpdir=$(mktemp -d -p $PWD) + pushd $tmpdir > /dev/null + if [[ -n $zipFlag ]]; then + cmd="curl -JLO $url $dcmd" + else + cmd="curl -L $url $dcmd" + fi + echo "$cmd" + bash -c "$cmd" + curlret=$? + if [ $curlret -eq 0 ]; then + # store a log file to prevent script from downloading again + find -not -name . > ../$filename.log + # set dot glob to move hidden files and directories + shopt -s dotglob + mv * ../ + # unset dot glob to avoid trouble + shopt -u dotglob + fi + popd > /dev/null + rmdir $tmpdir + else + if [ -n "$concatenateFile" ]; then + cmd="curl $url >> $concatenateFile" + else + cmd="curl -JLO $url" + fi + echo "$cmd" + $cmd + #curlret=$? + fi + fi + if [ $curlret -ne 0 ]; then + status=1 + fi + shift +done + +exit $status diff --git a/nfcore_star_salmon/widgets/nfcore_star_salmon/downloadURL/downloadURL.attrs b/nfcore_star_salmon/widgets/nfcore_star_salmon/downloadURL/downloadURL.attrs new file mode 100644 index 00000000..5291472b --- /dev/null +++ b/nfcore_star_salmon/widgets/nfcore_star_salmon/downloadURL/downloadURL.attrs @@ -0,0 +1 @@ +{"autoMap": null, "buildCommand": null, "command": null, "description": null, "docker_image_name": null, "docker_image_tag": null, "icon": null, "inputs": null, "name": "generic141", "outputs": null, "parameters": null, "priority": null, "saveModeIndex": 1, "volumes": null} \ No newline at end of file diff --git a/nfcore_star_salmon/widgets/nfcore_star_salmon/downloadURL/downloadURL.json b/nfcore_star_salmon/widgets/nfcore_star_salmon/downloadURL/downloadURL.json new file mode 100644 index 00000000..7bd9ebc2 --- /dev/null +++ b/nfcore_star_salmon/widgets/nfcore_star_salmon/downloadURL/downloadURL.json @@ -0,0 +1 @@ +{"ports":null,"docker_image_name":"biodepot/downloadurl","outputs":{"py/reduce":[{"py/type":"collections.OrderedDict"},{"py/tuple":[]},null,null,{"py/tuple":[{"py/tuple":["directory",{"type":{"py/type":"__builtin__.str"},"default":"/data"}]}]}]},"priority":"1","command":["/root/download.sh"],"inputs":{"py/reduce":[{"py/type":"collections.OrderedDict"},{"py/tuple":[]},null,null,{"py/tuple":[{"py/tuple":["directory",{"callback":null,"type":{"py/type":"__builtin__.str"}}]},{"py/tuple":["trigger",{"type":{"py/type":"__builtin__.str"},"callback":null}]}]}]},"requiredParameters":["URL","directory"],"description":"Downloads files from URL","icon":"/data/download.png","persistentSettings":"all","volumes":null,"autoMap":true,"parameters":{"py/reduce":[{"py/type":"collections.OrderedDict"},{"py/tuple":[]},null,null,{"py/tuple":[{"py/tuple":["URL",{"type":"text list","label":"URL(s)","flag":null,"argument":true}]},{"py/tuple":["decompress",{"label":"Decompress files","type":"bool","default":true,"flag":"--decompress"}]},{"py/tuple":["directory",{"flag":"--directory","label":"Download directory","type":"directory"}]},{"py/tuple":["concatenateFile",{"label":"Download and join into one file","type":"file","flag":"--concatenateFile"}]}]}]},"name":"downloadURL","docker_image_tag":"alpine-3.15__f91276f5__4e514ca8__4cca3308"} \ No newline at end of file diff --git a/nfcore_star_salmon/widgets/nfcore_star_salmon/downloadURL/downloadURL.py b/nfcore_star_salmon/widgets/nfcore_star_salmon/downloadURL/downloadURL.py new file mode 100644 index 00000000..d36c284c --- /dev/null +++ b/nfcore_star_salmon/widgets/nfcore_star_salmon/downloadURL/downloadURL.py @@ -0,0 +1,65 @@ +import os +import glob +import sys +import functools +import jsonpickle +from collections import OrderedDict +from Orange.widgets import widget, gui, settings +import Orange.data +from Orange.data.io import FileFormat +from DockerClient import DockerClient +from BwBase import OWBwBWidget, ConnectionDict, BwbGuiElements, getIconName, getJsonName +from PyQt5 import QtWidgets, QtGui + + +class OWdownloadURL(OWBwBWidget): + name = "downloadURL" + description = "Downloads files from URL" + priority = 1 + icon = getIconName(__file__, "download.png") + want_main_area = False + docker_image_name = "biodepot/downloadurl" + docker_image_tag = "alpine-3.15__f91276f5__4e514ca8__4cca3308" + inputs = [ + ("directory", str, "handleInputsdirectory"), + ("trigger", str, "handleInputstrigger"), + ] + outputs = [("directory", str)] + pset = functools.partial(settings.Setting, schema_only=True) + runMode = pset(0) + exportGraphics = pset(False) + runTriggers = pset([]) + triggerReady = pset({}) + inputConnectionsStore = pset({}) + optionsChecked = pset({}) + URL = pset([]) + decompress = pset(True) + directory = pset(None) + concatenateFile = pset(None) + + def __init__(self): + super().__init__(self.docker_image_name, self.docker_image_tag) + with open(getJsonName(__file__, "downloadURL")) as f: + self.data = jsonpickle.decode(f.read()) + f.close() + self.initVolumes() + self.inputConnections = ConnectionDict(self.inputConnectionsStore) + self.drawGUI() + + def handleInputsdirectory(self, value, *args): + if args and len(args) > 0: + self.handleInputs("directory", value, args[0][0], test=args[0][3]) + else: + self.handleInputs("inputFile", value, None) + + def handleInputstrigger(self, value, *args): + if args and len(args) > 0: + self.handleInputs("trigger", value, args[0][0], test=args[0][3]) + else: + self.handleInputs("inputFile", value, None) + + def handleOutputs(self): + outputValue = "/data" + if hasattr(self, "directory"): + outputValue = getattr(self, "directory") + self.send("directory", outputValue) diff --git a/nfcore_star_salmon/widgets/nfcore_star_salmon/downloadURL/downloadURL.states b/nfcore_star_salmon/widgets/nfcore_star_salmon/downloadURL/downloadURL.states new file mode 100644 index 00000000..750b5310 --- /dev/null +++ b/nfcore_star_salmon/widgets/nfcore_star_salmon/downloadURL/downloadURL.states @@ -0,0 +1 @@ +{"priority":[[null,null],[true,"priority:"],[true,"1"]],"docker_image_name":[[null,null],[true,"docker_image_name:"],[true,"biodepot/downloadurl"]],"outputs":[[[[null,null],[true,"Name"],[true,"directory"]],[[true,true],[true,"Default value"],[true,"/data"]],[[true,0,["str","Orange.data.Table"]],[true,"Type:"]]]],"inputs":[[[[null,null],[true,"Name"],[true,"directory"]],[[true,false],[true,"callback"],[false,""]],[[true,0,["str","Orange.data.Table"]],[true,"Type:"]]],[[[null,null],[true,"Name"],[true,"trigger"]],[[true,false],[true,"callback"],[false,""]],[[true,0,["str","Orange.data.Table"]],[true,"Type:"]]]],"command":[true,"/root/download.sh"],"icon":[[null,null],[true,"icon:"],[true,"/data/download.png"]],"description":[[null,null],[true,"description:"],[true,"Downloads files from URL"]],"addBuildDate":[true,true],"autoMap":[true,true],"parameters":[[[[null,null],[true,"Name"],[true,"URL"]],[[true,8,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,false],[true,"flag"],[false,""]],[true,true],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"URL(s)"]],[[true,false],[true,"default"],[false,""]],[true,false]],[[[null,null],[true,"Name"],[true,"decompress"]],[[true,5,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--decompress"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"Decompress files"]],[[true,true],[true,"default"],[true,"True"]],[true,true]],[[[null,null],[true,"Name"],[true,"directory"]],[[true,3,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--directory"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"Download directory"]],[[true,false],[true,"default"],[false,""]],[true,false]],[[[null,null],[true,"Name"],[true,"concatenateFile"]],[[true,1,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--concatenateFile"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"Download and join into one file"]],[[true,false],[true,"default"],[false,""]],[true,true]]],"docker_image_tag":[[null,null],[true,"docker_image_tag:"],[true,"alpine-3.15__f91276f5__4e514ca8__4cca3308"]],"buildCommand":[true,""],"name":[[null,null],[true,"name:"],[true,"downloadURL"]]} \ No newline at end of file diff --git a/nfcore_star_salmon/widgets/nfcore_star_salmon/downloadURL/icon/download.png b/nfcore_star_salmon/widgets/nfcore_star_salmon/downloadURL/icon/download.png new file mode 100644 index 00000000..48417f21 Binary files /dev/null and b/nfcore_star_salmon/widgets/nfcore_star_salmon/downloadURL/icon/download.png differ diff --git a/nfcore_star_salmon/widgets/nfcore_star_salmon/fastqc/Dockerfiles/Dockerfile b/nfcore_star_salmon/widgets/nfcore_star_salmon/fastqc/Dockerfiles/Dockerfile new file mode 100644 index 00000000..50de34e5 --- /dev/null +++ b/nfcore_star_salmon/widgets/nfcore_star_salmon/fastqc/Dockerfiles/Dockerfile @@ -0,0 +1,6 @@ +FROM ubuntu:22.04 +RUN apt-get update && apt-get -y install fastqc default-jre libfindbin-libs-perl libhtsjdk-java libngs-java \ + && apt-get autoclean -y \ + && apt-get autoremove -y \ + && rm -rf /var/lib/apt/lists/* + diff --git a/nfcore_star_salmon/widgets/nfcore_star_salmon/fastqc/fastqc.attrs b/nfcore_star_salmon/widgets/nfcore_star_salmon/fastqc/fastqc.attrs new file mode 100644 index 00000000..bf101d5f --- /dev/null +++ b/nfcore_star_salmon/widgets/nfcore_star_salmon/fastqc/fastqc.attrs @@ -0,0 +1 @@ +{"autoMap": null, "buildCommand": null, "command": null, "description": null, "docker_image_name": null, "docker_image_tag": null, "icon": null, "inputs": null, "name": "fastqc", "outputs": null, "parameters": null, "priority": null, "volumes": null} \ No newline at end of file diff --git a/nfcore_star_salmon/widgets/nfcore_star_salmon/fastqc/fastqc.json b/nfcore_star_salmon/widgets/nfcore_star_salmon/fastqc/fastqc.json new file mode 100644 index 00000000..394fe410 --- /dev/null +++ b/nfcore_star_salmon/widgets/nfcore_star_salmon/fastqc/fastqc.json @@ -0,0 +1 @@ +{"command":["fastqc "],"inputs":{"py/reduce":[{"py/type":"collections.OrderedDict"},{"py/tuple":[]},null,null,{"py/tuple":[{"py/tuple":["inputDir",{"callback":null,"type":{"py/type":"__builtin__.str"}}]}]}]},"ports":null,"outputs":{"py/reduce":[{"py/type":"collections.OrderedDict"},{"py/tuple":[]},null,null,{"py/tuple":[{"py/tuple":["outputDir",{"type":{"py/type":"__builtin__.str"},"default":null}]}]}]},"docker_image_name":"biodepot/fastqc","priority":"5","icon":"/data/fastqc_icon_100.png","requiredParameters":[],"description":"fastqc","parameters":{"py/reduce":[{"py/type":"collections.OrderedDict"},{"py/tuple":[]},null,null,{"py/tuple":[{"py/tuple":["inputFiles",{"argument":true,"flag":null,"type":"file list","label":"Fastq files"}]},{"py/tuple":["outputDir",{"type":"directory","label":"Output directory","flag":"-o"}]},{"py/tuple":["inputDir",{"label":"Input Directory","type":"directory","flag":"-i"}]}]}]},"volumes":null,"autoMap":true,"persistentSettings":"all","docker_image_tag":"0.11.9__ubuntu-22.04__89635a47__4c65506a__7b51306f","name":"fastqc"} \ No newline at end of file diff --git a/nfcore_star_salmon/widgets/nfcore_star_salmon/fastqc/fastqc.py b/nfcore_star_salmon/widgets/nfcore_star_salmon/fastqc/fastqc.py new file mode 100644 index 00000000..8f0b70cb --- /dev/null +++ b/nfcore_star_salmon/widgets/nfcore_star_salmon/fastqc/fastqc.py @@ -0,0 +1,55 @@ +import os +import glob +import sys +import functools +import jsonpickle +from collections import OrderedDict +from Orange.widgets import widget, gui, settings +import Orange.data +from Orange.data.io import FileFormat +from DockerClient import DockerClient +from BwBase import OWBwBWidget, ConnectionDict, BwbGuiElements, getIconName, getJsonName +from PyQt5 import QtWidgets, QtGui + + +class OWfastqc(OWBwBWidget): + name = "fastqc" + description = "fastqc" + priority = 5 + icon = getIconName(__file__, "fastqc_icon_100.png") + want_main_area = False + docker_image_name = "biodepot/fastqc" + docker_image_tag = "0.11.9__ubuntu-22.04__89635a47__4c65506a__7b51306f" + inputs = [("inputDir", str, "handleInputsinputDir")] + outputs = [("outputDir", str)] + pset = functools.partial(settings.Setting, schema_only=True) + runMode = pset(0) + exportGraphics = pset(False) + runTriggers = pset([]) + triggerReady = pset({}) + inputConnectionsStore = pset({}) + optionsChecked = pset({}) + inputFiles = pset([]) + outputDir = pset(None) + inputDir = pset(None) + + def __init__(self): + super().__init__(self.docker_image_name, self.docker_image_tag) + with open(getJsonName(__file__, "fastqc")) as f: + self.data = jsonpickle.decode(f.read()) + f.close() + self.initVolumes() + self.inputConnections = ConnectionDict(self.inputConnectionsStore) + self.drawGUI() + + def handleInputsinputDir(self, value, *args): + if args and len(args) > 0: + self.handleInputs("inputDir", value, args[0][0], test=args[0][3]) + else: + self.handleInputs("inputFile", value, None) + + def handleOutputs(self): + outputValue = None + if hasattr(self, "outputDir"): + outputValue = getattr(self, "outputDir") + self.send("outputDir", outputValue) diff --git a/nfcore_star_salmon/widgets/nfcore_star_salmon/fastqc/fastqc.states b/nfcore_star_salmon/widgets/nfcore_star_salmon/fastqc/fastqc.states new file mode 100644 index 00000000..eef434ee --- /dev/null +++ b/nfcore_star_salmon/widgets/nfcore_star_salmon/fastqc/fastqc.states @@ -0,0 +1 @@ +{"icon":[[null,null],[true,"icon:"],[true,"/data/fastqc_icon_100.png"]],"addBuildDate":[true,true],"description":[[null,null],[true,"description:"],[true,"fastqc"]],"command":[true,"fastqc "],"inputs":[[[[null,null],[true,"Name"],[true,"inputDir"]],[[true,false],[true,"callback"],[false,""]],[[true,0,["str","Orange.data.Table"]],[true,"Type:"]]]],"docker_image_name":[[null,null],[true,"docker_image_name:"],[true,"biodepot/fastqc"]],"priority":[[null,null],[true,"priority:"],[true,"5"]],"outputs":[[[[null,null],[true,"Name"],[true,"outputDir"]],[[true,false],[true,"Default value"],[false,""]],[[true,0,["str","Orange.data.Table"]],[true,"Type:"]]]],"docker_image_tag":[[null,null],[true,"docker_image_tag:"],[true,"0.11.9__ubuntu-22.04__89635a47__4c65506a__7b51306f"]],"buildCommand":[true,""],"parameters":[[[[null,null],[true,"Name"],[true,"inputFiles"]],[[true,2,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,false],[true,"flag"],[false,""]],[true,true],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"Fastq files"]],[[true,false],[true,"default"],[false,""]],[true,true]],[[[null,null],[true,"Name"],[true,"outputDir"]],[[true,3,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"-o"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"Output directory"]],[[true,false],[true,"default"],[false,""]],[true,true]],[[[null,null],[true,"Name"],[true,"inputDir"]],[[true,3,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"-i"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"Input Directory"]],[[true,false],[true,"default"],[false,""]],[true,true]]],"autoMap":[true,true]} \ No newline at end of file diff --git a/nfcore_star_salmon/widgets/nfcore_star_salmon/fastqc/icon/fastqc_icon_100.png b/nfcore_star_salmon/widgets/nfcore_star_salmon/fastqc/icon/fastqc_icon_100.png new file mode 100644 index 00000000..668c9179 Binary files /dev/null and b/nfcore_star_salmon/widgets/nfcore_star_salmon/fastqc/icon/fastqc_icon_100.png differ diff --git a/nfcore_star_salmon/widgets/nfcore_star_salmon/icon/RNAseq.png b/nfcore_star_salmon/widgets/nfcore_star_salmon/icon/RNAseq.png new file mode 100644 index 00000000..32d88149 Binary files /dev/null and b/nfcore_star_salmon/widgets/nfcore_star_salmon/icon/RNAseq.png differ diff --git a/nfcore_star_salmon/widgets/nfcore_star_salmon/igv/Dockerfiles/Dockerfile b/nfcore_star_salmon/widgets/nfcore_star_salmon/igv/Dockerfiles/Dockerfile new file mode 100644 index 00000000..30b03ffd --- /dev/null +++ b/nfcore_star_salmon/widgets/nfcore_star_salmon/igv/Dockerfiles/Dockerfile @@ -0,0 +1,24 @@ +FROM ubuntu:20.04 +LABEL maintainer="Bob Schmitz" +ARG IGV_VERSION="2.9.2" +# This flag is needed to render Java in Bwb +ENV JAVA_TOOL_OPTIONS="-Dsun.java2d.xrender=false" +RUN apt-get update \ + && apt-get install -y --no-install-recommends \ + bash \ + openjdk-11-jre \ + unzip \ + wget \ + && wget -nv https://data.broadinstitute.org/igv/projects/downloads/$(echo ${IGV_VERSION} | sed 's|.[0-9]\+$||')/IGV_Linux_${IGV_VERSION}_WithJava.zip \ + && unzip -q *.zip -x "*/jdk-11/*" \ + && rm *.zip \ +# Remove some benign warnings + && sed -i 's|--add-exports java.desktop/com.sun.java.swing.plaf.windows=jide.common ||; \ + s|--add-exports java.desktop/sun.awt.windows=jide.common ||' IGV*/igv.args \ + && mv IGV*/* /usr/local/bin \ + && rmdir IGV* \ + && apt-get purge --auto-remove -y \ + unzip \ + wget \ + && rm -rf /var/lib/apt/lists/* +COPY start-igv.sh /usr/local/bin diff --git a/nfcore_star_salmon/widgets/nfcore_star_salmon/igv/Dockerfiles/start-igv.sh b/nfcore_star_salmon/widgets/nfcore_star_salmon/igv/Dockerfiles/start-igv.sh new file mode 100755 index 00000000..d4ea9a77 --- /dev/null +++ b/nfcore_star_salmon/widgets/nfcore_star_salmon/igv/Dockerfiles/start-igv.sh @@ -0,0 +1,61 @@ +#!/bin/bash + +# temporary batch command file, this is currently only used for autoDetermineRegions option +temp_batch=/tmp/batch.txt + +# parse command line options, this is done in a function to preserve original arguments +parseOptions() { + while [ $# -ne 0 ]; do + case $1 in + -g|--genome) + shift + genome_id=$1 + ;; + -b|--batch) + shift + batch_file=$1 + ;; + *) + input_file+=($1) + ;; + esac + shift + done +} + +parseOptions $@ + +# check if batch file was passed along with auto-determine regions option +# this is not supported behavior +if [[ -n "$autoDetermineRegions" && -n "$batch_file" ]]; then + echo "ERROR: auto-determine region(s) of interest does not work with batch command file input" + exit 1 +# if autoDetermineRegions is set, construct a batch script +elif [ -n "$autoDetermineRegions" ]; then + # set to default state + echo new > $temp_batch + # load a reference genome file if set + [ -n "$genome_id" ] && echo "genome $genome_id" >> $temp_batch + for f in "${input_file[@]}"; do + # verify that file is .maf type + if ! echo $f | grep -q "maf$\|vcf$"; then + echo "ERROR: $f is not .maf file type, cannot auto-determine regions of interest" + exit 1 + fi + # load .maf or .vcf file + echo "load $f" >> $temp_batch + done + # Load regions of interest, these are parsed directly from the .maf file + for f in "${input_file[@]}"; do + if echo $f | grep -q "maf$"; then + tail -n +3 $f | awk '{print "region",$5,$6,$7}' >> $temp_batch + elif echo $f | grep -q "vcf$"; then + awk '!/^#/ {print "region",$1,$2,$2}' $f >> $temp_batch + fi + done + igv.sh -b $temp_batch +else + igv.sh $@ +fi +# exit with return status from igv.sh +exit $? diff --git a/nfcore_star_salmon/widgets/nfcore_star_salmon/igv/icon/igv.png b/nfcore_star_salmon/widgets/nfcore_star_salmon/igv/icon/igv.png new file mode 100644 index 00000000..8b5ac337 Binary files /dev/null and b/nfcore_star_salmon/widgets/nfcore_star_salmon/igv/icon/igv.png differ diff --git a/nfcore_star_salmon/widgets/nfcore_star_salmon/igv/igv.attrs b/nfcore_star_salmon/widgets/nfcore_star_salmon/igv/igv.attrs new file mode 100644 index 00000000..16df494f --- /dev/null +++ b/nfcore_star_salmon/widgets/nfcore_star_salmon/igv/igv.attrs @@ -0,0 +1 @@ +{"autoMap": null, "buildCommand": null, "command": null, "description": null, "docker_image_name": null, "docker_image_tag": null, "icon": null, "inputs": null, "name": "igv", "outputs": null, "parameters": null, "priority": null, "volumes": null, "runDockerMap": null} \ No newline at end of file diff --git a/nfcore_star_salmon/widgets/nfcore_star_salmon/igv/igv.json b/nfcore_star_salmon/widgets/nfcore_star_salmon/igv/igv.json new file mode 100644 index 00000000..63ee82c2 --- /dev/null +++ b/nfcore_star_salmon/widgets/nfcore_star_salmon/igv/igv.json @@ -0,0 +1 @@ +{"name": "igv", "description": "Integrative Genomics Viewer", "docker_image_name": "biodepot/igv", "docker_image_tag": "2.9.2__ubuntu_20.04__4b93171f", "priority": "15", "icon": null, "inputs": {"py/reduce": [{"py/type": "collections.OrderedDict"}, {"py/tuple": []}, null, null, {"py/tuple": [{"py/tuple": ["inputFile", {"callback": null, "type": {"py/type": "builtins.str"}}]}, {"py/tuple": ["trigger", {"callback": null, "type": {"py/type": "builtins.str"}}]}]}]}, "outputs": null, "volumes": null, "ports": null, "parameters": {"py/reduce": [{"py/type": "collections.OrderedDict"}, {"py/tuple": []}, null, null, {"py/tuple": [{"py/tuple": ["inputFile", {"flag": null, "argument": true, "label": "Input file", "type": "file list"}]}, {"py/tuple": ["genome", {"default": "hg38", "flag": "-g ", "label": "Genome ID", "type": "str"}]}, {"py/tuple": ["batch", {"flag": "--batch ", "label": "Path to batch command file", "type": "file"}]}, {"py/tuple": ["autoDetermineRegions", {"default": true, "flag": null, "label": "Auto-determine regions of interest (.maf or .vcf only)", "type": "bool", "env": "autoDetermineRegions"}]}]}]}, "command": [" start-igv.sh "], "autoMap": true, "runDockerMap": null, "persistentSettings": "all", "requiredParameters": ["inputFile"]} \ No newline at end of file diff --git a/nfcore_star_salmon/widgets/nfcore_star_salmon/igv/igv.py b/nfcore_star_salmon/widgets/nfcore_star_salmon/igv/igv.py new file mode 100644 index 00000000..318ec0d7 --- /dev/null +++ b/nfcore_star_salmon/widgets/nfcore_star_salmon/igv/igv.py @@ -0,0 +1,51 @@ +import os +import glob +import sys +import functools +import jsonpickle +from collections import OrderedDict +from Orange.widgets import widget, gui, settings +import Orange.data +from Orange.data.io import FileFormat +from DockerClient import DockerClient +from BwBase import OWBwBWidget, ConnectionDict, BwbGuiElements, getIconName, getJsonName +from PyQt5 import QtWidgets, QtGui + +class OWigv(OWBwBWidget): + name = "igv" + description = "Integrative Genomics Viewer" + priority = 15 + icon = getIconName(__file__,"igv.png") + want_main_area = False + docker_image_name = "biodepot/igv" + docker_image_tag = "2.9.2__ubuntu_20.04__4b93171f" + inputs = [("inputFile",str,"handleInputsinputFile"),("trigger",str,"handleInputstrigger")] + pset=functools.partial(settings.Setting,schema_only=True) + runMode=pset(0) + exportGraphics=pset(False) + runTriggers=pset([]) + triggerReady=pset({}) + inputConnectionsStore=pset({}) + optionsChecked=pset({}) + inputFile=pset([]) + genome=pset("hg38") + batch=pset(None) + autoDetermineRegions=pset(True) + def __init__(self): + super().__init__(self.docker_image_name, self.docker_image_tag) + with open(getJsonName(__file__,"igv")) as f: + self.data=jsonpickle.decode(f.read()) + f.close() + self.initVolumes() + self.inputConnections = ConnectionDict(self.inputConnectionsStore) + self.drawGUI() + def handleInputsinputFile(self, value, *args): + if args and len(args) > 0: + self.handleInputs("inputFile", value, args[0][0], test=args[0][3]) + else: + self.handleInputs("inputFile", value, None, False) + def handleInputstrigger(self, value, *args): + if args and len(args) > 0: + self.handleInputs("trigger", value, args[0][0], test=args[0][3]) + else: + self.handleInputs("inputFile", value, None, False) diff --git a/nfcore_star_salmon/widgets/nfcore_star_salmon/igv/igv.states b/nfcore_star_salmon/widgets/nfcore_star_salmon/igv/igv.states new file mode 100644 index 00000000..456f4b2e --- /dev/null +++ b/nfcore_star_salmon/widgets/nfcore_star_salmon/igv/igv.states @@ -0,0 +1 @@ +{"addBuildDate": [true, true], "autoMap": [true, true], "buildCommand": [true, ""], "command": [true, " start-igv.sh "], "description": [[null, null], [true, "description:"], [true, "Integrative Genomics Viewer"]], "docker_image_name": [[null, null], [true, "docker_image_name:"], [true, "biodepot/igv"]], "docker_image_tag": [[null, null], [true, "docker_image_tag:"], [true, "2.9.2__ubuntu_20.04__4b93171f"]], "icon": [[null, null], [true, "icon:"], [true, ""]], "inputs": [[[[null, null], [true, "Name"], [true, "inputFile"]], [[true, false], [true, "callback"], [false, ""]], [[true, 0, ["str", "dict", "Orange.data.Table"]], [true, "Type:"]]], [[[null, null], [true, "Name"], [true, "trigger"]], [[true, false], [true, "callback"], [false, ""]], [[true, 0, ["str", "dict", "Orange.data.Table"]], [true, "Type:"]]]], "outputs": null, "parameters": [[[[null, null], [true, "Name"], [true, "inputFile"]], [[true, 2, ["str", "file", "file list", "directory", "directory list", "bool", "bool list", "text list", "int", "int list", "double", "double list", "patternQuery"]], [true, "Type:"]], [[true, false], [true, "flag"], [false, ""]], [true, true], [[true, false], [true, "env"], [false, ""]], [[true, true], [true, "label"], [true, "Input file"]], [[true, false], [true, "default"], [false, ""]], [[true, false], [true, "group"], [false, ""]], [true, false]], [[[null, null], [true, "Name"], [true, "genome"]], [[true, 0, ["str", "file", "file list", "directory", "directory list", "bool", "bool list", "text list", "int", "int list", "double", "double list", "patternQuery"]], [true, "Type:"]], [[true, true], [true, "flag"], [true, "-g "]], [true, false], [[true, false], [true, "env"], [false, ""]], [[true, true], [true, "label"], [true, "Genome ID"]], [[true, true], [true, "default"], [true, "hg38"]], [[true, false], [true, "group"], [false, ""]], [true, true]], [[[null, null], [true, "Name"], [true, "batch"]], [[true, 1, ["str", "file", "file list", "directory", "directory list", "bool", "bool list", "text list", "int", "int list", "double", "double list", "patternQuery"]], [true, "Type:"]], [[true, true], [true, "flag"], [true, "--batch "]], [true, false], [[true, false], [true, "env"], [false, ""]], [[true, true], [true, "label"], [true, "Path to batch command file"]], [[true, false], [true, "default"], [false, ""]], [[true, false], [true, "group"], [false, ""]], [true, true]], [[[null, null], [true, "Name"], [true, "autoDetermineRegions"]], [[true, 5, ["str", "file", "file list", "directory", "directory list", "bool", "bool list", "text list", "int", "int list", "double", "double list", "patternQuery"]], [true, "Type:"]], [[true, false], [true, "flag"], [false, ""]], [true, false], [[true, true], [true, "env"], [true, "autoDetermineRegions"]], [[true, true], [true, "label"], [true, "Auto-determine regions of interest (.maf or .vcf only)"]], [[true, true], [true, "default"], [true, "True"]], [[true, false], [true, "group"], [false, ""]], [true, true]]], "priority": [[null, null], [true, "priority:"], [true, "15"]], "name": "igv", "runDockerMap": [true, false]} \ No newline at end of file diff --git a/nfcore_star_salmon/widgets/nfcore_star_salmon/salmon/Dockerfiles/Dockerfile b/nfcore_star_salmon/widgets/nfcore_star_salmon/salmon/Dockerfiles/Dockerfile new file mode 100644 index 00000000..01bb11fa --- /dev/null +++ b/nfcore_star_salmon/widgets/nfcore_star_salmon/salmon/Dockerfiles/Dockerfile @@ -0,0 +1,18 @@ +ARG VERSION="1.10.1" +From debian:bookworm-slim as builder +ENV DEBIAN_FRONTEND=noninteractive +ARG VERSION +RUN apt-get update && apt-get install -y build-essential g++ libbz2-dev libz-dev curl libboost-all-dev liblzma-dev ca-certificates zlib1g-dev libcurl4-openssl-dev curl unzip autoconf apt-transport-https ca-certificates gnupg software-properties-common wget cmake +RUN curl -L https://github.com/COMBINE-lab/salmon/archive/refs/tags/v${VERSION}.tar.gz | tar -zvxf - +RUN cd salmon-${VERSION} && \ + mkdir build && \ + cd build && \ + cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local/salmon && make && make install +From debian:bookworm-slim +ARG VERSION +ENV DEBIAN_FRONTEND=noninteractive +RUN apt-get update && apt-get install -y libhwloc15 \ + && apt-get autoclean -y \ + && apt-get autoremove -y \ + && rm -rf /var/lib/apt/lists/* +COPY --from=builder /usr/local/salmon/ /usr/local/ diff --git a/nfcore_star_salmon/widgets/nfcore_star_salmon/salmon/icon/salmon.png b/nfcore_star_salmon/widgets/nfcore_star_salmon/salmon/icon/salmon.png new file mode 100644 index 00000000..dc92fc1b Binary files /dev/null and b/nfcore_star_salmon/widgets/nfcore_star_salmon/salmon/icon/salmon.png differ diff --git a/nfcore_star_salmon/widgets/nfcore_star_salmon/salmon/salmon.attrs b/nfcore_star_salmon/widgets/nfcore_star_salmon/salmon/salmon.attrs new file mode 100644 index 00000000..4306c3d1 --- /dev/null +++ b/nfcore_star_salmon/widgets/nfcore_star_salmon/salmon/salmon.attrs @@ -0,0 +1 @@ +{"autoMap": null, "buildCommand": null, "command": null, "description": null, "docker_image_name": null, "docker_image_tag": null, "icon": null, "inputs": null, "name": "salmon", "outputfiles": null, "parameters": null, "priority": null, "volumes": null, "runDockerMap": null, "nextFlowMap": null} \ No newline at end of file diff --git a/nfcore_star_salmon/widgets/nfcore_star_salmon/salmon/salmon.json b/nfcore_star_salmon/widgets/nfcore_star_salmon/salmon/salmon.json new file mode 100644 index 00000000..7f0a6809 --- /dev/null +++ b/nfcore_star_salmon/widgets/nfcore_star_salmon/salmon/salmon.json @@ -0,0 +1 @@ +{"name": "salmon", "description": "salmon", "docker_image_name": "biodepot/salmon", "docker_image_tag": "latest", "priority": "10", "icon": null, "inputs": {"py/reduce": [{"py/type": "collections.OrderedDict"}, {"py/tuple": []}, null, null, {"py/tuple": [{"py/tuple": ["File", {"callback": null, "type": {"py/type": "builtins.str"}}]}]}]}, "outputfiles": {"py/reduce": [{"py/type": "collections.OrderedDict"}, {"py/tuple": []}, null, null, {"py/tuple": [{"py/tuple": ["File", {"default": null, "type": {"py/type": "builtins.str"}}]}]}]}, "volumes": null, "ports": null, "parameters": {"py/reduce": [{"py/type": "collections.OrderedDict"}, {"py/tuple": []}, null, null, {"py/tuple": [{"py/tuple": ["transcriptome", {"flag": "-t ", "label": "Transcriptome", "type": "file"}]}, {"py/tuple": ["alignments", {"flag": "-a ", "label": "Alignments", "type": "file list"}]}, {"py/tuple": ["outputfiles", {"flag": "-o ", "label": "Output files", "type": "file list"}]}]}]}, "command": ["salmon quant"], "autoMap": true, "runDockerMap": null, "nextFlowMap": null, "persistentSettings": "all", "requiredParameters": ["transcriptome", "alignments", "outputfiles"]} \ No newline at end of file diff --git a/nfcore_star_salmon/widgets/nfcore_star_salmon/salmon/salmon.py b/nfcore_star_salmon/widgets/nfcore_star_salmon/salmon/salmon.py new file mode 100644 index 00000000..ced1f759 --- /dev/null +++ b/nfcore_star_salmon/widgets/nfcore_star_salmon/salmon/salmon.py @@ -0,0 +1,51 @@ +import os +import glob +import sys +import functools +import jsonpickle +from collections import OrderedDict +from Orange.widgets import widget, gui, settings +import Orange.data +from Orange.data.io import FileFormat +from DockerClient import DockerClient +from BwBase import OWBwBWidget, ConnectionDict, BwbGuiElements, getIconName, getJsonName +from PyQt5 import QtWidgets, QtGui + +class OWsalmon(OWBwBWidget): + name = "salmon" + description = "salmon" + priority = 10 + icon = getIconName(__file__,"salmon.png") + want_main_area = False + docker_image_name = "biodepot/salmon" + docker_image_tag = "latest" + inputs = [("File",str,"handleInputsFile")] + outputfiles = [("File",str)] + pset=functools.partial(settings.Setting,schema_only=True) + runMode=pset(0) + exportGraphics=pset(False) + runTriggers=pset([]) + triggerReady=pset({}) + inputConnectionsStore=pset({}) + optionsChecked=pset({}) + transcriptome=pset(None) + alignments=pset([]) + outputfiles=pset([]) + def __init__(self): + super().__init__(self.docker_image_name, self.docker_image_tag) + with open(getJsonName(__file__,"salmon")) as f: + self.data=jsonpickle.decode(f.read()) + f.close() + self.initVolumes() + self.inputConnections = ConnectionDict(self.inputConnectionsStore) + self.drawGUI() + def handleInputsFile(self, value, *args): + if args and len(args) > 0: + self.handleInputs("File", value, args[0][0], test=args[0][3]) + else: + self.handleInputs("inputFile", value, None, False) + def handleOutputs(self): + outputValue=None + if hasattr(self,"File"): + outputValue=getattr(self,"File") + self.send("File", outputValue) diff --git a/nfcore_star_salmon/widgets/nfcore_star_salmon/salmon/salmon.states b/nfcore_star_salmon/widgets/nfcore_star_salmon/salmon/salmon.states new file mode 100644 index 00000000..331177a7 --- /dev/null +++ b/nfcore_star_salmon/widgets/nfcore_star_salmon/salmon/salmon.states @@ -0,0 +1 @@ +{"addBuildDate": [true, true], "autoMap": [true, true], "buildCommand": [true, ""], "command": [true, "salmon quant"], "description": [[null, null], [true, "description:"], [true, "salmon"]], "docker_image_name": [[null, null], [true, "docker_image_name:"], [true, "biodepot/salmon"]], "docker_image_tag": [[null, null], [true, "docker_image_tag:"], [true, "latest"]], "icon": [[null, null], [true, "icon:"], [true, ""]], "inputs": [[[[null, null], [true, "Name"], [true, "File"]], [[true, false], [true, "callback"], [false, ""]], [[true, 0, ["str", "dict", "Orange.data.Table"]], [true, "Type:"]]]], "outputfiles": [[[[null, null], [true, "Name"], [true, "File"]], [[true, false], [true, "Default value"], [false, ""]], [[true, 0, ["str", "dict", "Orange.data.Table"]], [true, "Type:"]]]], "parameters": [[[[null, null], [true, "Name"], [true, "transcriptome"]], [[true, 1, ["str", "file", "file list", "directory", "directory list", "bool", "bool list", "text list", "int", "int list", "double", "double list", "patternQuery"]], [true, "Type:"]], [[true, true], [true, "flag"], [true, "-t "]], [true, false], [[true, false], [true, "env"], [false, ""]], [[true, true], [true, "label"], [true, "Transcriptome"]], [[true, false], [true, "default"], [false, ""]], [[true, false], [true, "group"], [false, ""]], [true, false]], [[[null, null], [true, "Name"], [true, "alignments"]], [[true, 2, ["str", "file", "file list", "directory", "directory list", "bool", "bool list", "text list", "int", "int list", "double", "double list", "patternQuery"]], [true, "Type:"]], [[true, true], [true, "flag"], [true, "-a "]], [true, false], [[true, false], [true, "env"], [false, ""]], [[true, true], [true, "label"], [true, "Alignments"]], [[true, false], [true, "default"], [false, ""]], [[true, false], [true, "group"], [false, ""]], [true, false]], [[[null, null], [true, "Name"], [true, "outputfiles"]], [[true, 2, ["str", "file", "file list", "directory", "directory list", "bool", "bool list", "text list", "int", "int list", "double", "double list", "patternQuery"]], [true, "Type:"]], [[true, true], [true, "flag"], [true, "-o "]], [true, false], [[true, false], [true, "env"], [false, ""]], [[true, true], [true, "label"], [true, "Output files"]], [[true, false], [true, "default"], [false, ""]], [[true, false], [true, "group"], [false, ""]], [true, false]]], "priority": [[null, null], [true, "priority:"], [true, "10"]], "runDockerMap": [true, false], "nextFlowMap": [true, false], "name": "salmon"} \ No newline at end of file diff --git a/nfcore_star_salmon/widgets/nfcore_star_salmon/starAlign/Dockerfiles/Dockerfile b/nfcore_star_salmon/widgets/nfcore_star_salmon/starAlign/Dockerfiles/Dockerfile new file mode 100644 index 00000000..53fa66af --- /dev/null +++ b/nfcore_star_salmon/widgets/nfcore_star_salmon/starAlign/Dockerfiles/Dockerfile @@ -0,0 +1,19 @@ +ARG VERSION="2.7.10b" +From debian:bookworm-slim as builder +ENV DEBIAN_FRONTEND=noninteractive +ARG VERSION +RUN apt-get update && apt-get install -y build-essential g++ libbz2-dev libz-dev curl xxd +RUN curl -L https://github.com/alexdobin/STAR/archive/refs/tags/${VERSION}.tar.gz | tar -zvxf - +RUN cd STAR*/source && make clean && make CXXFLAGS_SIMD='-march=armv8.5-a+simd' STARstatic +#new STAR binary in source directory +From debian:bookworm-slim +ARG VERSION +ENV DEBIAN_FRONTEND=noninteractive +RUN apt-get update && apt-get install -y gzip bzip2 \ + && apt-get autoclean -y \ + && apt-get autoremove -y \ + && rm -rf /var/lib/apt/lists/* +COPY --from=builder /STAR*/source/STAR /usr/local/bin/STAR +COPY runstar.sh /usr/local/bin/runstar.sh +ENV PATH="$PATH:/usr/local/bin" +LABEL "tag1"="$VERSION" diff --git a/nfcore_star_salmon/widgets/nfcore_star_salmon/starAlign/Dockerfiles/runstar.sh b/nfcore_star_salmon/widgets/nfcore_star_salmon/starAlign/Dockerfiles/runstar.sh new file mode 100755 index 00000000..24e7127c --- /dev/null +++ b/nfcore_star_salmon/widgets/nfcore_star_salmon/starAlign/Dockerfiles/runstar.sh @@ -0,0 +1,190 @@ +#!/bin/bash + +#This wrapper around STAR does 3 things +#1 Append the outputDirectory to the outputPrefix - STAR only provides for a prefix but it is necessary to monge the directory path - so the form asks for the path separately +#2 Rearrange the fastq files for paired ends - STAR recognizes paired end reads by having 2 tokens after the readFilesIn flag. If there are multiple pairs, then the tokens are files joined by commas. If there are multiple single end reads then there is one token joined by commas +#3 Schedule multiple samples. While multiple files are possible for STAR - these are aggregated into one set of Counts. For multiple samples we need to run STAR separately. The MULTISAMPLE flag indicates that the multiple files should be parsed as multiple samples. Multiple files can also be part of a sample if they are separated by columns + +#make sure everything gets killed upon exit +trap "exit" INT TERM +trap "kill 0" EXIT + +function makeOutFileNamePrefix() +{ + if [[ -z ${outputDirectory} && -z ${outputPrefix} ]]; then + outFileStr="" + elif [[ -z ${outputDirectory} ]]; then + outFileNamePrefix="${outputPrefix}" + outFileStr="--outFileNamePrefix ${outFileNamePrefix} " + else + outFileNamePrefix="${outputDirectory}/${outputPrefix}" + outFileStr="--outFileNamePrefix ${outFileNamePrefix} " + fi +} + +function findOutputSubDir() +{ + local fullFile=$1 + #echo 'name for modification is ' $1 + #if it is comma separated get first element + + firstFile=$(echo $1 | cut -d "," -f1) + #echo 'first file is ' $firstFile + + #keep characters to right of last slash to get outputDir + outputSubDir="${firstFile##*/}" + + #remove .gz if there + if [[ ${outputSubDir: -3} == '.gz' ]]; then + outputSubDir="${outputSubDir%.*}" + fi + #remove .fq or fastq if there + if [[ ${outputSubDir: -3} == '.fq' ]]; then + outputSubDir="${outputSubDir%.*}" + elif [[ ${outputSubDir: -6} == '.fastq' ]]; then + outputSubDir="${outputSubDir%.*}" + fi + #if paired end remove the _/.R1/2 _/.1/2 + if [[ -z "${APELIST}" && -z "${SPELIST}" ]]; then + #single end + echo 'single-end files do not look for R1/R1 1/2 endings' + else + if [[ ${outputSubDir: -3} == '_R1' ]] || [[ ${outputSubDir: -3} == '_R2' ]]; then + outputSubDir="${outputSubDir%_*}" + elif [[ ${outputSubDir: -3} == '.R1' ]] || [[ ${outputSubDir: -3} == '.R2' ]]; then + outputSubDir="${outputSubDir%.*}" + elif [[ ${outputSubDir: -2} == '_1' ]] || [[ ${outputSubDir: -3} == '_2' ]]; then + outputSubDir="${outputSubDir%_*}" + elif [[ ${outputSubDir: -2} == '.1' ]] || [[ ${outputSubDir: -3} == '.2' ]]; then + outputSubDir="${outputSubDir%.*}" + fi + fi + #add existing prefix if there is a prefix + if [[ -z ${outFileNamePrefix} ]]; then + return + else + outputSubDir="${outFileNamePrefix}${outputSubDir}/" + fi +} + + +#wrapper for STAR to handle multiple paired end files +makefilestr () +{ + if [[ -z "${APELIST}" && -z "${SPELIST}" ]]; then + filestr=$(IFS=$','; echo "${files[*]}") + elif [ -z "${APELIST}" ]; then + #sequential list #put commas in inputfiles + R1files=(${files[@]:0:$(( nFiles / 2 ))}) + R2files=(${files[@]:$(( nFiles / 2 ))}) + filestr=$(IFS=$','; echo "${R1files[*]}")' '$( IFS=$','; echo "${R2files[*]}") + else + R1str="" + R2str="" + for ((i = 0 ; i < nFiles/2 ; i++ )); do + R1files+=(${files[i*2]}) + R2files+=(${files[i*2+1]}) + R1str+=${files[i*2]}, + R2str+=${files[i*2+1]}, + done + filestr+=${R1str::-1}' '${R2str::-1} + fi + cmdStr=${baseCmd}${outFileStr}$( IFS=' '; echo "${cmd[*]}" )' '${filestr}' '${remainingFlagsStr} +} + +##Main routine starts here +#globals +outFileStr="" +baseCmd='STAR --runMode alignReads ' +cmdStr="" +cmd=(${cmdStr}) +remainingFlagsStr="" +remainingFlags=() +R1Files=() +R2Files=() +files=() +filestr="" +#save args +args=( "${@}" ) + +#will be of the form --prevFlags prevflag --inputfiles file1.. fileN --nextFlag nextflag + +#APELIST SPELIST are two env variables that are passed to indicate alternating aR1 aR2 bR1 bR2 or serial aR1 aR1 bR2 bR2 list of pairs of files +#If MULTISAMPLE is not selected the lists will be converted to STAR's native format which is two tokens consisting of commas separating R1 files followed by a second token of commas separating R2 files i.e. aR1,bR1 aR2,bR2 +#If neither APELIST or SPELIST are set and MULTISAMPLE is not set then the command is passed through as is - this allows for users to enter the files using the native STAR format if they so desire +#MULTISAMPLE indicates the number of samples involved +#If MULTISAMPLE is set the tokens are reordered depending on whether APELIST or SPELIST are set and pairs sent to individual STAR align commands +#If MULTISAMPLE is set and neither APELIST or SPELIST are set then tokens are sent to individual STAR align commands one at a time (single-end files) +#NOTE that tokens can still be comma joined lists of files + +makeOutFileNamePrefix + +#gather the input files +foundFiles='False' +while [ $# -gt 0 ]; do + arg=$1 + if [ ${foundFiles} = 'False' ]; then + #we are not in the section with the input files + cmd+=(${arg}) + if [ ${arg} = '--readFilesIn' ]; then + foundFiles='True' + fi + shift + else + #we are parsing now parsing filenames until we hit a flag + if [ ${arg:0:1} = '-' ]; then + #found flag -no longer parsing filenames + #process the foundfiles + remainingFlagsStr="$*" + remainingFlags=( "$@" ) + break + else + files+=(${arg}) + shift + fi + fi +done +#check if there is one file +nFiles=${#files[@]} +echo "number of files is ${nFiles}" +if [ ${nFiles} -le 1 ]; then + cmdStr="${baseCmd}$outFileStr"$( IFS=' '; echo "${args[*]}" ) + echo "${cmdStr}" + eval "${cmdStr}" + exit 0 +fi +#makefilestr is run here because it also creates the R1files and R2files array +makefilestr +if [[ -z "${MULTISAMPLE}" ]]; then + echo 'single sample' + echo "${cmdStr}" + eval "${cmdStr}" + exit 0 +else + #find and remove outFileNamePrefix from the command line + #Now find if we are dealing with paired ends + if [[ -z "${APELIST}" && -z "${SPELIST}" ]]; then + #single ends - feed files one at a time + for file in "${files[@]}"; do + echo "working on single-end $file" + findOutputSubDir $file + echo "mkdir -p $outputSubDir" + mkdir -p "${outputSubDir}" + echo "${baseCmd} --outFileNamePrefix $outputSubDir ""$( IFS=' '; echo "${cmd[*]}" )" "$file ${remainingFlags[@]}" + eval "${baseCmd} --outFileNamePrefix $outputSubDir ""$( IFS=' '; echo "${cmd[*]}" )" "$file ${remainingFlags[@]}" + done + else + echo "working on paired ends" + i=0 + for R1file in "${R1files[@]}"; do + echo "$R1file" + R2file=${R2files[i]} + findOutputSubDir $R1file + echo "mkdir -p $outputSubDir" + mkdir -p "${outputSubDir}" + echo "${baseCmd} --outFileNamePrefix $outputSubDir ""$( IFS=' '; echo "${cmd[*]}" )" "$R1file $R2file ${remainingFlags[@]}" + eval "${baseCmd} --outFileNamePrefix $outputSubDir ""$( IFS=' '; echo "${cmd[*]}" )" "$R1file $R2file ${remainingFlags[@]}" + i=$((i + 1)) + done + fi +fi diff --git a/nfcore_star_salmon/widgets/nfcore_star_salmon/starAlign/icon/staralign.png b/nfcore_star_salmon/widgets/nfcore_star_salmon/starAlign/icon/staralign.png new file mode 100644 index 00000000..92e3b22d Binary files /dev/null and b/nfcore_star_salmon/widgets/nfcore_star_salmon/starAlign/icon/staralign.png differ diff --git a/nfcore_star_salmon/widgets/nfcore_star_salmon/starAlign/starAlign.attrs b/nfcore_star_salmon/widgets/nfcore_star_salmon/starAlign/starAlign.attrs new file mode 100644 index 00000000..43b50fc2 --- /dev/null +++ b/nfcore_star_salmon/widgets/nfcore_star_salmon/starAlign/starAlign.attrs @@ -0,0 +1 @@ +{"autoMap": null, "buildCommand": null, "command": null, "description": null, "docker_image_name": null, "docker_image_tag": null, "icon": null, "inputs": null, "name": "generic185", "outputs": null, "parameters": null, "priority": null, "volumes": null} \ No newline at end of file diff --git a/nfcore_star_salmon/widgets/nfcore_star_salmon/starAlign/starAlign.json b/nfcore_star_salmon/widgets/nfcore_star_salmon/starAlign/starAlign.json new file mode 100644 index 00000000..b4aa9a6d --- /dev/null +++ b/nfcore_star_salmon/widgets/nfcore_star_salmon/starAlign/starAlign.json @@ -0,0 +1 @@ +{"requiredParameters":["readFilesIn","outputDir","genomeDir"],"description":"Star aligner alignment module","icon":"/data/staralign.png","ports":null,"docker_image_name":"biodepot/star","outputs":{"py/reduce":[{"py/type":"collections.OrderedDict"},{"py/tuple":[]},null,null,{"py/tuple":[{"py/tuple":["outputDir",{"type":{"py/type":"__builtin__.str"},"default":"/data"}]},{"py/tuple":["genomeDir",{"default":"/data/GenomeDir","type":{"py/type":"__builtin__.str"}}]}]}]},"priority":"12","command":["runstar.sh"],"inputs":{"py/reduce":[{"py/type":"collections.OrderedDict"},{"py/tuple":[]},null,null,{"py/tuple":[{"py/tuple":["trigger",{"callback":null,"type":{"py/type":"__builtin__.str"}}]},{"py/tuple":["outputDir",{"callback":null,"type":{"py/type":"__builtin__.str"}}]},{"py/tuple":["genomeDir",{"callback":null,"type":{"py/type":"__builtin__.str"}}]}]}]},"name":"starAlign","docker_image_tag":"2.6.0c__bookworm-slim__84ff9269__1d8ca5e4__94207031","persistentSettings":"all","volumes":null,"autoMap":true,"parameters":{"py/reduce":[{"py/type":"collections.OrderedDict"},{"py/tuple":[]},null,null,{"py/tuple":[{"py/tuple":["readFilesIn",{"flag":"--readFilesIn","type":"file list","label":"readFilesIn"}]},{"py/tuple":["apelist",{"env":"APELIST","flag":null,"label":"Alternating paired-end files (a_R1 a_R2 b_R1 b_R2...) ","type":"bool"}]},{"py/tuple":["spelist",{"env":"SPELIST","flag":null,"label":"Sequential paired-end files (a_R1 b_R1... a_R2 b_R2...)","type":"bool"}]},{"py/tuple":["parametersFiles",{"flag":"--parametersFiles","label":"Parameters file","type":"file"}]},{"py/tuple":["sysShell",{"default":"/bin/sh","flag":"--sysShell","label":"System shell","type":"str"}]},{"py/tuple":["runThreadN",{"flag":"--runThreadN","default":1,"type":"int","label":"Number of threads"}]},{"py/tuple":["runRNGseed",{"flag":"--runRNGseed","default":777,"label":"runRNGseed","type":"int"}]},{"py/tuple":["readFilesCommand",{"label":"readFilesCommand","type":"str","flag":"--readFilesCommand"}]},{"py/tuple":["readMapNumber",{"flag":"--readMapNumber","default":-1,"type":"int","label":"readMapNumber"}]},{"py/tuple":["readMatesLengthsIn",{"flag":"--readMatesLengthsIn","default":"NotEqual","type":"str","label":"readMatesLengthsIn"}]},{"py/tuple":["readNameSeparator",{"default":"/","flag":"--readNameSeparator","label":"readNameSeparator","type":"str"}]},{"py/tuple":["clip3pNbases",{"flag":"--clip3pNbases","default":["0"],"type":"int list","label":"clip3pNbases"}]},{"py/tuple":["clip5pNbases",{"type":"int list","label":"clip5pNbases","flag":"--clip5pNbases","default":["0"]}]},{"py/tuple":["clip3pAdapterSeq",{"flag":"--clip3pAdapterSeq","type":"text list","label":"clip3pAdapterSeq"}]},{"py/tuple":["clip3pAdapterMMp",{"default":["0.1"],"flag":"--clip3pAdapterMMp","type":"double list","label":"clip3pAdapterMMp"}]},{"py/tuple":["clip3pAfterAdapterNbases",{"type":"int list","label":"clip3pAfterAdapterNbases","default":["0"],"flag":"--clip3pAfterAdapterNbases"}]},{"py/tuple":["limitIObufferSize",{"default":150000000,"flag":"--limitIObufferSize","label":"limitIObufferSize","type":"int"}]},{"py/tuple":["limitOutSAMoneReadBytes",{"label":"limitOutSAMoneReadBytes","type":"int","flag":"--limitOutSAMoneReadBytes","default":100000}]},{"py/tuple":["outputDir",{"env":"outputDirectory","default":"","flag":null,"type":"directory","label":"Output directory"}]},{"py/tuple":["outTmpDir",{"type":"directory","label":"outTmpDir","flag":"--outTmpDir","default":""}]},{"py/tuple":["outStd",{"label":"outStd","type":"str","default":"Log","flag":"--outStd"}]},{"py/tuple":["outReadsUnmapped",{"label":"outReadsUnmapped","type":"str","default":"","flag":"--outReadsUnmapped"}]},{"py/tuple":["outMultimapperOrder",{"default":"Old_2.4","flag":"--outMultimapperOrder","label":"outMultimapperOrder","type":"str"}]},{"py/tuple":["outSAMtype",{"default":"SAM","flag":"--outSAMtype","type":"str","label":"outSAMtype"}]},{"py/tuple":["outSAMmode",{"default":"Full","flag":"--outSAMmode","label":"outSAMmode","type":"str"}]},{"py/tuple":["outSAMstrandField",{"type":"str","label":"outSAMstrandField","flag":"--outSAMstrandField"}]},{"py/tuple":["outSAMattributes",{"default":"Standard","flag":"--outSAMattributes","label":"outSAMattributes","type":"str"}]},{"py/tuple":["outSAMattrIHstart",{"label":"outSAMattrIHstart","type":"int","flag":"--outSAMattrIHstart","default":1}]},{"py/tuple":["outSAMunmapped",{"flag":"--outSAMunmapped","type":"str","label":"outSAMunmapped"}]},{"py/tuple":["outSAMorder",{"label":"outSAMorder","type":"str","default":"Paired","flag":"--outSAMorder"}]},{"py/tuple":["outSAMprimaryFlag",{"flag":"--outSAMprimaryFlag","default":"OneBestScore","type":"str","label":"outSAMprimaryFlag"}]},{"py/tuple":["outSAMreadID",{"type":"str","label":"outSAMreadID","flag":"--outSAMreadID","default":"Standard"}]},{"py/tuple":["outSAMmapqUnique",{"flag":"--outSAMmapqUnique","default":255,"type":"int","label":"outSAMmapqUnique"}]},{"py/tuple":["outSAMflagOR",{"flag":"--outSAMflagOR","default":0,"type":"int","label":"outSAMflagOR"}]},{"py/tuple":["outSAMflagAND",{"label":"outSAMflagAND","type":"int","default":65535,"flag":"--outSAMflagAND"}]},{"py/tuple":["outSAMattrRGline",{"type":"str","label":"outSAMattrRGline","flag":"--outSAMattrRGline"}]},{"py/tuple":["outSAMheaderHD",{"flag":"--outSAMheaderHD","label":"outSAMheaderHD","type":"str"}]},{"py/tuple":["outSAMheaderPG",{"label":"outSAMheaderPG","type":"str","flag":"--outSAMheaderPG"}]},{"py/tuple":["outSAMheaderCommentFile",{"flag":"--outSAMheaderCommentFile","type":"file","label":"outSAMheaderCommentFile"}]},{"py/tuple":["outSAMfilter",{"label":"outSAMfilter","type":"str","flag":"--outSAMfilter"}]},{"py/tuple":["outSAMmultNmax",{"default":-1,"flag":"--outSAMmultNmax","type":"int","label":"outSAMmultNmax"}]},{"py/tuple":["outBAMcompression",{"flag":"--outBAMcompression","default":1,"type":"int","label":"outBAMcompression"}]},{"py/tuple":["outBAMsortingThreadN",{"default":0,"flag":"--outBAMsortingThreadN","label":"outBAMsortingThreadN","type":"int"}]},{"py/tuple":["bamRemoveDuplicatesType",{"flag":"--bamRemoveDuplicatesType","type":"str","label":"bamRemoveDuplicatesType"}]},{"py/tuple":["bamRemoveDuplicatesMate2basesN",{"type":"int","label":"bamRemoveDuplicatesMate2basesN","default":0,"flag":"--bamRemoveDuplicatesMate2basesN"}]},{"py/tuple":["outWigType",{"type":"str","label":"outWigType","default":"","flag":"--outWigType"}]},{"py/tuple":["outWigStrand",{"default":"Stranded","flag":"--outWigStrand","label":"outWigStrand","type":"str"}]},{"py/tuple":["outWigReferencesPrefix",{"flag":"--outWigReferencesPrefix","label":"outWigReferencesPrefix","type":"str"}]},{"py/tuple":["outWigNorm",{"default":"RPM","flag":"--outWigNorm","label":"outWigNorm","type":"str"}]},{"py/tuple":["outFilterType",{"type":"str","label":"outFilterType","default":"Normal","flag":"--outFilterType"}]},{"py/tuple":["outFilterMultimapScoreRange",{"label":"outFilterMultimapScoreRange","type":"int","flag":"--outFilterMultimapScoreRange","default":1}]},{"py/tuple":["outFilterMultimapNmax",{"default":10,"flag":"--outFilterMultimapNmax","label":"outFilterMultimapNmax","type":"int"}]},{"py/tuple":["outFilterMismatchNmax",{"default":10,"flag":"--outFilterMismatchNmax","label":"outFilterMismatchNmax","type":"int"}]},{"py/tuple":["outFilterMismatchNoverLmax ",{"default":0.3,"flag":"--outFilterMismatchNoverLmax ","type":"double","label":"outFilterMismatchNoverLmax "}]},{"py/tuple":["outFilterMismatchNoverReadLmax",{"type":"double","label":"outFilterMismatchNoverReadLmax","flag":"--outFilterMismatchNoverReadLmax","default":1}]},{"py/tuple":["outFilterScoreMin",{"label":"outFilterScoreMin","type":"int","default":0,"flag":"--outFilterScoreMin"}]},{"py/tuple":["outFilterScoreMinOverLread",{"type":"double","label":"outFilterScoreMinOverLread","default":0.66,"flag":"--outFilterScoreMinOverLread"}]},{"py/tuple":["outFilterMatchNmin",{"label":"outFilterMatchNmin","type":"int","flag":"--outFilterMatchNmin","default":0}]},{"py/tuple":["outFilterMatchNminOverLread",{"flag":"--outFilterMatchNminOverLread","default":0.66,"type":"double","label":"outFilterMatchNminOverLread"}]},{"py/tuple":["outFilterIntronMotifs",{"flag":"--outFilterIntronMotifs","label":"outFilterIntronMotifs","type":"str"}]},{"py/tuple":["scoreGap",{"default":0,"flag":"--scoreGap","label":"scoreGap","type":"int"}]},{"py/tuple":["scoreGapNoncan",{"type":"int","label":"scoreGapNoncan","default":-8,"flag":"--scoreGapNoncan"}]},{"py/tuple":["scoreGapGCAG",{"default":-4,"flag":"--scoreGapGCAG","type":"int","label":"scoreGapGCAG"}]},{"py/tuple":["scoreGapATAC",{"label":"scoreGapATAC","type":"int","default":-8,"flag":"--scoreGapATAC"}]},{"py/tuple":["scoreGenomicLengthLog2scale",{"type":"double","label":"scoreGenomicLengthLog2scale","flag":"--scoreGenomicLengthLog2scale","default":-0.25}]},{"py/tuple":["scoreDelOpen",{"flag":"--scoreDelOpen","default":-2,"label":"scoreDelOpen","type":"int"}]},{"py/tuple":["scoreDelBase",{"flag":"--scoreDelBase","default":-2,"type":"int","label":"scoreDelBase"}]},{"py/tuple":["scoreInsOpen",{"type":"int","label":"scoreInsOpen","flag":"--scoreInsOpen","default":-2}]},{"py/tuple":["scoreInsBase",{"type":"int","label":"scoreInsBase","flag":"--scoreInsBase","default":-2}]},{"py/tuple":["scoreStitchSJshift",{"flag":"--scoreStitchSJshift","default":1,"type":"int","label":"scoreStitchSJshift"}]},{"py/tuple":["seedSearchStartLmax",{"label":"seedSearchStartLmax","type":"int","flag":"--seedSearchStartLmax","default":50}]},{"py/tuple":["seedSearchStartLmaxOverLread",{"default":1,"flag":"--seedSearchStartLmaxOverLread","label":"seedSearchStartLmaxOverLread","type":"double"}]},{"py/tuple":["seedSearchLmax",{"label":"seedSearchLmax","type":"int","flag":"--seedSearchLmax","default":0}]},{"py/tuple":["seedMultimapNmax",{"default":10000,"flag":"--seedMultimapNmax","label":"seedMultimapNmax","type":"int"}]},{"py/tuple":["seedPerReadNmax",{"label":"seedPerReadNmax","type":"int","flag":"--seedPerReadNmax","default":1000}]},{"py/tuple":["seedPerWindowNmax",{"flag":"--seedPerWindowNmax","default":50,"label":"seedPerWindowNmax","type":"int"}]},{"py/tuple":["seedNoneLociPerWindow",{"default":10,"flag":"--seedNoneLociPerWindow","type":"int","label":"seedNoneLociPerWindow"}]},{"py/tuple":["alignIntronMin",{"type":"int","label":"alignIntronMin","default":21,"flag":"--alignIntronMin"}]},{"py/tuple":["alignIntronMax",{"flag":"--alignIntronMax","default":0,"label":"alignIntronMax","type":"int"}]},{"py/tuple":["alignMatesGapMax",{"flag":"--alignMatesGapMax","default":0,"type":"int","label":"alignMatesGapMax"}]},{"py/tuple":["alignSJoverhangMin",{"label":"alignSJoverhangMin","type":"int","default":5,"flag":"--alignSJoverhangMin"}]},{"py/tuple":["alignSJstitchMismatchNmax",{"label":"alignSJstitchMismatchNmax ","type":"int","flag":"--alignSJstitchMismatchNmax "}]},{"py/tuple":["alignSJDBoverhangMin",{"type":"int","label":"alignSJDBoverhangMin","flag":"--alignSJDBoverhangMin","default":3}]},{"py/tuple":["alignSplicedMateMapLmin",{"flag":"--alignSplicedMateMapLmin","default":0,"label":"alignSplicedMateMapLmin","type":"int"}]},{"py/tuple":["alignSplicedMateMapLminOverLmate",{"flag":"--alignSplicedMateMapLminOverLmate","default":0.66,"label":"alignSplicedMateMapLminOverLmate","type":"double"}]},{"py/tuple":["alignWindowsPerReadNmax",{"default":10000,"flag":"--alignWindowsPerReadNmax","type":"int","label":"alignWindowsPerReadNmax"}]},{"py/tuple":["alignTranscriptsPerWindowNmax",{"label":"alignTranscriptsPerWindowNmax","type":"int","flag":"--alignTranscriptsPerWindowNmax","default":100}]},{"py/tuple":["alignTranscriptsPerReadNmax",{"label":"alignTranscriptsPerReadNmax","type":"int","default":10000,"flag":"--alignTranscriptsPerReadNmax"}]},{"py/tuple":["alignEndsType",{"label":"alignEndsType","type":"str","flag":"--alignEndsType","default":"Local"}]},{"py/tuple":["alignEndsProtrude",{"flag":"--alignEndsProtrude","default":["0","ConcordantPair"],"label":"alignEndsProtrude","type":"text list"}]},{"py/tuple":["alignSoftClipAtReferenceEnds",{"flag":"--alignSoftClipAtReferenceEnds","default":"Yes","label":"alignSoftClipAtReferenceEnds","type":"str"}]},{"py/tuple":["winAnchorMultimapNmax",{"label":"winAnchorMultimapNmax","type":"int","flag":"--winAnchorMultimapNmax","default":50}]},{"py/tuple":["winBinNbits",{"label":"winBinNbits","type":"int","default":16,"flag":"--winBinNbits"}]},{"py/tuple":["winAnchorDistNbins",{"label":"winAnchorDistNbins","type":"int","default":9,"flag":"--winAnchorDistNbins"}]},{"py/tuple":["winFlankNbins",{"type":"int","label":"winFlankNbins","flag":"--winFlankNbins","default":4}]},{"py/tuple":["winReadCoverageRelativeMin",{"flag":"--winReadCoverageRelativeMin","default":0.5,"type":"double","label":"winReadCoverageRelativeMin"}]},{"py/tuple":["winReadCoverageBasesMin",{"type":"int","label":"winReadCoverageBasesMin","default":0,"flag":"--winReadCoverageBasesMin"}]},{"py/tuple":["chimOutType",{"label":"chimOutType","type":"str","default":"SeparateSAMold","flag":"--chimOutType"}]},{"py/tuple":["chimSegmentMin",{"default":0,"flag":"--chimSegmentMin","label":"chimSegmentMin","type":"int"}]},{"py/tuple":["chimScoreMin",{"default":0,"flag":"--chimScoreMin","type":"int","label":"chimScoreMin"}]},{"py/tuple":["chimScoreDropMax",{"default":20,"flag":"--chimScoreDropMax","type":"int","label":"chimScoreDropMax"}]},{"py/tuple":["chimScoreSeparation",{"type":"int","label":"chimScoreSeparation","flag":"--chimScoreSeparation","default":10}]},{"py/tuple":["chimScoreJunctionNonGTAG",{"label":"chimScoreJunctionNonGTAG","type":"int","flag":"--chimScoreJunctionNonGTAG","default":-1}]},{"py/tuple":["chimJunctionOverhangMin",{"label":"chimJunctionOverhangMin","type":"int","default":20,"flag":"--chimJunctionOverhangMin"}]},{"py/tuple":["chimSegmentReadGapMax",{"default":0,"flag":"--chimSegmentReadGapMax","label":"chimSegmentReadGapMax","type":"int"}]},{"py/tuple":["chimFilter",{"type":"str","label":"chimFilter","default":"banGenomicN","flag":"--chimFilter"}]},{"py/tuple":["quantMode",{"type":"str","label":"quantMode","flag":"--quantMode"}]},{"py/tuple":["quantTranscriptomeBAMcompression",{"type":"int","label":"quantTranscriptomeBAMcompression","flag":"--quantTranscriptomeBAMcompression","default":1}]},{"py/tuple":["quantTranscriptomeBan",{"default":"IndelSoftclipSingleend","flag":"--quantTranscriptomeBan","label":"quantTranscriptomeBan","type":"str"}]},{"py/tuple":["twopassMode",{"type":"str","label":"twopassMode","default":"","flag":"--twopassMode"}]},{"py/tuple":["twopass1readsN ",{"type":"int","label":"twopass1readsN ","default":-1,"flag":"--twopass1readsN "}]},{"py/tuple":["genomeDir",{"label":"genomeDir","type":"directory","default":"/data/GenomeDir","flag":"--genomeDir"}]},{"py/tuple":["genomeLoad",{"default":"NoSharedMemory","flag":"--genomeLoad","label":"genomeLoad","type":"str"}]},{"py/tuple":["outputFilePrefix",{"flag":null,"type":"str","label":"outputFilePrefix","env":"outputPrefix"}]},{"py/tuple":["multipleSample",{"flag":null,"label":"Multiple samples","type":"bool","env":"MULTISAMPLE"}]}]}]}} \ No newline at end of file diff --git a/nfcore_star_salmon/widgets/nfcore_star_salmon/starAlign/starAlign.py b/nfcore_star_salmon/widgets/nfcore_star_salmon/starAlign/starAlign.py new file mode 100644 index 00000000..821c9348 --- /dev/null +++ b/nfcore_star_salmon/widgets/nfcore_star_salmon/starAlign/starAlign.py @@ -0,0 +1,187 @@ +import os +import glob +import sys +import functools +import jsonpickle +from collections import OrderedDict +from Orange.widgets import widget, gui, settings +import Orange.data +from Orange.data.io import FileFormat +from DockerClient import DockerClient +from BwBase import OWBwBWidget, ConnectionDict, BwbGuiElements, getIconName, getJsonName +from PyQt5 import QtWidgets, QtGui + + +class OWstarAlign(OWBwBWidget): + name = "starAlign" + description = "Star aligner alignment module" + priority = 12 + icon = getIconName(__file__, "staralign.png") + want_main_area = False + docker_image_name = "biodepot/star" + docker_image_tag = "2.6.0c__bookworm-slim__84ff9269__1d8ca5e4__94207031" + inputs = [ + ("trigger", str, "handleInputstrigger"), + ("outputDir", str, "handleInputsoutputDir"), + ("genomeDir", str, "handleInputsgenomeDir"), + ] + outputs = [("outputDir", str), ("genomeDir", str)] + pset = functools.partial(settings.Setting, schema_only=True) + runMode = pset(0) + exportGraphics = pset(False) + runTriggers = pset([]) + triggerReady = pset({}) + inputConnectionsStore = pset({}) + optionsChecked = pset({}) + readFilesIn = pset([]) + apelist = pset(False) + spelist = pset(False) + parametersFiles = pset(None) + sysShell = pset("/bin/sh") + runThreadN = pset(1) + runRNGseed = pset(777) + readFilesCommand = pset(None) + readMapNumber = pset(-1) + readMatesLengthsIn = pset("NotEqual") + readNameSeparator = pset("/") + clip3pNbases = pset(["0"]) + clip5pNbases = pset(["0"]) + clip3pAdapterSeq = pset([]) + clip3pAdapterMMp = pset(["0.1"]) + clip3pAfterAdapterNbases = pset(["0"]) + limitIObufferSize = pset(150000000) + limitOutSAMoneReadBytes = pset(100000) + outputDir = pset("") + outTmpDir = pset("") + outStd = pset("Log") + outReadsUnmapped = pset("") + outMultimapperOrder = pset("Old_2.4") + outSAMtype = pset("SAM") + outSAMmode = pset("Full") + outSAMstrandField = pset(None) + outSAMattributes = pset("Standard") + outSAMattrIHstart = pset(1) + outSAMunmapped = pset(None) + outSAMorder = pset("Paired") + outSAMprimaryFlag = pset("OneBestScore") + outSAMreadID = pset("Standard") + outSAMmapqUnique = pset(255) + outSAMflagOR = pset(0) + outSAMflagAND = pset(65535) + outSAMattrRGline = pset(None) + outSAMheaderHD = pset(None) + outSAMheaderPG = pset(None) + outSAMheaderCommentFile = pset(None) + outSAMfilter = pset(None) + outSAMmultNmax = pset(-1) + outBAMcompression = pset(1) + outBAMsortingThreadN = pset(0) + bamRemoveDuplicatesType = pset(None) + bamRemoveDuplicatesMate2basesN = pset(0) + outWigType = pset("") + outWigStrand = pset("Stranded") + outWigReferencesPrefix = pset(None) + outWigNorm = pset("RPM") + outFilterType = pset("Normal") + outFilterMultimapScoreRange = pset(1) + outFilterMultimapNmax = pset(10) + outFilterMismatchNmax = pset(10) + outFilterMismatchNoverLmax = pset(0.3) + outFilterMismatchNoverReadLmax = pset(1.0) + outFilterScoreMin = pset(0) + outFilterScoreMinOverLread = pset(0.66) + outFilterMatchNmin = pset(0) + outFilterMatchNminOverLread = pset(0.66) + outFilterIntronMotifs = pset(None) + scoreGap = pset(0) + scoreGapNoncan = pset(-8) + scoreGapGCAG = pset(-4) + scoreGapATAC = pset(-8) + scoreGenomicLengthLog2scale = pset(-0.25) + scoreDelOpen = pset(-2) + scoreDelBase = pset(-2) + scoreInsOpen = pset(-2) + scoreInsBase = pset(-2) + scoreStitchSJshift = pset(1) + seedSearchStartLmax = pset(50) + seedSearchStartLmaxOverLread = pset(1.0) + seedSearchLmax = pset(0) + seedMultimapNmax = pset(10000) + seedPerReadNmax = pset(1000) + seedPerWindowNmax = pset(50) + seedNoneLociPerWindow = pset(10) + alignIntronMin = pset(21) + alignIntronMax = pset(0) + alignMatesGapMax = pset(0) + alignSJoverhangMin = pset(5) + alignSJstitchMismatchNmax = pset(None) + alignSJDBoverhangMin = pset(3) + alignSplicedMateMapLmin = pset(0) + alignSplicedMateMapLminOverLmate = pset(0.66) + alignWindowsPerReadNmax = pset(10000) + alignTranscriptsPerWindowNmax = pset(100) + alignTranscriptsPerReadNmax = pset(10000) + alignEndsType = pset("Local") + alignEndsProtrude = pset(["0", "ConcordantPair"]) + alignSoftClipAtReferenceEnds = pset("Yes") + winAnchorMultimapNmax = pset(50) + winBinNbits = pset(16) + winAnchorDistNbins = pset(9) + winFlankNbins = pset(4) + winReadCoverageRelativeMin = pset(0.5) + winReadCoverageBasesMin = pset(0) + chimOutType = pset("SeparateSAMold") + chimSegmentMin = pset(0) + chimScoreMin = pset(0) + chimScoreDropMax = pset(20) + chimScoreSeparation = pset(10) + chimScoreJunctionNonGTAG = pset(-1) + chimJunctionOverhangMin = pset(20) + chimSegmentReadGapMax = pset(0) + chimFilter = pset("banGenomicN") + quantMode = pset(None) + quantTranscriptomeBAMcompression = pset(1) + quantTranscriptomeBan = pset("IndelSoftclipSingleend") + twopassMode = pset("") + twopass1readsN = pset(-1) + genomeDir = pset("/data/GenomeDir") + genomeLoad = pset("NoSharedMemory") + outputFilePrefix = pset(None) + multipleSample = pset(False) + + def __init__(self): + super().__init__(self.docker_image_name, self.docker_image_tag) + with open(getJsonName(__file__, "starAlign")) as f: + self.data = jsonpickle.decode(f.read()) + f.close() + self.initVolumes() + self.inputConnections = ConnectionDict(self.inputConnectionsStore) + self.drawGUI() + + def handleInputstrigger(self, value, *args): + if args and len(args) > 0: + self.handleInputs("trigger", value, args[0][0], test=args[0][3]) + else: + self.handleInputs("inputFile", value, None) + + def handleInputsoutputDir(self, value, *args): + if args and len(args) > 0: + self.handleInputs("outputDir", value, args[0][0], test=args[0][3]) + else: + self.handleInputs("inputFile", value, None) + + def handleInputsgenomeDir(self, value, *args): + if args and len(args) > 0: + self.handleInputs("genomeDir", value, args[0][0], test=args[0][3]) + else: + self.handleInputs("inputFile", value, None) + + def handleOutputs(self): + outputValue = "/data" + if hasattr(self, "outputDir"): + outputValue = getattr(self, "outputDir") + self.send("outputDir", outputValue) + outputValue = "/data/GenomeDir" + if hasattr(self, "genomeDir"): + outputValue = getattr(self, "genomeDir") + self.send("genomeDir", outputValue) diff --git a/nfcore_star_salmon/widgets/nfcore_star_salmon/starAlign/starAlign.states b/nfcore_star_salmon/widgets/nfcore_star_salmon/starAlign/starAlign.states new file mode 100644 index 00000000..ce5365d5 --- /dev/null +++ b/nfcore_star_salmon/widgets/nfcore_star_salmon/starAlign/starAlign.states @@ -0,0 +1 @@ +{"name":[[null,null],[true,"name:"],[true,"Star Align"]],"buildCommand":[true,""],"docker_image_tag":[[null,null],[true,"docker_image_tag:"],[true,"2.6.0c__bookworm-slim__84ff9269__1d8ca5e4__94207031"]],"autoMap":[true,true],"parameters":[[[[null,null],[true,"Name"],[true,"readFilesIn"]],[[true,2,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--readFilesIn"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"readFilesIn"]],[[true,false],[true,"default"],[false,""]],[true,false]],[[[null,null],[true,"Name"],[true,"apelist"]],[[true,5,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,false],[true,"flag"],[false,""]],[true,false],[[true,true],[true,"env"],[true,"APELIST"]],[[true,true],[true,"label"],[true,"Alternating paired-end files (a_R1 a_R2 b_R1 b_R2...) "]],[[true,false],[true,"default"],[false,""]],[true,true]],[[[null,null],[true,"Name"],[true,"spelist"]],[[true,5,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,false],[true,"flag"],[false,""]],[true,false],[[true,true],[true,"env"],[true,"SPELIST"]],[[true,true],[true,"label"],[true,"Sequential paired-end files (a_R1 b_R1... a_R2 b_R2...)"]],[[true,false],[true,"default"],[false,""]],[true,true]],[[[null,null],[true,"Name"],[true,"parametersFiles"]],[[true,1,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--parametersFiles"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"Parameters file"]],[[true,false],[true,"default"],[false,""]],[true,true]],[[[null,null],[true,"Name"],[true,"sysShell"]],[[true,0,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--sysShell"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"System shell"]],[[true,true],[true,"default"],[true,"/bin/sh"]],[true,true]],[[[null,null],[true,"Name"],[true,"runThreadN"]],[[true,9,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--runThreadN"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"Number of threads"]],[[true,true],[true,"default"],[true,"1"]],[true,true]],[[[null,null],[true,"Name"],[true,"runRNGseed"]],[[true,9,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--runRNGseed"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"runRNGseed"]],[[true,true],[true,"default"],[true,"777"]],[true,true]],[[[null,null],[true,"Name"],[true,"readFilesCommand"]],[[true,0,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--readFilesCommand"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"readFilesCommand"]],[[true,false],[true,"default"],[false,""]],[true,true]],[[[null,null],[true,"Name"],[true,"readMapNumber"]],[[true,9,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--readMapNumber"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"readMapNumber"]],[[true,true],[true,"default"],[true,"-1"]],[true,true]],[[[null,null],[true,"Name"],[true,"readMatesLengthsIn"]],[[true,0,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--readMatesLengthsIn"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"readMatesLengthsIn"]],[[true,true],[true,"default"],[true,"NotEqual"]],[true,true]],[[[null,null],[true,"Name"],[true,"readNameSeparator"]],[[true,0,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--readNameSeparator"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"readNameSeparator"]],[[true,true],[true,"default"],[true,"/"]],[true,true]],[[[null,null],[true,"Name"],[true,"clip3pNbases"]],[[true,10,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--clip3pNbases"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"clip3pNbases"]],[[true,true],[true,"default"],[true,"0"]],[true,true]],[[[null,null],[true,"Name"],[true,"clip5pNbases"]],[[true,10,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--clip5pNbases"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"clip5pNbases"]],[[true,true],[true,"default"],[true,"0"]],[true,true]],[[[null,null],[true,"Name"],[true,"clip3pAdapterSeq"]],[[true,8,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--clip3pAdapterSeq"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"clip3pAdapterSeq"]],[[true,false],[true,"default"],[false,""]],[true,true]],[[[null,null],[true,"Name"],[true,"clip3pAdapterMMp"]],[[true,12,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--clip3pAdapterMMp"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"clip3pAdapterMMp"]],[[true,true],[true,"default"],[true,"0.1"]],[true,true]],[[[null,null],[true,"Name"],[true,"clip3pAfterAdapterNbases"]],[[true,10,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--clip3pAfterAdapterNbases"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"clip3pAfterAdapterNbases"]],[[true,true],[true,"default"],[true,"0"]],[true,true]],[[[null,null],[true,"Name"],[true,"clip3pAfterAdapterNbases"]],[[true,10,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--clip3pAfterAdapterNbases"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"clip3pAfterAdapterNbases"]],[[true,true],[true,"default"],[true,"0"]],[true,true]],[[[null,null],[true,"Name"],[true,"limitIObufferSize"]],[[true,9,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--limitIObufferSize"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"limitIObufferSize"]],[[true,true],[true,"default"],[true,"150000000"]],[true,true]],[[[null,null],[true,"Name"],[true,"limitOutSAMoneReadBytes"]],[[true,9,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--limitOutSAMoneReadBytes"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"limitOutSAMoneReadBytes"]],[[true,true],[true,"default"],[true,"100000"]],[true,true]],[[[null,null],[true,"Name"],[true,"outputDir"]],[[true,3,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,false],[true,"flag"],[false,""]],[true,false],[[true,true],[true,"env"],[true,"outputDirectory"]],[[true,true],[true,"label"],[true,"Output directory"]],[[true,true],[true,"default"],[true,""]],[true,false]],[[[null,null],[true,"Name"],[true,"outTmpDir"]],[[true,3,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--outTmpDir"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"outTmpDir"]],[[true,true],[true,"default"],[true,""]],[true,true]],[[[null,null],[true,"Name"],[true,"outStd"]],[[true,0,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--outStd"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"outStd"]],[[true,true],[true,"default"],[true,"Log"]],[true,true]],[[[null,null],[true,"Name"],[true,"outReadsUnmapped"]],[[true,0,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--outReadsUnmapped"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"outReadsUnmapped"]],[[true,true],[true,"default"],[true,""]],[true,true]],[[[null,null],[true,"Name"],[true,"outMultimapperOrder"]],[[true,0,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--outMultimapperOrder"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"outMultimapperOrder"]],[[true,true],[true,"default"],[true,"Old_2.4"]],[true,true]],[[[null,null],[true,"Name"],[true,"outSAMtype"]],[[true,0,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--outSAMtype"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"outSAMtype"]],[[true,true],[true,"default"],[true,"SAM"]],[true,true]],[[[null,null],[true,"Name"],[true,"outSAMmode"]],[[true,0,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--outSAMmode"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"outSAMmode"]],[[true,true],[true,"default"],[true,"Full"]],[true,true]],[[[null,null],[true,"Name"],[true,"outSAMstrandField"]],[[true,0,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--outSAMstrandField"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"outSAMstrandField"]],[[true,false],[true,"default"],[false,""]],[true,true]],[[[null,null],[true,"Name"],[true,"outSAMattributes"]],[[true,0,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--outSAMattributes"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"outSAMattributes"]],[[true,true],[true,"default"],[true,"Standard"]],[true,true]],[[[null,null],[true,"Name"],[true,"outSAMattrIHstart"]],[[true,9,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--outSAMattrIHstart"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"outSAMattrIHstart"]],[[true,true],[true,"default"],[true,"1"]],[true,true]],[[[null,null],[true,"Name"],[true,"outSAMunmapped"]],[[true,0,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--outSAMunmapped"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"outSAMunmapped"]],[[true,false],[true,"default"],[false,""]],[true,true]],[[[null,null],[true,"Name"],[true,"outSAMorder"]],[[true,0,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--outSAMorder"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"outSAMorder"]],[[true,true],[true,"default"],[true,"Paired"]],[true,true]],[[[null,null],[true,"Name"],[true,"outSAMprimaryFlag"]],[[true,0,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--outSAMprimaryFlag"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"outSAMprimaryFlag"]],[[true,true],[true,"default"],[true,"OneBestScore"]],[true,true]],[[[null,null],[true,"Name"],[true,"outSAMreadID"]],[[true,0,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--outSAMreadID"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"outSAMreadID"]],[[true,true],[true,"default"],[true,"Standard"]],[true,true]],[[[null,null],[true,"Name"],[true,"outSAMmapqUnique"]],[[true,9,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--outSAMmapqUnique"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"outSAMmapqUnique"]],[[true,true],[true,"default"],[true,"255"]],[true,true]],[[[null,null],[true,"Name"],[true,"outSAMflagOR"]],[[true,9,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--outSAMflagOR"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"outSAMflagOR"]],[[true,true],[true,"default"],[true,"0"]],[true,true]],[[[null,null],[true,"Name"],[true,"outSAMflagAND"]],[[true,9,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--outSAMflagAND"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"outSAMflagAND"]],[[true,true],[true,"default"],[true,"65535"]],[true,true]],[[[null,null],[true,"Name"],[true,"outSAMattrRGline"]],[[true,0,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--outSAMattrRGline"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"outSAMattrRGline"]],[[true,false],[true,"default"],[false,""]],[true,true]],[[[null,null],[true,"Name"],[true,"outSAMheaderHD"]],[[true,0,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--outSAMheaderHD"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"outSAMheaderHD"]],[[true,false],[true,"default"],[false,""]],[true,true]],[[[null,null],[true,"Name"],[true,"outSAMheaderPG"]],[[true,0,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--outSAMheaderPG"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"outSAMheaderPG"]],[[true,false],[true,"default"],[false,""]],[true,true]],[[[null,null],[true,"Name"],[true,"outSAMheaderCommentFile"]],[[true,1,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--outSAMheaderCommentFile"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"outSAMheaderCommentFile"]],[[true,false],[true,"default"],[false,""]],[true,true]],[[[null,null],[true,"Name"],[true,"outSAMfilter"]],[[true,0,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--outSAMfilter"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"outSAMfilter"]],[[true,false],[true,"default"],[false,""]],[true,true]],[[[null,null],[true,"Name"],[true,"outSAMmultNmax"]],[[true,9,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--outSAMmultNmax"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"outSAMmultNmax"]],[[true,true],[true,"default"],[true,"-1"]],[true,true]],[[[null,null],[true,"Name"],[true,"outBAMcompression"]],[[true,9,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--outBAMcompression"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"outBAMcompression"]],[[true,true],[true,"default"],[true,"1"]],[true,true]],[[[null,null],[true,"Name"],[true,"outBAMsortingThreadN"]],[[true,9,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--outBAMsortingThreadN"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"outBAMsortingThreadN"]],[[true,true],[true,"default"],[true,"0"]],[true,true]],[[[null,null],[true,"Name"],[true,"bamRemoveDuplicatesType"]],[[true,0,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--bamRemoveDuplicatesType"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"bamRemoveDuplicatesType"]],[[true,false],[true,"default"],[false,""]],[true,true]],[[[null,null],[true,"Name"],[true,"bamRemoveDuplicatesMate2basesN"]],[[true,9,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--bamRemoveDuplicatesMate2basesN"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"bamRemoveDuplicatesMate2basesN"]],[[true,true],[true,"default"],[true,"0"]],[true,true]],[[[null,null],[true,"Name"],[true,"outWigType"]],[[true,0,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--outWigType"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"outWigType"]],[[true,true],[true,"default"],[true,""]],[true,true]],[[[null,null],[true,"Name"],[true,"outWigStrand"]],[[true,0,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--outWigStrand"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"outWigStrand"]],[[true,true],[true,"default"],[true,"Stranded"]],[true,true]],[[[null,null],[true,"Name"],[true,"outWigReferencesPrefix"]],[[true,0,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--outWigReferencesPrefix"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"outWigReferencesPrefix"]],[[true,false],[true,"default"],[false,""]],[true,true]],[[[null,null],[true,"Name"],[true,"outWigNorm"]],[[true,0,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--outWigNorm"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"outWigNorm"]],[[true,true],[true,"default"],[true,"RPM"]],[true,true]],[[[null,null],[true,"Name"],[true,"outFilterType"]],[[true,0,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--outFilterType"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"outFilterType"]],[[true,true],[true,"default"],[true,"Normal"]],[true,true]],[[[null,null],[true,"Name"],[true,"outFilterMultimapScoreRange"]],[[true,9,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--outFilterMultimapScoreRange"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"outFilterMultimapScoreRange"]],[[true,true],[true,"default"],[true,"1"]],[true,true]],[[[null,null],[true,"Name"],[true,"outFilterMultimapNmax"]],[[true,9,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--outFilterMultimapNmax"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"outFilterMultimapNmax"]],[[true,true],[true,"default"],[true,"10"]],[true,true]],[[[null,null],[true,"Name"],[true,"outFilterMismatchNmax"]],[[true,9,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--outFilterMismatchNmax"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"outFilterMismatchNmax"]],[[true,true],[true,"default"],[true,"10"]],[true,true]],[[[null,null],[true,"Name"],[true,"outFilterMismatchNoverLmax "]],[[true,11,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--outFilterMismatchNoverLmax "]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"outFilterMismatchNoverLmax "]],[[true,true],[true,"default"],[true,"0.3"]],[true,true]],[[[null,null],[true,"Name"],[true,"outFilterMismatchNoverReadLmax"]],[[true,11,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--outFilterMismatchNoverReadLmax"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"outFilterMismatchNoverReadLmax"]],[[true,true],[true,"default"],[true,"1.0"]],[true,true]],[[[null,null],[true,"Name"],[true,"outFilterScoreMin"]],[[true,9,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--outFilterScoreMin"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"outFilterScoreMin"]],[[true,true],[true,"default"],[true,"0"]],[true,true]],[[[null,null],[true,"Name"],[true,"outFilterScoreMinOverLread"]],[[true,11,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--outFilterScoreMinOverLread"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"outFilterScoreMinOverLread"]],[[true,true],[true,"default"],[true,"0.66"]],[true,true]],[[[null,null],[true,"Name"],[true,"outFilterMatchNmin"]],[[true,9,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--outFilterMatchNmin"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"outFilterMatchNmin"]],[[true,true],[true,"default"],[true,"0"]],[true,true]],[[[null,null],[true,"Name"],[true,"outFilterMatchNminOverLread"]],[[true,11,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--outFilterMatchNminOverLread"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"outFilterMatchNminOverLread"]],[[true,true],[true,"default"],[true,"0.66"]],[true,true]],[[[null,null],[true,"Name"],[true,"outFilterIntronMotifs"]],[[true,0,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--outFilterIntronMotifs"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"outFilterIntronMotifs"]],[[true,false],[true,"default"],[false,""]],[true,true]],[[[null,null],[true,"Name"],[true,"scoreGap"]],[[true,9,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--scoreGap"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"scoreGap"]],[[true,true],[true,"default"],[true,"0"]],[true,true]],[[[null,null],[true,"Name"],[true,"scoreGapNoncan"]],[[true,9,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--scoreGapNoncan"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"scoreGapNoncan"]],[[true,true],[true,"default"],[true,"-8"]],[true,true]],[[[null,null],[true,"Name"],[true,"scoreGapGCAG"]],[[true,9,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--scoreGapGCAG"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"scoreGapGCAG"]],[[true,true],[true,"default"],[true,"-4"]],[true,true]],[[[null,null],[true,"Name"],[true,"scoreGapATAC"]],[[true,9,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--scoreGapATAC"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"scoreGapATAC"]],[[true,true],[true,"default"],[true,"-8"]],[true,true]],[[[null,null],[true,"Name"],[true,"scoreGenomicLengthLog2scale"]],[[true,11,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--scoreGenomicLengthLog2scale"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"scoreGenomicLengthLog2scale"]],[[true,true],[true,"default"],[true,"-0.25"]],[true,true]],[[[null,null],[true,"Name"],[true,"scoreDelOpen"]],[[true,9,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--scoreDelOpen"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"scoreDelOpen"]],[[true,true],[true,"default"],[true,"-2"]],[true,true]],[[[null,null],[true,"Name"],[true,"scoreDelBase"]],[[true,9,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--scoreDelBase"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"scoreDelBase"]],[[true,true],[true,"default"],[true,"-2"]],[true,true]],[[[null,null],[true,"Name"],[true,"scoreInsOpen"]],[[true,9,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--scoreInsOpen"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"scoreInsOpen"]],[[true,true],[true,"default"],[true,"-2"]],[true,true]],[[[null,null],[true,"Name"],[true,"scoreInsBase"]],[[true,9,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--scoreInsBase"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"scoreInsBase"]],[[true,true],[true,"default"],[true,"-2"]],[true,true]],[[[null,null],[true,"Name"],[true,"scoreStitchSJshift"]],[[true,9,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--scoreStitchSJshift"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"scoreStitchSJshift"]],[[true,true],[true,"default"],[true,"1"]],[true,true]],[[[null,null],[true,"Name"],[true,"seedSearchStartLmax"]],[[true,9,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--seedSearchStartLmax"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"seedSearchStartLmax"]],[[true,true],[true,"default"],[true,"50"]],[true,true]],[[[null,null],[true,"Name"],[true,"seedSearchStartLmaxOverLread"]],[[true,11,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--seedSearchStartLmaxOverLread"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"seedSearchStartLmaxOverLread"]],[[true,true],[true,"default"],[true,"1.0"]],[true,true]],[[[null,null],[true,"Name"],[true,"seedSearchLmax"]],[[true,9,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--seedSearchLmax"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"seedSearchLmax"]],[[true,true],[true,"default"],[true,"0"]],[true,true]],[[[null,null],[true,"Name"],[true,"seedMultimapNmax"]],[[true,9,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--seedMultimapNmax"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"seedMultimapNmax"]],[[true,true],[true,"default"],[true,"10000"]],[true,true]],[[[null,null],[true,"Name"],[true,"seedPerReadNmax"]],[[true,9,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--seedPerReadNmax"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"seedPerReadNmax"]],[[true,true],[true,"default"],[true,"1000"]],[true,true]],[[[null,null],[true,"Name"],[true,"seedPerWindowNmax"]],[[true,9,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--seedPerWindowNmax"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"seedPerWindowNmax"]],[[true,true],[true,"default"],[true,"50"]],[true,true]],[[[null,null],[true,"Name"],[true,"seedNoneLociPerWindow"]],[[true,9,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--seedNoneLociPerWindow"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"seedNoneLociPerWindow"]],[[true,true],[true,"default"],[true,"10"]],[true,true]],[[[null,null],[true,"Name"],[true,"alignIntronMin"]],[[true,9,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--alignIntronMin"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"alignIntronMin"]],[[true,true],[true,"default"],[true,"21"]],[true,true]],[[[null,null],[true,"Name"],[true,"alignIntronMax"]],[[true,9,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--alignIntronMax"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"alignIntronMax"]],[[true,true],[true,"default"],[true,"0"]],[true,true]],[[[null,null],[true,"Name"],[true,"alignMatesGapMax"]],[[true,9,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--alignMatesGapMax"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"alignMatesGapMax"]],[[true,true],[true,"default"],[true,"0"]],[true,true]],[[[null,null],[true,"Name"],[true,"alignSJoverhangMin"]],[[true,9,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--alignSJoverhangMin"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"alignSJoverhangMin"]],[[true,true],[true,"default"],[true,"5"]],[true,true]],[[[null,null],[true,"Name"],[true,"alignSJstitchMismatchNmax"]],[[true,9,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--alignSJstitchMismatchNmax "]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"alignSJstitchMismatchNmax "]],[[true,false],[true,"default"],[false,""]],[true,true]],[[[null,null],[true,"Name"],[true,"alignSJDBoverhangMin"]],[[true,9,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--alignSJDBoverhangMin"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"alignSJDBoverhangMin"]],[[true,true],[true,"default"],[true,"3"]],[true,true]],[[[null,null],[true,"Name"],[true,"alignSplicedMateMapLmin"]],[[true,9,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--alignSplicedMateMapLmin"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"alignSplicedMateMapLmin"]],[[true,true],[true,"default"],[true,"0"]],[true,true]],[[[null,null],[true,"Name"],[true,"alignSplicedMateMapLminOverLmate"]],[[true,11,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--alignSplicedMateMapLminOverLmate"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"alignSplicedMateMapLminOverLmate"]],[[true,true],[true,"default"],[true,"0.66"]],[true,true]],[[[null,null],[true,"Name"],[true,"alignWindowsPerReadNmax"]],[[true,9,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--alignWindowsPerReadNmax"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"alignWindowsPerReadNmax"]],[[true,true],[true,"default"],[true,"10000"]],[true,true]],[[[null,null],[true,"Name"],[true,"alignTranscriptsPerWindowNmax"]],[[true,9,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--alignTranscriptsPerWindowNmax"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"alignTranscriptsPerWindowNmax"]],[[true,true],[true,"default"],[true,"100"]],[true,true]],[[[null,null],[true,"Name"],[true,"alignTranscriptsPerReadNmax"]],[[true,9,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--alignTranscriptsPerReadNmax"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"alignTranscriptsPerReadNmax"]],[[true,true],[true,"default"],[true,"10000"]],[true,true]],[[[null,null],[true,"Name"],[true,"alignEndsType"]],[[true,0,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--alignEndsType"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"alignEndsType"]],[[true,true],[true,"default"],[true,"Local"]],[true,true]],[[[null,null],[true,"Name"],[true,"alignEndsProtrude"]],[[true,8,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--alignEndsProtrude"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"alignEndsProtrude"]],[[true,true],[true,"default"],[true,"0,ConcordantPair"]],[true,true]],[[[null,null],[true,"Name"],[true,"alignSoftClipAtReferenceEnds"]],[[true,0,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--alignSoftClipAtReferenceEnds"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"alignSoftClipAtReferenceEnds"]],[[true,true],[true,"default"],[true,"Yes"]],[true,true]],[[[null,null],[true,"Name"],[true,"winAnchorMultimapNmax"]],[[true,9,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--winAnchorMultimapNmax"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"winAnchorMultimapNmax"]],[[true,true],[true,"default"],[true,"50"]],[true,true]],[[[null,null],[true,"Name"],[true,"winBinNbits"]],[[true,9,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--winBinNbits"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"winBinNbits"]],[[true,true],[true,"default"],[true,"16"]],[true,true]],[[[null,null],[true,"Name"],[true,"winAnchorDistNbins"]],[[true,9,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--winAnchorDistNbins"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"winAnchorDistNbins"]],[[true,true],[true,"default"],[true,"9"]],[true,true]],[[[null,null],[true,"Name"],[true,"winFlankNbins"]],[[true,9,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--winFlankNbins"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"winFlankNbins"]],[[true,true],[true,"default"],[true,"4"]],[true,true]],[[[null,null],[true,"Name"],[true,"winReadCoverageRelativeMin"]],[[true,11,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--winReadCoverageRelativeMin"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"winReadCoverageRelativeMin"]],[[true,true],[true,"default"],[true,"0.5"]],[true,true]],[[[null,null],[true,"Name"],[true,"winReadCoverageBasesMin"]],[[true,9,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--winReadCoverageBasesMin"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"winReadCoverageBasesMin"]],[[true,true],[true,"default"],[true,"0"]],[true,true]],[[[null,null],[true,"Name"],[true,"chimOutType"]],[[true,0,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--chimOutType"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"chimOutType"]],[[true,true],[true,"default"],[true,"SeparateSAMold"]],[true,true]],[[[null,null],[true,"Name"],[true,"chimSegmentMin"]],[[true,9,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--chimSegmentMin"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"chimSegmentMin"]],[[true,true],[true,"default"],[true,"0"]],[true,true]],[[[null,null],[true,"Name"],[true,"chimScoreMin"]],[[true,9,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--chimScoreMin"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"chimScoreMin"]],[[true,true],[true,"default"],[true,"0"]],[true,true]],[[[null,null],[true,"Name"],[true,"chimScoreDropMax"]],[[true,9,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--chimScoreDropMax"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"chimScoreDropMax"]],[[true,true],[true,"default"],[true,"20"]],[true,true]],[[[null,null],[true,"Name"],[true,"chimScoreSeparation"]],[[true,9,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--chimScoreSeparation"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"chimScoreSeparation"]],[[true,true],[true,"default"],[true,"10"]],[true,true]],[[[null,null],[true,"Name"],[true,"chimScoreJunctionNonGTAG"]],[[true,9,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--chimScoreJunctionNonGTAG"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"chimScoreJunctionNonGTAG"]],[[true,true],[true,"default"],[true,"-1"]],[true,true]],[[[null,null],[true,"Name"],[true,"chimJunctionOverhangMin"]],[[true,9,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--chimJunctionOverhangMin"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"chimJunctionOverhangMin"]],[[true,true],[true,"default"],[true,"20"]],[true,true]],[[[null,null],[true,"Name"],[true,"chimSegmentReadGapMax"]],[[true,9,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--chimSegmentReadGapMax"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"chimSegmentReadGapMax"]],[[true,true],[true,"default"],[true,"0"]],[true,true]],[[[null,null],[true,"Name"],[true,"chimFilter"]],[[true,0,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--chimFilter"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"chimFilter"]],[[true,true],[true,"default"],[true,"banGenomicN"]],[true,true]],[[[null,null],[true,"Name"],[true,"quantMode"]],[[true,0,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--quantMode"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"quantMode"]],[[true,false],[true,"default"],[false,""]],[true,true]],[[[null,null],[true,"Name"],[true,"quantTranscriptomeBAMcompression"]],[[true,9,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--quantTranscriptomeBAMcompression"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"quantTranscriptomeBAMcompression"]],[[true,true],[true,"default"],[true,"1"]],[true,true]],[[[null,null],[true,"Name"],[true,"quantTranscriptomeBan"]],[[true,0,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--quantTranscriptomeBan"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"quantTranscriptomeBan"]],[[true,true],[true,"default"],[true,"IndelSoftclipSingleend"]],[true,true]],[[[null,null],[true,"Name"],[true,"twopassMode"]],[[true,0,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--twopassMode"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"twopassMode"]],[[true,true],[true,"default"],[true,""]],[true,true]],[[[null,null],[true,"Name"],[true,"twopass1readsN "]],[[true,9,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--twopass1readsN "]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"twopass1readsN "]],[[true,true],[true,"default"],[true,"-1"]],[true,true]],[[[null,null],[true,"Name"],[true,"genomeDir"]],[[true,3,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--genomeDir"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"genomeDir"]],[[true,true],[true,"default"],[true,"/data/GenomeDir"]],[true,false]],[[[null,null],[true,"Name"],[true,"genomeLoad"]],[[true,0,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--genomeLoad"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"genomeLoad"]],[[true,true],[true,"default"],[true,"NoSharedMemory"]],[true,true]],[[[null,null],[true,"Name"],[true,"outputFilePrefix"]],[[true,0,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,false],[true,"flag"],[false,""]],[true,false],[[true,true],[true,"env"],[true,"outputPrefix"]],[[true,true],[true,"label"],[true,"outputFilePrefix"]],[[true,false],[true,"default"],[false,""]],[true,true]],[[[null,null],[true,"Name"],[true,"multipleSample"]],[[true,5,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,false],[true,"flag"],[false,""]],[true,false],[[true,true],[true,"env"],[true,"MULTISAMPLE"]],[[true,true],[true,"label"],[true,"Multiple samples"]],[[true,false],[true,"default"],[false,""]],[true,true]]],"description":[[null,null],[true,"description:"],[true,"Star aligner alignment module"]],"addBuildDate":[true,true],"icon":[[null,null],[true,"icon:"],[true,"/data/staralign.png"]],"docker_image_name":[[null,null],[true,"docker_image_name:"],[true,"biodepot/star"]],"priority":[[null,null],[true,"priority:"],[true,"12"]],"outputs":[[[[null,null],[true,"Name"],[true,"outputDir"]],[[true,true],[true,"Default value"],[true,"/data"]],[[true,0,["str","Orange.data.Table"]],[true,"Type:"]]],[[[null,null],[true,"Name"],[true,"genomeDir"]],[[true,true],[true,"Default value"],[true,"/data/GenomeDir"]],[[true,0,["str","Orange.data.Table"]],[true,"Type:"]]]],"command":[true,"runstar.sh"],"inputs":[[[[null,null],[true,"Name"],[true,"trigger"]],[[true,false],[true,"callback"],[false,""]],[[true,0,["str","Orange.data.Table"]],[true,"Type:"]]],[[[null,null],[true,"Name"],[true,"outputDir"]],[[true,false],[true,"callback"],[false,""]],[[true,0,["str","Orange.data.Table"]],[true,"Type:"]]],[[[null,null],[true,"Name"],[true,"genomeDir"]],[[true,false],[true,"callback"],[false,""]],[[true,0,["str","Orange.data.Table"]],[true,"Type:"]]]]} \ No newline at end of file diff --git a/nfcore_star_salmon/widgets/nfcore_star_salmon/starIndex/Dockerfiles/Dockerfile b/nfcore_star_salmon/widgets/nfcore_star_salmon/starIndex/Dockerfiles/Dockerfile new file mode 100644 index 00000000..6d8d78a4 --- /dev/null +++ b/nfcore_star_salmon/widgets/nfcore_star_salmon/starIndex/Dockerfiles/Dockerfile @@ -0,0 +1,19 @@ +ARG VERSION="2.6.0c" +From debian:bookworm-slim as builder +ENV DEBIAN_FRONTEND=noninteractive +ARG VERSION +RUN apt-get update && apt-get install -y build-essential g++ libbz2-dev libz-dev curl +RUN curl -L https://github.com/alexdobin/STAR/archive/refs/tags/${VERSION}.tar.gz | tar -zvxf - +RUN cd STAR*/source && make clean && make -j 8 STARstatic +#new STAR binary in source directory +From debian:bookworm-slim +ARG VERSION +ENV DEBIAN_FRONTEND=noninteractive +RUN apt-get update && apt-get install -y gzip bzip2 \ + && apt-get autoclean -y \ + && apt-get autoremove -y \ + && rm -rf /var/lib/apt/lists/* +COPY --from=builder /STAR*/source/STAR /usr/local/bin/STAR +COPY runstar.sh /usr/local/bin/runstar.sh +ENV PATH="$PATH:/usr/local/bin" +LABEL "tag1"="$VERSION" diff --git a/nfcore_star_salmon/widgets/nfcore_star_salmon/starIndex/Dockerfiles/runstar.sh b/nfcore_star_salmon/widgets/nfcore_star_salmon/starIndex/Dockerfiles/runstar.sh new file mode 100755 index 00000000..24e7127c --- /dev/null +++ b/nfcore_star_salmon/widgets/nfcore_star_salmon/starIndex/Dockerfiles/runstar.sh @@ -0,0 +1,190 @@ +#!/bin/bash + +#This wrapper around STAR does 3 things +#1 Append the outputDirectory to the outputPrefix - STAR only provides for a prefix but it is necessary to monge the directory path - so the form asks for the path separately +#2 Rearrange the fastq files for paired ends - STAR recognizes paired end reads by having 2 tokens after the readFilesIn flag. If there are multiple pairs, then the tokens are files joined by commas. If there are multiple single end reads then there is one token joined by commas +#3 Schedule multiple samples. While multiple files are possible for STAR - these are aggregated into one set of Counts. For multiple samples we need to run STAR separately. The MULTISAMPLE flag indicates that the multiple files should be parsed as multiple samples. Multiple files can also be part of a sample if they are separated by columns + +#make sure everything gets killed upon exit +trap "exit" INT TERM +trap "kill 0" EXIT + +function makeOutFileNamePrefix() +{ + if [[ -z ${outputDirectory} && -z ${outputPrefix} ]]; then + outFileStr="" + elif [[ -z ${outputDirectory} ]]; then + outFileNamePrefix="${outputPrefix}" + outFileStr="--outFileNamePrefix ${outFileNamePrefix} " + else + outFileNamePrefix="${outputDirectory}/${outputPrefix}" + outFileStr="--outFileNamePrefix ${outFileNamePrefix} " + fi +} + +function findOutputSubDir() +{ + local fullFile=$1 + #echo 'name for modification is ' $1 + #if it is comma separated get first element + + firstFile=$(echo $1 | cut -d "," -f1) + #echo 'first file is ' $firstFile + + #keep characters to right of last slash to get outputDir + outputSubDir="${firstFile##*/}" + + #remove .gz if there + if [[ ${outputSubDir: -3} == '.gz' ]]; then + outputSubDir="${outputSubDir%.*}" + fi + #remove .fq or fastq if there + if [[ ${outputSubDir: -3} == '.fq' ]]; then + outputSubDir="${outputSubDir%.*}" + elif [[ ${outputSubDir: -6} == '.fastq' ]]; then + outputSubDir="${outputSubDir%.*}" + fi + #if paired end remove the _/.R1/2 _/.1/2 + if [[ -z "${APELIST}" && -z "${SPELIST}" ]]; then + #single end + echo 'single-end files do not look for R1/R1 1/2 endings' + else + if [[ ${outputSubDir: -3} == '_R1' ]] || [[ ${outputSubDir: -3} == '_R2' ]]; then + outputSubDir="${outputSubDir%_*}" + elif [[ ${outputSubDir: -3} == '.R1' ]] || [[ ${outputSubDir: -3} == '.R2' ]]; then + outputSubDir="${outputSubDir%.*}" + elif [[ ${outputSubDir: -2} == '_1' ]] || [[ ${outputSubDir: -3} == '_2' ]]; then + outputSubDir="${outputSubDir%_*}" + elif [[ ${outputSubDir: -2} == '.1' ]] || [[ ${outputSubDir: -3} == '.2' ]]; then + outputSubDir="${outputSubDir%.*}" + fi + fi + #add existing prefix if there is a prefix + if [[ -z ${outFileNamePrefix} ]]; then + return + else + outputSubDir="${outFileNamePrefix}${outputSubDir}/" + fi +} + + +#wrapper for STAR to handle multiple paired end files +makefilestr () +{ + if [[ -z "${APELIST}" && -z "${SPELIST}" ]]; then + filestr=$(IFS=$','; echo "${files[*]}") + elif [ -z "${APELIST}" ]; then + #sequential list #put commas in inputfiles + R1files=(${files[@]:0:$(( nFiles / 2 ))}) + R2files=(${files[@]:$(( nFiles / 2 ))}) + filestr=$(IFS=$','; echo "${R1files[*]}")' '$( IFS=$','; echo "${R2files[*]}") + else + R1str="" + R2str="" + for ((i = 0 ; i < nFiles/2 ; i++ )); do + R1files+=(${files[i*2]}) + R2files+=(${files[i*2+1]}) + R1str+=${files[i*2]}, + R2str+=${files[i*2+1]}, + done + filestr+=${R1str::-1}' '${R2str::-1} + fi + cmdStr=${baseCmd}${outFileStr}$( IFS=' '; echo "${cmd[*]}" )' '${filestr}' '${remainingFlagsStr} +} + +##Main routine starts here +#globals +outFileStr="" +baseCmd='STAR --runMode alignReads ' +cmdStr="" +cmd=(${cmdStr}) +remainingFlagsStr="" +remainingFlags=() +R1Files=() +R2Files=() +files=() +filestr="" +#save args +args=( "${@}" ) + +#will be of the form --prevFlags prevflag --inputfiles file1.. fileN --nextFlag nextflag + +#APELIST SPELIST are two env variables that are passed to indicate alternating aR1 aR2 bR1 bR2 or serial aR1 aR1 bR2 bR2 list of pairs of files +#If MULTISAMPLE is not selected the lists will be converted to STAR's native format which is two tokens consisting of commas separating R1 files followed by a second token of commas separating R2 files i.e. aR1,bR1 aR2,bR2 +#If neither APELIST or SPELIST are set and MULTISAMPLE is not set then the command is passed through as is - this allows for users to enter the files using the native STAR format if they so desire +#MULTISAMPLE indicates the number of samples involved +#If MULTISAMPLE is set the tokens are reordered depending on whether APELIST or SPELIST are set and pairs sent to individual STAR align commands +#If MULTISAMPLE is set and neither APELIST or SPELIST are set then tokens are sent to individual STAR align commands one at a time (single-end files) +#NOTE that tokens can still be comma joined lists of files + +makeOutFileNamePrefix + +#gather the input files +foundFiles='False' +while [ $# -gt 0 ]; do + arg=$1 + if [ ${foundFiles} = 'False' ]; then + #we are not in the section with the input files + cmd+=(${arg}) + if [ ${arg} = '--readFilesIn' ]; then + foundFiles='True' + fi + shift + else + #we are parsing now parsing filenames until we hit a flag + if [ ${arg:0:1} = '-' ]; then + #found flag -no longer parsing filenames + #process the foundfiles + remainingFlagsStr="$*" + remainingFlags=( "$@" ) + break + else + files+=(${arg}) + shift + fi + fi +done +#check if there is one file +nFiles=${#files[@]} +echo "number of files is ${nFiles}" +if [ ${nFiles} -le 1 ]; then + cmdStr="${baseCmd}$outFileStr"$( IFS=' '; echo "${args[*]}" ) + echo "${cmdStr}" + eval "${cmdStr}" + exit 0 +fi +#makefilestr is run here because it also creates the R1files and R2files array +makefilestr +if [[ -z "${MULTISAMPLE}" ]]; then + echo 'single sample' + echo "${cmdStr}" + eval "${cmdStr}" + exit 0 +else + #find and remove outFileNamePrefix from the command line + #Now find if we are dealing with paired ends + if [[ -z "${APELIST}" && -z "${SPELIST}" ]]; then + #single ends - feed files one at a time + for file in "${files[@]}"; do + echo "working on single-end $file" + findOutputSubDir $file + echo "mkdir -p $outputSubDir" + mkdir -p "${outputSubDir}" + echo "${baseCmd} --outFileNamePrefix $outputSubDir ""$( IFS=' '; echo "${cmd[*]}" )" "$file ${remainingFlags[@]}" + eval "${baseCmd} --outFileNamePrefix $outputSubDir ""$( IFS=' '; echo "${cmd[*]}" )" "$file ${remainingFlags[@]}" + done + else + echo "working on paired ends" + i=0 + for R1file in "${R1files[@]}"; do + echo "$R1file" + R2file=${R2files[i]} + findOutputSubDir $R1file + echo "mkdir -p $outputSubDir" + mkdir -p "${outputSubDir}" + echo "${baseCmd} --outFileNamePrefix $outputSubDir ""$( IFS=' '; echo "${cmd[*]}" )" "$R1file $R2file ${remainingFlags[@]}" + eval "${baseCmd} --outFileNamePrefix $outputSubDir ""$( IFS=' '; echo "${cmd[*]}" )" "$R1file $R2file ${remainingFlags[@]}" + i=$((i + 1)) + done + fi +fi diff --git a/nfcore_star_salmon/widgets/nfcore_star_salmon/starIndex/icon/starIndex.png b/nfcore_star_salmon/widgets/nfcore_star_salmon/starIndex/icon/starIndex.png new file mode 100644 index 00000000..54ba5fdb Binary files /dev/null and b/nfcore_star_salmon/widgets/nfcore_star_salmon/starIndex/icon/starIndex.png differ diff --git a/nfcore_star_salmon/widgets/nfcore_star_salmon/starIndex/starIndex.attrs b/nfcore_star_salmon/widgets/nfcore_star_salmon/starIndex/starIndex.attrs new file mode 100644 index 00000000..43b50fc2 --- /dev/null +++ b/nfcore_star_salmon/widgets/nfcore_star_salmon/starIndex/starIndex.attrs @@ -0,0 +1 @@ +{"autoMap": null, "buildCommand": null, "command": null, "description": null, "docker_image_name": null, "docker_image_tag": null, "icon": null, "inputs": null, "name": "generic185", "outputs": null, "parameters": null, "priority": null, "volumes": null} \ No newline at end of file diff --git a/nfcore_star_salmon/widgets/nfcore_star_salmon/starIndex/starIndex.json b/nfcore_star_salmon/widgets/nfcore_star_salmon/starIndex/starIndex.json new file mode 100644 index 00000000..038d983b --- /dev/null +++ b/nfcore_star_salmon/widgets/nfcore_star_salmon/starIndex/starIndex.json @@ -0,0 +1 @@ +{"persistentSettings":"all","parameters":{"py/reduce":[{"py/type":"collections.OrderedDict"},{"py/tuple":[]},null,null,{"py/tuple":[{"py/tuple":["rmode",{"default":"genomeGenerate","flag":"--runMode","type":"str","label":"runMode"}]},{"py/tuple":["genomeDir",{"flag":"--genomeDir","label":"genomeDir","type":"directory"}]},{"py/tuple":["genomeFastaFiles",{"flag":"--genomeFastaFiles","type":"file list","label":"genomeFastaFiles"}]},{"py/tuple":["genomeChrBinNbits",{"default":"18","flag":"--genomeChrBinNbits","label":"genomeChrBinNbits","type":"str"}]},{"py/tuple":["genomeSAindexNbases",{"label":"genomeSAindexNbases","type":"int","flag":"--genomeSAindexNbases","default":14}]},{"py/tuple":["genomeSAsparseD",{"flag":"--genomeSAsparseD","default":1,"label":"genomeSAsparseD","type":"int"}]},{"py/tuple":["genomeSuffixLengthMax",{"label":"genomeSuffixLengthMax","type":"int","default":-1,"flag":"--genomeSuffixLengthMax"}]},{"py/tuple":["runThreadN",{"type":"int","label":"runThreadN","default":1,"flag":"--runThreadN"}]},{"py/tuple":["sjdbGTFfile",{"flag":"--sjdbGTFfile","label":"sjdbGTFfile","type":"file"}]},{"py/tuple":["sjdbFileChrStartEnd ",{"flag":"--sjdbFileChrStartEnd","type":"file list","label":"sjdbFileChrStartEnd"}]},{"py/tuple":["sjdbGTFchrPrefix ",{"label":"sjdbGTFchrPrefix ","type":"str","default":"chr","flag":"--sjdbGTFchrPrefix "}]},{"py/tuple":["sjdbGTFfeatureExon",{"type":"str","label":"sjdbGTFfeatureExon","flag":"--sjdbGTFfeatureExon","default":"exon"}]},{"py/tuple":["sjdbGTFtagExonParentTranscript",{"type":"str","label":"sjdbGTFtagExonParentTranscript","default":"transcript_id","flag":"--sjdbGTFtagExonParentTranscript"}]},{"py/tuple":["sjdbGTFtagExonParentGene",{"label":"sjdbGTFtagExonParentGene","type":"str","flag":"--sjdbGTFtagExonParentGenet","default":"gene_id"}]},{"py/tuple":["sjdbOverhang",{"label":"sjdbOverhang","type":"int","default":100,"flag":"--sjdbOverhang"}]},{"py/tuple":["sjdbScore",{"default":2,"flag":"--sjdbScore","type":"int","label":"sjdbScore"}]},{"py/tuple":["sjdbInsertSave ",{"label":"sjdbInsertSave","type":"str","flag":"--sjdbInsertSave ","default":"Basic"}]}]}]},"volumes":null,"autoMap":true,"name":"starIndex","docker_image_tag":"2.6.0c__bookworm-slim__84ff9269__1d8ca5e4__94207031","command":["STAR"],"inputs":{"py/reduce":[{"py/type":"collections.OrderedDict"},{"py/tuple":[]},null,null,{"py/tuple":[{"py/tuple":["Trigger",{"callback":null,"type":{"py/type":"__builtin__.str"}}]}]}]},"ports":null,"outputs":{"py/reduce":[{"py/type":"collections.OrderedDict"},{"py/tuple":[]},null,null,{"py/tuple":[{"py/tuple":["genomeDir",{"type":{"py/type":"__builtin__.str"},"default":null}]}]}]},"priority":"11","docker_image_name":"biodepot/star","requiredParameters":["rmode","genomeDir","genomeFastaFiles"],"description":"Construct indices for STAR aligner ","icon":"/data/starIndex.png"} \ No newline at end of file diff --git a/nfcore_star_salmon/widgets/nfcore_star_salmon/starIndex/starIndex.py b/nfcore_star_salmon/widgets/nfcore_star_salmon/starIndex/starIndex.py new file mode 100644 index 00000000..5c07e9e1 --- /dev/null +++ b/nfcore_star_salmon/widgets/nfcore_star_salmon/starIndex/starIndex.py @@ -0,0 +1,69 @@ +import os +import glob +import sys +import functools +import jsonpickle +from collections import OrderedDict +from Orange.widgets import widget, gui, settings +import Orange.data +from Orange.data.io import FileFormat +from DockerClient import DockerClient +from BwBase import OWBwBWidget, ConnectionDict, BwbGuiElements, getIconName, getJsonName +from PyQt5 import QtWidgets, QtGui + + +class OWstarIndex(OWBwBWidget): + name = "starIndex" + description = "Construct indices for STAR aligner " + priority = 11 + icon = getIconName(__file__, "starIndex.png") + want_main_area = False + docker_image_name = "biodepot/star" + docker_image_tag = "2.6.0c__bookworm-slim__84ff9269__1d8ca5e4__94207031" + inputs = [("Trigger", str, "handleInputsTrigger")] + outputs = [("genomeDir", str)] + pset = functools.partial(settings.Setting, schema_only=True) + runMode = pset(0) + exportGraphics = pset(False) + runTriggers = pset([]) + triggerReady = pset({}) + inputConnectionsStore = pset({}) + optionsChecked = pset({}) + rmode = pset("genomeGenerate") + genomeDir = pset(None) + genomeFastaFiles = pset([]) + genomeChrBinNbits = pset("18") + genomeSAindexNbases = pset(14) + genomeSAsparseD = pset(1) + genomeSuffixLengthMax = pset(-1) + runThreadN = pset(1) + sjdbGTFfile = pset(None) + sjdbFileChrStartEnd = pset([]) + sjdbGTFchrPrefix = pset("chr") + sjdbGTFfeatureExon = pset("exon") + sjdbGTFtagExonParentTranscript = pset("transcript_id") + sjdbGTFtagExonParentGene = pset("gene_id") + sjdbOverhang = pset(100) + sjdbScore = pset(2) + sjdbInsertSave = pset("Basic") + + def __init__(self): + super().__init__(self.docker_image_name, self.docker_image_tag) + with open(getJsonName(__file__, "starIndex")) as f: + self.data = jsonpickle.decode(f.read()) + f.close() + self.initVolumes() + self.inputConnections = ConnectionDict(self.inputConnectionsStore) + self.drawGUI() + + def handleInputsTrigger(self, value, *args): + if args and len(args) > 0: + self.handleInputs("Trigger", value, args[0][0], test=args[0][3]) + else: + self.handleInputs("inputFile", value, None) + + def handleOutputs(self): + outputValue = None + if hasattr(self, "genomeDir"): + outputValue = getattr(self, "genomeDir") + self.send("genomeDir", outputValue) diff --git a/nfcore_star_salmon/widgets/nfcore_star_salmon/starIndex/starIndex.states b/nfcore_star_salmon/widgets/nfcore_star_salmon/starIndex/starIndex.states new file mode 100644 index 00000000..9e0b5e29 --- /dev/null +++ b/nfcore_star_salmon/widgets/nfcore_star_salmon/starIndex/starIndex.states @@ -0,0 +1 @@ +{"outputs":[[[[null,null],[true,"Name"],[true,"genomeDir"]],[[true,false],[true,"Default value"],[false,""]],[[true,0,["str","Orange.data.Table"]],[true,"Type:"]]]],"priority":[[null,null],[true,"priority:"],[true,"11"]],"docker_image_name":[[null,null],[true,"docker_image_name:"],[true,"biodepot/star"]],"command":[true,"STAR"],"inputs":[[[[null,null],[true,"Name"],[true,"Trigger"]],[[true,false],[true,"callback"],[false,""]],[[true,0,["str","Orange.data.Table"]],[true,"Type:"]]]],"description":[[null,null],[true,"description:"],[true,"Construct indices for STAR aligner "]],"addBuildDate":[true,true],"icon":[[null,null],[true,"icon:"],[true,"/data/starIndex.png"]],"autoMap":[true,true],"parameters":[[[[null,null],[true,"Name"],[true,"rmode"]],[[true,0,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--runMode"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"runMode"]],[[true,true],[true,"default"],[true,"genomeGenerate"]],[true,false]],[[[null,null],[true,"Name"],[true,"genomeDir"]],[[true,3,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--genomeDir"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"genomeDir"]],[[true,false],[true,"default"],[false,""]],[true,false]],[[[null,null],[true,"Name"],[true,"genomeFastaFiles"]],[[true,2,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--genomeFastaFiles"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"genomeFastaFiles"]],[[true,false],[true,"default"],[false,""]],[true,false]],[[[null,null],[true,"Name"],[true,"genomeChrBinNbits"]],[[true,0,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--genomeChrBinNbits"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"genomeChrBinNbits"]],[[true,true],[true,"default"],[true,"18"]],[true,true]],[[[null,null],[true,"Name"],[true,"genomeSAindexNbases"]],[[true,9,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--genomeSAindexNbases"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"genomeSAindexNbases"]],[[true,true],[true,"default"],[true,"14"]],[true,true]],[[[null,null],[true,"Name"],[true,"genomeSAsparseD"]],[[true,9,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--genomeSAsparseD"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"genomeSAsparseD"]],[[true,true],[true,"default"],[true,"1"]],[true,true]],[[[null,null],[true,"Name"],[true,"genomeSuffixLengthMax"]],[[true,9,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--genomeSuffixLengthMax"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"genomeSuffixLengthMax"]],[[true,true],[true,"default"],[true,"-1"]],[true,true]],[[[null,null],[true,"Name"],[true,"runThreadN"]],[[true,9,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--runThreadN"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"runThreadN"]],[[true,true],[true,"default"],[true,"1"]],[true,true]],[[[null,null],[true,"Name"],[true,"sjdbGTFfile"]],[[true,1,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--sjdbGTFfile"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"sjdbGTFfile"]],[[true,false],[true,"default"],[false,""]],[true,true]],[[[null,null],[true,"Name"],[true,"sjdbFileChrStartEnd "]],[[true,2,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--sjdbFileChrStartEnd"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"sjdbFileChrStartEnd"]],[[true,false],[true,"default"],[false,""]],[true,true]],[[[null,null],[true,"Name"],[true,"sjdbGTFchrPrefix "]],[[true,0,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--sjdbGTFchrPrefix "]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"sjdbGTFchrPrefix "]],[[true,true],[true,"default"],[true,"chr"]],[true,true]],[[[null,null],[true,"Name"],[true,"sjdbGTFfeatureExon"]],[[true,0,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--sjdbGTFfeatureExon"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"sjdbGTFfeatureExon"]],[[true,true],[true,"default"],[true,"exon"]],[true,true]],[[[null,null],[true,"Name"],[true,"sjdbGTFtagExonParentTranscript"]],[[true,0,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--sjdbGTFtagExonParentTranscript"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"sjdbGTFtagExonParentTranscript"]],[[true,true],[true,"default"],[true,"transcript_id"]],[true,true]],[[[null,null],[true,"Name"],[true,"sjdbGTFtagExonParentGene"]],[[true,0,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--sjdbGTFtagExonParentGenet"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"sjdbGTFtagExonParentGene"]],[[true,true],[true,"default"],[true,"gene_id"]],[true,true]],[[[null,null],[true,"Name"],[true,"sjdbOverhang"]],[[true,9,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--sjdbOverhang"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"sjdbOverhang"]],[[true,true],[true,"default"],[true,"100"]],[true,true]],[[[null,null],[true,"Name"],[true,"sjdbScore"]],[[true,9,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--sjdbScore"]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"sjdbScore"]],[[true,true],[true,"default"],[true,"2"]],[true,true]],[[[null,null],[true,"Name"],[true,"sjdbInsertSave "]],[[true,0,["str","file","file list","directory","directory list","bool","bool list","text","text list","int","int list","double","double list"]],[true,"Type:"]],[[true,true],[true,"flag"],[true,"--sjdbInsertSave "]],[true,false],[[true,false],[true,"env"],[false,""]],[[true,true],[true,"label"],[true,"sjdbInsertSave"]],[[true,true],[true,"default"],[true,"Basic"]],[true,true]]],"name":[[null,null],[true,"name:"],[true,"Star index"]],"buildCommand":[true,""],"docker_image_tag":[[null,null],[true,"docker_image_tag:"],[true,"2.6.0c__bookworm-slim__84ff9269__1d8ca5e4__94207031"]]} \ No newline at end of file