Mercurial > repos > devteam > get_flanks
annotate get_flanks.py @ 5:dd9315a56c09 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:39:52 -0400 |
parents | 2fdec558c935 |
children |
rev | line source |
---|---|
0 | 1 #!/usr/bin/env python |
5
dd9315a56c09
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 """ | |
5
dd9315a56c09
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
2fdec558c935
planemo upload commit 33927a87ba2eee9bf0ecdd376a66241b17b3d734
devteam
parents:
0
diff
changeset
|
12 import sys |
5
dd9315a56c09
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
2fdec558c935
planemo upload commit 33927a87ba2eee9bf0ecdd376a66241b17b3d734
devteam
parents:
0
diff
changeset
|
15 from galaxy.tools.util.galaxyops import parse_cols_arg |
2fdec558c935
planemo upload commit 33927a87ba2eee9bf0ecdd376a66241b17b3d734
devteam
parents:
0
diff
changeset
|
16 |
0 | 17 |
18 def stop_err( msg ): | |
19 sys.stderr.write( msg ) | |
20 sys.exit() | |
21 | |
3
2fdec558c935
planemo upload commit 33927a87ba2eee9bf0ecdd376a66241b17b3d734
devteam
parents:
0
diff
changeset
|
22 |
2fdec558c935
planemo upload commit 33927a87ba2eee9bf0ecdd376a66241b17b3d734
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
2fdec558c935
planemo upload commit 33927a87ba2eee9bf0ecdd376a66241b17b3d734
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
2fdec558c935
planemo upload commit 33927a87ba2eee9bf0ecdd376a66241b17b3d734
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
2fdec558c935
planemo upload commit 33927a87ba2eee9bf0ecdd376a66241b17b3d734
devteam
parents:
0
diff
changeset
|
45 fo = open(out_file, 'w') |
2fdec558c935
planemo upload commit 33927a87ba2eee9bf0ecdd376a66241b17b3d734
devteam
parents:
0
diff
changeset
|
46 |
0 | 47 skipped_lines = 0 |
48 first_invalid_line = 0 | |
49 invalid_line = None | |
50 elems = [] | |
3
2fdec558c935
planemo upload commit 33927a87ba2eee9bf0ecdd376a66241b17b3d734
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
2fdec558c935
planemo upload commit 33927a87ba2eee9bf0ecdd376a66241b17b3d734
devteam
parents:
0
diff
changeset
|
55 j += 1 |
0 | 56 try: |
57 elems = line.split('\t') | |
5
dd9315a56c09
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] | |
5
dd9315a56c09
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
2fdec558c935
planemo upload commit 33927a87ba2eee9bf0ecdd376a66241b17b3d734
devteam
parents:
0
diff
changeset
|
82 |
0 | 83 elif direction == 'Downstream': |
84 if strand == '-': | |
85 if region == 'start': | |
3
2fdec558c935
planemo upload commit 33927a87ba2eee9bf0ecdd376a66241b17b3d734
devteam
parents:
0
diff
changeset
|
86 elems[end_col_1] = str(int(elems[end_col_1]) - offset) |
2fdec558c935
planemo upload commit 33927a87ba2eee9bf0ecdd376a66241b17b3d734
devteam
parents:
0
diff
changeset
|
87 elems[start_col_1] = str( int(elems[end_col_1]) - size ) |
0 | 88 else: |
3
2fdec558c935
planemo upload commit 33927a87ba2eee9bf0ecdd376a66241b17b3d734
devteam
parents:
0
diff
changeset
|
89 elems[end_col_1] = str(int(elems[start_col_1]) - offset) |
2fdec558c935
planemo upload commit 33927a87ba2eee9bf0ecdd376a66241b17b3d734
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
2fdec558c935
planemo upload commit 33927a87ba2eee9bf0ecdd376a66241b17b3d734
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
2fdec558c935
planemo upload commit 33927a87ba2eee9bf0ecdd376a66241b17b3d734
devteam
parents:
0
diff
changeset
|
107 elems[start_col_1] = start |
2fdec558c935
planemo upload commit 33927a87ba2eee9bf0ecdd376a66241b17b3d734
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
2fdec558c935
planemo upload commit 33927a87ba2eee9bf0ecdd376a66241b17b3d734
devteam
parents:
0
diff
changeset
|
111 elems[start_col_1] = end2 |
2fdec558c935
planemo upload commit 33927a87ba2eee9bf0ecdd376a66241b17b3d734
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
2fdec558c935
planemo upload commit 33927a87ba2eee9bf0ecdd376a66241b17b3d734
devteam
parents:
0
diff
changeset
|
119 elems[start_col_1] = start |
2fdec558c935
planemo upload commit 33927a87ba2eee9bf0ecdd376a66241b17b3d734
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
2fdec558c935
planemo upload commit 33927a87ba2eee9bf0ecdd376a66241b17b3d734
devteam
parents:
0
diff
changeset
|
123 elems[start_col_1] = end2 |
2fdec558c935
planemo upload commit 33927a87ba2eee9bf0ecdd376a66241b17b3d734
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
2fdec558c935
planemo upload commit 33927a87ba2eee9bf0ecdd376a66241b17b3d734
devteam
parents:
0
diff
changeset
|
132 elems[start_col_1] = start1 |
2fdec558c935
planemo upload commit 33927a87ba2eee9bf0ecdd376a66241b17b3d734
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
2fdec558c935
planemo upload commit 33927a87ba2eee9bf0ecdd376a66241b17b3d734
devteam
parents:
0
diff
changeset
|
136 elems[start_col_1] = end2 |
2fdec558c935
planemo upload commit 33927a87ba2eee9bf0ecdd376a66241b17b3d734
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
2fdec558c935
planemo upload commit 33927a87ba2eee9bf0ecdd376a66241b17b3d734
devteam
parents:
0
diff
changeset
|
145 elems[start_col_1] = end1 |
2fdec558c935
planemo upload commit 33927a87ba2eee9bf0ecdd376a66241b17b3d734
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
2fdec558c935
planemo upload commit 33927a87ba2eee9bf0ecdd376a66241b17b3d734
devteam
parents:
0
diff
changeset
|
149 elems[start_col_1] = start |
2fdec558c935
planemo upload commit 33927a87ba2eee9bf0ecdd376a66241b17b3d734
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
2fdec558c935
planemo upload commit 33927a87ba2eee9bf0ecdd376a66241b17b3d734
devteam
parents:
0
diff
changeset
|
157 elems[start_col_1] = end1 |
2fdec558c935
planemo upload commit 33927a87ba2eee9bf0ecdd376a66241b17b3d734
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
2fdec558c935
planemo upload commit 33927a87ba2eee9bf0ecdd376a66241b17b3d734
devteam
parents:
0
diff
changeset
|
161 elems[start_col_1] = start |
2fdec558c935
planemo upload commit 33927a87ba2eee9bf0ecdd376a66241b17b3d734
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
2fdec558c935
planemo upload commit 33927a87ba2eee9bf0ecdd376a66241b17b3d734
devteam
parents:
0
diff
changeset
|
170 elems[start_col_1] = end1 |
2fdec558c935
planemo upload commit 33927a87ba2eee9bf0ecdd376a66241b17b3d734
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
2fdec558c935
planemo upload commit 33927a87ba2eee9bf0ecdd376a66241b17b3d734
devteam
parents:
0
diff
changeset
|
174 elems[start_col_1] = start2 |
2fdec558c935
planemo upload commit 33927a87ba2eee9bf0ecdd376a66241b17b3d734
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: | |
5
dd9315a56c09
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 )) |
dd9315a56c09
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 )) |
dd9315a56c09
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
2fdec558c935
planemo upload commit 33927a87ba2eee9bf0ecdd376a66241b17b3d734
devteam
parents:
0
diff
changeset
|
191 |
0 | 192 if __name__ == "__main__": |
193 main() |