Пример #1
0
 def check_pt(self, pt, answer):
     """
     Take a Cartesian point (pt) and a known
     htmid for that point (answer).  Find the htmid
     for the point using findHtmid and verify that
     we get the expected answer.
     """
     ra, dec = sphericalFromCartesian(pt)
     ii = findHtmid(np.degrees(ra), np.degrees(dec), 3)
     binary = '{0:b}'.format(ii)
     self.assertEqual(binary, answer)
Пример #2
0
 def check_pt(self, pt, answer):
     """
     Take a Cartesian point (pt) and a known
     htmid for that point (answer).  Find the htmid
     for the point using findHtmid and verify that
     we get the expected answer.
     """
     ra, dec = sphericalFromCartesian(pt)
     ii = findHtmid(np.degrees(ra), np.degrees(dec), 3)
     binary = '{0:b}'.format(ii)
     self.assertEqual(binary, answer)
Пример #3
0
 def test_findHtmid_vectorized(self):
     """
     Test that findHtmid works correctly on vectors
     """
     rng = np.random.RandomState(81723122)
     n_samples = 1000
     ra = rng.random_sample(n_samples)*360.0
     dec = rng.random_sample(n_samples)*180.0-90.0
     level = 7
     htmid_vec = findHtmid(ra, dec, level)
     self.assertIsInstance(htmid_vec, np.ndarray)
     htmid_fast = _findHtmid_fast(ra, dec, level)
     self.assertIsInstance(htmid_fast, np.ndarray)
     np.testing.assert_array_equal(htmid_vec, htmid_fast)
     for ii in range(n_samples):
         htmid_slow = _findHtmid_slow(ra[ii], dec[ii], level)
         self.assertIsInstance(htmid_slow, numbers.Number)
         self.assertEqual(htmid_slow, htmid_vec[ii])
         htmid_single = findHtmid(ra[ii], dec[ii], level)
         self.assertIsInstance(htmid_single, numbers.Number)
         self.assertEqual(htmid_single, htmid_vec[ii])
Пример #4
0
 def test_findHtmid_vectorized(self):
     """
     Test that findHtmid works correctly on vectors
     """
     rng = np.random.RandomState(81723122)
     n_samples = 1000
     ra = rng.random_sample(n_samples) * 360.0
     dec = rng.random_sample(n_samples) * 180.0 - 90.0
     level = 7
     htmid_vec = findHtmid(ra, dec, level)
     self.assertIsInstance(htmid_vec, np.ndarray)
     htmid_fast = _findHtmid_fast(ra, dec, level)
     self.assertIsInstance(htmid_fast, np.ndarray)
     np.testing.assert_array_equal(htmid_vec, htmid_fast)
     for ii in range(n_samples):
         htmid_slow = _findHtmid_slow(ra[ii], dec[ii], level)
         self.assertIsInstance(htmid_slow, numbers.Number)
         self.assertEqual(htmid_slow, htmid_vec[ii])
         htmid_single = findHtmid(ra[ii], dec[ii], level)
         self.assertIsInstance(htmid_single, numbers.Number)
         self.assertEqual(htmid_single, htmid_vec[ii])
Пример #5
0
 def test_against_fatboy(self):
     """
     Test findHtmid against a random selection of stars from fatboy
     """
     dtype = np.dtype([('htmid', int), ('ra', float), ('dec', float)])
     data = np.genfromtxt(os.path.join(getPackageDir('sims_utils'), 'tests',
                                       'testData', 'htmid_test_data.txt'),
                          dtype=dtype)
     self.assertGreater(len(data), 20)
     for i_pt in range(len(data)):
         htmid_test = findHtmid(data['ra'][i_pt], data['dec'][i_pt], 21)
         self.assertEqual(htmid_test, data['htmid'][i_pt])
         level_test = levelFromHtmid(htmid_test)
         self.assertEqual(level_test, 21)
Пример #6
0
 def test_against_fatboy(self):
     """
     Test findHtmid against a random selection of stars from fatboy
     """
     dtype = np.dtype([('htmid', int), ('ra', float), ('dec', float)])
     data = np.genfromtxt(os.path.join(getPackageDir('sims_utils'), 'tests',
                                       'testData', 'htmid_test_data.txt'),
                          dtype=dtype)
     self.assertGreater(len(data), 20)
     for i_pt in range(len(data)):
         htmid_test = findHtmid(data['ra'][i_pt], data['dec'][i_pt], 21)
         self.assertEqual(htmid_test, data['htmid'][i_pt])
         level_test = levelFromHtmid(htmid_test)
         self.assertEqual(level_test, 21)
