def test_catalog_combination(): """Test the combination of two existing catalogs into one """ test_file = os.path.join(TEST_DATA_DIR, 'catalog_generation/TwoMass_test.cat') input_cat = ascii.read(test_file) # Create catalog 1 test_cat_1 = catalog_generator.PointSourceCatalog(ra=input_cat['x_or_RA'], dec=input_cat['y_or_Dec']) test_cat_1.add_magnitude_column(input_cat['2mass_j_m_magnitude'], magnitude_system='vegamag', instrument='nircam', filter_name='f200w') test_cat_1.add_magnitude_column(input_cat['2mass_h_m_magnitude'], magnitude_system='vegamag', instrument='nircam', filter_name='f090w') orig_length = len(test_cat_1.ra) orig_cat_1 = copy.deepcopy(test_cat_1) # Create catalog 2 test_cat_2 = catalog_generator.PointSourceCatalog(ra=input_cat['x_or_RA'] + 1., dec=input_cat['y_or_Dec'] + 1.) test_cat_2.add_magnitude_column(input_cat['2mass_h_m_magnitude'], magnitude_system='vegamag', instrument='nircam', filter_name='f200w') test_cat_2.add_magnitude_column(input_cat['2mass_h_m_magnitude'], magnitude_system='vegamag', instrument='nircam', filter_name='f090w') # Combine test_cat_1.add_catalog(test_cat_2) cat2_length = len(test_cat_2.ra) assert all(test_cat_1.ra[(0-cat2_length):] == test_cat_2.ra) assert all(test_cat_1.dec[(0-cat2_length):] == test_cat_2.dec) assert all(test_cat_1.ra[0: orig_length] == orig_cat_1.ra) assert all(test_cat_1.dec[0: orig_length] == orig_cat_1.dec)
def test_johnson_catalog_to_mirage_catalog(): input_catalog = os.path.join(TEST_DATA_DIR, 'catalog_generation/besancon_example.cat') filters = {'nircam': ['F090W/CLEAR', 'F322W2/F323N'], 'niriss': ['F090W', 'F277W'], 'fgs': ['GUIDER1'] } transformed = create_catalog.johnson_catalog_to_mirage_catalog(input_catalog, filters) in_cat = ascii.read(input_catalog) ra_vals = in_cat['RAJ2000'].data dec_vals = in_cat['DECJ2000'].data nrc_090 = [13.484183, 12.336812, 14.283301, 12.838769] nrc_323 = [13.58035, 12.420761, 14.363094, 12.93159] nis_090 = [13.483351, 12.335981, 14.282558, 12.837949] nis_277 = [13.572666, 12.4141, 14.356856, 12.924085] fgs_g1 = [13.490332, 12.341099, 14.287583, 12.844421] truth = catalog_generator.PointSourceCatalog(ra=ra_vals, dec=dec_vals) truth.add_magnitude_column(nrc_090, column_name='nircam_f090w_clear_magnitude') truth.add_magnitude_column(nrc_323, instrument='nircam', filter_name='F323N') truth.add_magnitude_column(nis_090, column_name='niriss_f090w_magnitude') truth.add_magnitude_column(nis_277, instrument='niriss', filter_name='F277W') truth.add_magnitude_column(fgs_g1, column_name='fgs_guider1_magnitude') for col in truth.table.colnames: assert np.allclose(truth.table[col].data, transformed.table[col].data)
def test_ptsrc_catalog_creation(): """Test the generation of a basic point source catalog """ ra = np.zeros(10) + 80.0 dec = np.zeros(10) - 69.8 mags = np.zeros(10) + 19. ptsrc = catalog_generator.PointSourceCatalog(ra=ra, dec=dec) ptsrc.add_magnitude_column(mags, instrument='nircam', filter_name='f090w') ptsrc.add_magnitude_column(mags, instrument='nircam', filter_name='f200w') assert all(ptsrc.ra == ra) assert all(ptsrc.dec == dec) assert ptsrc.table.colnames == ['index', 'x_or_RA', 'y_or_Dec', 'nircam_f090w_magnitude', 'nircam_f200w_magnitude']
def test_catalog_index_check(): """Test the code that assures no overlap of source indexes """ #Make point source catalog ra = np.zeros(10) + 80.0 dec = np.zeros(10) - 69.8 mags = np.zeros(10) + 19. ptsrc = catalog_generator.PointSourceCatalog(ra=ra, dec=dec, starting_index=1) ptsrc.add_magnitude_column(mags, instrument='nircam', filter_name='f090w') ptsrc_output_file = os.path.join(TEST_DATA_DIR, 'catalog_generation/ptsrc_test.cat') ptsrc.save(ptsrc_output_file) # Make galaxy catalog indexes = np.arange(10, 20) radius = np.zeros(10) + 0.5 ellip = np.zeros(10) + 0.45 posang = np.zeros(10) + 27. sersic = np.zeros(10) + 3.3 gal_output_file = os.path.join(TEST_DATA_DIR, 'catalog_generation/galaxy_test.cat') gal = catalog_generator.GalaxyCatalog(ra=ra, dec=dec, ellipticity=ellip, radius=radius, sersic_index=sersic, position_angle=posang, radius_units='arcsec', starting_index=11) gal.add_magnitude_column(mags, instrument='nircam', filter_name='f090w') gal.save(gal_output_file) # Make moving point source catalog ra_vel_list = [0.2, 0.3, 0.4] dec_vel_list = [1.0, 1.1, 1.2] ephemeris_list = ['e1.txt', 'e2.txt', 'e3.txt'] mpt = catalog_generator.MovingPointSourceCatalog(ra=ra[0:3], dec=dec[0:3], ra_velocity=ra_vel_list, dec_velocity=dec_vel_list, ephemeris_file=ephemeris_list, starting_index=21) mpt.add_magnitude_column(mags[0:3], magnitude_system='abmag', instrument='nircam', filter_name='f444w') mpt_output_file = os.path.join(TEST_DATA_DIR, 'catalog_generation/moving_ptsrc_test.cat') mpt.save(mpt_output_file) # First a case where there is no overlap cat_list = [ptsrc_output_file, gal_output_file, mpt_output_file] overlap = utils.catalog_index_check(cat_list) assert overlap == (False, 23) # Now a case where there is overlap gal = catalog_generator.GalaxyCatalog(ra=ra, dec=dec, ellipticity=ellip, radius=radius, sersic_index=sersic, position_angle=posang, radius_units='arcsec', starting_index=4) gal.add_magnitude_column(mags, instrument='nircam', filter_name='f090w') gal.save(gal_output_file) overlap = utils.catalog_index_check(cat_list) assert overlap == (True, 23) # Overlap, but indexes between catalogs are out of order ptsrc = catalog_generator.PointSourceCatalog(ra=ra, dec=dec, starting_index=25) ptsrc.add_magnitude_column(mags, instrument='nircam', filter_name='f090w') ptsrc.save(ptsrc_output_file) gal = catalog_generator.GalaxyCatalog(ra=ra, dec=dec, ellipticity=ellip, radius=radius, sersic_index=sersic, position_angle=posang, radius_units='arcsec', starting_index=1) gal.add_magnitude_column(mags, instrument='nircam', filter_name='f090w') gal.save(gal_output_file) mpt = catalog_generator.MovingPointSourceCatalog(ra=ra[0:3], dec=dec[0:3], ra_velocity=ra_vel_list, dec_velocity=dec_vel_list, ephemeris_file=ephemeris_list, starting_index=29) mpt.add_magnitude_column(mags[0:3], magnitude_system='abmag', instrument='nircam', filter_name='f444w') mpt_output_file = os.path.join(TEST_DATA_DIR, 'catalog_generation/moving_ptsrc_test.cat') mpt.save(mpt_output_file) overlap = utils.catalog_index_check(cat_list) assert overlap == (True, 34) # No overlap, but indexes between catalogs are out of order ptsrc = catalog_generator.PointSourceCatalog(ra=ra, dec=dec, starting_index=25) ptsrc.add_magnitude_column(mags, instrument='nircam', filter_name='f090w') ptsrc.save(ptsrc_output_file) gal = catalog_generator.GalaxyCatalog(ra=ra, dec=dec, ellipticity=ellip, radius=radius, sersic_index=sersic, position_angle=posang, radius_units='arcsec', starting_index=1) gal.add_magnitude_column(mags, instrument='nircam', filter_name='f090w') gal.save(gal_output_file) mpt = catalog_generator.MovingPointSourceCatalog(ra=ra[0:3], dec=dec[0:3], ra_velocity=ra_vel_list, dec_velocity=dec_vel_list, ephemeris_file=ephemeris_list, starting_index=36) mpt.add_magnitude_column(mags[0:3], magnitude_system='abmag', instrument='nircam', filter_name='f444w') mpt_output_file = os.path.join(TEST_DATA_DIR, 'catalog_generation/moving_ptsrc_test.cat') mpt.save(mpt_output_file) overlap = utils.catalog_index_check(cat_list) assert overlap == (False, 38) # Clean up os.remove(ptsrc_output_file) os.remove(gal_output_file) os.remove(mpt_output_file)
def get_param_info(self): """Collect needed information out of the parameter file. Check parameter values for correctness Returns ------- parameters : dict Nested dictionary of parameters in the input yaml file """ self.catalog_files = [] parameters = utils.read_yaml(self.paramfile) # Create dictionary to use when looking in CRDS for reference files crds_dict = crds_tools.dict_from_yaml(parameters) # Expand reference file entries to be full path names parameters = utils.full_paths(parameters, self.modpath, crds_dict) try: CATALOG_YAML_ENTRIES.remove('tso_grism_catalog') except ValueError: pass try: CATALOG_YAML_ENTRIES.remove('tso_imaging_catalog') except ValueError: pass cats = [ parameters['simSignals'][cattype] for cattype in CATALOG_YAML_ENTRIES ] cats = [e for e in cats if e.lower() != 'none'] self.catalog_files.extend(cats) if len(self.catalog_files) == 0: # If no background source catalogs are given, create a dummy point # source catalog and add it to the list. Without this, the # creation of the final SED file would fail. Put the source # down near the SEP and with a magnitude such that it won't # disturb anything filter_name = parameters['Readout']['filter'].lower() dummy_ptsrc = catalog_generator.PointSourceCatalog(ra=[0.], dec=[-89.]) dummy_ptsrc.add_magnitude_column([40], instrument='nircam', filter_name=filter_name, magnitude_system='abmag') dummy_cat = 'dummy_ptsrc.cat' dummy_ptsrc.save(dummy_cat) self.catalog_files.append(dummy_cat) parameters['simSignals']['pointsource'] = dummy_cat self.instrument = parameters['Inst']['instrument'].lower() self.aperture = parameters['Readout']['array_name'] try: self.namps = parameters['Readout']['namp'] except KeyError: pass if self.instrument == 'niriss': self.module = None self.detetor = 'NIS' elif self.instrument == 'nircam': self.module = parameters['Readout']['array_name'][3] self.detector = parameters['Readout']['array_name'][0:5] else: raise ValueError( "ERROR: Grism TSO mode not supported for {}".format( self.instrument)) filter_name = parameters['Readout']['filter'] pupil_name = parameters['Readout']['pupil'] # In reality, the grism elements are in NIRCam's pupil wheel, and NIRISS's # filter wheel. But in the APT xml file, NIRISS grisms are in the pupil # wheel and the crossing filter is listed in the filter wheel. At that # point, NIRISS and NIRCam are consistent, so let's keep with this reversed # information if self.instrument == 'niriss': self.crossing_filter = pupil_name.upper() self.dispersion_direction = filter_name[-1].upper() elif self.instrument == 'nircam': if 'CLEAR' in pupil_name.upper(): raise ValueError( "ERROR: pupil cannot be CLEAR. It must be GRISMR or GRISMC." ) self.crossing_filter = filter_name.upper() self.dispersion_direction = pupil_name[-1].upper() return parameters