X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fdatamodel%2FAlignment.java;h=b4e2b3f45be44f4ef1db3623dbf085a6b4aee2cc;hb=4944c2f33bb34b4f262fd2f3ae40dcdc2a825557;hp=28849b608ea6fa87ff6d94cd29d3c84e74604f85;hpb=efc31b4a8d5cee63555586804a2b79c06bdb5a14;p=jalview.git diff --git a/src/jalview/datamodel/Alignment.java b/src/jalview/datamodel/Alignment.java index 28849b6..b4e2b3f 100755 --- a/src/jalview/datamodel/Alignment.java +++ b/src/jalview/datamodel/Alignment.java @@ -29,28 +29,46 @@ import java.util.*; */ public class Alignment implements AlignmentI { + protected Alignment dataset; protected Vector sequences; protected Vector groups = new Vector(); protected Vector superGroup = new Vector(); protected char gapCharacter = '-'; + protected int type = NUCLEOTIDE; + public static final int PROTEIN = 0; + public static final int NUCLEOTIDE = 1; /** DOCUMENT ME!! */ public AlignmentAnnotation[] annotations; - /** DOCUMENT ME!! */ - public boolean featuresAdded = false; - /** Make an alignment from an array of Sequences. * * @param sequences */ public Alignment(SequenceI[] seqs) { + int i=0; + + if( jalview.util.Comparison.isNucleotide(seqs)) + type = NUCLEOTIDE; + else + type = PROTEIN; + sequences = new Vector(); - for (int i = 0; i < seqs.length; i++) + for (i = 0; i < seqs.length; i++) { sequences.addElement(seqs[i]); + + if(seqs[i].getDatasetSequence()!=null + && seqs[i].getDatasetSequence().getAnnotation()!=null) + { + + for(int a=0; as.getLength()) + { + sequences.removeElement(s); + j--; + jSize--; + } + else + { + s.setStart(newstart); + s.setSequence(s.getSequence().substring(i)); + } } } @@ -220,7 +248,8 @@ public class Alignment implements AlignmentI int newend = s.findPosition(i); s.setEnd(newend); - s.setSequence(s.getSequence().substring(0, i + 1)); + if(s.getLength()>i) + s.setSequence(s.getSequence().substring(0, i + 1)); } } @@ -334,9 +363,16 @@ public class Alignment implements AlignmentI { Vector temp = new Vector(); - for (int i = 0; i < this.groups.size(); i++) + int gSize = groups.size(); + for (int i = 0; i < gSize; i++) { SequenceGroup sg = (SequenceGroup) groups.elementAt(i); + if(sg==null || sg.sequences==null) + { + this.deleteGroup(sg); + gSize--; + continue; + } if (sg.sequences.contains(s)) { @@ -354,47 +390,7 @@ public class Alignment implements AlignmentI return ret; } - /** - * DOCUMENT ME! - * - * @param sg DOCUMENT ME! - */ - public void addSuperGroup(SuperGroup sg) - { - superGroup.addElement(sg); - } - /** - * DOCUMENT ME! - * - * @param sg DOCUMENT ME! - */ - public void removeSuperGroup(SuperGroup sg) - { - superGroup.removeElement(sg); - } - - /** - * DOCUMENT ME! - * - * @param sg DOCUMENT ME! - * - * @return DOCUMENT ME! - */ - public SuperGroup getSuperGroup(SequenceGroup sg) - { - for (int i = 0; i < this.superGroup.size(); i++) - { - SuperGroup temp = (SuperGroup) superGroup.elementAt(i); - - if (temp.sequenceGroups.contains(sg)) - { - return temp; - } - } - - return null; - } /** */ public void addGroup(SequenceGroup sg) @@ -439,11 +435,9 @@ public class Alignment implements AlignmentI while (i < sequences.size()) { - SequenceI s = getSequenceAt(i); - - if (s.getName().equals(name)) + if (getSequenceAt(i).getName().equals(name)) { - return s; + return getSequenceAt(i); } i++; @@ -452,25 +446,6 @@ public class Alignment implements AlignmentI return null; } - /** */ - public SequenceI findbyDisplayId(String name) - { - int i = 0; - - while (i < sequences.size()) - { - SequenceI s = getSequenceAt(i); - - if (s.getDisplayId().equals(name)) - { - return s; - } - - i++; - } - - return null; - } /** */ public int findIndex(SequenceI s) @@ -638,6 +613,85 @@ public class Alignment implements AlignmentI } /** + * + * @param aa AlignmentAnnotation + * @param seqRef The sequence to associate this annotation with + * @return The adjusted AlignmentAnnotation, with dataset sequence and annotation added + */ + public AlignmentAnnotation addAnnotation(AlignmentAnnotation aa, SequenceI seqRef) + { + if(seqRef!=null) + { + //We can only add Annotations to the dataset sequences + if(seqRef.getDatasetSequence()==null) + { + setDataset(null); + } + + AlignmentAnnotation [] old = seqRef.getDatasetSequence().getAnnotation(); + + //First check if this is a new annotation or not. If it is new, + //we must add the annotation to the dataset + boolean newAnnotation = true; + if(seqRef.getDatasetSequence().getAnnotation()!=null) + { + for(int a=0; a 0) + copy = new AlignmentAnnotation( + aa.label, aa.description, aa.annotations, aa.graphMin, + aa.graphMax, aa.graph + ); + else + copy = new AlignmentAnnotation( + aa.label, aa.description, aa.annotations + ); + + copy.datasetAnnotation = aa; + + addAnnotation(copy); + + copy.sequenceRef = seqRef; + + return copy; + } + else + { + addAnnotation(aa); + return aa; + } + } + + public void adjustSequenceAnnotations() + { + if(annotations!=null) + { + for (int a = 0; a < annotations.length; a++) + { + if (annotations[a].sequenceRef != null) + { + annotations[a].adjustForAlignment(); + } + } + } + } + + /** * DOCUMENT ME! * * @param aa DOCUMENT ME! @@ -645,24 +699,48 @@ public class Alignment implements AlignmentI public void addAnnotation(AlignmentAnnotation aa) { int aSize = 1; - if (annotations != null) { aSize = annotations.length + 1; } AlignmentAnnotation[] temp = new AlignmentAnnotation[aSize]; + + temp[aSize-1] = aa; + int i = 0; if (aSize > 1) { - for (i = 0; i < (aSize - 1); i++) + for (i = 0; i < (aSize-1); i++) { temp[i] = annotations[i]; } } - temp[i] = aa; + annotations = temp; + } + + public void setAnnotationIndex(AlignmentAnnotation aa, int index) + { + if(aa==null || annotations==null || annotations.length-1