diff --git a/Paper/DirectedMC/generate_data.py b/Paper/DirectedMC/generate_data.py index c2f71beabf1ec3651be63a5416631cc6924bf872..8df9aa197aa4607d24ec09eb1cf7fcb23f000664 100644 --- a/Paper/DirectedMC/generate_data.py +++ b/Paper/DirectedMC/generate_data.py @@ -2,6 +2,8 @@ import pyfstat import numpy as np import os import sys +import time + ID = sys.argv[1] outdir = sys.argv[2] @@ -32,15 +34,19 @@ DeltaF1 = VF1 * np.sqrt(45/4.)/(np.pi*Tspan**2) depths = np.linspace(100, 400, 7) depths = [125, 175] -run_setup = [((10, 0), 16, False), - ((10, 0), 5, False), - ((10, 10), 1, False)] +nsteps = 20 +run_setup = [((nsteps, 0), 20, False), + ((nsteps, 0), 7, False), + ((nsteps, 0), 2, False), + ((nsteps, nsteps), 1, False)] + for depth in depths: + startTime = time.time() h0 = sqrtSX / float(depth) r = np.random.uniform(0, 1) theta = np.random.uniform(0, 2*np.pi) - F0 = F0_center + 3*np.sqrt(r)*np.cos(theta)/(np.pi**2 * Tspan**2) - F1 = F1_center + 45*np.sqrt(r)*np.sin(theta)/(4*np.pi**2 * Tspan**4) + F0 = F0_center + np.random.uniform(-0.5, 0.5)*DeltaF0 + F1 = F1_center + np.random.uniform(-0.5, 0.5)*DeltaF1 psi = np.random.uniform(-np.pi/4, np.pi/4) phi = np.random.uniform(0, 2*np.pi) @@ -81,7 +87,8 @@ for depth in depths: d, maxtwoF = mcmc.get_max_twoF() dF0 = F0 - d['F0'] dF1 = F1 - d['F1'] + runTime = time.time() - startTime with open(results_file_name, 'a') as f: - f.write('{} {:1.8e} {:1.8e} {:1.8e} {:1.8e} {:1.8e}\n' - .format(depth, h0, dF0, dF1, predicted_twoF, maxtwoF)) + f.write('{} {:1.8e} {:1.8e} {:1.8e} {:1.8e} {:1.8e} {}\n' + .format(depth, h0, dF0, dF1, predicted_twoF, maxtwoF, runTime)) os.system('rm {}/*{}*'.format(outdir, label)) diff --git a/Paper/DirectedMC/generate_table.py b/Paper/DirectedMC/generate_table.py new file mode 100644 index 0000000000000000000000000000000000000000..c1e8274ffde31c10f65ce7de994ed94819f0af34 --- /dev/null +++ b/Paper/DirectedMC/generate_table.py @@ -0,0 +1,76 @@ +import pyfstat +import numpy as np + +outdir = 'data' + +label = 'directed_setup' +data_label = '{}_data'.format(label) + +# Properties of the GW data +sqrtSX = 2e-23 +tstart = 1000000000 +Tspan = 100*86400 +tend = tstart + Tspan + +# Fixed properties of the signal +F0_center = 30 +F1_center = 1e-10 +F2 = 0 +Alpha = 5e-3 +Delta = 6e-2 +tref = .5*(tstart+tend) + + +VF0 = VF1 = 100 +DeltaF0 = VF0 * np.sqrt(3)/(np.pi*Tspan) +DeltaF1 = VF1 * np.sqrt(45/4.)/(np.pi*Tspan**2) + +depth = 100 + +nsteps = 50 +run_setup = [((nsteps, 0), 20, False), + ((nsteps, 0), 7, False), + ((nsteps, 0), 2, False), + ((nsteps, nsteps), 1, False)] + +h0 = sqrtSX / float(depth) +r = np.random.uniform(0, 1) +theta = np.random.uniform(0, 2*np.pi) +F0 = F0_center + 3*np.sqrt(r)*np.cos(theta)/(np.pi**2 * Tspan**2) +F1 = F1_center + 45*np.sqrt(r)*np.sin(theta)/(4*np.pi**2 * Tspan**4) + +psi = np.random.uniform(-np.pi/4, np.pi/4) +phi = np.random.uniform(0, 2*np.pi) +cosi = np.random.uniform(-1, 1) + +data = pyfstat.Writer( + label=data_label, outdir=outdir, tref=tref, + tstart=tstart, F0=F0, F1=F1, F2=F2, duration=Tspan, Alpha=Alpha, + Delta=Delta, h0=h0, sqrtSX=sqrtSX, psi=psi, phi=phi, cosi=cosi, + detector='H1,L1') +data.make_data() +predicted_twoF = data.predict_fstat() + +theta_prior = {'F0': {'type': 'unif', + 'lower': F0-DeltaF0/2., + 'upper': F0+DeltaF0/2.}, + 'F1': {'type': 'unif', + 'lower': F1-DeltaF1/2., + 'upper': F1+DeltaF1/2.}, + 'F2': F2, + 'Alpha': Alpha, + 'Delta': Delta + } + +ntemps = 1 +log10temperature_min = -1 +nwalkers = 100 + +mcmc = pyfstat.MCMCFollowUpSearch( + label=label, outdir=outdir, + sftfilepath='{}/*{}*sft'.format(outdir, data_label), + theta_prior=theta_prior, + tref=tref, minStartTime=tstart, maxStartTime=tend, + nwalkers=nwalkers, ntemps=ntemps, + log10temperature_min=log10temperature_min) +mcmc.run(run_setup) diff --git a/Paper/DirectedMC/plot_data.py b/Paper/DirectedMC/plot_data.py index 18c88734d31148802f9de48eaae0c247f3b246d5..6ad4758bd5e2a0bbd16c19687e02b08932de9357 100644 --- a/Paper/DirectedMC/plot_data.py +++ b/Paper/DirectedMC/plot_data.py @@ -29,7 +29,7 @@ results_file_name = 'MCResults.txt' df = pd.read_csv( results_file_name, sep=' ', names=['depth', 'h0', 'dF0', 'dF1', - 'twoF_predicted', 'twoF']) + 'twoF_predicted', 'twoF', 'runTime']) twoFstar = 60 depths = np.unique(df.depth.values)