|
8 | 8 | from imap_processing.cdf.imap_cdf_manager import ImapCdfAttributes |
9 | 9 | from imap_processing.cdf.utils import write_cdf |
10 | 10 | from imap_processing.cli import Mag |
11 | | -from imap_processing.mag.constants import DataMode |
| 11 | +from imap_processing.mag.constants import FILLVAL, DataMode |
12 | 12 | from imap_processing.mag.l1d.mag_l1d import mag_l1d |
13 | 13 | from imap_processing.mag.l1d.mag_l1d_data import MagL1d, MagL1dConfiguration |
14 | 14 | from imap_processing.mag.l2.mag_l2_data import ValidFrames |
@@ -571,6 +571,57 @@ def test_enhanced_gradiometry_with_quality_flags_detailed(): |
571 | 571 | assert np.array_equal(grad_ds["quality_flags"].data, expected_flags) |
572 | 572 |
|
573 | 573 |
|
| 574 | +def test_rotate_frame_preserves_fillval_and_nan(mag_l1d_test_class): |
| 575 | + """Test that L1D rotate_frame preserves FILLVAL and NaN vectors.""" |
| 576 | + mag_l1d_test_class.frame = ValidFrames.MAGO |
| 577 | + |
| 578 | + vectors = mag_l1d_test_class.vectors.copy() |
| 579 | + magi_vectors = mag_l1d_test_class.magi_vectors.copy() |
| 580 | + |
| 581 | + # Set some MAGO vectors to FILLVAL and NaN |
| 582 | + vectors[0] = [FILLVAL, FILLVAL, FILLVAL] |
| 583 | + vectors[2] = [np.nan, np.nan, np.nan] |
| 584 | + vectors[4] = [1.0, np.nan, 3.0] |
| 585 | + mag_l1d_test_class.vectors = vectors |
| 586 | + |
| 587 | + # Set some MAGI vectors to FILLVAL and NaN |
| 588 | + magi_vectors[1] = [FILLVAL, FILLVAL, FILLVAL] |
| 589 | + magi_vectors[3] = [np.nan, np.nan, np.nan] |
| 590 | + mag_l1d_test_class.magi_vectors = magi_vectors |
| 591 | + |
| 592 | + def mock_frame_transform( |
| 593 | + epoch_et, |
| 594 | + vecs, |
| 595 | + from_frame, |
| 596 | + to_frame, |
| 597 | + allow_spice_noframeconnect, |
| 598 | + ): |
| 599 | + return np.full(vecs.shape, 99.0) |
| 600 | + |
| 601 | + with patch( |
| 602 | + "imap_processing.mag.l1d.mag_l1d_data.frame_transform", |
| 603 | + side_effect=mock_frame_transform, |
| 604 | + ): |
| 605 | + mag_l1d_test_class.rotate_frame(ValidFrames.SRF) |
| 606 | + |
| 607 | + assert mag_l1d_test_class.frame == ValidFrames.SRF |
| 608 | + |
| 609 | + # MAGO: FILLVAL/NaN rows preserved as FILLVAL |
| 610 | + assert np.all(mag_l1d_test_class.vectors[0] == FILLVAL) |
| 611 | + assert np.all(mag_l1d_test_class.vectors[2] == FILLVAL) |
| 612 | + assert mag_l1d_test_class.vectors[4, 1] == FILLVAL |
| 613 | + # Normal MAGO vectors get rotated value |
| 614 | + assert np.all(mag_l1d_test_class.vectors[1] == 99.0) |
| 615 | + assert np.all(mag_l1d_test_class.vectors[3] == 99.0) |
| 616 | + |
| 617 | + # MAGI: FILLVAL/NaN rows preserved as FILLVAL |
| 618 | + assert np.all(mag_l1d_test_class.magi_vectors[1] == FILLVAL) |
| 619 | + assert np.all(mag_l1d_test_class.magi_vectors[3] == FILLVAL) |
| 620 | + # Normal MAGI vectors get rotated value |
| 621 | + assert np.all(mag_l1d_test_class.magi_vectors[0] == 99.0) |
| 622 | + assert np.all(mag_l1d_test_class.magi_vectors[2] == 99.0) |
| 623 | + |
| 624 | + |
574 | 625 | def test_rotate_frames(mag_l1d_test_class): |
575 | 626 | # Reset to initial MAGO frame for this test |
576 | 627 | mag_l1d_test_class.frame = ValidFrames.MAGO |
|
0 commit comments