X-Git-Url: http://source.jalview.org/gitweb/?p=jalview.git;a=blobdiff_plain;f=src%2Fjalview%2Fext%2Ftreeviewer%2FLoadedTreeSequenceAssociation.java;fp=src%2Fjalview%2Fext%2Ftreeviewer%2FLoadedTreeSequenceAssociation.java;h=c05a57c32121a978a331ec9c85e85e96b1bec660;hp=0000000000000000000000000000000000000000;hb=4a3def9f59cefe629c9a33d87483283aee085928;hpb=eca4795050a0f7eca3d5dece68eaa54987cebd15 diff --git a/src/jalview/ext/treeviewer/LoadedTreeSequenceAssociation.java b/src/jalview/ext/treeviewer/LoadedTreeSequenceAssociation.java new file mode 100644 index 0000000..c05a57c --- /dev/null +++ b/src/jalview/ext/treeviewer/LoadedTreeSequenceAssociation.java @@ -0,0 +1,113 @@ +package jalview.ext.treeviewer; + +import jalview.analysis.SequenceIdMatcher; +import jalview.datamodel.SequenceI; +import jalview.util.MappingUtils; + +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; + +/** + * Generic implementation of {@link LoadedTreeAssociationI } that tries to + * associate tree nodes based on comparing Jalview's sequence IDs to tree node + * names. + * + * @author kjvanderheide + * + */ +public class LoadedTreeSequenceAssociation + implements LoadedTreeAssociationI +{ + SequenceI[] alignSequences; + + TreeI tree; + + Map alignmentWithNodes; + + Map nodesWithAlignment; + + public LoadedTreeSequenceAssociation(SequenceI[] alignmentSequences, + TreeI extTree) + { + alignSequences = alignmentSequences; + tree = extTree; + alignmentWithNodes = new HashMap<>(alignSequences.length); + nodesWithAlignment = new HashMap<>(alignSequences.length); + + } + + @Override + public void associateNodesToSequences() + + { + SequenceIdMatcher algnIds = new SequenceIdMatcher(alignSequences); + SequenceI nodeSequence; + String nodeSequenceName; + + if (!tree.isEmpty()) + { + for (final Iterator iter = tree + .iterateInPreOrder(); iter + .hasNext();) + { + TreeNodeI treeNode = iter.next(); + nodeSequenceName = treeNode.getNodeName(); + + nodeSequence = algnIds.findIdMatch(nodeSequenceName); + if (nodeSequence != null) + { + // is there already a sequence present for the node? + // If so, does it actually match Jalview's sequence? + if (treeNode.getSequence() != null) + { + if (!(treeNode.getSequence().getSequenceAsString() + .equals(nodeSequence.getSequenceAsString()))) + { + System.err.println( + "Sequence detected in tree node that does not match corresponding Jalview sequence:" + + nodeSequenceName); + // which sequence gets precedence? + + } + + } + else + { + treeNode.setSequence(nodeSequence); + } + MappingUtils.putWithDuplicationCheck(alignmentWithNodes, + nodeSequence, treeNode); + MappingUtils.putWithDuplicationCheck(nodesWithAlignment, treeNode, + nodeSequence); + + + } + + } + + } + } + + + + @Override + public Map getAlignmentWithNodes() + { + return alignmentWithNodes; + } + + @Override + public Map getNodesWithAlignment() + { + return nodesWithAlignment; + } + + +} + + + + + +