Ejemplo n.º 1
0
    def optimize_model(self, gtree, aln):
        """Optimizes the IQTREE model"""
	
        fd, btreefile = tempfile.mkstemp('.btree')
        os.close(fd)
        gtree.write(btreefile)

        fd, seqfile = tempfile.mkstemp('.align')
        os.close(fd)
        out = util.open_stream(seqfile, "w")
        phylip.write_phylip_align(out, aln, strip_names=False)
        out.close()
        self.seqfile = seqfile

        fd, bsitelhfile = tempfile.mkstemp('.bsitelh')
        os.close(fd)
	
        os.system('iqtree-omp -redo -nt %s -m %s -st %s -s %s -te %s -pre %s.treefix_tmp -wsl > /dev/null' % (self.cpu, self.model, self.type, self.seqfile, btreefile, self.pre))
        
        f = open("%s.treefix_tmp.sitelh" % self.pre, 'r')
        self.bsitelh = f.readline().replace("1", "2", 1) + f.readline().replace("Site_Lh", "Tree1", 1)
        f.close()

        os.system('rm %s.treefix_tmp.*' % self.pre)
        os.remove(btreefile)
Ejemplo n.º 2
0
 def optimize_model(self, gtree, aln):
     """Optimizes the IQTREE model"""
      
     fd, btreefile = tempfile.mkstemp('.btree')
     os.close(fd)
     gtree.write(btreefile)
     self.btreefile = btreefile
     
     fd, seqfile = tempfile.mkstemp('.align')
     os.close(fd)
     out = util.open_stream(seqfile, "w")
     phylip.write_phylip_align(out, aln, strip_names=False)
     out.close()
     self.seqfile = seqfile
Ejemplo n.º 3
0
    def optimize_model(self, gtree, aln):
        """Optimizes the RAxML model"""
        StatModel.optimize_model(self, gtree, aln)

        fd, treefile = tempfile.mkstemp('.tree')
        os.close(fd)
        gtree.write(treefile)

        fd, seqfile = tempfile.mkstemp('.align')
        os.close(fd)
        out = util.open_stream(seqfile, "w")
        phylip.write_phylip_align(out, aln, strip_names=False)
        out.close()

        self._raxml.optimize_model(treefile, seqfile,
                                   "-m %s -e %s -n test" % (self.model, self.eps))

        os.remove(treefile)
        os.remove(seqfile)
