def finish(self): lks = [] if self.lk_mode == "phyml": for job in self.jobs: if job.jobcat != "bionj": continue phyml_job = job tree_file = pjoin(phyml_job.jobdir, self.alg_phylip_file+"_phyml_tree.txt") stats_file = pjoin(phyml_job.jobdir, self.alg_phylip_file+"_phyml_stats.txt") tree = PhyloTree(tree_file) m = re.search('Log-likelihood:\s+(-?\d+\.\d+)', open(stats_file).read()) lk = float(m.groups()[0]) tree.add_feature("lk", lk) tree.add_feature("model", phyml_job.args["--model"]) lks.append([float(tree.lk), tree.model, tree]) elif self.lk_mode == "raxml": for job in self.jobs: if job.jobcat != "raxml": continue raxml_job = job lk = open(pjoin(raxml_job.jobdir, "RAxML_log.%s" %raxml_job.args["-n"])).readline().split()[1] tree = PhyloTree(raxml_job.args["-t"]) tree.add_feature("lk", lk) tree.add_feature("model", raxml_job.model) lks.append([float(tree.lk), tree.model, tree]) # sort lks in ASC order lks.sort() # choose the model with higher likelihood, the lastone in the list best_model = lks[-1][1] best_tree = lks[-1][2] log.log(22, "%s model selected from the following lk values:\n%s" %(best_model, '\n'.join(map(str, lks)))) ModelTesterTask.store_data(self, best_model, lks)
def finish(self): lks = [] if self.lk_mode == "phyml": for job in [j for j in self.jobs if j.flag == "phyml"]: tree_file = os.path.join(job.jobdir, self.alg_basename+"_phyml_tree.txt") stats_file = os.path.join(j.jobdir, self.alg_basename+"_phyml_stats.txt") tree = PhyloTree(tree_file) m = re.search('Log-likelihood:\s+(-?\d+\.\d+)', open(stats_file).read()) lk = float(m.groups()[0]) tree.add_feature("lk", lk) tree.add_feature("model", job.args["--model"]) lks.append([float(tree.lk), tree.model, tree]) elif self.lk_mode == "raxml": for job in [j for j in self.jobs if j.flag == "raxml"]: lk = open(os.path.join(job.jobdir, "RAxML_log.%s" %job.args["-n"])).readline().split()[1] tree = PhyloTree(job.args["-t"]) tree.add_feature("lk", lk) tree.add_feature("model", job.model) lks.append([lk, tree.model, tree]) lks.sort() lks.reverse() # choose the model with higher likelihood best_model = lks[-1][1] best_tree = lks[-1][2] open(self.best_model_file, "w").write(best_model) if self.tree_file: tree.write(self.tree_file) ModelTesterTask.finish(self)