Ejemplo n.º 1
0
    def ly_block_alg(node):
        if node.is_leaf():
            if 'sequence' in node.features:
                seqFace = SeqMotifFace(node.sequence, [])
                # [10, 100, "[]", None, 10, "black", "rgradient:blue", "arial|8|white|domain Name"],
                motifs = []
                last_lt = None
                for c, lt in enumerate(node.sequence):
                    if lt != '-':
                        if last_lt is None:
                            last_lt = c
                        if c + 1 == len(node.sequence):
                            start, end = last_lt, c
                            motifs.append([
                                start, end, "()", 0, 12, "slategrey",
                                "slategrey", None
                            ])
                            last_lt = None
                    elif lt == '-':
                        if last_lt is not None:
                            start, end = last_lt, c - 1
                            motifs.append([
                                start, end, "()", 0, 12, "grey", "slategrey",
                                None
                            ])
                            last_lt = None

                seqFace = SeqMotifFace(node.sequence,
                                       motifs,
                                       intermotif_format="line",
                                       seqtail_format="line",
                                       scale_factor=ALG_SCALE)
                add_face_to_node(seqFace, node, ALG_START_COL, aligned=True)
Ejemplo n.º 2
0
    def ly_block_alg(node):
        if node.is_leaf():
            if 'sequence' in node.features:
                seqFace = SeqMotifFace(node.sequence, [])
                # [10, 100, "[]", None, 10, "black", "rgradient:blue", "arial|8|white|domain Name"],
                motifs = []
                last_lt = None
                for c, lt in enumerate(node.sequence):
                    if lt != '-':
                        if last_lt is None:
                            last_lt = c
                        if c+1 == len(node.sequence):
                            start, end = last_lt, c
                            motifs.append([start, end, "()", 0, 12, "slategrey", "slategrey", None])
                            last_lt = None
                    elif lt == '-':
                        if last_lt is not None:
                            start, end = last_lt, c-1
                            motifs.append([start, end, "()", 0, 12, "grey", "slategrey", None])
                            last_lt = None

                seqFace = SeqMotifFace(node.sequence, motifs,
                                       intermotif_format="line",
                                       seqtail_format="line", scale_factor=ALG_SCALE)
                add_face_to_node(seqFace, node, ALG_START_COL, aligned=True)
Ejemplo n.º 3
0
def layout(node):
    if node.is_leaf():
        if node.name in PROTEIN_TO_DOMAINS:
            seq = PROTEIN_NAME_TO_SEQ[node.name]
            protDomains = PROTEIN_TO_DOMAINS[node.name]
            seqFace = SeqMotifFace(seq, protDomains, scale_factor=1.3)
            add_face_to_node(seqFace, node, 0, position="aligned")
Ejemplo n.º 4
0
 def ly_leaf_names(node):
     if node.is_leaf():
         spF = TextFace(node.species, fsize=10, fgcolor='#444444', fstyle='italic', ftype='Helvetica')
         add_face_to_node(spF, node, column=0, position='branch-right')
         if hasattr(node, 'genename'):
             geneF = TextFace(" (%s)" %node.genename, fsize=8, fgcolor='#777777', ftype='Helvetica')
             add_face_to_node(geneF, node, column=1, position='branch-right')
Ejemplo n.º 5
0
 def ly_leaf_names(node):
     if node.is_leaf():
         spF = TextFace(node.species, fsize=10, fgcolor='#444444', fstyle='italic', ftype='Helvetica')
         add_face_to_node(spF, node, column=0, position='branch-right')
         if hasattr(node, 'genename'):
             geneF = TextFace(" (%s)" %node.genename, fsize=8, fgcolor='#777777', ftype='Helvetica')
             add_face_to_node(geneF, node, column=1, position='branch-right')