Ejemplo n.º 4
0
    def optimize_model(self, gtree, aln):
        """Optimizes the IQTREE model"""
        
        fd, btreefile = tempfile.mkstemp('.btree')
        os.close(fd)
        gtree.write(btreefile)
        self.btreefile = btreefile

        fd, seqfile = tempfile.mkstemp('.align')
        os.close(fd)
        out = util.open_stream(seqfile, "w")
        phylip.write_phylip_align(out, aln, strip_names=False)
        out.close()
        self.seqfile = seqfile
	
        # optimize all model parameters and create a model file for DNA data, or optimize the gamma shape parameter for other data type if necessary
        if self.type == "DNA" or "+G" in self.model:
            # optimize model parameters on user specified tree
            os.system('iqtree-omp -redo -nt %s -m %s -st %s -s %s -te %s -pre %s.treefix_tmp > /dev/null' % (self.cpu, self.model, self.type, self.seqfile, self.btreefile, self.pre))
            # DNA data
            if self.type == "DNA":
                # create model file for DNA data
                fd, modelfile = tempfile.mkstemp('.model')
                os.close(fd)
                self.modelfile = modelfile
                # read estimated model parameters from IQTREE output
                fi = open("%s.treefix_tmp.iqtree" % self.pre, 'r')
                fo = open(modelfile, 'w')
                line = fi.readline()
                while line:
                    if "Rate parameter R:" in line:
                        fi.readline()
                        while True:
                            line = fi.readline().rstrip()
                            if ":" in line or "=" in line:
                                param = re.split('\s+', line)
                                fo.write("%s\n" % param[-1])
                            else:
                                break
                    elif "State frequencies:" in line:
                        if "equal frequencies" in line:
                            for i in range(4):
                                fo.write("0.25\n")
                        else:
                            fi.readline()
                            while True:
                                line = fi.readline().rstrip()
                                if ":" in line or "=" in line:
                                    param = re.split('\s+', line)
                                    fo.write("%s\n" % param[-1])
                                else:
                                    break
                    elif "Gamma shape alpha:" in line:
                        param = re.split('\s+', line)
                        self.gamma = param[3]
                        break
                    line = fi.readline()
                fi.close()
                fo.close()
                # set command for stats
                if "+G" in self.model:
                    if self.test == "AU":
                        self.cmd = 'iqtree-omp -redo -nt %s -m %s+G+Fu -a %s -st %s -s %s -te %s -z %s.treefix_tmp.tree -zb %s -au -pre %s.treefix_tmp > /dev/null' % (self.cpu, self.modelfile, self.gamma, self.type, self.seqfile, self.btreefile, self.pre, self.rep, self.pre)
                    else:
                        self.cmd = 'iqtree-omp -redo -nt %s -m %s+G+Fu -a %s -st %s -s %s -te %s -z %s.treefix_tmp.tree -zb %s -pre %s.treefix_tmp > /dev/null' % (self.cpu, self.modelfile, self.gamma, self.type, self.seqfile, self.btreefile, self.pre, self.rep, self.pre)
                else:
                    if self.test == "AU":
                        self.cmd = 'iqtree-omp -redo -nt %s -m %s+Fu -st %s -s %s -te %s -z %s.treefix_tmp.tree -zb %s -au -pre %s.treefix_tmp > /dev/null' % (self.cpu, self.modelfile, self.type, self.seqfile, self.btreefile, self.pre, self.rep, self.pre)
                    else:
                        self.cmd = 'iqtree-omp -redo -nt %s -m %s+Fu -st %s -s %s -te %s -z %s.treefix_tmp.tree -zb %s -pre %s.treefix_tmp > /dev/null' % (self.cpu, self.modelfile, self.type, self.seqfile, self.btreefile, self.pre, self.rep, self.pre)
            # other data type
            elif "+G" in self.model:
                # read estimated model parameters from IQTREE outptut
                fi = open("%s.treefix_tmp.iqtree" % self.pre, 'r')
                for line in fi:
                    if "Gamma shape alpha:" in line:
                        param = re.split('\s+', line)
                        self.gamma = param[3]
                        break
                fi.close()
                # set command for stats
                if self.test == "AU":
                    self.cmd = 'iqtree-omp -redo -nt %s -m %s -a %s -st %s -s %s -te %s -z %s.treefix_tmp.tree -zb %s -au -pre %s.treefix_tmp > /dev/null' % (self.cpu, self.model, self.gamma, self.type, self.seqfile, self.btreefile, self.pre, self.rep, self.pre)
                else:
                    self.cmd = 'iqtree-omp -redo -nt %s -m %s -a %s -st %s -s %s -te %s -z %s.treefix_tmp.tree -zb %s -pre %s.treefix_tmp > /dev/null' % (self.cpu, self.model, self.gamma, self.type, self.seqfile, self.btreefile, self.pre, self.rep, self.pre)
            # clean up files generated during model optimization
            os.system('rm %s.treefix_tmp.*' % self.pre)
        else:
            # set command for stats
            if self.test == "AU":
                self.cmd = 'iqtree-omp -redo -nt %s -m %s -st %s -s %s -te %s -z %s.treefix_tmp.tree -zb %s -au -pre %s.treefix_tmp > /dev/null' % (self.cpu, self.model, self.type, self.seqfile, self.btreefile, self.pre, self.rep, self.pre)
            else:
                self.cmd = 'iqtree-omp -redo -nt %s -m %s -st %s -s %s -te %s -z %s.treefix_tmp.tree -zb %s -pre %s.treefix_tmp > /dev/null' % (self.cpu, self.model, self.type, self.seqfile, self.btreefile, self.pre, self.rep, self.pre)