Ejemplo n.º 1
0
def test_word_precision_check():
    """Test word_precision_check"""
    s1 = "a b c"
    s2 = "aa bb cc"
    s3 = "aa bb cc dd"
    s4 = "aazz bbzz cczz"

    assert word_precision_check(s1, s1)
    assert not word_precision_check(s1, s2)
    assert word_precision_check(s1, s2, length=1)
    assert not word_precision_check(s2, s3)
    assert word_precision_check(s2, s4, length=2)
Ejemplo n.º 2
0
def test_add_wcs_method_full_siafdb(eng_db_ngas, data_file, tmp_path):
    """Test using the database and a specified siaf db"""
    expected_name = 'add_wcs_method_full_siafdb.fits'

    # Calculate
    stp.add_wcs(data_file,
                siaf_path=siaf_path,
                method=stp.Methods.OPS_TR_202111,
                engdb_url='http://localhost')

    # Test
    with datamodels.Level1bModel(data_file) as model:

        # Save for post-test comparison and update
        model.save(tmp_path / expected_name)

        with datamodels.open(DATA_PATH / expected_name) as expected:
            for meta in METAS_EQUALITY:
                if isinstance(model[meta], str):
                    assert model[meta] == expected[meta]
                else:
                    assert np.isclose(model[meta], expected[meta], atol=1e-13)

            for meta in METAS_ISCLOSE:
                assert np.isclose(model[meta], expected[meta])

            assert word_precision_check(model.meta.wcsinfo.s_region,
                                        expected.meta.wcsinfo.s_region)
Ejemplo n.º 3
0
def test_add_wcs_method_full_nosiafdb(eng_db_ngas, data_file, tmp_path):
    """Test using the database"""
    # Only run if `pysiaf` is installed.
    pytest.importorskip('pysiaf')

    expected_name = 'add_wcs_method_full_nosiafdb.fits'

    # Calculate
    stp.add_wcs(data_file,
                method=stp.Methods.OPS_TR_202111,
                engdb_url='http://localhost')

    # Tests
    with datamodels.Level1bModel(data_file) as model:

        # Save for post-test comparison and update
        model.save(tmp_path / expected_name)

        with datamodels.open(DATA_PATH / expected_name) as expected:
            for meta in METAS_EQUALITY:
                assert model[meta] == expected[meta]

            for meta in METAS_ISCLOSE:
                assert np.isclose(model[meta], expected[meta])

            assert word_precision_check(model.meta.wcsinfo.s_region,
                                        expected.meta.wcsinfo.s_region)
Ejemplo n.º 4
0
def test_add_wcs_default(data_file, tmp_path):
    """Handle when no pointing exists and the default is used."""
    expected_name = 'add_wcs_default.fits'

    try:
        stp.add_wcs(data_file,
                    siaf_path=siaf_path,
                    tolerance=0,
                    allow_default=True)
    except ValueError:
        pass  # This is what we want for the test.
    except Exception as e:
        pytest.skip('Live ENGDB service is not accessible.'
                    '\nException={}'.format(e))

    # Tests
    with datamodels.Level1bModel(data_file) as model:

        # Save for post-test comparison and update
        model.save(tmp_path / expected_name)

        with datamodels.open(DATA_PATH / expected_name) as expected:
            for meta in METAS_EQUALITY:
                assert model[meta] == expected[meta], f'{meta} has changed'

            for meta in METAS_ISCLOSE:
                assert np.isclose(model[meta],
                                  expected[meta]), f'{meta} has changed'

            assert word_precision_check(model.meta.wcsinfo.s_region,
                                        expected.meta.wcsinfo.s_region)
