1 package jalview.ext.treeviewer;
3 import jalview.analysis.SequenceIdMatcher;
4 import jalview.datamodel.SequenceI;
5 import jalview.util.MappingUtils;
7 import java.util.HashMap;
8 import java.util.Iterator;
12 * Generic implementation of {@link LoadedTreeAssociationI } that tries to
13 * associate tree nodes based on comparing Jalview's sequence IDs to tree node
16 * @author kjvanderheide
19 public class LoadedTreeSequenceAssociation
20 implements LoadedTreeAssociationI
22 SequenceI[] alignSequences;
26 Map<SequenceI, TreeNodeI> alignmentWithNodes;
28 Map<TreeNodeI, SequenceI> nodesWithAlignment;
30 public LoadedTreeSequenceAssociation(SequenceI[] alignmentSequences,
33 alignSequences = alignmentSequences;
35 alignmentWithNodes = new HashMap<>(alignSequences.length);
36 nodesWithAlignment = new HashMap<>(alignSequences.length);
41 public void associateNodesToSequences()
44 SequenceIdMatcher algnIds = new SequenceIdMatcher(alignSequences);
45 SequenceI nodeSequence;
46 String nodeSequenceName;
50 for (final Iterator<TreeNodeI> iter = tree
51 .iterateInPreOrder(); iter
54 TreeNodeI treeNode = iter.next();
55 nodeSequenceName = treeNode.getNodeName();
57 nodeSequence = algnIds.findIdMatch(nodeSequenceName);
58 if (nodeSequence != null)
60 // is there already a sequence present for the node?
61 // If so, does it actually match Jalview's sequence?
62 if (treeNode.getSequence() != null)
64 if (!(treeNode.getSequence().getSequenceAsString()
65 .equals(nodeSequence.getSequenceAsString())))
68 "Sequence detected in tree node that does not match corresponding Jalview sequence:"
70 // which sequence gets precedence?
77 treeNode.setSequence(nodeSequence);
79 MappingUtils.putWithDuplicationCheck(alignmentWithNodes,
80 nodeSequence, treeNode);
81 MappingUtils.putWithDuplicationCheck(nodesWithAlignment, treeNode,
95 public Map<SequenceI, TreeNodeI> getAlignmentWithNodes()
97 return alignmentWithNodes;
101 public Map<TreeNodeI, SequenceI> getNodesWithAlignment()
103 return nodesWithAlignment;