JAL-2847 start of cleaning up db loading code
[jalview.git] / src / jalview / ext / archaeopteryx / LoadedTreeSequenceAssociation.java
1 package jalview.ext.archaeopteryx;
2
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;
8
9 import java.util.HashMap;
10 import java.util.List;
11 import java.util.Map;
12
13 import org.forester.phylogeny.Phylogeny;
14 import org.forester.phylogeny.PhylogenyNode;
15
16 public class LoadedTreeSequenceAssociation
17         implements ExternalLoadedTreeAssociationI
18 {
19   SequenceI[] alignSequences;
20
21   Phylogeny tree;
22
23   Map<SequenceI, PhylogenyNode> alignmentWithNodes;
24
25   Map<PhylogenyNode, SequenceI> nodesWithAlignment;
26
27   public LoadedTreeSequenceAssociation(SequenceI[] alignmentSequences,
28           Phylogeny aptxTree)
29   {
30     alignSequences = alignmentSequences;
31     tree = aptxTree;
32     alignmentWithNodes = new HashMap<>(alignSequences.length);
33     nodesWithAlignment = new HashMap<>(alignSequences.length);
34
35   }
36
37
38
39   /**
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.
42    * 
43    * Partially refactored from the old Jalview TreeModel
44    * associateLeavesToSequences method.
45    *
46    * @param seqs
47    * @param aptxTree
48    */
49   @Override
50   public void associateLeavesToSequences()
51
52   {
53     SequenceIdMatcher algnIds = new SequenceIdMatcher(alignSequences);
54
55     List<PhylogenyNode> leaves = tree.getExternalNodes();
56     SequenceI nodeSequence;
57     String nodeSequenceName;
58
59     for (PhylogenyNode treeNode : leaves)
60     {
61       nodeSequenceName = treeNode.getName();
62
63       nodeSequence = algnIds.findIdMatch(nodeSequenceName);
64       if (nodeSequence != null)
65       {
66         org.forester.phylogeny.data.Sequence foresterNodeSeq = DataConversions
67                 .createForesterSequence(nodeSequence, true);
68         treeNode.getNodeData().setSequence(foresterNodeSeq);
69
70         MappingUtils.putWithDuplicationCheck(alignmentWithNodes,
71                 nodeSequence, treeNode);
72         MappingUtils.putWithDuplicationCheck(nodesWithAlignment,
73                 treeNode, nodeSequence);
74
75
76       }
77
78     }
79
80   }
81
82
83
84   public Map<SequenceI, PhylogenyNode> getAlignmentWithNodes()
85   {
86     return alignmentWithNodes;
87   }
88
89   public Map<PhylogenyNode, SequenceI> getNodesWithAlignment()
90   {
91     return nodesWithAlignment;
92   }
93
94   // {
95   // SequenceIdMatcher algnIds = new SequenceIdMatcher(seqs);
96   //
97   // List<PhylogenyNode> leaves = aptxTree.getExternalNodes();
98   //
99   // int namesleft = seqs.length;
100   // SequenceI nodeSequence;
101   // String nodeSequenceName;
102   // List<SequenceI> one2many = new ArrayList<>();
103   // int countOne2Many = 0;
104   //
105   // for (PhylogenyNode treeNode : leaves)
106   // {
107   // nodeSequenceName = treeNode.getName();
108   // nodeSequence = null;
109   //
110   // if (namesleft > -1)
111   // {
112   // nodeSequence = algnIds.findIdMatch(nodeSequenceName);
113   // }
114   //
115   // if (nodeSequence != null)
116   // {
117   // org.forester.phylogeny.data.Sequence foresterNodeSeq =
118   // ForesterDataConversions.createForesterSequence(nodeSequence, true);
119   //
120   // treeNode.getNodeData().setSequence(foresterNodeSeq);
121   // if (one2many.contains(nodeSequence))
122   // {
123   // countOne2Many++;
124   // if (jalview.bin.Cache.log.isDebugEnabled())
125   // {
126   // jalview.bin.Cache.log.debug("One 2 many relationship for"
127   // +nodeSequence.getName());
128   // }
129   // }
130   // else
131   // {
132   // one2many.add(nodeSequence);
133   // namesleft--;
134   // }
135   // }
136   // else
137   // {
138   // treeNode.setCollapse(true); // collapse nodes that couldn't be connected
139   // // to a sequence
140   //
141   //
142   // // treeNode.setElement( new Sequence(nodeSequenceName,
143   // "THISISAPLACEHOLDER"));
144   // // treeNode.setPlaceholder(true);
145   // }
146   // }
147   // if (jalview.bin.Cache.log.isDebugEnabled() && countOne2Many > 0)
148   // {
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.");
152   // }
153   // one2many.clear();
154   //
155   // }
156
157 }
158
159
160
161
162
163