Ejemplo n.º 5
0
def test_add_wcs_method_gscmd(eng_db_ngas, data_file, tmp_path):
    """Test using the database and the original, pre-JSOCINT-555 algorithms"""
    expected_name = 'add_wcs_method_gscmd.fits'
    # Calculate
    stp.add_wcs(data_file,
                siaf_path=siaf_path,
                method=stp.Methods.GSCMD_J3PAGS,
                engdb_url='http://localhost')

    # Tests
    with datamodels.Level1bModel(data_file) as model:

        # Save for post-test comparison and update
        model.save(tmp_path / expected_name)

        with datamodels.open(DATA_PATH / expected_name) as expected:
            for meta in METAS_EQUALITY:
                if isinstance(model[meta], str):
                    assert model[meta] == expected[meta], f'{meta} has changed'
                else:
                    assert np.isclose(model[meta], expected[meta],
                                      atol=1e-13), f'{meta} has changed'

            for meta in METAS_ISCLOSE:
                assert np.isclose(model[meta],
                                  expected[meta]), f'{meta} has changed'

            assert word_precision_check(model.meta.wcsinfo.s_region,
                                        expected.meta.wcsinfo.s_region)
Ejemplo n.º 6
0
def test_add_wcs_fsmcorr_v1(data_file):
    """Test with default value using FSM original correction"""
    try:
        stp.add_wcs(data_file,
                    fsmcorr_version='v1',
                    siaf_path=siaf_db,
                    tolerance=0,
                    allow_default=True)
    except ValueError:
        pass  # This is what we want for the test.
    except Exception as e:
        pytest.skip('Live ENGDB service is not accessible.'
                    '\nException={}'.format(e))

    with datamodels.Level1bModel(data_file) as model:
        assert model.meta.pointing.ra_v1 == TARG_RA
        assert model.meta.pointing.dec_v1 == TARG_DEC
        assert model.meta.pointing.pa_v3 == 0.
        assert model.meta.wcsinfo.wcsaxes == 2
        assert model.meta.wcsinfo.crpix1 == 693.5
        assert model.meta.wcsinfo.crpix2 == 512.5
        assert model.meta.wcsinfo.crval1 == TARG_RA
        assert model.meta.wcsinfo.crval2 == TARG_DEC
        assert model.meta.wcsinfo.ctype1 == "RA---TAN"
        assert model.meta.wcsinfo.ctype2 == "DEC--TAN"
        assert model.meta.wcsinfo.cunit1 == 'deg'
        assert model.meta.wcsinfo.cunit2 == 'deg'
        assert np.isclose(model.meta.wcsinfo.cdelt1, 3.0555555e-5)
        assert np.isclose(model.meta.wcsinfo.cdelt2, 3.0555555e-5)
        assert np.isclose(model.meta.wcsinfo.pc1_1, -0.7558009243361943)
        assert np.isclose(model.meta.wcsinfo.pc1_2, 0.654801468211972)
        assert np.isclose(model.meta.wcsinfo.pc2_1, 0.654801468211972)
        assert np.isclose(model.meta.wcsinfo.pc2_2, 0.7558009243361943)
        assert model.meta.wcsinfo.v2_ref == 200.0
        assert model.meta.wcsinfo.v3_ref == -350.0
        assert model.meta.wcsinfo.vparity == -1
        assert model.meta.wcsinfo.v3yangle == 42.0
        assert model.meta.wcsinfo.ra_ref == TARG_RA
        assert model.meta.wcsinfo.dec_ref == TARG_DEC
        assert np.isclose(model.meta.wcsinfo.roll_ref, 358.9045979379)
        assert word_precision_check(model.meta.wcsinfo.s_region,
                                    ('POLYGON ICRS'
                                     ' 345.11054995209815 -87.02586884935684'
                                     ' 344.6537904121288 -87.00498014679253'
                                     ' 345.04569816117015 -86.98138111042982'
                                     ' 345.50498899320183 -87.00187988107017'))
Ejemplo n.º 7
0
def test_add_wcs_with_db(eng_db_ngas, data_file, tmp_path):
    """Test using the database"""
    expected_name = 'add_wcs_with_db.fits'

    stp.add_wcs(data_file, siaf_path=siaf_path, engdb_url='http://localhost')

    # Tests
    with datamodels.Level1bModel(data_file) as model:

        # Save for post-test comparison and update
        model.save(tmp_path / expected_name)

        with datamodels.open(DATA_PATH / expected_name) as expected:
            for meta in METAS_EQUALITY:
                assert model[meta] == expected[meta]

            for meta in METAS_ISCLOSE:
                assert np.isclose(model[meta], expected[meta])

            assert word_precision_check(model.meta.wcsinfo.s_region,
                                        expected.meta.wcsinfo.s_region)
