changeset 108:5d1259b88c27 draft

planemo upload for repository https://github.com/galaxyproject/tools-iuc/tree/master/tools/jbrowse2 commit 9de1453a009c254ab11b16ae8a56cb5c22b131bf
author fubar
date Sat, 29 Jun 2024 06:10:22 +0000
parents a074cd6b5905
children 27e9ddaaf325
files __pycache__/jbrowse2.cpython-312.pyc bedscoreplugin.js configbedscore.sample jbrowse2.py jbrowse2.xml macros.xml
diffstat 6 files changed, 244 insertions(+), 43 deletions(-) [+]
line wrap: on
line diff
Binary file __pycache__/jbrowse2.cpython-312.pyc has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bedscoreplugin.js	Sat Jun 29 06:10:22 2024 +0000
@@ -0,0 +1,26 @@
+// colour bed regions according to score - must have columns and score as part of the adapter setup
+;(function () {
+  class Plugin {
+    name = 'BedScorePlugin';
+    version = '1.0';
+
+    install(pluginManager) {
+      pluginManager.jexl.addFunction('customColor', feature => {
+        if (Number(feature.get('score')) > 0) {
+          return 'red';
+        } else {
+          return 'blue';
+        }
+      })
+    }
+
+    configure(pluginManager) {}
+  }
+
+  // the plugin will be included in both the main thread and web worker, so
+  // install plugin to either window or self (webworker global scope)
+  ;(typeof self !== 'undefined' ? self : window).JBrowsePluginBedScorePlugin =
+    {
+      default: Plugin,
+    }
+})()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/configbedscore.sample	Sat Jun 29 06:10:22 2024 +0000
@@ -0,0 +1,183 @@
+{
+  "configuration": {
+    "rpc": {
+      "defaultDriver": "WebWorkerRpcDriver",
+      "drivers": {
+        "MainThreadRpcDriver": {},
+        "WebWorkerRpcDriver": {}
+      }
+    },
+    "logoPath": {
+      "locationType": "UriLocation",
+      "uri": ""
+    }
+  },
+  "plugins": [ {"name": "BedScorePlugin", "umdLoc": { "uri": "bedscoreplugin.js" } } ],
+  "assemblies": [
+    {
+      "name": "Merlin",
+      "sequence": {
+        "type": "ReferenceSequenceTrack",
+        "trackId": "Merlin-ReferenceSequenceTrack",
+        "adapter": {
+          "type": "BgzipFastaAdapter",
+          "fastaLocation": {
+            "locationType": "UriLocation",
+            "uri": "Merlin.fa.gz"
+          },
+          "faiLocation": {
+            "locationType": "UriLocation",
+            "uri": "Merlin.fa.gz.fai"
+          },
+          "metadataLocation": {
+            "locationType": "UriLocation",
+            "uri": "/path/to/fa.metadata.yaml"
+          },
+          "gziLocation": {
+            "locationType": "UriLocation",
+            "uri": "Merlin.fa.gz.gzi"
+          }
+        },
+        "displays": [
+          {
+            "type": "LinearReferenceSequenceDisplay",
+            "displayId": "Merlin-ReferenceSequenceTrack-LinearReferenceSequenceDisplay"
+          },
+          {
+            "type": "LinearGCContentDisplay",
+            "displayId": "Merlin-ReferenceSequenceTrack-LinearGCContentDisplay"
+          }
+        ]
+      }
+    }
+  ],
+  "tracks": [
+    {
+      "type": "FeatureTrack",
+      "trackId": "test-6.bed_2.bed",
+      "name": "test-6.bed_2.bed",
+      "assemblyNames": [
+        "Merlin"
+      ],
+      "adapter": {
+        "type": "BedTabixAdapter",
+        "bedGzLocation": {
+          "locationType": "UriLocation",
+          "uri": "test-6.bed_2.bed.gz"
+        },
+        "index": {
+          "location": {
+            "locationType": "UriLocation",
+            "uri": "test-6.bed_2.bed.gz.tbi"
+          }
+        },
+        "columnNames": [
+          "chr",
+          "start",
+          "end",
+          "name",
+          "score"
+        ],
+        "scoreColumn": "score"
+      },
+      "displays": [
+        {
+          "type": "LinearBasicDisplay",
+          "displayId": "test-6.bed_2.bed-LinearBasicDisplay",
+                    "renderer": {
+                        "type": "SvgFeatureRenderer",
+                        "color1": "jexl:customColor(feature)"
+                        }
+        },
+        {
+          "type": "LinearArcDisplay",
+          "displayId": "test-6.bed_2.bed-LinearArcDisplay"
+        }
+      ]
+    }
+  ],
+  "internetAccounts": [],
+  "aggregateTextSearchAdapters": [],
+  "connections": [],
+  "defaultSession": {
+    "drawerPosition": "right",
+    "drawerWidth": 384,
+    "widgets": {
+      "GridBookmark": {
+        "id": "GridBookmark",
+        "type": "GridBookmarkWidget"
+      },
+      "hierarchicalTrackSelector": {
+        "id": "hierarchicalTrackSelector",
+        "type": "HierarchicalTrackSelectorWidget",
+        "initialized": true,
+        "collapsed": {},
+        "view": "hzDuu9vlddMGFqOsaKwGq",
+        "faceted": {
+          "filterText": "",
+          "showSparse": false,
+          "showFilters": true,
+          "showOptions": false,
+          "panelWidth": 400
+        }
+      }
+    },
+    "activeWidgets": {
+      "hierarchicalTrackSelector": "hierarchicalTrackSelector"
+    },
+    "minimized": false,
+    "id": "E6V-suQtYj1PSAnmq6-jz",
+    "name": "New session 6/29/2024, 2:40:30 PM",
+    "margin": 0,
+    "views": [
+      {
+        "id": "hzDuu9vlddMGFqOsaKwGq",
+        "minimized": false,
+        "type": "LinearGenomeView",
+        "offsetPx": 0,
+        "bpPerPx": 88.97425334706489,
+        "displayedRegions": [
+          {
+            "refName": "Merlin",
+            "start": 0,
+            "end": 172788,
+            "reversed": false,
+            "assemblyName": "Merlin"
+          }
+        ],
+        "tracks": [
+          {
+            "id": "sZaD_oFrn0S3MqLdbNEZI",
+            "type": "FeatureTrack",
+            "configuration": "test-6.bed_2.bed",
+            "minimized": false,
+            "displays": [
+              {
+                "id": "JmJklY1ylJY0_SB-IDkNm",
+                "type": "LinearBasicDisplay",
+                "configuration": "test-6.bed_2.bed-LinearBasicDisplay"
+              }
+            ]
+          }
+        ],
+        "hideHeader": false,
+        "hideHeaderOverview": false,
+        "hideNoTracksActive": false,
+        "trackSelectorType": "hierarchical",
+        "showCenterLine": false,
+        "showCytobandsSetting": true,
+        "trackLabels": "",
+        "showGridlines": true,
+        "showBookmarkHighlights": true,
+        "showBookmarkLabels": true
+      }
+    ],
+    "sessionTracks": [],
+    "sessionAssemblies": [],
+    "temporaryAssemblies": [],
+    "connectionInstances": [],
+    "sessionConnections": [],
+    "focusedViewId": "hzDuu9vlddMGFqOsaKwGq",
+    "sessionPlugins": []
+  }
+}
--- a/jbrowse2.py	Sun Jun 23 06:59:56 2024 +0000
+++ b/jbrowse2.py	Sat Jun 29 06:10:22 2024 +0000
@@ -4,7 +4,6 @@
 import binascii
 import copy
 import datetime
