diff --git a/tests/test_target.py b/tests/test_target.py new file mode 100644 index 0000000000000000000000000000000000000000..aa57e0ce78ca7e741cfd86428d6fe5d2af657646 --- /dev/null +++ b/tests/test_target.py @@ -0,0 +1,126 @@ +import unittest +from CpicImgSim.target import _sptype2num, hybrid_albedo_spectrum, star_photlam, spectrum_generator, planet_contrast, extract_target_x_y +from CpicImgSim.config import S +from math import pi + + +class TestTarget(unittest.TestCase): + def test_hybrid_albedo_spectrum(self): + planet = hybrid_albedo_spectrum(0.5, 1) + self.assertIsInstance(planet, S.spectrum.SpectralElement) + + def test_sptype(self): + self.assertEqual(_sptype2num('M1V'), (6.1, 5)) + self.assertEqual(_sptype2num('O5IV'), (0.5, 4)) + self.assertEqual(_sptype2num('F3V'), (3.3, 5)) + self.assertEqual(_sptype2num('K4.5II'), (5.45, 2)) + self.assertEqual(_sptype2num('M1'), (6.1, 5)) + self.assertEqual(_sptype2num('M'), (6, 5)) + self.assertEqual(_sptype2num('K3Vvar'), (5.3, 5)) + self.assertEqual(_sptype2num('F6Vbwvar'), (3.6, 5)) + self.assertEqual(_sptype2num('K0IV SB'), (5.0, 4)) + self.assertEqual(_sptype2num('F5V+'), (3.5, 5)) + self.assertEqual(_sptype2num('G5IV/V +K1IV'), (4.5, 4)) + self.assertEqual(_sptype2num('F7IV-V'), (3.7, 4)) + self.assertEqual(_sptype2num('O4/O5IV'), (0.4, 5)) + self.assertEqual(_sptype2num('G3/G5V'), (4.3, 5)) + self.assertRaises(ValueError, _sptype2num, 'errorinput') + + def test_star_photlam(self): + photlam = star_photlam(5, 'F0III', is_blackbody=True) + self.assertIsInstance(photlam, S.spectrum.SourceSpectrum) + photlam2 = star_photlam(5, 'F2II', is_blackbody=False) + self.assertIsInstance(photlam2, S.spectrum.SourceSpectrum) + photlam2 = star_photlam(5, 'F', is_blackbody=False) + self.assertIsInstance(photlam2, S.spectrum.SourceSpectrum) + photlam2 = star_photlam(5, 'F2', is_blackbody=False) + self.assertIsInstance(photlam2, S.spectrum.SourceSpectrum) + self.assertRaises(ValueError, star_photlam, 5, 'T0III', is_blackbody=1) + + def test_planet_contrast(self): + contrast = planet_contrast(1, 0, 90, 1) + contrast_cal = (69_911 / 149_597_870.7)**2 / pi + self.assertAlmostEqual(contrast, contrast_cal) + self.assertRaises(ValueError, planet_contrast, 1, 0, 0, 1) + + def test_extract_target_x_y(self): + target = { + 'ra': '120d', + 'dec': '40d', + 'distance': 10, + } + x, y = extract_target_x_y(target, '120d', '40d') + self.assertAlmostEqual(x, 0) + self.assertAlmostEqual(y, 0) + + x, y = extract_target_x_y(target, '120d', '41d') + self.assertAlmostEqual(y, -3600) + + x, y = extract_target_x_y(target, '8h', '40d') + self.assertAlmostEqual(x, 0) + self.assertAlmostEqual(y, 0) + + x, y = extract_target_x_y(dict(pangle=0, separation=1)) + self.assertAlmostEqual(x, 0) + self.assertAlmostEqual(y, 1) + + x, y = extract_target_x_y(dict(pangle=90, separation=1)) + self.assertAlmostEqual(x, 1) + self.assertAlmostEqual(y, 0) + + self.assertRaises(ValueError, extract_target_x_y, dict(pangle=0)) + self.assertRaises(ValueError, extract_target_x_y, dict(ra='120d')) + self.assertRaises(ValueError, extract_target_x_y, + dict(ra='120d', dec='40d')) + + def test_spectrum_generator(self): + target_example = { + 'cstar': { + 'magnitude': 5, + 'ra': '120d', + 'dec': '40d', + 'distance': 10, + 'sptype': 'F0III', + }, + 'stars': [ + { + 'magnitude': 5, + 'ra': '120.0001d', + 'dec': '40.0001d', + 'sptype': 'G0III', + 'isblackbody': True + }, + { + 'magnitude': 2, + 'ra': '120.0001d', + 'dec': '40.0001d', + 'sptype': 'G0II', + 'isblackbody': True + }, + { + 'magnitude': 2, + 'ra': '120.0001d', + 'dec': '40.0001d', + 'sptype': 'G0', + 'isblackbody': True + }, + ], + 'planets': [ + { + 'radius': 2, + 'pangle': 60, + 'separation': 0.5, + 'phase_angle': 90, + } + ] + } + + sps = spectrum_generator(target_example) + num_ouput = len([sp for sp in sps if sp is not None]) + num_input = len(target_example['stars']) + \ + len(target_example['planets']) + 1 + self.assertEqual(num_ouput, num_input) + + +if __name__ == '__main__': + unittest.main()