9f2a05da6cabd2a866e490dcd671b0dbd2984bfe
[vamsas.git] / src / uk / ac / vamsas / objects / utils / trees / SequenceNode.java
1 /**\r
2  * \r
3  */\r
4 package uk.ac.vamsas.objects.utils.trees;\r
5 \r
6 import uk.ac.vamsas.client.Vobject;\r
7 import uk.ac.vamsas.client.VorbaId;\r
8 \r
9 public class SequenceNode extends BinaryNode {\r
10   /** DOCUMENT ME!! */\r
11   public float dist;\r
12 \r
13   /** DOCUMENT ME!! */\r
14   public boolean dummy = false;\r
15 \r
16   private boolean placeholder = false;\r
17 \r
18   /**\r
19    * Creates a new SequenceNode object.\r
20    */\r
21   public SequenceNode() {\r
22     super();\r
23   }\r
24 \r
25   /**\r
26    * Creates a new SequenceNode object.\r
27    * \r
28    * @param val\r
29    *          DOCUMENT ME!\r
30    * @param parent\r
31    *          DOCUMENT ME!\r
32    * @param dist\r
33    *          DOCUMENT ME!\r
34    * @param name\r
35    *          DOCUMENT ME!\r
36    */\r
37   public SequenceNode(Vobject val, SequenceNode parent, float dist, String name) {\r
38     super(val, parent, name);\r
39     this.dist = dist;\r
40   }\r
41 \r
42   /**\r
43    * Creates a new SequenceNode object.\r
44    * \r
45    * @param val\r
46    *          DOCUMENT ME!\r
47    * @param parent\r
48    *          DOCUMENT ME!\r
49    * @param name\r
50    *          DOCUMENT ME!\r
51    * @param dist\r
52    *          DOCUMENT ME!\r
53    * @param bootstrap\r
54    *          DOCUMENT ME!\r
55    * @param dummy\r
56    *          DOCUMENT ME!\r
57    */\r
58   public SequenceNode(Vobject val, SequenceNode parent, String name,\r
59       float dist, int bootstrap, boolean dummy) {\r
60     super(val, parent, name);\r
61     this.dist = dist;\r
62     this.bootstrap = bootstrap;\r
63     this.dummy = dummy;\r
64   }\r
65 \r
66   /**\r
67    * @param dummy\r
68    *          true if node is created for the representation of polytomous\r
69    *          trees\r
70    */\r
71   public boolean isDummy() {\r
72     return dummy;\r
73   }\r
74 \r
75   /*\r
76    * @param placeholder is true if the sequence referred to in the element node\r
77    * is not actually present in the associated alignment\r
78    */\r
79   public boolean isPlaceholder() {\r
80     return placeholder;\r
81   }\r
82 \r
83   /**\r
84    * DOCUMENT ME!\r
85    * \r
86    * @param newstate\r
87    *          DOCUMENT ME!\r
88    * \r
89    * @return DOCUMENT ME!\r
90    */\r
91   public boolean setDummy(boolean newstate) {\r
92     boolean oldstate = dummy;\r
93     dummy = newstate;\r
94 \r
95     return oldstate;\r
96   }\r
97 \r
98   /**\r
99    * DOCUMENT ME!\r
100    * \r
101    * @param Placeholder\r
102    *          DOCUMENT ME!\r
103    */\r
104   public void setPlaceholder(boolean Placeholder) {\r
105     this.placeholder = Placeholder;\r
106   }\r
107 \r
108   /**\r
109    * ascends the tree but doesn't stop until a non-dummy node is discovered.\r
110    * This will probably break if the tree is a mixture of BinaryNodes and\r
111    * SequenceNodes.\r
112    */\r
113   public SequenceNode AscendTree() {\r
114     SequenceNode c = this;\r
115 \r
116     do {\r
117       c = (SequenceNode) c.parent();\r
118     } while ((c != null) && c.dummy);\r
119 \r
120     return c;\r
121   }\r
122 \r
123 }