コード例 #1
0
class MapTester(object):
    "test object that collects results"

    def __init__(self):
        self.mappings = []
        self.mapper = PslMap(self)

    def mapBlock(self, psl, blk, qRngStart, qRngEnd, tRngStart, tRngEnd):
        self.mappings.append(("blk", psl.qName, blk.iBlk, qRngStart, qRngEnd,
                              tRngStart, tRngEnd))

    @staticmethod
    def __iBlkOrNone(blk):
        return blk.iBlk if blk != None else None

    def mapGap(self, psl, prevBlk, nextBlk, qRngStart, qRngEnd, tRngStart,
               tRngEnd):
        self.mappings.append(
            ("gap", psl.qName, MapTester.__iBlkOrNone(prevBlk),
             MapTester.__iBlkOrNone(nextBlk), qRngStart, qRngEnd, tRngStart,
             tRngEnd))

    def __joinMappings(self):
        "join mappings into a tuple for testing and clear for next test"
        m = tuple(self.mappings)
        self.mappings = []
        return m

    def targetToQueryMap(self, psl, tRngStart, tRngEnd):
        self.mapper.targetToQueryMap(psl, tRngStart, tRngEnd)
        return self.__joinMappings()

    def queryToTargetMap(self, psl, qRngStart, qRngEnd):
        self.mapper.queryToTargetMap(psl, qRngStart, qRngEnd)
        return self.__joinMappings()
コード例 #2
0
ファイル: PslMapTests.py プロジェクト: floe/pubMunch
class MapTester(object):
    "test object that collects results"
    def __init__(self):
        self.mappings = []
        self.mapper = PslMap(self)

    def mapBlock(self, psl, blk, qRngStart, qRngEnd, tRngStart, tRngEnd):
        self.mappings.append(("blk", psl.qName, blk.iBlk, qRngStart, qRngEnd, tRngStart, tRngEnd))

    @staticmethod
    def __iBlkOrNone(blk):
        return blk.iBlk if blk != None else None

    def mapGap(self, psl, prevBlk, nextBlk, qRngStart, qRngEnd, tRngStart, tRngEnd):
        self.mappings.append(("gap", psl.qName, MapTester.__iBlkOrNone(prevBlk), MapTester.__iBlkOrNone(nextBlk), qRngStart, qRngEnd, tRngStart, tRngEnd))

    def __joinMappings(self):
        "join mappings into a tuple for testing and clear for next test"
        m = tuple(self.mappings)
        self.mappings = []
        return m

    def targetToQueryMap(self, psl, tRngStart, tRngEnd):
        self.mapper.targetToQueryMap(psl, tRngStart, tRngEnd)
        return self.__joinMappings()

    def queryToTargetMap(self, psl, qRngStart, qRngEnd):
        self.mapper.queryToTargetMap(psl, qRngStart, qRngEnd)
        return self.__joinMappings()
