Skip to content

Instantly share code, notes, and snippets.

@benmaier
Forked from grabear/Newick2JSON.py
Last active June 4, 2020 11:50
Show Gist options
  • Save benmaier/54f556e3e98a081a0adf1900b79cbe8e to your computer and use it in GitHub Desktop.
Save benmaier/54f556e3e98a081a0adf1900b79cbe8e to your computer and use it in GitHub Desktop.
Converts a newick file into JSON format for d3/TreeWidget javascript component
import sys
from ete3 import Tree
import random
def get_json(node):
# Read ETE tag for duplication or speciation events
if not hasattr(node, 'evoltype'):
dup = random.sample(['N','Y'], 1)[0]
elif node.evoltype == "S":
dup = "N"
elif node.evoltype == "D":
dup = "Y"
node.name = node.name.replace("'", '')
json = { "name": node.name,
"display_label": node.name,
"duplication": dup,
"branch_length": str(node.dist),
"common_name": node.name,
"seq_length": 0,
"type": "node" if node.children else "leaf",
"uniprot_name": "Unknown",
}
if node.children:
json["children"] = []
for ch in node.children:
json["children"].append(get_json(ch))
return json
if __name__ == '__main__':
if len(sys.argv) > 1:
t = Tree(sys.argv[1])
else:
print("Error: No input file given.")
sys.exit(1)
# TreeWidget seems to fail with simple quotes
print(str(get_json(t)).replace("'", '"'))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment