def get_genotype_probability(aln_profile, aln_specificity, sigma=0.12):
# 'aln_specificity' should be a set of unit vectors (at least one of the entry is larger than 1.)
num_haps = len(aln_profile)
aln_vec = unit_vector(aln_profile)
genoprob = []
for i in xrange(num_haps):
v1 = unit_vector(aln_specificity[i])
for j in xrange(i, num_haps):
if j == i:
genoprob.append(sum(np.power(aln_vec - v1, 2))) # homozygotes
else:
v2 = unit_vector(aln_specificity[j])
geno_vec = unit_vector(v1 + v2)
# compute directional similarity
genoprob.append(sum(np.power(aln_vec - geno_vec, 2))) # for heterozygotes
genoprob = np.exp(np.array(genoprob) / (-2 * sigma * sigma))
return np.array(genoprob / sum(genoprob))
评论列表
文章目录