Ejemplo n.º 6
0
    def layout(node):
        # print node.rank
        # print node.sci_name
        if getattr(node, "rank", None):
            if(node.rank in ['order','class','phylum','kingdom']):   
                rank_face = AttrFace("sci_name", fsize=7, fgcolor="indianred")
                node.add_face(rank_face, column=0, position="branch-top")
        if node.is_leaf():
            sciname_face = AttrFace("sci_name", fsize=9, fgcolor="steelblue")
            node.add_face(sciname_face, column=0, position="branch-right")
        if node.is_leaf() and not node.name=='annotation':
            s=str(msa[taxids.index(int(node.name))].seq)
            seqFace = SeqMotifFace(s,[[0,len(s), "seq", 10, 10, None, None, None]],scale_factor=1)
            add_face_to_node(seqFace, node, 0, position="aligned")
            # gi=taxid2gi[int(node.name)]
            add_face_to_node(TextFace(' '+msa[taxids.index(int(node.name))].id),node,column=1, position = "aligned")
            # add_face_to_node(TextFace('      '+str(int(node.name))+' '),node,column=2, position = "aligned")
            # add_face_to_node(TextFace('      '+str(gi2variant[gi])+' '),node,column=3, position = "aligned")

        if node.is_leaf() and node.name=='annotation':
            if(annotation):
                s=annotation
                # get_hist_ss_in_aln_as_string(msa_tr)
            else:
                s=' '*len(msa[0].seq)
            seqFace = SeqMotifFace(s,[[0,len(s), "seq", 10, 10, None, None, None]],scale_factor=1)
            add_face_to_node(seqFace, node, 0, position="aligned")
            add_face_to_node(TextFace(' '+'SEQ_ID'),node,column=1, position = "aligned")
Ejemplo n.º 7
0
 def ly_tax_labels(node):
     if node.is_leaf():
         c = LABEL_START_COL
         largest = 0
         for tname in TRACKED_CLADES:
             if hasattr(node, "named_lineage") and tname in node.named_lineage:
                 linF = TextFace(tname, fsize=10, fgcolor='white')
                 linF.margin_left = 3
                 linF.margin_right = 2
                 linF.background.color = lin2color[tname]
                 add_face_to_node(linF, node, c, position='aligned')
                 c += 1
         
         for n in xrange(c, len(TRACKED_CLADES)):
             add_face_to_node(TextFace('', fsize=10, fgcolor='slategrey'), node, c, position='aligned')
             c+=1
Ejemplo n.º 8
0
 def ly_tax_labels(node):
     if node.is_leaf():
         c = LABEL_START_COL
         largest = 0
         for tname in TRACKED_CLADES:
             if hasattr(node, "named_lineage") and tname in node.named_lineage:
                 linF = TextFace(tname, fsize=10, fgcolor='white')
                 linF.margin_left = 3
                 linF.margin_right = 2
                 linF.background.color = lin2color[tname]
                 add_face_to_node(linF, node, c, position='aligned')
                 c += 1
         
         for n in xrange(c, len(TRACKED_CLADES)):
             add_face_to_node(TextFace('', fsize=10, fgcolor='slategrey'), node, c, position='aligned')
             c+=1
Ejemplo n.º 9
0
    def ly_basic(node):
        if node.is_leaf():
            node.img_style['size'] = 0
        else:
            node.img_style['size'] = 0
            node.img_style['shape'] = 'square'
            if len(MIXED_RES) > 1 and hasattr(node, "tree_seqtype"):
                if node.tree_seqtype == "nt":
                    node.img_style["bgcolor"] = "#CFE6CA"
                    ntF = TextFace("nt", fsize=6, fgcolor='#444', ftype='Helvetica')
                    add_face_to_node(ntF, node, 10, position="branch-bottom")
            if len(NPR_TREES) > 1 and hasattr(node, "tree_type"):
                node.img_style['size'] = 4
                node.img_style['fgcolor'] = "steelblue"

        node.img_style['hz_line_width'] = 1
        node.img_style['vt_line_width'] = 1
Ejemplo n.º 10
0
    def ly_basic(node):
        if node.is_leaf():
            node.img_style['size'] = 0
        else:
            node.img_style['size'] = 0
            node.img_style['shape'] = 'square'
            if len(MIXED_RES) > 1 and hasattr(node, "tree_seqtype"):
                if node.tree_seqtype == "nt":
                    node.img_style["bgcolor"] = "#CFE6CA"
                    ntF = TextFace("nt", fsize=6, fgcolor='#444', ftype='Helvetica')
                    add_face_to_node(ntF, node, 10, position="branch-bottom")
            if len(NPR_TREES) > 1 and hasattr(node, "tree_type"):
                node.img_style['size'] = 4
                node.img_style['fgcolor'] = "steelblue"

        node.img_style['hz_line_width'] = 1
        node.img_style['vt_line_width'] = 1
