all alignment sequences associated with a dataset sequence must have start-end update...
authorjprocter <Jim Procter>
Wed, 24 Jun 2009 08:28:23 +0000 (08:28 +0000)
committerjprocter <Jim Procter>
Wed, 24 Jun 2009 08:28:23 +0000 (08:28 +0000)
src/jalview/ws/DBRefFetcher.java

index 1fd9f1c..73d106a 100644 (file)
@@ -74,6 +74,8 @@ public class DBRefFetcher implements Runnable
 \r
   SequenceFetcher sfetcher;\r
 \r
+  private SequenceI[] alseqs;\r
+\r
   public DBRefFetcher()\r
   {\r
   }\r
@@ -106,9 +108,11 @@ public class DBRefFetcher implements Runnable
   public DBRefFetcher(SequenceI[] seqs, AlignFrame af, String[] sources)\r
   {\r
     this.af = af;\r
+    alseqs = new SequenceI[seqs.length];\r
     SequenceI[] ds = new SequenceI[seqs.length];\r
     for (int i = 0; i < seqs.length; i++)\r
     {\r
+      alseqs[i] = seqs[i];\r
       if (seqs[i].getDatasetSequence() != null)\r
         ds[i] = seqs[i].getDatasetSequence();\r
       else\r
@@ -608,8 +612,9 @@ public class DBRefFetcher implements Runnable
           // absStart+sequence.getStart()+entrySeq.length()-1},\r
           // new int[] { entry.getStart(), entry.getEnd() }, 1, 1);\r
           // relocate local features for updated start\r
-          if (updateRefFrame && sequence.getSequenceFeatures() != null)\r
-          {\r
+          if (updateRefFrame) {\r
+            if (sequence.getSequenceFeatures() != null)\r
+            {\r
             SequenceFeature[] sf = sequence.getSequenceFeatures();\r
             int start = sequence.getStart();\r
             int end = sequence.getEnd();\r
@@ -624,6 +629,7 @@ public class DBRefFetcher implements Runnable
                 sf[sfi].setEnd(sf[sfi].getEnd() + startShift);\r
               }\r
             }\r
+            }\r
           }\r
         }\r
 \r
@@ -638,6 +644,22 @@ public class DBRefFetcher implements Runnable
           // finally, update local sequence reference frame if we're allowed\r
           sequence.setStart(absStart);\r
           sequence.setEnd(absEnd);\r
+          // search for alignment sequences to update coordinate frame for\r
+          for (int alsq = 0; alsq<alseqs.length; alsq++)\r
+          {\r
+            if (alseqs[alsq].getDatasetSequence()==sequence)\r
+            {\r
+              String ngAlsq = AlignSeq.extractGaps("-. ",\r
+                      alseqs[alsq].getSequenceAsString()).toUpperCase();\r
+              int oldstrt = alseqs[alsq].getStart();\r
+              alseqs[alsq].setStart(sequence.getSequenceAsString().toUpperCase().indexOf(ngAlsq)+sequence.getStart());\r
+              if (oldstrt != alseqs[alsq].getStart()) {\r
+                alseqs[alsq].setEnd(ngAlsq.length()+alseqs[alsq].getStart()-1);\r
+              }\r
+            }\r
+          }\r
+          // TODO:  search for all other references to this dataset sequence, and update start/end\r
+          // TODO: update all AlCodonMappings which involve this alignment sequence (e.g. Q30167 cdna translation from exon2 product (vamsas demo)\r
         }\r
         // and remove it from the rest\r
         // TODO: decide if we should remove annotated sequence from set\r