Пример #7
0
 def test_trixel_from_htmid(self):
     """
     Check that trixelFromHtmid works by
     finding the htmid from an RA, Dec pair,
     instantiating the Trixel corresponding
     to that htmid, and verifying that that
     Trixel (and not its neighbors) contains
     the RA, Dec pair.
     """
     rng = np.random.RandomState(88)
     n_tests = 100
     for i_test in range(n_tests):
         pt = rng.normal(0.0, 1.0, 3)
         ra, dec = sphericalFromCartesian(pt)
         ra = np.degrees(ra)
         dec = np.degrees(dec)
         ii = findHtmid(ra, dec, 5)
         tt = trixelFromHtmid(ii)
         self.assertTrue(tt.contains(ra, dec))
         tt1 = trixelFromHtmid(ii-1)
         self.assertFalse(tt1.contains(ra, dec))
         tt2 = trixelFromHtmid(ii+1)
         self.assertFalse(tt2.contains(ra, dec))
Пример #8
0
 def test_trixel_from_htmid(self):
     """
     Check that trixelFromHtmid works by
     finding the htmid from an RA, Dec pair,
     instantiating the Trixel corresponding
     to that htmid, and verifying that that
     Trixel (and not its neighbors) contains
     the RA, Dec pair.
     """
     rng = np.random.RandomState(88)
     n_tests = 100
     for i_test in range(n_tests):
         pt = rng.normal(0.0, 1.0, 3)
         ra, dec = sphericalFromCartesian(pt)
         ra = np.degrees(ra)
         dec = np.degrees(dec)
         ii = findHtmid(ra, dec, 5)
         tt = trixelFromHtmid(ii)
         self.assertTrue(tt.contains(ra, dec))
         tt1 = trixelFromHtmid(ii - 1)
         self.assertFalse(tt1.contains(ra, dec))
         tt2 = trixelFromHtmid(ii + 1)
         self.assertFalse(tt2.contains(ra, dec))