Ejemplo n.º 8
0
def test_add_wcs_with_db_fsmcorr_v1(eng_db_ngas, data_file):
    """Test using the database with original FSM correction"""
    stp.add_wcs(data_file,
                fsmcorr_version='v1',
                siaf_path=siaf_db,
                j2fgs_transpose=False)

    with datamodels.Level1bModel(data_file) as model:
        assert np.isclose(model.meta.pointing.ra_v1, 348.9278669)
        assert np.isclose(model.meta.pointing.dec_v1, -38.749239)
        assert np.isclose(model.meta.pointing.pa_v3, 50.1767077)
        assert model.meta.wcsinfo.wcsaxes == 2
        assert model.meta.wcsinfo.crpix1 == 693.5
        assert model.meta.wcsinfo.crpix2 == 512.5
        assert np.isclose(model.meta.wcsinfo.crval1, 348.8776709)
        assert np.isclose(model.meta.wcsinfo.crval2, -38.854159)
        assert model.meta.wcsinfo.ctype1 == "RA---TAN"
        assert model.meta.wcsinfo.ctype2 == "DEC--TAN"
        assert model.meta.wcsinfo.cunit1 == 'deg'
        assert model.meta.wcsinfo.cunit2 == 'deg'
        assert np.isclose(model.meta.wcsinfo.cdelt1, 3.0555555e-5)
        assert np.isclose(model.meta.wcsinfo.cdelt2, 3.0555555e-5)
        assert np.isclose(model.meta.wcsinfo.pc1_1, 0.03853303979862607)
        assert np.isclose(model.meta.wcsinfo.pc1_2, 0.9992573266400789)
        assert np.isclose(model.meta.wcsinfo.pc2_1, 0.9992573266400789)
        assert np.isclose(model.meta.wcsinfo.pc2_2, -0.03853303979862607)
        assert model.meta.wcsinfo.v2_ref == 200.0
        assert model.meta.wcsinfo.v3_ref == -350.0
        assert model.meta.wcsinfo.vparity == -1
        assert model.meta.wcsinfo.v3yangle == 42.0
        assert np.isclose(model.meta.wcsinfo.ra_ref, 348.8776709)
        assert np.isclose(model.meta.wcsinfo.dec_ref, -38.854159)
        assert np.isclose(model.meta.wcsinfo.roll_ref, 50.20832726650)
        assert word_precision_check(
            model.meta.wcsinfo.s_region,
            ('POLYGON ICRS'
             ' 348.8563379013152 -38.874810886750495'
             ' 348.85810582665334 -38.84318773861823'
             ' 348.8982592685148 -38.84439628911871'
             ' 348.89688051688233 -38.876020020321164'))
Ejemplo n.º 9
0
def test_add_wcs_with_mast(data_file_fromsim, fgsid, tmp_path):
    """Test using the database"""
    expected_name = f'add_wcs_with_mast_fgs{fgsid}.fits'

    # See if access to MAST is available.
    try:
        engdb_mast.EngdbMast(base_url=engdb_mast.MAST_BASE_URL)
    except RuntimeError as exception:
        pytest.skip(
            f'Live MAST Engineering Service not available: {exception}')

    # Execute the operation.
    try:
        stp.add_wcs(data_file_fromsim,
                    siaf_path=siaf_path,
                    engdb_url=engdb_mast.MAST_BASE_URL,
                    fgsid=fgsid)
    except ValueError as exception:
        pytest.xfail(
            f'No telemetry exists. Update test to use existing telemetry. Exception: {exception}'
        )

    # Tests
    with datamodels.Level1bModel(data_file_fromsim) as model:

        # Save for post-test comparison and update
        model.save(tmp_path / expected_name)

        with datamodels.open(DATA_PATH / expected_name) as expected:
            for meta in METAS_EQUALITY:
                assert model[meta] == expected[meta]

            for meta in METAS_ISCLOSE:
                assert np.isclose(model[meta], expected[meta])

            assert word_precision_check(model.meta.wcsinfo.s_region,
                                        expected.meta.wcsinfo.s_region)