Source code for exoctk.contam_visibility.astro_funcx

#! /usr/bin/env python
# Version 1. August 2, 2010
# Version 2. August 3, 2010
#   Got rid of degrees trig functions
# Joe Filippazzo, 2018/06/26, Made PEP8 compliant

from math import cos, sin, atan2, acos, pi

from .math_extensionsx import sind, cosd

D2R = pi/180.
R2D = 180./pi
PI2 = 2. * pi
epsilon = 23.43929 * D2R  # obliquity of the ecliptic J2000


[docs]def pa(tgt_c1, tgt_c2, obj_c1, obj_c2): """Calculates position angle of object at tgt position. Parameters ---------- tgt_c1: float The RA of the target. tgt_c2: float The Dec of the target. obj_c1: float The RA of the reference. obj_c2: float The Dec of the reference. Returns ------- float The position angle. """ y = cos(obj_c2) * sin(obj_c1-tgt_c1) c = cos(obj_c2) * sin(tgt_c2) * cos(obj_c1-tgt_c1) x = sin(obj_c2) * cos(tgt_c2) - c p = atan2(y, x) if p < 0.: p += PI2 if p >= PI2: p -= PI2 return p
[docs]def delta_pa_no_roll(pos1_c1, pos1_c2, pos2_c1, pos2_c2): """Calculates the change in position angle between two positions with no roll about V1 Parameters ---------- pos1_c1: float The RA of the first position. pos1_c2: float The Dec of the first position. pos2_c1: float The RA of the second position. pos2_c2: float The Dec of the second position. Returns ------- float The change in position angle. """ u = (sin(pos1_c2) + sin(pos2_c2)) * sin(pos2_c1 - pos1_c1) a = sin(pos2_c2) * cos(pos2_c1 - pos1_c1) v = cos(pos2_c1 - pos1_c1) + cos(pos1_c2) * cos(pos2_c2) + sin(pos1_c2) * a return atan2(u, v)
[docs]def dist(obj1_c1, obj1_c2, obj2_c1, obj2_c2): """Calculates the angular distance betrween two objects, positions specified in spherical coordinates Parameters ---------- obj1_c1: float The RA of the first object. obj1_c2: float The Dec of the first object. obj2_c1: float The RA of the second object. obj2_c2: float The Dec of the second object. Returns ------- float The distance between the objects. """ b = sin(obj2_c2) * sin(obj1_c2) x = cos(obj2_c2) * cos(obj1_c2) * cos(obj2_c1-obj1_c1) + b return acos(unit_limit(x))
[docs]def JWST_same_ori(tgt0_c1, tgt0_c2, p0, tgt_c1, tgt_c2): """Calculates normal orientation of second target, given first target's orientation is normal. This is in Ecliptic coordinates! Parameters ---------- tgt0_c1: float The RA of the first target. tgt0_c2: float The Dec of the first target. p0: float The origin. tgt1_c1: float The RA of the second target. tgt1_c2: float The Dec of the second target. Returns ------- float The normal orientation. """ long_sun = atan2(-sind(p0) * sin(tgt0_c2), cosd(p0)) + tgt0_c1 pp = atan2(-sin(long_sun-tgt_c1), cos(long_sun-tgt_c1) * sin(tgt_c2)) if pp < 0.: pp += PI2 return pp
[docs]def unit_limit(x): """ Forces value to be in [-1, 1] Parameters ---------- x: float, int The value to adjust. Retruns ------- float The adjusted value. """ return min(max(-1., x), 1.)