local sequence properties are preserved in SeqCigar representation of sequence using...
authorjprocter <Jim Procter>
Mon, 23 Jun 2008 07:45:38 +0000 (07:45 +0000)
committerjprocter <Jim Procter>
Mon, 23 Jun 2008 07:45:38 +0000 (07:45 +0000)
src/jalview/datamodel/SeqCigar.java

index c896555..9ed0388 100644 (file)
@@ -18,6 +18,8 @@
  */
 package jalview.datamodel;
 
+import java.util.Hashtable;
+
 import jalview.analysis.*;
 import jalview.util.*;
 
@@ -29,6 +31,7 @@ public class SeqCigar
    */
   private int start, end;
   private SequenceI refseq = null;
+  private Hashtable seqProps;
   /**
    * Reference dataset sequence for the cigar string
    * @return SequenceI
@@ -91,9 +94,20 @@ public class SeqCigar
                        refseq.getStart() + start + bounds[0],
                        refseq.getStart() + start +
                        ( (bounds[2] == 0) ? -1 : bounds[2]));
+    seq.setDescription(refseq.getDescription());
+    int sstart = seq.getStart(),
+      send = seq.getEnd();
     // seq.checkValidRange(); probably not needed
+    // recover local properties if present 
+    if (seqProps!=null)
+    {
+      // this recovers dataset sequence reference as well as local features, names, start/end settings.
+      SeqsetUtils.SeqCharacterUnhash(seq, seqProps);
+    }
+    // ensure dataset sequence is up to date from local reference 
     seq.setDatasetSequence(refseq);
-    seq.setDescription(refseq.getDescription());
+    seq.setStart(sstart);
+    seq.setEnd(send);
     return seq;
   }
 
@@ -182,8 +196,9 @@ public class SeqCigar
       hasgaps = true;
     }
 
-    this.refseq = ds;
-
+    refseq = ds;
+    // copy over local properties for the sequence instance of the refseq
+    seqProps = SeqsetUtils.SeqCharacterHash(seq);
     // Check  offsets
     if (end > ds.getLength())
     {