예제 #1
0
    def derivatives(self, x, y, Rs, alpha_Rs, e1, e2, center_x=0, center_y=0):
        """
        returns df/dx and df/dy of the function, calculated as an elliptically distorted deflection angle of the
        spherical NFW profile

        :param x: angular position (normally in units of arc seconds)
        :param y: angular position (normally in units of arc seconds)
        :param Rs: turn over point in the slope of the NFW profile in angular unit
        :param alpha_Rs: deflection (angular units) at projected Rs
        :param e1: eccentricity component in x-direction
        :param e2: eccentricity component in y-direction
        :param center_x: center of halo (in angular units)
        :param center_y: center of halo (in angular units)
        :return: deflection in x-direction, deflection in y-direction
        """
        x_, y_ = param_util.transform_e1e2_square_average(x, y, e1, e2, center_x, center_y)
        phi_G, q = param_util.ellipticity2phi_q(e1, e2)
        cos_phi = np.cos(phi_G)
        sin_phi = np.sin(phi_G)
        e = param_util.q2e(q)
        # e = abs(1 - q)
        R_ = np.sqrt(x_ ** 2 + y_ ** 2)
        rho0_input = self.nfw.alpha2rho0(alpha_Rs=alpha_Rs, Rs=Rs)
        if Rs < 0.0000001:
            Rs = 0.0000001
        f_x_prim, f_y_prim = self.nfw.nfwAlpha(R_, Rs, rho0_input, x_, y_)
        f_x_prim *= np.sqrt(1 - e)
        f_y_prim *= np.sqrt(1 + e)
        f_x = cos_phi*f_x_prim-sin_phi*f_y_prim
        f_y = sin_phi*f_x_prim+cos_phi*f_y_prim
        return f_x, f_y
예제 #2
0
 def derivatives(self,
                 x,
                 y,
                 sigma0,
                 Ra,
                 Rs,
                 e1,
                 e2,
                 center_x=0,
                 center_y=0):
     """
     returns df/dx and df/dy of the function (integral of NFW)
     """
     phi_G, q = param_util.ellipticity2phi_q(e1, e2)
     x_, y_ = param_util.transform_e1e2_square_average(
         x, y, e1, e2, center_x, center_y)
     e = param_util.q2e(q)
     cos_phi = np.cos(phi_G)
     sin_phi = np.sin(phi_G)
     f_x_prim, f_y_prim = self.spherical.derivatives(x_,
                                                     y_,
                                                     sigma0,
                                                     Ra,
                                                     Rs,
                                                     center_x=0,
                                                     center_y=0)
     f_x_prim *= np.sqrt(1 - e)
     f_y_prim *= np.sqrt(1 + e)
     f_x = cos_phi * f_x_prim - sin_phi * f_y_prim
     f_y = sin_phi * f_x_prim + cos_phi * f_y_prim
     return f_x, f_y
 def derivatives(self, x, y, n_sersic, R_sersic, k_eff, e1, e2, center_x=0, center_y=0):
     """
     returns df/dx and df/dy of the function
     """
     phi_G, q = param_util.ellipticity2phi_q(e1, e2)
     e = param_util.q2e(q)
     # e = abs(1. - q)
     cos_phi = np.cos(phi_G)
     sin_phi = np.sin(phi_G)
     x_, y_ = param_util.transform_e1e2_square_average(x, y, e1, e2, center_x, center_y)
     # x_, y_ = self._coord_transf(x, y, q, phi_G, center_x, center_y)
     f_x_prim, f_y_prim = self.sersic.derivatives(x_, y_, n_sersic, R_sersic, k_eff)
     f_x_prim *= np.sqrt(1 - e)
     f_y_prim *= np.sqrt(1 + e)
     f_x = cos_phi*f_x_prim-sin_phi*f_y_prim
     f_y = sin_phi*f_x_prim+cos_phi*f_y_prim
     return f_x, f_y