Mercurial > repos > fubar > jbrowse2
comparison jbrowse2.py @ 17:4c201a3d4755 draft
planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit a37bfdfc108501b11c7b2aa15efb1bd16f0c4b66
| author | fubar |
|---|---|
| date | Sun, 28 Jan 2024 06:48:52 +0000 |
| parents | cce8dacb240f |
| children | bde6b1d09f7d |
comparison
equal
deleted
inserted
replaced
| 16:1fe91657bfd6 | 17:4c201a3d4755 |
|---|---|
| 456 self.genome_names.append(genome_name) | 456 self.genome_names.append(genome_name) |
| 457 if self.genome_name is None: | 457 if self.genome_name is None: |
| 458 self.genome_name = ( | 458 self.genome_name = ( |
| 459 genome_name # first one for all tracks - other than paf | 459 genome_name # first one for all tracks - other than paf |
| 460 ) | 460 ) |
| 461 self.genome_firstcontig = None | |
| 462 fl = open(fapath, "r").readline().strip().split(">", 1) | |
| 463 if len(fl) > 1: | |
| 464 self.genome_firstcontig = fl[1].strip() | |
| 461 if self.config_json.get("assemblies", None): | 465 if self.config_json.get("assemblies", None): |
| 462 self.config_json["assemblies"] += assemblies | 466 self.config_json["assemblies"] += assemblies |
| 463 else: | 467 else: |
| 464 self.config_json["assemblies"] = assemblies | 468 self.config_json["assemblies"] = assemblies |
| 465 | 469 |
| 558 """ | 562 """ |
| 559 tId = trackData["label"] | 563 tId = trackData["label"] |
| 560 # can be served - if public. | 564 # can be served - if public. |
| 561 # dsId = trackData["metadata"]["dataset_id"] | 565 # dsId = trackData["metadata"]["dataset_id"] |
| 562 # url = "%s/api/datasets/%s/display?to_ext=hic " % (self.giURL, dsId) | 566 # url = "%s/api/datasets/%s/display?to_ext=hic " % (self.giURL, dsId) |
| 563 hname = trackData["label"] | 567 hname = trackData["name"] |
| 564 dest = os.path.join(self.outdir, hname) | 568 dest = os.path.join(self.outdir, hname) |
| 565 cmd = ["cp", data, dest] | 569 cmd = ["cp", data, dest] |
| 566 # these can be very big. | 570 # these can be very big. |
| 567 self.subprocess_check_call(cmd) | 571 self.subprocess_check_call(cmd) |
| 568 floc = { | 572 floc = { |
| 646 "displays": [ | 650 "displays": [ |
| 647 { | 651 { |
| 648 "type": "LinearBasicDisplay", | 652 "type": "LinearBasicDisplay", |
| 649 "displayId": "%s-LinearBasicDisplay" % tId, | 653 "displayId": "%s-LinearBasicDisplay" % tId, |
| 650 }, | 654 }, |
| 651 {"type": "LinearArcDisplay", "displayId": "%s-LinearArcDisplay" % tId}, | 655 { |
| 656 "type": "LinearArcDisplay", | |
| 657 "displayId": "%s-LinearArcDisplay" % tId, | |
| 658 }, | |
| 652 ], | 659 ], |
| 653 } | 660 } |
| 654 style_json = self._prepare_track_style(trackDict) | 661 style_json = self._prepare_track_style(trackDict) |
| 655 trackDict["style"] = style_json | 662 trackDict["style"] = style_json |
| 656 self.tracksToAdd.append(trackDict) | 663 self.tracksToAdd.append(trackDict) |
| 715 "displays": [ | 722 "displays": [ |
| 716 { | 723 { |
| 717 "type": "LinearBasicDisplay", | 724 "type": "LinearBasicDisplay", |
| 718 "displayId": "%s-LinearBasicDisplay" % tId, | 725 "displayId": "%s-LinearBasicDisplay" % tId, |
| 719 }, | 726 }, |
| 720 {"type": "LinearArcDisplay", "displayId": "%s-LinearArcDisplay" % tId}, | 727 { |
| 728 "type": "LinearArcDisplay", | |
| 729 "displayId": "%s-LinearArcDisplay" % tId, | |
| 730 }, | |
| 721 ], | 731 ], |
| 722 } | 732 } |
| 723 style_json = self._prepare_track_style(trackDict) | 733 style_json = self._prepare_track_style(trackDict) |
| 724 trackDict["style"] = style_json | 734 trackDict["style"] = style_json |
| 725 self.tracksToAdd.append(trackDict) | 735 self.tracksToAdd.append(trackDict) |
| 904 "displays": [ | 914 "displays": [ |
| 905 { | 915 { |
| 906 "type": "LinearBasicDisplay", | 916 "type": "LinearBasicDisplay", |
| 907 "displayId": "%s-LinearBasicDisplay" % tId, | 917 "displayId": "%s-LinearBasicDisplay" % tId, |
| 908 }, | 918 }, |
| 909 {"type": "LinearArcDisplay", "displayId": "%s-LinearArcDisplay" % tId}, | 919 { |
| 920 "type": "LinearArcDisplay", | |
| 921 "displayId": "%s-LinearArcDisplay" % tId, | |
| 922 }, | |
| 910 ], | 923 ], |
| 911 } | 924 } |
| 912 style_json = self._prepare_track_style(trackDict) | 925 style_json = self._prepare_track_style(trackDict) |
| 913 trackDict["style"] = style_json | 926 trackDict["style"] = style_json |
| 914 self.tracksToAdd.append(trackDict) | 927 self.tracksToAdd.append(trackDict) |
| 943 }, | 956 }, |
| 944 { | 957 { |
| 945 "type": "LinearPileupDisplay", | 958 "type": "LinearPileupDisplay", |
| 946 "displayId": "%s-LinearPileupDisplay" % tId, | 959 "displayId": "%s-LinearPileupDisplay" % tId, |
| 947 }, | 960 }, |
| 948 {"type": "LinearArcDisplay", "displayId": "%s-LinearArcDisplay" % tId}, | 961 { |
| 962 "type": "LinearArcDisplay", | |
| 963 "displayId": "%s-LinearArcDisplay" % tId, | |
| 964 }, | |
| 949 ], | 965 ], |
| 950 } | 966 } |
| 951 style_json = self._prepare_track_style(trackDict) | 967 style_json = self._prepare_track_style(trackDict) |
| 952 trackDict["style"] = style_json | 968 trackDict["style"] = style_json |
| 953 self.tracksToAdd.append(trackDict) | 969 self.tracksToAdd.append(trackDict) |
| 981 "type": "PAFAdapter", | 997 "type": "PAFAdapter", |
| 982 "pafLocation": {"uri": url}, | 998 "pafLocation": {"uri": url}, |
| 983 "assemblyNames": [self.genome_name, pgname], | 999 "assemblyNames": [self.genome_name, pgname], |
| 984 }, | 1000 }, |
| 985 # "displays": [ | 1001 # "displays": [ |
| 986 # { | 1002 # { |
| 987 # "type": "LinearSyntenyDisplay", | 1003 # "type": "LinearSyntenyDisplay", |
| 988 # "displayId": "%s-LinearSyntenyDisplay" % tId, | 1004 # "displayId": "%s-LinearSyntenyDisplay" % tId, |
| 989 # }, | 1005 # }, |
| 990 # { | 1006 # { |
| 991 # "type": "DotPlotDisplay", | 1007 # "type": "DotPlotDisplay", |
| 992 # "displayId": "%s-DotPlotDisplay" % tId, | 1008 # "displayId": "%s-DotPlotDisplay" % tId, |
| 993 # }, | 1009 # }, |
| 994 # ], | 1010 # ], |
| 995 } | 1011 } |
| 996 style_json = self._prepare_track_style(trackDict) | 1012 style_json = self._prepare_track_style(trackDict) |
| 997 trackDict["style"] = style_json | 1013 trackDict["style"] = style_json |
| 998 self.tracksToAdd.append(trackDict) | 1014 self.tracksToAdd.append(trackDict) |
| 1141 track["conf"]["options"]["pileup"], | 1157 track["conf"]["options"]["pileup"], |
| 1142 bam_index=real_indexes[i], | 1158 bam_index=real_indexes[i], |
| 1143 ) | 1159 ) |
| 1144 elif dataset_ext == "blastxml": | 1160 elif dataset_ext == "blastxml": |
| 1145 self.add_blastxml( | 1161 self.add_blastxml( |
| 1146 dataset_path, outputTrackConfig, track["conf"]["options"]["blast"] | 1162 dataset_path, |
| 1163 outputTrackConfig, | |
| 1164 track["conf"]["options"]["blast"], | |
| 1147 ) | 1165 ) |
| 1148 elif dataset_ext == "vcf": | 1166 elif dataset_ext == "vcf": |
| 1149 self.add_vcf(dataset_path, outputTrackConfig) | 1167 self.add_vcf(dataset_path, outputTrackConfig) |
| 1150 elif dataset_ext == "paf": | 1168 elif dataset_ext == "paf": |
| 1151 self.add_paf( | 1169 self.add_paf( |
| 1152 dataset_path, outputTrackConfig, track["conf"]["options"]["synteny"] | 1170 dataset_path, |
| 1171 outputTrackConfig, | |
| 1172 track["conf"]["options"]["synteny"], | |
| 1153 ) | 1173 ) |
| 1154 else: | 1174 else: |
| 1155 log.warn("Do not know how to handle %s", dataset_ext) | 1175 log.warn("Do not know how to handle %s", dataset_ext) |
| 1156 # Return non-human label for use in other fields | 1176 # Return non-human label for use in other fields |
| 1157 yield outputTrackConfig["label"] | 1177 yield outputTrackConfig["label"] |
| 1192 | 1212 |
| 1193 # The view for the assembly we're adding | 1213 # The view for the assembly we're adding |
| 1194 view_json = {"type": "LinearGenomeView", "tracks": tracks_data} | 1214 view_json = {"type": "LinearGenomeView", "tracks": tracks_data} |
| 1195 | 1215 |
| 1196 refName = None | 1216 refName = None |
| 1217 drdict = { | |
| 1218 "reversed": False, | |
| 1219 "assemblyName": self.genome_name, | |
| 1220 "start": 0, | |
| 1221 "end": 100000, | |
| 1222 } | |
| 1223 | |
| 1197 if data.get("defaultLocation", ""): | 1224 if data.get("defaultLocation", ""): |
| 1198 ddl = data["defaultLocation"] | 1225 ddl = data["defaultLocation"] |
| 1199 loc_match = re.search( | 1226 loc_match = re.search(r"^([^:]+):(\d*)\.*(\d*)$", ddl) |
| 1200 r"^([^:]+):(\d+)\.+(\d+)$", ddl | |
| 1201 ) | |
| 1202 if loc_match: | 1227 if loc_match: |
| 1203 refName = loc_match.group(1) | 1228 refName = loc_match.group(1) |
| 1204 start = int(loc_match.group(2)) | 1229 drdict["refName"] = refName |
| 1205 end = int(loc_match.group(3)) | 1230 if loc_match.group(2) > "": |
| 1231 drdict["start"] = int(loc_match.group(2)) | |
| 1232 if loc_match.group(3) > "": | |
| 1233 drdict["end"] = int(loc_match.group(3)) | |
| 1206 else: | 1234 else: |
| 1207 logging.info( | 1235 logging.info( |
| 1208 "@@@ regexp could not match contig:start..end in the supplied location %s - please fix" | 1236 "@@@ regexp could not match contig:start..end in the supplied location %s - please fix" |
| 1209 % ddl | 1237 % ddl |
| 1210 ) | 1238 ) |
| 1211 elif self.genome_name is not None: | 1239 elif self.genome_firstcontig is not None: |
| 1212 start = 0 | 1240 drdict["refName"] = self.genome_firstcontig |
| 1213 end = 10000 # Booh, hard coded! waiting for https://github.com/GMOD/jbrowse-components/issues/2708 | |
| 1214 logging.info( | 1241 logging.info( |
| 1215 "@@@ no defaultlocation found for default session - please add one" | 1242 "@@@ no defaultlocation found for default session - using %s as first contig found" |
| 1243 % self.genome_firstcontig | |
| 1216 ) | 1244 ) |
| 1217 | 1245 |
| 1218 if refName is not None: | 1246 if drdict.get("refName", None): |
| 1219 # TODO displayedRegions is not just zooming to the region, it hides the rest of the chromosome | 1247 # TODO displayedRegions is not just zooming to the region, it hides the rest of the chromosome |
| 1220 view_json["displayedRegions"] = [ | 1248 view_json["displayedRegions"] = [ |
| 1221 { | 1249 drdict, |
| 1222 "refName": refName, | |
| 1223 "start": start, | |
| 1224 "end": end, | |
| 1225 "reversed": False, | |
| 1226 "assemblyName": self.genome_name, | |
| 1227 } | |
| 1228 ] | 1250 ] |
| 1229 | 1251 |
| 1230 logging.info( | 1252 logging.info("@@@ defaultlocation %s for default session" % drdict) |
| 1231 "@@@ defaultlocation %s for default session" | |
| 1232 % view_json["displayedRegions"] | |
| 1233 ) | |
| 1234 else: | 1253 else: |
| 1235 logging.info( | 1254 logging.info( |
| 1236 "@@@ no contig name found for default session - please add one!" | 1255 "@@@ no contig name found for default session - please add one!" |
| 1237 ) | 1256 ) |
| 1238 session_name = data.get("session_name", "New session") | 1257 session_name = data.get("session_name", "New session") |
| 1305 "version.txt", | 1324 "version.txt", |
| 1306 "test_data", | 1325 "test_data", |
| 1307 ]: | 1326 ]: |
| 1308 cmd = ["rm", "-rf", os.path.join(self.outdir, fn)] | 1327 cmd = ["rm", "-rf", os.path.join(self.outdir, fn)] |
| 1309 self.subprocess_check_call(cmd) | 1328 self.subprocess_check_call(cmd) |
| 1310 cmd = ["cp", os.path.join(INSTALLED_TO, "jb2_webserver.py"), self.outdir] | 1329 cmd = [ |
| 1330 "cp", | |
| 1331 os.path.join(INSTALLED_TO, "jb2_webserver.py"), | |
| 1332 self.outdir, | |
| 1333 ] | |
| 1311 self.subprocess_check_call(cmd) | 1334 self.subprocess_check_call(cmd) |
| 1312 | 1335 |
| 1313 | 1336 |
| 1314 def parse_style_conf(item): | 1337 def parse_style_conf(item): |
| 1315 if "type" in item.attrib and item.attrib["type"] in ["boolean", "integer"]: | 1338 if "type" in item.attrib and item.attrib["type"] in [ |
| 1339 "boolean", | |
| 1340 "integer", | |
| 1341 ]: | |
| 1316 if item.attrib["type"] == "boolean": | 1342 if item.attrib["type"] == "boolean": |
| 1317 return item.text in ("yes", "true", "True") | 1343 return item.text in ("yes", "true", "True") |
| 1318 elif item.attrib["type"] == "integer": | 1344 elif item.attrib["type"] == "integer": |
| 1319 return int(item.text) | 1345 return int(item.text) |
| 1320 else: | 1346 else: |
| 1377 trackfiles = track.findall("files/trackFile") | 1403 trackfiles = track.findall("files/trackFile") |
| 1378 if trackfiles: | 1404 if trackfiles: |
| 1379 for x in track.findall("files/trackFile"): | 1405 for x in track.findall("files/trackFile"): |
| 1380 if is_multi_bigwig: | 1406 if is_multi_bigwig: |
| 1381 multi_bigwig_paths.append( | 1407 multi_bigwig_paths.append( |
| 1382 (x.attrib["label"], os.path.realpath(x.attrib["path"])) | 1408 ( |
| 1409 x.attrib["label"], | |
| 1410 os.path.realpath(x.attrib["path"]), | |
| 1411 ) | |
| 1383 ) | 1412 ) |
| 1384 else: | 1413 else: |
| 1385 if trackfiles: | 1414 if trackfiles: |
| 1386 metadata = metadata_from_node(x.find("metadata")) | 1415 metadata = metadata_from_node(x.find("metadata")) |
| 1387 track_conf["dataset_id"] = metadata["dataset_id"] | 1416 track_conf["dataset_id"] = metadata["dataset_id"] |
