Source code for lenstronomy.LensModel.LineOfSight.LOSModels.los_flexion

__author__ = "TheoDuboscq"

__all__ = ["LOSFlexion"]


[docs] class LOSFlexion(object): """Class allowing one to add line-of-sight effects up to flexion (convergence, shear and type-F and G flexion) to single-plane lensing. As the LOS class, this is not a profile, but when present in list of lens models, it is automatically recognised by ModelAPI(), which sets the flag los_flexion_effects to True, and thereby leads LensModel to use SinglePlaneLOSFlexion() instead of SinglePlane(). It is however incompatible with MultiPlane() just like the LOS class. The key-word arguments are the three line-of-sight convergences, the two components of the three line-of-sight shears, the two components of the four line-of-sight type-F flexion, and the two components of the four line-of-sight type-G flexion, for a total of 25 real numbers. Those are named as in "Weak lensing of strong lensing: beyond the tidal regime" (Duboscq et al. 2024, 2405.12091): kappa_od, kappa_os, kappa_ds, gamma1_od, gamma2_od, gamma1_os, gamma2_os, gamma1_ds, gamma2_ds, F1_od, F2_od, G1_od, G2_od, F1_os, F2_os, G1_os, G2_os, F1_1ds, F2_1ds, G1_1ds, G2_1ds, F1_2ds, F2_2ds, G1_2ds, G2_2ds. On top of this is added the rotation omega_os, which will serve in the minimal model where it transforms into the non zero omega_los. Because LOSFlexion is not a profile, it does not contain the usual functions function(), derivatives(), and hessian(), but rather modifies the behaviour of those functions in the SinglePlaneLOS() class. Instead, it contains the essential building blocks of this modification. """ param_names = [ "kappa_od", "kappa_os", "kappa_ds", "gamma1_od", "gamma2_od", "gamma1_os", "gamma2_os", "gamma1_ds", "gamma2_ds", "F1_od", "F2_od", "G1_od", "G2_od", "F1_os", "F2_os", "G1_os", "G2_os", "F1_1ds", "F2_1ds", "G1_1ds", "G2_1ds", "F1_2ds", "F2_2ds", "G1_2ds", "G2_2ds", "omega_os", ] lower_limit_default = {pert: -0.5 for pert in param_names} upper_limit_default = {pert: 0.5 for pert in param_names}
[docs] def __init__(self, *args, **kwargs): self._static = False
[docs] def set_static(self, **kwargs): """Pre-computes certain computations that do only relate to the lens model parameters and not to the specific position where to evaluate the lens model. :param kwargs: lens model parameters :return: no return, for certain lens model some private self variables are initiated """ pass
[docs] def set_dynamic(self): """ :return: no return, deletes pre-computed variables for certain lens models """ pass