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 ClustalxColourScheme)
\r
166 ( (ClustalxColourScheme) cs).resetClustalX(sequences,getWidth());
\r
170 if ( cs instanceof ConservationColourScheme)
\r
172 Conservation c = new Conservation(groupName,
\r
173 ResidueProperties.propHash, 3, sequences,
\r
176 c.verdict(false, 25);
\r
178 ConservationColourScheme ccs = (ConservationColourScheme) cs;
\r
180 if (ccs.cs instanceof ClustalxColourScheme)
\r
182 ( (ClustalxColourScheme) ccs.cs).resetClustalX(sequences, getWidth());
\r
188 public void addOrRemove(SequenceI s, boolean recalc)
\r
190 if (sequences.contains(s))
\r
192 deleteSequence(s, recalc);
\r
196 addSequence(s, recalc);
\r
200 public void deleteSequence(SequenceI s, boolean recalc)
\r
202 sequences.removeElement(s);
\r
204 recalcConservation();
\r
207 public int getStartRes()
\r
212 public int getEndRes()
\r
217 public void setStartRes(int i)
\r
222 public void setEndRes(int i)
\r
227 public int getSize()
\r
229 return sequences.size();
\r
232 public SequenceI getSequenceAt(int i)
\r
234 return (SequenceI) sequences.elementAt(i);
\r
237 public void setColourText(boolean state)
\r
239 colourText = state;
\r
242 public boolean getColourText()
\r
247 public void setDisplayText(boolean state)
\r
249 displayText = state;
\r
252 public boolean getDisplayText()
\r
254 return displayText;
\r
257 public void setDisplayBoxes(boolean state)
\r
259 displayBoxes = state;
\r
262 public boolean getDisplayBoxes()
\r
264 return displayBoxes;
\r
267 public int getWidth()
\r
269 // MC This needs to get reset when characters are inserted and deleted
\r
270 if (sequences.size() > 0)
\r
272 width = ( (SequenceI) sequences.elementAt(0)).getLength();
\r
275 for (int i = 1; i < sequences.size(); i++)
\r
277 SequenceI seq = (SequenceI) sequences.elementAt(i);
\r
279 if (seq.getLength() > width)
\r
281 width = seq.getLength();
\r
288 public void setOutlineColour(Color c)
\r
293 public Color getOutlineColour()
\r
295 return outlineColour;
\r
300 * returns the sequences in the group ordered by the ordering given by al
\r
302 * @param al Alignment
\r
303 * @return SequenceI[]
\r
305 public SequenceI[] getSequencesInOrder(AlignmentI al)
\r
307 int sz = sequences.size();
\r
308 java.util.Hashtable orderedSeqs = new java.util.Hashtable();
\r
309 SequenceI[] seqs = new SequenceI[sz];
\r
311 for (int i = 0; i < sz; i++)
\r
313 SequenceI seq = (SequenceI) sequences.elementAt(i);
\r
314 int index = al.findIndex(seq);
\r
315 orderedSeqs.put(index + "", seq);
\r
320 for (int i = 0; i < al.getHeight(); i++)
\r
322 if (orderedSeqs.containsKey(i + ""))
\r
324 seqs[index++] = (SequenceI) orderedSeqs.get(i + "");
\r