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' |