Пример #1
0
def get_module_frames(modules,
                      module_level=0,
                      glyph_size=GLYPHSIZE,
                      space=SPACER,
                      submodule_origin=None,
                      has_frame_box=False):
    frame_list = []
    origins = get_origin_list(modules, module_level, glyph_size, space,
                              submodule_origin)

    for i, module in enumerate(modules):

        if len(module.children) != 0.:
            frame_list += get_module_frames(
                module.children, module_level + 1,
                GLYPHSIZE - RECURSE_DECREMENT * 2, space,
                [origins[i][0] + 2 * space, origins[i][1] + 1.5 * space], True)
        else:
            if module.part_list != None:
                parts_count = len(module.part_list.parts)
            else:
                parts_count = 0
            width, height = get_module_width_height(parts_count, glyph_size,
                                                    space,
                                                    len(module.other_parts))
            frame_list.append(
                rd.Frame(width=width, height=height, origin=origins[i]))
            module.level = module_level

    if has_frame_box and len(frame_list) != 0.:
        frame_list.append(get_biggest_module_frame(frame_list, space))

    return frame_list
Пример #2
0
def get_biggest_module_frame(framelist, space_offset):
    max_x, max_y = (np.finfo(np.float128).min for i in range(2))
    min_x, min_y = (np.finfo(np.float128).max for i in range(2))
    for frame in framelist:
        if min_x > frame.origin[0]:
            min_x = frame.origin[0]
        if max_x < frame.origin[0] + frame.width:
            max_x = frame.origin[0] + frame.width
        if min_y > frame.origin[1]:
            min_y = frame.origin[1]
        if max_y < frame.origin[1] + frame.height:
            max_y = frame.origin[1] + frame.height

    return rd.Frame(
        width=(max_x - min_x) + 4 * space_offset,
        height=(max_y - min_y) + 3.5 * space_offset,
        origin=[min_x - 2 * space_offset, min_y - 1.5 * space_offset])
Пример #3
0
def draw_module(ax,
                module,
                module_frame,
                glyph_size,
                module_spacer,
                haveBackbone=True):
    glyph_pos = [
        module_frame.origin[0] + 3 * module_spacer,
        module_frame.origin[1] + 1.5 * module_spacer
    ]
    renderer = rd.GlyphRenderer()
    strand_rd = rd.StrandRenderer()
    module_rd = rd.ModuleRenderer()

    # check whether module is empty or not
    if module.part_list == None:
        if len(module.children) != 0:
            return module_rd.draw_empty_module_box(ax, module_frame)
        elif len(module.other_parts) == 0:
            return

    # draw each glyphs in module part list
    else:
        module.part_list.position = glyph_pos
        for part in module.part_list.parts:
            part.frame = rd.Frame(width=glyph_size,
                                  height=glyph_size,
                                  origin=glyph_pos)
            child = renderer.draw_glyph(ax, part.type, glyph_pos, glyph_size,
                                        0.)
            strand_rd.add_glyphs(child)
            module_rd.add_parts(child)
            glyph_pos = [
                glyph_pos[0] + glyph_size + module_spacer, glyph_pos[1]
            ]

    # draw backbone
    if haveBackbone and module.part_list != None:
        bb = strand_rd.draw_backbone_strand(ax, glyph_pos[1], module_spacer)
        module_rd.add_parts(bb)
        module.part_list.position = bb['frame'].origin

    # draw other parts
    if len(module.other_parts) != 0:
        op_pos_list = __get_other_part_pos(len(module.other_parts),
                                           module_frame, glyph_size,
                                           glyph_size, module_spacer)
        other_part_frames = []
        for i, other_part in enumerate(module.other_parts):
            other_part.frame = rd.Frame(width=glyph_size,
                                        height=glyph_size,
                                        origin=op_pos_list[i])
            other_part_frames.append(other_part.frame)
            other_child = renderer.draw_glyph(ax, other_part.type,
                                              op_pos_list[i], glyph_size, 0.)
            module_rd.add_parts(other_child)

        # do not draw module frame box if only has other part
        if module.part_list == None:
            return get_biggest_module_frame(other_part_frames, module_spacer)

    return module_rd.draw_module_box(ax, module_spacer, module_spacer)
