comparison autogenJB2.py @ 46:4181e97c70a7 draft

planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit 3a43e9e0ffce0966101203102e769d1ced28618a
author fubar
date Mon, 04 Mar 2024 09:47:19 +0000
parents bc57164eb270
children 460d5b6c5d98
comparison
equal deleted inserted replaced
45:0ec526d2d8c1 46:4181e97c70a7
1 import argparse 1 import argparse
2 import logging 2 import logging
3 import os
3 import sys 4 import sys
4 5
5 from jbrowse2 import JbrowseConnector as jbC 6 from jbrowse2 import JbrowseConnector as jbC
6 7
7 logging.basicConfig(level=logging.debug) 8 logging.basicConfig(level=logging.debug)
9 10
10 11
11 def makeDefaultLocation(): 12 def makeDefaultLocation():
12 13
13 refName = jc.genome_firstcontig 14 refName = jc.genome_firstcontig
14 defloc = "%s:100..10000" % refName 15 defloc = "%s:100..10000" % refName
15 print ('defloc',defloc)
16 return defloc 16 return defloc
17 17
18 18
19 if __name__ == "__main__": 19 if __name__ == "__main__":
20 parser = argparse.ArgumentParser(description="", epilog="") 20 parser = argparse.ArgumentParser(description="", epilog="")
21 parser.add_argument("--sessName", help="Session name", default="AutoJBrowse") 21 parser.add_argument("--sessName", help="Session name", default="AutoJBrowse")
22 parser.add_argument( 22 parser.add_argument(
23 "--trackmeta", 23 "--trackmeta",
24 help="Repeatable of 'filename, filext,filepath, ... ,' for JBrowse2 tracks", 24 help="Repeatable 'filename,filext,filepath,[bai/crai path for filesystem bam/cram]' for JBrowse2 tracks",
25 default=[], 25 default=[],
26 action="append", 26 action="append",
27 ) 27 )
28 parser.add_argument( 28 parser.add_argument(
29 "--referencemeta", 29 "--referencemeta",
30 help="Repeatable 'filename, filext, filepath, ... ,' for JBrowse2 reference tracks", 30 help="Repeatable 'filename, filext, filepath, ... ,' for JBrowse2 reference tracks - usually only one needed",
31 default=[], 31 default=[],
32 action="append", 32 action="append",
33 ) 33 )
34 parser.add_argument( 34 parser.add_argument(
35 "--pafmeta", 35 "--pafmeta",
36 help="Repeatable. Each is a 'filename, filext, filepath, ... ,' for a JBrowse2 paf track", 36 help="Repeatable. Each is a 'pafname, filext, filepath, ... ,' for a JBrowse2 paf track",
37 default=[], 37 default=[],
38 action="append", 38 action="append",
39 ) 39 )
40 parser.add_argument( 40 parser.add_argument(
41 "--pafreferencemeta", 41 "--pafreferencemeta",
42 help="Repeatable. Each is a 'pafname,filepath,refname,filepath,refname....'. Every paf must have a corresponding one ", 42 help="Repeatable. Each is a 'pafname,refpath,refname' Every pafname must have one or more",
43 default=[], 43 default=[],
44 action="append", 44 action="append",
45 ) 45 )
46 parser.add_argument("--jbrowse2path", help="Path to JBrowse2 directory in biocontainer or Conda") 46 parser.add_argument(
47 "--jbrowse2path", help="Path to JBrowse2 directory in biocontainer or Conda"
48 )
47 parser.add_argument("--outdir", help="Output directory", required=True) 49 parser.add_argument("--outdir", help="Output directory", required=True)
48 parser.add_argument("--version", "-V", action="version", version="%(prog)s 2.10.2") 50 parser.add_argument("--version", "-V", action="version", version="%(prog)s 2.10.2")
49 args = parser.parse_args() 51 args = parser.parse_args()
50 sessName = args.sessName 52 sessName = args.sessName
51 # --trackmeta $jbrowseme[$key],$jbrowseme[$key].ext,'$key' 53 # --trackmeta $jbrowseme[$key],$jbrowseme[$key].ext,'$key'
52 trackList = [x.strip().split(",") for x in args.trackmeta if x > ''] 54 trackList = [x.strip().split(",") for x in args.trackmeta if x > ""]
53 refList = [x.strip().split(",") for x in args.referencemeta if x > ''] 55 refList = [x.strip().split(",") for x in args.referencemeta if x > ""]
54 print("tracklist = %s\nreflist = %s" % (trackList,refList))
55 if len(refList) > 0: 56 if len(refList) > 0:
56 listgenomes = [f for f in refList if f[1] in ['fasta', 'fasta.gz']] 57 listgenomes = [f for f in refList if f[1] in ["fasta", "fasta.gz"]]
57 # assume no pafs here 58 # assume no pafs here
58 print('genomes=%s' % listgenomes)
59 if len(listgenomes) > 0: 59 if len(listgenomes) > 0:
60 genome_paths = [ 60 genome_paths = [x[0] for x in listgenomes]
61 x[0] for x in listgenomes
62 ] # expect genome_1_genomename.fasta etc
63 genome_names = [x[2] for x in listgenomes] 61 genome_names = [x[2] for x in listgenomes]
62 guseuri = []
63 for x in genome_paths:
64 if x.startswith('http://') or x.startswith('https://'):
65 guseuri.append('yes')
66 else:
67 guseuri.append('no')
64 jc = jbC( 68 jc = jbC(
65 outdir=args.outdir, 69 outdir=args.outdir,
66 jbrowse2path=args.jbrowse2path, 70 jbrowse2path=args.jbrowse2path,
67 genomes=[ 71 genomes=[
68 { 72 {
69 "path": x, 73 "path": x,
70 "meta": { 74 "label": genome_names[i],
71 "name": genome_names[i], 75 "useuri": guseuri[i],
72 "dataset_dname": genome_names[i], 76 "meta": {"name": genome_names[i],
73 }, 77 "dataset_dname": genome_names[i]
78 }
74 } 79 }
75 for i, x in enumerate(genome_paths) 80 for i, x in enumerate(genome_paths)
76 ], 81 ],
77 ) 82 )
78 sys.stdout.write('$$$ genome_paths:%s genome_names: %s' % (genome_paths,genome_names)) 83
79 jc.process_genomes() 84 jc.process_genomes()
80 default_session_data = { 85 default_session_data = {
81 "visibility": { 86 "visibility": {
82 "default_on": [], 87 "default_on": [],
83 "default_off": [], 88 "default_off": [],
107 "options": { 112 "options": {
108 "paf": {"genome": refdat, "genome_label": trackname} 113 "paf": {"genome": refdat, "genome_label": trackname}
109 } 114 }
110 } 115 }
111 } 116 }
112 elif trext == 'bam': 117 elif trext == "bam":
113 track_conf = {"conf": {"options": {"bam": {"bam_index": track[3]}}}} 118 ipath = track[3]
114 elif trext == 'cram': 119 if not os.path.exists(ipath):
115 track_conf = {"conf": {"options": {"cram": {"cram_index": track[3]}}}} 120 ipath = os.path.realpath(os.path.join(jc.outdir, trackname + '.bai'))
121 cmd = ["samtools", "index", "-b", "-o", ipath, os.path.realpath(track[0])]
122 sys.stdout.write('#### calling %s' % ' '.join(cmd))
123 jc.subprocess_check_call(cmd)
124 track_conf = {"conf": {"options": {"bam": {"bam_index": ipath}}}}
125 elif trext == "cram":
126 ipath = track[3]
127 if not os.path.exists(ipath):
128 jc.logging.info('calling %s' % ' '.join(cmd))
129 ipath = os.path.realpath(os.path.join('./', trackname + '.crai'))
130 cmd = ["samtools", "index", "-c", "-o", ipath, os.path.realpath(track[0])]
131 sys.stdout.write('#### calling %s' % ' '.join(cmd))
132 jc.subprocess_check_call(cmd)
133 track_conf = {"conf": {"options": {"cram": {"cram_index": ipath}}}}
116 else: 134 else:
117 track_conf = {} 135 track_conf = {}
118 track_conf["format"] = trext 136 track_conf["format"] = trext
119 track_conf["name"] = trackname 137 track_conf["name"] = trackname
120 track_conf["label"] = trackname 138 track_conf["label"] = trackname
121 track_conf["trackfiles"] = [(tpath, trext, trackname,{}),] 139 useu = tpath.startswith('http://') or tpath.startswith('https://')
140 useuri = 'no'
141 if useu:
142 useuri = 'yes'
143 track_conf["trackfiles"] = [
144 (tpath, trext, useuri, trackname, {}),
145 ]
122 track_conf["category"] = "Autogenerated" 146 track_conf["category"] = "Autogenerated"
123 keys = jc.process_annotations(track_conf) 147 keys = jc.process_annotations(track_conf)
124 148
125 if keys: 149 if keys:
126 for key in keys: 150 for key in keys:
127 if trext in ["bigwig", "gff3", "gff", "vcf", "maf",]: 151 if trext in [
152 "bigwig",
153 "gff3",
154 "gff",
155 "vcf",
156 "maf",
157 ]:
128 default_session_data["visibility"]["default_on"].append(key) 158 default_session_data["visibility"]["default_on"].append(key)
129 else: 159 else:
130 default_session_data["visibility"]["default_off"].append(key) 160 default_session_data["visibility"]["default_off"].append(
131 # if track_conf.get("style", None): 161 key
132 # default_session_data["style"][key] = track_conf[ 162 )
133 # "style"
134 # ] # TODO do we need this anymore?
135 # if track_conf.get("style_lables", None):
136 # default_session_data["style_labels"][key] = track_conf.get(
137 # "style_labels", None
138 # )
139 # general_data = { 163 # general_data = {
140 # "analytics": root.find("metadata/general/analytics").text, 164 # "analytics": root.find("metadata/general/analytics").text,
141 # "primary_color": root.find("metadata/general/primary_color").text, 165 # "primary_color": root.find("metadata/general/primary_color").text,
142 # "secondary_color": root.find("metadata/general/secondary_color").text, 166 # "secondary_color": root.find("metadata/general/secondary_color").text,
143 # "tertiary_color": root.find("metadata/general/tertiary_color").text, 167 # "tertiary_color": root.find("metadata/general/tertiary_color").text,
150 jc.config_json["tracks"].update(jc.tracksToAdd) 174 jc.config_json["tracks"].update(jc.tracksToAdd)
151 else: 175 else:
152 jc.config_json["tracks"] = jc.tracksToAdd 176 jc.config_json["tracks"] = jc.tracksToAdd
153 jc.write_config() 177 jc.write_config()
154 defLoc = makeDefaultLocation() 178 defLoc = makeDefaultLocation()
155 default_session_data.update({"defaultLocation": defLoc, "session_name": sessName}) 179 default_session_data.update(
180 {"defaultLocation": defLoc, "session_name": sessName}
181 )
156 track_conf.update(default_session_data) 182 track_conf.update(default_session_data)
157 jc.add_default_session(default_session_data) 183 jc.add_default_session(default_session_data)
158 # jc.text_index() not sure what broke here. 184 # jc.text_index() not sure what broke here.
159 else: 185 else:
160 print("!! empty collection supplied - nothing to process") 186 sys.stderr.write(
187 "!!!! Collection has no suitable trackfiles for autogenJB2 - nothing to process"
188 )