Пример #9
0
    def setUpClass(cls):
        print('setting up %s' % sims_clean_up.targets)

        cls.camera = obs_lsst_phosim.PhosimMapper().camera

        # These represent the dimmest magnitudes at which objects
        # are considered visible in each of the LSST filters
        # (taken from Table 2 of the overview paper)
        cls.obs_mag_cutoff = (23.68, 24.89, 24.43, 24.0, 24.45, 22.60)

        cls.opsim_db = os.path.join(getPackageDir('sims_data'),
                                    'OpSimData',
                                    'opsimblitz1_1133_sqlite.db')

        rng = np.random.RandomState(8123)

        obs_gen = ObservationMetaDataGenerator(database=cls.opsim_db)
        cls.obs_list = obs_gen.getObservationMetaData(night=(0, 2))
        cls.obs_list = rng.choice(cls.obs_list, 10, replace=False)
        fieldid_list = []
        for obs in cls.obs_list:
            fieldid_list.append(obs.OpsimMetaData['fieldID'])

        # make sure we have selected observations such that the
        # same field is revisited more than once
        assert len(np.unique(fieldid_list)) < len(fieldid_list)

        cls.input_dir = tempfile.mkdtemp(prefix='alertDataGen',
                                         dir=ROOT)

        cls.star_db_name = tempfile.mktemp(prefix='alertDataGen_star_db',
                                           dir=cls.input_dir,
                                           suffix='.db')

        conn = sqlite3.connect(cls.star_db_name)
        cursor = conn.cursor()
        cursor.execute('''CREATE TABLE stars
                          (simobjid int, htmid int, ra real, dec real,
                           umag real, gmag real, rmag real,
                           imag real, zmag real, ymag real,
                           px real, pmra real, pmdec real,
                           vrad real, varParamStr text)''')
        conn.commit()

        n_stars = 10

        cls.ra_truth = np.zeros(n_stars*len(cls.obs_list), dtype=float)
        cls.dec_truth = np.zeros(n_stars*len(cls.obs_list), dtype=float)
        u_truth = np.zeros(n_stars*len(cls.obs_list), dtype=float)
        g_truth = np.zeros(n_stars*len(cls.obs_list), dtype=float)
        r_truth = np.zeros(n_stars*len(cls.obs_list), dtype=float)
        i_truth = np.zeros(n_stars*len(cls.obs_list), dtype=float)
        z_truth = np.zeros(n_stars*len(cls.obs_list), dtype=float)
        y_truth = np.zeros(n_stars*len(cls.obs_list), dtype=float)
        cls.px_truth = np.zeros(n_stars*len(cls.obs_list), dtype=float)
        cls.pmra_truth = np.zeros(n_stars*len(cls.obs_list), dtype=float)
        cls.pmdec_truth = np.zeros(n_stars*len(cls.obs_list), dtype=float)
        cls.vrad_truth = np.zeros(n_stars*len(cls.obs_list), dtype=float)
        cls.amp_truth = np.zeros(n_stars*len(cls.obs_list), dtype=float)
        cls.period_truth = np.zeros(n_stars*len(cls.obs_list), dtype=float)

        id_offset = -n_stars
        for obs in cls.obs_list:
            id_offset += n_stars
            ra_0 = obs.pointingRA
            dec_0 = obs.pointingDec
            rr = rng.random_sample(n_stars)
            theta = rng.random_sample(n_stars)*2.0*np.pi
            ra = ra_0 + rr*np.cos(theta)
            dec = dec_0 + rr*np.sin(theta)
            var_period = rng.random_sample(n_stars)*0.25
            var_amp = rng.random_sample(n_stars)*1.0 + 0.01

            subset = rng.randint(0, high=len(var_amp)-1, size=3)
            var_amp[subset[:2]] = 0.0
            var_amp[subset[-1]] = -1.0

            umag = rng.random_sample(n_stars)*5.0 + 15.0
            gmag = rng.random_sample(n_stars)*5.0 + 15.0
            rmag = rng.random_sample(n_stars)*5.0 + 15.0
            imag = rng.random_sample(n_stars)*5.0 + 15.0
            zmag = rng.random_sample(n_stars)*5.0 + 15.0
            ymag = rng.random_sample(n_stars)*5.0 + 15.0
            px = rng.random_sample(n_stars)*0.1  # say it is arcsec
            pmra = rng.random_sample(n_stars)*50.0+100.0  # say it is arcsec/yr
            pmdec = rng.random_sample(n_stars)*50.0+100.0  # say it is arcsec/yr
            vrad = rng.random_sample(n_stars)*600.0 - 300.0

            subset = rng.randint(0, high=n_stars-1, size=3)
            umag[subset] = 40.0
            gmag[subset] = 40.0
            rmag[subset] = 40.0
            imag[subset] = 40.0
            zmag[subset] = 40.0
            ymag[subset] = 40.0

            cls.ra_truth[id_offset:id_offset+n_stars] = np.round(ra, decimals=6)
            cls.dec_truth[id_offset:id_offset+n_stars] = np.round(dec, decimals=6)
            u_truth[id_offset:id_offset+n_stars] = np.round(umag, decimals=4)
            g_truth[id_offset:id_offset+n_stars] = np.round(gmag, decimals=4)
            r_truth[id_offset:id_offset+n_stars] = np.round(rmag, decimals=4)
            i_truth[id_offset:id_offset+n_stars] = np.round(imag, decimals=4)
            z_truth[id_offset:id_offset+n_stars] = np.round(zmag, decimals=4)
            y_truth[id_offset:id_offset+n_stars] = np.round(ymag, decimals=4)
            cls.px_truth[id_offset:id_offset+n_stars] = np.round(px, decimals=4)
            cls.pmra_truth[id_offset:id_offset+n_stars] = np.round(pmra, decimals=4)
            cls.pmdec_truth[id_offset:id_offset+n_stars] = np.round(pmdec, decimals=4)
            cls.vrad_truth[id_offset:id_offset+n_stars] = np.round(vrad, decimals=4)
            cls.amp_truth[id_offset:id_offset+n_stars] = np.round(var_amp, decimals=4)
            cls.period_truth[id_offset:id_offset+n_stars] = np.round(var_period, decimals=4)

            cls.max_str_len = -1

            for i_star in range(n_stars):
                if var_amp[i_star] >= -0.1:
                    varParamStr = ('{"m":"alert_test", "p":{"amp":%.4f, "per": %.4f}}'
                                   % (var_amp[i_star], var_period[i_star]))
                else:
                    varParamStr = 'None'

                if len(varParamStr) > cls.max_str_len:
                    cls.max_str_len = len(varParamStr)

                htmid = findHtmid(ra[i_star], dec[i_star], 21)

                query = ('''INSERT INTO stars VALUES(%d, %d, %.6f, %.6f,
                                                    %.4f, %.4f, %.4f, %.4f, %.4f, %.4f,
                                                    %.4f, %.4f, %.4f, %.4f, '%s')'''
                         % (i_star+id_offset+1, htmid, ra[i_star], dec[i_star],
                            umag[i_star], gmag[i_star], rmag[i_star],
                            imag[i_star], zmag[i_star], ymag[i_star],
                            px[i_star], pmra[i_star], pmdec[i_star],
                            vrad[i_star], varParamStr))

                cursor.execute(query)
        conn.commit()
        conn.close()

        cls.output_dir = tempfile.mkdtemp(dir=ROOT, prefix='alert_gen_output')
        cls.mag0_truth_dict = {}
        cls.mag0_truth_dict[0] = u_truth
        cls.mag0_truth_dict[1] = g_truth
        cls.mag0_truth_dict[2] = r_truth
        cls.mag0_truth_dict[3] = i_truth
        cls.mag0_truth_dict[4] = z_truth
        cls.mag0_truth_dict[5] = y_truth
