Mercurial > repos > devteam > get_flanks
annotate get_flanks.py @ 4:077f404ae1bb draft default tip
planemo upload for repository https://github.com/galaxyproject/tools-devteam/tree/master/tool_collections/gops/get_flanks commit cae3e05d02e60f595bb8b6d77a84f030e9bd1689
| author | devteam |
|---|---|
| date | Thu, 22 Jun 2017 18:41:29 -0400 |
| parents | 4cd116158aef |
| children |
| rev | line source |
|---|---|
| 0 | 1 #!/usr/bin/env python |
|
4
077f404ae1bb
planemo upload for repository https://github.com/galaxyproject/tools-devteam/tree/master/tool_collections/gops/get_flanks commit cae3e05d02e60f595bb8b6d77a84f030e9bd1689
devteam
parents:
3
diff
changeset
|
2 # Done by: Guru |
| 0 | 3 """ |
| 4 Get Flanking regions. | |
| 5 | |
| 6 usage: %prog input out_file size direction region | |
| 7 -l, --cols=N,N,N,N: Columns for chrom, start, end, strand in file | |
| 8 -o, --off=N: Offset | |
| 9 """ | |
|
4
077f404ae1bb
planemo upload for repository https://github.com/galaxyproject/tools-devteam/tree/master/tool_collections/gops/get_flanks commit cae3e05d02e60f595bb8b6d77a84f030e9bd1689
devteam
parents:
3
diff
changeset
|
10 from __future__ import print_function |
| 0 | 11 |
|
3
4cd116158aef
planemo upload for repository https://github.com/galaxyproject/tools-devteam/tree/master/tool_collections/gops/get_flanks commit a1517c9d22029095120643bbe2c8fa53754dd2b7
devteam
parents:
0
diff
changeset
|
12 import sys |
|
4
077f404ae1bb
planemo upload for repository https://github.com/galaxyproject/tools-devteam/tree/master/tool_collections/gops/get_flanks commit cae3e05d02e60f595bb8b6d77a84f030e9bd1689
devteam
parents:
3
diff
changeset
|
13 |
| 0 | 14 from bx.cookbook import doc_optparse |
|
3
4cd116158aef
planemo upload for repository https://github.com/galaxyproject/tools-devteam/tree/master/tool_collections/gops/get_flanks commit a1517c9d22029095120643bbe2c8fa53754dd2b7
devteam
parents:
0
diff
changeset
|
15 from galaxy.tools.util.galaxyops import parse_cols_arg |
|
4cd116158aef
planemo upload for repository https://github.com/galaxyproject/tools-devteam/tree/master/tool_collections/gops/get_flanks commit a1517c9d22029095120643bbe2c8fa53754dd2b7
devteam
parents:
0
diff
changeset
|
16 |
| 0 | 17 |
| 18 def stop_err( msg ): | |
| 19 sys.stderr.write( msg ) | |
| 20 sys.exit() | |
| 21 | |
|
3
4cd116158aef
planemo upload for repository https://github.com/galaxyproject/tools-devteam/tree/master/tool_collections/gops/get_flanks commit a1517c9d22029095120643bbe2c8fa53754dd2b7
devteam
parents:
0
diff
changeset
|
22 |
|
4cd116158aef
planemo upload for repository https://github.com/galaxyproject/tools-devteam/tree/master/tool_collections/gops/get_flanks commit a1517c9d22029095120643bbe2c8fa53754dd2b7
devteam
parents:
0
diff
changeset
|
23 def main(): |
| 0 | 24 try: |
| 25 if int( sys.argv[3] ) < 0: | |
| 26 raise Exception | |
| 27 except: | |
| 28 stop_err( "Length of flanking region(s) must be a non-negative integer." ) | |
| 29 | |
| 30 # Parsing Command Line here | |
| 31 options, args = doc_optparse.parse( __doc__ ) | |
| 32 try: | |
| 33 chr_col_1, start_col_1, end_col_1, strand_col_1 = parse_cols_arg( options.cols ) | |
| 34 inp_file, out_file, size, direction, region = args | |
| 35 if strand_col_1 <= 0: | |
|
3
4cd116158aef
planemo upload for repository https://github.com/galaxyproject/tools-devteam/tree/master/tool_collections/gops/get_flanks commit a1517c9d22029095120643bbe2c8fa53754dd2b7
devteam
parents:
0
diff
changeset
|
36 strand = "+" # if strand is not defined, default it to + |
| 0 | 37 except: |
| 38 stop_err( "Metadata issue, correct the metadata attributes by clicking on the pencil icon in the history item." ) | |
| 39 try: | |
| 40 offset = int(options.off) | |
| 41 size = int(size) | |
|
3
4cd116158aef
planemo upload for repository https://github.com/galaxyproject/tools-devteam/tree/master/tool_collections/gops/get_flanks commit a1517c9d22029095120643bbe2c8fa53754dd2b7
devteam
parents:
0
diff
changeset
|
42 except: |
| 0 | 43 stop_err( "Invalid offset or length entered. Try again by entering valid integer values." ) |
| 44 | |
|
3
4cd116158aef
planemo upload for repository https://github.com/galaxyproject/tools-devteam/tree/master/tool_collections/gops/get_flanks commit a1517c9d22029095120643bbe2c8fa53754dd2b7
devteam
parents:
0
diff
changeset
|
45 fo = open(out_file, 'w') |
|
4cd116158aef
planemo upload for repository https://github.com/galaxyproject/tools-devteam/tree/master/tool_collections/gops/get_flanks commit a1517c9d22029095120643bbe2c8fa53754dd2b7
devteam
parents:
0
diff
changeset
|
46 |
| 0 | 47 skipped_lines = 0 |
| 48 first_invalid_line = 0 | |
| 49 invalid_line = None | |
| 50 elems = [] | |
|
3
4cd116158aef
planemo upload for repository https://github.com/galaxyproject/tools-devteam/tree/master/tool_collections/gops/get_flanks commit a1517c9d22029095120643bbe2c8fa53754dd2b7
devteam
parents:
0
diff
changeset
|
51 j = 0 |
| 0 | 52 for i, line in enumerate( file( inp_file ) ): |
| 53 line = line.strip() | |
| 54 if line and (not line.startswith( '#' )) and line != '': | |
|
3
4cd116158aef
planemo upload for repository https://github.com/galaxyproject/tools-devteam/tree/master/tool_collections/gops/get_flanks commit a1517c9d22029095120643bbe2c8fa53754dd2b7
devteam
parents:
0
diff
changeset
|
55 j += 1 |
| 0 | 56 try: |
| 57 elems = line.split('\t') | |
|
4
077f404ae1bb
planemo upload for repository https://github.com/galaxyproject/tools-devteam/tree/master/tool_collections/gops/get_flanks commit cae3e05d02e60f595bb8b6d77a84f030e9bd1689
devteam
parents:
3
diff
changeset
|
58 # if the start and/or end columns are not numbers, skip that line. |
| 0 | 59 assert int(elems[start_col_1]) |
| 60 assert int(elems[end_col_1]) | |
| 61 if strand_col_1 != -1: | |
| 62 strand = elems[strand_col_1] | |
|
4
077f404ae1bb
planemo upload for repository https://github.com/galaxyproject/tools-devteam/tree/master/tool_collections/gops/get_flanks commit cae3e05d02e60f595bb8b6d77a84f030e9bd1689
devteam
parents:
3
diff
changeset
|
63 # if the stand value is not + or -, skip that line. |
| 0 | 64 assert strand in ['+', '-'] |
| 65 if direction == 'Upstream': | |
| 66 if strand == '+': | |
| 67 if region == 'end': | |
| 68 elems[end_col_1] = str(int(elems[end_col_1]) + offset) | |
| 69 elems[start_col_1] = str( int(elems[end_col_1]) - size ) | |
| 70 else: | |
| 71 elems[end_col_1] = str(int(elems[start_col_1]) + offset) | |
| 72 elems[start_col_1] = str( int(elems[end_col_1]) - size ) | |
| 73 elif strand == '-': | |
| 74 if region == 'end': | |
| 75 elems[start_col_1] = str(int(elems[start_col_1]) - offset) | |
| 76 elems[end_col_1] = str(int(elems[start_col_1]) + size) | |
| 77 else: | |
| 78 elems[start_col_1] = str(int(elems[end_col_1]) - offset) | |
| 79 elems[end_col_1] = str(int(elems[start_col_1]) + size) | |
| 80 assert int(elems[start_col_1]) > 0 and int(elems[end_col_1]) > 0 | |
| 81 fo.write( "%s\n" % '\t'.join( elems ) ) | |
|
3
4cd116158aef
planemo upload for repository https://github.com/galaxyproject/tools-devteam/tree/master/tool_collections/gops/get_flanks commit a1517c9d22029095120643bbe2c8fa53754dd2b7
devteam
parents:
0
diff
changeset
|
82 |
| 0 | 83 elif direction == 'Downstream': |
| 84 if strand == '-': | |
| 85 if region == 'start': | |
|
3
4cd116158aef
planemo upload for repository https://github.com/galaxyproject/tools-devteam/tree/master/tool_collections/gops/get_flanks commit a1517c9d22029095120643bbe2c8fa53754dd2b7
devteam
parents:
0
diff
changeset
|
86 elems[end_col_1] = str(int(elems[end_col_1]) - offset) |
|
4cd116158aef
planemo upload for repository https://github.com/galaxyproject/tools-devteam/tree/master/tool_collections/gops/get_flanks commit a1517c9d22029095120643bbe2c8fa53754dd2b7
devteam
parents:
0
diff
changeset
|
87 elems[start_col_1] = str( int(elems[end_col_1]) - size ) |
| 0 | 88 else: |
|
3
4cd116158aef
planemo upload for repository https://github.com/galaxyproject/tools-devteam/tree/master/tool_collections/gops/get_flanks commit a1517c9d22029095120643bbe2c8fa53754dd2b7
devteam
parents:
0
diff
changeset
|
89 elems[end_col_1] = str(int(elems[start_col_1]) - offset) |
|
4cd116158aef
planemo upload for repository https://github.com/galaxyproject/tools-devteam/tree/master/tool_collections/gops/get_flanks commit a1517c9d22029095120643bbe2c8fa53754dd2b7
devteam
parents:
0
diff
changeset
|
90 elems[start_col_1] = str( int(elems[end_col_1]) - size ) |
| 0 | 91 elif strand == '+': |
| 92 if region == 'start': | |
| 93 elems[start_col_1] = str(int(elems[start_col_1]) + offset) | |
| 94 elems[end_col_1] = str(int(elems[start_col_1]) + size) | |
| 95 else: | |
| 96 elems[start_col_1] = str(int(elems[end_col_1]) + offset) | |
| 97 elems[end_col_1] = str(int(elems[start_col_1]) + size) | |
| 98 assert int(elems[start_col_1]) > 0 and int(elems[end_col_1]) > 0 | |
| 99 fo.write( "%s\n" % '\t'.join( elems ) ) | |
|
3
4cd116158aef
planemo upload for repository https://github.com/galaxyproject/tools-devteam/tree/master/tool_collections/gops/get_flanks commit a1517c9d22029095120643bbe2c8fa53754dd2b7
devteam
parents:
0
diff
changeset
|
100 |
| 0 | 101 elif direction == 'Both': |
| 102 if strand == '-': | |
| 103 if region == 'start': | |
| 104 start = str(int(elems[end_col_1]) - offset) | |
| 105 end1 = str(int(start) + size) | |
| 106 end2 = str(int(start) - size) | |
|
3
4cd116158aef
planemo upload for repository https://github.com/galaxyproject/tools-devteam/tree/master/tool_collections/gops/get_flanks commit a1517c9d22029095120643bbe2c8fa53754dd2b7
devteam
parents:
0
diff
changeset
|
107 elems[start_col_1] = start |
|
4cd116158aef
planemo upload for repository https://github.com/galaxyproject/tools-devteam/tree/master/tool_collections/gops/get_flanks commit a1517c9d22029095120643bbe2c8fa53754dd2b7
devteam
parents:
0
diff
changeset
|
108 elems[end_col_1] = end1 |
| 0 | 109 assert int(elems[start_col_1]) > 0 and int(elems[end_col_1]) > 0 |
| 110 fo.write( "%s\n" % '\t'.join( elems ) ) | |
|
3
4cd116158aef
planemo upload for repository https://github.com/galaxyproject/tools-devteam/tree/master/tool_collections/gops/get_flanks commit a1517c9d22029095120643bbe2c8fa53754dd2b7
devteam
parents:
0
diff
changeset
|
111 elems[start_col_1] = end2 |
|
4cd116158aef
planemo upload for repository https://github.com/galaxyproject/tools-devteam/tree/master/tool_collections/gops/get_flanks commit a1517c9d22029095120643bbe2c8fa53754dd2b7
devteam
parents:
0
diff
changeset
|
112 elems[end_col_1] = start |
| 0 | 113 assert int(elems[start_col_1]) > 0 and int(elems[end_col_1]) > 0 |
| 114 fo.write( "%s\n" % '\t'.join( elems ) ) | |
| 115 elif region == 'end': | |
| 116 start = str(int(elems[start_col_1]) - offset) | |
| 117 end1 = str(int(start) + size) | |
| 118 end2 = str(int(start) - size) | |
|
3
4cd116158aef
planemo upload for repository https://github.com/galaxyproject/tools-devteam/tree/master/tool_collections/gops/get_flanks commit a1517c9d22029095120643bbe2c8fa53754dd2b7
devteam
parents:
0
diff
changeset
|
119 elems[start_col_1] = start |
|
4cd116158aef
planemo upload for repository https://github.com/galaxyproject/tools-devteam/tree/master/tool_collections/gops/get_flanks commit a1517c9d22029095120643bbe2c8fa53754dd2b7
devteam
parents:
0
diff
changeset
|
120 elems[end_col_1] = end1 |
| 0 | 121 assert int(elems[start_col_1]) > 0 and int(elems[end_col_1]) > 0 |
| 122 fo.write( "%s\n" % '\t'.join( elems ) ) | |
|
3
4cd116158aef
planemo upload for repository https://github.com/galaxyproject/tools-devteam/tree/master/tool_collections/gops/get_flanks commit a1517c9d22029095120643bbe2c8fa53754dd2b7
devteam
parents:
0
diff
changeset
|
123 elems[start_col_1] = end2 |
|
4cd116158aef
planemo upload for repository https://github.com/galaxyproject/tools-devteam/tree/master/tool_collections/gops/get_flanks commit a1517c9d22029095120643bbe2c8fa53754dd2b7
devteam
parents:
0
diff
changeset
|
124 elems[end_col_1] = start |
| 0 | 125 assert int(elems[start_col_1]) > 0 and int(elems[end_col_1]) > 0 |
| 126 fo.write( "%s\n" % '\t'.join( elems ) ) | |
| 127 else: | |
| 128 start1 = str(int(elems[end_col_1]) - offset) | |
| 129 end1 = str(int(start1) + size) | |
| 130 start2 = str(int(elems[start_col_1]) - offset) | |
| 131 end2 = str(int(start2) - size) | |
|
3
4cd116158aef
planemo upload for repository https://github.com/galaxyproject/tools-devteam/tree/master/tool_collections/gops/get_flanks commit a1517c9d22029095120643bbe2c8fa53754dd2b7
devteam
parents:
0
diff
changeset
|
132 elems[start_col_1] = start1 |
|
4cd116158aef
planemo upload for repository https://github.com/galaxyproject/tools-devteam/tree/master/tool_collections/gops/get_flanks commit a1517c9d22029095120643bbe2c8fa53754dd2b7
devteam
parents:
0
diff
changeset
|
133 elems[end_col_1] = end1 |
| 0 | 134 assert int(elems[start_col_1]) > 0 and int(elems[end_col_1]) > 0 |
| 135 fo.write( "%s\n" % '\t'.join( elems ) ) | |
|
3
4cd116158aef
planemo upload for repository https://github.com/galaxyproject/tools-devteam/tree/master/tool_collections/gops/get_flanks commit a1517c9d22029095120643bbe2c8fa53754dd2b7
devteam
parents:
0
diff
changeset
|
136 elems[start_col_1] = end2 |
|
4cd116158aef
planemo upload for repository https://github.com/galaxyproject/tools-devteam/tree/master/tool_collections/gops/get_flanks commit a1517c9d22029095120643bbe2c8fa53754dd2b7
devteam
parents:
0
diff
changeset
|
137 elems[end_col_1] = start2 |
| 0 | 138 assert int(elems[start_col_1]) > 0 and int(elems[end_col_1]) > 0 |
| 139 fo.write( "%s\n" % '\t'.join( elems ) ) | |
| 140 elif strand == '+': | |
| 141 if region == 'start': | |
| 142 start = str(int(elems[start_col_1]) + offset) | |
| 143 end1 = str(int(start) - size) | |
| 144 end2 = str(int(start) + size) | |
|
3
4cd116158aef
planemo upload for repository https://github.com/galaxyproject/tools-devteam/tree/master/tool_collections/gops/get_flanks commit a1517c9d22029095120643bbe2c8fa53754dd2b7
devteam
parents:
0
diff
changeset
|
145 elems[start_col_1] = end1 |
|
4cd116158aef
planemo upload for repository https://github.com/galaxyproject/tools-devteam/tree/master/tool_collections/gops/get_flanks commit a1517c9d22029095120643bbe2c8fa53754dd2b7
devteam
parents:
0
diff
changeset
|
146 elems[end_col_1] = start |
| 0 | 147 assert int(elems[start_col_1]) > 0 and int(elems[end_col_1]) > 0 |
| 148 fo.write( "%s\n" % '\t'.join( elems ) ) | |
|
3
4cd116158aef
planemo upload for repository https://github.com/galaxyproject/tools-devteam/tree/master/tool_collections/gops/get_flanks commit a1517c9d22029095120643bbe2c8fa53754dd2b7
devteam
parents:
0
diff
changeset
|
149 elems[start_col_1] = start |
|
4cd116158aef
planemo upload for repository https://github.com/galaxyproject/tools-devteam/tree/master/tool_collections/gops/get_flanks commit a1517c9d22029095120643bbe2c8fa53754dd2b7
devteam
parents:
0
diff
changeset
|
150 elems[end_col_1] = end2 |
| 0 | 151 assert int(elems[start_col_1]) > 0 and int(elems[end_col_1]) > 0 |
| 152 fo.write( "%s\n" % '\t'.join( elems ) ) | |
| 153 elif region == 'end': | |
| 154 start = str(int(elems[end_col_1]) + offset) | |
| 155 end1 = str(int(start) - size) | |
| 156 end2 = str(int(start) + size) | |
|
3
4cd116158aef
planemo upload for repository https://github.com/galaxyproject/tools-devteam/tree/master/tool_collections/gops/get_flanks commit a1517c9d22029095120643bbe2c8fa53754dd2b7
devteam
parents:
0
diff
changeset
|
157 elems[start_col_1] = end1 |
|
4cd116158aef
planemo upload for repository https://github.com/galaxyproject/tools-devteam/tree/master/tool_collections/gops/get_flanks commit a1517c9d22029095120643bbe2c8fa53754dd2b7
devteam
parents:
0
diff
changeset
|
158 elems[end_col_1] = start |
| 0 | 159 assert int(elems[start_col_1]) > 0 and int(elems[end_col_1]) > 0 |
| 160 fo.write( "%s\n" % '\t'.join( elems ) ) | |
|
3
4cd116158aef
planemo upload for repository https://github.com/galaxyproject/tools-devteam/tree/master/tool_collections/gops/get_flanks commit a1517c9d22029095120643bbe2c8fa53754dd2b7
devteam
parents:
0
diff
changeset
|
161 elems[start_col_1] = start |
|
4cd116158aef
planemo upload for repository https://github.com/galaxyproject/tools-devteam/tree/master/tool_collections/gops/get_flanks commit a1517c9d22029095120643bbe2c8fa53754dd2b7
devteam
parents:
0
diff
changeset
|
162 elems[end_col_1] = end2 |
| 0 | 163 assert int(elems[start_col_1]) > 0 and int(elems[end_col_1]) > 0 |
| 164 fo.write( "%s\n" % '\t'.join( elems ) ) | |
| 165 else: | |
| 166 start1 = str(int(elems[start_col_1]) + offset) | |
| 167 end1 = str(int(start1) - size) | |
| 168 start2 = str(int(elems[end_col_1]) + offset) | |
| 169 end2 = str(int(start2) + size) | |
|
3
4cd116158aef
planemo upload for repository https://github.com/galaxyproject/tools-devteam/tree/master/tool_collections/gops/get_flanks commit a1517c9d22029095120643bbe2c8fa53754dd2b7
devteam
parents:
0
diff
changeset
|
170 elems[start_col_1] = end1 |
|
4cd116158aef
planemo upload for repository https://github.com/galaxyproject/tools-devteam/tree/master/tool_collections/gops/get_flanks commit a1517c9d22029095120643bbe2c8fa53754dd2b7
devteam
parents:
0
diff
changeset
|
171 elems[end_col_1] = start1 |
| 0 | 172 assert int(elems[start_col_1]) > 0 and int(elems[end_col_1]) > 0 |
| 173 fo.write( "%s\n" % '\t'.join( elems ) ) | |
|
3
4cd116158aef
planemo upload for repository https://github.com/galaxyproject/tools-devteam/tree/master/tool_collections/gops/get_flanks commit a1517c9d22029095120643bbe2c8fa53754dd2b7
devteam
parents:
0
diff
changeset
|
174 elems[start_col_1] = start2 |
|
4cd116158aef
planemo upload for repository https://github.com/galaxyproject/tools-devteam/tree/master/tool_collections/gops/get_flanks commit a1517c9d22029095120643bbe2c8fa53754dd2b7
devteam
parents:
0
diff
changeset
|
175 elems[end_col_1] = end2 |
| 0 | 176 assert int(elems[start_col_1]) > 0 and int(elems[end_col_1]) > 0 |
| 177 fo.write( "%s\n" % '\t'.join( elems ) ) | |
| 178 except: | |
| 179 skipped_lines += 1 | |
| 180 if not invalid_line: | |
| 181 first_invalid_line = i + 1 | |
| 182 invalid_line = line | |
| 183 fo.close() | |
| 184 | |
| 185 if skipped_lines == j: | |
| 186 stop_err( "Data issue: click the pencil icon in the history item to correct the metadata attributes." ) | |
| 187 if skipped_lines > 0: | |
|
4
077f404ae1bb
planemo upload for repository https://github.com/galaxyproject/tools-devteam/tree/master/tool_collections/gops/get_flanks commit cae3e05d02e60f595bb8b6d77a84f030e9bd1689
devteam
parents:
3
diff
changeset
|
188 print('Skipped %d invalid lines starting with #%dL "%s"' % ( skipped_lines, first_invalid_line, invalid_line )) |
|
077f404ae1bb
planemo upload for repository https://github.com/galaxyproject/tools-devteam/tree/master/tool_collections/gops/get_flanks commit cae3e05d02e60f595bb8b6d77a84f030e9bd1689
devteam
parents:
3
diff
changeset
|
189 print('Location: %s, Region: %s, Flank-length: %d, Offset: %d ' % ( direction, region, size, offset )) |
|
077f404ae1bb
planemo upload for repository https://github.com/galaxyproject/tools-devteam/tree/master/tool_collections/gops/get_flanks commit cae3e05d02e60f595bb8b6d77a84f030e9bd1689
devteam
parents:
3
diff
changeset
|
190 |
|
3
4cd116158aef
planemo upload for repository https://github.com/galaxyproject/tools-devteam/tree/master/tool_collections/gops/get_flanks commit a1517c9d22029095120643bbe2c8fa53754dd2b7
devteam
parents:
0
diff
changeset
|
191 |
| 0 | 192 if __name__ == "__main__": |
| 193 main() |
