diff --git a/lirical-cli/src/assemble/distribution.xml b/lirical-cli/src/assemble/distribution.xml index e6d6c3264..860c29b74 100644 --- a/lirical-cli/src/assemble/distribution.xml +++ b/lirical-cli/src/assemble/distribution.xml @@ -17,6 +17,13 @@ legal/** + + ${project.basedir}/src + ./ + + examples/ + + ${project.build.directory} ./ diff --git a/lirical-cli/src/examples/marfan.vcf b/lirical-cli/src/examples/marfan.vcf new file mode 100644 index 000000000..e66f2b37b --- /dev/null +++ b/lirical-cli/src/examples/marfan.vcf @@ -0,0 +1,78 @@ +##fileformat=VCFv4.2 +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##DRAGENCommandLine= +##DRAGENCommandLine= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##FILTER= +##FILTER= +##FILTER= +##FILTER= +##FILTER= +##FILTER= +##FILTER= +##FILTER= +##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= +#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT MARFAN_EXAMPLE +chr1 168044638 rs113151068 G A 284.62 PASS AC=1;AF=0.500;AN=2;DP=43 GT:AD:DP:GQ:PL 0/1:23,20:43:41:77,0,45 +chr3 126006425 rs111477552 TAACA T 258.17 PASS AC=1;AF=0.500;AN=2;DP=43 GT:AD:DP:GQ:PL 0/1:23,20:43:41:77,0,45 +chr15 48411070 MARFAN_PATHOGENIC C A 100 PASS GENE=FBN1;INHERITANCE=AD;MIM=154700;AC=1;AF=0.500;AN=2;DP=43 GT:AD:DP:GQ:PL 0/1:23,20:43:41:77,0,45 +chrX 101539008 rs6523510 G C 739.17 PASS AC=2;AF=1.00;AN=2;DP=31 GT:AD:DP:GQ:PL 1/1:1,30:31:22.40:772,22,0 +chrX 154462369 rs72227759 CTGG C 196.20 PASS AC=1;AF=0.500;AN=2;DP=9 GT:AD:DP:GQ:PL 1/1:0,9:9:23:93,26,0 +chr17_KI270907v1_alt 88449 . C A 21.05 PASS AC=1;AF=0.500;AN=2;DP=122 GT:AD:DP:GQ:PL 0/1:5,2:7:21:56,0,44 +chr3_KI270937v1_alt 81596 . A G 7.80 DRAGENSnpHardQUAL AC=2;AF=1.000;AN=2;DP=59 GT:AD:DP:GQ:PL 1/1:0,1:1:2:42,3,0 +HLA-DRB1*09:21 5012 . T C 25.79 PASS AC=2;AF=1.000;AN=2;DP=2 GT:AD:DP:GQ:PL 1/1:0,2:2:5:62,6,0 diff --git a/lirical-cli/src/examples/phenotype-and-genotype.yaml b/lirical-cli/src/examples/phenotype-and-genotype.yaml new file mode 100644 index 000000000..2cbe0ae2d --- /dev/null +++ b/lirical-cli/src/examples/phenotype-and-genotype.yaml @@ -0,0 +1,18 @@ +## LIRICAL Analysis Template. +# Use this as a template for your own set-up. +--- +# Sample ID +sampleId: MARFAN_EXAMPLE +# List of observed HPO terms +hpoIds: ['HP:0001519', 'HP:0001083', 'HP:0001653'] +# List of excluded HPO terms +negatedHpoIds: ['HP:0000275'] + +# Age in ISO8601 notation (e.g. 'P12Y6M5D' to indicate 12 years, 6 months, and 5 days). +age: P20Y6M +# Choose from {MALE, FEMALE} +sex: FEMALE +# Path to a VCF file. Update to match path to your VCF file, +# or to point to an example VCF with deleterious FBN1 variant +# stored at `lirical-cli/src/examples/marfan.vcf`. +#vcf: /path/to/marfan.vcf diff --git a/lirical-cli/src/examples/phenotype-only.yaml b/lirical-cli/src/examples/phenotype-only.yaml new file mode 100644 index 000000000..ba460d75e --- /dev/null +++ b/lirical-cli/src/examples/phenotype-only.yaml @@ -0,0 +1,13 @@ +## LIRICAL Analysis Template. +# Use this as a template for your own set-up. +--- +sampleId: Sample ID +hpoIds: ['HP:0002352', 'HP:0002490', 'HP:0001290'] +negatedHpoIds: ['HP:0000486'] + +# Age in ISO8601 notation (e.g. 'P12Y6M5D' to indicate 12 years, 6 months, and 5 days). +#age: +# Choose from {MALE, FEMALE} +#sex: +# Path to a VCF file (optional) +#vcf: diff --git a/lirical-io/src/main/java/org/monarchinitiative/lirical/io/analysis/YamlAnalysisDataParser.java b/lirical-io/src/main/java/org/monarchinitiative/lirical/io/analysis/YamlAnalysisDataParser.java index 869d122bf..a5dc1836a 100644 --- a/lirical-io/src/main/java/org/monarchinitiative/lirical/io/analysis/YamlAnalysisDataParser.java +++ b/lirical-io/src/main/java/org/monarchinitiative/lirical/io/analysis/YamlAnalysisDataParser.java @@ -58,6 +58,9 @@ public AnalysisData parse(InputStream is) throws LiricalParseException { private static Sex parseSex(String sex) { + if (sex == null) + return Sex.UNKNOWN; + return switch (sex.toLowerCase()) { case "male" -> Sex.MALE; case "female" -> Sex.FEMALE; diff --git a/lirical-io/src/main/java/org/monarchinitiative/lirical/io/analysis/YamlConfig.java b/lirical-io/src/main/java/org/monarchinitiative/lirical/io/analysis/YamlConfig.java index 04c7ec1d6..a6316e826 100644 --- a/lirical-io/src/main/java/org/monarchinitiative/lirical/io/analysis/YamlConfig.java +++ b/lirical-io/src/main/java/org/monarchinitiative/lirical/io/analysis/YamlConfig.java @@ -10,11 +10,11 @@ */ public class YamlConfig { - private String sampleId; - private List hpoIds; - private List negatedHpoIds; + private String sampleId = "Sample ID"; + private List hpoIds = List.of(); + private List negatedHpoIds = List.of(); private String age; - private String sex; + private String sex = "UNKNOWN"; private String vcf; public void setSampleId(String sampleId) { @@ -66,7 +66,7 @@ public String vcf() { } public Optional vcfPath() { - return vcf == null ? + return vcf == null || vcf.isBlank() ? Optional.empty() : Optional.of(Path.of(vcf)); }