Пример #10
0
    def setUpClass(cls):
        print('setting up %s' % sims_clean_up.targets)

        # These represent the dimmest magnitudes at which objects
        # are considered visible in each of the LSST filters
        # (taken from Table 2 of the overview paper)
        cls.obs_mag_cutoff = (23.68, 24.89, 24.43, 24.0, 24.45, 22.60)

        cls.opsim_db = os.path.join(getPackageDir('sims_data'),
                                    'OpSimData',
                                    'opsimblitz1_1133_sqlite.db')

        rng = np.random.RandomState(8123)

        obs_gen = ObservationMetaDataGenerator(database=cls.opsim_db)
        cls.obs_list = obs_gen.getObservationMetaData(night=(0, 2))
        cls.obs_list = rng.choice(cls.obs_list, 10, replace=False)
        fieldid_list = []
        for obs in cls.obs_list:
            fieldid_list.append(obs.OpsimMetaData['fieldID'])

        # make sure we have selected observations such that the
        # same field is revisited more than once
        assert len(np.unique(fieldid_list)) < len(fieldid_list)

        cls.input_dir = tempfile.mkdtemp(prefix='alertDataGen',
                                         dir=ROOT)

        cls.star_db_name = tempfile.mktemp(prefix='alertDataGen_star_db',
                                           dir=cls.input_dir,
                                           suffix='.db')

        conn = sqlite3.connect(cls.star_db_name)
        cursor = conn.cursor()
        cursor.execute('''CREATE TABLE stars
                          (simobjid int, htmid int, ra real, dec real,
                           umag real, gmag real, rmag real,
                           imag real, zmag real, ymag real,
                           px real, pmra real, pmdec real,
                           vrad real, varParamStr text)''')
        conn.commit()

        n_stars = 10

        cls.ra_truth = np.zeros(n_stars*len(cls.obs_list), dtype=float)
        cls.dec_truth = np.zeros(n_stars*len(cls.obs_list), dtype=float)
        u_truth = np.zeros(n_stars*len(cls.obs_list), dtype=float)
        g_truth = np.zeros(n_stars*len(cls.obs_list), dtype=float)
        r_truth = np.zeros(n_stars*len(cls.obs_list), dtype=float)
        i_truth = np.zeros(n_stars*len(cls.obs_list), dtype=float)
        z_truth = np.zeros(n_stars*len(cls.obs_list), dtype=float)
        y_truth = np.zeros(n_stars*len(cls.obs_list), dtype=float)
        cls.px_truth = np.zeros(n_stars*len(cls.obs_list), dtype=float)
        cls.pmra_truth = np.zeros(n_stars*len(cls.obs_list), dtype=float)
        cls.pmdec_truth = np.zeros(n_stars*len(cls.obs_list), dtype=float)
        cls.vrad_truth = np.zeros(n_stars*len(cls.obs_list), dtype=float)
        cls.amp_truth = np.zeros(n_stars*len(cls.obs_list), dtype=float)
        cls.period_truth = np.zeros(n_stars*len(cls.obs_list), dtype=float)

        id_offset = -n_stars
        for obs in cls.obs_list:
            id_offset += n_stars
            ra_0 = obs.pointingRA
            dec_0 = obs.pointingDec
            rr = rng.random_sample(n_stars)
            theta = rng.random_sample(n_stars)*2.0*np.pi
            ra = ra_0 + rr*np.cos(theta)
            dec = dec_0 + rr*np.sin(theta)
            var_period = rng.random_sample(n_stars)*0.25
            var_amp = rng.random_sample(n_stars)*1.0 + 0.01

            subset = rng.randint(0, high=len(var_amp)-1, size=3)
            var_amp[subset[:2]] = 0.0
            var_amp[subset[-1]] = -1.0

            umag = rng.random_sample(n_stars)*5.0 + 15.0
            gmag = rng.random_sample(n_stars)*5.0 + 15.0
            rmag = rng.random_sample(n_stars)*5.0 + 15.0
            imag = rng.random_sample(n_stars)*5.0 + 15.0
            zmag = rng.random_sample(n_stars)*5.0 + 15.0
            ymag = rng.random_sample(n_stars)*5.0 + 15.0
            px = rng.random_sample(n_stars)*0.1  # say it is arcsec
            pmra = rng.random_sample(n_stars)*50.0+100.0  # say it is arcsec/yr
            pmdec = rng.random_sample(n_stars)*50.0+100.0  # say it is arcsec/yr
            vrad = rng.random_sample(n_stars)*600.0 - 300.0

            subset = rng.randint(0, high=n_stars-1, size=3)
            umag[subset] = 40.0
            gmag[subset] = 40.0
            rmag[subset] = 40.0
            imag[subset] = 40.0
            zmag[subset] = 40.0
            ymag[subset] = 40.0

            cls.ra_truth[id_offset:id_offset+n_stars] = np.round(ra, decimals=6)
            cls.dec_truth[id_offset:id_offset+n_stars] = np.round(dec, decimals=6)
            u_truth[id_offset:id_offset+n_stars] = np.round(umag, decimals=4)
            g_truth[id_offset:id_offset+n_stars] = np.round(gmag, decimals=4)
            r_truth[id_offset:id_offset+n_stars] = np.round(rmag, decimals=4)
            i_truth[id_offset:id_offset+n_stars] = np.round(imag, decimals=4)
            z_truth[id_offset:id_offset+n_stars] = np.round(zmag, decimals=4)
            y_truth[id_offset:id_offset+n_stars] = np.round(ymag, decimals=4)
            cls.px_truth[id_offset:id_offset+n_stars] = np.round(px, decimals=4)
            cls.pmra_truth[id_offset:id_offset+n_stars] = np.round(pmra, decimals=4)
            cls.pmdec_truth[id_offset:id_offset+n_stars] = np.round(pmdec, decimals=4)
            cls.vrad_truth[id_offset:id_offset+n_stars] = np.round(vrad, decimals=4)
            cls.amp_truth[id_offset:id_offset+n_stars] = np.round(var_amp, decimals=4)
            cls.period_truth[id_offset:id_offset+n_stars] = np.round(var_period, decimals=4)

            cls.max_str_len = -1

            for i_star in range(n_stars):
                if var_amp[i_star] >= -0.1:
                    varParamStr = ('{"m":"alert_test", "p":{"amp":%.4f, "per": %.4f}}'
                                   % (var_amp[i_star], var_period[i_star]))
                else:
                    varParamStr = 'None'

                if len(varParamStr) > cls.max_str_len:
                    cls.max_str_len = len(varParamStr)

                htmid = findHtmid(ra[i_star], dec[i_star], 21)

                query = ('''INSERT INTO stars VALUES(%d, %d, %.6f, %.6f,
                                                    %.4f, %.4f, %.4f, %.4f, %.4f, %.4f,
                                                    %.4f, %.4f, %.4f, %.4f, '%s')'''
                         % (i_star+id_offset+1, htmid, ra[i_star], dec[i_star],
                            umag[i_star], gmag[i_star], rmag[i_star],
                            imag[i_star], zmag[i_star], ymag[i_star],
                            px[i_star], pmra[i_star], pmdec[i_star],
                            vrad[i_star], varParamStr))

                cursor.execute(query)
        conn.commit()
        conn.close()

        cls.output_dir = tempfile.mkdtemp(dir=ROOT, prefix='alert_gen_output')
        cls.mag0_truth_dict = {}
        cls.mag0_truth_dict[0] = u_truth
        cls.mag0_truth_dict[1] = g_truth
        cls.mag0_truth_dict[2] = r_truth
        cls.mag0_truth_dict[3] = i_truth
        cls.mag0_truth_dict[4] = z_truth
        cls.mag0_truth_dict[5] = y_truth