-# import hashlib
 import json
 import logging
 import os
@@ -21,7 +20,7 @@
 logging.basicConfig(level=logging.DEBUG)
 log = logging.getLogger("jbrowse")
 
-JB2VER = "v2.11.1"
+JB2VER = "v2.12.3"
 # version pinned if cloning - but not cloning now
 logCommands = True
 # useful for seeing what's being written but not for production setups
@@ -757,7 +756,7 @@
         self.tracksToAdd[gname].append(copy.copy(trackDict))
         self.trackIdlist.append(copy.copy(tId))
         if self.config_json.get("plugins", None):
-            self.config_json["plugins"].append(mafPlugin[0])
+            self.config_json["plugins"].append(mafPlugin["plugins"][0])
         else:
             self.config_json.update(mafPlugin)
 
@@ -1068,6 +1067,7 @@
         self.trackIdlist.append(copy.copy(tId))
 
     def add_bed(self, data, ext, trackData):
+        bedPlugin = {"name": "BedScorePlugin", "umdLoc": { "uri": "bedscoreplugin.js" } }
         tId = trackData["label"]
         categ = trackData["category"]
         useuri = trackData["useuri"].lower() == "yes"
@@ -1077,6 +1077,16 @@
             url = tId + ".gz"
             dest = os.path.join(self.outdir, url)
             self._sort_bed(data, dest)
