sequences are private in SequenceGroup
[jalview.git] / src / jalview / datamodel / AlignmentI.java
1 /*\r
2 * Jalview - A Sequence Alignment Editor and Viewer\r
3 * Copyright (C) 2005 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle\r
4 *\r
5 * This program is free software; you can redistribute it and/or\r
6 * modify it under the terms of the GNU General Public License\r
7 * as published by the Free Software Foundation; either version 2\r
8 * of the License, or (at your option) any later version.\r
9 *\r
10 * This program is distributed in the hope that it will be useful,\r
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
13 * GNU General Public License for more details.\r
14 *\r
15 * You should have received a copy of the GNU General Public License\r
16 * along with this program; if not, write to the Free Software\r
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA\r
18 */\r
19 package jalview.datamodel;\r
20 \r
21 import java.util.*;\r
22 \r
23 \r
24 /** Data structure to hold and manipulate a multiple sequence alignment\r
25  */\r
26 public interface AlignmentI\r
27 {\r
28     /**\r
29      *  Calculates the number of sequences in an alignment\r
30      *\r
31      * @return Number of sequences in alignment\r
32      */\r
33     public int getHeight();\r
34 \r
35     /**\r
36      * Calculates the maximum width of the alignment, including gaps.\r
37      *\r
38      * @return Greatest sequence length within alignment.\r
39      */\r
40     public int getWidth();\r
41 \r
42     /**\r
43      * Calculates the longest sequence Id of the alignment\r
44      *\r
45      * @return Number of characters in longest sequence Id.\r
46      */\r
47     public int getMaxIdLength();\r
48 \r
49     /**\r
50      * Calculates if this set of sequences is all the same length\r
51      *\r
52      * @return true if all sequences in alignment are the same length\r
53      */\r
54     public boolean isAligned();\r
55 \r
56     /**\r
57      * Gets sequences as a Vector\r
58      *\r
59      * @return All sequences in alignment.\r
60      */\r
61     public Vector getSequences();\r
62 \r
63     /**\r
64      * Gets sequences as a SequenceI[]\r
65      *\r
66      * @return All sequences in alignment.\r
67      */\r
68     public SequenceI [] getSequencesArray();\r
69 \r
70     /**\r
71      * Find a specific sequence in this alignment.\r
72      *\r
73      * @param i Index of required sequence.\r
74      *\r
75      * @return SequenceI at given index.\r
76      */\r
77     public SequenceI getSequenceAt(int i);\r
78 \r
79     /**\r
80      * Add a new sequence to this alignment.\r
81      *\r
82      * @param seq New sequence will be added at end of alignment.\r
83      */\r
84     public void addSequence(SequenceI seq);\r
85 \r
86     /**\r
87      * Used to set a particular index of the alignment with the given sequence.\r
88      *\r
89      * @param i Index of sequence to be updated.\r
90      * @param seq New sequence to be inserted.\r
91      */\r
92     public void setSequenceAt(int i, SequenceI seq);\r
93 \r
94     /**\r
95      * Deletes a sequence from the alignment.\r
96      *\r
97      * @param s Sequence to be deleted.\r
98      */\r
99     public void deleteSequence(SequenceI s);\r
100 \r
101     /**\r
102      * Deletes a sequence from the alignment.\r
103      *\r
104      * @param i Index of sequence to be deleted.\r
105      */\r
106     public void deleteSequence(int i);\r
107 \r
108     /**\r
109      * Deletes all residues in every sequence of alignment within given columns.\r
110      *\r
111      * @param start Start index of columns to delete.\r
112      * @param end End index to columns to delete.\r
113      */\r
114     public void deleteColumns(int start, int end);\r
115 \r
116     /**\r
117      * Deletes all residues in every sequence of alignment within given columns.\r
118      *\r
119      * @param seq1 Index of first sequence to delete columns from.\r
120      * @param seq2 Index of last sequence to delete columns from.\r
121      * @param start Start index of columns to delete.\r
122      * @param end End index of columns to delete.\r
123      */\r
124     public void deleteColumns(int seq1, int seq2, int start, int end);\r
125 \r
126     /**\r
127      * Finds sequence in alignment using sequence name as query.\r
128      *\r
129      * @param name Id of sequence to search for.\r
130      *\r
131      * @return Sequence matching query, if found. If not found returns null.\r
132      */\r
133     public SequenceI findName(String name);\r
134 \r
135 \r
136     /**\r
137      * Finds index of a given sequence in the alignment.\r
138      *\r
139      * @param s Sequence to look for.\r
140      *\r
141      * @return Index of sequence within the alignment.\r
142      */\r
143     public int findIndex(SequenceI s);\r
144 \r
145     /**\r
146     * All sequences will be cut from beginning to given index.\r
147     *\r
148     * @param i Remove all residues in sequences up to this column.\r
149      */\r
150     public void trimLeft(int i);\r
151 \r
152     /**\r
153      * All sequences will be cut from given index.\r
154      *\r
155      * @param i Remove all residues in sequences beyond this column.\r
156      */\r
157     public void trimRight(int i);\r
158 \r
159     /**\r
160      * Removes all columns containing entirely gap characters.\r
161      */\r
162     public void removeGaps();\r
163 \r
164 \r
165 \r
166     /**\r
167      * Finds group that given sequence is part of.\r
168      *\r
169      * @param s Sequence in alignment.\r
170      *\r
171      * @return First group found for sequence. WARNING :\r
172      * Sequences may be members of several groups. This method is incomplete.\r
173      */\r
174     public SequenceGroup findGroup(SequenceI s);\r
175 \r
176     /**\r
177      * Finds all groups that a given sequence is part of.\r
178      *\r
179      * @param s Sequence in alignment.\r
180      *\r
181      * @return All groups containing given sequence.\r
182      */\r
183     public SequenceGroup[] findAllGroups(SequenceI s);\r
184 \r
185     /**\r
186      * Adds a new SequenceGroup to this alignment.\r
187      *\r
188      * @param sg New group to be added.\r
189      */\r
190     public void addGroup(SequenceGroup sg);\r
191 \r
192     /**\r
193      * Deletes a specific SequenceGroup\r
194      *\r
195      * @param g Group will be deleted from alignment.\r
196      */\r
197     public void deleteGroup(SequenceGroup g);\r
198 \r
199     /**\r
200      * Get all the groups associated with this alignment.\r
201      *\r
202      * @return All groups as a Vector.\r
203      */\r
204     public Vector getGroups();\r
205 \r
206     /**\r
207      * Deletes all groups from this alignment.\r
208      */\r
209     public void deleteAllGroups();\r
210 \r
211 \r
212     /**\r
213      * Adds a new AlignmentAnnotation to this alignment\r
214      */\r
215     public void addAnnotation(AlignmentAnnotation aa);\r
216 \r
217 \r
218     public void setAnnotationIndex(AlignmentAnnotation aa, int index);\r
219 \r
220     /**\r
221      * Deletes a specific AlignmentAnnotation from the alignment.\r
222      *\r
223      * @param aa DOCUMENT ME!\r
224      */\r
225     public void deleteAnnotation(AlignmentAnnotation aa);\r
226 \r
227     /**\r
228      * DOCUMENT ME!\r
229      *\r
230      * @return DOCUMENT ME!\r
231      */\r
232     public AlignmentAnnotation[] getAlignmentAnnotation();\r
233 \r
234     /**\r
235      * DOCUMENT ME!\r
236      *\r
237      * @param gc DOCUMENT ME!\r
238      */\r
239     public void setGapCharacter(char gc);\r
240 \r
241     /**\r
242      * DOCUMENT ME!\r
243      *\r
244      * @return DOCUMENT ME!\r
245      */\r
246     public char getGapCharacter();\r
247 \r
248     /**\r
249      * DOCUMENT ME!\r
250      *\r
251      * @return DOCUMENT ME!\r
252      */\r
253     public Vector getAAFrequency();\r
254 \r
255     /**\r
256      * Returns true if alignment is nucleotide sequence\r
257      *\r
258      * @return DOCUMENT ME!\r
259      */\r
260     public boolean isNucleotide();\r
261 \r
262     /**\r
263      * Set true if the alignment is a nucleotide sequence\r
264      *\r
265      * @return\r
266      */\r
267     public void setNucleotide(boolean b);\r
268 \r
269 \r
270     public Alignment getDataset();\r
271 \r
272     public void setDataset(Alignment dataset);\r
273     /**\r
274      * pads sequences with gaps (to ensure the set looks like an alignment)\r
275      * @return boolean true if alignment was modified\r
276      */\r
277     public boolean padGaps();\r
278 \r
279     public void adjustSequenceAnnotations();\r
280 \r
281     public HiddenSequences getHiddenSequences();\r
282 \r
283 }\r