/** * Create a list of alternates as Integers to speed up the creation of the VariantAlternateRearranger. * * The creation of the VariantAlternateRearranger makes a lot of comparitions among elements from the list of alternates. * Creating a list of hashCodes from the alternates, speeds up significantly the creation of the rearrangers. * @param alternates List of alternates * @return List of hashCodes for each alternate */ private List<Integer> alternatesToHash(List<AlternateCoordinate> alternates) { List<Integer> list = new ArrayList<>(alternates.size()); for (AlternateCoordinate a : alternates) { // list.add(Objects.hash(a.getChromosome(), a.getStart(), a.getEnd(), a.getReference(), a.getAlternate(), a.getType())); int result = 1; result = 31 * result + a.getChromosome().hashCode(); result = 31 * result + a.getStart().hashCode(); result = 31 * result + a.getEnd().hashCode(); result = 31 * result + a.getReference().hashCode(); result = 31 * result + a.getAlternate().hashCode(); result = 31 * result + a.getType().hashCode(); list.add(result); } return list; }
public static boolean isInsertion(AlternateCoordinate alt) { return isInsertion(alt.getType(), alt.getStart(), alt.getEnd()); }
public static boolean isDeletion(AlternateCoordinate alt) { return isDeletion(alt.getType(), alt.getStart(), alt.getEnd()); }
private String getSecondaryAlternates(Variant variant, StudyEntry studyEntry) { StringBuilder sb = new StringBuilder(); Iterator<AlternateCoordinate> iterator = studyEntry.getSecondaryAlternates().iterator(); while (iterator.hasNext()) { AlternateCoordinate alt = iterator.next(); sb.append(alt.getChromosome() == null ? variant.getChromosome() : alt.getChromosome()); sb.append(ALTERNATE_COORDINATE_SEPARATOR); sb.append(alt.getStart() == null ? variant.getStart() : alt.getStart()); sb.append(ALTERNATE_COORDINATE_SEPARATOR); sb.append(alt.getEnd() == null ? variant.getEnd() : alt.getEnd()); sb.append(ALTERNATE_COORDINATE_SEPARATOR); sb.append(alt.getReference() == null ? variant.getReference() : alt.getReference()); sb.append(ALTERNATE_COORDINATE_SEPARATOR); sb.append(alt.getAlternate() == null ? variant.getAlternate() : alt.getAlternate()); sb.append(ALTERNATE_COORDINATE_SEPARATOR); sb.append(alt.getType() == null ? variant.getType() : alt.getType()); if (iterator.hasNext()) { sb.append(','); } } return sb.toString(); }
/** * Build a list of all the alternates from a variant. Includes the main and the secondary alternates. * @param variant * @return */ public List<AlternateCoordinate> buildAltList(Variant variant) { AlternateCoordinate mainAlternate = getMainAlternate(variant); List<AlternateCoordinate> alternates = new ArrayList<>(); boolean emptyRefBlock = mainAlternate.getType().equals(VariantType.NO_VARIATION) && (mainAlternate.getAlternate().isEmpty() || mainAlternate.getAlternate().equals(Allele.NO_CALL_STRING)); // Skip Reference Blocks (NO_VARIATION) where the alternate is empty if (!emptyRefBlock) { alternates.add(mainAlternate); } StudyEntry se = getStudy(variant); if(se.getSecondaryAlternates() != null){ se.getSecondaryAlternates().forEach( alt -> alternates.add(copyAlt(variant, alt))); } return alternates; }
for (Iterator<AlternateCoordinate> iterator = currAlts.iterator(); iterator.hasNext();) { AlternateCoordinate alt = iterator.next(); if (alt.getType().equals(VariantType.NO_VARIATION)) { iterator.remove(); currAlts.add(alt);
alt.put(ALTERNATES_START, coordinate.getStart() != null ? coordinate.getStart() : variant.getStart()); alt.put(ALTERNATES_END, coordinate.getEnd() != null ? coordinate.getEnd() : variant.getEnd()); alt.put(ALTERNATES_TYPE, coordinate.getType() != null ? coordinate.getType().toString() : variant.getType().toString()); alternates.add(alt);
private static AlternateCoordinate copyAlt(Variant var, AlternateCoordinate orig) { AlternateCoordinate copy = new AlternateCoordinate(); copy.setChromosome(orig.getChromosome() == null ? var.getChromosome() : orig.getChromosome()); copy.setStart(orig.getStart() == null ? var.getStart() : orig.getStart()); copy.setEnd(orig.getEnd() == null ? var.getEnd() : orig.getEnd()); copy.setReference(orig.getReference() == null ? var.getReference() : orig.getReference()); copy.setAlternate(orig.getAlternate() == null ? var.getAlternate() : orig.getAlternate()); copy.setType(orig.getType() == null ? var.getType() : orig.getType()); return copy; }
.setReference(secAltRef) .setAlternate(secAltAlt) .setType(VariantBuilder.getProtoVariantType(alternate.getType())) .build());
public static Variant asVariant(Variant a, AlternateCoordinate altA) { String chr = ObjectUtils.firstNonNull(altA.getChromosome(), a.getChromosome()); Integer start = ObjectUtils.firstNonNull(altA.getStart(), a.getStart()); Integer end = ObjectUtils.firstNonNull(altA.getEnd(), a.getEnd()); String ref = ObjectUtils.firstNonNull(altA.getReference(), a.getReference()); String alt = ObjectUtils.firstNonNull(altA.getAlternate(), a.getAlternate()); VariantType type = ObjectUtils.firstNonNull(altA.getType(), a.getType()); try { Variant variant = new Variant(chr, start, end, ref, alt); variant.setType(type); return variant; } catch (IllegalArgumentException e) { String msg = altA + "\n" + a.toJson() + "\n"; throw new IllegalStateException(msg, e); } }