static String buildSVAlternate(String alternate, Integer end, StructuralVariation sv) { if (sv != null) { if (StructuralVariantType.TANDEM_DUPLICATION.equals(sv.getType())) { alternate = VariantBuilder.DUP_TANDEM_ALT; } alternate = alternate + SV_ALTERNATE_SEPARATOR + end + SV_ALTERNATE_SEPARATOR + (sv.getCiStartLeft() == null ? 0 : sv.getCiStartLeft()) + SV_ALTERNATE_SEPARATOR + (sv.getCiStartRight() == null ? 0 : sv.getCiStartRight()) + SV_ALTERNATE_SEPARATOR + (sv.getCiEndLeft() == null ? 0 : sv.getCiEndLeft()) + SV_ALTERNATE_SEPARATOR + (sv.getCiEndRight() == null ? 0 : sv.getCiEndRight()); if (StringUtils.isNotEmpty(sv.getLeftSvInsSeq()) || StringUtils.isNotEmpty(sv.getRightSvInsSeq())) { alternate = alternate + SV_ALTERNATE_SEPARATOR + sv.getLeftSvInsSeq() + SV_ALTERNATE_SEPARATOR + sv.getRightSvInsSeq(); } } return alternate; }
@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 VariantBuilder setCiEnd(int left, int right) { initSv(); sv.setCiEndLeft(left); sv.setCiEndRight(right); return this; }
public VariantBuilder setCiStart(int left, int right) { initSv(); sv.setCiStartLeft(left); sv.setCiStartRight(right); return this; }
add(put, VariantPhoenixHelper.VariantColumn.TYPE, variant.getType().toString()); if (variant.getSv() != null) { if (variant.getSv().getCiStartLeft() != null) { add(put, VariantPhoenixHelper.VariantColumn.CI_START_L, variant.getSv().getCiStartLeft()); if (variant.getSv().getCiStartRight() != null) { add(put, VariantPhoenixHelper.VariantColumn.CI_START_R, variant.getSv().getCiStartRight()); if (variant.getSv().getCiEndLeft() != null) { add(put, VariantPhoenixHelper.VariantColumn.CI_END_L, variant.getSv().getCiEndLeft()); if (variant.getSv().getCiEndRight() != null) { add(put, VariantPhoenixHelper.VariantColumn.CI_END_R, variant.getSv().getCiEndRight());
private Variant newVariant(Variant variant, VariantKeyFields keyFields, StructuralVariation sv) { Variant normalizedVariant = new Variant(variant.getChromosome(), keyFields.getStart(), keyFields.getEnd(), keyFields.getReference(), keyFields.getAlternate()) .setId(variant.getId()) .setNames(variant.getNames()) .setStrand(variant.getStrand()); if (sv != null) { if (normalizedVariant.getSv() != null) { // CI positions may change during the normalization. Update them. normalizedVariant.getSv().setCiStartLeft(sv.getCiStartLeft()); normalizedVariant.getSv().setCiStartRight(sv.getCiStartRight()); normalizedVariant.getSv().setCiEndLeft(sv.getCiEndLeft()); normalizedVariant.getSv().setCiEndRight(sv.getCiEndRight()); } else { normalizedVariant.setSv(sv); } // Variant will never have CopyNumber, because the Alternate is normalized from <CNxx> to <CNV> normalizedVariant.getSv().setCopyNumber(keyFields.getCopyNumber()); normalizedVariant.getSv().setType(VariantBuilder.getCNVSubtype(keyFields.getCopyNumber())); } return normalizedVariant; // normalizedVariant.setAnnotation(variant.getAnnotation()); // if (isSymbolic(variant)) { // StructuralVariation sv = getStructuralVariation(normalizedVariant, keyFields, null); // normalizedVariant.setSv(sv); // } }
private static StructuralVariation getMateStructuralVariation(Variant variant) { StructuralVariation structuralVariation = new StructuralVariation(); // Check whether mate has CIPOS if (variant.getSv().getBreakend().getMate().getCiPositionLeft() != null && variant.getSv().getBreakend().getMate().getCiPositionRight() != null) { structuralVariation.setCiStartLeft(variant.getSv().getBreakend().getMate().getCiPositionLeft()); structuralVariation.setCiStartRight(variant.getSv().getBreakend().getMate().getCiPositionRight()); } Breakend breakend = new Breakend(new BreakendMate(variant.getChromosome(), variant.getStart(), variant.getSv().getCiStartLeft() != null ? variant.getSv().getCiStartLeft() : null, variant.getSv().getCiStartRight() != null ? variant.getSv().getCiStartRight() : null), getMateOrientation(variant), null); structuralVariation.setBreakend(breakend); return structuralVariation; }
StructuralVariation structuralVariation = new StructuralVariation(); VariantAnnotation annotation; switch (subtype) { variant = new Variant(fields[CHR_COLUMN], Integer.valueOf(fields[START_COLUMN]), Integer.valueOf(fields[END_COLUMN]), UNKNOWN_NT, DUPLICATION_ALTERNATE_STR); structuralVariation.setType(StructuralVariantType.TANDEM_DUPLICATION); annotation = parseAnnotation(fields, variant); break; variant = new Variant(fields[CHR_COLUMN], Integer.valueOf(fields[START_COLUMN]), Integer.valueOf(fields[END_COLUMN]), UNKNOWN_NT, CNV_STR); structuralVariation.setType(StructuralVariantType.COPY_NUMBER_GAIN); annotation = parseAnnotation(fields, variant); break; variant = new Variant(fields[CHR_COLUMN], Integer.valueOf(fields[START_COLUMN]), Integer.valueOf(fields[END_COLUMN]), UNKNOWN_NT, CNV_STR); structuralVariation.setType(StructuralVariantType.COPY_NUMBER_LOSS); annotation = parseAnnotation(fields, variant); break; structuralVariation.setCiStartLeft(variant.getStart()); structuralVariation.setCiStartRight(variant.getStart()); structuralVariation.setCiEndLeft(variant.getEnd()); structuralVariation.setCiEndRight(variant.getEnd());
sv.setLeftSvInsSeq(value); sv.setRightSvInsSeq(value); sv.setCiStartLeft(start + Integer.parseInt(parts[0])); sv.setCiStartRight(start + Integer.parseInt(parts[1])); break; case CIEND_INFO: parts = value.split(","); sv.setCiEndLeft(end + Integer.parseInt(parts[0])); sv.setCiEndRight(end + Integer.parseInt(parts[1])); break;
public Variant buildVariant(String variantId, int end, String reference, String alternate) { String[] split = variantId.split(SEPARATOR, -1); String chr = split[CHR].trim(); int start = Integer.parseInt(split[POS].trim()); StructuralVariation sv = buildSv(split, reference, alternate); if (StringUtils.contains(alternate, INS_SEQ_SEPARATOR)) { String[] alternateSplit = StringUtils.splitPreserveAllTokens(alternate, INS_SEQ_SEPARATOR); alternate = alternateSplit[0]; if (sv == null) { sv = new StructuralVariation(); } sv.setLeftSvInsSeq(alternateSplit[1]); sv.setRightSvInsSeq(alternateSplit[2]); } Variant variant = new Variant(chr, start, end, reference, alternate); if (sv != null) { if (variant.getSv() != null && variant.getSv().getType() != null) { sv.setType(variant.getSv().getType()); } variant.setSv(sv); } return variant; }
@Test public void cnv() { // CNV Variant v = new Variant("1", 1000, 2000, "A", "<CN5>"); assertEquals(" 1: 1000:A:<CN5>", converter.buildId(v)); assertEquals(v, converter.buildVariant(converter.buildId(v), 2000, "A", "<CN5>")); v.getSv().setCiStartLeft(999); v.getSv().setCiStartRight(1010); assertEquals(" 1: 1000:A:<CN5>:999:1010::", converter.buildId(v)); assertEquals(v, converter.buildVariant(converter.buildId(v), 2000, "A", "<CN5>")); v.getSv().setCiEndLeft(1999); v.getSv().setCiEndRight(2010); assertEquals(" 1: 1000:A:<CN5>:999:1010:1999:2010", converter.buildId(v)); assertEquals(v, converter.buildVariant(converter.buildId(v), 2000, "A", "<CN5>")); }
private Region startBreakpointToRegion(Variant variant) { if (imprecise && variant.getSv() != null) { return new Region(variant.getChromosome(), variant.getSv().getCiStartLeft() != null ? variant.getSv().getCiStartLeft() - svExtraPadding : variant.getStart(), variant.getSv().getCiStartRight() != null ? variant.getSv().getCiStartRight() + svExtraPadding : variant.getStart()); } else { return new Region(variant.getChromosome(), variant.getStart(), variant.getStart()); } }
if (imprecise && variant.getSv() != null) { return Collections.singletonList(new Region(variant.getChromosome(), variant.getSv().getCiStartLeft() != null ? variant.getSv().getCiStartLeft() - svExtraPadding : variant.getStart(), variant.getSv().getCiEndRight() != null ? variant.getSv().getCiEndRight() + svExtraPadding : variant.getEnd())); } else {
protected int getStart(int extraPadding) { if (imprecise && variant.getSv() != null) { return variant.getSv().getCiStartLeft() != null ? variant.getSv().getCiStartLeft() - extraPadding : variant.getStart(); } else { return variant.getStart(); } }
private void initSv() { // Do not initialize any value by default if (sv == null) { sv = new StructuralVariation(); } // if (sv == null) { // sv = new StructuralVariation(start, start, end, end, null, null, null, null); // } else { // if (sv.getCiStartLeft() == null) { // sv.setCiStartLeft(start); // } // if (sv.getCiStartRight() == null) { // sv.setCiStartRight(start); // } // if (sv.getCiEndLeft() == null) { // sv.setCiEndLeft(end); // } // if (sv.getCiEndRight() == null) { // sv.setCiEndRight(end); // } // } }
private Integer getEnd(Variant variant) { if (imprecise && variant.getSv() != null) { return variant.getSv().getCiStartRight() != null ? variant.getSv().getCiStartRight() + svExtraPadding : variant.getStart(); } else { return variant.getStart(); } }
protected int getEnd(int extraPadding) { if (imprecise && variant.getSv() != null) { return variant.getSv().getCiEndRight() != null ? variant.getSv().getCiEndRight() + extraPadding : variant.getEnd(); } else { return variant.getEnd(); } }
@Override public List<String> buildAlleles(Variant variant, Pair<Integer, Integer> adjustedRange, Map<Integer, Character> referenceAlleles) { String reference = variant.getReference(); String alternate = variant.getAlternate(); if (variant.getSv() != null && variant.getSv().getType() == StructuralVariantType.TANDEM_DUPLICATION && alternate.equals(VariantBuilder.DUP_ALT)) { alternate = VariantBuilder.DUP_TANDEM_ALT; } if (variant.getType().equals(VariantType.NO_VARIATION)) { return Arrays.asList(reference, "."); } StudyEntry study = getStudy(variant); List<AlternateCoordinate> secAlts = study.getSecondaryAlternates(); List<String> alleles = new ArrayList<>(secAlts.size() + 2); int origStart = variant.getStart(); int origEnd; if (variant.getLength() == Variant.UNKNOWN_LENGTH) { // Variant::getLengthReference would return UNKNOWN_LENGTH, as the reference could have incomplete reference length origEnd = variant.getStart() + variant.getReference().length() - 1; } else { origEnd = variant.getEnd(); } alleles.add(buildAllele(variant.getChromosome(), origStart, origEnd, reference, adjustedRange, referenceAlleles)); alleles.add(buildAllele(variant.getChromosome(), origStart, origEnd, alternate, adjustedRange, referenceAlleles)); secAlts.forEach(alt -> { int alternateStart = alt.getStart() == null ? variant.getStart() : alt.getStart().intValue(); int alternateEnd = alt.getEnd() == null ? variant.getEnd() : alt.getEnd().intValue(); alleles.add(buildAllele(variant.getChromosome(), alternateStart, alternateEnd, alt.getAlternate(), adjustedRange, referenceAlleles)); }); return alleles; }
default: if (imprecise && variant.getSv() != null) { regionList.add(new Region(variant.getChromosome(), variant.getSv().getCiStartLeft() != null ? variant.getSv().getCiStartLeft() - svExtraPadding : variant.getStart(), variant.getSv().getCiStartRight() != null ? variant.getSv().getCiStartRight() + svExtraPadding : variant.getStart())); regionList.add(new Region(variant.getChromosome(), variant.getSv().getCiEndLeft() != null ? variant.getSv().getCiEndLeft() - svExtraPadding : variant.getEnd(), variant.getSv().getCiEndRight() != null ? variant.getSv().getCiEndRight() + svExtraPadding : variant.getEnd())); } else { regionList.add(new Region(variant.getChromosome(), variant.getStart(), variant.getStart()));
private void parseStart(String start, String variantString) { if (StringUtils.contains(start, '<')) { String[] split = start.split("<", -1); if (split.length != 3) { throw new IllegalArgumentException("Error parsing start from variant " + variantString + ". Expected 3 fields separated by '<'. " + "Format: \"" + VARIANT_STRING_FORMAT + "\""); } initSv(); if (!split[0].isEmpty()) { sv.setCiStartLeft(Integer.parseInt(split[0])); } setStart(Integer.parseInt(split[1])); if (!split[2].isEmpty()) { sv.setCiStartRight(Integer.parseInt(split[2])); } } else { setStart(Integer.parseInt(start)); } }