22from numpy.testing
import assert_allclose
28from lalpulsar
import simulateCW
as simCW
38earth_ephem_file = os.path.join(
39 os.environ[
"LAL_TEST_PKGDATADIR"],
"earth00-40-DE405.dat.gz"
41sun_ephem_file = os.path.join(
42 os.environ[
"LAL_TEST_PKGDATADIR"],
"sun00-40-DE405.dat.gz"
44ephemerides = lalpulsar.InitBarycenter(earth_ephem_file, sun_ephem_file)
76fsmin = freq - (Nfs - 1) * 0.5 * dfreq
82 dphi = lal.TWOPI * (freq * dt + f1dot * 0.5 * dt**2)
83 ap = h0 * (1.0 + cosi**2) / 2.0
93 sft_ts = lalpulsar.MakeTimestamps(tstart, Tdata, Tsft, 0)
94 sft_catalog = lalpulsar.AddToFakeSFTCatalog(
None, detector, sft_ts)
97 Fstat_opt_args = lalpulsar.FstatOptionalArgs(lalpulsar.FstatOptionalArgsDefaults)
98 Fstat_opt_args.FstatMethod = lalpulsar.FMETHOD_DEMOD_BEST
101 Fstat_signal = lalpulsar.CreatePulsarParamsVector(1)
102 Fstat_signal.data[0].Amp.aPlus = 0.5 * h0 * (1.0 + cosi * cosi)
103 Fstat_signal.data[0].Amp.aCross = h0 * cosi
104 Fstat_signal.data[0].Amp.psi = psi
105 Fstat_signal.data[0].Amp.phi0 = phi0
106 Fstat_signal.data[0].Doppler.refTime = tref
107 Fstat_signal.data[0].Doppler.Alpha = alpha
108 Fstat_signal.data[0].Doppler.Delta = delta
109 Fstat_signal.data[0].Doppler.fkdot[0] = freq
110 Fstat_signal.data[0].Doppler.fkdot[1] = f1dot
111 Fstat_opt_args.injectSources = Fstat_signal
112 Fstat_assume_noise = lalpulsar.MultiNoiseFloor()
113 Fstat_assume_noise.length = 1
114 Fstat_assume_noise.sqrtSn[0] = assume_sqrtSh
115 Fstat_opt_args.assumeSqrtSX = Fstat_assume_noise
118 Fstat_input = lalpulsar.CreateFstatInput(
119 sft_catalog, fcmin, fcmax, dfreq, ephemerides, Fstat_opt_args
122 doppler = lalpulsar.PulsarDopplerParams(Fstat_signal.data[0].Doppler)
123 doppler.fkdot[0] = fsmin
126 Fstat_res = lalpulsar.ComputeFstat(
127 Fstat_res, Fstat_input, doppler, Nfs, lalpulsar.FSTATQ_2F
130 return Fstat_res.twoF
139 S = simCW.CWSimulator(
150 earth_ephem_file=earth_ephem_file,
151 sun_ephem_file=sun_ephem_file,
156 for path, i, N
in S.write_sft_files(
157 fmax, Tsft,
"simCWTestFstatSpindown", prog_bar=prog_bar
159 allpaths.append(path)
162 sft_catalog = lalpulsar.SFTdataFind(
163 "V-1_V1_1800SFT_simCWTestFstatSpindown-*.sft",
None
167 Fstat_opt_args = lalpulsar.FstatOptionalArgs(lalpulsar.FstatOptionalArgsDefaults)
168 Fstat_opt_args.FstatMethod = lalpulsar.FMETHOD_DEMOD_BEST
169 Fstat_assume_noise = lalpulsar.MultiNoiseFloor()
170 Fstat_assume_noise.length = 1
171 Fstat_assume_noise.sqrtSn[0] = assume_sqrtSh
172 Fstat_opt_args.assumeSqrtSX = Fstat_assume_noise
175 Fstat_input = lalpulsar.CreateFstatInput(
176 sft_catalog, fcmin, fcmax, dfreq, ephemerides, Fstat_opt_args
179 doppler = lalpulsar.PulsarDopplerParams()
180 doppler.refTime = tref
181 doppler.Alpha = alpha
182 doppler.Delta = delta
183 doppler.fkdot[0] = fsmin
184 doppler.fkdot[1] = f1dot
187 Fstat_res = lalpulsar.ComputeFstat(
188 Fstat_res, Fstat_input, doppler, Nfs, lalpulsar.FSTATQ_2F
192 for path
in allpaths:
195 return Fstat_res.twoF
202 "F-statistic of reference spindown signal:\n %s\n"
203 % (
", ".join([
"%0.4f"] * len(Fstat_ref)) % tuple(Fstat_ref))
209 "F-statistic of spindown signal from simulateCW:\n %s\n"
210 % (
" ".join([
"%0.4f"] * len(Fstat_simCW)) % tuple(Fstat_simCW))
214 Fstat_rmserr = np.sqrt(np.mean((1 - (Fstat_simCW / Fstat_ref)) ** 2))
219 err_msg=
"Root-mean-square error between F-statistics: %0.2e" % Fstat_rmserr,
231 S = simCW.CWSimulator(
235 waveform(h0=0, cosi=0, freq=0, f1dot=0),
242 earth_ephem_file=earth_ephem_file,
243 sun_ephem_file=sun_ephem_file,
249 paths[
"None"] = [[], []]
250 paths[
"1"] = [[], []]
251 for path, i, N
in S.write_sft_files(
252 fmax, Tsft, noise_sqrt_Sh=asd, comment=
"simCWTestSeedNoneRound1"
254 allpaths.append(path)
255 paths[
"None"][0].append(path)
257 for path, i, N
in S.write_sft_files(
258 fmax, Tsft, noise_sqrt_Sh=asd, comment=
"simCWTestSeedNoneRound2"
260 allpaths.append(path)
261 paths[
"None"][1].append(path)
263 for path, i, N
in S.write_sft_files(
264 fmax, Tsft, noise_sqrt_Sh=asd, comment=
"simCWTestSeed1Round1", noise_seed=1
266 allpaths.append(path)
267 paths[
"1"][0].append(path)
269 for path, i, N
in S.write_sft_files(
270 fmax, Tsft, noise_sqrt_Sh=asd, comment=
"simCWTestSeed1Round2", noise_seed=1
272 allpaths.append(path)
273 paths[
"1"][1].append(path)
276 return_codes[
"None"] = np.zeros(2)
277 return_codes[
"1"] = np.zeros(2)
278 for seed
in [
"None",
"1"]:
280 catalog0 = lalpulsar.SFTdataFind(paths[seed][0][i],
None)
281 sft0 = lalpulsar.LoadSFTs(catalog0, -1, -1)
282 catalog1 = lalpulsar.SFTdataFind(paths[seed][1][i],
None)
283 sft1 = lalpulsar.LoadSFTs(catalog1, -1, -1)
285 np.mean(abs(sft0.data[0].data.data - sft1.data[0].data.data) ** 2)
287 return_codes[seed][i] = rms > 0
288 for code
in return_codes[
"None"]:
291 for code
in return_codes[
"1"]:
296 for path
in allpaths:
300if __name__ ==
"__main__":
301 args = sys.argv[1:]
or [
"-v",
"-rs",
"--junit-xml=junit-simulateCW.xml"]
302 sys.exit(pytest.main(args=[__file__] + args))
def waveform(h0, cosi, freq, f1dot)
def compute_Fstat_spindown_reference()
def compute_Fstat_spindown_simulateCW()