X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fdatamodel%2FAlignment.java;h=78aa0157bce1cd05116da3335415de48165853a7;hb=4f01ddc72d2297c48c57d4f9c25af45b300df154;hp=61735eeb1d763b0b8c78d8a32efe9b6f8deebca9;hpb=8c6e707d6d9b1b8ad6385eb7eeef0bc78cb46f6e;p=jalview.git diff --git a/src/jalview/datamodel/Alignment.java b/src/jalview/datamodel/Alignment.java index 61735ee..78aa015 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)); } } @@ -446,11 +475,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++; @@ -459,25 +486,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) @@ -645,6 +653,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! @@ -652,24 +739,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