Source code for pint.models.stand_alone_psr_binaries.DDS_model

"""The DDS model - Damour and Deruelle with alternate Shapiro delay parametrization."""
import astropy.constants as c
import astropy.units as u
import numpy as np
from loguru import logger as log

from pint import Tsun

from .DD_model import DDmodel


[docs]class DDSmodel(DDmodel): """Damour and Deruelle model with alternate Shapiro delay parameterization. This extends the :class:`pint.models.binary_dd.BinaryDD` model with :math:`SHAPMAX = -\log(1-s)` instead of just :math:`s=\sin i`, which behaves better for :math:`\sin i` near 1. It does not (yet) implement the higher-order delays and lensing correction. It supports all the parameters defined in :class:`pint.models.pulsar_binary.PulsarBinary` and :class:`pint.models.binary_dd.BinaryDD` plus: SHAPMAX :math:`-\log(1-\sin i)` It also removes: SINI use ``SHAPMAX`` instead Parameters supported: .. paramtable:: :class: pint.models.binary_dd.BinaryDDS References ---------- - Kramer et al. (2006), Science, 314, 97 [klm+06]_ - Rafikov and Lai (2006), PRD, 73, 063003 [rl06]_ .. [klm+06] https://ui.adsabs.harvard.edu/abs/2006Sci...314...97K/abstract .. [rl06] https://ui.adsabs.harvard.edu/abs/2006PhRvD..73f3003R/abstract """ def __init__(self, t=None, input_params=None): super().__init__() self.binary_name = "DDS" self.param_default_value.update( { "SHAPMAX": 0, } ) # If any parameter has aliases, it should be updated # self.param_aliases.update({}) self.binary_params = list(self.param_default_value.keys()) # Remove unused parameter SINI del self.param_default_value["SINI"] self.set_param_values() if input_params is not None: self.update_input(param_dict=input_params) @property def SINI(self): return 1 - np.exp(-self.SHAPMAX) @SINI.setter def SINI(self, val): log.debug( "DDS model uses SHAPMAX as inclination parameter. SINI will not be used." ) def d_SINI_d_SHAPMAX(self): return np.exp(-self.SHAPMAX) def d_SINI_d_par(self, par): par_obj = getattr(self, par) try: ko_func = getattr(self, f"d_SINI_d_{par}") except AttributeError: ko_func = lambda: np.zeros(len(self.tt0)) * u.Unit("") / par_obj.unit return ko_func()