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
159 System.out.println("sg recalc");
\r
162 cs.setConsensus(AAFrequency.calculate(sequences, 0, getWidth()));
\r
165 if (cs instanceof ClustalxColourScheme)
\r
167 ( (ClustalxColourScheme) cs).resetClustalX(sequences,getWidth());
\r
171 if ( cs instanceof ConservationColourScheme)
\r
173 Conservation c = new Conservation(groupName,
\r
174 ResidueProperties.propHash, 3, sequences,
\r
177 c.verdict(false, 25);
\r
179 ConservationColourScheme ccs = (ConservationColourScheme) cs;
\r
181 if (ccs.cs instanceof ClustalxColourScheme)
\r
183 ( (ClustalxColourScheme) ccs.cs).resetClustalX(sequences, getWidth());
\r
189 public void addOrRemove(SequenceI s, boolean recalc)
\r
191 if (sequences.contains(s))
\r
193 deleteSequence(s, recalc);
\r
197 addSequence(s, recalc);
\r
201 public void deleteSequence(SequenceI s, boolean recalc)
\r
203 sequences.removeElement(s);
\r
205 recalcConservation();
\r
208 public int getStartRes()
\r
213 public int getEndRes()
\r
218 public void setStartRes(int i)
\r
223 public void setEndRes(int i)
\r
228 public int getSize()
\r
230 return sequences.size();
\r
233 public SequenceI getSequenceAt(int i)
\r
235 return (SequenceI) sequences.elementAt(i);
\r
238 public void setColourText(boolean state)
\r
240 colourText = state;
\r
243 public boolean getColourText()
\r
248 public void setDisplayText(boolean state)
\r
250 displayText = state;
\r
253 public boolean getDisplayText()
\r
255 return displayText;
\r
258 public void setDisplayBoxes(boolean state)
\r
260 displayBoxes = state;
\r
263 public boolean getDisplayBoxes()
\r
265 return displayBoxes;
\r
268 public int getWidth()
\r
270 // MC This needs to get reset when characters are inserted and deleted
\r
271 if (sequences.size() > 0)
\r
273 width = ( (SequenceI) sequences.elementAt(0)).getLength();
\r
276 for (int i = 1; i < sequences.size(); i++)
\r
278 SequenceI seq = (SequenceI) sequences.elementAt(i);
\r
280 if (seq.getLength() > width)
\r
282 width = seq.getLength();
\r
289 public void setOutlineColour(Color c)
\r
294 public Color getOutlineColour()
\r
296 return outlineColour;
\r
301 * returns the sequences in the group ordered by the ordering given by al
\r
303 * @param al Alignment
\r
304 * @return SequenceI[]
\r
306 public SequenceI[] getSequencesInOrder(Alignment al)
\r
309 java.util.Hashtable orderedSeqs = new java.util.Hashtable();
\r
310 SequenceI[] seqs = new SequenceI[sz = sequences.size()];
\r
312 for (int i = 0; i < sz; i++)
\r
314 SequenceI seq = (SequenceI) sequences.elementAt(i);
\r
315 int index = al.findIndex(seq);
\r
316 orderedSeqs.put(index + "", seq);
\r
321 for (int i = 0; i < sz; i++)
\r
323 SequenceI seq = null;
\r
325 while (seq == null)
\r
327 if (orderedSeqs.containsKey(index + ""))
\r
329 seq = (SequenceI) orderedSeqs.get(index + "");
\r