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));
}