diff --git a/cwl/gatk_liftover.cwl b/cwl/gatk_liftover.cwl new file mode 100644 index 0000000..f4b28c1 --- /dev/null +++ b/cwl/gatk_liftover.cwl @@ -0,0 +1,69 @@ +#!/usr/bin/env cwl-runner + +cwlVersion: v1.0 + +class: CommandLineTool + +requirements: + - class: InlineJavascriptRequirement + +hints: + - class: DockerRequirement + dockerPull: ACCOUNT/gatk_picard:VERSION + +baseCommand: [gatk, LiftoverVcf] + +inputs: + - id: vcf + type: File + inputBinding: + prefix: -I + doc: expect a path to the input uncompressed or gzip-compressed vcf + + - id: reference_sequence + type: File + inputBinding: + prefix: -R + secondaryFiles: + - ^.dict + - .fai + doc: reference sequence for the target genome build + + - id: reject + type: string + default: "reject.vcf.gz" + inputBinding: + prefix: --REJECT + doc: file to write variants that failed liftover + + - id: output_vcf + type: string + default: "output.vcf.gz" + inputBinding: + prefix: -O + doc: name of output vcf file, compressed + + - id: chain + type: File + inputBinding: + prefix: -C + doc: liftover chain file + +outputs: + - id: output + type: File + outputBinding: + glob: $(inputs.output_vcf) + secondaryFiles: + - .tbi + + - id: output_reject + type: File + outputBinding: + glob: $(inputs.reject) + secondaryFiles: + - .tbi + +doc: | + run picard LiftoverVcf + diff --git a/cwl/preprocess_liftover.cwl b/cwl/preprocess_liftover.cwl new file mode 100644 index 0000000..cf194f9 --- /dev/null +++ b/cwl/preprocess_liftover.cwl @@ -0,0 +1,44 @@ +#!/usr/bin/env cwl-runner + +cwlVersion: v1.0 + +class: CommandLineTool + +requirements: + - class: InlineJavascriptRequirement + +hints: + - class: DockerRequirement + dockerPull: ACCOUNT/granite_preprocess_liftover:VERSION + +baseCommand: [python3, /usr/local/bin/preprocess_liftover.py] + +inputs: + - id: vcf + type: File + inputBinding: + prefix: -i + doc: expect a path to the input uncompressed or gzip-compressed vcf + + - id: sample_names + type: string[] + inputBinding: + prefix: -s + doc: list of sample IDs + + - id: output_vcf + type: string + default: "output.vcf" + inputBinding: + prefix: -o + doc: base name of output vcf file + +outputs: + - id: output + type: File + outputBinding: + glob: $(inputs.output_vcf) + +doc: | + run preprocess_liftover.py to validate input VCF file for the liftover step + diff --git a/cwl/workflow_gatk_liftover.cwl b/cwl/workflow_gatk_liftover.cwl new file mode 100644 index 0000000..48f4207 --- /dev/null +++ b/cwl/workflow_gatk_liftover.cwl @@ -0,0 +1,61 @@ + +cwlVersion: v1.0 + +class: Workflow + +requirements: + MultipleInputFeatureRequirement: {} + +inputs: + - id: input_vcf + type: File + doc: expect a path to the input uncompressed or gzip-compressed vcf + + - id: chain + type: File + doc: liftover chain file + + - id: reference + type: File + secondaryFiles: + - ^.dict + - .fai + doc: expect the path to the fa reference file + + - id: sample_names + type: string[] + doc: list of sample IDs + +outputs: + vcf_lifted: + type: File + outputSource: vcf_liftover/output + + reject: + type: File + outputSource: vcf_liftover/output_reject + +steps: + preprocess: + run: preprocess_liftover.cwl + in: + vcf: + source: input_vcf + sample_names: + source: sample_names + out: [output] + + vcf_liftover: + run: gatk_liftover.cwl + in: + vcf: + source: preprocess/output + chain: + source: chain + reference_sequence: + source: reference + out: [output, output_reject] + +doc: | + run preprocess_liftover | + run gatk_liftover diff --git a/dockerfiles/gatk_picard/Dockerfile b/dockerfiles/gatk_picard/Dockerfile new file mode 100644 index 0000000..107d6af --- /dev/null +++ b/dockerfiles/gatk_picard/Dockerfile @@ -0,0 +1,33 @@ +####################################################################### +# Basic image +####################################################################### +FROM cgap/cgap-ubuntu2004-py-38:0.0.1 +LABEL mainainers="Michele Berselli (berselli.michele@gmail.com), Dominika Maziec (dominika.maziec@hms.harvard.edu)" + +####################################################################### +# General updates & installing necessary Linux components +####################################################################### +RUN apt-get update -y && apt-get install -y \ + locales \ + tabix + +####################################################################### +# Setting working env +####################################################################### +WORKDIR /usr/local/bin + +####################################################################### +# Software +####################################################################### +## conda install +RUN conda install -c bioconda -y gatk4==4.2.6.1 picard==2.26.11 && \ + conda clean -a -y -f + +####################################################################### +# Setting env variables +####################################################################### +## Supporting UTF-8 +RUN locale-gen "en_US.UTF-8" && update-locale LC_ALL="en_US.UTF-8" +ENV LC_ALL=en_US.UTF-8 + +CMD ["bash"] diff --git a/dockerfiles/granite_preprocess_liftover/Dockerfile b/dockerfiles/granite_preprocess_liftover/Dockerfile new file mode 100644 index 0000000..8a546be --- /dev/null +++ b/dockerfiles/granite_preprocess_liftover/Dockerfile @@ -0,0 +1,39 @@ +####################################################################### +# Basic image +####################################################################### +FROM cgap/cgap-ubuntu2004-py-38:0.0.1 +LABEL mainainers="Michele Berselli (berselli.michele@gmail.com), Dominika Maziec (dominika.maziec@hms.harvard.edu)" + +####################################################################### +# General updates & installing necessary Linux components +####################################################################### +RUN apt-get update -y && apt-get install -y \ + locales \ + tabix + +####################################################################### +# Setting working env +####################################################################### +WORKDIR /usr/local/bin + +####################################################################### +# Software +####################################################################### +## granite, pytest +RUN pip install granite-suite==0.2.0 pytest==7.1.2 + +####################################################################### +# Scripts +####################################################################### +## preprocess_liftover +COPY scripts/preprocess_liftover.py . +RUN chmod +x preprocess_liftover.py + +####################################################################### +# Setting env variables +####################################################################### +## Supporting UTF-8 +RUN locale-gen "en_US.UTF-8" && update-locale LC_ALL="en_US.UTF-8" +ENV LC_ALL=en_US.UTF-8 + +CMD ["bash"] diff --git a/dockerfiles/granite_preprocess_liftover/scripts/preprocess_liftover.py b/dockerfiles/granite_preprocess_liftover/scripts/preprocess_liftover.py new file mode 100644 index 0000000..2c01e9b --- /dev/null +++ b/dockerfiles/granite_preprocess_liftover/scripts/preprocess_liftover.py @@ -0,0 +1,82 @@ +#!/usr/bin/env python3 + +################################################################################## +# +# Script to validate input VCF file for the liftover step. +# It runs the following steps: +# 1. Check if sample identifiers in the VCF matches provided sample names +# 2. Exlcude non standard chromosomes i.e GL000225.1 +# 3. If the VCF is not 'chr' based, add the prefix +# +################################################################################## + + +from granite.lib import vcf_parser +import argparse + +# Constants +CHR_PREFIX = "chr" + +# list of standard chromosomes +std_chromosomes = [str(chrom) for chrom in list(range(1, 23))] + ["X", "Y"] +std_chromosomes += [CHR_PREFIX + chrom for chrom in std_chromosomes] + +################################################ +# Functions +################################################ + + +def main(args): + + output_file = args["outputfile"] + + vcf = vcf_parser.Vcf(args["inputfile"]) + + # 1. Check if sample names match genotype IDs + sample_names = args["sample_names"] + vcf_sample_names = vcf.header.IDs_genotypes + sample_names_err = f"Sample names {sample_names} do not match sample identifires in the VCF {vcf_sample_names}" + + if len(sample_names) != len(vcf_sample_names): + raise ValueError(sample_names_err) + else: + for id in vcf_sample_names: + if id not in sample_names: + raise ValueError(sample_names_err) + + with open(output_file, "w") as output: + + vcf.write_header(output) + + for vnt in vcf.parse_variants(): + # 2. Exclude non standard chromosomes + if vnt.CHROM in std_chromosomes: + + # 3. Add 'chr' to CHROM if not present + if vnt.CHROM.startswith(CHR_PREFIX) == False: + vnt.CHROM = f"{CHR_PREFIX}{vnt.CHROM}" + + vcf.write_variant(output, vnt) + + +################################################ +# Main +################################################ + +if __name__ == "__main__": + + parser = argparse.ArgumentParser(description="Preprocess to the liftover step.") + + parser.add_argument("-i", "--inputfile", help="input VCF file", required=True) + parser.add_argument("-o", "--outputfile", help="output VCF file", required=True) + parser.add_argument( + "-s", + "--sample_names", + help="list of sample IDs that must be present in the input VCF", + nargs="+", + required=True, + ) + + args = vars(parser.parse_args()) + + main(args) diff --git a/dockerfiles/granite_preprocess_liftover/scripts/test/files/liftover_vcf_chr_missing_in.vcf.gz b/dockerfiles/granite_preprocess_liftover/scripts/test/files/liftover_vcf_chr_missing_in.vcf.gz new file mode 100644 index 0000000..c9be755 Binary files /dev/null and b/dockerfiles/granite_preprocess_liftover/scripts/test/files/liftover_vcf_chr_missing_in.vcf.gz differ diff --git a/dockerfiles/granite_preprocess_liftover/scripts/test/files/liftover_vcf_correct_out.vcf b/dockerfiles/granite_preprocess_liftover/scripts/test/files/liftover_vcf_correct_out.vcf new file mode 100644 index 0000000..3e5fe75 --- /dev/null +++ b/dockerfiles/granite_preprocess_liftover/scripts/test/files/liftover_vcf_correct_out.vcf @@ -0,0 +1,135 @@ +##fileformat=VCFv4.1 +##fileDate=20220720 +##source=GenerateSVCandidates 1.6.0 +##reference=file:///home/ubuntu/ebs/hg19/hg19_broadinstitute/Homo_sapiens_assembly19.fasta +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT=0.999"> +##FILTER= +##FILTER= +##FILTER= +##FILTER= +##FILTER= +##FILTER= +##FILTER= +##FILTER= +##ALT= +##ALT= +##ALT= +##ALT= +##cmdline=/miniconda/bin/configManta.py --referenceFasta /home/ubuntu/ebs/hg19/hg19_broadinstitute/Homo_sapiens_assembly19.fasta --bam=/home/ubuntu/ebs_temp/sorted.bam --runDir manta --callRegions /home/ubuntu/ebs/hg19/hg19_broadinstitute/human_hg19.bed.gz +#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT SAMPLE1 +chr1 10613 MantaBND:5589:3:5:0:0:0:0 A A]12:95154] 26 PASS SVTYPE=BND;MATEID=MantaBND:5589:3:5:0:0:0:1;IMPRECISE;CIPOS=-181,181;BND_DEPTH=77;MATE_BND_DEPTH=124 GT:FT:GQ:PL:PR 0/1:PASS:26:76,0,186:13,5 +chr1 869444 MantaDEL:11298:0:1:0:0:0 AGGGGAGGCGGCTGCGTTACAGGTGGGCAGGGGAGGCGGCTCCGTTACAGGTGGGCAGGGGAGGCGGCTGCGTTACAGGTGGGCAGGGGAGGCGGCTGCGTTACAGGTGGGCAGGGGAGGCGGCTGCGTTACAGGTGGGCAGGGGAGGCGGCTCCGTTACAGGTGGGCAGGGGAGGCGGCTCCGTTACAGGTGGGCAGGGGAGGCGGCTGCGTTACAGGTGGGCAGGGGAGGCGGCTGCGTTACAGGTGGGCGGGGGAGGCGGCTGCGTTACAGGTGGGCGGGGGAGGCGGCTGCGTTACAGGTGGGCAGGGGGGGCGGCTGCGTTACAGGTGGGCGGGGGAGGCGGCTGCGTTACAGGTGGGCGGGGGAGGCGGCTCCGTTACAGGTGGGCGGGGGAGGCGGCTGCGTTACAGGTGGGCGGGGGAGGCGGCTGCGTTACAGGTGGGCGGGGGGGGCGGCTGCGTTACAGGTGGGCGGGGGAGGCTGCTCCGTTACAGGTGGGCGGGGGAGGCTGCTCCGTTACAGGTGGGCGGGGGGGGCGGCTGCGTTACAGGTGGGCGGGGGGGGCGGCTGCGTTACAGGTGGGCGGGGGAGGCGGCTGCGTTACAGGTGGGCGGGGGAGGCGGCTCCGTTACAGGTGGGCGGGGGAGGCGGCTGCGTTACAGGTGGGCGGGGGAGGCGGCTGCGTTACAGGTGGGCAGGGGAGGCGGCTGCGTTACAGGTGGGCAGGGGAGGCGGCTGCGTTACAGGTGGGCGGGGGAGGCGGCTCCGTTACAGGTGGGCGGGGGAGGCGGCTGCGTTACAGGTGGGCGGGGGAGGCGGCTGCGTTACAGGTGGGCG A 322 SampleFT END=870284;SVTYPE=DEL;SVLEN=-840;CIGAR=1M840D;CIPOS=0,27;HOMLEN=27;HOMSEQ=GGGGAGGCGGCTGCGTTACAGGTGGGC GT:FT:GQ:PL:PR:SR 1/1:MinGQ:3:372,4,0:3,14:1,3 +chr1 1530481 MantaDEL:11359:0:0:1:5:0 TGACAGAGAGAGGCAGAGAGAGAGAGAGAGAGACAGACACAGAGAGAGCAGAACAGGGAGAAACAGAGAGACAGAGAGCGAGA T 602 MaxDepth END=1530563;SVTYPE=DEL;SVLEN=-82;CIGAR=1M82D;CIPOS=0,2;HOMLEN=2;HOMSEQ=GA GT:FT:GQ:PL:PR:SR 0/1:PASS:602:652,0,794:27,0:110,24 +chr1 1598413 MantaDEL:11364:0:0:0:0:0 ACACGCCTGTAATCCCAGCTACTTGGGAGGCTGAGGCAGGAGAATCACTTCAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCAAACCAGAGAAATCCAGCTCTGGGTGACAGAGCAAGACTCTGTTTCGGGAAAAATAAAATACATAGGCAGGGCGCGGTGGCT A 999 PASS END=1598580;SVTYPE=DEL;SVLEN=-167;CIGAR=1M167D;CIPOS=0,18;HOMLEN=18;HOMSEQ=CACGCCTGTAATCCCAGC GT:FT:GQ:PL:PR:SR 1/1:PASS:71:999,74,0:0,28:0,26 +chr1 1649485 MantaINS:11457:0:0:0:0:0 G GCTCTCATAGCCCTTCTGAACGGTCTGTGACACATGCATGCTTTCAGCTATT 887 MaxDepth END=1649485;SVTYPE=INS;SVLEN=51;CIGAR=1M51I;CIPOS=0,5;HOMLEN=5;HOMSEQ=CTCTC GT:FT:GQ:PL:PR:SR 1/1:PASS:82:940,85,0:1,0:0,34 +chr1 1649680 MantaDEL:11457:0:1:0:0:1 GCATGCTTTCAGGTGGAGTTTGCTCTCTCTGGTTTTCGGTCTGTGACACACGCATGCTTTCAGCTAGAGTATTCTCTCTATAGCCCCTCTGAACGGTCTGTGACACACGCATGCTTTCAGCTGGAGTTTGCTCTCTCTGGTTTTCGGTCTGTGACACACGCAGGCTTTTAGCTAGAGTTTGCTCTCCATAGCCCTTCTGAATGGTCTGTGACACACGCACGCTTTCAGCTAGAGTTTGCTCTCTCTGGTTTTCGGTCTGTGATACACGCACGCTTTCAGCTAGAGTTTGCTCTCTCTGGTTTTCGGTCTGTGACACACGCACGCTTTCAGCTAGAGTATTCTCTCTATAGCCATTCTGAACGGTCTGTGACGCACGTATGCTTTCAGCTAGAGTATTCTTTTTTTTTTTTTTGAGACGGAGTCTTGCTCTGTCGCCCAGGCTAGAGTGTGCAGTGGTGCGATAGCGGCTCACTGCAAGCTCCGCCTCCCAGGTTCATGCCATTCTCCTGCCTCAGCCTCCAGAGCAGCTGGGACTACAGGTGCCCGCCACCACGCCCGGCTAATTTTTTGTATTTTTAGTAGAGACTGGGTTTCACCGTGTTAGCCAGGATGGTCTTGATCTCCTGACCTTGTGATCCACCCGCCTCAGCCTCCCAAAGTGCTGGGATTACAGGCTTGAGCCACCACGCCCGGCCTTCAGCTAGAGTATTCTCTCTATAGCCCTTCTGAATGGTCTGTGACACACGCATGCTTTCAGCTAGAGTTTGCTCTCTCTATAGCCCTTCTGAATGGCCTGTGACACACGCATGCTTTCAGCTAGTTTGCTCTCTCTGGTTTTCGGTCTGTGACGCACACATGCTTTCAGCTAGAGTTTGCTCTCTATAGCCCCTCTGAATGGTCTGTGACACATGCATGCTTTCAGCTATTCTCTCTATAGCCCTTCTGAACGGTCTGTGACACCAT G 999 PASS END=1650642;SVTYPE=DEL;SVLEN=-962;CIGAR=1M962D GT:FT:GQ:PL:PR:SR 0/1:PASS:999:999,0,999:80,9:106,35 diff --git a/dockerfiles/granite_preprocess_liftover/scripts/test/files/liftover_vcf_non_standard_chrom_in.vcf.gz b/dockerfiles/granite_preprocess_liftover/scripts/test/files/liftover_vcf_non_standard_chrom_in.vcf.gz new file mode 100644 index 0000000..63c9e17 Binary files /dev/null and b/dockerfiles/granite_preprocess_liftover/scripts/test/files/liftover_vcf_non_standard_chrom_in.vcf.gz differ diff --git a/dockerfiles/granite_preprocess_liftover/scripts/test/files/liftover_vcf_two_samples_in.vcf.gz b/dockerfiles/granite_preprocess_liftover/scripts/test/files/liftover_vcf_two_samples_in.vcf.gz new file mode 100644 index 0000000..c63e287 Binary files /dev/null and b/dockerfiles/granite_preprocess_liftover/scripts/test/files/liftover_vcf_two_samples_in.vcf.gz differ diff --git a/dockerfiles/granite_preprocess_liftover/scripts/test/test_preprocess_liftover.py b/dockerfiles/granite_preprocess_liftover/scripts/test/test_preprocess_liftover.py new file mode 100644 index 0000000..93ae61f --- /dev/null +++ b/dockerfiles/granite_preprocess_liftover/scripts/test/test_preprocess_liftover.py @@ -0,0 +1,94 @@ +################################################################# +# Libraries +################################################################# + +import pytest +import filecmp + + +preprocess = __import__("preprocess_liftover") + + +def test_non_standard_chromosomes(tmp_path): + """ + This test checks if non standard chromosomes are not saved to the output VCF + """ + + # Variables and Run + args = { + "inputfile": "test/files/liftover_vcf_non_standard_chrom_in.vcf.gz", + "outputfile": f"{tmp_path}/output.vcf", + "sample_names": ["SAMPLE1"], + } + + preprocess.main(args) + assert filecmp.cmp(f"{tmp_path}/output.vcf", "test/files/liftover_vcf_correct_out.vcf") == True + +def test_missing_chr(tmp_path): + """ + This test checks if chr prefix is added to a non chr based VCF + """ + + # Variables and Run + args = { + "inputfile": "test/files/liftover_vcf_chr_missing_in.vcf.gz", + "outputfile": f"{tmp_path}/output.vcf", + "sample_names": ["SAMPLE1"], + } + + preprocess.main(args) + assert filecmp.cmp(f"{tmp_path}/output.vcf", "test/files/liftover_vcf_correct_out.vcf") == True + + +def test_wrong_sample_ids(tmp_path): + """ + This test checks if the VCF sample identifiers match the expected sample IDs + """ + # Variables and Run + args = { + "inputfile": "test/files/liftover_vcf_chr_missing_in.vcf.gz", + "outputfile": f"{tmp_path}/output.vcf", + "sample_names": ["SAMPLE1", "SAMPLE2"], + } + + with pytest.raises(ValueError) as exc: + preprocess.main(args) + + + assert "Sample names ['SAMPLE1', 'SAMPLE2'] do not match sample identifires in the VCF ['SAMPLE1']" in str(exc.value) + + + + args = { + "inputfile": "test/files/liftover_vcf_chr_missing_in.vcf.gz", + "outputfile": f"{tmp_path}/output.vcf", + "sample_names": ["SAMPLE2"], + } + + + with pytest.raises(ValueError) as exc: + preprocess.main(args) + + + assert "Sample names ['SAMPLE2'] do not match sample identifires in the VCF ['SAMPLE1']" in str(exc.value) + + + args = { + "inputfile": "test/files/liftover_vcf_two_samples_in.vcf.gz", + "outputfile": f"{tmp_path}/output.vcf", + "sample_names": ["SAMPLE3"], + } + + + with pytest.raises(ValueError) as exc: + preprocess.main(args) + + + assert "Sample names ['SAMPLE3'] do not match sample identifires in the VCF ['SAMPLE1', 'SAMPLE2']" in str(exc.value) + + + + + + + diff --git a/portal_objects/file_reference.json b/portal_objects/file_reference.json index 7949e61..111dc9b 100644 --- a/portal_objects/file_reference.json +++ b/portal_objects/file_reference.json @@ -33,5 +33,17 @@ "extra_files": [], "status": "uploading", "accession": "GAPFIGWSGHNU" - } + }, + { + "uuid": "47e4b517-d81c-4184-a4d2-e69b10197e9d", + "institution": "INSTITUTION_UUID", + "project": "PROJECT_UUID", + "file_format": "chain", + "description": "chain file for coordinates liftover, hg19 to hg38", + "aliases": [ + "cgap:hg19-to-hg38-chain" + ], + "status": "uploading", + "accession": "GAPFIYPTQVC8" +} ] diff --git a/portal_objects/software.json b/portal_objects/software.json index 15f3f4f..d69da63 100644 --- a/portal_objects/software.json +++ b/portal_objects/software.json @@ -45,5 +45,41 @@ "title": "pigz_pigz-2.6", "uuid": "c730b361-1b4d-4d29-8eff-8f7576d776e2", "version": "2.6" + }, + { + "project": "PROJECT_UUID", + "institution": "INSTITUTION_UUID", + "name": "gatk", + "software_type": [ + "variant caller" + ], + "source_url": "https://software.broadinstitute.org/gatk/gatk4", + "title": "gatk_4.2.6.1", + "uuid": "7b86efcc-60c4-442b-b803-eeccc63ff175", + "version": "4.2.6.1" + }, + { + "project": "PROJECT_UUID", + "institution": "INSTITUTION_UUID", + "name": "picard", + "software_type": [ + "filter" + ], + "source_url": "https://broadinstitute.github.io/picard/", + "title": "picard_2.26.11", + "uuid": "0c17c344-5949-4fe9-a494-8283724152c1", + "version": "2.26.11" + }, + { + "project": "PROJECT_UUID", + "institution": "INSTITUTION_UUID", + "name": "granite", + "software_type": [ + "filter" + ], + "source_url": "https://github.com/dbmi-bgm/granite", + "title": "granite_0.2.0", + "uuid": "04e57a90-471b-431d-a5ec-b94b3dacf219", + "commit": "0.2.0" } ] diff --git a/portal_objects/workflows/workflow_liftovervcf.json b/portal_objects/workflows/workflow_liftovervcf.json new file mode 100644 index 0000000..7af48d7 --- /dev/null +++ b/portal_objects/workflows/workflow_liftovervcf.json @@ -0,0 +1,160 @@ +{ + "accession": "GAPWFBH24FJK", + "app_name": "workflow_liftovervcf", + "app_version": "VERSION", + "arguments": [ + { + "argument_format": "vcf_gz", + "argument_type": "Input file", + "workflow_argument_name": "input_vcf" + }, + { + "argument_format": "fa", + "argument_type": "Input file", + "workflow_argument_name": "reference" + }, + { + "argument_format": "chain", + "argument_type": "Input file", + "workflow_argument_name": "chain" + }, + { + "argument_type": "parameter", + "workflow_argument_name": "sample_names" + }, + { + "argument_format": "vcf_gz", + "argument_type": "Output processed file", + "workflow_argument_name": "vcf_lifted", + "secondary_file_formats": [ + "vcf_gz_tbi" + ] + }, + { + "argument_format": "vcf_gz", + "argument_type": "Output processed file", + "workflow_argument_name": "reject" + } + ], + "project": "PROJECT_UUID", + "category": [ + "processing" + ], + "cwl_child_filenames": [ + "preprocess_liftover.cwl", + "gatk_liftover.cwl" + ], + "cwl_directory_url_v1": "s3://CWLBUCKET/PIPELINE/VERSION", + "cwl_main_filename": "workflow_gatk_liftover.cwl", + "cwl_pointer": "", + "description": "Lifts over a VCF file", + "institution": "INSTITUTION_UUID", + "name": "workflow_liftovervcf_VERSION", + "aliases": [ + "cgap:workflow_liftovervcf_VERSION" + ], + "steps": [ + { + "inputs": [ + { + "meta": { + "cardinality": "single", + "file_format": "vcf_gz", + "global": true, + "type": "data file" + }, + "name": "input_vcf", + "source": [ + { + "name": "input_vcf" + } + ] + }, + { + "meta": { + "cardinality": "single", + "file_format": "fa", + "global": true, + "type": "reference file" + }, + "name": "reference", + "source": [ + { + "name": "reference" + } + ] + }, + { + "meta": { + "cardinality": "single", + "file_format": "chain", + "global": true, + "type": "reference file" + }, + "name": "chain", + "source": [ + { + "name": "chain" + } + ] + }, + { + "meta": { + "cardinality": "single", + "global": true, + "type": "parameter" + }, + "name": "sample_names", + "source": [ + { + "name": "sample_names" + } + ] + } + ], + "meta": { + "analysis_step_types": [ + "format conversion" + ], + "software_used": [ + "/softwares/7b86efcc-60c4-442b-b803-eeccc63ff175", + "/softwares/04e57a90-471b-431d-a5ec-b94b3dacf219", + "/softwares/0c17c344-5949-4fe9-a494-8283724152c1" + ] + }, + "name": "liftovervcf", + "outputs": [ + { + "meta": { + "cardinality": "single", + "file_format": "vcf_gz", + "global": true, + "type": "data file" + }, + "name": "vcf_lifted", + "target": [ + { + "name": "vcf_lifted" + } + ] + }, + { + "meta": { + "cardinality": "single", + "file_format": "vcf_gz", + "global": true, + "type": "data file" + }, + "name": "reject", + "target": [ + { + "name": "reject" + } + ] + } + ] + } + ], + "title": "Liftover VCF", + "uuid": "cb916470-3ec5-4e33-8dcf-c6e147bf31a6" +} \ No newline at end of file