Ejemplo n.º 11
0
def layout(node):
    node.img_style["size"] = 0
    node.img_style['hz_line_width'] = 2
    node.img_style['vt_line_width'] = 2
    
    if node.is_leaf():
        # parse names
        fields = node.orig_name.split("__")
        name = fields[1].replace('_', ' ')
        code = "%s" %fields[0].strip()

        # Specie name
        nF = TextFace(name, fsize=12, fgcolor='#444', fstyle='italic')
        add_face_to_node(nF, node, column=0, position='aligned')

        # Species code
        cF = TextFace(code, fsize=12, fgcolor='grey')
        cF.margin_left = 4
        cF.margin_right = 4
        add_face_to_node(cF, node, column=1, position='branch-right')

        # Lead node styling 
        node.img_style['hz_line_color'] = "green"
        node.img_style['vt_line_color'] = "green"
        
    else:
        # L90: green, L70: blue, L50: dark blue, L30: pink and L10: red. For the species
        # tree discordance test we collapse all branches below L90.
        B = float(node.B)
        if B >= 90:
            color = "green"
        elif B >= 70:
            color = "blue"
        elif B >= 50:
            color = "darkblue"
        elif B >= 30:
            color = "pink"
        elif B >= 10:
            color = "red"
        else:
            color = "yellow"
    
        node.img_style['hz_line_color'] = color
        node.img_style['vt_line_color'] = color
Ejemplo n.º 12
0
def rotation_layout(node):
    if node.is_leaf():
        F = TextFace(node.name, tight_text=True)
        F.rotation = randint(0, 360)
        add_face_to_node(TextFace("third" ), node, column=8, position="branch-right")
        add_face_to_node(TextFace("second" ), node, column=2, position="branch-right")
        add_face_to_node(F, node, column=0, position="branch-right")

        F.border.width = 1
        F.inner_border.width = 1
Ejemplo n.º 13
0
    def layout(node):
        # print node.rank
        # print node.sci_name
        if getattr(node, "rank", None):
            if (node.rank in ['order', 'class', 'phylum', 'kingdom']):
                rank_face = AttrFace("sci_name", fsize=7, fgcolor="indianred")
                node.add_face(rank_face, column=0, position="branch-top")
        if node.is_leaf():
            sciname_face = AttrFace("sci_name", fsize=9, fgcolor="steelblue")
            node.add_face(sciname_face, column=0, position="branch-right")
        if node.is_leaf() and not node.name == 'annotation':
            s = str(msa[taxids.index(int(node.name))].seq)
            seqFace = SeqMotifFace(
                s, [[0, len(s), "seq", 10, 10, None, None, None]],
                scale_factor=1)
            add_face_to_node(seqFace, node, 0, position="aligned")
            # gi=taxid2gi[int(node.name)]
            add_face_to_node(TextFace(' ' +
                                      msa[taxids.index(int(node.name))].id),
                             node,
                             column=1,
                             position="aligned")
            # add_face_to_node(TextFace('      '+str(int(node.name))+' '),node,column=2, position = "aligned")
            # add_face_to_node(TextFace('      '+str(gi2variant[gi])+' '),node,column=3, position = "aligned")

        if node.is_leaf() and node.name == 'annotation':
            if (annotation):
                s = annotation
                # get_hist_ss_in_aln_as_string(msa_tr)
            else:
                s = ' ' * len(msa[0].seq)
            seqFace = SeqMotifFace(
                s, [[0, len(s), "seq", 10, 10, None, None, None]],
                scale_factor=1)
            add_face_to_node(seqFace, node, 0, position="aligned")
            add_face_to_node(TextFace(' ' + 'SEQ_ID'),
                             node,
                             column=1,
                             position="aligned")
