예제 #1
0
def annotation_regulator(args):
    if hasattr(args, 'temp_dir'):
        args.annotation_dir = os.path.join(args.temp_dir, 'annotation')
    else:
        args.annotation_dir = os.path.join(os.getcwd(), 'annotation')

    try:
        safe_makedirs(args.annotation_dir)
    except FileExistsError:
        print('Diretory exist before validating, please check and remove it to prevent data loss.')
        return False
    except Exception:
        print('Cannot make annotation temp folder!')
        return False

    valid = True

    if args.max_contig_length < 0:
        print('Please input valid contig length.')
        valid = False
    if args.hmmer_score < 0:
        print('Please input valid hmmer score valve.')
        valid = False
    if args.hmmer_e < 0:
        print('Please input valid hmmer e-value limit.')
        valid = False
    return valid
예제 #2
0
def search_regulator(args):
    valid = True

    if args.min_abundance <= 0:
        print("Input minimum abundance is not valid.")
        valid = False

    from ete3 import NCBITaxa
    ncbi = NCBITaxa()

    if hasattr(args, 'temp_dir'):
        args.findmitoscaf_dir = os.path.join(args.temp_dir, 'findmitoscaf')
    else:
        args.findmitoscaf_dir = os.path.join(os.getcwd(), 'findmitoscaf')
    try:
        safe_makedirs(args.findmitoscaf_dir)
    except FileExistsError:
        valid = False
        print('Diretory exist before validating, please check and remove it to prevent data loss.')
    except Exception:
        valid = False
        print('Error occured when validating the directories, please check your permissions or things could be related.')

    if args.required_taxa not in ncbi.get_name_translator([args.required_taxa]):
        print("Specified taxanomy name not in NCBI taxanomy database.")
        return False
    args.taxa_ids = ncbi.get_name_translator([args.required_taxa])[
        args.required_taxa]

    return valid
예제 #3
0
def assembly_regulator(args):
    valid = True

    if hasattr(args, 'temp_dir'):
        args.assemble_dir = os.path.join(args.temp_dir, 'assemble')
    else:
        args.assemble_dir = os.path.join(os.getcwd(), 'assemble')

    try:
        safe_makedirs(args.assemble_dir)
    except FileExistsError:
        print('Diretory exist before validating, please check and remove it to prevent data loss.')
        valid = False
    except Exception:
        valid = False
        print('Error occured when validating the directories, please check your permissions or things could be related.')

    args.kmer_list = [int(x) for x in args.kmer_list.split(',')]
    args.kmer_list.sort()
    if 0 in [x % 2 for x in args.kmer_list]:
        print('All kmer length must be odd.')
        valid = False

    args.depth_list = [int(x) for x in args.depth_list.split(',')]

    if args.prune_depth < 0:
        print('Prune depth lower than 0.')
        valid = False

    return valid
예제 #4
0
    def initialize(self):
        self.basedir = path.abspath(self.basedir)
        self.fq1 = path.abspath(self.fq1)
        if self.fq2:
            self.fq2 = path.abspath(self.fq2)

        # Check if POPCNT command is supported
        if self.use_popcnt:
            if shell_call('megahit_core checkpopcnt').rstrip() != '1':
                self.use_popcnt = False
                logger.log(3, "POPCNT is disabled since no features detected.")
            else:
                self.hwaccel = shell_call(
                    "megahit_core checkcpu").rstrip() == '1'

                logger.log(
                    2,
                    f"Using megahit with {'POPCNT' if not self.hwaccel else 'hardware acceleration'} support."
                )
        else:
            logger.log(2, "POPCNT disabled by argument.")

        if self.one_pass:
            logger.log(3, "Using 1-pass mode.")

        self.result_dir = safe_makedirs(
            path.join(self.basedir, f'{self.prefix}.result'), False)

        if not path.isdir(str(a_conf.external_temp)):
            self.temp_dir = safe_makedirs(
                path.join(self.basedir, f'{self.prefix}.temp'), False)
        else:
            self.temp_dir = safe_makedirs(
                path.join(a_conf.external_temp, str(uuid.uuid4()),
                          f'{self.prefix}.temp'), False)

        self.read_lib = path.join(self.temp_dir, 'reads.lib')
        self.contig_dir = safe_makedirs(
            path.join(self.temp_dir, 'intermediate_contigs'), False)

        vm = psutil.virtual_memory()
        logger.log(
            1,
            f"System memory status : {', '.join([f'{k}={v/(1024**2):.2f}MB' for k,v in vm._asdict().items() if type(v) is int])}"
        )
        self.available_memory = int(vm.available * a_conf.max_mem_percent)
        logger.log(
            2, f'Scheduled {self.available_memory/(1024**2):.2f}MB to use.')
예제 #5
0
def filter_regulator(args):

    if hasattr(args, 'disable_filter') and args.disable_filter:
        return True

    valid = True

    try:
        args.start, args.end, *_ = [int(x) if int(x) > 0 else 0
                                    for x in args.keep_region.split(',')]
    except Exception:
        print('Input range is not valid.')
        valid = False

    if hasattr(args, 'temp_dir'):
        args.clean_dir = os.path.join(args.temp_dir, 'cleandata')
    else:
        args.clean_dir = os.path.join(os.getcwd(), 'cleandata')

    try:
        safe_makedirs(args.clean_dir)
    except FileExistsError:
        valid = False
        print('Diretory exists before validating, please check and remove it to prevent data loss.')
    except Exception:
        valid = False
        print('Error occured when validating the directories, please check your permissions or things could be related.')

    if args.quality_valve <= 0 or args.quality_valve >= 255:
        print('Input quality limit is not valid.')
        valid = False

    if args.Ns_valve <= 0:
        print('Input N limit is not valid.')
        valid = False

    if args.percentage_valve <= 0 or args.percentage_valve >= 1:
        print('Input percentage limit is not valid.')
        valid = False
    if args.trimming < 0:
        print('Trimming value is not valid.')
        valid = False
    args.trimming = int(float(args.trimming) * (10**9))
    return valid
예제 #6
0
def universal_regulator(args):

    args.work_dir = os.path.abspath(os.path.join(args.basedir, args.workname))

    args.result_dir = os.path.abspath(os.path.join(
        args.work_dir, args.workname + '.result'))
    args.temp_dir = os.path.abspath(os.path.join(
        args.work_dir, args.workname + '.temp'))
    # Validates the folders
    try:
        safe_makedirs(args.work_dir)
        safe_makedirs(args.result_dir)
        safe_makedirs(args.temp_dir)
    except FileExistsError:
        print('Diretory exist before validating, please check and remove it to prevent data loss.')
        return False
    except Exception:
        print(
            'Error occured when validating the directories, please check your permissions or things could be related.')
        return False

    tr = os.cpu_count()
    tr = tr if tr is not None else 8
    if args.threads <= 0 or args.threads > tr:
        print(
            f"Specified thread number not in range, using {tr} threads instead.")
        args.threads = tr

    args.level = ['code', 'debug', 'info',
                  'warn', 'error'].index(args.level)

    if args.level == 0:
        print("Using logger level 0, this could lead to a very verbose logging.")

    return True
예제 #7
0
 def _graph_prefix(self, kmer):
     return path.join(
         safe_makedirs(path.join(self.temp_dir, f'k{kmer}'), True),
         str(kmer))