コード例 #3
0
ファイル: pslMapBed.py プロジェクト: Moxikai/pubMunch
class PslMapBedMaker(object):
    " object that collects blocks from pslMap and creates a bed in the end"
    __slots__ = ("chrom", "chromStart", "chromEnd", "name", "score", "strand", "thickStart", "thickEnd", "itemRgb", "blockCount", "blockSizes", "blockStarts", "mapper")

    def __init__(self):
        self.mapper = PslMap(self)
        self.clear()

    def clear(self):
        " reset for next mapping "
        self.chrom = None
        self.chromStart = None
        self.chromEnd = None
        self.name = None
        self.score = 0
        self.strand = None
        self.thickStart = None
        self.thickEnd = None
        self.itemRgb = "0"
        self.blockCount = 0
        self.blockSizes = []
        self.blockStarts = []

    def mapBlock(self, psl, blk, qRngStart, qRngEnd, tRngStart, tRngEnd):
        " callback for pslMap "
        self.chromEnd = tRngEnd
        self.blockCount += 1
        self.blockSizes.append(tRngEnd-tRngStart)
        self.blockStarts.append(tRngStart)

    def mapGap(self, psl, prevBlk, nextBlk, qRngStart, qRngEnd, tRngStart, tRngEnd):
        " call back pslMap "
        pass

    def mapQuery(self, psl, qRngStart, qRngEnd):
        " call this method to get qRngStart-qRngEnd mapped through the psl as a bed "
        self.mapper.queryToTargetMap(psl, qRngStart, qRngEnd)
        self.chrom = psl.tName
        self.name = psl.qName
        self.strand = psl.strand
        return self._toBed()

    def _toBed(self):
        " return bed feature as row "
        if len(self.blockStarts)==0:
            return None
        self.chromStart = self.blockStarts[0]
        self.thickStart = self.chromStart
        self.thickEnd = self.chromEnd
        self.score = sum(self.blockSizes)
        blockSizeStr = ",".join([str(x) for x in self.blockSizes])

        chromStart = self.chromStart
        blockStartStr = ",".join([str(x-chromStart) for x in self.blockStarts])

        bedRow = [self.chrom, self.chromStart, self.chromEnd, self.name, \
                self.score, self.strand, self.thickStart, self.thickEnd, \
                self.itemRgb, len(self.blockSizes), blockSizeStr, blockStartStr]
        bedRow = [str(x) for x in bedRow]
        return bedRow
コード例 #4
0
 def __init__(self):
     self.mappings = []
     self.mapper = PslMap(self)
コード例 #5
0
ファイル: pslMapBed.py プロジェクト: Moxikai/pubMunch
 def __init__(self):
     self.mapper = PslMap(self)
     self.clear()
コード例 #6
0
ファイル: PslMapTests.py プロジェクト: floe/pubMunch
 def __init__(self):
     self.mappings = []
     self.mapper = PslMap(self)
コード例 #7
0
ファイル: pslMapBed.py プロジェクト: strbean/pubMunch-BRCA
 def __init__(self):
     self.mapper = PslMap(self)
     self.clear()
コード例 #8
0
ファイル: pslMapBed.py プロジェクト: strbean/pubMunch-BRCA
class PslMapBedMaker(object):
    " object that collects blocks from pslMap and creates a bed in the end"
    __slots__ = ("chrom", "chromStart", "chromEnd", "name", "score", "strand",
                 "thickStart", "thickEnd", "itemRgb", "blockCount",
                 "blockSizes", "blockStarts", "mapper")

    def __init__(self):
        self.mapper = PslMap(self)
        self.clear()

    def clear(self):
        " reset for next mapping "
        self.chrom = None
        self.chromStart = None
        self.chromEnd = None
        self.name = None
        self.score = 0
        self.strand = None
        self.thickStart = None
        self.thickEnd = None
        self.itemRgb = "0"
        self.blockCount = 0
        self.blockSizes = []
        self.blockStarts = []

    def mapBlock(self, psl, blk, qRngStart, qRngEnd, tRngStart, tRngEnd):
        " callback for pslMap "
        self.chromEnd = tRngEnd
        self.blockCount += 1
        self.blockSizes.append(tRngEnd - tRngStart)
        self.blockStarts.append(tRngStart)

    def mapGap(self, psl, prevBlk, nextBlk, qRngStart, qRngEnd, tRngStart,
               tRngEnd):
        " call back pslMap "
        pass

    def mapQuery(self, psl, qRngStart, qRngEnd):
        " call this method to get qRngStart-qRngEnd mapped through the psl as a bed "
        self.mapper.queryToTargetMap(psl, qRngStart, qRngEnd)
        self.chrom = psl.tName
        self.name = psl.qName
        self.strand = psl.strand
        return self._toBed()

    def _toBed(self):
        " return bed feature as row "
        if len(self.blockStarts) == 0:
            return None
        self.chromStart = self.blockStarts[0]
        self.thickStart = self.chromStart
        self.thickEnd = self.chromEnd
        self.score = sum(self.blockSizes)
        blockSizeStr = ",".join([str(x) for x in self.blockSizes])

        chromStart = self.chromStart
        blockStartStr = ",".join(
            [str(x - chromStart) for x in self.blockStarts])

        bedRow = [self.chrom, self.chromStart, self.chromEnd, self.name, \
                self.score, self.strand, self.thickStart, self.thickEnd, \
                self.itemRgb, len(self.blockSizes), blockSizeStr, blockStartStr]
        bedRow = [str(x) for x in bedRow]
        return bedRow
