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
70 public SequenceGroup(String groupName, ColourSchemeI scheme,
\r
71 boolean displayBoxes, boolean displayText,
\r
75 this.groupName = groupName;
\r
76 this.displayBoxes = displayBoxes;
\r
77 this.displayText = displayText;
\r
78 this.colourText = colourText;
\r
84 public boolean adjustForRemoveLeft(int col)
\r
86 // return value is true if the group still exists
\r
87 if (startRes >= col)
\r
89 startRes = startRes - col;
\r
94 endRes = endRes - col;
\r
96 if (startRes > endRes)
\r
103 // must delete this group!!
\r
110 public boolean adjustForRemoveRight(int col)
\r
112 if (startRes > col)
\r
114 // delete this group
\r
126 public String getName()
\r
131 public void setName(String name)
\r
136 public Conservation getConservation()
\r
141 public void setConservation(Conservation c)
\r
146 public void addSequence(SequenceI s, boolean recalc)
\r
148 if (!sequences.contains(s))
\r
149 sequences.addElement(s);
\r
152 recalcConservation();
\r
156 public void recalcConservation()
\r
160 cs.setConsensus(AAFrequency.calculate(sequences, 0, getWidth()));
\r
163 if ( cs instanceof ConservationColourScheme)
\r
165 Conservation c = new Conservation(groupName,
\r
166 ResidueProperties.propHash, 3, sequences,
\r
169 c.verdict(false, 25);
\r
171 ConservationColourScheme ccs = (ConservationColourScheme) cs;
\r
176 public void addOrRemove(SequenceI s, boolean recalc)
\r
178 if (sequences.contains(s))
\r
180 deleteSequence(s, recalc);
\r
184 addSequence(s, recalc);
\r
188 public void deleteSequence(SequenceI s, boolean recalc)
\r
190 sequences.removeElement(s);
\r
192 recalcConservation();
\r
195 public int getStartRes()
\r
200 public int getEndRes()
\r
205 public void setStartRes(int i)
\r
210 public void setEndRes(int i)
\r
215 public int getSize()
\r
217 return sequences.size();
\r
220 public SequenceI getSequenceAt(int i)
\r
222 return (SequenceI) sequences.elementAt(i);
\r
225 public void setColourText(boolean state)
\r
227 colourText = state;
\r
230 public boolean getColourText()
\r
235 public void setDisplayText(boolean state)
\r
237 displayText = state;
\r
240 public boolean getDisplayText()
\r
242 return displayText;
\r
245 public void setDisplayBoxes(boolean state)
\r
247 displayBoxes = state;
\r
250 public boolean getDisplayBoxes()
\r
252 return displayBoxes;
\r
255 public int getWidth()
\r
257 // MC This needs to get reset when characters are inserted and deleted
\r
258 if (sequences.size() > 0)
\r
260 width = ( (SequenceI) sequences.elementAt(0)).getLength();
\r
263 for (int i = 1; i < sequences.size(); i++)
\r
265 SequenceI seq = (SequenceI) sequences.elementAt(i);
\r
267 if (seq.getLength() > width)
\r
269 width = seq.getLength();
\r
276 public void setOutlineColour(Color c)
\r
281 public Color getOutlineColour()
\r
283 return outlineColour;
\r
288 * returns the sequences in the group ordered by the ordering given by al
\r
290 * @param al Alignment
\r
291 * @return SequenceI[]
\r
293 public SequenceI[] getSequencesInOrder(Alignment al)
\r
296 java.util.Hashtable orderedSeqs = new java.util.Hashtable();
\r
297 SequenceI[] seqs = new SequenceI[sz = sequences.size()];
\r
299 for (int i = 0; i < sz; i++)
\r
301 SequenceI seq = (SequenceI) sequences.elementAt(i);
\r
302 int index = al.findIndex(seq);
\r
303 orderedSeqs.put(index + "", seq);
\r
308 for (int i = 0; i < sz; i++)
\r
310 SequenceI seq = null;
\r
312 while (seq == null)
\r
314 if (orderedSeqs.containsKey(index + ""))
\r
316 seq = (SequenceI) orderedSeqs.get(index + "");
\r