837084f92db89608a8403d2fc27a780725c59cc7 angie Mon May 4 10:32:20 2020 -0700 Use '$' instead of ';' as a separator in internal node labels because ';' is used to terminate Newick trees and gives phyloTree indigestion. diff --git src/hg/utils/otto/nextstrainNcov/nextstrain.py src/hg/utils/otto/nextstrainNcov/nextstrain.py index bb3e41c..44344a8 100755 --- src/hg/utils/otto/nextstrainNcov/nextstrain.py +++ src/hg/utils/otto/nextstrainNcov/nextstrain.py @@ -432,31 +432,31 @@ def rNextstrainToNewick(node, parentClade=None, parentVarStr=''): """Recursively descend ncov.tree and build Newick tree string of samples to file""" kids = node.get('children') if (kids): # Make a more concise variant path string than the one we make for the clade track, # to embed in internal node labels for Yatish's tree explorations. localVariants = [] if (node.get('branch_attrs') and node['branch_attrs'].get('mutations') and node['branch_attrs']['mutations'].get('nuc')): # Nucleotide variants specific to this branch for varName in node['branch_attrs']['mutations']['nuc']: if (snvRe.match(varName)): localVariants.append(varName) varStr = '+'.join(localVariants) if (len(parentVarStr) and len(varStr)): - varStr = ';'.join([parentVarStr, varStr]) + varStr = '$'.join([parentVarStr, varStr]) elif (not len(varStr)): varStr = parentVarStr nodeAttrs = node['node_attrs'] if (nodeAttrs.get('clade_membership')): cladeName = nodeAttrs['clade_membership']['value'] elif (parentClade): cladeName = parentClade else: cladeName = 'unassigned' color = str(cladeRgbFromName(cladeName)) descendants = ','.join([ rNextstrainToNewick(child, cladeName, varStr) for child in kids ]) label = '#'.join([cladeName, varStr]) treeString = '(' + descendants + ')' + label + ':' + color else: nodeAttrs = node['node_attrs']