コード例 #9
0
class PslMapBedMaker(object):
    " object that collects blocks from pslMap and creates a bed in the end"
    __slots__ = ("chrom", "chromStart", "chromEnd", "name", "score", "strand",
                 "thickStart", "thickEnd", "itemRgb", "blockCount", "blockSizes",
                 "blockStarts", "mapper", "chromSize")

    def __init__(self):
        self.mapper = PslMap(self)
        self.clear()

    def clear(self):
        " reset for next mapping "
        self.chrom = None
        self.chromStart = None
        self.chromEnd = None
        self.name = None
        self.score = 0
        self.strand = None
        self.thickStart = None
        self.thickEnd = None
        self.itemRgb = "0"
        self.blockCount = 0
        self.blockSizes = []
        self.blockStarts = []
        self.chromSize = 0

    def mapBlock(self, psl, blk, qRngStart, qRngEnd, tRngStart, tRngEnd):
        " callback for pslMap "
        logging.debug("Got blk: %d-%d, len %d" % (tRngStart, tRngEnd, tRngEnd - tRngStart))
        self.blockCount += 1
        self.blockSizes.append(tRngEnd - tRngStart)
        self.blockStarts.append(tRngStart)

    def mapGap(self, psl, prevBlk, nextBlk, qRngStart, qRngEnd, tRngStart, tRngEnd):
        " call back pslMap "
        pass

    def mapQuery(self, psl, qRngStart, qRngEnd):
        " call this method to get qRngStart-qRngEnd mapped through the psl as a bed "
        # must be reversed somewhere upstream
        assert(psl.strand[0] == "+")
        # if psl.strand=="-":
            # the +1 here is weird but seems to be true
            # end   = mapPsl.qSize - rnaVar.start + 1
            # start = mapPsl.qSize - rnaVar.end + 1
            # logging.debug("Inversing map coordinates to %d/%d" % (start, end))
            # logging.debug("Reversing map psl")
            # psl = psl.reverseComplement()
        self.chromSize = psl.tSize
        self.mapper.queryToTargetMap(psl, qRngStart, qRngEnd)
        self.chrom = psl.tName
        self.name = psl.qName
        self.strand = psl.strand

    def getBed(self, name=None):
        " return bed feature as a 12-tuple, default name is query name "
        if len(self.blockStarts) == 0:
            return None
        if self.strand[-1] == "-":
            logging.debug("Reversing coords")
            self.blockStarts.reverse()
            self.blockSizes.reverse()
            # pslToBed.c:
            #    for (i=0; i<blockCount; ++i)
            #       chromStarts[i] = chromSize - chromStarts[i] - bed->blockSizes[i];
            chromSize = self.chromSize
            chromStarts = self.blockStarts
            blockSizes = self.blockSizes
            for i in range(0, len(self.blockStarts)):
                self.blockStarts[i] = chromSize - chromStarts[i] - blockSizes[i]
        self.chromStart = self.blockStarts[0]
        self.chromEnd = self.blockStarts[-1] + self.blockSizes[-1]

        self.thickStart = self.chromStart
        self.thickEnd = self.chromEnd
        self.score = sum(self.blockSizes)
        blockSizeStr = ",".join([str(x) for x in self.blockSizes])

        chromStart = self.chromStart
        blockStartStr = ",".join([str(x - chromStart) for x in self.blockStarts])

        # default bed name is query name
        if not name:
            name = self.name

        bedRow = [self.chrom, self.chromStart, self.chromEnd, name, \
                self.score, self.strand[-1], self.thickStart, self.thickEnd, \
                self.itemRgb, len(self.blockSizes), blockSizeStr, blockStartStr]
        bedRow = [str(x) for x in bedRow]
        return bedRow
