From d9326a908c36d50babd05fb1d6618f1e0424e90e Mon Sep 17 00:00:00 2001 From: "bart.charbon" Date: Wed, 27 Nov 2024 10:54:18 +0100 Subject: [PATCH 1/2] Add metadata json as a required parameter --- pom.xml | 2 +- .../matcher/AppCommandLineOptions.java | 31 + .../matcher/AppCommandLineRunner.java | 3 +- .../inheritance/matcher/model/Settings.java | 1 + .../util/VepMetadataServiceFactory.java | 3 +- .../util/VepMetadataServiceFactoryImpl.java | 32 +- .../matcher/vcf/VcfReaderFactoryImpl.java | 2 +- .../vcf/inheritance/matcher/AppIT.java | 12 +- .../VepMetadataServiceFactoryImplTest.java | 10 +- src/test/resources/metadata.json | 794 ++++++++++++++++++ 10 files changed, 852 insertions(+), 38 deletions(-) create mode 100644 src/test/resources/metadata.json diff --git a/pom.xml b/pom.xml index 41ddb1a..9cb7714 100644 --- a/pom.xml +++ b/pom.xml @@ -12,7 +12,7 @@ org.molgenis vip-inheritance-matcher - 3.3.1 + 3.3.2 vip-inheritance-matcher Annotates VCF samples with mendelian violation and possible compound flags and diff --git a/src/main/java/org/molgenis/vcf/inheritance/matcher/AppCommandLineOptions.java b/src/main/java/org/molgenis/vcf/inheritance/matcher/AppCommandLineOptions.java index 3bc26ee..b5e9258 100644 --- a/src/main/java/org/molgenis/vcf/inheritance/matcher/AppCommandLineOptions.java +++ b/src/main/java/org/molgenis/vcf/inheritance/matcher/AppCommandLineOptions.java @@ -14,6 +14,8 @@ class AppCommandLineOptions { static final String OPT_INPUT_LONG = "input"; static final String OPT_OUTPUT = "o"; static final String OPT_OUTPUT_LONG = "output"; + static final String OPT_METADATA = "m"; + static final String OPT_METADATA_LONG = "metadata"; static final String OPT_PED = "pd"; static final String OPT_PED_LONG = "pedigree"; static final String OPT_PROBANDS = "pb"; @@ -44,6 +46,13 @@ class AppCommandLineOptions { .longOpt(OPT_OUTPUT_LONG) .desc("Output VCF file (.vcf or .vcf.gz).") .build()); + appOptions.addOption( + Option.builder(OPT_METADATA) + .hasArg(true) + .required() + .longOpt(OPT_METADATA_LONG) + .desc("VCF metadata file (.json).") + .build()); appOptions.addOption( Option.builder(OPT_PED) .hasArg(true) @@ -97,6 +106,7 @@ static Options getAppVersionOptions() { static void validateCommandLine(CommandLine commandLine) { validateInput(commandLine); validateOutput(commandLine); + validateMetadata(commandLine); } private static void validateInput(CommandLine commandLine) { @@ -132,4 +142,25 @@ private static void validateOutput(CommandLine commandLine) { format("Output file '%s' already exists", outputPath)); } } + + private static void validateMetadata(CommandLine commandLine) { + Path metadataPath = Path.of(commandLine.getOptionValue(OPT_METADATA)); + if (!Files.exists(metadataPath)) { + throw new IllegalArgumentException( + format("Metadata file '%s' does not exist.", metadataPath)); + } + if (Files.isDirectory(metadataPath)) { + throw new IllegalArgumentException( + format("Metadata file '%s' is a directory.", metadataPath)); + } + if (!Files.isReadable(metadataPath)) { + throw new IllegalArgumentException( + format("Metadata file '%s' is not readable.", metadataPath)); + } + String inputPathStr = metadataPath.toString(); + if (!inputPathStr.endsWith(".json")) { + throw new IllegalArgumentException( + format("Metadata file '%s' is not a .json file.", inputPathStr)); + } + } } diff --git a/src/main/java/org/molgenis/vcf/inheritance/matcher/AppCommandLineRunner.java b/src/main/java/org/molgenis/vcf/inheritance/matcher/AppCommandLineRunner.java index 63857a5..3fdd111 100644 --- a/src/main/java/org/molgenis/vcf/inheritance/matcher/AppCommandLineRunner.java +++ b/src/main/java/org/molgenis/vcf/inheritance/matcher/AppCommandLineRunner.java @@ -76,6 +76,7 @@ public void run(String... args) { private Settings mapSettings(CommandLine commandLine) { String inputPathValue = commandLine.getOptionValue(OPT_INPUT); Path inputPath = Path.of(inputPathValue); + Path metadataPath = Path.of(commandLine.getOptionValue(OPT_METADATA)); Path outputPath; if (commandLine.hasOption(OPT_OUTPUT)) { @@ -111,7 +112,7 @@ private Settings mapSettings(CommandLine commandLine) { return Settings.builder().inputVcfPath(inputPath).inputPedPaths(pedPaths) .outputPath(outputPath).probands(probandNames).overwrite(overwriteOutput). - pathogenicClasses(pathogenicClasses).debug(debugMode) + pathogenicClasses(pathogenicClasses).metadataPath(metadataPath).debug(debugMode) .build(); } diff --git a/src/main/java/org/molgenis/vcf/inheritance/matcher/model/Settings.java b/src/main/java/org/molgenis/vcf/inheritance/matcher/model/Settings.java index 21ff709..2469c01 100644 --- a/src/main/java/org/molgenis/vcf/inheritance/matcher/model/Settings.java +++ b/src/main/java/org/molgenis/vcf/inheritance/matcher/model/Settings.java @@ -13,6 +13,7 @@ public class Settings { Path inputVcfPath; List inputPedPaths; Path outputPath; + Path metadataPath; List probands; Set pathogenicClasses; boolean overwrite; diff --git a/src/main/java/org/molgenis/vcf/inheritance/matcher/util/VepMetadataServiceFactory.java b/src/main/java/org/molgenis/vcf/inheritance/matcher/util/VepMetadataServiceFactory.java index 19d4fed..f9e388b 100644 --- a/src/main/java/org/molgenis/vcf/inheritance/matcher/util/VepMetadataServiceFactory.java +++ b/src/main/java/org/molgenis/vcf/inheritance/matcher/util/VepMetadataServiceFactory.java @@ -1,7 +1,8 @@ package org.molgenis.vcf.inheritance.matcher.util; +import org.molgenis.vcf.inheritance.matcher.model.Settings; import org.molgenis.vcf.utils.metadata.FieldMetadataService; public interface VepMetadataServiceFactory { - FieldMetadataService create(); + FieldMetadataService create(Settings settings); } diff --git a/src/main/java/org/molgenis/vcf/inheritance/matcher/util/VepMetadataServiceFactoryImpl.java b/src/main/java/org/molgenis/vcf/inheritance/matcher/util/VepMetadataServiceFactoryImpl.java index 35f847d..8232d1c 100644 --- a/src/main/java/org/molgenis/vcf/inheritance/matcher/util/VepMetadataServiceFactoryImpl.java +++ b/src/main/java/org/molgenis/vcf/inheritance/matcher/util/VepMetadataServiceFactoryImpl.java @@ -1,45 +1,19 @@ package org.molgenis.vcf.inheritance.matcher.util; +import org.molgenis.vcf.inheritance.matcher.model.Settings; import org.molgenis.vcf.utils.metadata.FieldMetadataService; import org.molgenis.vcf.utils.metadata.FieldMetadataServiceImpl; import org.springframework.stereotype.Component; -import java.io.*; -import java.nio.charset.StandardCharsets; -import java.nio.file.Files; -import java.nio.file.Path; - /** * Quirky class to enable reuse of {@link FieldMetadataService} from vip-utils */ @Component public class VepMetadataServiceFactoryImpl implements VepMetadataServiceFactory { - private static final String EMPTY_METADATA_JSON = """ - { - "format": { - }, - "info": { - "CSQ": { - "nestedFields": { - } - } - } - } - """; @Override @SuppressWarnings("java:S5443") - public FieldMetadataService create() { - File json; - try { - Path path = Files.createTempFile("metadata", ".json"); - byte[] buf = EMPTY_METADATA_JSON.getBytes(StandardCharsets.UTF_8); - Files.write(path, buf); - json = path.toFile(); - json.deleteOnExit(); - } catch (IOException e) { - throw new UncheckedIOException(e); - } - return new FieldMetadataServiceImpl(json); + public FieldMetadataService create(Settings settings) { + return new FieldMetadataServiceImpl(settings.getMetadataPath().toFile()); } } diff --git a/src/main/java/org/molgenis/vcf/inheritance/matcher/vcf/VcfReaderFactoryImpl.java b/src/main/java/org/molgenis/vcf/inheritance/matcher/vcf/VcfReaderFactoryImpl.java index 5c6e29d..f0d8225 100644 --- a/src/main/java/org/molgenis/vcf/inheritance/matcher/vcf/VcfReaderFactoryImpl.java +++ b/src/main/java/org/molgenis/vcf/inheritance/matcher/vcf/VcfReaderFactoryImpl.java @@ -20,7 +20,7 @@ public VcfReaderFactoryImpl(VepMetadataServiceFactoryImpl vepMetadataServiceFact public VcfReader create(Settings settings) { Path inputVcfPath = settings.getInputVcfPath(); VCFFileReader vcfFileReader = new VCFFileReader(inputVcfPath.toFile(), false); - VepMetadata vepMetadata = new VepMetadata(vcfFileReader.getFileHeader(), vepMetadataServiceFactoryImpl.create()); + VepMetadata vepMetadata = new VepMetadata(vcfFileReader.getFileHeader(), vepMetadataServiceFactoryImpl.create(settings)); return new VcfReader(vcfFileReader, new VcfRecordFactoryImpl(vepMetadata), settings.getPathogenicClasses()); } } diff --git a/src/test/java/org/molgenis/vcf/inheritance/matcher/AppIT.java b/src/test/java/org/molgenis/vcf/inheritance/matcher/AppIT.java index 71a7c28..5b78c38 100644 --- a/src/test/java/org/molgenis/vcf/inheritance/matcher/AppIT.java +++ b/src/test/java/org/molgenis/vcf/inheritance/matcher/AppIT.java @@ -18,10 +18,11 @@ class AppIT { @Test void testNoVep() throws IOException { String inputFile = ResourceUtils.getFile("classpath:integration_noVEPinheritance.vcf").toString(); + String metadataFile = ResourceUtils.getFile("classpath:metadata.json").toString(); String pedigree = ResourceUtils.getFile("classpath:pedigree_complex.ped").toString(); String outputFile = sharedTempDir.resolve("actual.vcf").toString(); - String[] args = {"-i", inputFile, "-o", outputFile, "-pd", pedigree}; + String[] args = {"-i", inputFile, "-o", outputFile, "-pd", pedigree, "-m", metadataFile}; SpringApplication.run(App.class, args); String outputVcf = Files.readString(Path.of(outputFile)); @@ -35,9 +36,10 @@ void testNoVep() throws IOException { @Test void testNoPed() throws IOException { String inputFile = ResourceUtils.getFile("classpath:integration.vcf").toString(); + String metadataFile = ResourceUtils.getFile("classpath:metadata.json").toString(); String outputFile = sharedTempDir.resolve("actual.vcf").toString(); - String[] args = {"-i", inputFile, "-o", outputFile, "-c", "P"}; + String[] args = {"-i", inputFile, "-o", outputFile, "-c", "P", "-m", metadataFile}; SpringApplication.run(App.class, args); String outputVcf = Files.readString(Path.of(outputFile)); @@ -51,10 +53,11 @@ void testNoPed() throws IOException { @Test void testProband() throws IOException { String inputFile = ResourceUtils.getFile("classpath:integration.vcf").toString(); + String metadataFile = ResourceUtils.getFile("classpath:metadata.json").toString(); String pedigree = ResourceUtils.getFile("classpath:pedigree_complex.ped").toString(); String outputFile = sharedTempDir.resolve("actual.vcf").toString(); - String[] args = {"-i", inputFile, "-o", outputFile, "-pd", pedigree, "-pb", "Patient,Patient2", "--force" ,"-c","P,B"}; + String[] args = {"-i", inputFile, "-o", outputFile, "-pd", pedigree, "-pb", "Patient,Patient2", "--force" ,"-c","P,B", "-m", metadataFile}; SpringApplication.run(App.class, args); String outputVcf = Files.readString(Path.of(outputFile)); @@ -68,10 +71,11 @@ void testProband() throws IOException { @Test void testNoParents() throws IOException { String inputFile = ResourceUtils.getFile("classpath:integration.vcf").toString(); + String metadataFile = ResourceUtils.getFile("classpath:metadata.json").toString(); String pedigree = ResourceUtils.getFile("classpath:pedigree_fam_no_parents.ped").toString(); String outputFile = sharedTempDir.resolve("actual.vcf").toString(); - String[] args = {"-i", inputFile, "-o", outputFile, "-pd", pedigree, "-pb", "Patient,Patient2", "--force"}; + String[] args = {"-i", inputFile, "-o", outputFile, "-pd", pedigree, "-pb", "Patient,Patient2", "--force", "-m", metadataFile}; SpringApplication.run(App.class, args); String outputVcf = Files.readString(Path.of(outputFile)); diff --git a/src/test/java/org/molgenis/vcf/inheritance/matcher/util/VepMetadataServiceFactoryImplTest.java b/src/test/java/org/molgenis/vcf/inheritance/matcher/util/VepMetadataServiceFactoryImplTest.java index b5a1a49..1a63344 100644 --- a/src/test/java/org/molgenis/vcf/inheritance/matcher/util/VepMetadataServiceFactoryImplTest.java +++ b/src/test/java/org/molgenis/vcf/inheritance/matcher/util/VepMetadataServiceFactoryImplTest.java @@ -2,6 +2,12 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import org.molgenis.vcf.inheritance.matcher.model.Settings; + +import java.nio.file.Path; + +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; class VepMetadataServiceFactoryImplTest { private VepMetadataServiceFactoryImpl vepMetadataServiceFactoryImpl; @@ -13,7 +19,9 @@ void setUp() { @Test void create() { + Settings settings = mock(Settings.class); + when(settings.getMetadataPath()).thenReturn(Path.of("TEST")); // test that no exception is thrown - vepMetadataServiceFactoryImpl.create(); + vepMetadataServiceFactoryImpl.create(settings); } } \ No newline at end of file diff --git a/src/test/resources/metadata.json b/src/test/resources/metadata.json new file mode 100644 index 0000000..4a5275c --- /dev/null +++ b/src/test/resources/metadata.json @@ -0,0 +1,794 @@ +{ + "format": { + "ADFL": { + "label": "Flanking reads", + "description": "Number of flanking reads consistent with the allele", + "numberType": "NUMBER", + "numberCount": 1, + "type": "STRING" + }, + "ADIR": { + "label": "In-repeat reads", + "description": "Number of in-repeat reads consistent with the allele", + "numberType": "NUMBER", + "numberCount": 1, + "type": "STRING" + }, + "ADSP": { + "label": "Spanning reads", + "description": "Number of spanning reads consistent with the allele", + "numberType": "NUMBER", + "numberCount": 1, + "type": "STRING" + }, + "LC": { + "label": "Coverage", + "description": "Locus coverage", + "numberType": "NUMBER", + "numberCount": 1, + "type": "FLOAT" + }, + "REPCI": { + "label": "Repeat CI", + "description": "Confidence interval for the number of repeat units spanned by the allele", + "numberType": "NUMBER", + "numberCount": 1, + "type": "STRING" + }, + "REPCN": { + "label": "Repeats", + "description": "Number of repeat units spanned by the allele", + "numberType": "NUMBER", + "numberCount": 1, + "type": "STRING" + }, + "VI": { + "label": "Inheritance", + "description": "An enumeration of possible inheritance modes based on the pedigree of the sample. Potential values: AD, AD_IP, AR, AR_C, XLR, XLD, YL, MT", + "numberType": "OTHER", + "separator": ",", + "type": "CATEGORICAL", + "categories": { + "AD": { + "label": "AD", + "description": "Autosomal dominant" + }, + "AD_IP": { + "label": "AD_IP", + "description": "Autosomal dominant incomplete penetrance" + }, + "AR": { + "label": "AR", + "description": "Autosomal recessive" + }, + "AR_C": { + "label": "AR_C", + "description": "Autosomal recessive compound hetrozygote" + }, + "XLD": { + "label": "XLD", + "description": "X-linked dominant" + }, + "XLR": { + "label": "XLR", + "description": "X-linked recessive" + }, + "YL": { + "label": "YL", + "description": "Y-linked" + }, + "MT": { + "label": "MT", + "description": "Mitochondrial" + } + } + }, + "VIPC_S": { + "label": "VIP sample classification", + "numberType": "OTHER", + "type": "STRING", + "separator": "," + } + }, + "info": { + "CSQ": { + "nestedFields": { + "ALLELE_NUM": { + "label": "Allele Nr.", + "description": "Allele nr within the VCF file.", + "numberType": "NUMBER", + "numberCount": 1, + "type": "INTEGER" + }, + "ALPHSCORE": { + "label": "AlphScore", + "description": "AlphScore pathogenicity score for missense variants", + "numberType": "NUMBER", + "numberCount": 1, + "type": "FLOAT" + }, + "CAPICE_CL": { + "label": "CAPICE", + "description": "CAPICE classification", + "numberType": "NUMBER", + "numberCount": 1, + "type": "CATEGORICAL", + "categories": { + "B": { + "label": "B", + "description": "Benign" + }, + "LB": { + "label": "LB", + "description": "Likely benign" + }, + "VUS": { + "label": "VUS", + "description": "Variant of uncertain significance" + }, + "LP": { + "label": "LP", + "description": "Likely pathogenic" + }, + "P": { + "label": "P", + "description": "Pathogenic" + } + } + }, + "CAPICE_SC": { + "label": "CAPICE", + "description": "CAPICE pathogenicity score", + "numberType": "NUMBER", + "numberCount": 1, + "type": "FLOAT" + }, + "cDNA_position": { + "label": "cDNA pos", + "description": "Position within the cDNA.", + "numberType": "NUMBER", + "numberCount": 1, + "type": "STRING" + }, + "CDS_position": { + "label": "CDS pos", + "description": "Position within the coding sequence.", + "numberType": "NUMBER", + "numberCount": 1, + "type": "STRING" + }, + "CLIN_SIG": { + "label": "ClinVar", + "description": "ClinVar classification(s)", + "numberType": "OTHER", + "separator": "&", + "type": "STRING" + }, + "clinVar": { + "label": "ClinVar ID", + "description": "ClinVar Variation ID", + "numberType": "OTHER", + "type": "INTEGER" + }, + "clinVar_CLNID": { + "label": "ClinVar ID", + "description": "ClinVar Variation ID", + "numberType": "OTHER", + "type": "INTEGER" + }, + "clinVar_CLNSIG": { + "label": "ClinVar", + "description": "Clinical significance for this single variant", + "numberType": "OTHER", + "separator": "/", + "type": "CATEGORICAL", + "categories": { + "Benign": { + "label": "B", + "description": "Benign" + }, + "Likely_benign": { + "label": "LB", + "description": "Likely benign" + }, + "Uncertain_significance": { + "label": "VUS", + "description": "Variant of uncertain significance" + }, + "Likely_pathogenic": { + "label": "LP", + "description": "Likely pathogenic" + }, + "Pathogenic": { + "label": "P", + "description": "Pathogenic" + }, + "Conflicting_interpretations_of_pathogenicity": { + "label": "Conflict", + "description": "Conflicting interpretations of pathogenicity" + } + } + }, + "clinVar_CLNSIGINCL": { + "label": "ClinVar variant combination", + "description": "Clinical significance for a haplotype or genotype that includes this variant", + "numberType": "OTHER", + "separator": "&", + "type": "CATEGORICAL", + "categories": { + "Benign": { + "label": "B", + "description": "Benign" + }, + "Likely_benign": { + "label": "LB", + "description": "Likely benign" + }, + "Uncertain_significance": { + "label": "VUS", + "description": "Variant of uncertain significance" + }, + "Likely_pathogenic": { + "label": "LP", + "description": "Likely pathogenic" + }, + "Pathogenic": { + "label": "P", + "description": "Pathogenic" + }, + "Conflicting_interpretations_of_pathogenicity": { + "label": "Conflict", + "description": "Conflicting interpretations of pathogenicity" + } + } + }, + "clinVar_CLNREVSTAT": { + "label": "ClinVar status", + "description": "ClinVar review status", + "numberType": "OTHER", + "separator": "&", + "type": "CATEGORICAL", + "categories": { + "practice_guideline": { + "label": "Practice guideline", + "description": "There is a submitted record with a classification from a practice guideline" + }, + "reviewed_by_expert_panel": { + "label": "Reviewed by expert panel", + "description": "There is a submitted record with a classification from an expert panel" + }, + "criteria_provided": { + "label": "Criteria provided", + "description": "Assertion criteria and evidence for the classification (or a public contact) were provided" + }, + "_multiple_submitters": { + "label": "Multiple submitters", + "description": "There are multiple submitted records with a classification" + }, + "_no_conflicts": { + "label": "No conflicts", + "description": "The classifications agree" + }, + "_single_submitter": { + "label": "Single submitter", + "description": "There is a single submitted record with a classification" + }, + "_conflicting_interpretations": { + "label": "Conflicting_interpretations", + "description": "There are conflicting classifications" + }, + "no_assertion_criteria_provided": { + "label": "No assertion criteria provided", + "description": "There are one or more submitted records with a classification but without assertion criteria and evidence for the classification (or a public contact)" + }, + "no_assertion_provided": { + "label": "No assertion provided" + } + } + }, + "Consequence": { + "label": "Effect", + "description": "Effect(s) described as Sequence Ontology term(s)", + "numberType": "OTHER", + "separator": "&", + "type": "STRING" + }, + "Existing_variation": { + "label": "Ex. var.", + "description": "Existing variation.", + "numberType": "OTHER", + "separator": "&", + "type": "STRING" + }, + "FATHMM_MKL_NC": { + "label": "FATHMM-MKL-NC", + "description": "Predict the Functional Consequences of Non-Coding Single Nucleotide Variants (SNVs)", + "numberType": "NUMBER", + "numberCount": 1, + "type": "FLOAT" + }, + "GDB_PRO": { + "label": "GDB_PRO", + "description": "Highest GREEN-DB constraint score for overlapping promotor regions.", + "numberType": "NUMBER", + "numberCount": 1, + "type": "FLOAT" + }, + "GDB_ENH": { + "label": "GDB_ENH", + "description": "Highest GREEN-DB constraint score for overlapping enhancer regions.", + "numberType": "NUMBER", + "numberCount": 1, + "type": "FLOAT" + }, + "GDB_BIV": { + "label": "GDB_BIV", + "description": "Highest GREEN-DB constraint score for overlapping bivalent regions.", + "numberType": "NUMBER", + "numberCount": 1, + "type": "FLOAT" + }, + "GDB_SIL": { + "label": "GDB_SIL", + "description": "Highest GREEN-DB constraint score for overlapping silencer regions.", + "numberType": "NUMBER", + "numberCount": 1, + "type": "FLOAT" + }, + "GDB_INS": { + "label": "GDB_INS", + "description": "Highest GREEN-DB constraint score for overlapping insulater regions.", + "numberType": "NUMBER", + "numberCount": 1, + "type": "FLOAT" + }, + "Feature_type": { + "label": "Feature Type.", + "description": "The VEP feature type", + "numberType": "NUMBER", + "numberCount": 1, + "type": "CATEGORICAL", + "categories": { + "Transcript": { + "label": "Transcript", + "description": "Transcript" + }, + "RegulatoryFeature": { + "label": "Regulatory", + "description": "Regulatory feature" + }, + "MotifFeature": { + "label": "Motif", + "description": "Motif feature" + } + }, + "required": true + }, + "FLAGS": { + "label": "Flags", + "description": "Flags", + "numberType": "OTHER", + "separator": "&", + "type": "STRING" + }, + "GADO_PD": { + "label": "GADO_PD", + "description": "Gene-phenotypes association based on the GeneNetwork Assisted Diagnostic Optimization (GADO) gene prioritization Z-scores, see https://www.genenetwork.nl/gado and https://doi.org/10.1038/s41467-019-10649-4", + "numberType": "NUMBER", + "numberCount": 1, + "type": "CATEGORICAL", + "categories": { + "HC": { + "label": "High confidence", + "description": "Gene phenotype relation predicted by GADO with high confidence; Z-Score greater than 5" + }, + "LC": { + "label": "Low confidence", + "description": "Gene phenotype relation predicted by GADO with low confidence; Z-Score greater than 3 but below 5" + } + } + }, + "GADO_SC": { + "label": "GADO_SC", + "description": "The combined prioritization GADO Z-score over the HPO of the proband(s) terms for this case.", + "numberType": "NUMBER", + "numberCount": 1, + "type": "FLOAT" + }, + "gnomAD_AF": { + "label": "gnomAD AF", + "description": "gnomAD allele frequency", + "numberType": "NUMBER", + "numberCount": 1, + "type": "FLOAT" + }, + "gnomAD_COV": { + "label": "gnomAD COV", + "description": "gnomAD coverage (percent of individuals in gnomAD source)", + "numberType": "NUMBER", + "numberCount": 1, + "type": "FLOAT" + }, + "gnomAD_FAF95": { + "label": "gnomAD FAF95", + "description": "gnomAD filter allele frequency (95% confidence)", + "numberType": "NUMBER", + "numberCount": 1, + "type": "FLOAT" + }, + "gnomAD_FAF99": { + "label": "gnomAD FAF99", + "description": "gnomAD filter allele frequency (99% confidence)", + "numberType": "NUMBER", + "numberCount": 1, + "type": "FLOAT" + }, + "gnomAD_HN": { + "label": "gnomAD HN", + "description": "gnomAD number of homozygotes", + "numberType": "NUMBER", + "numberCount": 1, + "type": "INTEGER" + }, + "gnomAD_SRC": { + "label": "gnomAD SRC", + "description": "gnomAD source", + "numberType": "NUMBER", + "numberCount": 1, + "type": "CATEGORICAL", + "categories": { + "E": { + "label": "Exomes" + }, + "G": { + "label": "Genomes" + }, + "T": { + "label": "Total", + "description": "Total: exomes & genomes" + } + } + }, + "gnomAD_QC": { + "label": "gnomAD QC", + "description": "gnomAD quality control filters that failed", + "numberType": "OTHER", + "separator": "&", + "type": "STRING" + }, + "HGNC_ID": { + "label": "HGNC ID", + "description": "The HGNC gene ID", + "numberType": "NUMBER", + "numberCount": 1, + "type": "INTEGER" + }, + "HGVSc": { + "label": "HGVS C", + "description": "HGVS nomenclature: coding DNA reference sequence", + "numberType": "NUMBER", + "numberCount": 1, + "type": "STRING" + }, + "HGVSp": { + "label": "HGVS P", + "description": "HGVS nomenclature: protein reference sequence", + "numberType": "NUMBER", + "numberCount": 1, + "type": "STRING" + }, + "HPO": { + "label": "HPO", + "description": "Human Phenotype Ontology (HPO) terms describing phenotypic abnormalities, see https://hpo.jax.org/ and https://doi.org/10.1093/nar/gkad1005", + "numberType": "OTHER", + "separator": "&", + "type": "STRING" + }, + "IMPACT": { + "label": "Impact", + "description": "The Impact as predicted by VEP", + "numberType": "NUMBER", + "numberCount": 1, + "type": "CATEGORICAL", + "categories": { + "LOW": { + "label": "Low" + }, + "MODERATE": { + "label": "Moderate" + }, + "HIGH": { + "label": "High" + }, + "MODIFIER": { + "label": "Modifier" + } + }, + "required": true + }, + "IncompletePenetrance": { + "label": "Gene: Inc.Pen.", + "description": "Is gene associated with incomplete penetrance?", + "numberType": "NUMBER", + "numberCount": 1, + "type": "CATEGORICAL", + "categories": { + "1": { + "label": "True", + "description": "Gene is associated with incomplete penetrance" + } + }, + "nullValue": { + "label": "False" + } + }, + "InheritanceModesGene": { + "label": "Inh.Pat.", + "description": "Inheritance pattern", + "numberType": "OTHER", + "separator": "&", + "type": "CATEGORICAL", + "categories": { + "AD": { + "label": "AD", + "description": "Autosomal dominant" + }, + "AD_IP": { + "label": "AD_IP", + "description": "Autosomal dominant incomplete penetrance" + }, + "AR": { + "label": "AR", + "description": "Autosomal recessive" + }, + "AR_C": { + "label": "AR_C", + "description": "Autosomal recessive compound hetrozygote" + }, + "XL": { + "label": "XL", + "description": "X-linked" + }, + "XLD": { + "label": "XLD", + "description": "X-linked dominant" + }, + "XLR": { + "label": "XLR", + "description": "X-linked recessive" + }, + "YL": { + "label": "YL", + "description": "Y-linked" + }, + "MT": { + "label": "MT", + "description": "Mitochondrial" + } + } + }, + "ncER": { + "label": "ncER", + "description": "Non-coding essential regulation, from: 0(probably not essential for regulation) to 100 (probably essential for regulation).", + "numberType": "NUMBER", + "numberCount": 1, + "type": "FLOAT" + }, + "PHENO": { + "label": "Pheno", + "description": "Phenotype match.", + "numberType": "OTHER", + "separator": "&", + "type": "INTEGER" + }, + "PICK": { + "label": "PICK", + "description": "Boolean indicating if this is the VEP picked transcript.", + "numberType": "NUMBER", + "numberCount": 1, + "type": "INTEGER" + }, + "PolyPhen": { + "label": "PolyPhen", + "description": "PolyPhen score.", + "numberType": "NUMBER", + "numberCount": 1, + "type": "FLOAT" + }, + "Protein_position": { + "label": "Protein pos", + "description": "Position within the protein.", + "numberType": "NUMBER", + "numberCount": 1, + "type": "STRING" + }, + "PUBMED": { + "label": "PubMed", + "description": "PubMed citations", + "numberType": "OTHER", + "separator": "&", + "type": "INTEGER" + }, + "ReMM": { + "label": "ReMM", + "description": "The Regulatory Mendelian Mutation (ReMM) score was created for relevance prediction of non-coding variations (SNVs and small InDels) in the human genome (hg19) in terms of Mendelian diseases.", + "numberType": "NUMBER", + "numberCount": 1, + "type": "FLOAT" + }, + "SIFT": { + "label": "SIFT", + "description": "SIFT score.", + "numberType": "NUMBER", + "numberCount": 1, + "type": "FLOAT" + }, + "SOMATIC": { + "label": "Somatic", + "description": "Somatic.", + "numberType": "OTHER", + "separator": "&", + "type": "INTEGER" + }, + "SpliceAI_pred_DS_AG": { + "label": "SpliceAI AG", + "description": "SpliceAI Delta score (acceptor gain).", + "numberType": "NUMBER", + "numberCount": 1, + "type": "FLOAT" + }, + "SpliceAI_pred_DS_AL": { + "label": "SpliceAI AL", + "description": "SpliceAI Delta score (acceptor loss).", + "numberType": "NUMBER", + "numberCount": 1, + "type": "FLOAT" + }, + "SpliceAI_pred_DS_DG": { + "label": "SpliceAI DG", + "description": "SpliceAI Delta score (donor gain).", + "numberType": "NUMBER", + "numberCount": 1, + "type": "FLOAT" + }, + "SpliceAI_pred_DS_DL": { + "label": "SpliceAI DL", + "description": "SpliceAI Delta score (donor loss).", + "numberType": "NUMBER", + "numberCount": 1, + "type": "FLOAT" + }, + "STRAND": { + "label": "Strand", + "description": "The strand of the gene (0=- 1=+).", + "numberType": "NUMBER", + "numberCount": 1, + "type": "INTEGER" + }, + "SYMBOL": { + "label": "Gene", + "description": "Gene symbol", + "numberType": "NUMBER", + "numberCount": 1, + "type": "STRING" + }, + "VIPC": { + "label": "VIP classification", + "description": "Variant consequence classification predicted by the Variant Interpretation Pipeline (VIP), see https://vip.molgeniscloud.org/ and https://doi.org/10.1101/2024.04.11.24305656", + "numberType": "NUMBER", + "numberCount": 1, + "type": "STRING", + "required": true + }, + "VIPP": { + "label": "VIP path", + "description": "VIP decision tree path", + "numberType": "OTHER", + "separator": "&", + "type": "STRING", + "required": true + }, + "VKGL_CL": { + "label": "VKGL", + "description": "Variant consensus classification from the Vereniging Klinisch Genetische Laboratoriumdiagnostiek (VKGL) datashare database, see https://vkgl.nl/nl/diagnostiek/vkgl-datashare-database", + "numberType": "NUMBER", + "numberCount": 1, + "type": "CATEGORICAL", + "categories": { + "B": { + "label": "B", + "description": "Benign" + }, + "LB": { + "label": "LB", + "description": "Likely benign" + }, + "VUS": { + "label": "VUS", + "description": "Variant of uncertain significance" + }, + "LP": { + "label": "LP", + "description": "Likely pathogenic" + }, + "P": { + "label": "P", + "description": "Pathogenic" + } + } + }, + "VKGL_UMCG": { + "label": "MVL", + "description": "UMCG managed variant list classification", + "numberType": "NUMBER", + "numberCount": 1, + "type": "CATEGORICAL", + "categories": { + "B": { + "label": "B", + "description": "Benign" + }, + "LB": { + "label": "LB", + "description": "Likely benign" + }, + "VUS": { + "label": "VUS", + "description": "Variant of uncertain significance" + }, + "LP": { + "label": "LP", + "description": "Likely pathogenic" + }, + "P": { + "label": "P", + "description": "Pathogenic" + } + } + } + } + }, + "STR_NORMAL_MAX": { + "label": "STR normal max", + "description": "Maximum number of repeats allowed to call as normal as defined in the Stranger catalogue", + "numberType": "NUMBER", + "numberCount": 1, + "type": "INTEGER" + }, + "STR_PATHOLOGIC_MIN": { + "label": "STR pathologic min", + "description": "Mininum number of repeats required to call as pathologic as defined in the Stranger catalogue", + "numberType": "NUMBER", + "numberCount": 1, + "type": "INTEGER" + }, + "STR_STATUS": { + "label": "STR status", + "description": "Repeat expansion status as decided by Stranger", + "numberType": "NUMBER", + "numberCount": 1, + "type": "CATEGORICAL", + "categories": { + "normal": { + "label": "normal", + "description": "Repeat count is smaller than or equal to the maximum number of repeats allowed to call as normal" + }, + "pre_mutation": { + "label": "pre-mutation", + "description": "Repeat count is greater than the maximum number of repeats allowed to call as normal and smaller than the minimum number of repeats required to call as pathologic" + }, + "full_mutation": { + "label": "full-mutation", + "description": "Repeat count is greater than or equal to the minimum number of repeats required to call as pathologic" + } + } + }, + "SVTYPE": { + "label": "SV type", + "description": "Type of structural variant", + "numberType": "NUMBER", + "numberCount": 1, + "type": "STRING" + } + } +} \ No newline at end of file From 46d244e1d8d5953718c3f0a4c043f406c7c0bed8 Mon Sep 17 00:00:00 2001 From: "bart.charbon" Date: Wed, 27 Nov 2024 11:05:30 +0100 Subject: [PATCH 2/2] update README usage --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 91c06a5..3d6cdbb 100644 --- a/README.md +++ b/README.md @@ -63,9 +63,10 @@ contain the following: ## Usage ``` -usage: java -jar vcf-inheritance-matcher.jar -i [-o ] [-pd +usage: java -jar vcf-inheritance-matcher.jar -i -m [-o ] [-pd ] [-pb ] [-np ] [-c] [-f] [-d] -i,--input Input VCF file (.vcf or .vcf.gz). + -m,--metadata VCF metadata file (.json). -o,--output Output VCF file (.vcf or .vcf.gz). -pd,--pedigree Comma-separated list of pedigree files (.ped).