fix class-cast exception and added beginnings of DBRef inference mechanism
authorjprocter <Jim Procter>
Tue, 18 Sep 2007 10:30:52 +0000 (10:30 +0000)
committerjprocter <Jim Procter>
Tue, 18 Sep 2007 10:30:52 +0000 (10:30 +0000)
src/jalview/io/vamsas/Sequencemapping.java

index a4ee585..4cede9a 100644 (file)
@@ -28,7 +28,7 @@ public class Sequencemapping extends Rangetype
     } else {\r
       if (sequenceMapping.isUpdated())\r
       {\r
-        update((jalview.datamodel.Mapping) mjvmapping, sequenceMapping);\r
+        update((jalview.util.MapList) mjvmapping, sequenceMapping);\r
       }\r
     }\r
   }\r
@@ -144,9 +144,13 @@ public class Sequencemapping extends Rangetype
 \r
     jalview.bin.Cache.log.debug("Successfully created mapping "+sequenceMapping.getVorbaId());\r
   }\r
+  private void update(jalview.util.MapList mjvmapping, SequenceMapping sequenceMapping)\r
+  {\r
+    jalview.bin.Cache.log.error("Not implemented: Jalview Update Alcodon Mapping:TODO!"); \r
+  }\r
   private void update(jalview.datamodel.Mapping mjvmapping, SequenceMapping sequenceMapping)\r
   {\r
-    jalview.bin.Cache.log.error("Not implemented: Jalview Update Mapping"); \r
+    jalview.bin.Cache.log.error("Not implemented: Jalview Update Sequence DBRef Mapping"); \r
   }\r
   /**\r
    * limitations: Currently, jalview only deals with mappings between dataset\r
@@ -193,6 +197,7 @@ public class Sequencemapping extends Rangetype
       jalview.bin.Cache.log.error("Probable Vamsas implementation error : unbound dataset sequences involved in a mapping are being parsed!");\r
       return;\r
     } \r
+\r
     if (sdloc.getDictionary()\r
             .equals(uk.ac.vamsas.objects.utils.SymbolDictionary.STANDARD_NA))\r
     {\r
@@ -241,5 +246,83 @@ public class Sequencemapping extends Rangetype
     }\r
     bindjvvobj(mapping, sequenceMapping);\r
     jalview.structure.StructureSelectionManager.getStructureSelectionManager().addMappings(new AlignedCodonFrame[] { afc });\r
+    // Try to link up any conjugate database references in the two sequences\r
+    // matchConjugateDBRefs(from, to,  mapping);\r
+    // Try to propagate any dbrefs across this mapping.\r
+\r
   }\r
+  /**\r
+   * Complete any 'to' references in jalview.datamodel.Mapping objects associated with conjugate DBRefEntry under given mapping  \r
+   * @param from sequence corresponding to from reference for sequence mapping\r
+   * @param to sequence correspondeing to to reference for sequence mapping\r
+   * @param smap maplist parsed in same sense as from and to\r
+   */\r
+  private void matchConjugateDBRefs(SequenceI from, SequenceI to,\r
+          jalview.util.MapList smap)\r
+  {\r
+    if (from.getDBRef()==null && to.getDBRef()==null)\r
+    {\r
+      if (jalview.bin.Cache.log.isDebugEnabled())\r
+      {\r
+        jalview.bin.Cache.log.debug("Not matching conjugate refs for "+from.getName()+" and "+to.getName());\r
+      }\r
+      return; \r
+    }\r
+    if (jalview.bin.Cache.log.isDebugEnabled())\r
+    {\r
+      jalview.bin.Cache.log.debug("Matching conjugate refs for "+from.getName()+" and "+to.getName());\r
+    }\r
+    jalview.datamodel.DBRefEntry[] fdb = from.getDBRef();\r
+    jalview.datamodel.DBRefEntry[] tdb = new jalview.datamodel.DBRefEntry[to.getDBRef().length];\r
+    int tdblen = to.getDBRef().length;\r
+    System.arraycopy(to.getDBRef(), 0, tdb, 0, tdblen);\r
+    Vector matched = new Vector();\r
+    jalview.util.MapList smapI = smap.getInverse();\r
+    for (int f=0;f<fdb.length; f++)\r
+    {\r
+      jalview.datamodel.DBRefEntry fe = fdb[f];\r
+      jalview.datamodel.Mapping fmp = fe.getMap();\r
+      boolean fmpnnl = fmp!=null;\r
+      // if (fmpnnl && fmp.getTo()!=null)\r
+      //{\r
+      //  jalview.bin.Cache.log.debug("Not overwriting existing To reference in "+fe);\r
+      //  continue;\r
+      //}\r
+      // smap from maps from fe.local to fe.map\r
+      boolean smapfromlocal2fe = (fmpnnl) ? smap.equals(fmp.getMap()) : false;\r
+      // smap from maps from fe.map to fe.local.\r
+      boolean smapfromfemap2local = (fmpnnl) ? smapI.equals(fmp.getMap()) : false;\r
+      for (int t=0; t<tdblen; t++)\r
+      {\r
+        jalview.datamodel.DBRefEntry te = tdb[t];\r
+        if (te!=null)\r
+        {\r
+          if (fe.getSource().equals(te.getSource())\r
+              && fe.getAccessionId().equals(te.getAccessionId()))\r
+          {\r
+            jalview.datamodel.Mapping tmp = te.getMap();\r
+            boolean tmpnnl = tmp!=null;\r
+            if (tmpnnl && tmp.getTo()!=null)\r
+            {\r
+              \r
+            }\r
+            // smap to maps from te.local to te.map\r
+            boolean smaptolocal2tm = (tmpnnl) ? smap.equals(tmp.getMap()) : false;\r
+            // smap to maps from te.map to te.local\r
+            boolean smaptotemap2local = (tmpnnl) ? smapI.equals(fmp.getMap()) : false;\r
+            if (smapfromlocal2fe && smaptotemap2local)\r
+            {\r
+              // smap implies mapping from to to from\r
+              fmp.setTo(to);\r
+              tmp.setTo(from);\r
+            } else \r
+              if (smapfromfemap2local && smaptolocal2tm) {\r
+                fmp.setTo(to);\r
+              }\r
+            }\r
+            \r
+        }\r
+      }\r
+    }\r
+    }\r
 }
\ No newline at end of file