+        if True or trackData.get("usebedscore",None):
+            bedgzlocation = {
+                    "uri": url,
+                    "columnNames": ["chr","start","end","name","score"],
+                    "scoreColumn": "score",
+                }
+        else:
+            bedgzlocation = {
+                    "uri": url,
+                }
         trackDict = {
             "type": "FeatureTrack",
             "trackId": tId,
@@ -1087,19 +1097,21 @@
                     categ,
                 ],
                 "type": "BedTabixAdapter",
-                "bedGzLocation": {
-                    "uri": url,
-                },
+                "bedGzLocation": bedgzlocation,
                 "index": {
                     "location": {
                         "uri": url + ".tbi",
-                    }
+                    },
                 },
             },
             "displays": [
                 {
                     "type": "LinearBasicDisplay",
                     "displayId": "%s-LinearBasicDisplay" % tId,
+                    "renderer": {
+                        "type": "SvgFeatureRenderer",
+                        "color1": "jexl:customColor(feature)",
+                        },
                 },
                 {
                     "type": "LinearPileupDisplay",
@@ -1113,6 +1125,10 @@
         }
         style_json = self._prepare_track_style(trackDict)
         trackDict["style"] = style_json
+        if self.config_json.get("plugins", None):
+            self.config_json["plugins"].append(bedPlugin)
+        else:
+            self.config_json["plugins"] = [bedPlugin,]
         self.tracksToAdd[trackData["assemblyNames"]].append(copy.copy(trackDict))
         self.trackIdlist.append(copy.copy(tId))
 
@@ -1340,23 +1356,10 @@
                 tId = track_conf["trackId"]
                 if tId in default_data[gnome]["visibility"]["default_on"]:
                     track_types[tId] = track_conf["type"]
-                    style_data = default_data[gnome]["style"].get(tId, {})
-                    if not style_data:
-                        logging.debug(
-                            "No style data for %s in available default data %s"
-                            % (tId, default_data)
-                        )
-                    else:
-                        logging.debug(
-                            "style data for %s = %s"
-                            % (tId, style_data)
-                        )
-
-                    if style_data.get('type',None) == None:
-                        style_data["type"] = "LinearBasicDisplay"
+                    display = {"type": "linearBasicDisplay"}
                     if "displays" in track_conf:
-                        disp = track_conf["displays"][0]["type"]
-                        style_data["type"] = disp
+                        display["type"] = track_conf["displays"][0]["type"]
+                    display["configuration"] = track_conf["displays"][0]["displayId"]
                     if track_conf.get("style_labels", None):
                         # TODO fix this: it should probably go in a renderer block (SvgFeatureRenderer) but still does not work
                         # TODO move this to per track displays?
@@ -1365,7 +1368,7 @@
                         {
                             "type": track_types[tId],
                             "configuration": tId,
-                            "displays": [style_data],
+                            "displays": [display],
                         }
                     )
             first = [x for x in self.ass_first_contigs if x[0] == gnome]
