示例#1
0
    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()
示例#2
0
 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
示例#3
0
 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()
示例#4
0
 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
示例#5
0
    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))
示例#6
0
 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))
示例#7
0
    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()
示例#8
0
 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))
示例#9
0
 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()
示例#10
0
 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
示例#11
0
 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()
示例#12
0
 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