diff --git a/docs/make_fake_data.md b/docs/make_fake_data.md new file mode 100644 index 0000000000000000000000000000000000000000..df730ee2f02910ed84c2c4d3e68ebeba6e819265 --- /dev/null +++ b/docs/make_fake_data.md @@ -0,0 +1,133 @@ +# Making fake data + +Here, we describe the steps required to generate fake data which will be used +throughout the other examples. We will generate data based on the properties of +the Crab pulsar, first as a smooth CW signal and then as a CW signal which +contains a glitch. This document is based on the file +[make_fake_data.py](../examples/make_fake_data.py). + +## Smooth signal + +In the following code segment, we import the `Writer` class used to generate +fake data, define the Crab parameters and create an instant of the `Writer` +called `data` + +``` +from pyfstat import Writer + +# Define parameters of the Crab pulsar +F0 = 30.0 +F1 = -1e-10 +F2 = 0 +Alpha = 5e-3 +Delta = 6e-2 +tref = 362750407.0 + +# Signal strength +h0 = 1e-23 + +# Properties of the GW data +sqrtSX = 1e-22 +tstart = 1000000000 +duration = 100*86400 +tend = tstart+duration + +data = Writer( + label='basic', outdir='data', tref=tref, tstart=tstart, F0=F0, F1=F1, + F2=F2, duration=duration, Alpha=Alpha, Delta=Delta, h0=h0, sqrtSX=sqrtSX) +``` + +We can now use the `data` object to create `.sft` files which contain a smooth +signal in Gaussian noise. In detail, the process consists first in calling + +``` +data.make_cff() +``` +which generates a file `data/basic.cff` (notice the directory and file name +are defined by the `outdir` and `label` arguments given to `Writer`). This +file contains instructions which will be passed to `lalapps_MakeFakedata_v5`, +namely + +``` +[TS0] +Alpha = 5.000000000000000104e-03 +Delta = 5.999999999999999778e-02 +h0 = 9.999999999999999604e-24 +cosi = 0.000000000000000000e+00 +psi = 0.000000000000000000e+00 +phi0 = 0.000000000000000000e+00 +Freq = 3.000000000000000000e+01 +f1dot = -1.000000000000000036e-10 +f2dot = 0.000000000000000000e+00 +refTime = 362750407.000000 +transientWindowType=rect +transientStartTime=1000000000.000 +transientTauDays=100.000 +``` + +Finally, we generate the `.sft` files by calling + +``` +data.run_makefakedata() +``` + +In fact, the previous two commands are wrapped together by a single call to +`data.make_data()` which we will use from now on. + +## Glitching signal + +We now want to generate a set of data which contains a *glitching signal*. We +start with a simple case in which the glitch occurs half way through the +observation span. We define the properties of this signal, create +another `Writer` instance called `glitch_data`, and then run `make_data()` + +``` +dtglitch = duration/2.0 +delta_F0 = 1e-6 * F0 +delta_F1 = 1e-5 * F1 + +glitch_data = Writer( + label='glitch', outdir='data', tref=tref, tstart=tstart, F0=F0, F1=F1, + F2=F2, duration=duration, Alpha=Alpha, Delta=Delta, h0=h0, sqrtSX=sqrtSX, + dtglitch=dtglitch, delta_F0=delta_F0, delta_F1=delta_F1) +glitch_data.make_data() +``` + +It is worth noting the difference between the config file for the non-glitching +signal and this config file (`data/glitch.cff`) which reads + +``` +[TS0] +Alpha = 5.000000000000000104e-03 +Delta = 5.999999999999999778e-02 +h0 = 9.999999999999999604e-24 +cosi = 0.000000000000000000e+00 +psi = 0.000000000000000000e+00 +phi0 = 0.000000000000000000e+00 +Freq = 3.000000000000000000e+01 +f1dot = -1.000000000000000036e-10 +f2dot = 0.000000000000000000e+00 +refTime = 362750407.000000 +transientWindowType=rect +transientStartTime=1000000000.000 +transientTauDays=50.000 +[TS1] +Alpha = 5.000000000000000104e-03 +Delta = 5.999999999999999778e-02 +h0 = 9.999999999999999604e-24 +cosi = 0.000000000000000000e+00 +psi = 0.000000000000000000e+00 +phi0 = -1.222261350197196007e+05 +Freq = 3.000003064156959098e+01 +f1dot = -1.000009999999999993e-10 +f2dot = 0.000000000000000000e+00 +refTime = 362750407.000000 +transientWindowType=rect +transientStartTime=1004320000.000 +transientTauDays=50.000 +``` + +The glitch config file uses transient windows to create two non-overlapping, +but continuous signals. + + diff --git a/examples/Makefile b/examples/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..eccd363185bc8cb4695b8caab89b1f25057ff8ff --- /dev/null +++ b/examples/Makefile @@ -0,0 +1,5 @@ +basic_sft = data/H-4800_H1_1800SFT_basic-1000000000-8640000.sft +glitch_sft = data/H-4800_H1_1800SFT_glitch-1000000000-8640000.sft + +$(basic_sft) $(glitch_sft): make_fake_data.py + python make_fake_data.py diff --git a/examples/grid_glitch_search.py b/examples/grid_glitch_search.py deleted file mode 100644 index 1d6fc7587872f4d3fc025ced3571e39531b27af6..0000000000000000000000000000000000000000 --- a/examples/grid_glitch_search.py +++ /dev/null @@ -1,43 +0,0 @@ -from pyfstat import GridGlitchSearch, Writer -import numpy as np - -phi = 0 -F0 = 2.4343 -F1 = -1e-10 -F2 = 0 -delta_phi = 0 -delta_F0 = 1e-7 -delta_F1 = 0 -duration = 100*86400 -dtglitch = 100*43200 -Alpha = 5e-3 -Delta = 6e-2 -tstart = 700000000 -tend = tstart+duration -tglitch = tstart + dtglitch -tref = tglitch - -glitch_data = Writer(label='glitch', outdir='data', delta_phi=delta_phi, - delta_F0=delta_F0, tref=tref, tstart=tstart, - delta_F1=delta_F1, phi=phi, F0=F0, F1=F1, F2=F2, - duration=duration, dtglitch=dtglitch, Alpha=Alpha, - Delta=Delta) -glitch_data.make_data() - -F0s = [F0] -F1s = [F1] -F2s = [F2] -m = 1e-3 -dF = np.sqrt(12 * m) / (np.pi * duration) -delta_F0s = [-1e-6*F0, 1e-6*F0, dF] -delta_F1s = [delta_F1] -dT = duration / 10. -tglitchs = [tstart+dT, tend-dT, duration/100.] -Alphas = [Alpha] -Deltas = [Delta] -grid = GridGlitchSearch('grid', 'data', glitch_data.label, glitch_data.outdir, - F0s, F1s, F2s, delta_F0s, delta_F1s, tglitchs, Alphas, - Deltas, tref, tstart, tend) -grid.run() -grid.plot_2D('delta_F0', 'tglitch') -print grid.get_max_twoF() diff --git a/examples/make_fake_data.py b/examples/make_fake_data.py new file mode 100644 index 0000000000000000000000000000000000000000..6f74c3e9a68cb5f6bf1e8956a85638e4e656d56e --- /dev/null +++ b/examples/make_fake_data.py @@ -0,0 +1,38 @@ +from pyfstat import Writer + +# First, we generate data with a reasonably strong smooth signal + +# Define parameters of the Crab pulsar +F0 = 30.0 +F1 = -1e-10 +F2 = 0 +Alpha = 5e-3 +Delta = 6e-2 +tref = 362750407.0 + +# Signal strength +h0 = 1e-23 + +# Properties of the GW data +sqrtSX = 1e-22 +tstart = 1000000000 +duration = 100*86400 +tend = tstart+duration + +data = Writer( + label='basic', outdir='data', tref=tref, tstart=tstart, F0=F0, F1=F1, + F2=F2, duration=duration, Alpha=Alpha, Delta=Delta, h0=h0, sqrtSX=sqrtSX) +data.make_data() + + +# Next, taking the same signal parameters, we include a glitch half way through +dtglitch = duration/2.0 +delta_F0 = 1e-6 * F0 +delta_F1 = 1e-5 * F1 + +glitch_data = Writer( + label='glitch', outdir='data', tref=tref, tstart=tstart, F0=F0, F1=F1, + F2=F2, duration=duration, Alpha=Alpha, Delta=Delta, h0=h0, sqrtSX=sqrtSX, + dtglitch=dtglitch, delta_F0=delta_F0, delta_F1=delta_F1) +glitch_data.make_data() +