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
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
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
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.')
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
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
def _graph_prefix(self, kmer): return path.join( safe_makedirs(path.join(self.temp_dir, f'k{kmer}'), True), str(kmer))