sigma_init= 20.0 h_m2m= 0.1 # set a guess xnm_m2m = 0.005 # total surface_mass density Munit/Lunit(kpc)^2 totmass_init = 1000.0 print(' initial mass density (Msun/pc^2) =', \ totmass_init*munit_msun/(lunit_pc**2)) zh_init = sigma_init**2./totmass_init # Where 2\pi G= 1 so units of zh are ~311 pc tdyn = zh_init/sigma_init print(' initial zh (kpc), tdyn (Myr)=', zh_init, tdyn*yr_s/1.0e6) z_m2m, vz_m2m, w_init= wendym2m.sample_sech2(sigma_init,totmass_init,n=n_m2m) z_out= numpy.linspace(zmin, zmax, 101) dens_init= xnm_m2m*hom2m.compute_dens(z_m2m,zsun_true,z_out,h_m2m,w=w_init) v2_init= hom2m.compute_v2(z_m2m,vz_m2m,zsun_true,z_out,h_m2m,w=w_init) v_init= hom2m.compute_v(z_m2m,vz_m2m,zsun_true,z_out,h_m2m,w=w_init) bovy_plot.bovy_print(axes_labelsize=17.,text_fontsize=12.,xtick_labelsize=15.,ytick_labelsize=15.) ### Set initial DM density, i.e. omega # dark matter density (Msun pc^-3) # conventional value # rhodm_msunpc3= 0.01 rhodm_msunpc3= 0.01 # omega = sqrt(4 pi G rho_dm), 2 pi G=1, omega_m2m = numpy.sqrt(2.0*rhodm_msunpc3/densunit_msunpc3) print(' initial DM density (Msun pc^-3) =', rhodm_msunpc3) print(' omega(initial)=', omega_m2m) ### Set M2M parameters step= 0.05*tdyn nstep= 4000
z_mock_i = z_mock[indx] vz_mock_i = vz_mock[indx] # assuming m_mock are constant. v2_obs_sam[i] = hom2m.compute_v2(z_mock_i, vz_mock_i, zsun_true, z_obs, h_obs) v2_obs = numpy.mean(v2_obs_sam, axis=0) v2_obs_noise = numpy.std(v2_obs_sam, axis=0) print('Bootstrap with a single output') print('v2_obs=', v2_obs) print('v2_obs_noise=', v2_obs_noise) # no additional noise # v2_obs+= numpy.random.normal(size=v2_obs.shape)*v2_obs_noise # <v>, but not used for constraints. # We only observe the v2 at a few z (same as before) v_obs = hom2m.compute_v(z_mock, vz_mock, zsun_true, z_obs, h_obs) # use constant noise v_obs_noise = numpy.zeros_like(v_obs) + 0.5 numpy.random.seed( 42) # probably best to set a seed somewhere so the data is always the same # Bootstrap error estimate nbs_sam = 100 v_obs_sam = numpy.zeros((nbs_sam, len(v_obs))) for i in range(nbs_sam): indx = numpy.random.randint(len(z_mock), size=len(z_mock)) z_mock_i = z_mock[indx] vz_mock_i = vz_mock[indx] # assuming m_mock are constant. v_obs_sam[i] = hom2m.compute_v(z_mock_i, vz_mock_i, zsun_true, z_obs, h_obs) v_obs = numpy.mean(v_obs_sam, axis=0)
vmax = 6.0 # for vz histogram vzmin = -50.0 vzmax = 50.0 sfmdenmin = 0.0 sfmdenmax = 50.0 dmdenmin = 0.0 dmdenmax = 0.03 ### Set final values z_out = numpy.linspace(zmin, zmax, 101) v2max = 1000.0 dens_final = xnm_out[-1] * hom2m.compute_dens( z_m2m, zsun_true, z_out, h_m2m, w=w_out) v2_final = hom2m.compute_v2(z_m2m, vz_m2m, zsun_true, z_out, h_m2m, w=w_out) v_final = hom2m.compute_v(z_m2m, vz_m2m, zsun_true, z_out, h_m2m, w=w_out) ### Sample w, omega and Xnm # default sample step step_sam = 0.05 * tdyn nstep_sam = 100 # eps = [10.0**-4.0, 10.0**0.0, 10.0**-8.0] eps = [1.0**-2.0, 10.0**0.0, 10.0**-8.0] # used for weight sampling only eps_sam = eps[0] nsamples = 50 s_low, s_high = 16, -16 smooth = None #1./step/100. st96smooth = False mu = 0.0 h_m2m = 0.1