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;
10 import java.util.List;
13 import org.forester.phylogeny.Phylogeny;
14 import org.forester.phylogeny.PhylogenyNode;
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);
55 List<PhylogenyNode> leaves = tree.getExternalNodes();
56 SequenceI nodeSequence;
57 String nodeSequenceName;
59 for (PhylogenyNode treeNode : leaves)
61 nodeSequenceName = treeNode.getName();
63 nodeSequence = algnIds.findIdMatch(nodeSequenceName);
64 if (nodeSequence != null)
66 org.forester.phylogeny.data.Sequence foresterNodeSeq = DataConversions
67 .createForesterSequence(nodeSequence, true);
68 treeNode.getNodeData().setSequence(foresterNodeSeq);
70 MappingUtils.putWithDuplicationCheck(alignmentWithNodes,
71 nodeSequence, treeNode);
72 MappingUtils.putWithDuplicationCheck(nodesWithAlignment,
73 treeNode, nodeSequence);
84 public Map<SequenceI, PhylogenyNode> getAlignmentWithNodes()
86 return alignmentWithNodes;
89 public Map<PhylogenyNode, SequenceI> getNodesWithAlignment()
91 return nodesWithAlignment;
95 // SequenceIdMatcher algnIds = new SequenceIdMatcher(seqs);
97 // List<PhylogenyNode> leaves = aptxTree.getExternalNodes();
99 // int namesleft = seqs.length;
100 // SequenceI nodeSequence;
101 // String nodeSequenceName;
102 // List<SequenceI> one2many = new ArrayList<>();
103 // int countOne2Many = 0;
105 // for (PhylogenyNode treeNode : leaves)
107 // nodeSequenceName = treeNode.getName();
108 // nodeSequence = null;
110 // if (namesleft > -1)
112 // nodeSequence = algnIds.findIdMatch(nodeSequenceName);
115 // if (nodeSequence != null)
117 // org.forester.phylogeny.data.Sequence foresterNodeSeq =
118 // ForesterDataConversions.createForesterSequence(nodeSequence, true);
120 // treeNode.getNodeData().setSequence(foresterNodeSeq);
121 // if (one2many.contains(nodeSequence))
124 // if (jalview.bin.Cache.log.isDebugEnabled())
126 // jalview.bin.Cache.log.debug("One 2 many relationship for"
127 // +nodeSequence.getName());
132 // one2many.add(nodeSequence);
138 // treeNode.setCollapse(true); // collapse nodes that couldn't be connected
142 // // treeNode.setElement( new Sequence(nodeSequenceName,
143 // "THISISAPLACEHOLDER"));
144 // // treeNode.setPlaceholder(true);
147 // if (jalview.bin.Cache.log.isDebugEnabled() && countOne2Many > 0)
149 // jalview.bin.Cache.log.debug("There were " + countOne2Many
150 // + "alignment sequence ids (out of" + one2many.size()
151 // + " unique ids) linked to two or more leaves.");