def pt_pos(self, kplanets, boundaries, inslims, acc_lims):
ndim = 1 + 5 * kplanets + self.nins*2*(self.MOAV+1) + self.totcornum
pos = sp.array([sp.zeros(ndim) for i in range(self.nwalkers)])
k = -2
l = -2
ll = -2 ##
for j in range(ndim):
if j < 5 * kplanets:
k += 2
if j%5==1:
fact = sp.absolute(boundaries[k] - boundaries[k+1]) / self.nwalkers
else:
#fact = sp.absolute(boundaries[k]) / (self.nwalkers)
fact = (sp.absolute(boundaries[k] - boundaries[k+1]) * 2) / (5 * self.nwalkers)
dif = sp.arange(self.nwalkers) * fact * np.random.uniform(0.9, 0.999)
for i in range(self.nwalkers):
if j%5==1:
pos[i][j] = boundaries[k] + (dif[i] + fact/2.0)
else:
#pos[i][j] = boundaries[k] * 0.5 + (dif[i] + fact/2.0)
pos[i][j] = (boundaries[k+1]+3*boundaries[k])/4 + (dif[i] + fact/2.0)
if j == 5 * kplanets: # acc
fact = sp.absolute(acc_lims[0] - acc_lims[1]) / self.nwalkers
dif = sp.arange(self.nwalkers) * fact * np.random.uniform(0.9, 0.999)
for i in range(self.nwalkers):
pos[i][j] = acc_lims[0] + (dif[i] + fact/2.0)
if 5 * kplanets < j < 5*kplanets + self.nins*2*(self.MOAV+1) + 1:
l += 2
fact = sp.absolute(inslims[l] - inslims[l+1]) / self.nwalkers
dif = sp.arange(self.nwalkers) * fact * np.random.uniform(0.9, 0.999)
if (j-5*kplanets-1) % self.nins*2*(self.MOAV+1) == 0: # ojo aqui
jitt_ini = sp.sort(sp.fabs(sp.random.normal(0, 1, self.nwalkers))) * 0.1
dif = jitt_ini * np.random.uniform(0.9, 0.999)
for i in range(self.nwalkers):
pos[i][j] = inslims[l] + (dif[i] + fact/2.0)
if self.totcornum:
if j > 5*kplanets + self.nins*2*(self.MOAV+1):
fact = sp.absolute(acc_lims[0] - acc_lims[1]) / self.nwalkers
dif = sp.arange(self.nwalkers) * fact * np.random.uniform(0.8, 0.999)
for i in range(self.nwalkers):
pos[i][j] = acc_lims[0] + (dif[i] + fact/2.0)
#print(pos[i][j])
pos = sp.array([pos for h in range(self.ntemps)])
return pos
评论列表
文章目录