def optimal_t_compressed(self, seq_pair, multiplicity):
"""
Find the optimal distance between the two sequences
"""
def _neg_prob(t, seq_pair, multiplicity):
"""
Probability to observe child given the the parent state, transition
matrix and the time of evolution (branch length).
Parameters
----------
t : double
Branch length (time between sequences)
parent : numpy.array
Parent sequence
child : numpy.array
Child sequence
tm : GTR
Model of evolution
Returns
-------
prob : double
Negative probability of the two given sequences
to be separated by the time t.
"""
return -1.0*self.prob_t_compressed(seq_pair, multiplicity,t, return_log=True)
try:
from scipy.optimize import minimize_scalar
opt = minimize_scalar(_neg_prob,
bounds=[0,ttconf.MAX_BRANCH_LENGTH],
method='bounded',
args=(seq_pair, multiplicity), options={'xatol':1e-8})
new_len = opt["x"]
except:
import scipy
print('legacy scipy', scipy.__version__)
from scipy.optimize import fminbound
new_len = fminbound(_neg_prob,
0,ttconf.MAX_BRANCH_LENGTH,
args=(seq_pair, multiplicity))
opt={'success':True}
if new_len > .9 * ttconf.MAX_BRANCH_LENGTH:
self.logger("WARNING: GTR.optimal_t_compressed -- The branch length seems to be very long!", 4, warn=True)
if opt["success"] != True:
# return hamming distance: number of state pairs where state differs/all pairs
new_len = np.sum(multiplicity[seq_pair[:,1]!=seq_pair[:,0]])/np.sum(multiplicity)
return new_len
评论列表
文章目录