simple transformation of feature types like dbref and dbxref into database references
authorjprocter <Jim Procter>
Fri, 19 Dec 2008 15:36:08 +0000 (15:36 +0000)
committerjprocter <Jim Procter>
Fri, 19 Dec 2008 15:36:08 +0000 (15:36 +0000)
src/jalview/ws/DasSequenceFeatureFetcher.java

index 1038ed9..5f7f2ba 100644 (file)
@@ -477,45 +477,48 @@ public class DasSequenceFeatureFetcher
         {\r
           for (int i = 0; i < features.length; i++)\r
           {\r
+            // standard DAS feature-> jalview sequence feature transformation\r
             SequenceFeature f = newSequenceFeature(features[i], source\r
                     .getNickname());\r
-            if (dbref.getMap() != null && f.getBegin() > 0\r
-                    && f.getEnd() > 0)\r
+            if (!parseSeqFeature(seq, f, features[i], source))\r
             {\r
-              debug("mapping from " + f.getBegin() + " - " + f.getEnd());\r
-              SequenceFeature vf[] = null;\r
-\r
-              try\r
-              {\r
-                vf = dbref.getMap().locateFeature(f);\r
-              } catch (Exception ex)\r
+              if (dbref.getMap() != null && f.getBegin() > 0\r
+                      && f.getEnd() > 0)\r
               {\r
-                Cache.log\r
-                        .info("Error in 'experimental' mapping of features. Please try to reproduce and then report info to help@jalview.org.");\r
-                Cache.log.info("Mapping feature from " + f.getBegin()\r
-                        + " to " + f.getEnd() + " in dbref "\r
-                        + dbref.getAccessionId() + " in "\r
-                        + dbref.getSource());\r
-                Cache.log.info("using das Source " + ds.getUrl());\r
-                Cache.log.info("Exception", ex);\r
-              }\r
+                debug("mapping from " + f.getBegin() + " - " + f.getEnd());\r
+                SequenceFeature vf[] = null;\r
 \r
-              if (vf != null)\r
-              {\r
-                for (int v = 0; v < vf.length; v++)\r
+                try\r
+                {\r
+                  vf = dbref.getMap().locateFeature(f);\r
+                } catch (Exception ex)\r
+                {\r
+                  Cache.log\r
+                          .info("Error in 'experimental' mapping of features. Please try to reproduce and then report info to jalview-discuss@jalview.org.");\r
+                  Cache.log.info("Mapping feature from " + f.getBegin()\r
+                          + " to " + f.getEnd() + " in dbref "\r
+                          + dbref.getAccessionId() + " in "\r
+                          + dbref.getSource());\r
+                  Cache.log.info("using das Source " + ds.getUrl());\r
+                  Cache.log.info("Exception", ex);\r
+                }\r
+\r
+                if (vf != null)\r
                 {\r
-                  debug("mapping to " + v + ": " + vf[v].getBegin() + " - "\r
-                          + vf[v].getEnd());\r
-                  seq.addSequenceFeature(vf[v]);\r
+                  for (int v = 0; v < vf.length; v++)\r
+                  {\r
+                    debug("mapping to " + v + ": " + vf[v].getBegin()\r
+                            + " - " + vf[v].getEnd());\r
+                    seq.addSequenceFeature(vf[v]);\r
+                  }\r
                 }\r
               }\r
-            }\r
-            else\r
-            {\r
-              seq.addSequenceFeature(f);\r
+              else\r
+              {\r
+                seq.addSequenceFeature(f);\r
+              }\r
             }\r
           }\r
-\r
           featuresAdded(seq);\r
         }\r
         else\r
@@ -578,10 +581,14 @@ public class DasSequenceFeatureFetcher
           {\r
             for (int i = 0; i < features.length; i++)\r
             {\r
+              // standard DAS feature-> jalview sequence feature transformation\r
               SequenceFeature f = newSequenceFeature(features[i], source\r
                       .getNickname());\r
-\r
-              seq.addSequenceFeature(f);\r
+              if (!parseSeqFeature(seq, f, features[i], source))\r
+              {\r
+                // just add as a simple sequence feature\r
+                seq.addSequenceFeature(f);\r
+              }\r
             }\r
 \r
             featuresAdded(seq);\r
@@ -609,6 +616,42 @@ public class DasSequenceFeatureFetcher
   }\r
 \r
   /**\r
+   * examine the given sequence feature to determine if it should actually\r
+   * be turned into sequence annotation or database cross references rather\r
+   * than a simple sequence feature. \r
+   * @param seq the sequence to annotate\r
+   * @param f the jalview sequence feature generated from the DAS feature \r
+   * @param map the sequence feature attributes\r
+   * @param source the source that emitted the feature\r
+   * @return true if feature was consumed as another kind of annotation.\r
+   */\r
+  protected boolean parseSeqFeature(SequenceI seq, SequenceFeature f, Map map,\r
+          Das1Source source)\r
+  {\r
+    // check if source has biosapiens or other sequence ontology label\r
+    if (f.getType()!=null && (f.getType().equalsIgnoreCase("DBXREF")\r
+            || f.getType().equalsIgnoreCase("DBREF")))\r
+    {\r
+      // try to parse the accession out\r
+      \r
+      DBRefEntry dbr = new DBRefEntry();\r
+      dbr.setVersion(source.getNickname());\r
+      StringTokenizer st = new StringTokenizer(f.getDescription(),":");\r
+      if (st.hasMoreTokens())\r
+      {\r
+        dbr.setSource(st.nextToken());\r
+      }\r
+      if (st.hasMoreTokens())\r
+      {\r
+        dbr.setAccessionId(st.nextToken());\r
+      }\r
+      seq.addDBRef(dbr);\r
+      return true;\r
+    }\r
+    return false;\r
+  }\r
+\r
+  /**\r
    * creates a jalview sequence feature from a das feature document\r
    * \r
    * @param dasfeature\r
@@ -651,7 +694,11 @@ public class DasSequenceFeatureFetcher
       }\r
       try\r
       {\r
-        score = (float) Double.parseDouble(dasfeature.get("SCORE").toString());\r
+        Object scr = dasfeature.get("SCORE");\r
+        if (scr!=null)\r
+          {score = (float) Double.parseDouble(scr.toString());\r
+          \r
+          }\r
       } catch (Exception ex)\r
       {\r
       }\r
@@ -662,12 +709,14 @@ public class DasSequenceFeatureFetcher
       if (dasfeature.containsKey("LINK"))\r
       {\r
         // Do not put feature extent in link text for non-positional features\r
-        if (f.begin==0 && f.end==0)\r
-        {        f.addLink(f.getType()+"|"\r
-                + dasfeature.get("LINK"));\r
-        } else {\r
+        if (f.begin == 0 && f.end == 0)\r
+        {\r
+          f.addLink(f.getType() + "|" + dasfeature.get("LINK"));\r
+        }\r
+        else\r
+        {\r
           f.addLink(f.getType() + " " + f.begin + "_" + f.end + "|"\r
-                        + dasfeature.get("LINK"));\r
+                  + dasfeature.get("LINK"));\r
         }\r
       }\r
 \r