def sanity_check(self, skip_warnings=False): A = lambda x, t: t(args.__dict__[x] ) if x in self.args.__dict__ else None null = lambda x: x # the directory files will be dumped into (can exist but must be empty) if filesnpaths.is_file_exists(self.directory, dont_raise=True): filesnpaths.is_output_dir_writable(self.directory) if not filesnpaths.is_dir_empty(self.directory): raise ModellerError( "You cannot give MODELLER a non-empty directory to work in." ) else: filesnpaths.gen_output_directory(self.directory) if not self.lazy_init: self.executable = check_MODELLER(self.executable) # does target_fasta_path point to a fasta file? utils.filesnpaths.is_file_fasta_formatted(self.target_fasta_path) # make sure target_fasta is valid target_fasta = u.SequenceSource(self.target_fasta_path, lazy_init=False) if target_fasta.total_seq != 1: raise ConfigError( "MODELLER :: The input FASTA file must have exactly one sequence. " "You provided one with {}.".format(target_fasta.total_seq)) try: while next(target_fasta): int(target_fasta.id) except: raise ConfigError( "MODELLER :: The defline of this fasta file must be an integer" ) target_fasta.close() # parameter consistencies if self.deviation < 0.5 or self.deviation > 20: self.run.warning( "You realize that deviation is given in angstroms, right? You chose {}" .format(self.deviation)) if self.very_fast and self.num_models > 1: self.num_models = 1 self.run.warning( "Since you chose --very-fast, there will be little difference, if at all, between models. Anvi'o " "authoritatively sets --num-models to 1 to save you time.")
def sanity_check(self): A = lambda x, t: t(args.__dict__[x]) if x in self.args.__dict__ else None null = lambda x: x # the directory files will be dumped into (can exist but must be empty) if filesnpaths.is_file_exists(self.directory, dont_raise=True): filesnpaths.is_output_dir_writable(self.directory) if not filesnpaths.is_dir_empty(self.directory): raise ModellerError("You cannot give MODELLER a non-empty directory to work in.") else: filesnpaths.gen_output_directory(self.directory) # All MODELLER scripts are housed in self.script_folder self.scripts_folder = J(os.path.dirname(anvio.__file__), 'data/misc/MODELLER/scripts') if utils.filesnpaths.is_dir_empty(self.scripts_folder): raise ConfigError("Anvi'o houses all its MODELLER scripts in {}, but your directory \ contains no scripts. Why you do dat?") # check that MODELLER exists if self.args.__dict__['modeller_executable'] if 'modeller_executable' in self.args.__dict__ else None: self.run.info_single("As per your request, anvi'o will use `%s` to run MODELLER." % self.executable, nl_before=1) utils.is_program_exists(self.executable) else: try: utils.is_program_exists(self.executable) except ConfigError as e: raise ConfigError("Anvi'o needs a MODELLER program to be installed on your system. You didn't specify one\ (which can be done with `--modeller-executable`), so anvi'o tried the most recent version\ it knows about: '%s'. If you are certain you have it on your system (for instance you can run it\ by typing '%s' in your terminal window), you may want to send a detailed bug report. If you\ don't have it on your system, check out these installation instructions on our website:\ http://merenlab.org/2016/06/18/installing-third-party-software/#modeller" % (self.executable, self.executable)) self.run.info_single("Anvi'o found the default executable for MODELLER, `%s`, and will\ use it." % self.executable, nl_before=1) self.is_executable_a_MODELLER_program() # does target_fasta_path point to a fasta file? utils.filesnpaths.is_file_fasta_formatted(self.target_fasta_path) # make sure target_fasta is valid target_fasta = u.SequenceSource(self.target_fasta_path, lazy_init=False) if target_fasta.total_seq != 1: raise ConfigError("MODELLER::The input FASTA file must have exactly one sequence.\ You provided one with {}.".format(target_fasta.total_seq)) # (not sanity check but we get self.corresponding_gene_call since target_fasta is opened) while next(target_fasta): self.corresponding_gene_call = target_fasta.id target_fasta.close() # parameter consistencies if self.deviation < 0.5 or self.deviation > 20: self.run.warning("You realize that deviation is given in angstroms, right? You chose {}".format(self.deviation)) if self.very_fast and self.num_models > 1: self.run.warning("Since you chose --very-fast, there will be little difference, if at all, between models. You \ can potentially save a lot of time by setting --num-models to 1.") if self.percent_identical_cutoff <= 20: self.run.warning("Two completely unrelated sequences of same length can expect to have around 10% proper \ percent identicalness... Having this parameter below 20% is probably a bad idea.")