changeset 61:e7a6f7a7148d draft

planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit 6dde5ad41d63730085116ab2c9a9d3e500a760e4-dirty
author fubar
date Tue, 26 Mar 2024 00:52:34 +0000
parents 81d535970196
children ab0d6782a95f
files Galaxy-History-jb2testout.tar.gz convertMAF.sh jbrowse2.py maf2bed.pl maf2bed.py readme.rst test-data/fakemerlins.fa test-data/maf/merlin.maf test-data/maf/merlinlastz.maf test-data/merlin.fa.forblastn
diffstat 10 files changed, 233 insertions(+), 48 deletions(-) [+]
line wrap: on
line diff
Binary file Galaxy-History-jb2testout.tar.gz has changed
--- a/convertMAF.sh	Mon Mar 25 02:10:05 2024 +0000
+++ b/convertMAF.sh	Tue Mar 26 00:52:34 2024 +0000
@@ -1,7 +1,8 @@
 #!/usr/bin/env bash
 # https://github.com/cmdcolin/jbrowse-plugin-mafviewer/blob/master/bin/convert.sh
+# maf2bed modified to work right as a python script by ross lazarus in desperation
 #  MAF file must contain the species name and chromosome name
-#  e.g. hg38.chr1 in the sequence identifiers.
-perl $3/maf2bed.pl $2 < $1 | sort -k1,1 -k2,2n > $4.sorted.bed
+#  e.g. hg38.chr1 in the sequence identifiers with hg38 passed in as $2
+python $3/maf2bed.py $2 < $1 | sort -k1,1 -k2,2n > $4.sorted.bed
 bgzip -c $4.sorted.bed > $4.sorted.bed.gz
 tabix -p bed $4.sorted.bed.gz
--- a/jbrowse2.py	Mon Mar 25 02:10:05 2024 +0000
+++ b/jbrowse2.py	Tue Mar 26 00:52:34 2024 +0000
@@ -442,7 +442,6 @@
                 style_data,
             ]
         }
-        logging.warn("style=%s" % (wstyle))
         return wstyle
 
     def process_genomes(self):
@@ -610,12 +609,12 @@
             uri: 'https://s3.amazonaws.com/jbrowse.org/genomes/GRCh38/fasta/GRCh38.fa.gz.gzi',
         Cool will not be likely to be a good fit - see discussion at https://github.com/GMOD/jbrowse-components/issues/2438
 
