Mercurial > repos > fubar > jbrowse2
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")