Mercurial > repos > fubar > jbrowse2
comparison jbrowse2.py @ 93:4c517a0041a8 draft
planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit aeef2fbc0f90a9366851941ff51baeba410c56e4
author | fubar |
---|---|
date | Wed, 24 Apr 2024 02:29:32 +0000 |
parents | 3c4db8203fad |
children | 74074746ccd8 |
comparison
equal
deleted
inserted
replaced
92:3c4db8203fad | 93:4c517a0041a8 |
---|---|
17 from collections import defaultdict | 17 from collections import defaultdict |
18 | 18 |
19 logging.basicConfig(level=logging.DEBUG) | 19 logging.basicConfig(level=logging.DEBUG) |
20 log = logging.getLogger("jbrowse") | 20 log = logging.getLogger("jbrowse") |
21 | 21 |
22 JB2VER = "v2.10.3" | 22 JB2VER = "v2.11.0" |
23 # version pinned if cloning - but not cloning now | 23 # version pinned if cloning - but not cloning now |
24 logCommands = True | 24 logCommands = True |
25 # useful for seeing what's being written but not for production setups | 25 # useful for seeing what's being written but not for production setups |
26 TODAY = datetime.datetime.now().strftime("%Y-%m-%d") | 26 TODAY = datetime.datetime.now().strftime("%Y-%m-%d") |
27 SELF_LOCATION = os.path.dirname(os.path.realpath(__file__)) | 27 SELF_LOCATION = os.path.dirname(os.path.realpath(__file__)) |
529 if genome_name == primaryGenome: # first one | 529 if genome_name == primaryGenome: # first one |
530 this_genome["genome_name"] = genome_name # first one for all tracks | 530 this_genome["genome_name"] = genome_name # first one for all tracks |
531 this_genome["genome_sequence_adapter"] = assem["sequence"][ | 531 this_genome["genome_sequence_adapter"] = assem["sequence"][ |
532 "adapter" | 532 "adapter" |
533 ] | 533 ] |
534 this_genome["genome_firstcontig"] = None | 534 this_genome["genome_firstcontig"] = first_contig |
535 if not useuri: | |
536 fl = open(fapath, "r").readline() | |
537 fls = fl.strip().split(">") | |
538 if len(fls) > 1: | |
539 fl = fls[1] | |
540 if len(fl.split()) > 1: | |
541 this_genome["genome_firstcontig"] = fl.split()[ | |
542 0 | |
543 ].strip() | |
544 else: | |
545 this_genome["genome_firstcontig"] = fl | |
546 else: | |
547 try: | |
548 scontext = ssl.SSLContext(ssl.PROTOCOL_TLS) | |
549 scontext.verify_mode = ssl.VerifyMode.CERT_NONE | |
550 with urllib.request.urlopen( | |
551 url=fapath + ".fai", context=scontext | |
552 ) as f: | |
553 fl = f.readline() | |
554 except Exception: | |
555 fl = None | |
556 if fl: # is first row of the text fai so the first contig name | |
557 this_genome["genome_firstcontig"] = ( | |
558 fl.decode("utf8").strip().split()[0] | |
559 ) | |
560 assmeta.append(this_genome) | 535 assmeta.append(this_genome) |
561 self.assemblies += assembly | 536 self.assemblies += assembly |
562 self.assmeta[primaryGenome] = assmeta | 537 self.assmeta[primaryGenome] = assmeta |
563 self.tracksToAdd[primaryGenome] = [] | 538 self.tracksToAdd[primaryGenome] = [] |
564 return primaryGenome | 539 return primaryGenome |
567 """added code to grab the first contig name and length for broken default session from Anthony and Helena's code | 542 """added code to grab the first contig name and length for broken default session from Anthony and Helena's code |
568 that poor Bjoern is trying to figure out. | 543 that poor Bjoern is trying to figure out. |
569 """ | 544 """ |
570 if useuri: | 545 if useuri: |
571 faname = fapath | 546 faname = fapath |
572 adapter = { | |
573 "type": "BgzipFastaAdapter", | |
574 "fastaLocation": {"uri": faname, "locationType": "UriLocation"}, | |
575 "faiLocation": {"uri": faname + ".fai", "locationType": "UriLocation"}, | |
576 "gziLocation": {"uri": faname + ".gzi", "locationType": "UriLocation"}, | |
577 } | |
578 scontext = ssl.SSLContext(ssl.PROTOCOL_TLS) | 547 scontext = ssl.SSLContext(ssl.PROTOCOL_TLS) |
579 scontext.verify_mode = ssl.VerifyMode.CERT_NONE | 548 scontext.verify_mode = ssl.VerifyMode.CERT_NONE |
580 with urllib.request.urlopen(url=faname + ".fai", context=scontext) as f: | 549 with urllib.request.urlopen(url=faname + ".fai", context=scontext) as f: |
581 fl = f.readline() | 550 fl = f.readline() |
582 contig = fl.decode("utf8").strip() | 551 contig = fl.decode("utf8").strip() |
589 fadest, | 558 fadest, |
590 fadest, | 559 fadest, |
591 fadest, | 560 fadest, |
592 ) | 561 ) |
593 self.subprocess_popen(cmd) | 562 self.subprocess_popen(cmd) |
594 | |
595 adapter = { | |
596 "type": "BgzipFastaAdapter", | |
597 "fastaLocation": { | |
598 "uri": faname, | |
599 }, | |
600 "faiLocation": { | |
601 "uri": faname + ".fai", | |
602 }, | |
603 "gziLocation": { | |
604 "uri": faname + ".gzi", | |
605 }, | |
606 } | |
607 contig = open(fadest + ".fai", "r").readline().strip() | 563 contig = open(fadest + ".fai", "r").readline().strip() |
564 adapter = { | |
565 "type": "BgzipFastaAdapter", | |
566 "fastaLocation": { | |
567 "uri": faname, | |
568 }, | |
569 "faiLocation": { | |
570 "uri": faname + ".fai", | |
571 }, | |
572 "gziLocation": { | |
573 "uri": faname + ".gzi", | |
574 }, | |
575 } | |
608 first_contig = contig.split()[:2] | 576 first_contig = contig.split()[:2] |
609 first_contig.insert(0, gname) | 577 first_contig.insert(0, gname) |
610 trackDict = { | 578 trackDict = { |
611 "name": gname, | 579 "name": gname, |
612 "sequence": { | 580 "sequence": { |
875 self.subprocess_check_call(["cp", data, dest]) | 843 self.subprocess_check_call(["cp", data, dest]) |
876 url = fname | 844 url = fname |
877 bindex = fname + ".bai" | 845 bindex = fname + ".bai" |
878 bi = bam_indexes.split(",") | 846 bi = bam_indexes.split(",") |
879 bam_index = [ | 847 bam_index = [ |
880 x.split(":")[1].strip() | 848 x.split(" ~ ")[1].strip() |
881 for x in bi | 849 for x in bi |
882 if ":" in x and x.split(":")[0].strip() == realFName | 850 if " ~ " in x and x.split(" ~ ")[0].strip() == realFName |
883 ] | 851 ] |
884 logging.debug( | 852 logging.debug( |
885 "===realFName=%s got %s as bam_indexes %s as bi, %s for bam_index" | 853 "===realFName=%s got %s as bam_indexes %s as bi, %s for bam_index" |
886 % (realFName, bam_indexes, bi, bam_index) | 854 % (realFName, bam_indexes, bi, bam_index) |
887 ) | 855 ) |
937 dest = os.path.join(self.outdir, fname) | 905 dest = os.path.join(self.outdir, fname) |
938 url = fname | 906 url = fname |
939 self.subprocess_check_call(["cp", data, dest]) | 907 self.subprocess_check_call(["cp", data, dest]) |
940 ci = cram_indexes.split(",") | 908 ci = cram_indexes.split(",") |
941 cram_index = [ | 909 cram_index = [ |
942 x.split(":")[1].strip() | 910 x.split(" ~ ")[1].strip() |
943 for x in ci | 911 for x in ci |
944 if ":" in x and x.split(":")[0].strip() == realFName | 912 if " ~ " in x and x.split(" ~ ")[0].strip() == realFName |
945 ] | 913 ] |
946 logging.debug( | 914 logging.debug( |
947 "===realFName=%s got %s as cram_indexes %s as ci, %s for cram_index" | 915 "===realFName=%s got %s as cram_indexes %s as ci, %s for cram_index" |
948 % (realFName, cram_indexes, ci, cram_index) | 916 % (realFName, cram_indexes, ci, cram_index) |
949 ) | 917 ) |
1164 url = data | 1132 url = data |
1165 nrow = self.getNrow(url) | 1133 nrow = self.getNrow(url) |
1166 categ = trackData["category"] | 1134 categ = trackData["category"] |
1167 pg = pafOpts["genome"].split(",") | 1135 pg = pafOpts["genome"].split(",") |
1168 pgc = [x.strip() for x in pg if x.strip() > ""] | 1136 pgc = [x.strip() for x in pg if x.strip() > ""] |
1169 gnomes = [x.split(":") for x in pgc] | 1137 gnomes = [x.split(" ~ ") for x in pgc] |
1138 logging.debug("pg=%s, gnomes=%s" % (pg, gnomes)) | |
1170 passnames = [trackData["assemblyNames"]] # always first | 1139 passnames = [trackData["assemblyNames"]] # always first |
1171 for i, (gpath, gname) in enumerate(gnomes): | 1140 for i, (gpath, gname) in enumerate(gnomes): |
1172 # may have been forgotten by user for uri | 1141 # may have been forgotten by user for uri |
1173 if len(gname) == 0: | 1142 if len(gname) == 0: |
1174 gn = os.path.basename(gpath) | 1143 gn = os.path.basename(gpath) |
1176 # trouble from spacey names in command lines avoidance | 1145 # trouble from spacey names in command lines avoidance |
1177 if len(gname.split()) > 1: | 1146 if len(gname.split()) > 1: |
1178 gname = gname.split()[0] | 1147 gname = gname.split()[0] |
1179 if gname not in passnames: | 1148 if gname not in passnames: |
1180 passnames.append(gname) | 1149 passnames.append(gname) |
1181 useuri = gpath.startswith("http://") or gpath.startswith("https://") | 1150 useuri = pafOpts["useuri"] == "true" |
1182 if gname not in self.genome_names: | 1151 if gname not in self.genome_names: |
1183 # ignore if already there - eg for duplicates among pafs. | 1152 # ignore if already there - eg for duplicates among pafs. |
1184 asstrack, first_contig = self.make_assembly(gpath, gname, useuri) | 1153 asstrack, first_contig = self.make_assembly(gpath, gname, useuri) |
1185 self.genome_names.append(gname) | 1154 self.genome_names.append(gname) |
1186 self.tracksToAdd[gname] = [] | 1155 self.tracksToAdd[gname] = [] |
1614 trackI = 0 | 1583 trackI = 0 |
1615 for ass in root.findall("assembly"): | 1584 for ass in root.findall("assembly"): |
1616 genomes = [ | 1585 genomes = [ |
1617 { | 1586 { |
1618 "path": x.attrib["path"], | 1587 "path": x.attrib["path"], |
1619 "label": x.attrib["label"], | 1588 "label": x.attrib["label"].split(" ")[0].replace(",", ""), |
1620 "useuri": x.attrib["useuri"], | 1589 "useuri": x.attrib["useuri"], |
1621 "meta": metadata_from_node(x.find("metadata")), | 1590 "meta": metadata_from_node(x.find("metadata")), |
1622 } | 1591 } |
1623 for x in ass.findall("metadata/genomes/genome") | 1592 for x in ass.findall("metadata/genomes/genome") |
1624 ] | 1593 ] |
1648 pass | 1617 pass |
1649 | 1618 |
1650 trackfiles = track.findall("files/trackFile") | 1619 trackfiles = track.findall("files/trackFile") |
1651 if trackfiles: | 1620 if trackfiles: |
1652 for x in trackfiles: | 1621 for x in trackfiles: |
1653 track_conf["label"] = "%s_%d" % (x.attrib["label"], trackI) | 1622 track_conf["label"] = "%s_%d" % ( |
1623 x.attrib["label"].replace(" ", "_").replace(",", ""), | |
1624 trackI, | |
1625 ) | |
1654 trackI += 1 | 1626 trackI += 1 |
1655 track_conf["useuri"] = x.attrib["useuri"] | 1627 track_conf["useuri"] = x.attrib["useuri"] |
1656 if is_multi_bigwig: | 1628 if is_multi_bigwig: |
1657 multi_bigwig_paths.append( | 1629 multi_bigwig_paths.append( |
1658 ( | 1630 ( |