Source code for sotodlib.obs_ops.sources

import numpy as np
import logging
logger = logging.getLogger(__name__)

import so3g
from so3g.proj import coords, quat
import sotodlib.coords.planets as planets

[docs] def get_sso(aman, sso, nstep=100): """ Function for getting xi, eta position of given sso. Parameters ---------- aman : AxisManager Input axis manager. sso : str Name of input sso. nstep : int Number of steps to downsample the TOD. Returns ------- xi : array Array of xi positions. eta : array Array of eta positions. """ az = aman.boresight.az el = aman.boresight.el ctime = aman.timestamps csl = so3g.proj.CelestialSightLine.az_el(ctime[::nstep], az[::nstep], el[::nstep], roll=aman.boresight.roll[0], weather="typical") q_bore = csl.Q ras, decs = [], [] point_sources = {'tau_a': (83.6331, 22.0145)} for d1_unix in ctime[::nstep]: if sso in point_sources: ra = point_sources[sso][0] dec = point_sources[sso][0] planet = planets.SlowSource(d1_unix*1., float(ra) * coords.DEG, float(dec) * coords.DEG) else: try: planet = planets.SlowSource.for_named_source(sso, d1_unix*1.) except ValueError: break ra0, dec0 = planet.pos(d1_unix) ras.append(ra0) decs.append(dec0) planet_q = quat.rotation_lonlat(np.array(ras), np.array(decs)) q_total = ~q_bore * planet_q xi_p, eta_p, _ = quat.decompose_xieta(np.array(q_total)) return xi_p, eta_p