2 * Jalview - A Sequence Alignment Editor and Viewer
\r
3 * Copyright (C) 2005 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle
\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
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
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
19 package jalview.datamodel;
\r
21 import jalview.analysis.*;
\r
23 import jalview.datamodel.*;
\r
25 import jalview.schemes.*;
\r
29 import java.util.Vector;
\r
31 public class SequenceGroup
\r
34 Conservation conserve;
\r
36 boolean displayBoxes;
\r
37 boolean displayText;
\r
39 public Vector sequences = new Vector();
\r
41 public ColourSchemeI cs;
\r
44 Color outlineColour = Color.black;
\r
46 public SequenceGroup()
\r
48 groupName = "Group";
\r
49 this.displayBoxes = true;
\r
50 this.displayText = true;
\r
51 this.colourText = false;
\r
55 public SequenceGroup(Vector sequences, String groupName, ColourSchemeI scheme,
\r
56 boolean displayBoxes, boolean displayText,
\r
60 this.sequences = sequences;
\r
61 this.groupName = groupName;
\r
62 this.displayBoxes = displayBoxes;
\r
63 this.displayText = displayText;
\r
64 this.colourText = colourText;
\r
68 recalcConservation();
\r
71 public SequenceGroup(String groupName, ColourSchemeI scheme,
\r
72 boolean displayBoxes, boolean displayText,
\r
76 this.groupName = groupName;
\r
77 this.displayBoxes = displayBoxes;
\r
78 this.displayText = displayText;
\r
79 this.colourText = colourText;
\r
85 public boolean adjustForRemoveLeft(int col)
\r
87 // return value is true if the group still exists
\r
88 if (startRes >= col)
\r
90 startRes = startRes - col;
\r
95 endRes = endRes - col;
\r
97 if (startRes > endRes)
\r
104 // must delete this group!!
\r
111 public boolean adjustForRemoveRight(int col)
\r
113 if (startRes > col)
\r
115 // delete this group
\r
127 public String getName()
\r
132 public void setName(String name)
\r
137 public Conservation getConservation()
\r
142 public void setConservation(Conservation c)
\r
147 public void addSequence(SequenceI s, boolean recalc)
\r
149 if (!sequences.contains(s))
\r
150 sequences.addElement(s);
\r
153 recalcConservation();
\r
157 public void recalcConservation()
\r
161 cs.setConsensus(AAFrequency.calculate(sequences, 0, getWidth()));
\r
164 if ( cs instanceof ConservationColourScheme)
\r
166 Conservation c = new Conservation(groupName,
\r
167 ResidueProperties.propHash, 3, sequences,
\r
170 c.verdict(false, 25);
\r
172 ConservationColourScheme ccs = (ConservationColourScheme) cs;
\r
177 public void addOrRemove(SequenceI s, boolean recalc)
\r
179 if (sequences.contains(s))
\r
181 deleteSequence(s, recalc);
\r
185 addSequence(s, recalc);
\r
189 public void deleteSequence(SequenceI s, boolean recalc)
\r
191 sequences.removeElement(s);
\r
193 recalcConservation();
\r
196 public int getStartRes()
\r
201 public int getEndRes()
\r
206 public void setStartRes(int i)
\r
211 public void setEndRes(int i)
\r
216 public int getSize()
\r
218 return sequences.size();
\r
221 public SequenceI getSequenceAt(int i)
\r
223 return (SequenceI) sequences.elementAt(i);
\r
226 public void setColourText(boolean state)
\r
228 colourText = state;
\r
231 public boolean getColourText()
\r
236 public void setDisplayText(boolean state)
\r
238 displayText = state;
\r
241 public boolean getDisplayText()
\r
243 return displayText;
\r
246 public void setDisplayBoxes(boolean state)
\r
248 displayBoxes = state;
\r
251 public boolean getDisplayBoxes()
\r
253 return displayBoxes;
\r
256 public int getWidth()
\r
258 // MC This needs to get reset when characters are inserted and deleted
\r
259 if (sequences.size() > 0)
\r
261 width = ( (SequenceI) sequences.elementAt(0)).getLength();
\r
264 for (int i = 1; i < sequences.size(); i++)
\r
266 SequenceI seq = (SequenceI) sequences.elementAt(i);
\r
268 if (seq.getLength() > width)
\r
270 width = seq.getLength();
\r
277 public void setOutlineColour(Color c)
\r
282 public Color getOutlineColour()
\r
284 return outlineColour;
\r
289 * returns the sequences in the group ordered by the ordering given by al
\r
291 * @param al Alignment
\r
292 * @return SequenceI[]
\r
294 public SequenceI[] getSequencesInOrder(Alignment al)
\r
297 java.util.Hashtable orderedSeqs = new java.util.Hashtable();
\r
298 SequenceI[] seqs = new SequenceI[sz = sequences.size()];
\r
300 for (int i = 0; i < sz; i++)
\r
302 SequenceI seq = (SequenceI) sequences.elementAt(i);
\r
303 int index = al.findIndex(seq);
\r
304 orderedSeqs.put(index + "", seq);
\r
309 for (int i = 0; i < sz; i++)
\r
311 SequenceI seq = null;
\r
313 while (seq == null)
\r
315 if (orderedSeqs.containsKey(index + ""))
\r
317 seq = (SequenceI) orderedSeqs.get(index + "");
\r