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)
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
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)
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)