function draw_tree_svg(what) { fdraw_tree_svg("thoughts", what) } function fdraw_tree_svg(where, what) { //thoughts_write("
"+what.length+"") height_of_nodes = new Object nodes_of_height = new Object order_of_nodes = new Object max_height = 0 max_width = 0 for(var i in what) { w = what[i] c = w height = 0 while(c.parent) { c = c.parent height++ } height_of_nodes[i] = height if(nodes_of_height[height] == undefined) { nodes_of_height[height] = [] } nodes_of_height[height].push(i) max_height = max_height > height ? max_height : height } for(var i in nodes_of_height) { width = nodes_of_height[i].length max_width = max_width > width ? max_width : width } for(var i in nodes_of_height) { current_row = nodes_of_height[i] for(var ii in current_row) { current_node = current_row[ii] order_of_nodes[current_node] = ii } } var scale = 10 //10 to 20 seems to work best var fatness = 1.2 //2.0 is twice fat and 0.5 is half thin var tallness = 0.7 //2.0 is twice tall and 0.5 is half short total_height = (max_height +2) * (scale*4*tallness) total_width = (max_width +2) * (scale*4*fatness) t = "
" var inner_traverse = tree_traversal(traverse[which]) var gapped_seq = new Object() for(var it in inner_traverse) { if(fasta_dict[inner_traverse[it].name]) { gapped_seq[inner_traverse[it].serial] = fasta_dict[inner_traverse[it].name] } } stripped_seq = strip_gaps(gapped_seq) for(var it in inner_traverse) { if(fasta_dict[inner_traverse[it].name]) { message += "" + number_pad(inner_traverse[it].serial, 2) + "" + ": " + stripped_seq[inner_traverse[it].serial] + "\n" } } message += "" thoughts_write(message) //thoughts_overwrite(message) for(var i in _undo_render_hash) { document.getElementById(i).setAttribute("style", _undo_render_hash[i]) } _undo_render_hash = new Object var current_node = document.getElementById("phylo_node_" + which) _undo_render_hash["phylo_node_" + which] = current_node.getAttribute("style") current_node.setAttribute("style", "fill:#AFA;stroke:black;") } function strip_gaps(gapped_seq) { var retObj = new Object() var gaps = new Object() for(var gs in gapped_seq) { for(var ch in gapped_seq[gs]) { if(gapped_seq[gs][ch] != "-") gaps[ch] = true } } for(var gs in gapped_seq) { var currentSeq = "" for(var ch in gapped_seq[gs]) { if(gaps[ch]) { currentSeq += gapped_seq[gs][ch] } } retObj[gs] = currentSeq } return retObj } function number_pad(v, vlen) { var i = 0 var retObj = "" + v while(retObj.length < vlen ) { retObj = "0" + retObj } return retObj } function get_spiked_name(node) { var spiked_name = undefined if(node.name != undefined && node.name.match("[|]")) { var splitted = node.name.split("|") var gi_number = undefined var pdb_id = undefined for(sp in splitted) { if(sp > 0) { if(splitted[sp -1] == "gi") { gi_number = splitted[sp] } if(splitted[sp -1] == "pdb") { pdb_id = splitted[sp] } } } spiked_name = "" + node.name if(gi_number) { spiked_name = spiked_name.replace("gi|"+gi_number, "gi|"+gi_number+"") } if(pdb_id) { spiked_name = spiked_name.replace("pdb|"+pdb_id, "pdb|"+pdb_id+"") } } return spiked_name } function get_image_name(node) { var image_name = undefined if(node.name != undefined && node.name.match("[|]")) { var splitted = node.name.split("|") var pdb_id = undefined for(sp in splitted) { if(sp > 0) { if(splitted[sp -1] == "pdb") { pdb_id = splitted[sp] } } } if(pdb_id) { image_name = "" } } return image_name } function node_expose(node) { var thoughts = "" var name = get_spiked_name(node) || node.name || undefined thoughts += ("