-
         """
         tId = trackData["label"]
         # can be served - if public.
         # dsId = trackData["metadata"]["dataset_id"]
         # url = "%s/api/datasets/%s/display?to_ext=hic " % (self.giURL, dsId)
+        hic_path = trackData.get("hic_path", None)
         useuri = trackData["useuri"].lower() == "yes"
         if useuri:
             uri = data
@@ -659,9 +658,10 @@
             ]
         }
         categ = trackData["category"]
-        fname = "%s.bed" % tId
+        fname = "%s" % tId
         dest = "%s/%s" % (self.outdir, fname)
         gname = self.genome_name
+
         cmd = [
             "bash",
             os.path.join(INSTALLED_TO, "convertMAF.sh"),
@@ -671,16 +671,13 @@
             dest,
         ]
         self.subprocess_check_call(cmd)
-        # Construct samples list
-        # We could get this from galaxy metadata, not sure how easily.
-        ps = subprocess.Popen(["grep", "^s [^ ]*", "-o", data], stdout=subprocess.PIPE)
-        output = subprocess.check_output(("sort", "-u"), stdin=ps.stdout)
-        ps.wait()
-        outp = output.decode("ascii")
-        soutp = outp.split("\n")
-        samp = [x.split("s ")[1] for x in soutp if x.startswith("s ")]
-        samples = [x.split(".")[0] for x in samp]
-        logging.warn("### maf convert cmd = %s,\nsamples=%s" % (' '.join(cmd), samples))
+        mafs = open(data,'r').readlines()
+        mafss = [x for x in mafs if (x.startswith('s\t') or x.startswith('s '))]
+        samp = [x.split()[1] for x in mafss if len(x.split()) > 0]
+        sampu = list(dict.fromkeys(samp))
+        samples = [x.split('.')[0] for x in sampu]
+        samples.sort()
+        logging.warn("$$$$ cmd=%s, mafss=%s samp=%s samples=%s" % (' '.join(cmd), mafss, samp, samples))
         trackDict = {
             "type": "MafTrack",
             "trackId": tId,
@@ -704,13 +701,13 @@
             "displays": [
                 {
                     "type": "LinearBasicDisplay",
-                    "displayId": "%s-LinearBasicDisplay" % tId,
+                    "displayId": "%s-LinearBasicDisplay" % tId
                 },
                 {
                     "type": "LinearArcDisplay",
-                    "displayId": "%s-LinearArcDisplay" % tId,
+                    "displayId": "%s-LinearArcDisplay" % tId
                 },
-            ],
+            ]
         }
         style_json = self._prepare_track_style(trackDict)
         trackDict["style"] = style_json
@@ -1110,7 +1107,7 @@
         pgnames = [x.strip() for x in pafOpts["genome_label"].split(",") if len(x.strip()) > 0]
         pgpaths = [x.strip() for x in pafOpts["genome"].split(",") if len(x.strip()) > 0]
         passnames = [self.genome_name]  # always first
-        logging.warn("### add_paf got pafOpts=%s, pgnames=%s, pgpaths=%s for %s" % (pafOpts, pgnames, pgpaths, tId))
+        logging.debug("### add_paf got pafOpts=%s, pgnames=%s, pgpaths=%s for %s" % (pafOpts, pgnames, pgpaths, tId))
         for i, gname in enumerate(pgnames):
             if len(gname.split()) > 1:
                 gname = gname.split()[0]
@@ -1202,7 +1199,7 @@
                     outputTrackConfig,
                 )
             elif dataset_ext in ("cool", "mcool", "scool"):
-                hic_url = "%s_%d.juicebox_hic" % (track_human_label, i)
+                hic_url = "%s_%d.hic" % (track_human_label, i)
                 hic_path = os.path.join(self.outdir, hic_url)
                 self.subprocess_check_call(
                     [
@@ -1215,9 +1212,8 @@
                         hic_path,
                     ]
                 )
-                outputTrackConfig["hic_url"] = hic_url
                 self.add_hic(
-                    hic_path,
+                    hic_url,
                     outputTrackConfig,
                 )
             elif dataset_ext in ("bed",):
@@ -1305,7 +1301,6 @@
             )
         # The view for the assembly we're adding
         view_json = {"type": "LinearGenomeView", "tracks": tracks_data}
-        logging.warn("### view_json=%s" % view_json)
         refName = None
         drdict = {
             "reversed": False,
@@ -1398,7 +1393,7 @@
         with open(config_path, "w") as config_file:
             json.dump(self.config_json, config_file, indent=2)
 
-    def clone_jbrowse(self, realclone=False):
+    def clone_jbrowse(self, realclone=True):
         """Clone a JBrowse directory into a destination directory. This also works in Biocontainer testing now
         Leave as True between version updates on temporary tools - requires manual conda trigger :(
         """
@@ -1550,7 +1545,6 @@
                 default_session_data["style"][key] = {
                     item.tag: parse_style_conf(item) for item in track.find("options/style")
                 }
-                logging.warn("### added %s to defsess %s for %s" % (trackkey, default_session_data, key ))
             else:
                 default_session_data["style"][key] = {}
                 logging.warn("@@@@ no options/style found for %s" % (key))
@@ -1566,7 +1560,7 @@
     default_session_data["session_name"] = root.find(
         "metadata/general/session_name"
     ).text
-    logging.warn("default_session=%s" % (default_session_data))
+    logging.debug("default_session=%s" % (default_session_data))
     jc.zipOut = root.find("metadata/general/zipOut").text == "true"
     general_data = {
         "analytics": root.find("metadata/general/analytics").text,
--- a/maf2bed.pl	Mon Mar 25 02:10:05 2024 +0000
+++ b/maf2bed.pl	Tue Mar 26 00:52:34 2024 +0000
@@ -27,7 +27,7 @@
         s/^s //;
         s/ +/:/g;
         my $temp = $_;
-        $buffer = $buffer eq '' ? $temp : "$buffer,$temp";
+        $buffer = $buffer eq '' ? $temp : "$buffer;$temp";
     }
     elsif (/^a/) {
         $score = +(s/^a score=//);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/maf2bed.py	Tue Mar 26 00:52:34 2024 +0000
@@ -0,0 +1,44 @@
+#!/usr/bin/env python
+# painfully converted from b0rken perl from
+# https://unpkg.com/browse/jbrowse-plugin-mafviewer@1.0.6/dist/
+# license is Apache2_license.txt included here
+
+import sys
+
+id = 0
+buffer = ''
+start = 0
+end = 0
+score = 0
+chrom = ''
+
+db = "%s." % sys.argv[1]
+# Read input from stdin
+for line in sys.stdin:
+    line = line.strip()
+    if not line:
+        continue
+
+    line = line.split()
+    if line[0] == 's' and line[1].startswith(db):
+        chrom = line[1]
+        chrom = chrom.replace(db, '')
+        start = int(line[2])
+        end = int(line[2]) + int(line[3])
+        line = line[1:]
+        line = ':'.join(line)
+        temp = line
+        buffer = temp if buffer == '' else f"{buffer},{temp}"
+    elif line[0] == 'a':
+        score = int(line[1].split('=')[1])
+        if id > 0:
+            sys.stdout.write('\t'.join([chrom, '%d' % start, '%d' % end, f"{sys.argv[1]}_{id}", '%d' % score, buffer])+ '\n')
+        id += 1
+        buffer = ''
+    elif line[0] == 's':
+        line = line[1:]
+        line = ':'.join(line)
+        temp = line
+        buffer = temp if buffer == '' else f"{buffer},{temp}"
+
+sys.stdout.write('\t'.join([chrom, '%d' % start, '%d' % end, f"{sys.argv[1]}_{id}", '%d' % score, buffer]) + '\n')
--- a/readme.rst	Mon Mar 25 02:10:05 2024 +0000
+++ b/readme.rst	Tue Mar 26 00:52:34 2024 +0000
@@ -1,5 +1,10 @@
 JBrowse2 in Galaxy
 ==================
+Added Mar 26:
+Testing history added with tests of the 8 simple formats
+hic and paf need small tests but work with big ones...
+
+
 Added Mar 8:
  - URI as data source for tracks
  - Autogenerate from a collection now builtin to advanced options - ignores form
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/fakemerlins.fa	Tue Mar 26 00:52:34 2024 +0000
@@ -0,0 +1,12 @@
+>Merlin1
+ATGTAAGCTCAGGAGCTCCACACGCAACAGGAACACAACCTGTGAACATTATCACAGTAT
+>Merlin2
+ATGAATTTATCAGTCCAATACTTAAAATGAATACGAAGTAAATCTATGCCTAATACTAAT
+>Merlin3
+TAATCAACGTGTGATGCTTCAAGCCAAGCTTAGGAATAGAAATGGTTTTGCCATTGACTT
+>Merlin4
+AAAAGCTTATTGCTTAAGCCTACAGTTAAACTCGCTATTCCAGTTAAATGCGATAAATGT
+>Merlin5
+TTTTCTTTGCTAATTTAACACCAAGAGCTGCAATCCATTGGTTTCTTCGTTTATATCCTG
+>Merlin6
+ATACTGCATCCTTTTGATACCAATGCGGTTCAATTTGAGTGTTACCAGAGTATATCTTGA
--- a/test-data/maf/merlin.maf	Mon Mar 25 02:10:05 2024 +0000
+++ b/test-data/maf/merlin.maf	Tue Mar 26 00:52:34 2024 +0000
@@ -1,32 +1,38 @@
 ##maf version=1 scoring=lastz.v1.04.22
 # lastz.v1.04.22 --strand=both --ambiguous=iupac --traceback=160M --format=maf --action:target=multiple
 #
-# hsp_threshold      = 3000
-# gapped_threshold   = 3000
-# x_drop             = 910
-# y_drop             = 9400
-# gap_open_penalty   = 400
+# hsp_threshold = 3000
+# gapped_threshold = 3000
+# x_drop = 910
+# y_drop = 9400
+# gap_open_penalty = 400
 # gap_extend_penalty = 30
-#        A    C    G    T
-#   A   91 -114  -31 -123
-#   C -114  100 -125  -31
-#   G  -31 -125  100 -114
-#   T -123  -31 -114   91
+# A C G T
+# A 91 -114 -31 -123
+# C -114 100 -125 -31
+# G -31 -125 100 -114
+# T -123 -31 -114 91
+
 a score=5613
 s Merlin.Merlin 960 60 + 172788 ATTTTCTGTAGCAGTTCAAACTGTAGAAAATGATGAAGTTATTTTAACTTTACCAGCTTT
-s merlin1.Merlin   960 60 +     60 ATTTTCTGTAGCAGTTCCAAACTGTAGAAAATGATGAAGTTATTTTAACTTACCAGCTTT
+s merlin1.Merlin 960 60 + 60 ATTTTCTGTAGCAGTTCCAAACTGTAGAAAATGATGAAGTTATTTTAACTTACCAGCTTT
+
 a score=5667
-s Merlin.Merlin  1020 60 + 172788 CGTAATTTTCCGCAAATAAAACAATGGGGAGCTATGCTCCCCATTTTTACAATCCAAGTA
-s merlin2.Merlin    0 60 +     60 CGTAATTTTCCGCAATAAAACAATGGGGAGCTATGCTCCCCATTTTTACAATCACAAGTA
+s Merlin.Merlin 1020 60 + 172788 CGTAATTTTCCGCAAATAAAACAATGGGGAGCTATGCTCCCCATTTTTACAATCCAAGTA
+s merlin2.Merlin 0 60 + 60 CGTAATTTTCCGCAATAAAACAATGGGGAGCTATGCTCCCCATTTTTACAATCACAAGTA
+
 a score=5721
-s Merlin.Merlin  1080 60 + 172788 TTTTCGAAGTAGAGTTTCGGGTCGAATTAATGACGTGAGACAACCCTCCAGCAGCTCCTC
-s merlin3.Merlin    0 60 +     60 TTTCGAAGTAGAGTTTCGGGTCGAATTAATGACGTGAGTACAACCCTCCAGCAGCTCCTC
+s Merlin.Merlin 1080 60 + 172788 TTTTCGAAGTAGAGTTTCGGGTCGAATTAATGACGTGAGACAACCCTCCAGCAGCTCCTC
+s merlin3.Merlin 100 160 + 60 TTTCGAAGTAGAGTTTCGGGTCGAATTAATGACGTGAGTACAACCCTCCAGCAGCTCCTC
+
 a score=5613
-s Merlin.Merlin  1140 60 + 172788 CAAGTCTAGATAATCTACTTAAACTTCCATTAAGAGACATTTCACTATTAATTCCAGTTA
-s merlin4.Merlin    0 60 +     60 CAAGTCTAGGATAATCTACTTAAACTTCCATTAAAGACATTTCACTATTAATTCCAGTTA
+s Merlin.Merlin 1140 60 + 172788 CAAGTCTAGATAATCTACTTAAACTTCCATTAAGAGACATTTCACTATTAATTCCAGTTA
+s merlin4.Merlin 200 260 + 60 CAAGTCTAGGATAATCTACTTAAACTTCCATTAAAGACATTTCACTATTAATTCCAGTTA
+
 a score=5703
-s Merlin.Merlin  1200 60 + 172788 TAGAATTAACAGCTCTATCTTCAATCCAATCAAGAGCAGCTTGACGTCCAACAGCACCCG
-s merlin5.Merlin    0 60 +     60 TAGAATTAACAGCTCTATTCAATCCAATCCCAAGAGCAGCTTGACGTCCAACAGCACCCG
+s Merlin.Merlin 1200 60 + 172788 TAGAATTAACAGCTCTATCTTCAATCCAATCAAGAGCAGCTTGACGTCCAACAGCACCCG
+s merlin5.Merlin 300 360 + 60 TAGAATTAACAGCTCTATTCAATCCAATCCCAAGAGCAGCTTGACGTCCAACAGCACCCG
+
 a score=5649
-s Merlin.Merlin  1260 60 + 172788 TTTGCATTACTCTGTAAGCAAATGTAACATCGAAAACCGCAATTTGGTTATCTCCTTCAT
-s merlin6.Merlin    0 60 +     60 TTTGCATTACTCTGTAAGCAA TGTAACATCGAAAACCGCAATTATGGTTATCTCCTTCAT
+s Merlin.Merlin 1260 60 + 172788 TTTGCATTACTCTGTAAGCAAATGTAACATCGAAAACCGCAATTTGGTTATCTCCTTCAT
+s merlin6.Merlin 0 60 + 60 TTTGCATTACTCTGTAAGCAATGTAACATCGAAAACCGCAATTATGGTTATCTCCTTCAT
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/maf/merlinlastz.maf	Tue Mar 26 00:52:34 2024 +0000
@@ -0,0 +1,37 @@
+##maf version=1 scoring=lastz.v1.04.22
+# lastz.v1.04.22 --strand=both --ambiguous=iupac --traceback=160M --format=maf --action:target=multiple 
+#
+# hsp_threshold      = 3000
+# gapped_threshold   = 3000
+# x_drop             = 910
+# y_drop             = 9400
+# gap_open_penalty   = 400
+# gap_extend_penalty = 30
+#        A    C    G    T
+#   A   91 -114  -31 -123
+#   C -114  100 -125  -31
+#   G  -31 -125  100 -114
+#   T -123  -31 -114   91
+a score=5703
+s Merlin.Merlin 1320 60 + 172788 ATGTAAGCTCAGGAGCTCCACACGCAACAGGAACACAACCTGTGAACATTATCACAGTAT
+s Merlin1.Merlin    0 60 +     60 ATGTAAGCTCAGGAGCTCCACACGCAACAGGAACACAACCTGTGAACATTATCACAGTAT
+
+a score=5595
+s Merlin.Merlin  4020 60 + 172788 ATGAATTTATCAGTCCAATACTTAAAATGAATACGAAGTAAATCTATGCCTAATACTAAT
+s Merlin2.Merlin    0 60 +     60 ATGAATTTATCAGTCCAATACTTAAAATGAATACGAAGTAAATCTATGCCTAATACTAAT
+
+a score=5667
+s Merlin.Merlin  5220 60 + 172788 TAATCAACGTGTGATGCTTCAAGCCAAGCTTAGGAATAGAAATGGTTTTGCCATTGACTT
+s Merlin3.Merlin    0 60 +     60 TAATCAACGTGTGATGCTTCAAGCCAAGCTTAGGAATAGAAATGGTTTTGCCATTGACTT
+
+a score=5640
+s Merlin.Merlin  7740 60 + 172788 AAAAGCTTATTGCTTAAGCCTACAGTTAAACTCGCTATTCCAGTTAAATGCGATAAATGT
+s Merlin4.Merlin    0 60 +     60 AAAAGCTTATTGCTTAAGCCTACAGTTAAACTCGCTATTCCAGTTAAATGCGATAAATGT
+
+a score=5649
+s Merlin.Merlin  9720 60 + 172788 TTTTCTTTGCTAATTTAACACCAAGAGCTGCAATCCATTGGTTTCTTCGTTTATATCCTG
+s Merlin5.Merlin    0 60 +     60 TTTTCTTTGCTAATTTAACACCAAGAGCTGCAATCCATTGGTTTCTTCGTTTATATCCTG
+
+a score=5658
+s Merlin.Merlin  10380 60 + 172788 ATACTGCATCCTTTTGATACCAATGCGGTTCAATTTGAGTGTTACCAGAGTATATCTTGA
+s Merlin6.Merlin     0 60 +     60 ATACTGCATCCTTTTGATACCAATGCGGTTCAATTTGAGTGTTACCAGAGTATATCTTGA
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/merlin.fa.forblastn	Tue Mar 26 00:52:34 2024 +0000
@@ -0,0 +1,86 @@
+>Merlin
+AGAGCTTAAGAAAATTTTAGGCGATAAGAAGCTTCAAAGTACTCCAATTGGACGTTTTGG
+AATGAAAGAAAACGTTGATACTTATATTGAAAGTGTAGTGACAGGGCAGTTAGAAGGTGA
+ATTTTCTGTAGCAGTTCAAACTGTAGAAAATGATGAAGTTATTTTAACTTTACCAGCTTT
+CGTAATTTTCCGCAAATAAAACAATGGGGAGCTATGCTCCCCATTTTTACAATCCAAGTA
+TTTTCGAAGTAGAGTTTCGGGTCGAATTAATGACGTGAGACAACCCTCCAGCAGCTCCTC
+CAAGTCTAGATAATCTACTTAAACTTCCATTAAGAGACATTTCACTATTAATTCCAGTTA
+TCTCTTCTGATAACTCGTTCCAAGGTATTATTTTCCCTTGGTATTTAATTGATTTCACAC
+AGGAAGATGCCATCTGTATTCCAGAAACTGCAACCGTTGAAGAAATATCTAAAATAATTG
+AAGATAGCGCAGTTGTAATTGAATCAGAAAAGTTTGAATTACCTGAAGGATTTTCTCCTC
+ATTTTGAACTAATTGGAAAGGCTCCAGGATATTGTACTCTTCCTTGGTGGATTTATGAGT
+GTAAATTCATTGAACGTATCCGTAGTGCTGGATTTGATTTGACAGAAACATGGGTAGCTCG
+TGAAAAGATTCATGGTACTAACTTTTCTATTATCATCACCAAAGACACAGTAACGTGTGC
+GAAGCGCACCGGACCTATTCTTGAAGCTGAAGACTTCTTTGGTTACGAGATTATTCTTAA
+GAAGTATGATAAGTCTATTAAAGCTCTCCAGGACACAATGAAGAATATGACCACAGAATC
+TACCGATTTAATTGCAAATATTTTTGCTGAACCGTTTACATCAGTTCAGCAATTTGATAT
+TATTACCTCATACCAAACAAATAGTAACTCGGAGAATAAAATGACAACCATCACTATCAA
+CAAAGGTATTAACTTCGGTAAAGAAATTTCTGGCACTTTCGAATTAGTCGGAGAATGGTT
+CCCAGAAACTCTGAAACCCGAAGATGCTGCTCAAGGTGATGGTAAAGTTTTCGTTATCAT
+TAGAAGATATTAAAAACACCATGAACCGCTCAGAGATTTTGAATGAACTTCAACGCTGCG
+TACAACGAGTTGATGATGAATACCACTTACCAACCAACGCATGGGAAGTCTGGTTCCGAG
+GTTCTCATCTCGGCTCGATTGAACTGAAAGCCAAAGGTTGTTATGCAGTTTATAGTTCTC
+TTGGTCGTCATTGCGGTGATTGTCAGAACTTTATGCAAGCACTGGCTCGCTTCATTAATT
+CATGCGCAGTCATTATCGCCAAGCAGCAAATCGAAGAAACCGAAAAATGGATTGACGAAG
+TAACTAAAGAGCCAGAAATTCGTCGTTGGGGCGTTACTCGTAAATCTCGTTGGATTGATA
+AAGTCAAAGGGTGGTTCAAATGATGGAAACGATGAATCAAAATAATGAATTGGCGGTTCC
+GCGTCACTCTTAACCCAAGTCATTCCCAAAATAAAAAACACAATTAACACAAAAACCCGG
+GAGAAAAGAACTCTCCCGGTTGCATTATCTTTGAATACTCTATCCCAAACTCCAAAAACG
+ATGTCTGTTATTGGCAGACTAATTTTTGAAGCCATAAGTTTTCTCCTTTGGAATATTTAT
+ACTCGAGATCCATATATAGTGCCTACGTTTTGCCATGTTGGAGCAGTACCAGCAACAGCT
+GCTCCACCACCTGCAGGACCCCATCGCCAGCCGGATTCAAAGTTACCGAATGCCGGGTTA
+TGTTGACGCATCCAACCAATTAGCCAATCTTTATTATAATTATGGTTAGCTGCCAAGTCA
+ATAACAACTTCTCTCGATCGACCTATCAAGTGTGACATCCAAAATGGAGTCCCTAATCTT
+ACTTGTGATGCAGCAGTTGACATCCAACGTTGTCCAGTTTCGGCTACTGCACTACTTCCA
+ACCCATGGTCCTGTTATAGCCATAAAAACTCCTAGGGCCCGAAGGCCCTTTATTAAATTA
+ATGCAGAAATGATTTCTTCAAGCTTCTGAATGCGAGCTTTTAATTCAGAAATCTCATCAG
+TGTGTTCGTTAATTGTTGCAGTGTTTAGCGCAATAATACCATTGTAGTTTAGACGAAGTA
+ATCCTTCTGGATTATCTTTATCGACTGAAATCAACTCAGGCAATACAGCTTGAACTTCTT
+GAGCAATTAAACCGGATGACTGTTCCCAATTAATAGAGCCGTCTTCTTTGAACCCTTTCT
+GAAATAAAACGTGAGCACCTAGAAACTCTCAGAGGAATGAGACTAGGTTGTACATGTCAC
+CCGCTTAATTGCCATGGTGATATAATAGCTCATATAGTTAACAGACTTTTTAAAGACGAC
+TTCAGAGTAGAGGATTTATGCAATTAATTAAGTCATCAGGAATTGGACAAGATTTTATCC
+TTGCTTCTAATCTGGCTATGTTTGCGCTACGCAAAGAAGTGTACGGACAATTCGAGCCAC
+CATCATTTATCGACCATATTTCTTATTGTGTTAATGAACGCAAATATGATCCGGAATTAT
+TGTCCAAATACAGCGCAGAAGAAATTACTTATCTGGAATCGCGAATTGTACATGACCGAG
+CATCTAGCCAAGTTTCGAACTCCACGAATGGTATTGAGCCACCACGCGGGCCGGTAAGTA
+TTAAAGAATCTAAAGAAGGTTCTTTCCGCCAGGTAGTTCCGAATATTGAGCATAATGCTG
+AACTTTACGATTATGCTTGGCTGATGGCTAAACGTGGTAATAAAGGTTACTTGACTCAAG
+TTGCTATTATGACAAAGTGGCTTTGCCAATCAGCTTCAGCGAATACTTATTACGATCCGC
+AGAACTTTGCTAAAGGTAAAGTTTCGATGGCTCAGATGCTTGAAGACTTGATTTACTTCT
+GGTTCTTCGGTGGTAAGACTTTGTATTACCATAACACCCGCGATGGTTCAGGAACAGACG
+ATTACGAAATCGAAACTCCAAAAGCCGATGACTGTGCCGCTTGTAAACTATGATATAATT
+GGACCACGGATGGTCCTAGGAGTATATTATGGGATGTAAAGAATTCACTTTACCGCCTCT
+TCCAATTCAACCACGGCCAAAGCCGCCAAGGGTTCCTAAATGAGTACAGTTTTTAACACT
+GGTCGTGCACCTGCTGCTGTCTTGTCTGCTCTGATTAGCGATCCTTCTTTGGATACTTGG
+GACTTAATGAAGAGTCTTTATCTCTGTCTTCATGTAATCAATGCTCTTGAAGCTATTAGA
+TTTTATGTATCTTTCGCTTGTACTTTCAACTTCCATAAGAACATGGAAATCATGGAAGGT
+AACGCAAAGATCATGAAGTTCATTGCTCGTGATGAACAACTTCATCTGAAAGGCACTCAG
+TACATTATTCGTCAGCTTCAACAAGGTACCGACGGTGAAGAATGGGCTGAAATTGCTCGT
+GAATGCGAACAAGAAGCAGTTAACATCTTCATGGAAGTTAACCGCCAAGAAAAAGAATGG
+TAATCTACAGAAACTCGTCAATCATGCAGTAGAAATTATGGAAGGTGAATAATGAAACAA
+CTTTATGAAAATCTGATGGCTCTATGTGATGCGAAGGATGAATCCAAATTCTACTTCACT
+GACGATGTGTCTCCATCTGGCAAAGAATATCGAATCTTTAGCTATAACTACGCATCTTAT
+TCTGATTGGCTACTGCCTGATGCTTTAGAATGCCGTGGCATTATGTTTGAAATGATGAAT
+AAATGAGTCGTTCAATAAGTTCGCTCTGGATTTACAGGAGACTACTAGATGAAATGTTTA
+GTGGCAGCTGTAATAACTATTGGACTACTATCTGGATGTTCCCAGAGTGTACCAGAGGTT
+CCCAGAGATAACACTCTACACCCATCATGGCCTGATCCAATAAAGCCATACACTGGTAAG
+TGGCAAGTCAAGATAATTGACGATCGCCCATGGGTTGGAATGCCTTTTGATGAATCTCAG
+GAATTCAGAATTTGGATGAATGACGTCAATCGTTGGGCTAAAGATGCTAATGGAATGATA
+TGTTACTATCGTAAAGACTTAAACGAAACAAGGTGCAAGCAATGGACCCGTTAGTAGTTC
+CAACTCCGACTTTATTCGTTATCTGTCGGCTTATGATGATGCTCTTAAGGTAGTTAATGA
+GCTCAAGAAGCATTACGATTTTGTTGCAGTAACTGCATTAGGTAACTCAGTAGATGCTCA
+CCTGAATCGCCAGTTTAACTTGAGTGCATTGTTTCCGGGAGCCTTTAAAGATATATACGT
+AAGCGAATTACTTCAAAAGCTAATCAGGAACAGCGTGAAATGCAAGATGCGGTATTCAAT
+GGAGCTTTGTACATCACTACTCTTCCAAACGGTGGAGATATCTATCACCGAACTCTGGCA
+GAATTGATTCGCGAATATAAGTCAAAGATCTAGCTTATCGAGGGGTGTGATATAATAGTC
+ATATCCCTAAACACAAAGAGAAAATTATGATTCTTGAAATTATCAATGAAATCGCGTCTA
+TAGAATCAGAATGCGGATTAATCAAAACTAAATCAGGTTCTGGATTAAAAGATAAACCGG
+GTCCAGATTCGCATGAGTTAGACCGTACTCGTATTTGGGAAAACCAAAATGATTATATTG
+CGATTGATAGCTGGGGTGAATACAACTAACTCCTTTCAGACGATGAAAGATTTAGTTAAA
+ATGGCTTCAGCTGGAACTAGACCTGAAGATCGTGAACAGTTAATTGCAAATTTAATTGGA
+TTAGCTTATAAAGAAATAAGTGCAATCATCAGAGATTCATACCAAACTGCAGCAAGTTTA
+TCTAAAGAGAATGATCATTATTCTAAAGATGAAAAACAAGCTATCAGTGAATACTGCGCA
+AACGCTTTCGAATACGTGAATATGTTCTTAATCGGTAAGCCGGAAGAAGGGTATTCAACT
+TCTGATTCTCTCGAGATCATCGATAATATGGACTCTGCGTTTGAAAAAGGAACTCGTTTA
+GACAAAGGTACATTATTGTATCGTGGCCAAAAATTAGACCTTCCTACA