def __init__( self, collection, analysis, lsf=False, max_guidetrees=10, tmpdir=None, datatype=None, verbosity=0, populate_cache=True, debug=False, ): optioncheck(analysis, ANALYSES + ['tc', 'TreeCollection']) if analysis == 'tc': self.analysis = 'TreeCollection' else: self.analysis = analysis self.max_guidetrees = max_guidetrees self.lsf = lsf self.collection = collection self.datatype = datatype or collection.datatype self.verbosity = verbosity optioncheck(self.datatype, ['protein', 'dna']) self.tmpdir = tmpdir or collection.tmpdir directorymake(self.tmpdir) self.cache = {} self.history = [] self.debug=debug if populate_cache: self.populate_cache()
def make_alf_dirs_(self): """ DEPRECATED """ alf_dirs = {} for k in range(self.num_classes): dirname = fileIO.join_path(self.tmpdir, "class{0:0>1}".format(k + 1)) alf_dirs[k + 1] = errors.directorymake(dirname) self.alf_dirs = alf_dirs
def __init__( self, class_list, permutations_list, nspecies, subst_model, rate_model, master_tree_generator_method="yule", master_tree=None, class_tree_permuter="nni", gene_length_kappa=1.7719, gene_length_theta=279.9, gene_length_min=10, gamma_rate_param=None, outdir="./", autocorrelated_relaxed_clock=False, uncorrelated_relaxed_clock=False, scale_rates=False, verbosity=0, ): # default errors.optioncheck(master_tree_generator_method, ["yule", "coal", "rtree", "custom"]) errors.optioncheck(class_tree_permuter, ["nni", "spr", "lgt", "genetree"]) if master_tree is None and master_tree_generator_method == "custom": raise Exception("No custom tree was specified") self.num_classes = len(class_list) self.num_genes = sum(class_list) self.class_list = class_list self._master_tree = None self.verbosity = verbosity self.autocorrelated_relaxed_clock = autocorrelated_relaxed_clock self.uncorrelated_relaxed_clock = uncorrelated_relaxed_clock self.scale_rates = scale_rates self.gene_trees = list() if master_tree is None: tree = self.generate_master_tree(master_tree_generator_method, nspecies) self.master_tree = tree self.num_species = nspecies else: self.master_tree = master_tree if len(master_tree) != nspecies: msg = [ "Warning: supplied tree has {0} taxa.".format(len(master_tree)), "Required number is {0}.\n".format(nspecies), "Resetting number of species to match the supplied tree.", ] print("".join(msg)) self.num_species = nspecies self.set_gene_lengths(gene_length_kappa, gene_length_theta, gene_length_min) self.gamma_rate_param = gamma_rate_param self.permuter = class_tree_permuter self.permutations_list = permutations_list self.datatype = datatype self.tmpdir = errors.directorymake(tmpdir) self.outdir = outdir self.generate_class_trees() # sets self.class_trees dict self.make_alf_dirs() # sets self.alf_dirs dict self.write_alf_params() self.get_true_partition()
def make_alf_dirs_(self): """ DEPRECATED """ alf_dirs = {} for k in range(self.num_classes): dirname = fileIO.join_path(self.tmpdir, 'class{0:0>1}'.format(k + 1)) alf_dirs[k + 1] = errors.directorymake(dirname) self.alf_dirs = alf_dirs
def write(self): if hasattr(self, 'result'): errors.directorymake(self.outdir) errors.directorymake(fileIO.join_path(self.outdir, 'base_class_trees')) errors.directorymake(fileIO.join_path(self.outdir, 'gene_trees')) for rec in self.result: filename = fileIO.join_path(self.outdir, rec.name) + '.phy' rec.write_phylip(filename, interleaved=True) for i in range(self.num_classes): tree = self.class_trees[i+1] name = 'base_tree_class{0:0>{1}}.nwk'.format(i+1, len(str(self.num_classes))) filename = fileIO.join_path(self.outdir, 'base_class_trees', name) tree.write_to_file(filename) for i, tree in enumerate(self.gene_trees, start=1): filename = fileIO.join_path(self.outdir, 'gene_trees', tree.name+'.nwk') tree.write_to_file(filename) self.master_tree.write_to_file(fileIO.join_path(self.outdir, 'master_tree.nwk')) filename = fileIO.join_path(self.outdir, 'true_partition.txt') with open(filename, 'w') as partition_file: partition_file.write(repr(self.true_partition))
def write(self): if hasattr(self, 'result'): errors.directorymake(self.outdir) errors.directorymake( fileIO.join_path(self.outdir, 'base_class_trees')) errors.directorymake(fileIO.join_path(self.outdir, 'gene_trees')) for rec in self.result: filename = fileIO.join_path(self.outdir, rec.name) + '.phy' rec.write_phylip(filename, interleaved=True) for i in range(self.num_classes): tree = self.class_trees[i + 1] name = 'base_tree_class{0:0>{1}}.nwk'.format( i + 1, len(str(self.num_classes))) filename = fileIO.join_path(self.outdir, 'base_class_trees', name) tree.write_to_file(filename) for i, tree in enumerate(self.gene_trees, start=1): filename = fileIO.join_path(self.outdir, 'gene_trees', tree.name + '.nwk') tree.write_to_file(filename) self.master_tree.write_to_file( fileIO.join_path(self.outdir, 'master_tree.nwk')) filename = fileIO.join_path(self.outdir, 'true_partition.txt') with open(filename, 'w') as partition_file: partition_file.write(repr(self.true_partition))
def __init__( self, records=None, input_dir=None, trees_dir=None, file_format='fasta', datatype=None, tmpdir=TMPDIR, calc_distances=False, compression=None, debug=False, ): self.tmpdir = directorymake(tmpdir) self._records = None self.debug = debug if records: self.records = records self.datatype = datatype or records[0].datatype optioncheck(self.datatype, ['dna', 'protein']) for rec in records: rec.tmpdir = self.tmpdir elif input_dir: directorycheck(input_dir) self.datatype = optioncheck(datatype, ['dna', 'protein']) optioncheck(file_format, ['fasta', 'phylip']) self.records = self.read_alignments(input_dir, file_format, compression) else: raise Exception('Provide a list of records, ' 'or the path to a set of alignments') self.taxon_set = TaxonSet() if trees_dir: self.read_trees(trees_dir, self.taxon_set) if not self.records: raise NoRecordsError(file_format, input_dir, compression) if calc_distances: self.calc_distances()
def write(self): if hasattr(self, "result"): errors.directorymake(self.outdir) errors.directorymake(fileIO.join_path(self.outdir, "base_class_trees")) errors.directorymake(fileIO.join_path(self.outdir, "gene_trees")) for rec in self.result: filename = fileIO.join_path(self.outdir, rec.name) + ".phy" rec.write_phylip(filename, interleaved=True) for i in range(self.num_classes): tree = self.class_trees[i + 1] name = "base_tree_class{0:0>{1}}.nwk".format(i + 1, len(str(self.num_classes))) filename = fileIO.join_path(self.outdir, "base_class_trees", name) tree.write_to_file(filename) for i, tree in enumerate(self.gene_trees, start=1): filename = fileIO.join_path(self.outdir, "gene_trees", tree.name + ".nwk") tree.write_to_file(filename) self.master_tree.write_to_file(fileIO.join_path(self.outdir, "master_tree.nwk")) filename = fileIO.join_path(self.outdir, "true_partition.txt") with open(filename, "w") as partition_file: partition_file.write(repr(self.true_partition))
def __init__( self, class_list, permutations_list, nspecies, tmpdir, datatype='protein', master_tree_generator_method='yule', master_tree=None, class_tree_permuter='nni', gene_length_kappa=1.7719, gene_length_theta=279.9, gene_length_min=10, gamma_rate_param=None, outdir='./', autocorrelated_relaxed_clock=False, uncorrelated_relaxed_clock=False, scale_rates=False, verbosity=0, ): # default errors.optioncheck(master_tree_generator_method, ['yule', 'coal', 'rtree', 'custom']) errors.optioncheck(class_tree_permuter, ['nni', 'spr', 'lgt', 'genetree' ]) if master_tree is None and master_tree_generator_method == 'custom': raise Exception('No custom tree was specified') self.num_classes = len(class_list) self.num_genes = sum(class_list) self.class_list = class_list self.verbosity=verbosity self.autocorrelated_relaxed_clock = autocorrelated_relaxed_clock self.uncorrelated_relaxed_clock = uncorrelated_relaxed_clock self.scale_rates = scale_rates self.gene_trees = list() if master_tree is None: tree = self.generate_master_tree(master_tree_generator_method, nspecies) self.master_tree = tree self.num_species = nspecies else: self.master_tree = master_tree if len(master_tree) != nspecies: msg = [ 'Warning: supplied tree has {0} taxa.'.format( len(master_tree)), 'Required number is {0}.\n'.format(nspecies), 'Resetting number of species to match the supplied tree.' ] print(''.join(msg)) self.num_species = nspecies self.set_gene_lengths(gene_length_kappa, gene_length_theta, gene_length_min) self.gamma_rate_param = gamma_rate_param self.permuter = class_tree_permuter self.permutations_list = permutations_list self.datatype = datatype self.tmpdir = errors.directorymake(tmpdir) self.outdir = outdir self.generate_class_trees() # sets self.class_trees dict self.make_alf_dirs() # sets self.alf_dirs dict self.write_alf_params() self.get_true_partition()
def make_alf_dirs(self): alf_dirs = {} for i, g in enumerate(self.gene_trees, start=1): dirname = fileIO.join_path(self.tmpdir, g.name) alf_dirs[i] = errors.directorymake(dirname) self.alf_dirs = alf_dirs
def __init__( self, class_list, permutations_list, nspecies, subst_model, rate_model, master_tree_generator_method='yule', master_tree=None, class_tree_permuter='nni', gene_length_kappa=1.7719, gene_length_theta=279.9, gene_length_min=10, gamma_rate_param=None, outdir='./', autocorrelated_relaxed_clock=False, uncorrelated_relaxed_clock=False, scale_rates=False, verbosity=0, ): # default errors.optioncheck(master_tree_generator_method, ['yule', 'coal', 'rtree', 'custom']) errors.optioncheck(class_tree_permuter, ['nni', 'spr', 'lgt', 'genetree']) if master_tree is None and master_tree_generator_method == 'custom': raise Exception('No custom tree was specified') self.num_classes = len(class_list) self.num_genes = sum(class_list) self.class_list = class_list self._master_tree = None self.verbosity = verbosity self.autocorrelated_relaxed_clock = autocorrelated_relaxed_clock self.uncorrelated_relaxed_clock = uncorrelated_relaxed_clock self.scale_rates = scale_rates self.gene_trees = list() if master_tree is None: tree = self.generate_master_tree(master_tree_generator_method, nspecies) self.master_tree = tree self.num_species = nspecies else: self.master_tree = master_tree if len(master_tree) != nspecies: msg = [ 'Warning: supplied tree has {0} taxa.'.format( len(master_tree)), 'Required number is {0}.\n'.format(nspecies), 'Resetting number of species to match the supplied tree.' ] print(''.join(msg)) self.num_species = nspecies self.set_gene_lengths(gene_length_kappa, gene_length_theta, gene_length_min) self.gamma_rate_param = gamma_rate_param self.permuter = class_tree_permuter self.permutations_list = permutations_list self.datatype = datatype self.tmpdir = errors.directorymake(tmpdir) self.outdir = outdir self.generate_class_trees() # sets self.class_trees dict self.make_alf_dirs() # sets self.alf_dirs dict self.write_alf_params() self.get_true_partition()