From 933a784a1492843ad02f1d7139c456d4dd6bf53e Mon Sep 17 00:00:00 2001 From: Paul Grogan Date: Tue, 8 Jul 2025 17:21:51 -0700 Subject: [PATCH 1/2] initial implementation (untested) --- src/tatc/analysis/track.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/tatc/analysis/track.py b/src/tatc/analysis/track.py index f5cf839..42be01f 100644 --- a/src/tatc/analysis/track.py +++ b/src/tatc/analysis/track.py @@ -14,6 +14,7 @@ import geopandas as gpd from skyfield.api import wgs84 from skyfield.framelib import itrs +from skyfield.functions import angle_between from shapely.geometry import ( Polygon, @@ -88,6 +89,7 @@ def collect_orbit_track( orbit_output: OrbitOutput = OrbitOutput.POSITION, sat_sunlit: bool = False, solar_altaz: bool = False, + solar_beta: bool = False, ) -> gpd.GeoDataFrame: """ Collect orbit track points for a satellite of interest. @@ -104,6 +106,7 @@ def collect_orbit_track( orbit_output (OrbitOutput): The output option. sat_sunlit (bool): `True` to include whether the satellite is sunlit. solar_altaz (bool): `True` to include solar altitude/azimuth angles. + solar_beta (bool): `True` to include solar beta angles. Returns: geopandas.GeoDataFrame: The data frame of collected orbit track results. @@ -219,6 +222,13 @@ def collect_orbit_track( ) track["solar_alt"] = solar_altaz[0].degrees track["solar_az"] = solar_altaz[1].degrees + if solar_beta: + # append solar beta column + # based on https://github.com/skyfielders/python-skyfield/issues/1054 + plane_normal = np.cross(orbit_track.position.m, orbit_track.velocity.m_per_s, axis=0) + sun = de421["earth"].at(orbit_track.t).observe(de421["sun"]).position.m + beta = np.pi/2 - angle_between(plane_normal, sun) + track["solar_beta"] = np.degrees(beta) if mask is not None: track = gpd.clip(track, mask).reset_index(drop=True) return track From fa3f13e8921e5951a750056e234bebcf66bdcc05 Mon Sep 17 00:00:00 2001 From: GitHub Actions Bot <> Date: Fri, 12 Sep 2025 18:56:29 +0000 Subject: [PATCH 2/2] files reformatted with black --- src/tatc/analysis/track.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/tatc/analysis/track.py b/src/tatc/analysis/track.py index 42be01f..3ff3274 100644 --- a/src/tatc/analysis/track.py +++ b/src/tatc/analysis/track.py @@ -225,9 +225,11 @@ def collect_orbit_track( if solar_beta: # append solar beta column # based on https://github.com/skyfielders/python-skyfield/issues/1054 - plane_normal = np.cross(orbit_track.position.m, orbit_track.velocity.m_per_s, axis=0) + plane_normal = np.cross( + orbit_track.position.m, orbit_track.velocity.m_per_s, axis=0 + ) sun = de421["earth"].at(orbit_track.t).observe(de421["sun"]).position.m - beta = np.pi/2 - angle_between(plane_normal, sun) + beta = np.pi / 2 - angle_between(plane_normal, sun) track["solar_beta"] = np.degrees(beta) if mask is not None: track = gpd.clip(track, mask).reset_index(drop=True)