@@ -1554,7 +1557,8 @@
                     os.remove(path)
             except OSError as e:
                 log.error("Error: %s - %s." % (e.filename, e.strerror))
-        shutil.copyfile(os.path.join(INSTALLED_TO, "jb2_webserver.py"), os.path.join(dest, "jb2_webserver.py"))
+        for neededfile in ["jb2_webserver.py", "bedscoreplugin.js"]:
+            shutil.copyfile(os.path.join(INSTALLED_TO, neededfile), os.path.join(dest, neededfile))
 
 
 def parse_style_conf(item):
@@ -1627,6 +1631,9 @@
             trackfiles = track.findall("files/trackFile")
             if trackfiles:
                 for x in trackfiles:
+                    isBed = False
+                    if x.attrib['ext'] == "bed":
+                        isBed = True                   
                     track_conf["label"] = "%s_%d" % (
                         x.attrib["label"].replace(" ", "_").replace(",", "_").replace("/","_"),
                         trackI,
@@ -1675,7 +1682,6 @@
                             {},  # No metadata for multiple bigwig
                         )
                     )
-
             track_conf["category"] = track.attrib["cat"]
             track_conf["format"] = track.attrib["format"]
             track_conf["conf"] = etree_to_dict(track.find("options"))
@@ -1686,22 +1692,6 @@
                     if not vis:
                         vis = "default_off"
                     default_session_data[primaryGenome]["visibility"][vis].append(key)
-                    trakdat = jc.tracksToAdd[primaryGenome]
-                    stile = {}
-                    for trak in trakdat:
-                        if trak["trackId"] == key:
-                            stile = trak.get("style", {})
-                    if track.find("options/style"):
-                        for item in track.find("options/style"):
-                            if item.text:
-                                stile[item.tag] = parse_style_conf(item)
-                    logging.debug("stile=%s" % stile)
-                    default_session_data[primaryGenome]["style"][key] = stile
-                    if track.find("options/style_labels"):
-                        default_session_data[primaryGenome]["style_labels"][key] = {
-                            item.tag: parse_style_conf(item)
-                            for item in track.find("options/style_labels")
-                        }
                     default_session_data[primaryGenome]["tracks"].append(key)
     default_session_data["defaultLocation"] = root.find(
         "metadata/general/defaultLocation"
--- a/jbrowse2.xml	Sun Jun 23 06:59:56 2024 +0000
+++ b/jbrowse2.xml	Sat Jun 29 06:10:22 2024 +0000
@@ -304,6 +304,7 @@
                             </cool>
                         #else if str($track.data_format.data_format_select) == "bed":
                             <bed>
+                                <usebedscore>${track.data_format.jbstyle.usebedscore}</usebedscore>
                             </bed>
                         #else if str($track.data_format.data_format_select) == "sparql":
                             <label>${track.data_format.label}</label>
--- a/macros.xml	Sun Jun 23 06:59:56 2024 +0000
+++ b/macros.xml	Sat Jun 29 06:10:22 2024 +0000
@@ -1,5 +1,5 @@
 <macros>
-    <token name="@TOOL_VERSION@">2.12.2</token>
+    <token name="@TOOL_VERSION@">2.12.3</token>
     <xml name="edamInc">
         <edam_topics>
             <edam_topic>topic_3307</edam_topic>
@@ -240,6 +240,7 @@
                 <option value="LinearPileupDisplay">LinearPileupDisplay - good for dense tracks at scale</option>
                 <option value="LinearArcDisplay">LinearArcDisplay</option>
             </param>
+            <param name="usebedscore" type="boolean" truevalue="true" falsevalue="false" checked="true" label="Use column 5 as a score for the display if bed format"/>            
         </section>
     </xml>
     <xml name="track_styling_feature">