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)
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)
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")
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')
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")
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
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
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
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
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")
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))
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))
def layout(node): if node.is_leaf(): seqFace = SeqMotifFace(seq, motifs, scale_factor=1) add_face_to_node(seqFace, node, 0, position="aligned")
def my_layout(node): F = TextFace(node.name, tight_text=True) add_face_to_node(F, node, column=0, position="branch-right")
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')
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')
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')