Esempio n. 1
0
 def makePathGridlinesGroup(self) -> G:
     size = self.cn_doc.max_vhelix_length
     _BW = self._base_width
     _BH = self._base_height
     g = G()
     g.setAttribute('id', "GridLines")
     for i in range(len(self.cn_doc.vh_order)):
         id_num = self.cn_doc.vh_order[i]
         x = self.PATH_X_PADDING + self._path_radius_scaled*3
         y = self.PATH_Y_PADDING + self._path_vh_margin*i
         h_lines = " ".join("M %s,%s h %s" % (x, y-_BH+j*_BH, _BW*size) for j in range(3))
         v_lines = " ".join("M %s,%s v %s" % (x+j*_BW, y-_BH, _BH*2) for j in range(int(size)+1))
         p = Path(h_lines + " " + v_lines)
         grid_style = 'fill:none; stroke:#666666; stroke-width:0.25'
         p.set_style(grid_style)
         p.setAttribute('id', "grid_"+self.cn_doc.vh_props['name'][id_num])
         g.addElement(p)
     return g
Esempio n. 2
0
    def makePathOligosGroup(self) -> G:
        id_coords = self.mapIdnumsToYcoords()
        oligo_list = self.cn_doc.getOligoList()
        _BW = self._base_width
        _BH = self._base_height
        _pX = self.PATH_X_PADDING + self._path_radius_scaled*3 + _BW/2
        g = G()
        g.setAttribute('id', "Oligos")
        i = 0
        for color, is_circular, strands in oligo_list:
            prev_id, prev5, prev3, prevX, prevY = None, None, None, 0, 0
            path_lines = []
            if is_circular:
                strands.append(strands[0])
            for id_num, idx5, idx3, isfwd, _ in strands:
                x = _pX + idx5*_BW
                if idx5 < idx3:  # top strand
                    y = id_coords[id_num] - _BH/2
                else:
                    y = id_coords[id_num] + _BH/2
                dx = (idx3-idx5)*_BW

                if prev_id is not None and id_num != prev_id:
                    # c dx1 dy1, dx2 dy2, dx dy
                    if isfwd:
                        x1 = x + abs(y-prevY)*0.03
                    else:
                        x1 = x - abs(y-prevY)*0.03
                    y1 = (y+prevY)/2
                    path_lines.append("Q %s %s, %s %s" % (x1, y1, x, y))
                    path_lines.append("h %s" % dx)
                else:
                    path_lines.append("M %s, %s h %s" % (x, y, dx))
                prev_id, prev5, prev3, prevX, prevY = id_num, idx5, idx3, x, y
            p = Path(" ".join(path_lines))
            oligo_style = 'fill:none; stroke:%s; stroke-width:2' % color
            p.set_style(oligo_style)
            p.setAttribute('id', "oligo_%s" % i)
            p.setAttribute("stroke-linejoin", "round")
            i += 1
            g.addElement(p)
        return g