/* * See the NOTICE file distributed with this work for additional * information regarding copyright ownership. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see http://www.gnu.org/licenses/ */ package org.phenotips.variantstore.db.solr; import org.phenotips.variantstore.TestUtils; import org.phenotips.variantstore.shared.GACallInfoFields; import org.phenotips.variantstore.shared.GAVariantInfoFields; import org.phenotips.variantstore.shared.VariantUtils; import static org.phenotips.variantstore.db.solr.SolrVariantUtils.addVariantToDoc; import static org.phenotips.variantstore.db.solr.SolrVariantUtils.getCallsetField; import static org.phenotips.variantstore.db.solr.SolrVariantUtils.setCallsetField; import java.util.Arrays; import java.util.Collections; import java.util.List; import org.apache.solr.common.SolrDocument; import org.ga4gh.GACall; import org.ga4gh.GAVariant; import org.hamcrest.CoreMatchers; import org.junit.Test; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertThat; /** * Test the SolrVariantUtils Class */ public class SolrVariantUtilsTest { @Test public void testDocToVariant() throws Exception { String callsetId = "callset1"; String chrom = "chrX"; long start = (long) 2000; String ref = "CTAG"; String alt = "A"; String qual = "10"; String filter = "PASS"; double exomiser_variant_score = 0.1; double exomiser_gene_pheno_score = 0.2; double exomiser_gene_variant_score = 0.3; double exomiser_gene_combined_score = 0.4; String gene = "CNST"; String gene_effect = "MISSENSE"; double exac_af = 0.5; SolrDocument doc = new SolrDocument(); doc.setField(VariantsSchema.CHROM, chrom); doc.setField(VariantsSchema.REF, ref); doc.setField(VariantsSchema.START, start); doc.setField(VariantsSchema.END, start + 1); doc.setField(VariantsSchema.ALT, alt); doc.setField(VariantsSchema.GENE, gene); doc.setField(VariantsSchema.GENE_EFFECT, gene_effect); doc.setField(VariantsSchema.EXAC_AF, exac_af); setCallsetField(doc, callsetId, VariantsSchema.QUAL, qual); setCallsetField(doc, callsetId, VariantsSchema.FILTER, filter); setCallsetField(doc, callsetId, VariantsSchema.EXOMISER_VARIANT_SCORE, exomiser_variant_score); setCallsetField(doc, callsetId, VariantsSchema.EXOMISER_GENE_COMBINED_SCORE, exomiser_gene_combined_score); setCallsetField(doc, callsetId, VariantsSchema.EXOMISER_GENE_PHENO_SCORE, exomiser_gene_pheno_score); setCallsetField(doc, callsetId, VariantsSchema.EXOMISER_GENE_VARIANT_SCORE, exomiser_gene_variant_score); setCallsetField(doc, callsetId, VariantsSchema.AC, 2); GAVariant variant = SolrVariantUtils.docToVariant(doc, callsetId); assertEquals(variant.getReferenceName(), chrom); assertEquals((long) variant.getStart(), start); assertEquals(variant.getReferenceBases(), ref); assertThat(variant.getAlternateBases().get(0), CoreMatchers.<Object>is(alt)); assertEquals(VariantUtils.getInfo(variant, GAVariantInfoFields.GENE), String.valueOf(gene)); assertEquals(VariantUtils.getInfo(variant, GAVariantInfoFields.GENE_EFFECT), String.valueOf(gene_effect)); assertEquals(VariantUtils.getInfo(variant, GAVariantInfoFields.EXAC_AF), String.valueOf(exac_af)); assertThat(variant.getCalls(), is(notNullValue())); GACall call = variant.getCalls().get(0); assertThat(call, is(notNullValue())); assertThat(call.getGenotype().get(0), is(1)); assertThat(call.getGenotype().get(1), is(1)); assertEquals(VariantUtils.getInfo(call, GACallInfoFields.QUALITY), qual); assertEquals(VariantUtils.getInfo(call, GACallInfoFields.FILTER), filter); assertEquals(VariantUtils.getInfo(call, GACallInfoFields.EXOMISER_VARIANT_SCORE), String.valueOf(exomiser_variant_score)); assertEquals(VariantUtils.getInfo(call, GACallInfoFields.EXOMISER_GENE_PHENO_SCORE), String.valueOf(exomiser_gene_pheno_score)); assertEquals(VariantUtils.getInfo(call, GACallInfoFields.EXOMISER_GENE_VARIANT_SCORE), String.valueOf(exomiser_gene_variant_score)); assertEquals(VariantUtils.getInfo(call, GACallInfoFields.EXOMISER_GENE_COMBINED_SCORE), String.valueOf(exomiser_gene_combined_score)); } @Test public void testVariantToDoc() throws Exception { String callsetId = "callset1"; String chrom = "chrX"; long start = (long) 2000; String ref = "CTAG"; List<String> alt = Arrays.asList("A", "T"); String qual = "10"; String filter = "PASS"; double exomiser_variant_score = 0.1; double exomiser_gene_pheno_score = 0.2; double exomiser_gene_variant_score = 0.3; double exomiser_gene_combined_score = 0.4; String gene = "CNST"; String gene_effect = "MISSENSE"; double exac_af = 0.5; GAVariant variant = new GAVariant(); variant.setReferenceName(chrom); variant.setStart(start); variant.setReferenceBases(ref); variant.setAlternateBases(alt); VariantUtils.addInfo(variant, GAVariantInfoFields.GENE, gene); VariantUtils.addInfo(variant, GAVariantInfoFields.GENE_EFFECT, gene_effect); VariantUtils.addInfo(variant, GAVariantInfoFields.EXAC_AF, exac_af); GACall call = new GACall(); call.setGenotype(Arrays.asList(0, 1)); VariantUtils.addInfo(call, GACallInfoFields.QUALITY, qual); VariantUtils.addInfo(call, GACallInfoFields.FILTER, filter); VariantUtils.addInfo(call, GACallInfoFields.EXOMISER_VARIANT_SCORE, exomiser_variant_score); VariantUtils.addInfo(call, GACallInfoFields.EXOMISER_GENE_PHENO_SCORE, exomiser_gene_pheno_score); VariantUtils.addInfo(call, GACallInfoFields.EXOMISER_GENE_VARIANT_SCORE, exomiser_gene_variant_score); VariantUtils.addInfo(call, GACallInfoFields .EXOMISER_GENE_COMBINED_SCORE, exomiser_gene_combined_score); variant.setCalls(Collections.singletonList(call)); SolrDocument doc = SolrVariantUtils.variantToDoc(variant); addVariantToDoc(doc, variant, callsetId, true); assertEquals(doc.get(VariantsSchema.CHROM), chrom); assertEquals(doc.get(VariantsSchema.START), start); assertEquals(doc.get(VariantsSchema.END), start + ref.length()); assertEquals(doc.get(VariantsSchema.REF), ref); assertEquals(doc.get(VariantsSchema.ALT), alt.get(0)); assertEquals(doc.get(VariantsSchema.GENE), gene); assertEquals(doc.get(VariantsSchema.GENE_EFFECT), gene_effect); assertEquals(doc.get(VariantsSchema.EXAC_AF), exac_af); assertEquals(getCallsetField(doc, callsetId, VariantsSchema.AC), 1); assertEquals(getCallsetField(doc, callsetId, VariantsSchema.QUAL), qual); assertEquals(getCallsetField(doc, callsetId, VariantsSchema.FILTER), filter); assertEquals(getCallsetField(doc, callsetId, VariantsSchema.EXOMISER_VARIANT_SCORE), exomiser_variant_score); assertEquals(getCallsetField(doc, callsetId, VariantsSchema.EXOMISER_GENE_PHENO_SCORE), exomiser_gene_pheno_score); assertEquals(getCallsetField(doc, callsetId, VariantsSchema.EXOMISER_GENE_VARIANT_SCORE), exomiser_gene_variant_score); assertEquals(getCallsetField(doc, callsetId, VariantsSchema.EXOMISER_GENE_COMBINED_SCORE), exomiser_gene_combined_score); } @Test public void testVariantToDocIdempotence() throws Exception { String callsetId = "callset1"; String chrom = "chrX"; long position = (long) 2000; String ref = "CTAG"; List<String> alts = Collections.singletonList(TestUtils.randomBases(10)); String qual = "10"; String filter = "PASS"; double exomiser_variant_score = 0.1; double exomiser_gene_pheno_score = 0.2; double exomiser_gene_variant_score = 0.3; double exomiser_gene_combined_score = 0.4; String gene = "CNST"; String gene_effect = "MISSENSE"; double exac_af = 0.5; GAVariant variant = new GAVariant(); variant.setReferenceName(chrom); variant.setStart(position); variant.setReferenceBases(ref); variant.setAlternateBases(alts); VariantUtils.addInfo(variant, GAVariantInfoFields.GENE, gene); VariantUtils.addInfo(variant, GAVariantInfoFields.GENE_EFFECT, gene_effect); VariantUtils.addInfo(variant, GAVariantInfoFields.EXAC_AF, exac_af); GACall call = new GACall(); call.setGenotype(Arrays.asList(0, 1)); VariantUtils.addInfo(call, GACallInfoFields.QUALITY, qual); VariantUtils.addInfo(call, GACallInfoFields.FILTER, filter); VariantUtils.addInfo(call, GACallInfoFields.EXOMISER_VARIANT_SCORE, exomiser_variant_score); VariantUtils.addInfo(call, GACallInfoFields.EXOMISER_GENE_PHENO_SCORE, exomiser_gene_pheno_score); VariantUtils.addInfo(call, GACallInfoFields.EXOMISER_GENE_VARIANT_SCORE, exomiser_gene_variant_score); VariantUtils.addInfo(call, GACallInfoFields.EXOMISER_GENE_COMBINED_SCORE, exomiser_gene_combined_score); variant.setCalls(Collections.singletonList(call)); SolrDocument doc = SolrVariantUtils.variantToDoc(variant); addVariantToDoc(doc, variant, callsetId, true); GAVariant variant2 = SolrVariantUtils.docToVariant(doc, callsetId); assertEquals(variant.getReferenceName(), variant2.getReferenceName()); assertEquals((long) variant.getStart(), (long) variant2.getStart()); assertEquals(variant.getReferenceBases(), variant2.getReferenceBases()); assertEquals(variant.getAlternateBases(), variant2.getAlternateBases()); assertEquals(VariantUtils.getInfo(variant, GAVariantInfoFields.EXAC_AF), VariantUtils.getInfo(variant2, GAVariantInfoFields.EXAC_AF)); assertEquals(VariantUtils.getInfo(variant, GAVariantInfoFields.GENE), VariantUtils.getInfo(variant2, GAVariantInfoFields.GENE)); assertEquals(VariantUtils.getInfo(variant, GAVariantInfoFields.GENE_EFFECT), VariantUtils.getInfo(variant2, GAVariantInfoFields.GENE_EFFECT)); GACall call2 = variant2.getCalls().get(0); assertThat(call2.getGenotype().get(0), is(0)); assertThat(call2.getGenotype().get(1), is(1)); assertEquals(VariantUtils.getInfo(call, GACallInfoFields.QUALITY), VariantUtils.getInfo(call2, GACallInfoFields.QUALITY)); assertEquals(VariantUtils.getInfo(call, GACallInfoFields.FILTER), VariantUtils.getInfo(call2, GACallInfoFields.FILTER)); assertEquals(VariantUtils.getInfo(call, GACallInfoFields.EXOMISER_VARIANT_SCORE), VariantUtils.getInfo(call2, GACallInfoFields.EXOMISER_VARIANT_SCORE)); assertEquals(VariantUtils.getInfo(call, GACallInfoFields.EXOMISER_GENE_PHENO_SCORE), VariantUtils.getInfo(call2, GACallInfoFields.EXOMISER_GENE_PHENO_SCORE)); assertEquals(VariantUtils.getInfo(call, GACallInfoFields.EXOMISER_GENE_VARIANT_SCORE), VariantUtils.getInfo(call2, GACallInfoFields.EXOMISER_GENE_VARIANT_SCORE)); assertEquals(VariantUtils.getInfo(call, GACallInfoFields.EXOMISER_GENE_COMBINED_SCORE), VariantUtils.getInfo(call2, GACallInfoFields.EXOMISER_GENE_COMBINED_SCORE)); } }