1 package jalview.ext.archaeopteryx;
3 import jalview.analysis.SequenceIdMatcher;
4 import jalview.datamodel.SequenceI;
5 import jalview.ext.forester.DataConversions;
6 import jalview.ext.treeviewer.ExternalLoadedTreeAssociationI;
7 import jalview.util.MappingUtils;
9 import java.util.HashMap;
12 import org.forester.phylogeny.Phylogeny;
13 import org.forester.phylogeny.PhylogenyNode;
14 import org.forester.phylogeny.iterators.PhylogenyNodeIterator;
16 public class LoadedTreeSequenceAssociation
17 implements ExternalLoadedTreeAssociationI
19 SequenceI[] alignSequences;
23 Map<SequenceI, PhylogenyNode> alignmentWithNodes;
25 Map<PhylogenyNode, SequenceI> nodesWithAlignment;
27 public LoadedTreeSequenceAssociation(SequenceI[] alignmentSequences,
30 alignSequences = alignmentSequences;
32 alignmentWithNodes = new HashMap<>(alignSequences.length);
33 nodesWithAlignment = new HashMap<>(alignSequences.length);
40 * Tries to match sequences from Jalview with tree nodes in Archaeopteryx and
41 * fills in the tree node with sequence data if a match is found.
43 * Partially refactored from the old Jalview TreeModel
44 * associateLeavesToSequences method.
50 public void associateLeavesToSequences()
53 SequenceIdMatcher algnIds = new SequenceIdMatcher(alignSequences);
54 SequenceI nodeSequence;
55 String nodeSequenceName;
59 for (final PhylogenyNodeIterator iter = tree.iteratorPreorder(); iter
62 PhylogenyNode treeNode = iter.next();
63 nodeSequenceName = treeNode.getName();
65 nodeSequence = algnIds.findIdMatch(nodeSequenceName);
66 if (nodeSequence != null)
68 org.forester.phylogeny.data.Sequence foresterNodeSeq = DataConversions
69 .createForesterSequence(nodeSequence, true);
70 treeNode.getNodeData().setSequence(foresterNodeSeq);
72 MappingUtils.putWithDuplicationCheck(alignmentWithNodes,
73 nodeSequence, treeNode);
74 MappingUtils.putWithDuplicationCheck(nodesWithAlignment, treeNode,
87 public Map<SequenceI, PhylogenyNode> getAlignmentWithNodes()
89 return alignmentWithNodes;
92 public Map<PhylogenyNode, SequenceI> getNodesWithAlignment()
94 return nodesWithAlignment;
98 // SequenceIdMatcher algnIds = new SequenceIdMatcher(seqs);
100 // List<PhylogenyNode> leaves = aptxTree.getExternalNodes();
102 // int namesleft = seqs.length;
103 // SequenceI nodeSequence;
104 // String nodeSequenceName;
105 // List<SequenceI> one2many = new ArrayList<>();
106 // int countOne2Many = 0;
108 // for (PhylogenyNode treeNode : leaves)
110 // nodeSequenceName = treeNode.getName();
111 // nodeSequence = null;
113 // if (namesleft > -1)
115 // nodeSequence = algnIds.findIdMatch(nodeSequenceName);
118 // if (nodeSequence != null)
120 // org.forester.phylogeny.data.Sequence foresterNodeSeq =
121 // ForesterDataConversions.createForesterSequence(nodeSequence, true);
123 // treeNode.getNodeData().setSequence(foresterNodeSeq);
124 // if (one2many.contains(nodeSequence))
127 // if (jalview.bin.Cache.log.isDebugEnabled())
129 // jalview.bin.Cache.log.debug("One 2 many relationship for"
130 // +nodeSequence.getName());
135 // one2many.add(nodeSequence);
141 // treeNode.setCollapse(true); // collapse nodes that couldn't be connected
145 // // treeNode.setElement( new Sequence(nodeSequenceName,
146 // "THISISAPLACEHOLDER"));
147 // // treeNode.setPlaceholder(true);
150 // if (jalview.bin.Cache.log.isDebugEnabled() && countOne2Many > 0)
152 // jalview.bin.Cache.log.debug("There were " + countOne2Many
153 // + "alignment sequence ids (out of" + one2many.size()
154 // + " unique ids) linked to two or more leaves.");