예제 #1
0
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)
예제 #2
0
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)
예제 #3
0
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']
예제 #4
0
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)
예제 #5
0
    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