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)
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)
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)
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)
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)
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'))
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)
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'))
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)