def __call__(self, rate): """ Return the negative likelihood of a column. The negative likelihood is computed using the tree, matrix, and rate. @param rate: the rate of the rate matrix @return: the negative likelihood of the column """ if not rate: inf = float('inf') neginf = float('-inf') states = [tip.state for tip in self.tree.gen_tips()] if len(set(states)) == 1: likelihood = 1 else: likelihood = 0 else: self.rate_matrix.set_rate(rate) likelihood = RateMatrix.get_likelihood(self.tree, self.rate_matrix) return -likelihood