REDItools3 3.1a0__py3-none-any.whl → 3.3__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of REDItools3 might be problematic. Click here for more details.
- reditools/analyze.py +45 -60
- reditools/file_utils.py +21 -42
- reditools/homopolymerics.py +6 -1
- reditools/index.py +7 -2
- reditools/reditools.py +14 -1
- reditools/rtchecks.py +28 -3
- {REDItools3-3.1a0.dist-info → reditools3-3.3.dist-info}/METADATA +6 -6
- reditools3-3.3.dist-info/RECORD +21 -0
- {REDItools3-3.1a0.dist-info → reditools3-3.3.dist-info}/WHEEL +1 -1
- REDItools3-3.1a0.dist-info/RECORD +0 -21
- {REDItools3-3.1a0.dist-info → reditools3-3.3.dist-info}/LICENSE +0 -0
- {REDItools3-3.1a0.dist-info → reditools3-3.3.dist-info}/top_level.txt +0 -0
reditools/analyze.py
CHANGED
|
@@ -79,25 +79,18 @@ def setup_rtools(options): # noqa:WPS213,WPS231
|
|
|
79
79
|
rtools.log_level = Logger.info_level
|
|
80
80
|
|
|
81
81
|
if options.load_omopolymeric_file:
|
|
82
|
-
regions = file_utils.
|
|
83
|
-
options.load_omopolymeric_file,
|
|
84
|
-
)
|
|
82
|
+
regions = file_utils.read_bed_file(options.load_omopolymeric_file)
|
|
85
83
|
rtools.exclude(regions)
|
|
86
84
|
|
|
87
|
-
if options.create_omopolymeric_file:
|
|
88
|
-
rtools.create_omopolymeric_positions(
|
|
89
|
-
options.create_omopolymeric_file,
|
|
90
|
-
options.omopolymeric_span,
|
|
91
|
-
)
|
|
92
|
-
|
|
93
85
|
if options.splicing_file:
|
|
94
|
-
rtools.load_splicing_file(
|
|
86
|
+
rtools.splice_positions = file_utils.load_splicing_file(
|
|
95
87
|
options.splicing_file,
|
|
96
88
|
options.splicing_span,
|
|
97
89
|
)
|
|
98
90
|
|
|
99
91
|
if options.bed_file:
|
|
100
|
-
|
|
92
|
+
regions = file_utils.read_bed_file(options.bed_file)
|
|
93
|
+
rtools.target_positions = regions
|
|
101
94
|
if options.exclude_regions:
|
|
102
95
|
for fname in options.exclude_regions:
|
|
103
96
|
regions = file_utils.read_bed_file(fname)
|
|
@@ -109,10 +102,11 @@ def setup_rtools(options): # noqa:WPS213,WPS231
|
|
|
109
102
|
rtools.max_base_position = options.max_base_position
|
|
110
103
|
rtools.min_base_quality = options.min_base_quality
|
|
111
104
|
|
|
112
|
-
rtools.min_column_length = options.
|
|
105
|
+
rtools.min_column_length = options.min_read_depth
|
|
113
106
|
rtools.min_edits = options.min_edits
|
|
114
107
|
rtools.min_edits_per_nucleotide = options.min_edits_per_nucleotide
|
|
115
108
|
rtools.strand = options.strand
|
|
109
|
+
rtools.max_alts = options.max_editing_nucleotides
|
|
116
110
|
|
|
117
111
|
rtools.strand_confidence_threshold = options.strand_confidence_threshold
|
|
118
112
|
|
|
@@ -215,7 +209,7 @@ def run(options, in_queue, out_queue):
|
|
|
215
209
|
except Exception as exc:
|
|
216
210
|
if options.debug:
|
|
217
211
|
traceback.print_exception(*sys.exc_info())
|
|
218
|
-
sys.stderr.write(f'[ERROR] {exc}\n')
|
|
212
|
+
sys.stderr.write(f'[ERROR] ({type(exc)}) {exc}\n')
|
|
219
213
|
|
|
220
214
|
|
|
221
215
|
def parse_options(): # noqa:WPS213
|
|
@@ -225,21 +219,26 @@ def parse_options(): # noqa:WPS213
|
|
|
225
219
|
Returns:
|
|
226
220
|
namespace: commandline args
|
|
227
221
|
"""
|
|
228
|
-
parser = argparse.ArgumentParser(
|
|
222
|
+
parser = argparse.ArgumentParser(
|
|
223
|
+
prog="reditools analyze",
|
|
224
|
+
description='REDItools3',
|
|
225
|
+
formatter_class=argparse.ArgumentDefaultsHelpFormatter,
|
|
226
|
+
)
|
|
229
227
|
parser.add_argument(
|
|
230
228
|
'file',
|
|
231
229
|
nargs='+',
|
|
232
|
-
help='The bam file to be analyzed',
|
|
230
|
+
help='The bam file(s) to be analyzed.',
|
|
233
231
|
)
|
|
234
232
|
parser.add_argument(
|
|
235
233
|
'-r',
|
|
236
234
|
'--reference',
|
|
237
|
-
help='
|
|
235
|
+
help='Reference FASTA file.',
|
|
238
236
|
)
|
|
239
237
|
parser.add_argument(
|
|
240
238
|
'-o',
|
|
241
239
|
'--output-file',
|
|
242
|
-
help='
|
|
240
|
+
help='Path to write output to.',
|
|
241
|
+
default='/dev/stdout',
|
|
243
242
|
)
|
|
244
243
|
parser.add_argument(
|
|
245
244
|
'-s',
|
|
@@ -248,96 +247,85 @@ def parse_options(): # noqa:WPS213
|
|
|
248
247
|
type=int,
|
|
249
248
|
default=0,
|
|
250
249
|
help='Strand: this can be 0 (unstranded),' +
|
|
251
|
-
'1 (
|
|
252
|
-
'2 (
|
|
250
|
+
'1 (second strand oriented) or ' +
|
|
251
|
+
'2 (first strand oriented).',
|
|
253
252
|
)
|
|
254
253
|
parser.add_argument(
|
|
255
254
|
'-a',
|
|
256
255
|
'--append-file',
|
|
257
256
|
action='store_true',
|
|
258
|
-
help='Appends results to file (and creates if not existing)',
|
|
257
|
+
help='Appends results to file (and creates if not existing).',
|
|
259
258
|
)
|
|
260
259
|
parser.add_argument(
|
|
261
260
|
'-g',
|
|
262
261
|
'--region',
|
|
263
|
-
help='
|
|
262
|
+
help='Only analyzes the specified region.',
|
|
264
263
|
)
|
|
265
264
|
parser.add_argument(
|
|
266
265
|
'-m',
|
|
267
266
|
'--load-omopolymeric-file',
|
|
268
|
-
help='
|
|
269
|
-
)
|
|
270
|
-
parser.add_argument(
|
|
271
|
-
'-c',
|
|
272
|
-
'--create-omopolymeric-file',
|
|
273
|
-
default=False,
|
|
274
|
-
help='Path to write omopolymeric positions to',
|
|
275
|
-
action='store_true',
|
|
267
|
+
help='BED file of omopolymeric positions.',
|
|
276
268
|
)
|
|
277
269
|
parser.add_argument(
|
|
278
270
|
'-os',
|
|
279
271
|
'--omopolymeric-span',
|
|
280
272
|
type=int,
|
|
281
273
|
default=5,
|
|
282
|
-
help='The omopolymeric span',
|
|
274
|
+
help='The omopolymeric span.',
|
|
283
275
|
)
|
|
284
276
|
parser.add_argument(
|
|
285
277
|
'-sf',
|
|
286
278
|
'--splicing-file',
|
|
287
|
-
help='The file containing
|
|
279
|
+
help='The file containing splicing site positions.',
|
|
288
280
|
)
|
|
289
281
|
parser.add_argument(
|
|
290
282
|
'-ss',
|
|
291
283
|
'--splicing-span',
|
|
292
284
|
type=int,
|
|
293
285
|
default=4,
|
|
294
|
-
help='The splicing span',
|
|
286
|
+
help='The splicing span.',
|
|
295
287
|
)
|
|
296
288
|
parser.add_argument(
|
|
297
289
|
'-mrl',
|
|
298
290
|
'--min-read-length',
|
|
299
291
|
type=int,
|
|
300
292
|
default=30, # noqa:WPS432
|
|
301
|
-
help='Reads
|
|
293
|
+
help='Reads with length below -mrl will be discarded.',
|
|
302
294
|
)
|
|
303
295
|
parser.add_argument(
|
|
304
296
|
'-q',
|
|
305
297
|
'--min-read-quality',
|
|
306
298
|
type=int,
|
|
307
299
|
default=20, # noqa:WPS432
|
|
308
|
-
help='Reads with mapping quality below
|
|
300
|
+
help='Reads with mapping quality below -q will be discarded.',
|
|
309
301
|
)
|
|
310
302
|
parser.add_argument(
|
|
311
303
|
'-bq',
|
|
312
304
|
'--min-base-quality',
|
|
313
305
|
type=int,
|
|
314
306
|
default=30, # noqa:WPS432
|
|
315
|
-
help='Base quality below
|
|
316
|
-
'the analysis.',
|
|
307
|
+
help='Base quality below -bq will bed discarded.',
|
|
317
308
|
)
|
|
318
309
|
parser.add_argument(
|
|
319
310
|
'-mbp',
|
|
320
311
|
'--min-base-position',
|
|
321
312
|
type=int,
|
|
322
313
|
default=0,
|
|
323
|
-
help='
|
|
324
|
-
'will not be included in the analysis.',
|
|
314
|
+
help='Ignores the first -mbp bases in each read.',
|
|
325
315
|
)
|
|
326
316
|
parser.add_argument(
|
|
327
317
|
'-Mbp',
|
|
328
318
|
'--max-base-position',
|
|
329
319
|
type=int,
|
|
330
320
|
default=0,
|
|
331
|
-
help='
|
|
332
|
-
'will not be included in the analysis.',
|
|
321
|
+
help='Ignores the last -Mpb bases in each read.',
|
|
333
322
|
)
|
|
334
323
|
parser.add_argument(
|
|
335
324
|
'-l',
|
|
336
|
-
'--min-
|
|
325
|
+
'--min-read-depth',
|
|
337
326
|
type=int,
|
|
338
327
|
default=1,
|
|
339
|
-
help='
|
|
340
|
-
'not be included in the analysis.',
|
|
328
|
+
help='Only report on positions with at least -l read depth',
|
|
341
329
|
)
|
|
342
330
|
parser.add_argument(
|
|
343
331
|
'-e',
|
|
@@ -351,8 +339,7 @@ def parse_options(): # noqa:WPS213
|
|
|
351
339
|
'--min-edits-per-nucleotide',
|
|
352
340
|
type=int,
|
|
353
341
|
default=0,
|
|
354
|
-
help='Positions
|
|
355
|
-
'min-edits-per-base edits will not be included in the analysis.',
|
|
342
|
+
help='Positions with fewer than -men edits will not be discarded.',
|
|
356
343
|
)
|
|
357
344
|
parser.add_argument(
|
|
358
345
|
'-me',
|
|
@@ -360,16 +347,14 @@ def parse_options(): # noqa:WPS213
|
|
|
360
347
|
type=int,
|
|
361
348
|
default=0, # noqa:WPS432
|
|
362
349
|
help='The minimum number of editing events (per position). ' +
|
|
363
|
-
'Positions
|
|
364
|
-
'"min-edits-per-base edits" will not be included in the ' +
|
|
365
|
-
'analysis.',
|
|
350
|
+
'Positions with fewer than -me edits will be discarded.',
|
|
366
351
|
)
|
|
367
352
|
parser.add_argument(
|
|
368
353
|
'-Men',
|
|
369
354
|
'--max-editing-nucleotides',
|
|
370
355
|
type=int,
|
|
371
|
-
default=
|
|
372
|
-
help='The maximum number of editing nucleotides, from 0 to
|
|
356
|
+
default=4, # noqa:WPS432
|
|
357
|
+
help='The maximum number of editing nucleotides, from 0 to 3 ' +
|
|
373
358
|
'(per position). Positions whose columns have more than ' +
|
|
374
359
|
'"max-editing-nucleotides" will not be included in the analysis.',
|
|
375
360
|
)
|
|
@@ -378,8 +363,8 @@ def parse_options(): # noqa:WPS213
|
|
|
378
363
|
'--strand-confidence-threshold',
|
|
379
364
|
type=float,
|
|
380
365
|
default=0.7, # noqa:WPS432
|
|
381
|
-
help='Only report the strandedness if at least
|
|
382
|
-
'reads are of a given strand',
|
|
366
|
+
help='Only report the strandedness if at least -T proportion of ' +
|
|
367
|
+
'reads are of a given strand.',
|
|
383
368
|
)
|
|
384
369
|
parser.add_argument(
|
|
385
370
|
'-C',
|
|
@@ -393,25 +378,25 @@ def parse_options(): # noqa:WPS213
|
|
|
393
378
|
'-V',
|
|
394
379
|
'--verbose',
|
|
395
380
|
default=False,
|
|
396
|
-
help='
|
|
381
|
+
help='Run in verbose mode.',
|
|
397
382
|
action='store_true',
|
|
398
383
|
)
|
|
399
384
|
parser.add_argument(
|
|
400
385
|
'-N',
|
|
401
386
|
'--dna',
|
|
402
387
|
default=False,
|
|
403
|
-
help='Run REDItools
|
|
388
|
+
help='Run REDItools on DNA-Seq data.',
|
|
404
389
|
action='store_true',
|
|
405
390
|
)
|
|
406
391
|
parser.add_argument(
|
|
407
392
|
'-B',
|
|
408
393
|
'--bed_file',
|
|
409
|
-
help='
|
|
394
|
+
help='Only analyze regions in the provided BED file.',
|
|
410
395
|
)
|
|
411
396
|
parser.add_argument(
|
|
412
397
|
'-t',
|
|
413
398
|
'--threads',
|
|
414
|
-
help='Number of threads
|
|
399
|
+
help='Number of threads for parallel processing.',
|
|
415
400
|
type=int,
|
|
416
401
|
default=1,
|
|
417
402
|
)
|
|
@@ -419,7 +404,7 @@ def parse_options(): # noqa:WPS213
|
|
|
419
404
|
'-w',
|
|
420
405
|
'--window',
|
|
421
406
|
help='How many bp should be processed by each thread at a time. ' +
|
|
422
|
-
'
|
|
407
|
+
'Zero uses the full contig.',
|
|
423
408
|
type=int,
|
|
424
409
|
default=0,
|
|
425
410
|
)
|
|
@@ -427,18 +412,18 @@ def parse_options(): # noqa:WPS213
|
|
|
427
412
|
'-k',
|
|
428
413
|
'--exclude_regions',
|
|
429
414
|
nargs='+',
|
|
430
|
-
help='
|
|
415
|
+
help='Skip regions in the provided BED file(s).',
|
|
431
416
|
)
|
|
432
417
|
parser.add_argument(
|
|
433
418
|
'-E',
|
|
434
419
|
'--exclude_reads',
|
|
435
|
-
help='
|
|
420
|
+
help='Text file listing read names to exclude from analysis.',
|
|
436
421
|
)
|
|
437
422
|
parser.add_argument(
|
|
438
423
|
'-d',
|
|
439
424
|
'--debug',
|
|
440
425
|
default=False,
|
|
441
|
-
help='
|
|
426
|
+
help='Run in debug mode.',
|
|
442
427
|
action='store_true',
|
|
443
428
|
)
|
|
444
429
|
|
reditools/file_utils.py
CHANGED
|
@@ -2,11 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
import csv
|
|
4
4
|
import os
|
|
5
|
-
from collections import defaultdict
|
|
6
5
|
from gzip import open as gzip_open
|
|
7
6
|
|
|
8
|
-
from sortedcontainers import SortedSet
|
|
9
|
-
|
|
10
7
|
from reditools.region import Region
|
|
11
8
|
|
|
12
9
|
|
|
@@ -68,54 +65,36 @@ def concat(output, *fnames, clean_up=True, encoding='utf-8'):
|
|
|
68
65
|
os.remove(fname)
|
|
69
66
|
|
|
70
67
|
|
|
71
|
-
def
|
|
72
|
-
"""
|
|
73
|
-
Read omopolymeric positions from a file.
|
|
74
|
-
|
|
75
|
-
Parameters:
|
|
76
|
-
fname (str): File path
|
|
77
|
-
|
|
78
|
-
Returns:
|
|
79
|
-
(dict): Contigs and regions
|
|
80
|
-
"""
|
|
81
|
-
poly_regions = defaultdict(set)
|
|
82
|
-
with read_bed_file(fname) as reader:
|
|
83
|
-
for row in reader:
|
|
84
|
-
poly_regions[row[0]] = Region(
|
|
85
|
-
contig=row[0],
|
|
86
|
-
start=row[1],
|
|
87
|
-
stop=row[2],
|
|
88
|
-
)
|
|
89
|
-
return poly_regions
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
def load_splicing_file(splicing_file, span):
|
|
68
|
+
def load_splicing_file(splicing_file, splicing_span):
|
|
93
69
|
"""
|
|
94
70
|
Read splicing positions from a file.
|
|
95
71
|
|
|
96
72
|
Parameters:
|
|
97
73
|
splicing_file (str): File path
|
|
98
|
-
|
|
74
|
+
splicing_span(int): Width of splice sites
|
|
99
75
|
|
|
100
|
-
|
|
101
|
-
|
|
76
|
+
Yeilds:
|
|
77
|
+
Splicing file contents as Regions.
|
|
102
78
|
"""
|
|
103
|
-
splice_positions = defaultdict(SortedSet)
|
|
104
79
|
strand_map = {'-': 'D', '+': 'A'}
|
|
105
80
|
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
81
|
+
stream = open_stream(splicing_file)
|
|
82
|
+
reader = csv.reader(
|
|
83
|
+
filter(lambda row: row[0] != '#', stream),
|
|
84
|
+
delimiter=' ',
|
|
85
|
+
)
|
|
86
|
+
for row in reader:
|
|
87
|
+
contig = row[0]
|
|
88
|
+
span = int(row[1])
|
|
89
|
+
splice = row[3]
|
|
90
|
+
strand = row[4]
|
|
91
|
+
|
|
92
|
+
coe = -1 if strand_map.get(strand, None) == splice else 1
|
|
93
|
+
start = 1 + span
|
|
94
|
+
stop = start + splicing_span * coe
|
|
95
|
+
if start > stop:
|
|
96
|
+
start, stop = stop, start
|
|
97
|
+
yield Region(contig=contig, start=start, stop=stop)
|
|
119
98
|
|
|
120
99
|
|
|
121
100
|
def load_text_file(file_name):
|
reditools/homopolymerics.py
CHANGED
|
@@ -42,7 +42,11 @@ def parse_options():
|
|
|
42
42
|
Returns:
|
|
43
43
|
namespace
|
|
44
44
|
"""
|
|
45
|
-
parser = argparse.ArgumentParser(
|
|
45
|
+
parser = argparse.ArgumentParser(
|
|
46
|
+
prog="reditools find-repeats",
|
|
47
|
+
description='REDItools3',
|
|
48
|
+
formatter_class=argparse.ArgumentDefaultsHelpFormatter,
|
|
49
|
+
)
|
|
46
50
|
parser.add_argument(
|
|
47
51
|
'file',
|
|
48
52
|
help='The fasta file to be analyzed',
|
|
@@ -57,6 +61,7 @@ def parse_options():
|
|
|
57
61
|
parser.add_argument(
|
|
58
62
|
'-o',
|
|
59
63
|
'--output',
|
|
64
|
+
default='/dev/stdout',
|
|
60
65
|
help='Destination to write results. Default is to use STDOUT. ' +
|
|
61
66
|
'If the filename ends in .gz, the contents will be gzipped.',
|
|
62
67
|
)
|
reditools/index.py
CHANGED
|
@@ -180,7 +180,11 @@ def parse_options(): # noqa:WPS213
|
|
|
180
180
|
Returns:
|
|
181
181
|
namespace: commandline args
|
|
182
182
|
"""
|
|
183
|
-
parser = argparse.ArgumentParser(
|
|
183
|
+
parser = argparse.ArgumentParser(
|
|
184
|
+
prog="reditools index",
|
|
185
|
+
description='REDItools3',
|
|
186
|
+
formatter_class=argparse.ArgumentDefaultsHelpFormatter,
|
|
187
|
+
)
|
|
184
188
|
parser.add_argument(
|
|
185
189
|
'file',
|
|
186
190
|
nargs='+',
|
|
@@ -189,6 +193,7 @@ def parse_options(): # noqa:WPS213
|
|
|
189
193
|
parser.add_argument(
|
|
190
194
|
'-o',
|
|
191
195
|
'--output-file',
|
|
196
|
+
default='/dev/stdout',
|
|
192
197
|
help='The output statistics file',
|
|
193
198
|
)
|
|
194
199
|
parser.add_argument(
|
|
@@ -239,7 +244,7 @@ def main():
|
|
|
239
244
|
indexer.add_target_from_bed(trg_fname)
|
|
240
245
|
|
|
241
246
|
if options.output_file:
|
|
242
|
-
stream = open_stream(options.
|
|
247
|
+
stream = open_stream(options.output_file, 'w')
|
|
243
248
|
else:
|
|
244
249
|
stream = sys.stdout
|
|
245
250
|
|
reditools/reditools.py
CHANGED
|
@@ -127,7 +127,6 @@ class REDItools(object):
|
|
|
127
127
|
self._target_positions = False
|
|
128
128
|
self._exclude_positions = {}
|
|
129
129
|
self._splice_positions = []
|
|
130
|
-
|
|
131
130
|
self._specific_edits = None
|
|
132
131
|
|
|
133
132
|
self.reference = None
|
|
@@ -294,6 +293,20 @@ class REDItools(object):
|
|
|
294
293
|
"""
|
|
295
294
|
return self._exclude_positions
|
|
296
295
|
|
|
296
|
+
@property
|
|
297
|
+
def max_alts(self):
|
|
298
|
+
"""Maximum number of alternative bases for a position."""
|
|
299
|
+
return self._max_alts
|
|
300
|
+
|
|
301
|
+
@max_alts.setter
|
|
302
|
+
def max_alts(self, max_alts):
|
|
303
|
+
self._max_alts = max_alts
|
|
304
|
+
function = self._rtqc.check_max_alts
|
|
305
|
+
if max_alts < 3:
|
|
306
|
+
self._rtqc.add(function)
|
|
307
|
+
else:
|
|
308
|
+
self._rtqc.discard(function)
|
|
309
|
+
|
|
297
310
|
def exclude(self, regions):
|
|
298
311
|
"""
|
|
299
312
|
Explicitly skip specified genomic regions.
|
reditools/rtchecks.py
CHANGED
|
@@ -149,12 +149,14 @@ class RTChecks(object):
|
|
|
149
149
|
Returns:
|
|
150
150
|
(bool): True if there are sufficient edits
|
|
151
151
|
"""
|
|
152
|
-
for
|
|
153
|
-
if
|
|
152
|
+
for base in "ATCG":
|
|
153
|
+
if base == bases.ref:
|
|
154
|
+
continue
|
|
155
|
+
if bases[base] < rtools.min_edits_per_nucleotide:
|
|
154
156
|
rtools.log(
|
|
155
157
|
Logger.debug_level,
|
|
156
158
|
'DISCARDING COLUMN edits={} < {}',
|
|
157
|
-
|
|
159
|
+
bases[base],
|
|
158
160
|
rtools.min_edits_per_nucleotide,
|
|
159
161
|
)
|
|
160
162
|
return False
|
|
@@ -272,3 +274,26 @@ class RTChecks(object):
|
|
|
272
274
|
)
|
|
273
275
|
return False
|
|
274
276
|
return True
|
|
277
|
+
|
|
278
|
+
def check_max_alts(self, bases, rtools):
|
|
279
|
+
"""
|
|
280
|
+
Check that there are no more than a max number of alts.
|
|
281
|
+
|
|
282
|
+
Parameters:
|
|
283
|
+
bases (CompiledPosition): Base position under analysis
|
|
284
|
+
rtools (REDItools): Object running the analysis
|
|
285
|
+
|
|
286
|
+
Returns:
|
|
287
|
+
(bool): True if there are n or fewer alts
|
|
288
|
+
"""
|
|
289
|
+
|
|
290
|
+
alts = bases.get_variants()
|
|
291
|
+
if len(alts) > rtools.max_alts:
|
|
292
|
+
rtools.log(
|
|
293
|
+
Logger.debug_level,
|
|
294
|
+
'DISCARD COLUMN alts={} > {}',
|
|
295
|
+
len(alts),
|
|
296
|
+
rtools.max_alts,
|
|
297
|
+
)
|
|
298
|
+
return False
|
|
299
|
+
return True
|
|
@@ -1,25 +1,25 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.2
|
|
2
2
|
Name: REDItools3
|
|
3
|
-
Version: 3.
|
|
3
|
+
Version: 3.3
|
|
4
4
|
Author: Ernesto Picardi
|
|
5
5
|
Author-email: Adam Handen <adam.handen@gmail.com>
|
|
6
6
|
Project-URL: homepage, https://github.com/BioinfoUNIBA/REDItools3
|
|
7
7
|
Project-URL: repository, https://github.com/BioinfoUNIBA/REDItools3
|
|
8
8
|
Project-URL: issues, https://github.com/BioinfoUNIBA/REDItools3/issues
|
|
9
9
|
Keywords: bioinformatics,RNA,RNA-editing
|
|
10
|
-
Classifier: Development Status ::
|
|
10
|
+
Classifier: Development Status :: 5 - Production/Stable
|
|
11
11
|
Classifier: Intended Audience :: Developers
|
|
12
12
|
Classifier: Intended Audience :: Science/Research
|
|
13
13
|
Classifier: License :: OSI Approved :: GNU General Public License (GPL)
|
|
14
14
|
Classifier: Operating System :: MacOS :: MacOS X
|
|
15
15
|
Classifier: Operating System :: Unix
|
|
16
|
-
Classifier: Programming Language :: Python :: 3.
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.7
|
|
17
17
|
Classifier: Topic :: Scientific/Engineering :: Bio-Informatics
|
|
18
18
|
Requires-Python: >=3.7
|
|
19
19
|
Description-Content-Type: text/markdown
|
|
20
20
|
License-File: LICENSE
|
|
21
|
-
Requires-Dist: pysam
|
|
22
|
-
Requires-Dist: sortedcontainers
|
|
21
|
+
Requires-Dist: pysam>=0.22.0
|
|
22
|
+
Requires-Dist: sortedcontainers>=2.4.0
|
|
23
23
|
|
|
24
24
|
# REDItools3
|
|
25
25
|
A new REDItools implementation to speed-up the RNA editing profiling in massive RNAseq data
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
reditools/__init__.py,sha256=7nSB0hrQznxrn6l95cv_pSonJTG6jZCQdbn7aT1TtvY,46
|
|
2
|
+
reditools/__main__.py,sha256=mWJ9O2LDiOpBWDBJJUN7OiM4SyltW-kVXXAGBe_JxgQ,842
|
|
3
|
+
reditools/alignment_file.py,sha256=YFyCEhMek2t93DpmpwEst5v3gDZkmRotbd6Fy_mP0aE,4258
|
|
4
|
+
reditools/alignment_manager.py,sha256=_FXwvqGWoXRdzVrwBxki2heaVZA2cQbGXqCopr-g1Hs,4138
|
|
5
|
+
reditools/analyze.py,sha256=7J_arZX2Sc-lFuFdjjGq_G7QQ8s2hQ1paWqqUBXoftQ,14711
|
|
6
|
+
reditools/compiled_position.py,sha256=v540uUEie_HHUwsYQmBqeeOkUvtYlcnWj1v8gAhLUiE,3858
|
|
7
|
+
reditools/compiled_reads.py,sha256=7Hm5f7g1T8q1zDOOxZUD7aZax9b7SdQ0PlmT93hmcaE,4154
|
|
8
|
+
reditools/fasta_file.py,sha256=KBsJBs7OnBpew2PGWGp0mTxPLlpBmRrtXL4uvQw4t34,2212
|
|
9
|
+
reditools/file_utils.py,sha256=MfQPzJ4ogbwNvIiEu1oooS64EJH1CFdRS8eoqT9Zo4w,2763
|
|
10
|
+
reditools/homopolymerics.py,sha256=UsHTr0e_OP_dkGq5te-oTSe5u6kzi5UJOF9t9QAunUk,2269
|
|
11
|
+
reditools/index.py,sha256=jLgWwKXIA_e-bqVu74SDZXmrdWch_syDSmMnFZPbqz4,7537
|
|
12
|
+
reditools/logger.py,sha256=u4L2SYxy4vJ4KDHEymd0b1sCa8BXXHchx8LR_wcFq1A,1210
|
|
13
|
+
reditools/reditools.py,sha256=RNH7aKC2QnbafA7T9E6UpV5Llv3FjfDIabjPCuwDgW0,13111
|
|
14
|
+
reditools/region.py,sha256=_BiKDc5lCl1snjkokRiUWOgzA57ME3yLydEIwK9ku7U,3780
|
|
15
|
+
reditools/rtchecks.py,sha256=q_-8iAV51mGrqN30blSgMD_htF3CGrPyrI4PD3CSCLQ,8917
|
|
16
|
+
reditools/utils.py,sha256=a2qfhMcrH2QlK-JoR-HHF6_bnlo5v3jihAqqknvVIjc,2733
|
|
17
|
+
reditools3-3.3.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
|
|
18
|
+
reditools3-3.3.dist-info/METADATA,sha256=Toc23YEA7V-dWeNWbNay_vtq_ycxWLHKtstCbsIp9yg,1296
|
|
19
|
+
reditools3-3.3.dist-info/WHEEL,sha256=52BFRY2Up02UkjOa29eZOS2VxUrpPORXg1pkohGGUS8,91
|
|
20
|
+
reditools3-3.3.dist-info/top_level.txt,sha256=wrvvbFXhmNg7s6LQqjlV_fVQYUZOOpF93IcMu_hBCx4,10
|
|
21
|
+
reditools3-3.3.dist-info/RECORD,,
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
reditools/__init__.py,sha256=7nSB0hrQznxrn6l95cv_pSonJTG6jZCQdbn7aT1TtvY,46
|
|
2
|
-
reditools/__main__.py,sha256=mWJ9O2LDiOpBWDBJJUN7OiM4SyltW-kVXXAGBe_JxgQ,842
|
|
3
|
-
reditools/alignment_file.py,sha256=YFyCEhMek2t93DpmpwEst5v3gDZkmRotbd6Fy_mP0aE,4258
|
|
4
|
-
reditools/alignment_manager.py,sha256=_FXwvqGWoXRdzVrwBxki2heaVZA2cQbGXqCopr-g1Hs,4138
|
|
5
|
-
reditools/analyze.py,sha256=u38yN5DmXUCW8nQP_BMfsXuvb59rFO12di5cYT8Ye58,15280
|
|
6
|
-
reditools/compiled_position.py,sha256=v540uUEie_HHUwsYQmBqeeOkUvtYlcnWj1v8gAhLUiE,3858
|
|
7
|
-
reditools/compiled_reads.py,sha256=7Hm5f7g1T8q1zDOOxZUD7aZax9b7SdQ0PlmT93hmcaE,4154
|
|
8
|
-
reditools/fasta_file.py,sha256=KBsJBs7OnBpew2PGWGp0mTxPLlpBmRrtXL4uvQw4t34,2212
|
|
9
|
-
reditools/file_utils.py,sha256=AJjU9leOxSou5U_4RAgapR9PGQz0OYQlkCudvTcXGeQ,3284
|
|
10
|
-
reditools/homopolymerics.py,sha256=BCYXBJa6YuouzccFisBFOtGfZAEOSqeqJsO-c37At84,2123
|
|
11
|
-
reditools/index.py,sha256=K3JQTMx4ojUUiPQTDMDsoYoFQQ_o-ZNqTrh5dIVFVSQ,7398
|
|
12
|
-
reditools/logger.py,sha256=u4L2SYxy4vJ4KDHEymd0b1sCa8BXXHchx8LR_wcFq1A,1210
|
|
13
|
-
reditools/reditools.py,sha256=Rb5bllqjE1wHti98p-v2t4Vu-YEvZgNv-FXcUPgDVO0,12725
|
|
14
|
-
reditools/region.py,sha256=_BiKDc5lCl1snjkokRiUWOgzA57ME3yLydEIwK9ku7U,3780
|
|
15
|
-
reditools/rtchecks.py,sha256=tkaosQDBc2XN_RlVMtNwrxZjCQoQo2bWfQISROXCmKA,8221
|
|
16
|
-
reditools/utils.py,sha256=a2qfhMcrH2QlK-JoR-HHF6_bnlo5v3jihAqqknvVIjc,2733
|
|
17
|
-
REDItools3-3.1a0.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
|
|
18
|
-
REDItools3-3.1a0.dist-info/METADATA,sha256=EPD47hLxZoozfc0Gd4uFPOaid9uz81DkWI4Pkv0STpo,1289
|
|
19
|
-
REDItools3-3.1a0.dist-info/WHEEL,sha256=a7TGlA-5DaHMRrarXjVbQagU3Man_dCnGIWMJr5kRWo,91
|
|
20
|
-
REDItools3-3.1a0.dist-info/top_level.txt,sha256=wrvvbFXhmNg7s6LQqjlV_fVQYUZOOpF93IcMu_hBCx4,10
|
|
21
|
-
REDItools3-3.1a0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|