Mercurial > repos > iuc > tbl2gff3
comparison tbl2gff3.py @ 1:4a7f4b0cc0a3 draft default tip
"planemo upload for repository https://github.com/galaxyproject/tools-iuc/tree/master/tools/tbl2gff3 commit db75a8489a1f61ea30abe9b91f6febac8b34204f"
author | iuc |
---|---|
date | Thu, 03 Dec 2020 16:59:23 +0000 |
parents | 965674d88d34 |
children |
comparison
equal
deleted
inserted
replaced
0:965674d88d34 | 1:4a7f4b0cc0a3 |
---|---|
1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
2 import argparse | 2 import argparse |
3 import collections | |
3 import csv | 4 import csv |
4 import sys | 5 import sys |
5 | 6 |
6 from BCBio import GFF | 7 from BCBio import GFF |
7 from Bio.Seq import Seq | 8 from Bio.Seq import Seq |
30 score=None, | 31 score=None, |
31 frame=None, | 32 frame=None, |
32 a=None, | 33 a=None, |
33 strand_column=None, | 34 strand_column=None, |
34 strand_value=None, | 35 strand_value=None, |
36 strand_infer=False, | |
35 ): | 37 ): |
36 | 38 |
37 records = {} | 39 records = collections.OrderedDict() |
38 | 40 |
39 for row in csv.reader(table, delimiter="\t"): | 41 for row in csv.reader(table, delimiter="\t"): |
40 # print(', '.join(row)) | 42 # print(', '.join(row)) |
41 | 43 |
42 # if we haven't seen this record before, populate it. | 44 # if we haven't seen this record before, populate it. |
49 if c(row, score) is not None: | 51 if c(row, score) is not None: |
50 q["score"] = float(c(row, score)) | 52 q["score"] = float(c(row, score)) |
51 | 53 |
52 q["source"] = c(row, source, "tbl2gff3") | 54 q["source"] = c(row, source, "tbl2gff3") |
53 | 55 |
56 begin_i = int(c(row, begin)) | |
57 end_i = int(c(row, end)) | |
58 | |
59 begin_f = min(begin_i, end_i) | |
60 end_f = max(begin_i, end_i) | |
61 | |
54 _str = None | 62 _str = None |
55 if strand_column is not None: | 63 if strand_column is not None: |
56 _str = int(c(row, strand_column)) | 64 _str = int(c(row, strand_column)) |
57 elif strand_value is not None: | 65 elif strand_value is not None: |
58 _str = int(strand_value) | 66 _str = int(strand_value) |
67 if strand_infer: | |
68 if begin_i > begin_f: | |
69 _str = -1 | |
70 else: | |
71 _str = 1 | |
59 | 72 |
60 for x in a: | 73 if a is not None: |
61 k, v = x.split(":", 1) | 74 for x in a: |
62 _v = c(row, v) | 75 k, v = x.split(":", 1) |
63 if k in q: | 76 _v = c(row, v) |
64 q[k].append(_v) | 77 if k in q: |
65 else: | 78 q[k].append(_v) |
66 q[k] = [_v] | 79 else: |
80 q[k] = [_v] | |
67 | 81 |
68 f = SeqFeature( | 82 f = SeqFeature( |
69 FeatureLocation(int(c(row, begin)), int(c(row, end))), | 83 FeatureLocation(begin_f, end_f), |
70 type=c(row, type), | 84 type=c(row, type), |
71 strand=_str, | 85 strand=_str, |
72 qualifiers=q, | 86 qualifiers=q, |
73 ) | 87 ) |
74 r.features.append(f) | 88 r.features.append(f) |
83 parser.add_argument("begin", help="begin column") | 97 parser.add_argument("begin", help="begin column") |
84 parser.add_argument("end", help="end column") | 98 parser.add_argument("end", help="end column") |
85 parser.add_argument("--type", help="feature type column") | 99 parser.add_argument("--type", help="feature type column") |
86 parser.add_argument("--score", help="score column") | 100 parser.add_argument("--score", help="score column") |
87 parser.add_argument("--source", help="source column") | 101 parser.add_argument("--source", help="source column") |
102 parser.add_argument("--strand_infer", action='store_true', help="infer strand") | |
88 parser.add_argument("--strand_column", help="strand column") | 103 parser.add_argument("--strand_column", help="strand column") |
89 parser.add_argument("--strand_value", help="strand value") | 104 parser.add_argument("--strand_value", help="strand value") |
90 # parser.add_argument('--frame', help='frame column') | 105 # parser.add_argument('--frame', help='frame column') |
91 parser.add_argument("-a", action="append", help="attribute column (-a k:v)") | 106 parser.add_argument("-a", action="append", help="attribute column (-a k:v)") |
92 args = parser.parse_args() | 107 args = parser.parse_args() |