コード例 #10
0
class PslMapBedMaker(object):
    " object that collects blocks from pslMap and creates a bed in the end"
    __slots__ = ("chrom", "chromStart", "chromEnd", "name", "score", "strand",
                 "thickStart", "thickEnd", "itemRgb", "blockCount",
                 "blockSizes", "blockStarts", "mapper", "chromSize")

    def __init__(self):
        self.mapper = PslMap(self)
        self.clear()

    def clear(self):
        " reset for next mapping "
        self.chrom = None
        self.chromStart = None
        self.chromEnd = None
        self.name = None
        self.score = 0
        self.strand = None
        self.thickStart = None
        self.thickEnd = None
        self.itemRgb = "0"
        self.blockCount = 0
        self.blockSizes = []
        self.blockStarts = []
        self.chromSize = 0

    def mapBlock(self, psl, blk, qRngStart, qRngEnd, tRngStart, tRngEnd):
        " callback for pslMap "
        logging.debug("Got blk: %d-%d, len %d" %
                      (tRngStart, tRngEnd, tRngEnd - tRngStart))
        self.blockCount += 1
        self.blockSizes.append(tRngEnd - tRngStart)
        self.blockStarts.append(tRngStart)

    def mapGap(self, psl, prevBlk, nextBlk, qRngStart, qRngEnd, tRngStart,
               tRngEnd):
        " call back pslMap "
        pass

    def mapQuery(self, psl, qRngStart, qRngEnd):
        " call this method to get qRngStart-qRngEnd mapped through the psl as a bed "
        # must be reversed somewhere upstream
        assert (psl.strand[0] == "+")
        # if psl.strand=="-":
        # the +1 here is weird but seems to be true
        # end   = mapPsl.qSize - rnaVar.start + 1
        # start = mapPsl.qSize - rnaVar.end + 1
        # logging.debug("Inversing map coordinates to %d/%d" % (start, end))
        # logging.debug("Reversing map psl")
        # psl = psl.reverseComplement()
        self.chromSize = psl.tSize
        self.mapper.queryToTargetMap(psl, qRngStart, qRngEnd)
        self.chrom = psl.tName
        self.name = psl.qName
        self.strand = psl.strand

    def getBed(self, name=None):
        " return bed feature as a 12-tuple, default name is query name "
        if len(self.blockStarts) == 0:
            return None
        if self.strand[-1] == "-":
            logging.debug("Reversing coords")
            self.blockStarts.reverse()
            self.blockSizes.reverse()
            # pslToBed.c:
            #    for (i=0; i<blockCount; ++i)
            #       chromStarts[i] = chromSize - chromStarts[i] - bed->blockSizes[i];
            chromSize = self.chromSize
            chromStarts = self.blockStarts
            blockSizes = self.blockSizes
            for i in range(0, len(self.blockStarts)):
                self.blockStarts[
                    i] = chromSize - chromStarts[i] - blockSizes[i]
        self.chromStart = self.blockStarts[0]
        self.chromEnd = self.blockStarts[-1] + self.blockSizes[-1]

        self.thickStart = self.chromStart
        self.thickEnd = self.chromEnd
        self.score = sum(self.blockSizes)
        blockSizeStr = ",".join([str(x) for x in self.blockSizes])

        chromStart = self.chromStart
        blockStartStr = ",".join(
            [str(x - chromStart) for x in self.blockStarts])

        # default bed name is query name
        if not name:
            name = self.name

        bedRow = [self.chrom, self.chromStart, self.chromEnd, name, \
                self.score, self.strand[-1], self.thickStart, self.thickEnd, \
                self.itemRgb, len(self.blockSizes), blockSizeStr, blockStartStr]
        bedRow = [str(x) for x in bedRow]
        return bedRow