@Deprecated public static int htsExport(VariantDBIterator iterator, StudyConfiguration studyConfiguration, OutputStream outputStream, Query query, QueryOptions queryOptions) { VariantVcfDataWriter exporter = new VariantVcfDataWriter(studyConfiguration, outputStream, query, queryOptions); exporter.open(); exporter.pre(); iterator.forEachRemaining(exporter::write); exporter.post(); exporter.close(); return exporter.failedVariants; }
/** * Convert org.opencb.biodata.models.variant.Variant into a htsjdk.variant.variantcontext.VariantContext * some assumptions: * * splitted multiallelic variants will produce only one variantContexts. Merging is done * * If some normalization has been applied, the source entries may have an attribute ORI like: "POS:REF:ALT_0(,ALT_N)*:ALT_IDX" * * @param variant A variant object to be converted * @param studyConfiguration StudyConfiguration * @param annotations Variant annotation * @return The variant in HTSJDK format * TODO: Move to a separated converter */ public VariantContext convertVariantToVariantContext(Variant variant, StudyConfiguration studyConfiguration, List<String> annotations) { //, StudyConfiguration return convertVariantToVariantContext(variant, annotations); }
Pair<Integer, Integer> adjustedRange = adjustedVariantStart(variant); String[] ori = getOri(studyEntry); List<String> originalAlleles = getOriginalAlleles(ori); List<String> allelesArray; if (originalAlleles != null) { allelesArray = originalAlleles; } else { allelesArray = buildAlleles(variant, adjustedRange); if (originalAlleles != null && originalAlleles.size() > 2 && !"0".equals(getOriginalAlleleIndex(ori))) { logger.debug("Skip multi allelic variant! {}", variant); return null; addStats(studyEntry, attributes); addAnnotations(variant, annotations, attributes);
@Test public void adjustedVariantStart_SecAlt_INDEL() throws Exception { StudyConfiguration sc = new StudyConfiguration(1, "1"); VariantVcfDataWriter dw = new VariantVcfDataWriter(sc, null, null, null); Integer adjustStart = dw.adjustedVariantStart(createVariantSecAlt("1:123:A:C", "1:122:GG:-")).getLeft(); assertEquals("Adjusted start position wrong", Integer.valueOf(121), adjustStart); }
@Test public void buildAlleles_SecAlt_INDEL() throws Exception { StudyConfiguration sc = new StudyConfiguration(1, "1"); VariantVcfDataWriter dw = new VariantVcfDataWriter(sc, null, null, null); Variant variant = createVariantSecAlt("1:123:A:C", "1:122:GGT:-"); List<String> alles = dw.buildAlleles(variant, new ImmutablePair<>(121, 124)); assertEquals("Missing alleles", 3, alles.size()); assertEquals("Ref allele not correctly adjusted", "NNAN", alles.get(0)); assertEquals("Ref allele not correctly adjusted", "NNCN", alles.get(1)); assertEquals("Ref allele not correctly adjusted", "N", alles.get(2)); }
LinkedHashSet<VCFHeaderLine> meta = new LinkedHashSet<>(); sampleNames.clear(); sampleNames.addAll(getSamples()); logger.info("Use {} samples for export ... ", this.sampleNames.size()); sampleNameMapping.putAll( meta.add(new VCFInfoHeaderLine("CR", 1, VCFHeaderLineType.Float, "Call rate")); meta.add(new VCFInfoHeaderLine("OPR", 1, VCFHeaderLineType.Float, "Overall Pass rate")); addCohortInfo(meta); addAnnotationInfo(meta);
public List<String> buildAlleles(Variant variant, Pair<Integer, Integer> adjustedRange) { String reference = variant.getReference(); String alternate = variant.getAlternate(); List<AlternateCoordinate> secAlts = variant.getStudy(this.studyConfiguration.getStudyName()).getSecondaryAlternates(); List<String> alleles = new ArrayList<>(secAlts.size() + 2); Integer origStart = variant.getStart(); Integer origEnd = variant.getEnd(); alleles.add(buildAllele(variant.getChromosome(), origStart, origEnd, reference, adjustedRange)); alleles.add(buildAllele(variant.getChromosome(), origStart, origEnd, alternate, adjustedRange)); secAlts.forEach(alt -> { alleles.add(buildAllele(variant.getChromosome(), alt.getStart(), alt.getEnd(), alt.getAlternate(), adjustedRange)); }); return alleles; }
@Test public void adjustedVariantStart_SecAlt_MNV() throws Exception { StudyConfiguration sc = new StudyConfiguration(1, "1"); VariantVcfDataWriter dw = new VariantVcfDataWriter(sc, null, null, null); Integer adjustStart = dw.adjustedVariantStart(createVariantSecAlt("1:123:A:C", "1:122:GG:CC")).getLeft(); assertEquals("Adjusted start position wrong", Integer.valueOf(122), adjustStart); }
@Test public void buildAlleles_SecAlt_MNV() throws Exception { StudyConfiguration sc = new StudyConfiguration(1, "1"); VariantVcfDataWriter dw = new VariantVcfDataWriter(sc, null, null, null); Variant variant = createVariantSecAlt("1:123:A:C", "1:122:GG:TT"); List<String> alles = dw.buildAlleles(variant, new ImmutablePair<>(122, 123)); assertEquals("Missing alleles", 3, alles.size()); assertEquals("Ref allele not correctly adjusted", "NA", alles.get(0)); assertEquals("Ref allele not correctly adjusted", "NC", alles.get(1)); assertEquals("Ref allele not correctly adjusted", "TT", alles.get(2)); }
@Override public boolean write(List<Variant> batch) { for (Variant variant : batch) { try { VariantContext variantContext = convertVariantToVariantContext(variant, annotations); if (variantContext != null) { writer.add(variantContext); } } catch (RuntimeException e) { logger.error("Error exporting variant " + variant, e); failedVariants++; converterErrorListener.get().accept(variant, e); } } return true; }