Ejemplo n.º 14
0
    def layout(node):
        # print node.rank
        # print node.sci_name
        if getattr(node, "rank", None):
            if(node.rank in ['order','class','phylum','kingdom']):   
                rank_face = AttrFace("sci_name", fsize=7, fgcolor="indianred")
                node.add_face(rank_face, column=0, position="branch-top")
        if node.is_leaf():
            sciname_face = AttrFace("sci_name", fsize=9, fgcolor="steelblue")
            node.add_face(sciname_face, column=0, position="branch-right")
        if node.is_leaf() and not node.name=='annotation':
            #here we are adding faces and we need to play with seqmotif face
            seq=str(seqreclist[taxids.index(int(node.name))].seq)
            motifs=[]#[[0,len(seq), "seq", 10, 10, None, None, None]]
            for f in seqreclist[taxids.index(int(node.name))].features:
                if f.type=='domain':
                    motifs.append([f.location.start,f.location.end,"[]",None,10,"blue", get_color(f.qualifiers['name']), "arial|8|black|%s"%f.qualifiers['name']])
                if f.type=='motif':
                    #It turns out that we need to solve overlap problem here, here it is solved only in case of one overlap
                    s=f.location.start
                    e=f.location.end
                    flag=True
                    overlappedm=[]
                    for m in motifs:
                        if m[2]=='seq' and m[0]<e and m[1]>s: #we have an overlap, four cases, preceding motife always is on top
                            flag=False
                            overlappedm.append(m)
                    if not flag: #we have to solve multiple overlap problem
                    #let's do it by scanning
                        sflag=False
                        eflag=False
                        for x in range(s,e+1):
                            if not sflag: #check if we can start
                                overlap=False
                                for m in overlappedm:
                                    if x>=m[0] and x<m[1]:
                                        overlap=True
                                if not overlap:
                                    ts=x
                                    sflag=True

                            #check if is time to end
                            if sflag and not eflag:
                                overlap=False
                                for m in overlappedm:
                                    if x==m[0]:
                                        overlap=True
                                if overlap or x==e:
                                    te=x
                                    eflag=True


                            if sflag and eflag:
                                motifs.append([ts,te,"seq",10,10,"black",get_color(f.qualifiers['name']),None])
                                sflag=False
                                eflag=False
                    if flag:
                        motifs.append([f.location.start,f.location.end,"seq",10,10,"black",get_color(f.qualifiers['name']),None])
            seqFace = SeqMotifFace(seq,motifs,scale_factor=1,seq_format="[]")
            seqFace.overlaping_motif_opacity = 1.0
            # seqFace.fg=aafgcolors
            # seqFace.bg=aabgcolors_gray

            add_face_to_node(seqFace, node, 0, position="aligned")
            # gi=taxid2gi[int(node.name)]
            add_face_to_node(TextFace(' '+seqreclist[taxids.index(int(node.name))].id+'         '),node,column=1, position = "aligned")
            # add_face_to_node(TextFace('      '+str(int(node.name))+' '),node,column=2, position = "aligned")
            # add_face_to_node(TextFace('      '+str(gi2variant[gi])+' '),node,column=3, position = "aligned")


        #We currently disable annotation
        if node.is_leaf() and node.name=='annotation':
            if(annotation):
                s=annotation
                # get_hist_ss_in_aln_as_string(msa_tr)
            else:
                s=' '*max(map(lambda x: len(x.seq),seqreclist))
Ejemplo n.º 15
0
    def layout(node):
        # print node.rank
        # print node.sci_name
        if getattr(node, "rank", None):
            if (node.rank in ['order', 'class', 'phylum', 'kingdom']):
                rank_face = AttrFace("sci_name", fsize=7, fgcolor="indianred")
                node.add_face(rank_face, column=0, position="branch-top")
        if node.is_leaf():
            sciname_face = AttrFace("sci_name", fsize=9, fgcolor="steelblue")
            node.add_face(sciname_face, column=0, position="branch-right")
        if node.is_leaf() and not node.name == 'annotation':
            #here we are adding faces and we need to play with seqmotif face
            seq = str(seqreclist[taxids.index(int(node.name))].seq)
            motifs = []  #[[0,len(seq), "seq", 10, 10, None, None, None]]
            for f in seqreclist[taxids.index(int(node.name))].features:
                if f.type == 'domain':
                    motifs.append([
                        f.location.start, f.location.end, "[]", None, 10,
                        "blue",
                        get_color(f.qualifiers['name']),
                        "arial|8|black|%s" % f.qualifiers['name']
                    ])
                if f.type == 'motif':
                    #It turns out that we need to solve overlap problem here, here it is solved only in case of one overlap
                    s = f.location.start
                    e = f.location.end
                    flag = True
                    overlappedm = []
                    for m in motifs:
                        if m[2] == 'seq' and m[0] < e and m[
                                1] > s:  #we have an overlap, four cases, preceding motife always is on top
                            flag = False
                            overlappedm.append(m)
                    if not flag:  #we have to solve multiple overlap problem
                        #let's do it by scanning
                        sflag = False
                        eflag = False
                        for x in range(s, e + 1):
                            if not sflag:  #check if we can start
                                overlap = False
                                for m in overlappedm:
                                    if x >= m[0] and x < m[1]:
                                        overlap = True
                                if not overlap:
                                    ts = x
                                    sflag = True

                            #check if is time to end
                            if sflag and not eflag:
                                overlap = False
                                for m in overlappedm:
                                    if x == m[0]:
                                        overlap = True
                                if overlap or x == e:
                                    te = x
                                    eflag = True

                            if sflag and eflag:
                                motifs.append([
                                    ts, te, "seq", 10, 10, "black",
                                    get_color(f.qualifiers['name']), None
                                ])
                                sflag = False
                                eflag = False
                    if flag:
                        motifs.append([
                            f.location.start, f.location.end, "seq", 10, 10,
                            "black",
                            get_color(f.qualifiers['name']), None
                        ])
            seqFace = SeqMotifFace(seq,
                                   motifs,
                                   scale_factor=1,
                                   seq_format="[]")
            seqFace.overlaping_motif_opacity = 1.0
            # seqFace.fg=aafgcolors
            # seqFace.bg=aabgcolors_gray

            add_face_to_node(seqFace, node, 0, position="aligned")
            # gi=taxid2gi[int(node.name)]
            add_face_to_node(
                TextFace(' ' + seqreclist[taxids.index(int(node.name))].id +
                         '         '),
                node,
                column=1,
                position="aligned")
            # add_face_to_node(TextFace('      '+str(int(node.name))+' '),node,column=2, position = "aligned")
            # add_face_to_node(TextFace('      '+str(gi2variant[gi])+' '),node,column=3, position = "aligned")

        #We currently disable annotation
        if node.is_leaf() and node.name == 'annotation':
            if (annotation):
                s = annotation
                # get_hist_ss_in_aln_as_string(msa_tr)
            else:
                s = ' ' * max(map(lambda x: len(x.seq), seqreclist))
