def writeVariants(self, variants): for var in variants: pos = var.refStart ref = "" alt = "" labels = (1, 2) # insertion or deletion if var.refSeq == "" or var.readSeq1 == "" or \ (var.isHeterozygous and var.readSeq2 == ""): # we're anchored on the previous base so no 0- to 1-indexing # correction required ref = var.refPrev + var.refSeq if var.isHeterozygous: alt = ",".join(var.readPrev + seq for seq in (var.readSeq1, var.readSeq2)) else: alt = var.readPrev + var.readSeq1 # substitution else: # due to 1-indexing, pos needs to be incremented pos += 1 ref = var.refSeq if var.isHeterozygous: alt = ",".join(seq for seq in (var.readSeq1, var.readSeq2)) if var.refSeq == var.readSeq1: # first variant is same as wildtype alt = var.readSeq2 labels = (2,) elif var.refSeq == var.readSeq2: # second variant is same as wildtype alt = var.readSeq1 labels = (1,) else: # both variants differ from wildtype alt = ",".join(seq for seq in (var.readSeq1, var.readSeq2)) else: alt = var.readSeq1 freq = vcfVariantFrequency(var=var, labels=labels) info = "DP={0}".format(var.coverage) if freq: info = info + ";" + freq # failed filters failedFilters = [] if var.confidence < self._minConfidence: failedFilters.append(self._minConfidenceFilterID) if var.coverage < self._minCoverage: failedFilters.append(self._minCoverageFilterID) filterText = ";".join(failedFilters) if failedFilters else "PASS" print("{chrom}\t{pos}\t{id}\t{ref}\t{alt}\t{qual}\t{filter}\t{info}".format( chrom=reference.idToFullName(var.refId), pos=pos, id=".", ref=ref, alt=alt, qual=var.confidence, filter=filterText, info=info), file=self._vcfFile)
def writeVariants(self, variants): for var in variants: pos = var.refStart ref = "" alt = "" labels = (1, 2) # insertion or deletion if var.refSeq == "" or var.readSeq1 == "" or \ (var.isHeterozygous and var.readSeq2 == ""): # we're anchored on the previous base so no 0- to 1-indexing # correction required ref = var.refPrev + var.refSeq if var.isHeterozygous: alt = ",".join(var.readPrev + seq for seq in (var.readSeq1, var.readSeq2)) else: alt = var.readPrev + var.readSeq1 # substitution else: # due to 1-indexing, pos needs to be incremented pos += 1 ref = var.refSeq if var.isHeterozygous: alt = ",".join(seq for seq in (var.readSeq1, var.readSeq2)) if var.refSeq == var.readSeq1: # first variant is same as wildtype alt = var.readSeq2 labels = (2, ) elif var.refSeq == var.readSeq2: # second variant is same as wildtype alt = var.readSeq1 labels = (1, ) else: # both variants differ from wildtype alt = ",".join(seq for seq in (var.readSeq1, var.readSeq2)) else: alt = var.readSeq1 freq = vcfVariantFrequency(var=var, labels=labels) info = "DP={0}".format(var.coverage) if freq: info = info + ";" + freq print( "{chrom}\t{pos}\t{id}\t{ref}\t{alt}\t{qual}\t{filter}\t{info}". format(chrom=reference.idToFullName(var.refId), pos=pos, id=".", ref=ref, alt=alt, qual=var.confidence, filter="PASS", info=info), file=self._vcfFile)
def toGffRecord(var): varType = var.variantType gffType = varType.lower() gffStart = (var.refStart + 1) if (var.refSeq != "") else var.refStart gffEnd = var.refEnd if (var.refSeq != "") else var.refStart gffFreq = gffVariantFrequency(var) record = Gff3Record(reference.idToFullName(var.refId), gffStart, gffEnd, gffType) record.reference = var.refSeq or "." record.variantSeq = gffVariantSeq(var) if gffFreq: record.frequency = gffFreq record.coverage = var.coverage record.confidence = var.confidence if var.annotations: for (k, v) in var.annotations: record.put(k, v) return record