Conversation
``cone_angle_rate`` and ``clock_angle_rate`` are the time derivatives their names say they are, and the docstrings now say so explicitly, because the ERBE/CERES L2 product fields carrying those same names are something else: finite differences of the instrument's gimbal encoder angles, elevation for the cone rate and azimuth for the clock rate. The two agree away from nadir and part company at a nadir crossing. There the encoder keeps turning at the scan rate, while the derivative of an azimuth about nadir is singular and the derivative of the cone angle passes smoothly through its minimum. A mission that populates those product fields from these columns therefore ships a different quantity than the product definition describes, and no gate on the clock derivative recovers the mechanism rate. Nothing computational changes. The encoder differences depend on a mission's own gimbal frames, so they belong in mission code rather than here, and the note says that too. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The note now points at where the claim comes from rather than asserting it: CERES BDS QA-6 defines the scan rate as the absolute elevation gimbal position difference between the current and previous measurement over the sample interval, and QA-7 places the rate fields at SCI-34/SCI-35. QA-7 also states that no edit checks are performed on those fields -- the only failure mode is a missing angle. That is worth recording here, because gating this module's clock derivative near nadir looks like a way to make it resemble the product field and is not one. Still documentation only. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #187 +/- ##
=======================================
Coverage 79.40% 79.40%
=======================================
Files 98 98
Lines 14596 14596
Branches 1443 1443
=======================================
Hits 11590 11590
Misses 2498 2498
Partials 508 508 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
Three wording fixes from review, no behavior change. "Part company at a nadir crossing" was narrower than the divergence it describes. The two definitions part company through the whole neighbourhood of closest approach, since a scan that misses nadir still drives the cone angle through a smooth minimum, and no crossing is required -- which is the Libera case, where the boresight misses nadir by 0.42 degrees and never crosses it at all. "The derivative of an azimuth about nadir is singular" contradicted that same sentence: at a non-zero miss the derivative peaks at a finite value and only diverges as the miss goes to zero. It now says that. The paragraph added in the previous commit also stranded "Its sign gives the direction the boresight sweeps relative to nadir" from the np.gradient it refers to, so "its" read as the ERBE/CERES field named just before it -- inverting the sentence. The paragraph moved below it, and the orphaned note about cone_angle's [0, 90] range returned to the conventions paragraph it belongs to. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Collaborator
Author
|
I want to rethink this. I think we should simply REMOVE Cone angle rate and Clock angle rate from curryer since they are unused downstream, and the version used for libera needs to be calculated in libera Rad. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Documentation only in
curryer/compute/geometry.py. No behavior change, no API change.cone_angle_rateandclock_angle_rateare the time derivatives their names say they are:np.gradientof the orbital-frame cone and clock angles. The ERBE/CERES L2 product fields carrying those same names are something else — backward two-point differences of the instrument's gimbal encoder angles over the sample interval, elevation for the cone rate and azimuth for the clock rate.Nothing in the module said so, and the omission cost us. libera_rad populated its
Cone_Angle_RateandClock_Angle_Ratefrom these columns on the reasonable assumption that matching names meant matching quantities, and shipped a different quantity than its product definition describes.Clock_Angle_Ratereached thousands of degrees per second at every nadir crossing against a declared range of[-20, 20], which was then managed with a 12-degree off-nadir gate that filled 15% of samples. LASP-Libera/libera_rad#34 fixes that downstream; this note is what stops the next mission repeating the mapping.The docstrings now state:
LIBERA_*_COORDframe names — so they are deliberately not added here. curryer keeps the generic geometry and the honest names.Commits
The first commit adds the note; the two that follow correct it, after review caught claims that were narrower or stronger than the truth:
np.gradientit refers to, so "its" read as the CERES field named just before it, inverting the sentence. It also orphaned a note aboutcone_angle's[0, 90]range away from the conventions paragraph it belongs to.I could not verify the QA-6 / QA-7 / SCI-34 / SCI-35 citations from inside this repo; they come from the heritage flag definitions supplied by the RBSP team, and confirmation of the controlling document version is an open follow-up.