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)
Exemplo n.º 3
0
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