Пример #11
0
            per = duration / (i_file + 1)
            predict = per * len(data_dir_file_names)
            full_name = os.path.join(args.in_dir, file_name)
            print('reading %s; elapsed %.2e; predict %.2e' %
                  (file_name, duration, predict))

            with open(full_name, 'r') as input_file:
                input_lines = input_file.readlines()[1:]

            params_list = []
            for line in input_lines:
                params = line.strip().split(',')

                if len(params) == 23:
                    htmid = findHtmid(float(params[21]),
                                      float(params[22]),
                                      max_level=htmid_level)

                    pv = [htmid, int(params[0])]
                    pv += [float(pp) for pp in params[1:6]]
                    pv += [float(params[11])]
                    pv += [params[20]]
                    pv += [float(params[21]), float(params[22])]

                elif len(params) == 10:
                    htmid = findHtmid(float(params[8]),
                                      float(params[9]),
                                      max_level=htmid_level)

                    pv = [htmid, int(params[0])]
                    pv += [float(params[1]), float(params[2])]
                obs_mag_i = obs_mag_i[valid]
                bhm = bhm[valid]
                galaxy_id = galaxy_id[valid]
                ra = ra[valid]
                dec = dec[valid]
                for other_bp in bands:
                    sf_dict[other_bp] = sf_dict[other_bp][valid]
                    tau_dict[other_bp] = tau_dict[other_bp][valid]

            interpolated_m_i = np.interp(redshift, z_grid, m_i_grid)
            interpolated_mag_norm = np.interp(redshift, z_grid, mag_norm_grid)
            mag_norm = interpolated_mag_norm + (obs_mag_i - interpolated_m_i)

            seed_arr = rng.randint(1, high=10000000, size=len(redshift))

            htmid = findHtmid(ra, dec, htmid_level)

            varParamStr_format \
                = ('{"m": "applyAgn", "p": {"seed": %d, '
                   '"agn_sf_u": %.3e, "agn_sf_g": %.3e, "agn_sf_r": %.3e, '
                   '"agn_sf_i": %.3e, "agn_sf_z": %.3e, "agn_sf_y": %.3e, '
                   '"agn_tau_u" : %.3e, "agn_tau_g" : %.3e, "agn_tau_r" : %.3e, '
                   '"agn_tau_i" : %.3e, "agn_tau_z" : %.3e, "agn_tau_y" : %.3e}}')

            row_by_row = zip(galaxy_id, htmid, mag_norm, redshift, abs_mag_i,
                             ra, dec, seed_arr, sf_dict['u'], sf_dict['g'],
                             sf_dict['r'], sf_dict['i'], sf_dict['z'],
                             sf_dict['y'], tau_dict['u'], tau_dict['g'],
                             tau_dict['r'], tau_dict['i'], tau_dict['z'],
                             tau_dict['y'])
 def get_htmid(self):
     ra = np.degrees(self.column_by_name('raJ2000'))
     dec = np.degrees(self.column_by_name('decJ2000'))
     return findHtmid(ra, dec, max_level=_truth_trixel_level)
    get_physical_characteristics.teff_dict[sed_name] = tt
    get_physical_characteristics.metal_dict[sed_name] = mm
    get_physical_characteristics.logg_dict[sed_name] = gg

    return tt, mm, gg


if __name__ == "__main__":

    trixel_dict = getAllTrixels(6)

    hs1 = halfSpaceFromRaDec(0.0, 90.0, 91.3)
    hs2 = halfSpaceFromRaDec(0.0, -90.0, 91.3)
    for ra in range(0, 360, 20):
        htmid = findHtmid(ra, 0.0, max_level=6)
        tx = trixelFromHtmid(htmid)
        assert hs1.contains_trixel(tx) != 'outside'
        assert hs2.contains_trixel(tx) != 'outside'

    valid_htmid = []
    n_6 = 0
    for htmid in trixel_dict:
        if levelFromHtmid(htmid) != 6:
            continue
        n_6 += 1
        tx = trixel_dict[htmid]
        if hs1.contains_trixel(tx) != 'outside':
            if hs2.contains_trixel(tx) != 'outside':
                valid_htmid.append(htmid)
    print(n_6, len(valid_htmid))