diff --git a/pom.xml b/pom.xml index 3acf453..e4accae 100644 --- a/pom.xml +++ b/pom.xml @@ -8,7 +8,7 @@ com.google.cloud.genomics google-genomics-dataflow jar - v1beta2-0.22-SNAPSHOT + v1-0.1-SNAPSHOT Google @@ -114,7 +114,7 @@ com.google.apis google-api-services-genomics - v1beta2-rev87-1.20.0 + v1-rev73-1.21.0 @@ -127,7 +127,7 @@ com.google.cloud.genomics google-genomics-utils - v1beta2-0.44 + v1-0.1 diff --git a/src/main/java/com/google/cloud/genomics/dataflow/functions/transmission/ExtractAlleleTransmissionStatus.java b/src/main/java/com/google/cloud/genomics/dataflow/functions/transmission/ExtractAlleleTransmissionStatus.java index 7d63d54..ea8ad84 100644 --- a/src/main/java/com/google/cloud/genomics/dataflow/functions/transmission/ExtractAlleleTransmissionStatus.java +++ b/src/main/java/com/google/cloud/genomics/dataflow/functions/transmission/ExtractAlleleTransmissionStatus.java @@ -15,8 +15,8 @@ */ package com.google.cloud.genomics.dataflow.functions.transmission; -import com.google.api.services.genomics.model.Call; import com.google.api.services.genomics.model.Variant; +import com.google.api.services.genomics.model.VariantCall; import com.google.cloud.dataflow.sdk.transforms.DoFn; import com.google.cloud.dataflow.sdk.values.KV; import com.google.cloud.genomics.dataflow.model.Allele; @@ -93,8 +93,8 @@ public void processElement(ProcessContext c) { } @VisibleForTesting - Call getSample(Variant variant, String sampleName) { - for (Call call : variant.getCalls()) { + VariantCall getSample(Variant variant, String sampleName) { + for (VariantCall call : variant.getCalls()) { if (call.getCallSetName() == sampleName) return call; } diff --git a/src/main/java/com/google/cloud/genomics/dataflow/pipelines/AnnotateVariants.java b/src/main/java/com/google/cloud/genomics/dataflow/pipelines/AnnotateVariants.java index 6061e7f..d934cbf 100644 --- a/src/main/java/com/google/cloud/genomics/dataflow/pipelines/AnnotateVariants.java +++ b/src/main/java/com/google/cloud/genomics/dataflow/pipelines/AnnotateVariants.java @@ -18,8 +18,6 @@ import com.google.api.services.genomics.model.Annotation; import com.google.api.services.genomics.model.AnnotationSet; import com.google.api.services.genomics.model.ListBasesResponse; -import com.google.api.services.genomics.model.QueryRange; -import com.google.api.services.genomics.model.RangePosition; import com.google.api.services.genomics.model.SearchAnnotationsRequest; import com.google.api.services.genomics.model.SearchVariantsRequest; import com.google.api.services.genomics.model.Variant; @@ -219,17 +217,15 @@ private ListMultimap, Annotation> retrieveVariantAnnotations( Paginator.Annotations.create(genomics, ShardBoundary.Requirement.OVERLAPS).search( new SearchAnnotationsRequest() .setAnnotationSetIds(variantAnnotationSetIds) - .setRange(new QueryRange() - .setReferenceName(canonicalizeRefName(request.getReferenceName())) - .setStart(request.getStart()) - .setEnd(request.getEnd()))); + .setReferenceName(canonicalizeRefName(request.getReferenceName())) + .setStart(request.getStart()) + .setEnd(request.getEnd())); for (Annotation annotation : annotationIter) { - RangePosition pos = annotation.getPosition(); long start = 0; - if (pos.getStart() != null) { - start = pos.getStart(); + if (annotation.getStart() != null) { + start = annotation.getStart(); } - annotationMap.put(Range.closedOpen(start, pos.getEnd()), annotation); + annotationMap.put(Range.closedOpen(start, annotation.getEnd()), annotation); } LOG.info(String.format("read %d variant annotations in %s (%.2f / s)", annotationMap.size(), stopwatch, (double)annotationMap.size() / stopwatch.elapsed(TimeUnit.SECONDS))); @@ -243,13 +239,11 @@ private IntervalTree retrieveTranscripts(Genomics genomics, SearchVa Paginator.Annotations.create(genomics, ShardBoundary.Requirement.OVERLAPS).search( new SearchAnnotationsRequest() .setAnnotationSetIds(transcriptSetIds) - .setRange(new QueryRange() - .setReferenceName(canonicalizeRefName(request.getReferenceName())) - .setStart(request.getStart()) - .setEnd(request.getEnd()))); + .setReferenceName(canonicalizeRefName(request.getReferenceName())) + .setStart(request.getStart()) + .setEnd(request.getEnd())); for (Annotation annotation : transcriptIter) { - RangePosition pos = annotation.getPosition(); - transcripts.put(pos.getStart().intValue(), pos.getEnd().intValue(), annotation); + transcripts.put(annotation.getStart().intValue(), annotation.getEnd().intValue(), annotation); } LOG.info(String.format("read %d transcripts in %s (%.2f / s)", transcripts.size(), stopwatch, (double)transcripts.size() / stopwatch.elapsed(TimeUnit.SECONDS))); @@ -258,23 +252,22 @@ private IntervalTree retrieveTranscripts(Genomics genomics, SearchVa private String getCachedTranscriptBases(Genomics genomics, Annotation transcript) throws IOException { - RangePosition pos = transcript.getPosition(); - Range rng = Range.closedOpen(pos.getStart(), pos.getEnd()); + Range rng = Range.closedOpen(transcript.getStart(), transcript.getEnd()); if (!refBaseCache.containsKey(rng)) { - refBaseCache.put(rng, retrieveReferenceBases(genomics, pos)); + refBaseCache.put(rng, retrieveReferenceBases(genomics, transcript)); } return refBaseCache.get(rng); } - private String retrieveReferenceBases(Genomics genomics, RangePosition pos) throws IOException { + private String retrieveReferenceBases(Genomics genomics, Annotation annotation) throws IOException { StringBuilder b = new StringBuilder(); String pageToken = ""; while (true) { // TODO: Support full request parameterization for Paginator.References.Bases. ListBasesResponse response = genomics.references().bases() - .list(pos.getReferenceId()) - .setStart(pos.getStart()) - .setEnd(pos.getEnd()) + .list(annotation.getReferenceId()) + .setStart(annotation.getStart()) + .setEnd(annotation.getEnd()) .setPageToken(pageToken) .execute(); b.append(response.getSequence()); @@ -337,7 +330,7 @@ private static void validateRefsetForAnnotationSets( Genomics genomics, List annosetIds) throws IOException { String refsetId = null; for (String annosetId : annosetIds) { - String gotId = genomics.annotationSets().get(annosetId).execute().getReferenceSetId(); + String gotId = genomics.annotationsets().get(annosetId).execute().getReferenceSetId(); if (refsetId == null) { refsetId = gotId; } else if (!refsetId.equals(gotId)) { @@ -351,7 +344,7 @@ private static List validateAnnotationSetsFlag( Genomics genomics, String flagValue, String wantType) throws IOException { List annosetIds = ImmutableList.copyOf(flagValue.split(",")); for (String annosetId : annosetIds) { - AnnotationSet annoset = genomics.annotationSets().get(annosetId).execute(); + AnnotationSet annoset = genomics.annotationsets().get(annosetId).execute(); if (!wantType.equals(annoset.getType())) { throw new IllegalArgumentException("annotation set " + annosetId + " has type " + annoset.getType() + ", wanted type " + wantType); diff --git a/src/main/java/com/google/cloud/genomics/dataflow/pipelines/CalculateCoverage.java b/src/main/java/com/google/cloud/genomics/dataflow/pipelines/CalculateCoverage.java index d658f02..752cc39 100644 --- a/src/main/java/com/google/cloud/genomics/dataflow/pipelines/CalculateCoverage.java +++ b/src/main/java/com/google/cloud/genomics/dataflow/pipelines/CalculateCoverage.java @@ -15,11 +15,11 @@ import com.google.api.client.util.Strings; import com.google.api.services.genomics.Genomics; +import com.google.api.services.genomics.Genomics.Annotationsets; import com.google.api.services.genomics.model.Annotation; import com.google.api.services.genomics.model.AnnotationSet; import com.google.api.services.genomics.model.BatchCreateAnnotationsRequest; import com.google.api.services.genomics.model.Position; -import com.google.api.services.genomics.model.RangePosition; import com.google.cloud.dataflow.sdk.Pipeline; import com.google.cloud.dataflow.sdk.options.Default; import com.google.cloud.dataflow.sdk.options.Description; @@ -421,17 +421,16 @@ public void processElement(ProcessContext c) throws GeneralSecurityException, IO Position bucket = c.element().getKey(); Annotation a = new Annotation() .setAnnotationSetId(asId) - .setPosition(new RangePosition() - .setStart(bucket.getPosition()) - .setEnd(bucket.getPosition() + pOptions.getBucketWidth()) - .setReferenceName(bucket.getReferenceName())) + .setStart(bucket.getPosition()) + .setEnd(bucket.getPosition() + pOptions.getBucketWidth()) + .setReferenceName(bucket.getReferenceName()) .setType("GENERIC") - .setInfo(new HashMap>()); + .setInfo(new HashMap>()); for (KV> mappingQualityKV : c.element().getValue()) { - List output = Lists.newArrayList(); + List output = Lists.newArrayList(); for (int i = 0; i < mappingQualityKV.getValue().size(); i++) { double value = Math.round(mappingQualityKV.getValue().get(i) * 1000000.0) / 1000000.0; - output.add(Double.toString(value)); + output.add(value); } a.getInfo().put(mappingQualityKV.getKey().toString(), output); } @@ -485,7 +484,7 @@ private static AnnotationSet createAnnotationSet(String referenceSetId) as.setReferenceSetId(referenceSetId); as.setType("GENERIC"); Genomics genomics = GenomicsFactory.builder().build().fromOfflineAuth(auth); - Genomics.AnnotationSets.Create asRequest = genomics.annotationSets().create(as); + Annotationsets.Create asRequest = genomics.annotationsets().create(as); AnnotationSet asWithId = asRequest.execute(); return asWithId; } diff --git a/src/main/java/com/google/cloud/genomics/dataflow/utils/AnnotationUtils.java b/src/main/java/com/google/cloud/genomics/dataflow/utils/AnnotationUtils.java index a52adc0..32a43f9 100644 --- a/src/main/java/com/google/cloud/genomics/dataflow/utils/AnnotationUtils.java +++ b/src/main/java/com/google/cloud/genomics/dataflow/utils/AnnotationUtils.java @@ -15,7 +15,7 @@ import com.google.api.client.util.Preconditions; import com.google.api.services.genomics.model.Annotation; -import com.google.api.services.genomics.model.TranscriptExon; +import com.google.api.services.genomics.model.Exon; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Range; @@ -77,7 +77,7 @@ public enum VariantEffect { SYNONYMOUS_SNP, STOP_GAIN, STOP_LOSS, NONSYNONYMOUS_ */ public static VariantEffect determineVariantTranscriptEffect( long variantStart, String allele, Annotation transcript, String transcriptBases) { - long txLen = transcript.getPosition().getEnd() - transcript.getPosition().getStart(); + long txLen = transcript.getEnd() - transcript.getStart(); Preconditions.checkArgument(transcriptBases.length() == txLen, "transcriptBases must have equal length to the transcript; got " + transcriptBases.length() + " and " + txLen + ", respectively"); @@ -96,22 +96,22 @@ public static VariantEffect determineVariantTranscriptEffect( Range codingRange = Range.closedOpen( transcript.getTranscript().getCodingSequence().getStart(), transcript.getTranscript().getCodingSequence().getEnd()); - if (Boolean.TRUE.equals(transcript.getPosition().getReverseStrand())) { + if (Boolean.TRUE.equals(transcript.getReverseStrand())) { allele = SequenceUtil.reverseComplement(allele); } - for (TranscriptExon exon : transcript.getTranscript().getExons()) { + for (Exon exon : transcript.getTranscript().getExons()) { // For now, only compute effects on variants within the coding region of an exon. Range exonRange = Range.closedOpen(exon.getStart(), exon.getEnd()); if (exonRange.isConnected(codingRange) && exonRange.intersection(codingRange).isConnected(variantRange) && !exonRange.intersection(codingRange).intersection(variantRange).isEmpty()) { // Get the bases which correspond to this exon. - int txOffset = transcript.getPosition().getStart().intValue(); + int txOffset = transcript.getStart().intValue(); String exonBases = transcriptBases.substring( exon.getStart().intValue() - txOffset, exon.getEnd().intValue() - txOffset); int variantExonOffset = (int) (variantStart - exon.getStart()); - if (Boolean.TRUE.equals(transcript.getPosition().getReverseStrand())) { + if (Boolean.TRUE.equals(transcript.getReverseStrand())) { // Normalize the offset and bases to 5' -> 3'. exonBases = SequenceUtil.reverseComplement(exonBases); variantExonOffset = (int) (exon.getEnd() - variantEnd); @@ -122,7 +122,7 @@ public static VariantEffect determineVariantTranscriptEffect( LOG.fine("exon lacks frame data, cannot determine effect"); return null; } - int offsetWithinCodon = (variantExonOffset + exon.getFrame().getValue()) % 3; + int offsetWithinCodon = (variantExonOffset + exon.getFrame()) % 3; int codonExonOffset = variantExonOffset - offsetWithinCodon; if (codonExonOffset < 0 || exonBases.length() <= codonExonOffset+3) { LOG.fine("variant codon spans multiple exons, this case is not yet handled"); diff --git a/src/test/java/com/google/cloud/genomics/dataflow/pipelines/CalculateCoverageTest.java b/src/test/java/com/google/cloud/genomics/dataflow/pipelines/CalculateCoverageTest.java index 13bd8a8..16824d9 100644 --- a/src/test/java/com/google/cloud/genomics/dataflow/pipelines/CalculateCoverageTest.java +++ b/src/test/java/com/google/cloud/genomics/dataflow/pipelines/CalculateCoverageTest.java @@ -17,7 +17,6 @@ import com.google.api.services.genomics.model.Annotation; import com.google.api.services.genomics.model.Position; -import com.google.api.services.genomics.model.RangePosition; import com.google.cloud.dataflow.sdk.Pipeline; import com.google.cloud.dataflow.sdk.options.PipelineOptionsFactory; import com.google.cloud.dataflow.sdk.testing.DataflowAssert; @@ -244,29 +243,27 @@ public void testCalculateCoverage() throws Exception { List expectedOutput = Lists.newArrayList(); Annotation a1 = new Annotation() .setAnnotationSetId("123") - .setPosition(new RangePosition() - .setStart(0L) - .setEnd(2L) - .setReferenceName("1")) + .setStart(0L) + .setEnd(2L) + .setReferenceName("1") .setType("GENERIC") - .setInfo(new HashMap>()); - a1.getInfo().put("L", Lists.newArrayList("1.0", "1.0", "3.5")); - a1.getInfo().put("M", Lists.newArrayList("1.5", "1.5", "2.0")); - a1.getInfo().put("H", Lists.newArrayList("0.5", "0.5", "0.5")); - a1.getInfo().put("A", Lists.newArrayList("2.5", "3.0", "3.5")); + .setInfo(new HashMap>()); + a1.getInfo().put("L", Lists.newArrayList((Object) 1.0, 1.0, 3.5)); + a1.getInfo().put("M", Lists.newArrayList((Object) 1.5, 1.5, 2.0)); + a1.getInfo().put("H", Lists.newArrayList((Object) 0.5, 0.5, 0.5)); + a1.getInfo().put("A", Lists.newArrayList((Object) 2.5, 3.0, 3.5)); expectedOutput.add(a1); Annotation a2 = new Annotation() .setAnnotationSetId("123") - .setPosition(new RangePosition() - .setStart(2L) - .setEnd(4L) - .setReferenceName("1")) + .setStart(2L) + .setEnd(4L) + .setReferenceName("1") .setType("GENERIC") - .setInfo(new HashMap>()); - a2.getInfo().put("L", Lists.newArrayList("1.0", "1.0", "3.0")); - a2.getInfo().put("M", Lists.newArrayList("0.5", "1.5", "1.5")); - a2.getInfo().put("H", Lists.newArrayList("0.5", "1.0", "1.0")); - a2.getInfo().put("A", Lists.newArrayList("2.0", "3.0", "3.0")); + .setInfo(new HashMap>()); + a2.getInfo().put("L", Lists.newArrayList((Object) 1.0, 1.0, 3.0)); + a2.getInfo().put("M", Lists.newArrayList((Object) 0.5, 1.5, 1.5)); + a2.getInfo().put("H", Lists.newArrayList((Object) 0.5, 1.0, 1.0)); + a2.getInfo().put("A", Lists.newArrayList((Object) 2.0, 3.0, 3.0)); expectedOutput.add(a2); CalculateCoverage.Options popts = PipelineOptionsFactory.create().as( CalculateCoverage.Options.class); diff --git a/src/test/java/com/google/cloud/genomics/dataflow/utils/AnnotationUtilsTest.java b/src/test/java/com/google/cloud/genomics/dataflow/utils/AnnotationUtilsTest.java index ea07ca4..f3cb18b 100644 --- a/src/test/java/com/google/cloud/genomics/dataflow/utils/AnnotationUtilsTest.java +++ b/src/test/java/com/google/cloud/genomics/dataflow/utils/AnnotationUtilsTest.java @@ -19,11 +19,9 @@ import static org.junit.Assert.assertNull; import com.google.api.services.genomics.model.Annotation; -import com.google.api.services.genomics.model.Int32Value; -import com.google.api.services.genomics.model.RangePosition; +import com.google.api.services.genomics.model.CodingSequence; +import com.google.api.services.genomics.model.Exon; import com.google.api.services.genomics.model.Transcript; -import com.google.api.services.genomics.model.TranscriptCodingSequence; -import com.google.api.services.genomics.model.TranscriptExon; import com.google.cloud.genomics.dataflow.utils.AnnotationUtils.VariantEffect; import com.google.common.base.Strings; import com.google.common.collect.ImmutableList; @@ -39,11 +37,13 @@ public class AnnotationUtilsTest { @Test public void testDetermineVariantTranscriptEffect_simpleShort() { Annotation transcript = new Annotation() - .setPosition(new RangePosition().setReferenceName("1").setStart(2L).setEnd(9L)) + .setReferenceName("1") + .setStart(2L) + .setEnd(9L) .setTranscript(new Transcript() - .setCodingSequence(new TranscriptCodingSequence().setStart(2L).setEnd(9L)) + .setCodingSequence(new CodingSequence().setStart(2L).setEnd(9L)) .setExons(ImmutableList.of( - new TranscriptExon().setStart(2L).setEnd(9L).setFrame(new Int32Value().setValue(0))))); + new Exon().setStart(2L).setEnd(9L).setFrame(0)))); assertEquals("GATTACA -> GCTTACA, codon is GAT -> GCT, AA is D -> A", VariantEffect.NONSYNONYMOUS_SNP, @@ -64,13 +64,15 @@ public void testDetermineVariantTranscriptEffect_simpleShort() { @Test public void testDetermineVariantTranscriptEffect_reverseStrand() { Annotation transcript = new Annotation() - .setPosition( - new RangePosition().setReferenceName("1").setStart(2L).setEnd(20L).setReverseStrand(true)) + .setReferenceName("1") + .setStart(2L) + .setEnd(20L) + .setReverseStrand(true) .setTranscript(new Transcript() - .setCodingSequence(new TranscriptCodingSequence().setStart(3L).setEnd(18L)) + .setCodingSequence(new CodingSequence().setStart(3L).setEnd(18L)) .setExons(ImmutableList.of( - new TranscriptExon().setStart(2L).setEnd(7L).setFrame(new Int32Value().setValue(2)), - new TranscriptExon().setStart(10L).setEnd(20L).setFrame(new Int32Value().setValue(1))) + new Exon().setStart(2L).setEnd(7L).setFrame(2), + new Exon().setStart(10L).setEnd(20L).setFrame(1)) )); String bases = SequenceUtil.reverseComplement( @@ -97,9 +99,11 @@ public void testDetermineVariantTranscriptEffect_reverseStrand() { @Test public void testDetermineVariantTranscriptEffect_noncoding() { Annotation transcript = new Annotation() - .setPosition(new RangePosition().setReferenceName("1").setStart(2L).setEnd(9L)) + .setReferenceName("1") + .setStart(2L) + .setEnd(9L) .setTranscript(new Transcript() - .setExons(ImmutableList.of(new TranscriptExon().setStart(2L).setEnd(9L)))); + .setExons(ImmutableList.of(new Exon().setStart(2L).setEnd(9L)))); assertNull(AnnotationUtils.determineVariantTranscriptEffect(3L, "C", transcript, "GATTACA")); assertNull(AnnotationUtils.determineVariantTranscriptEffect(11L, "C", transcript, "GATTACA")); @@ -108,10 +112,12 @@ public void testDetermineVariantTranscriptEffect_noncoding() { @Test public void testDetermineVariantTranscriptEffect_frameless() { Annotation transcript = new Annotation() - .setPosition(new RangePosition().setReferenceName("1").setStart(2L).setEnd(9L)) + .setReferenceName("1") + .setStart(2L) + .setEnd(9L) .setTranscript(new Transcript() - .setCodingSequence(new TranscriptCodingSequence().setStart(2L).setEnd(9L)) - .setExons(ImmutableList.of(new TranscriptExon().setStart(2L).setEnd(9L)))); + .setCodingSequence(new CodingSequence().setStart(2L).setEnd(9L)) + .setExons(ImmutableList.of(new Exon().setStart(2L).setEnd(9L)))); assertNull(AnnotationUtils.determineVariantTranscriptEffect(3L, "C", transcript, "GATTACA")); assertNull(AnnotationUtils.determineVariantTranscriptEffect(11L, "C", transcript, "GATTACA")); @@ -121,14 +127,16 @@ public void testDetermineVariantTranscriptEffect_frameless() { public void testDetermineVariantTranscriptEffect_multiExon() { String bases = Strings.repeat("ACTTGGGTCA", 60); Annotation transcript = new Annotation() - .setPosition(new RangePosition().setReferenceName("1").setStart(100L).setEnd(700L)) + .setReferenceName("1") + .setStart(100L) + .setEnd(700L) .setTranscript(new Transcript() - .setCodingSequence(new TranscriptCodingSequence().setStart(250L).setEnd(580L)) + .setCodingSequence(new CodingSequence().setStart(250L).setEnd(580L)) .setExons(ImmutableList.of( - new TranscriptExon().setStart(100L).setEnd(180L), - new TranscriptExon().setStart(200L).setEnd(300L).setFrame(new Int32Value().setValue(2)), - new TranscriptExon().setStart(400L).setEnd(500L).setFrame(new Int32Value().setValue(1)), - new TranscriptExon().setStart(550L).setEnd(600L).setFrame(new Int32Value().setValue(0))) + new Exon().setStart(100L).setEnd(180L), + new Exon().setStart(200L).setEnd(300L).setFrame(2), + new Exon().setStart(400L).setEnd(500L).setFrame(1), + new Exon().setStart(550L).setEnd(600L).setFrame(0)) )); assertNull("mutates noncoding exon", diff --git a/src/test/java/com/google/cloud/genomics/dataflow/utils/DataUtils.java b/src/test/java/com/google/cloud/genomics/dataflow/utils/DataUtils.java index b8c75f2..40fe973 100644 --- a/src/test/java/com/google/cloud/genomics/dataflow/utils/DataUtils.java +++ b/src/test/java/com/google/cloud/genomics/dataflow/utils/DataUtils.java @@ -13,32 +13,31 @@ */ package com.google.cloud.genomics.dataflow.utils; -import com.google.api.services.genomics.model.Call; import com.google.api.services.genomics.model.Variant; -import com.google.genomics.v1.VariantCall; +import com.google.api.services.genomics.model.VariantCall; import java.util.Arrays; import java.util.List; public class DataUtils { - public static Call makeCall(String name, Integer... alleles) { - return new Call().setCallSetName(name).setGenotype(Arrays.asList(alleles)); + public static VariantCall makeCall(String name, Integer... alleles) { + return new VariantCall().setCallSetName(name).setGenotype(Arrays.asList(alleles)); } - public static VariantCall makeVariantCall(String name, Integer... alleles) { - return VariantCall.newBuilder() + public static com.google.genomics.v1.VariantCall makeVariantCall(String name, Integer... alleles) { + return com.google.genomics.v1.VariantCall.newBuilder() .setCallSetName(name) .addAllGenotype(Arrays.asList(alleles)) .build(); } - public static Variant makeSimpleVariant(Call... calls) { + public static Variant makeSimpleVariant(VariantCall... calls) { return new Variant().setCalls(Arrays.asList(calls)); } public static Variant makeVariant(String referenceName, long start, long end, - String referenceBases, List alternateBases, Call... calls) { + String referenceBases, List alternateBases, VariantCall... calls) { Variant variant = new Variant().setReferenceName(referenceName).setStart(start).setEnd(end) .setReferenceBases(referenceBases).setAlternateBases(alternateBases);