Mercurial > repos > fubar > jbrowse2
comparison jbrowse2.py @ 112:56f9a6e0fe80 draft
planemo upload for repository https://github.com/galaxyproject/tools-iuc/tree/master/tools/jbrowse2 commit 566509061b742b73c8dd1a1db6813fbf6a7a3792
author | bgruening |
---|---|
date | Thu, 04 Jul 2024 08:40:21 +0000 |
parents | c017111e976a |
children | 794aecef8327 |
comparison
equal
deleted
inserted
replaced
111:0a532764dcfa | 112:56f9a6e0fe80 |
---|---|
705 } | 705 } |
706 ] | 706 ] |
707 } | 707 } |
708 categ = trackData["category"] | 708 categ = trackData["category"] |
709 fname = tId | 709 fname = tId |
710 dest = "%s/%s" % (self.outdir, fname) | 710 dest = os.path.join(self.outdir, fname) |
711 gname = trackData["assemblyNames"] | 711 gname = trackData["assemblyNames"] |
712 | 712 |
713 cmd = [ | 713 cmd = [ |
714 "bash", | 714 "bash", |
715 os.path.join(INSTALLED_TO, "convertMAF.sh"), | 715 os.path.join(INSTALLED_TO, "convertMAF.sh"), |
1072 trackDict["style"] = style_json | 1072 trackDict["style"] = style_json |
1073 self.tracksToAdd[trackData["assemblyNames"]].append(copy.copy(trackDict)) | 1073 self.tracksToAdd[trackData["assemblyNames"]].append(copy.copy(trackDict)) |
1074 self.trackIdlist.append(tId) | 1074 self.trackIdlist.append(tId) |
1075 | 1075 |
1076 def add_bed(self, data, ext, trackData): | 1076 def add_bed(self, data, ext, trackData): |
1077 bedPlugin = {"name": "BedScorePlugin", "umdLoc": { "uri": "bedscoreplugin.js" } } | 1077 bedPlugin = {"name": "BedScorePlugin", "umdLoc": {"uri": "bedscoreplugin.js"}} |
1078 tId = trackData["label"] | 1078 tId = trackData["label"] |
1079 categ = trackData["category"] | 1079 categ = trackData["category"] |
1080 useuri = trackData["useuri"].lower() == "yes" | 1080 useuri = trackData["useuri"].lower() == "yes" |
1081 if useuri: | 1081 if useuri: |
1082 url = data | 1082 url = data |
1083 else: | 1083 else: |
1084 url = tId + ".gz" | 1084 url = tId + ".gz" |
1085 dest = os.path.join(self.outdir, url) | 1085 dest = os.path.join(self.outdir, url) |
1086 self._sort_bed(data, dest) | 1086 self._sort_bed(data, dest) |
1087 if True or trackData.get("usebedscore",None): | 1087 if True or trackData.get("usebedscore", None): |
1088 bedgzlocation = { | 1088 bedgzlocation = { |
1089 "uri": url, | 1089 "uri": url, |
1090 "columnNames": ["chr","start","end","name","score"], | 1090 "columnNames": ["chr", "start", "end", "name", "score"], |
1091 "scoreColumn": "score", | 1091 "scoreColumn": "score", |
1092 } | 1092 } |
1093 else: | 1093 else: |
1094 bedgzlocation = { | 1094 bedgzlocation = { |
1095 "uri": url, | 1095 "uri": url, |
1096 } | 1096 } |
1097 trackDict = { | 1097 trackDict = { |
1098 "type": "FeatureTrack", | 1098 "type": "FeatureTrack", |
1099 "trackId": tId, | 1099 "trackId": tId, |
1100 "name": trackData["name"], | 1100 "name": trackData["name"], |
1101 "assemblyNames": [trackData["assemblyNames"]], | 1101 "assemblyNames": [trackData["assemblyNames"]], |
1116 "type": "LinearBasicDisplay", | 1116 "type": "LinearBasicDisplay", |
1117 "displayId": "%s-LinearBasicDisplay" % tId, | 1117 "displayId": "%s-LinearBasicDisplay" % tId, |
1118 "renderer": { | 1118 "renderer": { |
1119 "type": "SvgFeatureRenderer", | 1119 "type": "SvgFeatureRenderer", |
1120 "color1": "jexl:customColor(feature)", | 1120 "color1": "jexl:customColor(feature)", |
1121 }, | 1121 }, |
1122 }, | 1122 }, |
1123 { | 1123 { |
1124 "type": "LinearPileupDisplay", | 1124 "type": "LinearPileupDisplay", |
1125 "displayId": "%s-LinearPileupDisplay" % tId, | 1125 "displayId": "%s-LinearPileupDisplay" % tId, |
1126 }, | 1126 }, |
1169 passnames.append(gname) | 1169 passnames.append(gname) |
1170 useuri = pafOpts["useuri"] == "true" | 1170 useuri = pafOpts["useuri"] == "true" |
1171 if gname not in self.genome_names: | 1171 if gname not in self.genome_names: |
1172 # ignore if already there - eg for duplicates among pafs. | 1172 # ignore if already there - eg for duplicates among pafs. |
1173 asstrack, first_contig = self.make_assembly(gpath, gname, useuri) | 1173 asstrack, first_contig = self.make_assembly(gpath, gname, useuri) |
1174 self.genome_names.append(copy.copy(gname)) | 1174 self.genome_names.append(gname) |
1175 self.tracksToAdd[gname] = [] | 1175 self.tracksToAdd[gname] = [] |
1176 self.assemblies.append(copy.copy(asstrack)) | 1176 self.assemblies.append(copy.copy(asstrack)) |
1177 self.ass_first_contigs.append(copy.copy(first_contig)) | 1177 self.ass_first_contigs.append(copy.copy(first_contig)) |
1178 trackDict = { | 1178 trackDict = { |
1179 "type": "SyntenyTrack", | 1179 "type": "SyntenyTrack", |
1223 | 1223 |
1224 def process_annotations(self, track): | 1224 def process_annotations(self, track): |
1225 category = track["category"].replace("__pd__date__pd__", TODAY) | 1225 category = track["category"].replace("__pd__date__pd__", TODAY) |
1226 tt1 = ",/ :;\\" | 1226 tt1 = ",/ :;\\" |
1227 tt2 = "______" | 1227 tt2 = "______" |
1228 labttab = str.maketrans(tt1,tt2) | 1228 labttab = str.maketrans(tt1, tt2) |
1229 for trackIndex, ( | 1229 for trackIndex, ( |
1230 dataset_path, | 1230 dataset_path, |
1231 dataset_ext, | 1231 dataset_ext, |
1232 useuri, | 1232 useuri, |
1233 track_human_label, | 1233 track_human_label, |
1333 track["conf"]["options"]["paf"], | 1333 track["conf"]["options"]["paf"], |
1334 ) | 1334 ) |
1335 else: | 1335 else: |
1336 logging.warning("Do not know how to handle %s", dataset_ext) | 1336 logging.warning("Do not know how to handle %s", dataset_ext) |
1337 # Return non-human label for use in other fields | 1337 # Return non-human label for use in other fields |
1338 logging.debug("### processanno ext=%s trackstoadd = %s" % (dataset_ext, self.tracksToAdd)) | |
1339 yield outputTrackConfig["label"] | 1338 yield outputTrackConfig["label"] |
1340 | 1339 |
1341 def add_default_session(self, default_data): | 1340 def add_default_session(self, default_data): |
1342 """ | 1341 """ |
1343 default session settings are hard and fragile. | 1342 default session settings are hard and fragile. |
1344 .add_default_view() and other configuration code adapted from | 1343 .add_default_view() and other configuration code adapted from |
1345 https://github.com/abretaud/tools-iuc/blob/jbrowse2/tools/jbrowse2/jbrowse2.py | 1344 https://github.com/abretaud/tools-iuc/blob/jbrowse2/tools/jbrowse2/jbrowse2.py |
1346 """ | 1345 """ |
1347 # TODO using the default session for now, but check out session specs in the future https://github.com/GMOD/jbrowse-components/issues/2708 | 1346 # TODO using the default session for now, but check out session specs in the future https://github.com/GMOD/jbrowse-components/issues/2708 |
1348 bpPerPx = self.bpPerPx # Browser window width is unknown and default session cannot be used to figure it out in JB2 code so could be 200-2000+ pixels. | 1347 bpPerPx = self.bpPerPx # Browser window width is unknown and default session cannot be used to figure it out in JB2 code so could be 200-2000+ pixels. |
1349 track_types = {} | 1348 track_types = {} |
1350 with open(self.config_json_file, "r") as config_file: | 1349 with open(self.config_json_file, "r") as config_file: |
1351 config_json = json.load(config_file) | 1350 config_json = json.load(config_file) |
1352 if self.config_json: | 1351 if self.config_json: |
1353 config_json.update(self.config_json) | 1352 config_json.update(self.config_json) |
1372 else: | 1371 else: |
1373 logging.debug( | 1372 logging.debug( |
1374 "style data for %s = %s" | 1373 "style data for %s = %s" |
1375 % (tId, style_data) | 1374 % (tId, style_data) |
1376 ) | 1375 ) |
1377 if style_data.get('type',None) == None: | 1376 if style_data.get('type', None) is None: |
1378 style_data["type"] = "LinearBasicDisplay" | 1377 style_data["type"] = "LinearBasicDisplay" |
1379 if "displays" in track_conf: | 1378 if "displays" in track_conf: |
1380 disp = track_conf["displays"][0]["type"] | 1379 disp = track_conf["displays"][0]["type"] |
1381 style_data["type"] = disp | 1380 style_data["type"] = disp |
1382 if track_conf.get("displays", None): | 1381 if track_conf.get("displays", None): |
1394 "displays": [style_data], | 1393 "displays": [style_data], |
1395 } | 1394 } |
1396 ) | 1395 ) |
1397 first = [x for x in self.ass_first_contigs if x[0] == gnome] | 1396 first = [x for x in self.ass_first_contigs if x[0] == gnome] |
1398 drdict = { | 1397 drdict = { |
1399 "reversed": False, | 1398 "reversed": False, |
1400 "assemblyName": gnome, | 1399 "assemblyName": gnome, |
1401 } | 1400 } |
1402 if len(first) > 0: | 1401 if len(first) > 0: |
1403 [gnome, refName, end] = first[0] | 1402 [gnome, refName, end] = first[0] |
1404 drdict["refName"] = refName | 1403 drdict["refName"] = refName |
1405 drdict["start"] = 0 | 1404 drdict["start"] = 0 |
1406 end = int(end) | 1405 end = int(end) |
1407 drdict["end"] = end | 1406 drdict["end"] = end |
1408 else: | 1407 else: |
1409 ddl = default_data.get("defaultLocation", None) | 1408 ddl = default_data.get("defaultLocation", None) |
1410 if ddl: | 1409 if ddl: |
1411 loc_match = re.search(r"^([^:]+):([\d,]*)\.*([\d,]*)$", ddl) | 1410 loc_match = re.search(r"^([^:]+):([\d,]*)\.*([\d,]*)$", ddl) |
1412 # allow commas like 100,000 but ignore as integer | 1411 # allow commas like 100,000 but ignore as integer |
1413 if loc_match: | 1412 if loc_match: |
1414 refName = loc_match.group(1) | 1413 refName = loc_match.group(1) |
1415 drdict["refName"] = refName | 1414 drdict["refName"] = refName |
1416 if loc_match.group(2) > "": | 1415 if loc_match.group(2) > "": |
1417 drdict["start"] = int(loc_match.group(2).replace(",", "")) | 1416 drdict["start"] = int(loc_match.group(2).replace(",", "")) |
1423 % ddl | 1422 % ddl |
1424 ) | 1423 ) |
1425 view_json = { | 1424 view_json = { |
1426 "type": "LinearGenomeView", | 1425 "type": "LinearGenomeView", |
1427 "offsetPx": 0, | 1426 "offsetPx": 0, |
1428 "bpPerPx" : bpPerPx, | 1427 "bpPerPx": bpPerPx, |
1429 "minimized": False, | 1428 "minimized": False, |
1430 "tracks": tracks_data | 1429 "tracks": tracks_data |
1431 } | 1430 } |
1432 if drdict.get("refName", None): | 1431 if drdict.get("refName", None): |
1433 # TODO displayedRegions is not just zooming to the region, it hides the rest of the chromosome | 1432 # TODO displayedRegions is not just zooming to the region, it hides the rest of the chromosome |
1654 trackfiles = track.findall("files/trackFile") | 1653 trackfiles = track.findall("files/trackFile") |
1655 if trackfiles: | 1654 if trackfiles: |
1656 for x in trackfiles: | 1655 for x in trackfiles: |
1657 isBed = False | 1656 isBed = False |
1658 if x.attrib['ext'] == "bed": | 1657 if x.attrib['ext'] == "bed": |
1659 isBed = True | 1658 isBed = True |
1660 track_conf["label"] = "%s_%d" % ( | 1659 track_conf["label"] = "%s_%d" % ( |
1661 x.attrib["label"].replace(" ", "_").replace(",", "_").replace("/","_"), | 1660 x.attrib["label"].replace(" ", "_").replace(",", "_").replace("/", "_"), |
1662 trackI, | 1661 trackI, |
1663 ) | 1662 ) |
1664 trackI += 1 | 1663 trackI += 1 |
1665 track_conf["useuri"] = x.attrib["useuri"] | 1664 track_conf["useuri"] = x.attrib["useuri"] |
1666 if is_multi_bigwig: | 1665 if is_multi_bigwig: |