[med-svn] [circlator] 01/06: Imported Upstream version 1.2.1
Afif Elghraoui
afif at moszumanska.debian.org
Sun Apr 24 06:54:45 UTC 2016
This is an automated email from the git hooks/post-receive script.
afif pushed a commit to branch master
in repository circlator.
commit 03b0ae81df867558fc4801b1397f8dbc583d652d
Author: Afif Elghraoui <afif at ghraoui.name>
Date: Sat Apr 23 20:35:25 2016 -0700
Imported Upstream version 1.2.1
---
circlator/__init__.py | 9 +++++++++
circlator/bamfilter.py | 20 +++++++++++++++++++-
circlator/common.py | 2 --
circlator/external_progs.py | 10 ++++------
circlator/tasks/all.py | 23 +++++++++++++++++++++--
circlator/tasks/bam2reads.py | 2 ++
circlator/tasks/progcheck.py | 5 ++---
circlator/tasks/version.py | 3 ++-
circlator/versions.py | 40 ++++++++++++++++++++++++++++++++++++++++
setup.py | 8 ++++----
10 files changed, 103 insertions(+), 19 deletions(-)
diff --git a/circlator/__init__.py b/circlator/__init__.py
index 62985b5..4d4e7b9 100644
--- a/circlator/__init__.py
+++ b/circlator/__init__.py
@@ -1,3 +1,11 @@
+from pkg_resources import get_distribution
+
+try:
+ __version__ = get_distribution('circlator').version
+except:
+ __version__ = 'local'
+
+
__all__ = [
'assemble',
'assembly',
@@ -12,6 +20,7 @@ __all__ = [
'minimus2',
'program',
'tasks',
+ 'versions',
]
from circlator import *
diff --git a/circlator/bamfilter.py b/circlator/bamfilter.py
index 35194d6..b480c46 100644
--- a/circlator/bamfilter.py
+++ b/circlator/bamfilter.py
@@ -16,6 +16,7 @@ class BamFilter:
contigs_to_use=None,
discard_unmapped=False,
log_prefix='[bamfilter]',
+ verbose=False,
):
self.bam = os.path.abspath(bam)
if not os.path.exists(self.bam):
@@ -28,6 +29,7 @@ class BamFilter:
self.contigs_to_use = self._get_contigs_to_use(contigs_to_use)
self.discard_unmapped = discard_unmapped
self.min_read_length = min_read_length
+ self.verbose = verbose
def _get_ref_lengths(self):
@@ -141,32 +143,48 @@ class BamFilter:
f_log = pyfastaq.utils.open_file_write(self.log)
f_fa = pyfastaq.utils.open_file_write(self.reads_fa)
print(self.log_prefix, '#contig', 'length', 'reads_kept', sep='\t', file=f_log)
+ if self.verbose:
+ print('Getting reads from BAM file', self.bam, flush=True)
for contig in sorted(ref_lengths):
if len(self.contigs_to_use) > 0 and contig not in self.contigs_to_use:
print(self.log_prefix, contig, ref_lengths[contig], 'skipping', sep='\t', file=f_log)
+ if self.verbose:
+ print('Skipping contig', contig, flush=True)
continue
if ref_lengths[contig] <= self.length_cutoff:
self._all_reads_from_contig(contig, f_fa)
print(self.log_prefix, contig, ref_lengths[contig], 'all', sep='\t', file=f_log)
+ if self.verbose:
+ print('Getting all reads that map to contig', contig, flush=True)
else:
end_bases_keep = int(0.5 * self.length_cutoff)
start = end_bases_keep - 1
end = max(end_bases_keep - 1, ref_lengths[contig] - end_bases_keep)
self._get_region(contig, 0, start, f_fa, min_length=self.min_read_length)
self._get_region(contig, end, ref_lengths[contig], f_fa, min_length=self.min_read_length)
+ coords_string = '1-' + str(start + 1) + ';' + str(end + 1) + '-' + str(ref_lengths[contig])
print(
self.log_prefix,
contig,
ref_lengths[contig],
- '1-' + str(start + 1) + ';' + str(end + 1) + '-' + str(ref_lengths[contig]),
+ coords_string,
sep='\t',
file=f_log
)
+ if self.verbose:
+ print('Getting all reads that map to ends of contig ', contig, '. Coords: ', coords_string, sep='', flush=True)
if not self.discard_unmapped:
+ if self.verbose:
+ print('Getting all unmapped reads', sep='', flush=True)
self._get_all_unmapped_reads(f_fa)
pyfastaq.utils.close(f_fa)
pyfastaq.utils.close(f_log)
+
+ if self.verbose:
+ print('Finished getting reads.')
+ print('Log file:', self.log)
+ print('Reads file:', self.reads_fa, flush=True)
diff --git a/circlator/common.py b/circlator/common.py
index 76fd3ee..114c980 100644
--- a/circlator/common.py
+++ b/circlator/common.py
@@ -4,8 +4,6 @@ import subprocess
class Error (Exception): pass
-version = '1.2.0'
-
def syscall(cmd, allow_fail=False, verbose=False):
if verbose:
print('syscall:', cmd, flush=True)
diff --git a/circlator/external_progs.py b/circlator/external_progs.py
index 846fc33..9bf3efe 100644
--- a/circlator/external_progs.py
+++ b/circlator/external_progs.py
@@ -1,6 +1,7 @@
import re
import sys
from circlator import program, common
+from circlator import __version__ as circlator_version
import shutil
import pyfastaq
@@ -27,7 +28,7 @@ prog_to_version_cmd = {
'nucmer': ('--version', re.compile('^NUCmer \(NUCleotide MUMmer\) version ([0-9\.]+)')),
'prodigal': ('-v', re.compile('^Prodigal V([0-9\.]+):')),
'samtools': ('', re.compile('^Version: ([0-9\.]+)')),
- 'spades': ('', re.compile('^SPAdes genome assembler v.([0-9\.]+)')),
+ 'spades': ('', re.compile('^SPAdes genome assembler v.?([0-9][0-9\.]+)')),
}
@@ -94,17 +95,14 @@ def make_and_check_prog(name, verbose=False, raise_error=True, filehandle=None):
return p
if verbose:
- print('Using', name, 'version', p.version(), 'as', p.full_path)
+ print(name, p.version(), p.full_path, sep='\t')
if filehandle:
- print('Using', name, 'version', p.version(), 'as', p.full_path, file=filehandle)
+ print(name, p.version(), p.full_path, sep='\t', file=filehandle)
return p
def check_all_progs(verbose=False, raise_error=False, filehandle=None):
- if filehandle is not None:
- print(sys.argv[0], 'version', common.version, file=filehandle)
-
for prog in sorted(prog_name_to_default):
make_and_check_prog(prog, verbose=verbose, raise_error=raise_error, filehandle=filehandle)
diff --git a/circlator/tasks/all.py b/circlator/tasks/all.py
index a392088..5ada723 100644
--- a/circlator/tasks/all.py
+++ b/circlator/tasks/all.py
@@ -18,6 +18,7 @@ def run():
usage = 'circlator all [options] <assembly.fasta> <reads.fasta> <output directory>')
parser.add_argument('--threads', type=int, help='Number of threads [%(default)s]', default=1, metavar='INT')
parser.add_argument('--verbose', action='store_true', help='Be verbose')
+ parser.add_argument('--unchanged_code', type=int, help='Code to return when the input assembly is not changed [%(default)s]', default=0, metavar='INT')
parser.add_argument('assembly', help='Name of original assembly', metavar='assembly.fasta')
parser.add_argument('reads', help='Name of corrected reads FASTA file', metavar='reads.fasta')
parser.add_argument('outdir', help='Name of output directory (must not already exist)', metavar='output directory')
@@ -63,7 +64,11 @@ def run():
options = parser.parse_args()
print_message('{:_^79}'.format(' Checking external programs '), options)
- circlator.external_progs.check_all_progs(verbose=options.verbose, raise_error=True)
+ if options.verbose:
+ circlator.versions.get_all_versions(sys.stdout, raise_error=True)
+ else:
+ circlator.versions.get_all_versions(None, raise_error=True)
+
files_to_check = [options.assembly, options.reads]
if options.b2r_only_contigs:
@@ -92,7 +97,7 @@ def run():
with open('00.info.txt', 'w') as f:
print(sys.argv[0], 'all', ' '.join(sys.argv[1:]), file=f)
- circlator.external_progs.check_all_progs(filehandle=f, raise_error=True)
+ circlator.versions.get_all_versions(f)
original_assembly_renamed = '00.input_assembly.fasta'
bam = '01.mapreads.bam'
@@ -135,6 +140,7 @@ def run():
min_read_length=options.b2r_min_read_length,
contigs_to_use=options.b2r_only_contigs,
discard_unmapped=options.b2r_discard_unmapped,
+ verbose=options.verbose,
)
bam_filter.run()
@@ -248,5 +254,18 @@ def run():
)
fixer.run()
+ #-------------------------------- summary -------------------------------
+ print_message('{:_^79}'.format(' Summary '), options)
+ number_of_input_contigs = pyfastaq.tasks.count_sequences(original_assembly_renamed)
+ final_number_of_contigs = pyfastaq.tasks.count_sequences(fixstart_fasta)
+ number_circularized = len(contigs_to_keep)
+ print_message('Number of input contigs: ' + str(number_of_input_contigs), options)
+ print_message('Number of contigs after merging: ' + str(final_number_of_contigs), options)
+ print_message(' '.join(['Circularized', str(number_circularized), 'of', str(final_number_of_contigs), 'contig(s)']), options)
+
with open(fixstart_prefix + '.ALL_FINISHED', 'w') as f:
pass
+
+ if number_of_input_contigs == final_number_of_contigs and number_circularized == 0:
+ sys.exit(options.unchanged_code)
+
diff --git a/circlator/tasks/bam2reads.py b/circlator/tasks/bam2reads.py
index 039aa88..4fd2cc2 100644
--- a/circlator/tasks/bam2reads.py
+++ b/circlator/tasks/bam2reads.py
@@ -11,6 +11,7 @@ def run():
parser.add_argument('--only_contigs', help='File of contig names (one per line). Only reads that map to these contigs are kept (and unmapped reads, unless --discard_unmapped is used).', metavar='FILENAME')
parser.add_argument('--length_cutoff', type=int, help='All reads mapped to contigs shorter than this will be kept [%(default)s]', default=100000, metavar='INT')
parser.add_argument('--min_read_length', type=int, help='Minimum length of read to output [%(default)s]', default=250, metavar='INT')
+ parser.add_argument('--verbose', action='store_true', help='Be verbose')
parser.add_argument('bam', help='Name of input bam file', metavar='in.bam')
parser.add_argument('outprefix', help='Prefix of output filenames')
options = parser.parse_args()
@@ -22,6 +23,7 @@ def run():
min_read_length=options.min_read_length,
contigs_to_use=options.only_contigs,
discard_unmapped=options.discard_unmapped,
+ verbose=options.verbose,
)
bam_filter.run()
diff --git a/circlator/tasks/progcheck.py b/circlator/tasks/progcheck.py
index 59e6941..86ca05a 100644
--- a/circlator/tasks/progcheck.py
+++ b/circlator/tasks/progcheck.py
@@ -1,11 +1,10 @@
import argparse
import sys
-from circlator import external_progs
+from circlator import versions
def run():
parser = argparse.ArgumentParser(
description = 'Checks all dependencies are found and are correct versions',
usage = 'circlator progcheck')
options = parser.parse_args()
-
- external_progs.check_all_progs(verbose=True, raise_error=False)
+ versions.get_all_versions(sys.stdout, raise_error=False)
diff --git a/circlator/tasks/version.py b/circlator/tasks/version.py
index c8da227..15473fc 100644
--- a/circlator/tasks/version.py
+++ b/circlator/tasks/version.py
@@ -1,4 +1,5 @@
+from circlator import __version__ as circlator_version
import circlator
def run():
- print(circlator.common.version)
+ print(circlator_version)
diff --git a/circlator/versions.py b/circlator/versions.py
new file mode 100644
index 0000000..4358018
--- /dev/null
+++ b/circlator/versions.py
@@ -0,0 +1,40 @@
+import sys
+import bio_assembly_refinement
+import openpyxl
+import pyfastaq
+import pymummer
+import pysam
+from circlator import external_progs, __version__
+from circlator import __version__ as circlator_version
+
+
+def get_all_versions(filehandle, raise_error=True):
+ if filehandle is not None:
+ print('Circlator version:', circlator_version, file=filehandle)
+ print('\nExternal dependencies:', file=filehandle)
+
+ external_progs.check_all_progs(verbose=False, raise_error=raise_error, filehandle=filehandle)
+
+ if filehandle is not None:
+ print('\nPython version:', file=filehandle)
+ print(sys.version, file=filehandle)
+ print('\nPython dependencies:', file=filehandle)
+
+ found_bad_module = False
+
+ for module in ['bio_assembly_refinement', 'openpyxl', 'pyfastaq', 'pymummer', 'pysam']:
+ try:
+ version = eval(module + '.__version__')
+ path = eval(module + '.__file__')
+ except:
+ version = 'NOT_FOUND'
+ path = 'NOT_FOUND'
+ found_bad_module = True
+
+ if filehandle is not None:
+ print(module + '\t' + version + '\t' + path, file=filehandle)
+
+ if raise_error and found_bad_module:
+ print('Some dependencies not satisfied. Cannot continue. Try running: circlator progcheck', file=sys.stderr)
+ sys.exit(1)
+
diff --git a/setup.py b/setup.py
index 86f1fb6..650acc0 100644
--- a/setup.py
+++ b/setup.py
@@ -7,7 +7,7 @@ from setuptools import setup, find_packages
setup(
name='circlator',
- version='1.2.0',
+ version='1.2.1',
description='circlator: a tool to circularise genome assemblies',
packages = find_packages(),
package_data={'circlator': ['data/*']},
@@ -19,10 +19,10 @@ setup(
tests_require=['nose >= 1.3'],
install_requires=[
'openpyxl',
- 'pyfastaq >= 3.10.0',
+ 'pyfastaq >= 3.12.1',
'pysam >= 0.8.1, <= 0.8.3',
- 'pymummer>=0.6.1',
- 'bio_assembly_refinement>=0.5.0',
+ 'pymummer>=0.7.1',
+ 'bio_assembly_refinement>=0.5.1',
],
license='GPLv3',
classifiers=[
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-med/circlator.git
More information about the debian-med-commit
mailing list