Ejemplo n.º 16
0
def layout(node):
    if node.is_leaf():
        seqFace = SeqMotifFace(seq, motifs, scale_factor=1)
        add_face_to_node(seqFace, node, 0, position="aligned")
Ejemplo n.º 17
0
 def my_layout(node):
   F = TextFace(node.name, tight_text=True)
   add_face_to_node(F, node, column=0, position="branch-right")
Ejemplo n.º 18
0
 def ly_supports(node):
     if not node.is_leaf() and node.up:
         supFace = TextFace("%0.2g" %(node.support), fsize=7, fgcolor='indianred')
         add_face_to_node(supFace, node, column=0, position='branch-top')
Ejemplo n.º 19
0
 def ly_supports(node):
     if not node.is_leaf() and node.up:
         supFace = TextFace("%0.2g" % (node.support),
                            fsize=7,
                            fgcolor='indianred')
         add_face_to_node(supFace, node, column=0, position='branch-top')
Ejemplo n.º 20
0
def layout(node):
    node.img_style["size"] = 0
    node_name = node.name.replace(".bam", "")
    if node.is_leaf():
        col_country = header2column[sample_info["country"].get(node_name, "")]
        col_city = header2column[sample_info["city"].get(node_name, "")]
        ssize = 40
        countryF = RectFace(120, ssize, column_color[col_country],
                            column_color[col_country])
        cityF = RectFace(120, ssize, column_color[col_city],
                         column_color[col_city])

        if node_name in OBESITY:
            if OBESITY[node_name] == "obese":
                ocolor = "red"
            else:
                ocolor = "black"
            add_face_to_node(TextFace(OBESITY[node_name],
                                      fsize=18,
                                      fgcolor=ocolor),
                             node,
                             header2column["obesity"],
                             position="aligned")

        if node_name in DIABETES:
            ocolor = "purple"
            add_face_to_node(TextFace(DIABETES[node_name],
                                      fsize=18,
                                      fgcolor=ocolor),
                             node,
                             header2column["diabetes"],
                             position="aligned")

        add_face_to_node(countryF, node, col_country, position="aligned")
        add_face_to_node(cityF, node, col_city, position="aligned")
        add_face_to_node(TextFace("%s" % (node.name[:25]), fsize=20),
                         node,
                         0,
                         position='branch-right')
    else:
        if args.collapse_identical and len(node.children) > 50:
            node.img_style["draw_descendants"] = False
            node.img_style["size"] = 20
            node.img_style["shape"] = "square"
            node.img_style["hz_line_width"] = 5
            node.dist = 0.0001
            add_face_to_node(TextFace("%d samples without data" %
                                      len(node.children),
                                      fsize=20),
                             node,
                             0,
                             position='branch-right')