Mercurial > repos > fubar > jbrowse2
comparison 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 |
comparison
equal
deleted
inserted
replaced
29:f728cf0df71d | 30:8f02a84ee278 |
---|---|
1 import argparse | |
2 import re | |
3 import sys | |
4 | |
5 from jbrowse2 import jbrowseConnector as jbC | |
6 | |
7 | |
8 def makeDefaultLocation(jc, defLoc=None): | |
9 | |
10 refName = None | |
11 drdict = { | |
12 "reversed": False, | |
13 "assemblyName": jc.genome_name, | |
14 "start": 0, | |
15 "end": 100000, | |
16 } | |
17 | |
18 if defLoc: | |
19 loc_match = re.search(r"^([^:]+):([\d,]*)\.*([\d,]*)$", defLoc) | |
20 # allow commas like 100,000 but ignore as integer | |
21 if loc_match: | |
22 refName = loc_match.group(1) | |
23 drdict["refName"] = refName | |
24 if loc_match.group(2) > "": | |
25 drdict["start"] = int(loc_match.group(2).replace(",", "")) | |
26 if loc_match.group(3) > "": | |
27 drdict["end"] = int(loc_match.group(3).replace(",", "")) | |
28 else: | |
29 jc.logging.info( | |
30 "@@@ regexp could not match contig:start..end in the supplied location %s - please fix" | |
31 % defLoc | |
32 ) | |
33 else: | |
34 drdict["refName"] = jc.genome_firstcontig | |
35 if drdict.get("refName", None): | |
36 jc.logging.info("@@@ defaultlocation %s for default session" % drdict) | |
37 return drdict | |
38 else: | |
39 jc.logging.info("@@@ no contig name found for default session - please add one!") | |
40 return None | |
41 | |
42 | |
43 if __name__ == "__main__": | |
44 parser = argparse.ArgumentParser(description="", epilog="") | |
45 parser.add_argument("--sessname", help="Session name", default="AutoJBrowse") | |
46 parser.add_argument( | |
47 "--collection", | |
48 help="Collection of 'filepath, filename, filext' for JBrowse2", | |
49 default=[], | |
50 action="extend", | |
51 ) | |
52 parser.add_argument("--version", "-V", action="version", version="%(prog)s 0.0.1") | |
53 args = parser.parse_args() | |
54 sessName = args.sessname | |
55 flistList = [x.split(",") for x in args.collection] | |
56 if flistList: | |
57 listgenomes = [f for f in flistList if f[0].startswith("REFERENCE_")] | |
58 if len(listgenomes) > 0: | |
59 genome_paths = [ | |
60 x[1] for x in listgenomes | |
61 ] # expect genome_1_genomename.fasta etc | |
62 genome_names = [x[0].split("REFERENCE_")[1] for x in listgenomes] | |
63 jc = jbC( | |
64 outdir=args.outdir, | |
65 genomes=[ | |
66 { | |
67 "path": x, | |
68 "meta": { | |
69 "name": genome_names[i], | |
70 }, | |
71 } | |
72 for i, x in enumerate(genome_paths) | |
73 ], | |
74 ) | |
75 jc.process_genomes() | |
76 default_session_data = { | |
77 "visibility": { | |
78 "default_on": [], | |
79 "default_off": [], | |
80 }, | |
81 "style": {}, | |
82 "style_labels": {}, | |
83 } | |
84 defLoc = makeDefaultLocation(jc) | |
85 listtracks = [f for f in flistList if not f[0].startswith("REFERENCE_")] | |
86 # foo.paf must have a foo_paf.fasta or fasta.gz to match | |
87 tnames = [x[0] for x in listtracks] | |
88 texts = [x[2] for x in listtracks] | |
89 for i, track in enumerate(listtracks): | |
90 if track[2] == "paf": | |
91 refname = track[0] + "_paf.fasta" | |
92 refdat = [x[1] for x in listtracks if x[0] == refname] | |
93 if not refdat: | |
94 jc.logging.warn( | |
95 "!! No reference file %s corresponding to paf file %s found. Not building - there must be a corresponding fasta for each paf" | |
96 % (refname, tnames[i]) | |
97 ) | |
98 sys.exit(3) | |
99 else: | |
100 track_conf = { | |
101 "conf": { | |
102 "options": { | |
103 "paf": {"genome": refdat, "genome_label": track[0]} | |
104 } | |
105 } | |
106 } | |
107 else: | |
108 track_conf = {} | |
109 track_conf["format"] = track[2] | |
110 track_conf["name"] = track[0] | |
111 track_conf["label"] = track[0] | |
112 track_conf["trackfiles"] = [] | |
113 keys = jc.process_annotations(track_conf) | |
114 | |
115 if keys: | |
116 for key in keys: | |
117 default_session_data["visibility"][ | |
118 track.attrib.get("visibility", "default_off") | |
119 ].append(key) | |
120 # if track_conf.get("style", None): | |
121 # default_session_data["style"][key] = track_conf[ | |
122 # "style" | |
123 # ] # TODO do we need this anymore? | |
124 # if track_conf.get("style_lables", None): | |
125 # default_session_data["style_labels"][key] = track_conf.get( | |
126 # "style_labels", None | |
127 # ) | |
128 # general_data = { | |
129 # "analytics": root.find("metadata/general/analytics").text, | |
130 # "primary_color": root.find("metadata/general/primary_color").text, | |
131 # "secondary_color": root.find("metadata/general/secondary_color").text, | |
132 # "tertiary_color": root.find("metadata/general/tertiary_color").text, | |
133 # "quaternary_color": root.find("metadata/general/quaternary_color").text, | |
134 # "font_size": root.find("metadata/general/font_size").text, | |
135 # } | |
136 # jc.add_general_configuration(general_data) | |
137 trackconf = jc.config_json.get("tracks", None) | |
138 if trackconf: | |
139 jc.config_json["tracks"].update(jc.tracksToAdd) | |
140 else: | |
141 jc.config_json["tracks"] = jc.tracksToAdd | |
142 jc.write_config() | |
143 defaultData = {"defaultLocation": defLoc, "session_name": sessName} | |
144 jc.add_default_session(defaultData) | |
145 # jc.text_index() not sure what broke here. | |
146 else: | |
147 sys.stderr.write("!! empty collection supplied - nothing to process") |