Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
6175ec7
First version of MockPulsar
vhaasteren Sep 29, 2023
68181e2
Small typo
vhaasteren Sep 29, 2023
160f476
Ansatz for getting a simple Astrometry model coded up for use in Mock…
vhaasteren Nov 24, 2023
a013c8a
Merge branch 'dev' into mockpulsar
vhaasteren Nov 24, 2023
06ef3f8
Added docstrings and helper functions for astrometry model
vhaasteren Nov 24, 2023
3c29912
Linting, and added astrometry option to MockPulsar
vhaasteren Nov 24, 2023
782a706
Reformatting and adding optional import check of astropy
vhaasteren Nov 27, 2023
727d3bc
FIXED: units of astrometry derivatives
vhaasteren Nov 28, 2023
2396b0d
Added Astrometry derivatives unit tests
vhaasteren Nov 28, 2023
50825c1
Fixed flake8 suggestions
vhaasteren Nov 28, 2023
af0264b
Added MockPulsar unittests
vhaasteren Nov 28, 2023
94bb7df
Added unit tests for MockPulsar and related additions
vhaasteren Nov 28, 2023
c090d03
Removed context variable for linting
vhaasteren Nov 29, 2023
dbf5779
Turn off astrometry parameters if there's no astropy, and issue a war…
vhaasteren Nov 29, 2023
143bb6b
Linting: too long a line in pulsar.py
vhaasteren Nov 29, 2023
337d19f
Slightly changed formatting
vhaasteren Dec 14, 2023
161a6bf
Fix conflicts merge from master
vhaasteren Mar 28, 2025
3f30a56
Merge branch 'dev' into mockpulsar
vhaasteren Mar 28, 2025
bcf09aa
Fixed error in pulsar.py
vhaasteren Mar 28, 2025
b7494d8
Removed repeated import
vhaasteren Mar 28, 2025
550ddf2
Change formatstring formatting for lint
vhaasteren Mar 28, 2025
3c60b9a
Skip when tempo2 is not installed: TestAstrometry
vhaasteren Mar 28, 2025
e3ef4cc
Linting test_utils
vhaasteren Mar 28, 2025
8b841ae
Defined LIBSTEMPO_INSTALLED
vhaasteren Mar 28, 2025
0350a07
Defined LIBSTEMPO_INSTALLED
vhaasteren Mar 28, 2025
7f66f63
Told black to leave my format string alone
vhaasteren Mar 28, 2025
7b3c7da
Told flake8 to leave my format string alone
vhaasteren Mar 28, 2025
4e3a801
Lowered code coverage, because Tempo2/PINT tests are not run
vhaasteren Mar 28, 2025
00b8413
Whitespace changed in flake8? Weird, updating the error list
vhaasteren Mar 28, 2025
b61d9e5
Lowered coverage
vhaasteren Mar 28, 2025
b6868cc
TestPulsarMock was skipped by accident in the test suite
vhaasteren Apr 1, 2025
fad5b7e
Putting back threshold to 70% test coverage
vhaasteren Apr 1, 2025
035100a
Simplified definition of the Vandermonde matrix for QSD
vhaasteren Apr 1, 2025
34ddc1c
I forgot to lint my added line, yet again
vhaasteren Apr 1, 2025
f05c184
Changed newline at end of file back to what it was
vhaasteren Apr 1, 2025
49180cc
Merge branch 'dev' into mockpulsar
vhaasteren Apr 1, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
88 changes: 86 additions & 2 deletions enterprise/pulsar.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
from io import StringIO

import numpy as np
from ephem import Ecliptic, Equatorial
from ephem import Ecliptic, Equatorial, J2000
from astropy.time import Time

import enterprise
Expand Down Expand Up @@ -673,6 +673,88 @@
psr._deflated = "destroyed"


class MockPulsar(BasePulsar):
"""Class to allow mock pulsars to be used with Enterprise"""

_noastropy_warning_issued = False # Class variable

def __init__(
self,
obs_times_mjd,
elong=None,
elat=None,
raj=None,
decj=None,
ssbfreqs=1440.0,
residuals=None,
toaerrs=1e-6,
sort=True,
flags={},
telescope="GBT",
spindown_order=2,
inc_astrometry=True,
):
if inc_astrometry and not hasattr(const, "c"): # pragma: no cover
# We requested astromery parameters, but there's no astropy
if not MockPulsar._noastropy_warning_issued:
msg = "WARNING: Astropy not installed but user requested "
msg += "astrometry timing model in MockPulsar. "
msg += "Switching off astrometry in all instances of MockPulsar."
logger.warning(msg)

MockPulsar._noastropy_warning_issued = True

inc_astrometry = False

self.name = utils.get_psrname_from_pos(elong=elong, elat=elat, raj=raj, decj=decj)

if elong is not None and elat is not None:
ec = Ecliptic(elong * np.pi / 180.0, elat * np.pi / 180.0)
eq = Equatorial(ec, epoch=J2000)
raj, decj = np.double(eq.ra), np.double(eq.dec)

self._raj, self._decj = raj, decj

self._sort = sort
self.planets = False

self._toas = np.double(obs_times_mjd) * 86400
self._stoas = np.double(obs_times_mjd) * 86400
self._residuals = residuals if residuals is not None else np.zeros_like(obs_times_mjd)
self._toaerrs = np.ones_like(obs_times_mjd) * toaerrs
self._posepoch = np.mean(self._toas)

if inc_astrometry:
self._designmatrix, self.fitpars = utils.create_astrometry_spin_timing_model(
self._toas, self._raj, self._decj, self._posepoch, spindown_order=spindown_order
)
else:
self._designmatrix, self.fitpars = utils.create_spindown_timing_model(self._toas, order=spindown_order)
self._ssbfreqs = np.ones_like(self._toas) * ssbfreqs / 1e6
self._telescope = telescope

# set parameters
self.setpars = [fp for fp in self.fitpars]

# new-style storage of flags as a numpy record array (previously, psr._flags = flags)
self._flags = np.zeros(len(self._toas), dtype=[(key, val.dtype) for key, val in flags.items()])
for key, val in flags.items():
self._flags[key] = val

self._pdist = self._get_pdist()

self._pos = self._get_pos()
self._planetssb = None
self._sunssb = None

self._pos_t = np.tile(self._pos, (len(self._toas), 1))

self.sort_data()

def set_residuals(self, residuals):
self._residuals = residuals


class FeatherPulsar:
columns = ["toas", "stoas", "toaerrs", "residuals", "freqs", "backend_flags", "telescope"]
vector_columns = ["Mmat", "sunssb", "pos_t"]
Expand Down Expand Up @@ -866,4 +948,6 @@
raise ValueError(f"Unknown timing package {timing_package}")
finally:
os.chdir(cwd)
raise ValueError("Pulsar (par/tim) not specified in {args} or {kwargs}")
return PintPulsar(toas, model, sort=sort, drop_pintpsr=drop_pintpsr, planets=planets)

Check warning on line 951 in enterprise/pulsar.py

View check run for this annotation

Codecov / codecov/patch

enterprise/pulsar.py#L951

Added line #L951 was not covered by tests

raise ValueError("Unknown arguments {}".format(args))

Check warning on line 953 in enterprise/pulsar.py

View check run for this annotation

Codecov / codecov/patch

enterprise/pulsar.py#L953

Added line #L953 was not covered by tests
Loading
Loading