Пример #4
0
'''

import render
import matplotlib.pyplot as plt

# default setting
strand = render.StrandRenderer()
renderer = render.GlyphRenderer()
module = render.ModuleRenderer()

print(renderer.glyphs_library)
print('------------')
print(renderer.glyph_soterm_map)

fig = plt.figure(figsize=(5, 5))
ax = fig.add_subplot(111)
# need to set axis first
ax.set_xlim(-50.0, 50.0)
ax.set_ylim(-50.0, 50.0)

p1 = renderer.draw_glyph(ax, 'Promoter', (-20.0, 0.0), 10., 0)
ori2 = renderer.draw_glyph(ax, 'OriginOfReplication', (0.0, -5.), 10., 0)
i3 = renderer.draw_glyph(ax, 'Insulator', (20.0, -5.), 10., 0.)
strand.add_glyphs([p1, ori2, i3])
bb = strand.draw_backbone_strand(ax, 0., 1.5)
module.add_parts([p1, ori2, i3, bb])
module_frame = module.draw_module_box(
    ax, render.Frame(width=70, height=30, origin=(-30, -10)))

ax.set_axis_off()
plt.show()
Пример #5
0
def draw_module(ax,
                module,
                module_frame,
                glyph_size,
                module_spacer,
                haveBackbone=True,
                user_spec=None):
    strand_adjustment = __get_strand_adjustment(module.part_list, user_spec,
                                                glyph_size)
    glyph_pos = [
        module_frame.origin[0] + 3 * module_spacer,
        module_frame.origin[1] + 1.5 * module_spacer + strand_adjustment
    ]
    renderer = rd.GlyphRenderer()
    strand_rd = rd.StrandRenderer()
    module_rd = rd.ModuleRenderer()

    # check whether module is empty or not
    if module.part_list == None:
        if len(module.children) != 0 and len(module.other_parts) == 0:
            return module_rd.draw_module_box(ax, module_frame)

    # draw each glyphs in module part list
    else:
        module.part_list.position = glyph_pos
        custom_glyph_size = glyph_size
        for part in module.part_list.parts:
            if part.type in LOWER_ORIGIN_GLYPHS:  # adjust for cds etc
                glyph_pos[1] -= strand_adjustment
            if __check_custom_size(part.name, user_spec,
                                   glyph_size) != glyph_size:  # user_param
                glyph_size *= __check_custom_size(part.name, user_spec)

            #rendering
            part.frame = rd.Frame(width=glyph_size,
                                  height=glyph_size,
                                  origin=glyph_pos)
            child = renderer.draw_glyph(ax,
                                        part.type,
                                        glyph_pos,
                                        glyph_size,
                                        0.,
                                        user_parameters=__find_right_spec(
                                            part.name, user_spec))
            strand_rd.add_glyphs(child)
            module_rd.add_parts(child)

            # prepare for next part
            if part.type in LOWER_ORIGIN_GLYPHS:
                glyph_pos[1] += strand_adjustment
            glyph_pos = [
                glyph_pos[0] + glyph_size + module_spacer, glyph_pos[1]
            ]
            if custom_glyph_size != glyph_size: glyph_size = custom_glyph_size

    # draw backbone
    if haveBackbone and module.part_list != None:
        bb = strand_rd.draw_backbone_strand(ax, glyph_pos[1], module_spacer)
        module_rd.add_parts(bb)
        module.part_list.position = bb['frame'].origin

    # draw other parts
    if len(module.other_parts) != 0:
        op_pos_list = __get_other_part_pos(len(module.other_parts),
                                           module_frame, glyph_size,
                                           glyph_size, module_spacer)
        other_part_frames = []
        for i, other_part in enumerate(module.other_parts):
            other_part.frame = rd.Frame(width=glyph_size,
                                        height=glyph_size,
                                        origin=op_pos_list[i])
            other_part_frames.append(other_part.frame)
            other_child = renderer.draw_glyph(
                ax,
                other_part.type,
                op_pos_list[i],
                glyph_size,
                user_parameters=__find_right_spec(other_part.name, user_spec))
            module_rd.add_parts(other_child)

    return module_rd.draw_module_box(ax, module_frame)