def fig_fff2(Rpc, ds_sim, k, t): test_read_m16_ds() plt.plot(Rpc[:], ds_sim[k, t, :], '-*') nn = ds_sim[k, t, :].size #求样本大小 x_mean = np.mean(ds_sim[k, t, :]) #求算术平均值 x_std = np.std(ds_sim[k, t, :]) #求标准偏差 x_se = x_std / np.sqrt(nn) #求标准误差 dof = nn - 1 #自由度计算 alpha = 1.0 - 0.95 conf_region = st.ppf(1-alpha/2.,dof)*x_std*\ np.sqrt(1.+1./nn)#设置置信区间 plt.errorbar(Rpc[:], ds_sim[k, t, :], yerr=x_std, fmt='-', linewidth=0.5) plt.xlabel(r'$R-Mpc/h$') plt.ylabel(r'$\Delta\Sigma-hM_\odot/{pc^2}$') return ()
def c_fit_datar(x0r): # (mr,d_exr) = x0r rp,mr,mb,d_exr,d_exb,b,a_r,a_b = va_da(p=True) d_exr = x0r #lmr = len(mr)#质量数组的长度 ldr = len(d_exr)#指数数组的长度 #dssimr = np.zeros((lmr,ldr,b),dtype=np.float) dssimr = np.zeros((ldr,b),dtype=np.float) #for k in range(0,lmr): for t in range(0,ldr): #m_ = mr[k] m = mr xr = d_exr[t] #cRp = rp #dssimr[t,:] = c_deltaSigmar #c_Rp,c_Sigmar,c_deltaSigmar = calcu_sigma(cRp,m,xr) #修正 cRp = rp z_r = 0.230 #z_r = 0.105 #计算模型在对应的投射距离上的预测信号取值 #c_表示该变量做继续比较量 #修正 c_Rp,c_Sigmar,c_deltaSigmar = calcu_sigmaz(cRp,m,xr,z_r) dssimr[t,:] = c_deltaSigmar size_ds1 = np.shape(dssimr) print(size_ds1) delta_r = np.zeros(ldr,dtype=np.float) rsa,dssa,ds_errsa = test_read_m16_ds() # for k in range(0,lmr): for t in range(0,ldr): d_r = 0 for n in range(0,b): d_r = d_r+((dssimr[t,n]-dssa[0,n])/ds_errsa[0,n])**2 delta_r[t] = d_r # print(delta_r) #下面用bestr和bestb记录最后比较结果 ''' #下面求取最小值及索引号 aa = delta_r.tolist() xa = aa.index(min(delta_r)) deltar = min(delta_r) delta_r = deltar bestfr = d_exr[xa] dexr = bestfr best_mr = mr*10**dexr print(delta_r) print('mr=',best_mr) print('dexr=',bestfr) ''' return delta_r
def c_fit_datab(x0b): # (mb,d_exb) = x0b rp,mr,mb,d_exr,d_exb,b,a_r,a_b = va_da(p=True) d_exb = x0b # lmb = len(mb)#质量数组的长度 ldb = len(d_exb) dssimb = np.zeros((ldb,b),dtype=np.float) # for k in range(0,lmb): for t in range(0,ldb): #m_ = mb[k] m = mb xb = d_exb[t] #cRp = rp #计算模型在对应的投射距离上的预测信号取值 #c_Rp,c_Sigmab,c_deltaSigmab = calcu_sigma(cRp,m,xb) #dssimb[t,:] = c_deltaSigmab #修正 cRp = rp z_b = 0.246 #z_b = 0.124 #c_表示该变量做继续比较量 #修正 c_Rp,c_Sigmab,c_deltaSigmab = calcu_sigmaz(cRp,m,xb,z_b) dssimb[t,:] = c_deltaSigmab size_ds2 = np.shape(dssimb) print(size_ds2) delta_b = np.zeros(ldb,dtype=np.float) rsa,dssa,ds_errsa = test_read_m16_ds() # for k in range(0,lmb): for t in range(0,ldb): d_b = 0 for n in range(0,b): d_b = d_b+((dssimb[t,n]-dssa[1,n])/ds_errsa[1,n])**2 delta_b[t] = d_b # print(delta_b) #下面用bestr和bestb记录最后比较结果 #下面求取最小值及索引号 ''' bb = delta_b.tolist() xb = bb.index(min(delta_b)) deltab = min(delta_b) delta_b = deltab bestfb = d_exb[xb] dexb = bestfb best_mb = mr*10**dexb print(delta_b) print('mb=',best_mb) print('dexb=',bestfb) ''' return delta_b
def fig_f(inm, Rp, r, rs, r_200, rho_R, sigma, deltasigma): #def fig_f(ff): #inm,Rs,r,rs,r_200,rho_R,sigma,deltasigma=semula_tion(m_,x) lm = len(inm) plt.figure() plt.subplot(121) # delta1 = np.zeros(lm,dtype=np.float) # delta2 = np.zeros(lm,dtype=np.float) for k in range(0, lm): plt.loglog(r[k, :], rho_R[k]) ''' delta1[k] = r_200[k] delta2[k] = rs[k] plt.axvline(delta1[k],ls='--',linewidth=0.5,color='red') plt.axvline(delta2[k],ls='--',linewidth=0.5,color='blue') ''' plt.xlabel(r'$r-Mpc/h$') plt.ylabel(r'$\rho(R)-M_\odot/h$') plt.grid() print('mh_inte=', inm) plt.subplot(122) #下面引入具体的deltasigma数据的观测值,和所给质量比较 test_read_m16_ds() delta1 = np.zeros(lm, dtype=np.float) delta2 = np.zeros(lm, dtype=np.float) for k in range(0, lm): plt.loglog(Rp[k, :], deltasigma[k, :]) delta1[k] = r_200[k] delta2[k] = rs[k] plt.axvline(delta1[k], ls='--', linewidth=0.5, color='red') plt.axvline(delta2[k], ls='--', linewidth=0.5, color='blue') plt.xlabel(r'$R-Mpc/h$') plt.ylabel(r'$\Delta\Sigma-hM_\odot/{pc^2}$') plt.tight_layout() plt.show() out = [inm, rho_R, deltasigma, sigma] return (out)
def c_fit_datar(u): #(mr,mb,d_exr,d_exb) = arr # (mr,d_exr) = x0r rp, mr, mb, d_exr, d_exb, b, a_r, a_b = va_da(p=True) lmr = len(mr) #质量数组的长度 ldr = len(d_exr) #指数数组的长度 dssimr = np.zeros((lmr, ldr, b), dtype=np.float) for k in range(0, lmr): for t in range(0, ldr): m_ = mr[k] xr = d_exr[t] #c_表示该变量做继续比较量 #cRp = rp #c_Rp,c_Sigmar,c_deltaSigmar = calcu_sigma(cRp,m_,xr) #dssimr[t,:] = c_deltaSigmar #修正 cRp = rp z_r = 0.105 #计算模型在对应的投射距离上的预测信号取值 c_Rp, c_Sigmar, c_deltaSigmar = calcu_sigmaz(cRp, m_, xr, z_r) dssimr[k, t, :] = c_deltaSigmar #修正 size_ds1 = np.shape(dssimr) print(size_ds1) fitr = np.zeros((lmr, 2), dtype=np.int) delta_rr = np.zeros((lmr, ldr), dtype=np.float) rsa, dssa, ds_errsa = test_read_m16_ds() for k in range(0, lmr): for t in range(0, ldr): d_r = 0 for n in range(0, size_ds1[2]): d_r = d_r + ( (dssimr[k, t, n] - dssa[0, n]) / ds_errsa[0, n])**2 delta_rr[k, t] = d_r print('size_x^2_r=', np.shape(delta_rr)) #print(delta_rr) #下面这段求每个质量级对应的方差最小值 for k in range(0, lmr): aa = delta_rr[k, :].tolist() #先把np的定义数组转为列表,再寻找索引号,tolist()表示内置函数调用 xa = aa.index(min(delta_rr[k, :])) fitr[k, 0] = k fitr[k, 1] = xa # print(fitr) #比较提取出的五个最小值的最小值为最后结果 deltar = np.zeros(lmr, dtype=np.float) xrr = np.zeros((lmr, 2), dtype=np.float) for k in range(0, lmr): deltar[k] = delta_rr[fitr[k, 0], fitr[k, 1]] xrr[k] = [mr[fitr[k, 0]], d_exr[fitr[k, 1]]] #下面用bestr和bestb记录最后比较结果 bestfr = np.zeros(2, dtype=np.float) #下面求取最小值及索引号 aa = deltar.tolist() xa = aa.index(min(deltar)) delta_r = min(deltar) bestfr = fitr[xa, :] bestr = mr[bestfr[0]] d_ex_r = d_exr[bestfr[1]] dexr1 = d_ex_r ##对比文献修正指数如下 h = 0.673 dexr = d_ex_r + np.log10(bestr * h) best_mr = bestr #作图对比最佳情况 plt.figure() # fig_ff(rp,dssimr,lmr,fitr) l1 = bestfr[0] l2 = bestfr[1] fig_fff2(rp, dssimr, l1, l2) plt.title('Red') plt.show() print(bestfr) print('mr=', best_mr) print('dexr=', dexr1) print('co_dex=', dexr) print('corr_mr=', 10**dexr) print('x^2=', delta_r) # return rp,best_mr,dexr,a,delta_r,a,b,yy return delta_r, lmr, dssimr, fitr, delta_rr, xrr, dexr1, ldr
def c_fit_datab(v): #(mr,mb,d_exr,d_exb) = arr # (mb,d_exb) = x0b rp, mr, mb, d_exr, d_exb, b, a_r, a_b = va_da(p=True) lmb = len(mb) #质量数组的长度 ldb = len(d_exb) dssimb = np.zeros((lmb, ldb, b), dtype=np.float) for k in range(0, lmb): for t in range(0, ldb): m_ = mb[k] xb = d_exb[t] #c_表示该变量做继续比较量 #cRp = rp #c_Rp,c_Sigmab,c_deltaSigmab = calcu_sigma(cRp,m_,xb) #dssimb[t,:] = c_deltaSigmab #修正 cRp = rp z_b = 0.124 #计算模型在对应的投射距离上的预测信号取值 c_Rp, c_Sigmab, c_deltaSigmab = calcu_sigmaz(cRp, m_, xb, z_b) dssimb[k, t, :] = c_deltaSigmab size_ds2 = np.shape(dssimb) print(size_ds2) fitb = np.zeros((lmb, 2), dtype=np.int) delta_bb = np.zeros((lmb, ldb), dtype=np.float) rsa, dssa, ds_errsa = test_read_m16_ds() for k in range(0, lmb): for t in range(0, ldb): d_b = 0 for n in range(0, size_ds2[2]): d_b = d_b + ( (dssimb[k, t, n] - dssa[1, n]) / ds_errsa[1, n])**2 delta_bb[k, t] = d_b print('size_x^2_b=', np.shape(delta_bb)) #print(delta_bb) #下面这段求每个质量级对应的方差最小值 for k in range(0, lmb): bb = delta_bb[k, :].tolist() #先把np的定义数组转为列表,再寻找索引号,tolist()表示内置函数调用 xb = bb.index(min(delta_bb[k, :])) fitb[k, 0] = k fitb[k, 1] = xb # print(fitr) # print(fitb) #比较提取出的五个最小值的最小值为最后结果 xbb = np.zeros((lmb, 2), dtype=np.float) deltab = np.zeros(lmb, dtype=np.float) for k in range(0, lmb): deltab[k] = delta_bb[fitb[k, 0], fitb[k, 1]] xbb[k] = [mb[fitb[k, 0]], d_exb[fitb[k, 1]]] #下面用bestr和bestb记录最后比较结果 bestfb = np.zeros(2, dtype=np.float) #下面求取最小值及索引号 bb = deltab.tolist() xb = bb.index(min(deltab)) delta_b = min(deltab) bestfb = fitb[xb, :] bestb = mb[bestfb[0]] d_ex_b = d_exb[bestfb[1]] dexb1 = d_ex_b ##对比文献,修正指数如下 dexb = d_ex_b + np.log10(bestb) best_mb = bestb #作图对比最佳情况 plt.figure() # fig_ff(rp,dssimr,lmr,fitr) l1 = bestfb[0] l2 = bestfb[1] fig_fff2(rp, dssimb, l1, l2) plt.title('blue') plt.show() print(bestfb) print('co_dex=', dexb) print('dex=', dexb1) print('mb=', best_mb) print('corr_mb=', 10**dexb) print('x^2=', delta_b) # return rp,best_mb,,dexb,a,b,yy,delta_b return delta_b, lmb, dssimb, fitb, delta_bb, xbb, dexb1, ldb
def fit_datab(y): h = 0.673 #先找出观测值对应的rp rsa, dssa, ds_errsa = test_read_m16_ds() # print('ds=',dssa) # print('ds_err=',ds_errsa) #print('rp=',rsa) a = np.shape(dssa) print('size a=', a) ##注意到观测数值选取的是物理坐标,需要靠里尺度银子修正,修正如下 z_b = 0.246 #z_b = 0.124 a_b = 1 / (1 + z_b) ##此时对于预测的R也要做修正 rp = np.array( [rsa[0, k] for k in range(0, len(rsa[0, :])) if rsa[0, k] * h <= 2]) # rp = [rsa[0,k] for k in range(0,len(rsa[0,:])) if rsa[0,k]*h<=2] # rp = rsa[0,:] #该句直接对数组筛选,计算2Mpc以内(保证NFW模型适用的情况下)信号 print(rp) b = len(rp) m, m_dex, lmw, lml = dolad_data(m=True, hz=True) #下面做两组数据的方差比较,注意不能对观测数据进行插值 #比较方法,找出观测的sigma数值对应的Rp,再根据模型计算此时的模型数值Sigma(该步以完成) ds_simb = np.zeros((lmw, lml, b), dtype=np.float) rb = np.zeros((lmw, lml), dtype=np.float) for k in range(0, lmw): for t in range(0, lml): m_ = m[k, t] x = m_dex[k] #Rpc = rp #Rpc,Sigma,deltaSigma = calcu_sigma(Rpc,m_,x,z_b) #ds_simb[k,t,:] = deltaSigma #对比文献,把物理距离转为共动距离 Rpc = rp #计算模型在对应的投射距离上的预测信号取值 Rpc, Sigma, deltaSigma, rs = calcu_sigmaz(Rpc, m_, x, z_b) #预测信号也做修正 ds_simb[k, t, :] = deltaSigma rb[k, t] = rs yy = np.shape(ds_simb) #print('rb=',rb)#输出查看ds_sim的维度,即模型预测下的透镜信号 #比较观测的sigma和预测的Sigma,比较结果用fitr和fitb记录比较结果 fitb = np.zeros((lmw, 2), dtype=np.int) delta_b = np.zeros((lmw, lml), dtype=np.float) for k in range(0, lmw): for t in range(0, lml): d_b = 0 for n in range(0, yy[2]): d_b = d_b + ( (ds_simb[k, t, n] - dssa[1, n]) / ds_errsa[1, n])**2 delta_b[k, t] = d_b #print(delta_b) #下面这段求每个质量级对应的方差最小值 for k in range(0, lmw): #先把np的定义数组转为列表,再寻找索引号,tolist()表示内置函数调用 bb = delta_b[k, :].tolist() xb = bb.index(min(delta_b[k, :])) fitb[k, 0] = k fitb[k, 1] = xb print(fitb) #下面做图比较几个最佳预测值与观测的对比情况 Rpc = rp fig_ff(Rpc, ds_simb, lmw, fitb) plt.title('B-galaxy') plt.show() #比较提取出的五个最小值的最小值为最后结果 deltab = np.zeros(lmw, dtype=np.float) for k in range(0, lmw): deltab[k] = delta_b[fitb[k, 0], fitb[k, 1]] #下面用bestr和bestb记录最后比较结果 bestfb = np.zeros(2, dtype=np.float) bb = deltab.tolist() xb = bb.index(min(deltab)) bestfb = fitb[xb, :] bestb = m[bestfb[0], bestfb[1]] best_mb = bestb dexb1 = m_dex[bestfb[0]] #下面是与文献对比做的修正 dexb = m_dex[bestfb[0]] + np.log10(bestb * h) #作图对比最佳情况 plt.figure() k = bestfb[0] t = bestfb[1] fig_fff2(rp, ds_simb, k, t) plt.title('Blue') #plt.savefig('fit_b.png',dpi=600) plt.show() print('x^2=', min(deltab)) print('mb=', best_mb) #此句质量计算正常 print('positionb=', bestfb) print('dexb=', dexb1) print('co_dexb=', dexb) print('corr_mb=', 10**dexb) return rp, best_mb, dexb1, a, b, yy, dexb, a_b, delta_b
def fit_datar(y): h = 0.673 #先找出观测值对应的rp rsa, dssa, ds_errsa = test_read_m16_ds() # print('ds=',dssa) # print('ds_err=',ds_errsa) #print('rp=',rsa) a = np.shape(dssa) print('size a=', a) ##注意到观测数值选取的是物理坐标,需要靠里尺度银子修正,修正如下 z_r = 0.230 #z_r = 0.105 a_r = 1 / (1 + z_r) ##此时对于预测的R也要做修正 rp = np.array( [rsa[0, k] for k in range(0, len(rsa[0, :])) if rsa[0, k] * h <= 2]) #rp = np.array([rsa[0,k] for k in range(0,len(rsa[0,:])) if rsa[0,k]*h<=5]) #rp = rsa[0,:] #该句直接对数组筛选,计算2Mpc以内(保证NFW模型适用的情况下)信号 print(rp) b = len(rp) m, m_dex, lmw, lml = dolad_data(m=True, hz=True) #下面做两组数据的方差比较,注意不能对观测数据进行插值 #比较方法,找出观测的sigma数值对应的Rp,再根据模型计算此时的模型数值Sigma(该步以完成) ds_simr = np.zeros((lmw, lml, b), dtype=np.float) rr = np.zeros((lmw, lml), dtype=np.float) for k in range(0, lmw): for t in range(0, lml): m_ = m[k, t] x = m_dex[k] #Rpc = rp #Rpc,Sigma,deltaSigma = calcu_sigma(Rpc,m_,x) #ds_simr[k,t,:] = deltaSigma #对比文献,加入尺度因子修正如下,把物理的距离转为共动的距离 #计算模型在对应的投射距离上的预测信号取值 Rpc = rp Rpc, Sigma, deltaSigma, rs = calcu_sigmaz(Rpc, m_, x, z_r) #对预测信号做相应的变化,把共动的转为物理的 ds_simr[k, t, :] = deltaSigma rr[k, t] = rs yy = np.shape(ds_simr) #print('rr=',rr)#输出查看ds_sim的维度,即模型预测下的透镜信号 #比较观测的sigma和预测的Sigma,比较结果用fitr和fitb记录比较结果 fitr = np.zeros((lmw, 2), dtype=np.int) delta_r = np.zeros((lmw, lml), dtype=np.float) for k in range(0, lmw): for t in range(0, lml): d_r = 0 for n in range(0, yy[2]): d_r = d_r + ( (ds_simr[k, t, n] - dssa[0, n]) / ds_errsa[0, n])**2 delta_r[k, t] = d_r #print(delta_r) #下面这段求每个质量级对应的方差最小值 for k in range(0, lmw): #先把np的定义数组转为列表,再寻找索引号,tolist()表示内置函数调用 aa = delta_r[k, :].tolist() xa = aa.index(min(delta_r[k, :])) fitr[k, 0] = k fitr[k, 1] = xa print(fitr) #下面做图比较几个最佳预测值与观测的对比情况 Rpc = rp fig_ff(Rpc, ds_simr, lmw, fitr) plt.title('R-galaxy') plt.show() #比较提取出的五个最小值的最小值为最后结果 deltar = np.zeros(lmw, dtype=np.float) for k in range(0, lmw): deltar[k] = delta_r[fitr[k, 0], fitr[k, 1]] #下面用bestr和bestb记录最后比较结果 bestfr = np.zeros(2, dtype=np.float) aa = deltar.tolist() xa = aa.index(min(deltar)) bestfr = fitr[xa, :] bestr = m[bestfr[0], bestfr[1]] best_mr = bestr dexr1 = m_dex[bestfr[0]] #下面两句是为与文献对比做的修正 dexr = m_dex[bestfr[0]] + np.log10(bestr * h) #作图对比最佳情况 plt.figure() k = bestfr[0] t = bestfr[1] fig_fff2(rp, ds_simr, k, t) plt.title('Red') #plt.savefig('fit_r.png',dpi=600) plt.show() print('x^2=', min(deltar)) print('mr=', best_mr) #此句质量计算正常 print('positionr=', bestfr) print('dexr=', dexr1) print('co_dexr=', dexr) print('corr_mr=', 10**dexr) return rp, best_mr, dexr1, a, b, yy, dexr, a_r, delta_r
def fit_datab(y): #def fit_datab(mass_bin): h = 0.7 #先找出观测值对应的rp rsa,dssa,ds_errsa = test_read_m16_ds() #rsa,dssa,ds_errsa = test_read_m16_ds(mass_bin=mass_bin) # print('ds=',dssa) # print('ds_err=',ds_errsa) #print('rp=',rsa) a = np.shape(dssa) print('size a=',a) ##注意到观测数值选取的是物理坐标,需要靠里尺度银子修正,修正如下 z_b = 0.1 #z_b = 0.124 a_b = 1/(1+z_b) ##此时对于预测的R也要做修正 rp = np.array([rsa[0,k] for k in range(0,len(rsa[0,:])) if rsa[0,k]*h<=5]) # rp = [rsa[0,k] for k in range(0,len(rsa[0,:])) if rsa[0,k]*h<=2] # rp = rsa[0,:] #该句直接对数组筛选,计算2Mpc以内(保证NFW模型适用的情况下)信号 print(rp) b = len(rp) mr,mb,N = input_mass_bin(v=True) #m,N = input_mass_bin(v=True) #下面做两组数据的方差比较,注意不能对观测数据进行插值 #比较方法,找出观测的sigma数值对应的Rp,再根据模型计算此时的模型数值Sigma(该步以完成) ds_simb = np.zeros((N,b),dtype=np.float) rb = np.zeros(N,dtype=np.float) for t in range(0,N): m_ = 1 x = mb[t] #x = m[t] #Rpc = rp #Rpc,Sigma,deltaSigma = calcu_sigma(Rpc,m_,x) #ds_simr[k,t,:] = deltaSigma #对比文献,加入尺度因子修正如下,把物理的距离转为共动的距离 #计算模型在对应的投射距离上的预测信号取值 Rpc = rp Rpc,Sigma,deltaSigma,rs = calcu_sigmaz(Rpc,m_,x,z_b) #对预测信号做相应的变化,把共动的转为物理的 ds_simb[t,:] = deltaSigma rb[t] = rs fig_fff1(rp,ds_simb,t) plt.title('Blue') #plt.legend(m[:],bbox_to_anchor=(1,1)) plt.legend(mb[:]) #plt.savefig('Fit-blue.png',dpi=600) #plt.savefig('compare_2_bl.png',dpi=600) plt.show() yy = np.shape(ds_simb) #print('rr=',rr)#输出查看ds_sim的维度,即模型预测下的透镜信号 #比较观测的sigma和预测的Sigma,比较结果用fitr和fitb记录比较结果 delta_b = np.zeros(N,dtype=np.float) for t in range(0,N): d_b = 0 for n in range(0,yy[1]): d_b = d_b+((ds_simb[t,n]-dssa[1,n])/ds_errsa[1,n])**2 delta_b[t] = d_b #print(delta_r) #下面这段求每个质量级对应的方差最小值 deltab = delta_b.tolist() xb = deltab.index(min(deltab)) bestfmb = mb[xb] #bestfmb = m[xb] best_mb = bestfmb+np.log10(h) #作图对比最佳情况 ''' plt.figure() k = xb fig_fff1(rp,ds_simb,k) plt.title('Blue') #plt.savefig('fit_r.png',dpi=600) plt.show() ''' print('x^2=',min(deltab)) print('co_mb=',best_mb) print('mb=',bestfmb) print('positionr=',xb) return rp,best_mb,delta_b,bestfmb