Skip to content

Commit 1e5ec5a

Browse files
authored
Add new Genotype methods hasRefAllele and hasAltAllele (#1678)
1 parent 20334af commit 1e5ec5a

File tree

3 files changed

+40
-0
lines changed

3 files changed

+40
-0
lines changed

src/main/java/htsjdk/variant/variantcontext/Allele.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -431,5 +431,8 @@ static boolean oneIsPrefixOfOther(final Allele a1, final Allele a2) {
431431

432432
int length();
433433

434+
/**
435+
* @return true if Allele is either {@code <NON_REF>} or {@code <*>}
436+
*/
434437
boolean isNonRefAllele();
435438
}

src/main/java/htsjdk/variant/variantcontext/Genotype.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,20 @@ protected Genotype(final String sampleName, final String filters) {
7777
*/
7878
public abstract List<Allele> getAlleles();
7979

80+
/**
81+
* @return true if any allele is REF
82+
*/
83+
public boolean hasRefAllele() {
84+
return getAlleles().stream().anyMatch(A->A.isReference());
85+
};
86+
87+
/**
88+
* @return true if any allele is ALT, (NO_CALL are ignored)
89+
*/
90+
public boolean hasAltAllele() {
91+
return getAlleles().stream().anyMatch(A->!(A.isReference() || A.isNoCall()));
92+
};
93+
8094
/**
8195
* Returns how many times allele appears in this genotype object?
8296
*

src/test/java/htsjdk/variant/variantcontext/GenotypeUnitTest.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131

3232
import htsjdk.variant.VariantBaseTest;
3333
import htsjdk.variant.vcf.VCFConstants;
34+
import java.util.Arrays;
3435
import org.testng.Assert;
3536
import org.testng.annotations.BeforeSuite;
3637
import org.testng.annotations.Test;
@@ -70,6 +71,28 @@ public void testFilters() {
7071
Assert.assertFalse(makeGB().filter("").make().isFiltered(), "empty filters should count as unfiltered");
7172
Assert.assertEquals(makeGB().filter("").make().getFilters(), null, "empty filter string should result in null filters");
7273
}
74+
75+
@Test
76+
public void testHasAltAllele() {
77+
Assert.assertTrue(GenotypeBuilder.create("s", Arrays.asList(A)).hasAltAllele());
78+
Assert.assertTrue(GenotypeBuilder.create("s", Arrays.asList(A,Aref)).hasAltAllele());
79+
Assert.assertTrue(GenotypeBuilder.create("s", Arrays.asList(A,Allele.NO_CALL)).hasAltAllele());
80+
Assert.assertFalse(GenotypeBuilder.create("s", Arrays.asList(Aref)).hasAltAllele());
81+
Assert.assertFalse(GenotypeBuilder.create("s", Arrays.asList(Aref,Aref)).hasAltAllele());
82+
Assert.assertFalse(GenotypeBuilder.create("s", Arrays.asList(Allele.NO_CALL,Allele.NO_CALL)).hasAltAllele());
83+
Assert.assertTrue(GenotypeBuilder.create("s", Arrays.asList(Allele.NON_REF_ALLELE)).hasAltAllele());
84+
Assert.assertTrue(GenotypeBuilder.create("s", Arrays.asList(Allele.SPAN_DEL)).hasAltAllele());
85+
}
86+
87+
@Test
88+
public void testHasRefAllele() {
89+
Assert.assertFalse(GenotypeBuilder.create("s", Arrays.asList(A)).hasRefAllele());
90+
Assert.assertTrue(GenotypeBuilder.create("s", Arrays.asList(A,Aref)).hasRefAllele());
91+
Assert.assertFalse(GenotypeBuilder.create("s", Arrays.asList(A,Allele.NO_CALL)).hasRefAllele());
92+
Assert.assertTrue(GenotypeBuilder.create("s", Arrays.asList(Aref)).hasRefAllele());
93+
Assert.assertTrue(GenotypeBuilder.create("s", Arrays.asList(Aref,Aref)).hasRefAllele());
94+
Assert.assertFalse(GenotypeBuilder.create("s", Arrays.asList(Allele.NO_CALL,Allele.NO_CALL)).hasRefAllele());
95+
}
7396

7497
// public Genotype(String sampleName, List<Allele> alleles, double negLog10PError, Set<String> filters, Map<String, ?> attributes, boolean isPhased) {
7598
// public Genotype(String sampleName, List<Allele> alleles, double negLog10PError, Set<String> filters, Map<String, ?> attributes, boolean isPhased, double[] log10Likelihoods) {

0 commit comments

Comments
 (0)