public Variant(String chromosome, int start, int end, String reference, String alternate, String strand) { this(); new VariantBuilder(chromosome, start, end, reference, alternate).setStrand(strand).build(this); }
public VariantBuilder setFormat(String... format) { return setFormat(Arrays.asList(format)); }
private void checkStudy(String method) { if (!hasStudyId()) { setStudyId(""); // throw new IllegalArgumentException("Can not " + method + " without study."); } }
public static Variant newVariant(String chromosome, int start, int end, String reference, String alternate, Integer fileId, Integer studyId) { int pad = (fileId - 1) * NUM_SAMPLES; return Variant.newBuilder() .setChromosome(chromosome) .setStart(start) .setEnd(end) .setReference(reference) .setAlternate(alternate) .setStudyId(studyId.toString()) .setFileId(fileId.toString()) .setFilter("PASS_" + fileId) .setQuality(fileId * 100.0) .addAttribute("AD", "1,2") .setFormat("GT", "DP", "GQX", "AD") .addSample("S" + (1 + pad), "./.", String.valueOf(11 + pad), "0.7", "1,2") .addSample("S" + (2 + pad), "1/1", String.valueOf(12 + pad), "0.7", "1,2") .addSample("S" + (3 + pad), "0/0", String.valueOf(13 + pad), "0.7", "1,2") .addSample("S" + (4 + pad), "1/0", String.valueOf(14 + pad), "0.7", "1,2").build(); }
.setChromosome(variantContext.getContig()) .setStart(variantContext.getStart()) .setEnd(variantContext.getEnd()) .setStudyId(studyId) .setFileId(fileId); builder.setReference(reference); if (alternateAlleleList.isEmpty()) { alternates = Collections.singletonList(""); builder.setAlternate(""); } else { alternates = new ArrayList<>(alternateAlleleList.size()); builder.setAlternates(alternates); builder.setIds(ids); builder.setType(VariantType.NO_VARIATION); builder.addAttribute(key, variantContext.getAttributeAsList(key)); } else { builder.addAttribute(key, variantContext.getAttributeAsString(key, "")); builder.setQuality(variantContext.getPhredScaledQual()); builder.setFilter(VCFConstants.UNFILTERED); } else if (filter.isEmpty()) { builder.setFilter(VCFConstants.PASSES_FILTERS_v4);
@SuppressWarnings("unchecked") public static List<Variant> createFile2Variants(String chromosome, String fileId, String studyId) { List<Variant> variants = new LinkedList<>(); variants.add(Variant.newBuilder(chromosome, 1000, 1000, "A", "C") .setStudyId(studyId) .setFileId(fileId) .setFormat("GT", "DP", "GQX") .addSample("NA19600", "./.", "1", "0.7") .addSample("NA19660", "1/1", "2", "0.7") .addSample("NA19661", "0/0", "3", "0.7") .addSample("NA19685", "1/0", "4", "0.7") .build()); variants.add(Variant.newBuilder(chromosome, 1004, 1004, "A", "C") .setStudyId(studyId) .setFileId(fileId) .setFormat("GT", "DP", "GQX") .addSample("NA19600", "0/1", "1", "0.7") .addSample("NA19660", "0/0", "2", ".") .addSample("NA19661", "1/0", "3", "0.7") .addSample("NA19685", "0/0", "4", "..") .build()); return variants; }
private VariantOverlappingStatus processVariantFile(Variant variant, Set<Integer> missingSamples, Put put, Integer fileId, VariantOverlappingStatus overlappingStatus, String gt) { LinkedHashMap<String, Integer> samplePosition = getSamplePosition(fileId); List<List<String>> samplesData = new ArrayList<>(samplePosition.size()); for (int i = 0; i < samplePosition.size(); i++) { samplesData.add(Collections.singletonList(gt)); } VariantBuilder builder = Variant.newBuilder( variant.getChromosome(), variant.getStart(), variant.getEnd(), variant.getReference(), variant.getAlternate()) .setStudyId(String.valueOf(studyConfiguration.getStudyId())) .setFormat("GT") .setFileId(fileId.toString()) .setSamplesPosition(samplePosition) .setSamplesData(samplesData); studyConverter.convert(builder.build(), put, missingSamples, overlappingStatus); return overlappingStatus; }
@Test public void test() throws Exception { Variant expectedVariant = Variant.newBuilder("chr1:1000:A:T") .setStudyId("1") .setFileId("5") .setFormat("GT", "AD", "DP") .addSample("S1", "0/0", "10,1", "11") .addSample("S2", "1/1", "1,2", "1") .setFilter("PASS") .setQuality(200.0) .addAttribute("k1", "v1") .build(); .setStudyId("2") .setFileId("6") .setFormat("GT", "AD", "DP", "AN") .addSample("S3", "1/0", "12,2", "22", "dole-se") .setFilter("PASS:Low") .setQuality(210.0) .addAttribute("k2", "v2") .addAttribute("k22", "v22") .build();
@Test public void isRefVariantTest() throws Exception { assertTrue(VariantToVcfSliceConverterTask.isRefVariant(new VariantBuilder("1:100:A:C").setFormat("GT").addSample("S1", "0/0").build())); assertTrue(VariantToVcfSliceConverterTask.isRefVariant(new VariantBuilder("1:100:A:C").setFormat("GT").addSample("S1", "0/0").addSample("S2", "0").build())); assertFalse(VariantToVcfSliceConverterTask.isRefVariant(new VariantBuilder("1:100:A:C").setFormat("GT").addSample("S1", "0/0").addSample("S2", "0/1").build())); assertFalse(VariantToVcfSliceConverterTask.isRefVariant(new VariantBuilder("1:100:A:C").setFormat("GT").addSample("S1", "0/1").addSample("S2", "0/0").build())); assertFalse(VariantToVcfSliceConverterTask.isRefVariant(new VariantBuilder("1:100:A:C").setFormat("GT").addSample("S1", "0/1").addSample("S2", "0/1").build())); assertFalse(VariantToVcfSliceConverterTask.isRefVariant(new VariantBuilder("1:100:A:C").setFormat("GT").addSample("S1", "./.").build())); } }
VariantBuilder builder = new VariantBuilder(chromosome, start, end, reference, alternate); builder.setSvInsSeq(insSeqL, insSeqR); builder.setCiStart(ciStartL, ciStartR); builder.setCiEnd(ciEndL, ciEndR); builder.setType(VariantType.valueOf(type)); return builder.build();
public void inferSV() { if (isSV(type)) { initSv(); switch (type) { Breakend bnd = parseBreakend(reference, alternates.get(0)); if (bnd != null) { sv.setBreakend(bnd); Integer copyNumber = getCopyNumberFromAlternate(alternates.get(0)); if (copyNumber == null) { copyNumber = getCopyNumberFromFormat(); sv.setType(getCNVSubtype(copyNumber));
/** * Creates a variant parsing a string. * * Format : (chr):(start)[-(end)][:(ref)]:(alt) * * @see VariantBuilder * @param variantString Variant string * @throws IllegalArgumentException if the variant does not match with the pattern */ public Variant(String variantString) { this(); new VariantBuilder(variantString).build(this); }
private void prepare() { checkParams(); type = inferType(reference, alternates.get(0)); end = attributeEnd; } else if (!Objects.equals(end, attributeEnd)) { throw new IllegalArgumentException("Conflict END position at variant " + toString() + ". " + "Variant end = '" + end + "', " + "file attribute END = '" + attributeEnd + "'"); end = start + inferLengthReference(reference, alternates.get(0), type, length) - 1; inferSV(); length = inferLength(reference, alternates.get(0), start, end, type); + toString());
public VariantBuilder setFilter(String filter) { addAttribute(StudyEntry.FILTER, filter); return this; }
@Deprecated public static StructuralVariation getStructuralVariation(Variant variant, StructuralVariantType tandemDuplication) { int[] impreciseStart = getImpreciseStart(variant); int[] impreciseEnd = getImpreciseEnd(variant); String[] svInsSeq = getSvInsSeq(variant); StructuralVariation sv = new StructuralVariation(); sv.setCiStartLeft(impreciseStart[0]); sv.setCiStartRight(impreciseStart[1]); sv.setCiEndLeft(impreciseEnd[0]); sv.setCiEndRight(impreciseEnd[1]); sv.setLeftSvInsSeq(svInsSeq[0]); sv.setRightSvInsSeq(svInsSeq[1]); // If it's not a tandem duplication, this will set the type to null sv.setType(tandemDuplication); // Will properly set the type if it's a CNV if (variant.getType().equals(VariantType.CNV)) { Integer copyNumber = getCopyNumberFromAlternate(variant.getAlternate()); if (copyNumber != null) { sv.setCopyNumber(copyNumber); sv.setType(getCNVSubtype(copyNumber)); } } return sv; }
public Variant build() { return build(null); }
public VariantProto.Variant buildProtoVariant(VariantProto.VariantOrBuilder reuse) { prepare(); .setReference(reference) .setAlternate(alternates.get(0)) .setType(getProtoVariantType(type)) .setLength(length) .setStrand(strand); ifNotNull(sv.getCiStartLeft(), svBuilder::setCiStartLeft); ifNotNull(sv.getCiStartRight(), svBuilder::setCiStartRight); ifNotNull(sv.getCiEndLeft(), svBuilder::setCiEndLeft); ifNotNull(sv.getCiEndRight(), svBuilder::setCiEndRight); ifNotNull(sv.getCopyNumber(), svBuilder::setCopyNumber); ifNotNull(sv.getRightSvInsSeq(), svBuilder::setRightSvInsSeq); ifNotNull(sv.getLeftSvInsSeq(), svBuilder::setLeftSvInsSeq); ifNotNull(sv.getType(), type -> svBuilder.setType(VariantProto.StructuralVariantType.valueOf(sv.getType().toString()))); if (sv.getBreakend() != null) { Breakend bnd = sv.getBreakend(); VariantProto.Breakend.Builder bndBuilder = VariantProto.Breakend.newBuilder(); ifNotNull(bnd.getInsSeq(), bndBuilder::setInsSeq); ifNotNull(bnd.getMate().getChromosome(), bndMateBuilder::setChromosome); ifNotNull(bnd.getMate().getPosition(), bndMateBuilder::setPosition); ifNotNull(bnd.getMate().getCiPositionLeft(), bndMateBuilder::setCiPositionLeft); ifNotNull(bnd.getMate().getCiPositionRight(), bndMateBuilder::setCiPositionRight); bndBuilder.setMate(bndMateBuilder); ifNotNull(bnd.getOrientation(), type -> bndBuilder.setOrientation(VariantProto.BreakendOrientation.valueOf(type.toString())));
@Deprecated public static VariantType inferType(String reference, String alternate) { return VariantBuilder.inferType(reference, alternate); }
private StructuralVariation buildSv(String[] split, String reference, String alternate) { if (split.length == SV_SPLIT_LENGTH) { try { Breakend breakend = VariantBuilder.parseBreakend(reference, alternate); return new StructuralVariation( getInt(split, CI_POS_L), getInt(split, CI_POS_R), getInt(split, CI_END_L), getInt(split, CI_END_R), VariantBuilder.getCopyNumberFromAlternate(alternate), null, null, null, breakend); } catch (RuntimeException e) { for (String s : split) { // If any of the splits is non printable, the variantId had 4 colons in the SHA1 if (!StringUtils.isAsciiPrintable(s)) { return null; } } throw new IllegalArgumentException("Unable to build SV from " + String.join(SEPARATOR, split), e); } } else { return null; } }