Esempio n. 1
0
 def g_duplex(self):
     """Generator of duplex by gaps"""
     segs = self.sgc.segments
     for i in range(1, len(segs)):
         lftsgc = SegmentChain(*segs[:i], ID="%dLeft" % i)
         rgtsgc = SegmentChain(*segs[i:], ID="%dRight" % i)
         yield Duplex(lftsgc, rgtsgc, self)
Esempio n. 2
0
 def as_bed(self):
     sc = SegmentChain(self.don, self.acc)
     ts = sc.spanning_segment.start
     te = sc.spanning_segment.end
     b = sc.as_bed(thickstart=ts, thickend=te).strip("\n").split("\t")
     b.extend(map(str, [self.nevi, self.ntot]))
     return b
Esempio n. 3
0
 def get_jnc(self, idx):
     assert 1 <= idx <= self.numjnc
     segs = self.sgc.segments
     s = SegmentChain(*segs[:idx]).spanning_segment.end
     e = SegmentChain(*segs[idx:]).spanning_segment.start
     gs = GenomicSegment(self.chrom, s, e, self.strand)
     return Jnc(gs, self, idx)
Esempio n. 4
0
 def __init__(self, r):
     assert isinstance(r, pysam.AlignedSegment)
     self.r = r
     self.chrom = r.reference_name
     self.strand = '-' if self.r.is_reverse else '+'
     self.blocks = self.r.blocks
     self.tags = {tag: val for tag, val in self.r.tags}
     self.sgc = SegmentChain()
     for (start, end) in self.r.blocks:
         self.sgc.add_segments(
             GenomicSegment(self.chrom, start, end, self.strand))
Esempio n. 5
0
class JncGroup:
    """Junction Group"""
    def __init__(self, js):
        self.jsli = [js]
        self.corejs = js
        self.sc = SegmentChain(js.don, js.acc)
        self.name = None

    def distance2(self, js):
        return max(self.corejs.dist2don(js), self.corejs.dist2acc(js))

    def add(self, js):
        self.jsli.append(js)

    def merge(self):
        for i in range(1, len(self.jsli)):
            js = self.jsli[i]
            self.sc.add_segments(js.don)
            self.sc.add_segments(js.acc)

    def get_ntot(self):
        return sum(js.ntot for js in self.jsli)

    def get_nevi(self):
        return sum(js.nevi for js in self.jsli)

    def set_name(self, name):
        self.name = name

    def as_bed(self):
        if self.name is not None:
            self.sc.attr['ID'] = self.name
        if self.sc.strand == "+":
            color = "255,0,0"
        else:
            color = "0,0,255"
        self.sc.attr['color'] = color
        b = self.sc.as_bed().strip("\n").split("\t")
        b.extend(map(str, [self.get_nevi(), self.get_ntot()]))
        return b

    def __str__(self):
        return "\t".join(
            map(str,
                [self.corejs, self.get_ntot(),
                 self.get_nevi()]))

    def jncsites(self):
        jncs = []
        for i in range(len(self.jsli)):
            jncs.append([self.name, str(i + 1)] + self.jsli[i].as_bed())
            i += 1
        return jncs
Esempio n. 6
0
class ParisRead:
    """Read from PARIS-seq"""
    def __init__(self, r):
        assert isinstance(r, pysam.AlignedSegment)
        self.r = r
        self.chrom = r.reference_name
        self.strand = '-' if self.r.is_reverse else '+'
        self.blocks = self.r.blocks
        self.tags = {tag: val for tag, val in self.r.tags}
        self.sgc = SegmentChain()
        for (start, end) in self.r.blocks:
            self.sgc.add_segments(
                GenomicSegment(self.chrom, start, end, self.strand))

    def __str__(self):
        return "%s\t%s" % (self.r.qname, self.sgc)

    def g_duplex(self):
        """Generator of duplex by gaps"""
        segs = self.sgc.segments
        for i in range(1, len(segs)):
            lftsgc = SegmentChain(*segs[:i], ID="%dLeft" % i)
            rgtsgc = SegmentChain(*segs[i:], ID="%dRight" % i)
            yield Duplex(lftsgc, rgtsgc, self)
Esempio n. 7
0
def sgc3():
    return SegmentChain(GenomicSegment("chr1", 350, 450, "+"))
Esempio n. 8
0
def sgc2():
    exon1 = GenomicSegment("chr1", 1150, 1200, "+")
    exon2 = GenomicSegment("chr1", 1300, 1450, "+")
    return SegmentChain(exon1, exon2, ID="SGC2", alias="SGC2")
Esempio n. 9
0
def sgc1():
    exon1 = GenomicSegment("chr1", 100, 200, "+")
    exon2 = GenomicSegment("chr1", 300, 400, "+")
    return SegmentChain(exon1, exon2, ID="SGC1", alias="SGC1")
Esempio n. 10
0
 def sgc(self):
     sgc = SegmentChain()
     for (start, end) in self.blocks:
         sgc.add_segments(
             GenomicSegment(self.chrom, start, end, self.strand))
     return sgc
Esempio n. 11
0
 def __init__(self, js):
     self.jsli = [js]
     self.corejs = js
     self.sc = SegmentChain(js.don, js.acc)
     self.name = None
Esempio n. 12
0
 def rgt(self):
     return SegmentChain(*self.segread.sgc.segments[self.idx:])
Esempio n. 13
0
 def lft(self):
     return SegmentChain(*self.segread.sgc.segments[:self.idx])