changeset 0:024ed7b0ad93 draft

planemo upload for repository https://github.com/galaxyproteomics/tools-galaxyp/tree/master/tools/bed_to_protein_map commit 2d39f681f77eedc840c17aebe4ddc8f66c8a7c62-dirty
author galaxyp
date Thu, 04 Jan 2018 16:29:38 -0500
parents
children a7c58b43cbaa
files bed_to_protein_map.py bed_to_protein_map.xml test-data/input.bed test-data/output.tabular
diffstat 4 files changed, 186 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bed_to_protein_map.py	Thu Jan 04 16:29:38 2018 -0500
@@ -0,0 +1,100 @@
+#!/usr/bin/env python
+"""
+#
+#------------------------------------------------------------------------------
+#                         University of Minnesota
+#         Copyright 2017, Regents of the University of Minnesota
+#------------------------------------------------------------------------------
+# Author:
+#
+#  James E Johnson
+#
+#------------------------------------------------------------------------------
+"""
+
+import argparse
+import sys
+
+
+def __main__():
+    parser = argparse.ArgumentParser(
+        description='Convert BED file to protein mapping')
+    parser.add_argument(
+        'input',
+        help='A BED file (12 column)')
+    parser.add_argument(
+        'output',
+        help='Output file  (-) for stdout')
+    parser.add_argument('-d', '--debug', action='store_true', help='Debug')
+    args = parser.parse_args()
+
+    input_rdr = open(args.input, 'r') if args.input != '-' else sys.stdin
+    output_wtr = open(args.output, 'w') if args.output != '-' else sys.stdout
+
+    try:
+        for linenum, line in enumerate(input_rdr):
+            if args.debug:
+                print >> sys.stderr, "%d: %s\n" % (linenum, line)
+            if line.startswith('#'):
+                continue
+            if line.strip() == '':
+                continue
+            fields = line.rstrip('\r\n').split('\t')
+            if len(fields) < 12:
+                print >> sys.stderr, "%d: %s\n" % (linenum, line)
+                continue
+            (chrom, _chromStart, _chromEnd, name, score, strand,
+             _thickStart, _thickEnd, itemRgb,
+             _blockCount, blockSizes, blockStarts) = fields[0:12]
+            chromStart = int(_chromStart)
+            thickStart = int(_thickStart)
+            thickEnd = int(_thickEnd)
+            blockCount = int(_blockCount)
+            blockSizes = [int(x) for x in blockSizes.split(',')]
+            blockStarts = [int(x) for x in blockStarts.split(',')]
+            if strand == '+':
+                cds_start = 0
+                cds_end = 0
+                for i in range(blockCount):
+                    start = chromStart + blockStarts[i]
+                    end = start + blockSizes[i]
+                    if end < thickStart:
+                        continue
+                    if start > thickEnd:
+                        break
+                    if start < thickStart:
+                        start = thickStart
+                    if end > thickEnd:
+                        end = thickEnd
+                    cds_end = cds_start + (end - start)
+                    output_wtr.write('%s\t%s\t%d\t%d\t%s\t%d\t%d\n'
+                                     % (name, chrom, start, end,
+                                        strand, cds_start, cds_end))
+                    cds_start = cds_end
+            elif strand == '-':
+                cds_start = 0
+                cds_end = 0
+                for i in reversed(range(blockCount)):
+                    start = chromStart + blockStarts[i]
+                    end = start + blockSizes[i]
+                    if end < thickStart:
+                        break
+                    if start > thickEnd:
+                        continue
+                    if start < thickStart:
+                        start = thickStart
+                    if end > thickEnd:
+                        end = thickEnd
+                    cds_end = cds_start + (end - start)
+                    output_wtr.write('%s\t%s\t%d\t%d\t%s\t%d\t%d\n'
+                                     % (name, chrom, start, end,
+                                        strand, cds_start, cds_end))
+                    cds_start = cds_end
+                pass
+    except Exception, e:
+        print >> sys.stderr, "failed: %s" % e
+        exit(1)
+
+
+if __name__ == "__main__":
+    __main__()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bed_to_protein_map.xml	Thu Jan 04 16:29:38 2018 -0500
@@ -0,0 +1,70 @@
+<tool id="bed_to_protein_map" name="bed to protein map" version="0.1.0">
+    <description>genomic location of proteins for MVP</description>
+    <requirements>
+    </requirements>
+    <stdio>
+        <exit_code range="1:" />
+    </stdio>
+    <command><![CDATA[
+        python '$__tool_directory__/bed_to_protein_map.py' '$input' '$output'
+    ]]></command>
+    <inputs>
+        <param name="input" type="data" format="bed" label="A BED file with 12 columns, thickStart and thickEnd define protein coding region"/>
+    </inputs>
+    <outputs>
+        <data name="output" format="tabular">
+            <actions>
+                <action name="column_names" type="metadata" default="name,chrom,start,end,strand,cds_start,cds_end"/>
+            </actions>
+        </data>
+    </outputs>
+    <tests>
+        <test>
+            <param name="input" ftype="bed" value="input.bed"/>
+            <output name="output" file="output.tabular"/>
+        </test>
+    </tests>
+    <help><![CDATA[
+Convert a BED format file of the proteins from a proteomics search database into a tabular format for the Multiomics Visualization Platform (MVP).
+
+Example input BED dataset::
+
+	X	276352	291629	ENST00000430923	20	+	284187	291629	80,80,80	5	42,148,137,129,131	0,7814,12380,14295,15146
+	X	304749	318819	ENST00000326153	20	-	305073	318787	80,80,80	10	448,153,149,209,159,68,131,71,138,381	0,2610,2982,6669,8016,9400,10140,10479,12164,13689
+
+
+Output::
+
+    name               chrom   start     end       strand  cds_start  cds_end
+    ENST00000430923    X       284187    284314    +          0        127
+    ENST00000430923    X       288732    288869    +        127        264
+    ENST00000430923    X       290647    290776    +        264        393
+    ENST00000430923    X       291498    291629    +        393        524
+    ENST00000326153    X       318438    318787    -          0        349
+    ENST00000326153    X       316913    317051    -        349        487
+    ENST00000326153    X       315228    315299    -        487        558
+    ENST00000326153    X       314889    315020    -        558        689
+    ENST00000326153    X       314149    314217    -        689        757
+    ENST00000326153    X       312765    312924    -        757        916
+    ENST00000326153    X       311418    311627    -        916       1125
+    ENST00000326153    X       307731    307880    -       1125       1274
+    ENST00000326153    X       307359    307512    -       1274       1427
+    ENST00000326153    X       305073    305197    -       1427       1551
+
+
+The tabular output can be converted to a sqlite database using the Query_Tabular_ tool.
+
+The sqlite table should be named:  feature_cds_map
+The names for the columns should be: name,chrom,start,end,strand,cds_start,cds_end
+
+This SQL query will return the genomic location for a peptide sequence in a protein (multiply the animo acid position by 3 for the cds location)::
+
+    SELECT distinct chrom, CASE WHEN strand = '+' THEN start + cds_offset - cds_start ELSE end - cds_offset - cds_start END as "pos"
+    FROM feature_cds_map
+    WHERE name = acc_name AND cds_offset >= cds_start AND cds_offset < cds_end
+
+
+.. _Query_Tabular: https://toolshed.g2.bx.psu.edu/view/iuc/query_tabular/1ea4e668bf73
+
+    ]]></help>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/input.bed	Thu Jan 04 16:29:38 2018 -0500
@@ -0,0 +1,2 @@
+X	276352	291629	ENST00000430923	20	+	284187	291629	80,80,80	5	42,148,137,129,131	0,7814,12380,14295,15146
+X	304749	318819	ENST00000326153	20	-	305073	318787	80,80,80	10	448,153,149,209,159,68,131,71,138,381	0,2610,2982,6669,8016,9400,10140,10479,12164,13689
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/output.tabular	Thu Jan 04 16:29:38 2018 -0500
@@ -0,0 +1,14 @@
+ENST00000430923	X	284187	284314	+	0	127
+ENST00000430923	X	288732	288869	+	127	264
+ENST00000430923	X	290647	290776	+	264	393
+ENST00000430923	X	291498	291629	+	393	524
+ENST00000326153	X	318438	318787	-	0	349
+ENST00000326153	X	316913	317051	-	349	487
+ENST00000326153	X	315228	315299	-	487	558
+ENST00000326153	X	314889	315020	-	558	689
+ENST00000326153	X	314149	314217	-	689	757
+ENST00000326153	X	312765	312924	-	757	916
+ENST00000326153	X	311418	311627	-	916	1125
+ENST00000326153	X	307731	307880	-	1125	1274
+ENST00000326153	X	307359	307512	-	1274	1427
+ENST00000326153	X	305073	305197	-	1427	1551