diff autogenJB2.py @ 30:8f02a84ee278 draft

planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit 48bc917d34af182e9158915862c8a35723660919
author fubar
date Wed, 21 Feb 2024 02:57:30 +0000
parents
children 15da358c3108
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/autogenJB2.py	Wed Feb 21 02:57:30 2024 +0000
@@ -0,0 +1,147 @@
+import argparse
+import re
+import sys
+
+from jbrowse2 import jbrowseConnector as jbC
+
+
+def makeDefaultLocation(jc, defLoc=None):
+
+    refName = None
+    drdict = {
+        "reversed": False,
+        "assemblyName": jc.genome_name,
+        "start": 0,
+        "end": 100000,
+    }
+
+    if defLoc:
+        loc_match = re.search(r"^([^:]+):([\d,]*)\.*([\d,]*)$", defLoc)
+        # allow commas like 100,000 but ignore as integer
+        if loc_match:
+            refName = loc_match.group(1)
+            drdict["refName"] = refName
+            if loc_match.group(2) > "":
+                drdict["start"] = int(loc_match.group(2).replace(",", ""))
+            if loc_match.group(3) > "":
+                drdict["end"] = int(loc_match.group(3).replace(",", ""))
+        else:
+            jc.logging.info(
+                "@@@ regexp could not match contig:start..end in the supplied location %s - please fix"
+                % defLoc
+            )
+    else:
+        drdict["refName"] = jc.genome_firstcontig
+    if drdict.get("refName", None):
+        jc.logging.info("@@@ defaultlocation %s for default session" % drdict)
+        return drdict
+    else:
+        jc.logging.info("@@@ no contig name found for default session - please add one!")
+        return None
+
+
+if __name__ == "__main__":
+    parser = argparse.ArgumentParser(description="", epilog="")
+    parser.add_argument("--sessname", help="Session name", default="AutoJBrowse")
+    parser.add_argument(
+        "--collection",
+        help="Collection of 'filepath, filename, filext' for JBrowse2",
+        default=[],
+        action="extend",
+    )
+    parser.add_argument("--version", "-V", action="version", version="%(prog)s 0.0.1")
+    args = parser.parse_args()
+    sessName = args.sessname
+    flistList = [x.split(",") for x in args.collection]
+    if flistList:
+        listgenomes = [f for f in flistList if f[0].startswith("REFERENCE_")]
+        if len(listgenomes) > 0:
+            genome_paths = [
+                x[1] for x in listgenomes
+            ]  # expect genome_1_genomename.fasta etc
+            genome_names = [x[0].split("REFERENCE_")[1] for x in listgenomes]
+            jc = jbC(
+                outdir=args.outdir,
+                genomes=[
+                    {
+                        "path": x,
+                        "meta": {
+                            "name": genome_names[i],
+                        },
+                    }
+                    for i, x in enumerate(genome_paths)
+                ],
+            )
+            jc.process_genomes()
+            default_session_data = {
+                "visibility": {
+                    "default_on": [],
+                    "default_off": [],
+                },
+                "style": {},
+                "style_labels": {},
+            }
+            defLoc = makeDefaultLocation(jc)
+            listtracks = [f for f in flistList if not f[0].startswith("REFERENCE_")]
+            # foo.paf must have a foo_paf.fasta or fasta.gz to match
+            tnames = [x[0] for x in listtracks]
+            texts = [x[2] for x in listtracks]
+            for i, track in enumerate(listtracks):
+                if track[2] == "paf":
+                    refname = track[0] + "_paf.fasta"
+                    refdat = [x[1] for x in listtracks if x[0] == refname]
+                    if not refdat:
+                        jc.logging.warn(
+                            "!! No reference file %s corresponding to paf file %s found. Not building - there must be a corresponding fasta for each paf"
+                            % (refname, tnames[i])
+                        )
+                        sys.exit(3)
+                    else:
+                        track_conf = {
+                            "conf": {
+                                "options": {
+                                    "paf": {"genome": refdat, "genome_label": track[0]}
+                                }
+                            }
+                        }
+                else:
+                    track_conf = {}
+                track_conf["format"] = track[2]
+                track_conf["name"] = track[0]
+                track_conf["label"] = track[0]
+                track_conf["trackfiles"] = []
+                keys = jc.process_annotations(track_conf)
+
+                if keys:
+                    for key in keys:
+                        default_session_data["visibility"][
+                            track.attrib.get("visibility", "default_off")
+                        ].append(key)
+                        # if track_conf.get("style", None):
+                        # default_session_data["style"][key] = track_conf[
+                        # "style"
+                        # ]  # TODO do we need this anymore?
+                        # if track_conf.get("style_lables", None):
+                        # default_session_data["style_labels"][key] = track_conf.get(
+                        # "style_labels", None
+                        # )
+            # general_data = {
+            # "analytics": root.find("metadata/general/analytics").text,
+            # "primary_color": root.find("metadata/general/primary_color").text,
+            # "secondary_color": root.find("metadata/general/secondary_color").text,
+            # "tertiary_color": root.find("metadata/general/tertiary_color").text,
+            # "quaternary_color": root.find("metadata/general/quaternary_color").text,
+            # "font_size": root.find("metadata/general/font_size").text,
+            # }
+            # jc.add_general_configuration(general_data)
+            trackconf = jc.config_json.get("tracks", None)
+            if trackconf:
+                jc.config_json["tracks"].update(jc.tracksToAdd)
+            else:
+                jc.config_json["tracks"] = jc.tracksToAdd
+            jc.write_config()
+            defaultData = {"defaultLocation": defLoc, "session_name": sessName}
+            jc.add_default_session(defaultData)
+            # jc.text_index() not sure what broke here.
+    else:
+        sys.stderr.write("!! empty collection supplied - nothing to process")