Repository 'gff3_to_json'
hg clone https://toolshed.g2.bx.psu.edu/repos/earlhaminst/gff3_to_json

Changeset 1:befe6021e476 (2017-02-28)
Previous changeset 0:be6cec883b02 (2016-12-21)
Commit message:
planemo upload for repository https://github.com/TGAC/earlham-galaxytools/tree/master/tools/gff3_to_json commit 5e5fbe362ed5a4714debda0f2c0834cbbfd34147
modified:
gff3_to_json.py
gff3_to_json.xml
test-data/Caenorhabditis_elegans.WBcel235.33.chromosome.I_shortened.json
test-data/test.json
b
diff -r be6cec883b02 -r befe6021e476 gff3_to_json.py
--- a/gff3_to_json.py Wed Dec 21 10:02:59 2016 -0500
+++ b/gff3_to_json.py Tue Feb 28 12:06:04 2017 -0500
[
b'@@ -4,16 +4,22 @@\n import optparse\n import sys\n \n-cds_parent_dict = dict()\n-exon_parent_dict = dict()\n-five_prime_utr_parent_dict = dict()\n gene_count = 0\n-gene_dict = dict()\n-transcript_dict = dict()\n-three_prime_utr_parent_dict = dict()\n+\n+\n+def remove_type_from_list_of_ids(l):\n+    return \',\'.join(remove_type_from_id(_) for _ in l.split(\',\'))\n \n \n-def feature_to_json(cols):\n+def remove_type_from_id(id_):\n+    colon_index = id_.find(\':\')\n+    if colon_index >= 0:\n+        return id_[colon_index + 1:]\n+    else:\n+        return id_\n+\n+\n+def feature_to_dict(cols, parent_dict=None):\n     d = {\n         \'end\': int(cols[4]),\n         \'start\': int(cols[3]),\n@@ -22,21 +28,32 @@\n         if \'=\' in attr:\n             (tag, value) = attr.split(\'=\')\n             if tag == \'ID\':\n-                d[\'id\'] = value\n-            else:\n-                d[tag] = value\n+                tag = \'id\'\n+                value = remove_type_from_id(value)\n+            elif tag == \'Parent\':\n+                value = remove_type_from_list_of_ids(value)\n+            d[tag] = value\n     if cols[6] == \'+\':\n         d[\'strand\'] = 1\n     elif cols[6] == \'-\':\n         d[\'strand\'] = -1\n     else:\n         raise Exception("Unrecognized strand \'%s\'" % cols[6])\n+    if parent_dict is not None and \'Parent\' in d:\n+        # a 3\' UTR can be split among multiple exons\n+        # a 5\' UTR can be split among multiple exons\n+        # a CDS can be part of multiple transcripts\n+        for parent in d[\'Parent\'].split(\',\'):\n+            if parent not in parent_dict:\n+                parent_dict[parent] = [d]\n+            else:\n+                parent_dict[parent].append(d)\n     return d\n \n \n-def gene_to_json(cols, species):\n+def add_gene_to_dict(cols, species, gene_dict):\n     global gene_count\n-    gene = feature_to_json(cols)\n+    gene = feature_to_dict(cols)\n     gene.update({\n         \'member_id\': gene_count,\n         \'object_type\': \'Gene\',\n@@ -48,8 +65,8 @@\n     gene_count = gene_count + 1\n \n \n-def transcript_to_json(cols, species):\n-    transcript = feature_to_json(cols)\n+def add_transcript_to_dict(cols, species, transcript_dict):\n+    transcript = feature_to_dict(cols)\n     transcript.update({\n         \'object_type\': \'Transcript\',\n         \'seq_region_name\': cols[0],\n@@ -58,8 +75,8 @@\n     transcript_dict[transcript[\'id\']] = transcript\n \n \n-def exon_to_json(cols, species):\n-    exon = feature_to_json(cols)\n+def add_exon_to_dict(cols, species, exon_parent_dict):\n+    exon = feature_to_dict(cols, exon_parent_dict)\n     exon.update({\n         \'length\': int(cols[4]) - int(cols[3]) + 1,\n         \'object_type\': \'Exon\',\n@@ -69,56 +86,20 @@\n     if \'id\' not in exon and \'Name\' in exon:\n         exon[\'id\'] = exon[\'Name\']\n \n-    if \'Parent\' in exon:\n-        for parent in exon[\'Parent\'].split(\',\'):\n-            if parent not in exon_parent_dict:\n-                exon_parent_dict[parent] = [exon]\n-            else:\n-                exon_parent_dict[parent].append(exon)\n \n-\n-def five_prime_utr_to_json(cols):\n-    five_prime_utr = feature_to_json(cols)\n-    if \'Parent\' in five_prime_utr:\n-        for parent in five_prime_utr[\'Parent\'].split(\',\'):\n-            # the 5\' UTR can be split among multiple exons\n-            if parent not in five_prime_utr_parent_dict:\n-                five_prime_utr_parent_dict[parent] = [five_prime_utr]\n-            else:\n-                five_prime_utr_parent_dict[parent].append(five_prime_utr)\n-\n-\n-def three_prime_utr_to_json(cols):\n-    three_prime_utr = feature_to_json(cols)\n-    if \'Parent\' in three_prime_utr:\n-        for parent in three_prime_utr[\'Parent\'].split(\',\'):\n-            # the 3\' UTR can be split among multiple exons\n-            if parent not in three_prime_utr_parent_dict:\n-                three_prime_utr_parent_dict[parent] = [three_prime_utr]\n-            else:\n-                three_prime_utr_parent_dict[parent].append(three_prime_utr)\n-\n-\n-def cds_to_json(cols):\n-    cds = feature_to_json(cols)\n+def add_cds_to_dict(cols, cds_par'..b'(full_gene_dict.keys()) & set(gene_dict.keys())\n     if gene_intersection:\n-        raise Exception("JSON file \'%s\' contains information for genes \'%s\', which are also present in other files" % (json_arg, \', \'.join(gene_intersection)))\n-    gene_dict.update(dict_from_json)\n+        raise Exception("Information for genes \'%s\' are present in multiple files" % \', \'.join(gene_intersection))\n+    full_gene_dict.update(gene_dict)\n \n \n-def write_json(outfile=None, sort_keys=False):\n+def write_json(full_gene_dict, outfile=None, sort_keys=False):\n     if outfile:\n         with open(outfile, \'w\') as f:\n-            json.dump(gene_dict, f, sort_keys=sort_keys)\n+            json.dump(full_gene_dict, f, sort_keys=sort_keys)\n     else:\n-        print(json.dumps(gene_dict, indent=3, sort_keys=sort_keys))\n+        json.dump(full_gene_dict, sys.stdout, sort_keys=sort_keys)\n \n \n def __main__():\n@@ -205,16 +184,23 @@\n     parser.add_option(\'-s\', \'--sort\', action=\'store_true\', help=\'Sort the keys in the JSON output\')\n     parser.add_option(\'-o\', \'--output\', help=\'Path of the output file. If not specified, will print on the standard output\')\n     options, args = parser.parse_args()\n-\n     if args:\n         raise Exception(\'Use options to provide inputs\')\n+\n+    full_gene_dict = dict()\n     for gff3_arg in options.gff3:\n         try:\n             (species, filename) = gff3_arg.split(\':\')\n         except ValueError:\n             raise Exception("Argument for --gff3 \'%s\' is not in the SPECIES:FILENAME format" % gff3_arg)\n+        gene_dict = dict()\n+        transcript_dict = dict()\n+        exon_parent_dict = dict()\n+        cds_parent_dict = dict()\n+        five_prime_utr_parent_dict = dict()\n+        three_prime_utr_parent_dict = dict()\n         with open(filename) as f:\n-            for i, line in enumerate(f):\n+            for i, line in enumerate(f, start=1):\n                 line = line.strip()\n                 if not line:\n                     # skip empty lines\n@@ -228,27 +214,29 @@\n                 feature_type = cols[2]\n                 try:\n                     if feature_type == \'gene\':\n-                        gene_to_json(cols, species)\n+                        add_gene_to_dict(cols, species, gene_dict)\n                     elif feature_type in (\'mRNA\', \'transcript\'):\n-                        transcript_to_json(cols, species)\n+                        add_transcript_to_dict(cols, species, transcript_dict)\n                     elif feature_type == \'exon\':\n-                        exon_to_json(cols, species)\n+                        add_exon_to_dict(cols, species, exon_parent_dict)\n                     elif feature_type == \'five_prime_UTR\':\n-                        five_prime_utr_to_json(cols)\n+                        feature_to_dict(cols, five_prime_utr_parent_dict)\n                     elif feature_type == \'three_prime_UTR\':\n-                        three_prime_utr_to_json(cols)\n+                        feature_to_dict(cols, three_prime_utr_parent_dict)\n                     elif feature_type == \'CDS\':\n-                        cds_to_json(cols)\n+                        add_cds_to_dict(cols, cds_parent_dict)\n                     else:\n                         print("Line %i in file \'%s\': \'%s\' is not an implemented feature type" % (i, filename, feature_type), file=sys.stderr)\n                 except Exception as e:\n                     raise Exception("Line %i in file \'%s\': %s" % (i, filename, e))\n-    join_dicts()\n+        join_dicts(gene_dict, transcript_dict, exon_parent_dict, cds_parent_dict, five_prime_utr_parent_dict, three_prime_utr_parent_dict)\n+        update_full_gene_dict_no_overwrite(full_gene_dict, gene_dict)\n \n     for json_arg in options.json:\n-        merge_dicts(json_arg)\n+        with open(json_arg) as f:\n+            update_full_gene_dict_no_overwrite(full_gene_dict, json.load(f))\n \n-    write_json(options.output, options.sort)\n+    write_json(full_gene_dict, options.output, options.sort)\n \n \n if __name__ == \'__main__\':\n'
b
diff -r be6cec883b02 -r befe6021e476 gff3_to_json.xml
--- a/gff3_to_json.xml Wed Dec 21 10:02:59 2016 -0500
+++ b/gff3_to_json.xml Tue Feb 28 12:06:04 2017 -0500
[
@@ -5,17 +5,17 @@
     </stdio>
     <command>
 <![CDATA[
-python $__tool_directory__/gff3_to_json.py
+python '$__tool_directory__/gff3_to_json.py'
 #for $q in $queries
-    --gff3 "${q.genome}:${q.gff3_input}"
+    --gff3 '${q.genome}:${q.gff3_input}'
 #end for
 #if str($json) != 'None'
     #for $v in $json
-        --json "$v"
+        --json '$v'
     #end for
 #end if
 $sort
-> "$output"
+-o '$output'
 ]]>
     </command>
 
b
diff -r be6cec883b02 -r befe6021e476 test-data/Caenorhabditis_elegans.WBcel235.33.chromosome.I_shortened.json
--- a/test-data/Caenorhabditis_elegans.WBcel235.33.chromosome.I_shortened.json Wed Dec 21 10:02:59 2016 -0500
+++ b/test-data/Caenorhabditis_elegans.WBcel235.33.chromosome.I_shortened.json Tue Feb 28 12:06:04 2017 -0500
[
b'@@ -1,343 +1,1 @@\n-{\n-   "gene:WBGene00022276": {\n-      "Name": "nlp-40", \n-      "Transcript": [\n-         {\n-            "Exon": [\n-               {\n-                  "Name": "Y74C9A.2a.2.e1", \n-                  "Parent": "transcript:Y74C9A.2a.2", \n-                  "constitutive": "0", \n-                  "end": 10585, \n-                  "ensembl_end_phase": "-1", \n-                  "ensembl_phase": "-1", \n-                  "exon_id": "Y74C9A.2a.2.e1", \n-                  "id": "Y74C9A.2a.2.e1", \n-                  "length": 173, \n-                  "object_type": "Exon", \n-                  "rank": "1", \n-                  "seq_region_name": "I", \n-                  "species": "caenorhabditiselegans", \n-                  "start": 10413, \n-                  "strand": 1\n-               }, \n-               {\n-                  "Name": "Y74C9A.2a.1.e1", \n-                  "Parent": "transcript:Y74C9A.2a.2", \n-                  "constitutive": "0", \n-                  "end": 11689, \n-                  "ensembl_end_phase": "1", \n-                  "ensembl_phase": "-1", \n-                  "exon_id": "Y74C9A.2a.1.e1", \n-                  "id": "Y74C9A.2a.1.e1", \n-                  "length": 72, \n-                  "object_type": "Exon", \n-                  "rank": "2", \n-                  "seq_region_name": "I", \n-                  "species": "caenorhabditiselegans", \n-                  "start": 11618, \n-                  "strand": 1\n-               }, \n-               {\n-                  "Name": "Y74C9A.2a.1.e2", \n-                  "Parent": "transcript:Y74C9A.2a.2", \n-                  "constitutive": "0", \n-                  "end": 15160, \n-                  "ensembl_end_phase": "1", \n-                  "ensembl_phase": "1", \n-                  "exon_id": "Y74C9A.2a.1.e2", \n-                  "id": "Y74C9A.2a.1.e2", \n-                  "length": 210, \n-                  "object_type": "Exon", \n-                  "rank": "3", \n-                  "seq_region_name": "I", \n-                  "species": "caenorhabditiselegans", \n-                  "start": 14951, \n-                  "strand": 1\n-               }, \n-               {\n-                  "Name": "Y74C9A.2a.1.e3", \n-                  "Parent": "transcript:Y74C9A.2a.2", \n-                  "constitutive": "0", \n-                  "end": 16842, \n-                  "ensembl_end_phase": "-1", \n-                  "ensembl_phase": "1", \n-                  "exon_id": "Y74C9A.2a.1.e3", \n-                  "id": "Y74C9A.2a.1.e3", \n-                  "length": 370, \n-                  "object_type": "Exon", \n-                  "rank": "4", \n-                  "seq_region_name": "I", \n-                  "species": "caenorhabditiselegans", \n-                  "start": 16473, \n-                  "strand": 1\n-               }\n-            ], \n-            "Name": "Y74C9A.2a.2", \n-            "Parent": "gene:WBGene00022276", \n-            "Translation": {\n-               "CDS": [\n-                  {\n-                     "Parent": "transcript:Y74C9A.2a.2", \n-                     "end": 11689, \n-                     "id": "CDS:Y74C9A.2a.2", \n-                     "protein_id": "Y74C9A.2a.2", \n-                     "start": 11641, \n-                     "strand": 1\n-                  }, \n-                  {\n-                     "Parent": "transcript:Y74C9A.2a.2", \n-                     "end": 15160, \n-                     "id": "CDS:Y74C9A.2a.2", \n-                     "protein_id": "Y74C9A.2a.2", \n-                     "start": 14951, \n-                     "strand": 1\n-                  }, \n-                  {\n-                     "Parent": "transcript:Y74C9A.2a.2", \n-                     "end": 16585, \n-                     "id": "CDS:Y74C9A.2a.2", \n-                     "protein_id": "Y74C9A.2a.2", \n-                     "start": 16473, \n-                     "strand": 1\n-                  }\n-               ], \n-               "end": 16585, \n-               "id": "C'..b'd": "WBGene00022276", "id": "WBGene00022276", "logic_name": "wormbase", "member_id": 0, "object_type": "Gene", "seq_region_name": "I", "species": "caenorhabditiselegans", "start": 10413, "strand": 1}, "WBGene00022278": {"Name": "rcor-1", "Transcript": [{"Exon": [{"Name": "Y74C9A.4a.e12", "Parent": "Y74C9A.4d", "constitutive": "1", "end": 17958, "ensembl_end_phase": "-1", "ensembl_phase": "0", "exon_id": "Y74C9A.4a.e12", "id": "Y74C9A.4a.e12", "length": 476, "object_type": "Exon", "rank": "7", "seq_region_name": "I", "species": "caenorhabditiselegans", "start": 17483, "strand": -1}, {"Name": "Y74C9A.4a.e11", "Parent": "Y74C9A.4d", "constitutive": "1", "end": 18115, "ensembl_end_phase": "0", "ensembl_phase": "1", "exon_id": "Y74C9A.4a.e11", "id": "Y74C9A.4a.e11", "length": 110, "object_type": "Exon", "rank": "6", "seq_region_name": "I", "species": "caenorhabditiselegans", "start": 18006, "strand": -1}, {"Name": "Y74C9A.4a.e10", "Parent": "Y74C9A.4d", "constitutive": "1", "end": 19241, "ensembl_end_phase": "1", "ensembl_phase": "2", "exon_id": "Y74C9A.4a.e10", "id": "Y74C9A.4a.e10", "length": 227, "object_type": "Exon", "rank": "5", "seq_region_name": "I", "species": "caenorhabditiselegans", "start": 19015, "strand": -1}, {"Name": "Y74C9A.4a.e9", "Parent": "Y74C9A.4d", "constitutive": "1", "end": 20478, "ensembl_end_phase": "2", "ensembl_phase": "1", "exon_id": "Y74C9A.4a.e9", "id": "Y74C9A.4a.e9", "length": 208, "object_type": "Exon", "rank": "4", "seq_region_name": "I", "species": "caenorhabditiselegans", "start": 20271, "strand": -1}, {"Name": "Y74C9A.4a.e8", "Parent": "Y74C9A.4d", "constitutive": "1", "end": 20964, "ensembl_end_phase": "1", "ensembl_phase": "1", "exon_id": "Y74C9A.4a.e8", "id": "Y74C9A.4a.e8", "length": 117, "object_type": "Exon", "rank": "3", "seq_region_name": "I", "species": "caenorhabditiselegans", "start": 20848, "strand": -1}, {"Name": "Y74C9A.4d.e2", "Parent": "Y74C9A.4d", "constitutive": "0", "end": 21136, "ensembl_end_phase": "1", "ensembl_phase": "-1", "exon_id": "Y74C9A.4d.e2", "id": "Y74C9A.4d.e2", "length": 124, "object_type": "Exon", "rank": "2", "seq_region_name": "I", "species": "caenorhabditiselegans", "start": 21013, "strand": -1}, {"Name": "Y74C9A.4d.e1", "Parent": "Y74C9A.4d", "constitutive": "0", "end": 24796, "ensembl_end_phase": "-1", "ensembl_phase": "-1", "exon_id": "Y74C9A.4d.e1", "id": "Y74C9A.4d.e1", "length": 146, "object_type": "Exon", "rank": "1", "seq_region_name": "I", "species": "caenorhabditiselegans", "start": 24651, "strand": -1}], "Name": "Y74C9A.4d", "Parent": "WBGene00022278", "Translation": {"CDS": [{"Parent": "Y74C9A.4d", "end": 17958, "id": "Y74C9A.4d", "protein_id": "Y74C9A.4d", "start": 17911, "strand": -1}, {"Parent": "Y74C9A.4d", "end": 18115, "id": "Y74C9A.4d", "protein_id": "Y74C9A.4d", "start": 18006, "strand": -1}, {"Parent": "Y74C9A.4d", "end": 19241, "id": "Y74C9A.4d", "protein_id": "Y74C9A.4d", "start": 19015, "strand": -1}, {"Parent": "Y74C9A.4d", "end": 20478, "id": "Y74C9A.4d", "protein_id": "Y74C9A.4d", "start": 20271, "strand": -1}, {"Parent": "Y74C9A.4d", "end": 20964, "id": "Y74C9A.4d", "protein_id": "Y74C9A.4d", "start": 20848, "strand": -1}, {"Parent": "Y74C9A.4d", "end": 21127, "id": "Y74C9A.4d", "protein_id": "Y74C9A.4d", "start": 21013, "strand": -1}], "end": 21127, "id": "Y74C9A.4d", "object_type": "Translation", "species": "caenorhabditiselegans", "start": 17911}, "biotype": "protein_coding", "end": 24796, "id": "Y74C9A.4d", "object_type": "Transcript", "seq_region_name": "I", "species": "caenorhabditiselegans", "start": 17483, "strand": -1, "transcript_id": "Y74C9A.4d"}], "biotype": "protein_coding", "description": "RCOR (REST CO-Repressor) homolog  [Source:RefSeq peptide%3BAcc:NP_001293207]", "end": 26781, "gene_id": "WBGene00022278", "id": "WBGene00022278", "logic_name": "wormbase", "member_id": 1, "object_type": "Gene", "seq_region_name": "I", "species": "caenorhabditiselegans", "start": 17483, "strand": -1}}\n\\ No newline at end of file\n'
b
diff -r be6cec883b02 -r befe6021e476 test-data/test.json
--- a/test-data/test.json Wed Dec 21 10:02:59 2016 -0500
+++ b/test-data/test.json Tue Feb 28 12:06:04 2017 -0500
[
b'@@ -1,2307 +1,1 @@\n-{\n-   "ENSCAFG00000024151": {\n-      "Name": "ENSCAFG00000024151", \n-      "Transcript": [\n-         {\n-            "Exon": [\n-               {\n-                  "Name": "ENSCAFE00000180286", \n-                  "Parent": "ENSCAFT00000026349", \n-                  "end": 41161537, \n-                  "id": "ENSCAFE00000180286", \n-                  "length": 141, \n-                  "object_type": "Exon", \n-                  "seq_region_name": "7", \n-                  "species": "canisfamiliaris", \n-                  "start": 41161397, \n-                  "strand": 1\n-               }, \n-               {\n-                  "Name": "ENSCAFE00000180288", \n-                  "Parent": "ENSCAFT00000026349", \n-                  "end": 41165078, \n-                  "id": "ENSCAFE00000180288", \n-                  "length": 552, \n-                  "object_type": "Exon", \n-                  "seq_region_name": "7", \n-                  "species": "canisfamiliaris", \n-                  "start": 41164527, \n-                  "strand": 1\n-               }, \n-               {\n-                  "Name": "ENSCAFE00000180303", \n-                  "Parent": "ENSCAFT00000026349", \n-                  "end": 41166852, \n-                  "id": "ENSCAFE00000180303", \n-                  "length": 304, \n-                  "object_type": "Exon", \n-                  "seq_region_name": "7", \n-                  "species": "canisfamiliaris", \n-                  "start": 41166549, \n-                  "strand": 1\n-               }, \n-               {\n-                  "Name": "ENSCAFE00000180319", \n-                  "Parent": "ENSCAFT00000026349", \n-                  "end": 41167087, \n-                  "id": "ENSCAFE00000180319", \n-                  "length": 143, \n-                  "object_type": "Exon", \n-                  "seq_region_name": "7", \n-                  "species": "canisfamiliaris", \n-                  "start": 41166945, \n-                  "strand": 1\n-               }, \n-               {\n-                  "Name": "ENSCAFE00000180337", \n-                  "Parent": "ENSCAFT00000026349", \n-                  "end": 41167452, \n-                  "id": "ENSCAFE00000180337", \n-                  "length": 145, \n-                  "object_type": "Exon", \n-                  "seq_region_name": "7", \n-                  "species": "canisfamiliaris", \n-                  "start": 41167308, \n-                  "strand": 1\n-               }, \n-               {\n-                  "Name": "ENSCAFE00000180353", \n-                  "Parent": "ENSCAFT00000026349", \n-                  "end": 41168494, \n-                  "id": "ENSCAFE00000180353", \n-                  "length": 215, \n-                  "object_type": "Exon", \n-                  "seq_region_name": "7", \n-                  "species": "canisfamiliaris", \n-                  "start": 41168280, \n-                  "strand": 1\n-               }, \n-               {\n-                  "Name": "ENSCAFE00000180364", \n-                  "Parent": "ENSCAFT00000026349", \n-                  "end": 41168862, \n-                  "id": "ENSCAFE00000180364", \n-                  "length": 127, \n-                  "object_type": "Exon", \n-                  "seq_region_name": "7", \n-                  "species": "canisfamiliaris", \n-                  "start": 41168736, \n-                  "strand": 1\n-               }, \n-               {\n-                  "Name": "ENSCAFE00000180374", \n-                  "Parent": "ENSCAFT00000026349", \n-                  "end": 41170462, \n-                  "id": "ENSCAFE00000180374", \n-                  "length": 239, \n-                  "object_type": "Exon", \n-                  "seq_region_name": "7", \n-                  "species": "canisfamiliaris", \n-                  "start": 41170224, \n-                  "strand": 1\n-               }, \n-               {\n-                  "Name": "ENSCAFE00000180385", \n-                  "Parent": "ENSCAFT00000026349"'..b': 135, "object_type": "Exon", "seq_region_name": "1", "species": "rattusnorvegicus", "start": 129198768, "strand": 1}, {"Name": "ENSRNOE00000137303", "Parent": "ENSRNOT00000019267", "end": 129206516, "id": "ENSRNOE00000137303", "length": 385, "object_type": "Exon", "seq_region_name": "1", "species": "rattusnorvegicus", "start": 129206132, "strand": 1}], "Name": "ENSRNOT00000019267", "Parent": "ENSRNOG00000014187", "Translation": {"CDS": [{"Name": "ENSRNOP00000019267", "Parent": "ENSRNOT00000019267", "end": 128925059, "id": "ENSRNOP00000019267", "start": 128924966, "strand": 1}, {"Name": "ENSRNOP00000019267", "Parent": "ENSRNOT00000019267", "end": 128978649, "id": "ENSRNOP00000019267", "start": 128978104, "strand": 1}, {"Name": "ENSRNOP00000019267", "Parent": "ENSRNOT00000019267", "end": 129142833, "id": "ENSRNOP00000019267", "start": 129142521, "strand": 1}, {"Name": "ENSRNOP00000019267", "Parent": "ENSRNOT00000019267", "end": 129147211, "id": "ENSRNOP00000019267", "start": 129147060, "strand": 1}, {"Name": "ENSRNOP00000019267", "Parent": "ENSRNOT00000019267", "end": 129149837, "id": "ENSRNOP00000019267", "start": 129149693, "strand": 1}, {"Name": "ENSRNOP00000019267", "Parent": "ENSRNOT00000019267", "end": 129159326, "id": "ENSRNOP00000019267", "start": 129159112, "strand": 1}, {"Name": "ENSRNOP00000019267", "Parent": "ENSRNOT00000019267", "end": 129161294, "id": "ENSRNOP00000019267", "start": 129161168, "strand": 1}, {"Name": "ENSRNOP00000019267", "Parent": "ENSRNOT00000019267", "end": 129162965, "id": "ENSRNOP00000019267", "start": 129162727, "strand": 1}, {"Name": "ENSRNOP00000019267", "Parent": "ENSRNOT00000019267", "end": 129167030, "id": "ENSRNOP00000019267", "start": 129166863, "strand": 1}, {"Name": "ENSRNOP00000019267", "Parent": "ENSRNOT00000019267", "end": 129167431, "id": "ENSRNOP00000019267", "start": 129167227, "strand": 1}, {"Name": "ENSRNOP00000019267", "Parent": "ENSRNOT00000019267", "end": 129172531, "id": "ENSRNOP00000019267", "start": 129172248, "strand": 1}, {"Name": "ENSRNOP00000019267", "Parent": "ENSRNOT00000019267", "end": 129174216, "id": "ENSRNOP00000019267", "start": 129174080, "strand": 1}, {"Name": "ENSRNOP00000019267", "Parent": "ENSRNOT00000019267", "end": 129174841, "id": "ENSRNOP00000019267", "start": 129174682, "strand": 1}, {"Name": "ENSRNOP00000019267", "Parent": "ENSRNOT00000019267", "end": 129180769, "id": "ENSRNOP00000019267", "start": 129180666, "strand": 1}, {"Name": "ENSRNOP00000019267", "Parent": "ENSRNOT00000019267", "end": 129180803, "id": "ENSRNOP00000019267", "start": 129180773, "strand": 1}, {"Name": "ENSRNOP00000019267", "Parent": "ENSRNOT00000019267", "end": 129187229, "id": "ENSRNOP00000019267", "start": 129186970, "strand": 1}, {"Name": "ENSRNOP00000019267", "Parent": "ENSRNOT00000019267", "end": 129187622, "id": "ENSRNOP00000019267", "start": 129187512, "strand": 1}, {"Name": "ENSRNOP00000019267", "Parent": "ENSRNOT00000019267", "end": 129192151, "id": "ENSRNOP00000019267", "start": 129191992, "strand": 1}, {"Name": "ENSRNOP00000019267", "Parent": "ENSRNOT00000019267", "end": 129195410, "id": "ENSRNOP00000019267", "start": 129195281, "strand": 1}, {"Name": "ENSRNOP00000019267", "Parent": "ENSRNOT00000019267", "end": 129198902, "id": "ENSRNOP00000019267", "start": 129198768, "strand": 1}, {"Name": "ENSRNOP00000019267", "Parent": "ENSRNOT00000019267", "end": 129206516, "id": "ENSRNOP00000019267", "start": 129206132, "strand": 1}], "end": 129206516, "id": "ENSRNOP00000019267", "object_type": "Translation", "species": "rattusnorvegicus", "start": 128924966}, "biotype": "protein_coding", "end": 129206516, "id": "ENSRNOT00000019267", "object_type": "Transcript", "seq_region_name": "1", "species": "rattusnorvegicus", "start": 128924966, "strand": 1}], "biotype": "protein_coding", "end": 129206516, "id": "ENSRNOG00000014187", "member_id": 0, "object_type": "Gene", "seq_region_name": "1", "species": "rattusnorvegicus", "start": 128924966, "strand": 1}}\n\\ No newline at end of file\n'