Ejemplo n.º 1
0
def create_grism_waverange(outname="",
                           history="NIRCAM Grism wavelengthrange",
                           author="STScI",
                           module="N/A",
                           pupil="N/A",
                           filter_range=None):
    """Create a wavelengthrange reference file. There is a different file for each filter

    Supply a filter range dictionary or use the default

    """
    ref_kw = common_reference_file_keywords(reftype="wavelengthrange",
                                            title="NIRISS WFSS waverange",
                                            exp_type="NIS_WFSS",
                                            description="NIRISS WFSS Filter Wavelength Ranges",
                                            useafter="2014-01-01T00:00:00",
                                            author=author,
                                            model_type="WavelengthrangeModel",
                                            module=module,
                                            pupil=None,
                                            filename=outname,
                                            filtername=None)

    if filter_range is None:
        # These numbers from Grabriel Brammer, in microns
        # There is only one set of ranges because they are
        # valid for all orders listed, the wavelengthrange
        # file requires a double array by order, so they
        # will be replicated for each order, this allows
        # allows adaptation for future updates per order
        filter_range = {'F090W': [0.79, 1.03],
                        'F115W': [0.97, 1.32],
                        'F140M': [1.29, 1.52],
                        'F150W': [1.29, 1.71],
                        'F158M': [1.41, 1.74],
                        'F200W': [1.70, 2.28]
                        }
        orders = [-1, 0, 1, 2, 3]
    else:
        # array of integers
        orders = list(filter_range.keys())
        orders.sort()

    # same filters for every order, array of strings
    wrange_selector = list(filter_range.keys())
    wrange_selector.sort()

    # The lists below need
    # to remain ordered to be correctly referenced
    wavelengthrange = []
    for order in orders:
        o = []
        for fname in wrange_selector:
            o.append(filter_range[fname])
        wavelengthrange.append(o)

    ref = wcs_ref_models.WavelengthrangeModel()
    ref.meta.update(ref_kw)
    ref.meta.input_units = u.micron
    ref.meta.output_units = u.micron
    ref.wrange_selector = wrange_selector
    ref.wrange = wavelengthrange
    ref.order = orders
    entry = HistoryEntry({'description': history, 'time': datetime.datetime.utcnow()})
    sdict = Software({'name': 'niriss_reftools.py',
                      'author': author,
                      'homepage': 'https://github.com/spacetelescope/jwreftools',
                      'version': '0.7.1'})
    entry['sofware'] = sdict
    ref.history['entries'] = [entry]
    ref.to_asdf(outname)
    ref.validate()
def create_tsgrism_wavelengthrange(outname="wfc3_tsgrism_wavelengthrange.asdf",
                                   history="WFC3 TSGrism wavelengthrange",
                                   author="STScI",
                                   wavelengthrange=None,
                                   extract_orders=None):
    """Create a wavelengthrange reference file for WFC3 TSGRISM mode.

    Parameters
    ----------
    outname: str
        The output name of the file
    history: str
        History information about it's creation
    author: str
        Person or entity making the file
    wavelengthrange: list(tuples)
        A list of tuples that set the order, filter, and
        wavelength range min and max
    extract_orders: list[list]
        A list of lists that specify

    """
    ref_kw = common_reference_file_keywords(
        reftype="wavelengthrange",
        title="WFC3 TSGRISM reference file",
        description="WFC3 Grism-Filter Wavelength Ranges",
        exp_type="WFC3_TSGRISM",
        author=author,
        pupil="ANY",
        model_type="WavelengthrangeModel",
        filename=outname,
    )

    if wavelengthrange is None:
        # This is a list of tuples that specify the
        # order, filter, wave min, wave max
        wavelengthrange = [
            (-1, 'G102', 0.7488958984375, 1.1496958984375),
            (0, 'G102', 0.7401, 1.2297),
            (1, 'G102', 0.7496, 1.1979),
            (2, 'G102', 0.7401, 1.1897),
            (3, 'G102', 0.7571, 0.9878),
            (-1, 'G141', 1.031, 1.7845),
            (0, 'G141', 1.0402, 1.6998),
            (1, 'G141', 0.9953, 1.7697),
            (2, 'G141', 0.9702, 1.5903),
            (3, 'G141', 1.0068, 1.3875),
            (4, 'G141', 1.031, 1.7845),
        ]

    # array of integers of unique orders
    orders = sorted(set((x[0] for x in wavelengthrange)))
    filters = sorted(set((x[1] for x in wavelengthrange)))

    # Nircam has not specified any limitation on the orders
    # that should be extracted by default yet so all are
    # included.
    if extract_orders is None:
        extract_orders = [
            ('G102', [1]),
            ('G141', [1]),
        ]

    ref = wcs_ref_models.WavelengthrangeModel()
    ref.meta.update(ref_kw)
    ref.meta.exposure.p_exptype = "WFC3_TSGRISM"
    ref.meta.input_units = u.micron
    ref.meta.output_units = u.micron
    ref.wavelengthrange = wavelengthrange
    ref.extract_orders = extract_orders
    ref.order = orders
    ref.waverange_selector = filters

    history = HistoryEntry({
        'description': history,
        'time': datetime.datetime.utcnow()
    })
    software = Software({
        'name': 'wfc3_reftools.py',
        'author': author,
        'homepage': 'https://github.com/spacetelescope/astrogrism_sandbox',
        'version': '0.0.0'
    })
    history['software'] = software
    ref.history = [history]
    ref.validate()
    ref.to_asdf(outname)
def create_wfss_wavelengthrange(outname="nircam_wfss_wavelengthrange.asdf",
                                history="Ground NIRCAM Grism wavelengthrange",
                                author="STScI",
                                wavelengthrange=None,
                                extract_orders=None):
    """Create a wavelengthrange reference file for NIRCAM.

    Parameters
    ----------
    outname: str
        The output name of the file
    history: str
        History information about it's creation
    author: str
        Person or entity making the file
    wavelengthrange: list(tuples)
        A list of tuples that set the order, filter, and
        wavelength range min and max
    extract_orders: list[list]
        A list of lists that specify

    """
    ref_kw = common_reference_file_keywords(
        reftype="wavelengthrange",
        title="NIRCAM WFSS reference file",
        description="NIRCAM Grism-Filter Wavelength Ranges",
        exp_type="NRC_WFSS",
        author=author,
        pupil="ANY",
        model_type="WavelengthrangeModel",
        filename=outname,
    )

    if wavelengthrange is None:
        # This is a list of tuples that specify the
        # order, filter, wave min, wave max
        wavelengthrange = [
            (1, 'F250M', 2.500411072, 4.800260833),
            (1, 'F277W', 2.500411072, 3.807062006),
            (1, 'F300M', 2.684896869, 4.025318456),
            (1, 'F322W2', 2.5011293930000003, 4.215842089),
            (1, 'F335M', 3.01459734, 4.260432726),
            (1, 'F356W', 3.001085025, 4.302320901),
            (1, 'F360M', 3.178096344, 4.00099629),
            (1, 'F410M', 3.6267051809999997, 4.5644598),
            (1, 'F430M', 4.04828939, 4.511761774),
            (1, 'F444W', 3.696969216, 4.899565197),
            (1, 'F460M', 3.103778615, 4.881999188),
            (1, 'F480M', 4.5158154679999996, 4.899565197),
            (2, 'F250M', 2.500411072, 2.667345336),
            (2, 'F277W', 2.500411072, 3.2642254050000004),
            (2, 'F300M', 2.6659796289999997, 3.2997071729999994),
            (2, 'F322W2', 2.5011293930000003, 4.136119434),
            (2, 'F335M', 2.54572003, 3.6780519760000003),
            (2, 'F356W', 2.529505253, 4.133416971),
            (2, 'F360M', 2.557881113, 4.83740855),
            (2, 'F410M', 2.5186954019999996, 4.759037127),
            (2, 'F430M', 2.5362614100000003, 4.541488865),
            (2, 'F444W', 2.5011293930000003, 4.899565197),
            (2, 'F460M', 2.575447122, 4.883350419),
            (2, 'F480M', 2.549773725, 4.899565197),
        ]
    # array of integers of unique orders
    orders = sorted(set((x[0] for x in wavelengthrange)))
    filters = sorted(set((x[1] for x in wavelengthrange)))

    # Nircam has not specified any limitation on the orders
    # that should be extracted by default yet so all are
    # included.
    if extract_orders is None:
        extract_orders = []
        for f in filters:
            extract_orders.append([f, orders])

    ref = wcs_ref_models.WavelengthrangeModel()
    ref.meta.update(ref_kw)
    ref.meta.exposure.p_exptype = "NRC_WFSS"
    ref.meta.input_units = u.micron
    ref.meta.output_units = u.micron
    ref.wavelengthrange = wavelengthrange
    ref.extract_orders = extract_orders
    ref.order = orders
    ref.waverange_selector = filters

    history = HistoryEntry({
        'description': history,
        'time': datetime.datetime.utcnow()
    })
    software = Software({
        'name': 'nircam_reftools.py',
        'author': author,
        'homepage': 'https://github.com/spacetelescope/jwreftools',
        'version': '0.7.1'
    })
    history['software'] = software
    ref.history = [history]
    ref.validate()
    ref.to_asdf(outname)
Ejemplo n.º 4
0
def create_grism_waverange(outname="",
                           history="Ground NIRCAM Grismwavelengthrange",
                           author="STScI",
                           filter_range=None):
    """Create a wavelengthrange reference file.

    Supply a filter range dictionary keyed on order or use the default

    """
    ref_kw = common_reference_file_keywords(reftype="wavelengthrange",
                                            title="NIRCAM Grism wavelenghtrange",
                                            description="NIRCAM Grism+Filter Wavelength Ranges",
                                            exp_type="NRC_GRISM",
                                            author=author,
                                            model_type="WavelengthrangeModel",
                                            filename=outname,
                                            )

    if filter_range is None:
        # These numbers from Nor Pirzkal, in microns
        filter_range = {1: {'F250M': [2.500411072, 4.800260833],
                            'F277W': [2.500411072, 3.807062006],
                            'F300M': [2.684896869, 4.025318456],
                            'F322W2': [2.5011293930000003, 4.215842089],
                            'F335M': [3.01459734, 4.260432726],
                            'F356W': [3.001085025, 4.302320901],
                            'F360M': [3.178096344, 4.00099629],
                            'F410M': [3.6267051809999997, 4.5644598],
                            'F430M': [4.04828939, 4.511761774],
                            'F444W': [3.696969216, 4.899565197],
                            'F460M': [3.103778615, 4.881999188],
                            'F480M': [4.5158154679999996, 4.899565197]},
                        2: {'F250M': [2.500411072, 2.667345336],
                            'F277W': [2.500411072, 3.2642254050000004],
                            'F300M': [2.6659796289999997, 3.2997071729999994],
                            'F322W2': [2.5011293930000003, 4.136119434],
                            'F335M': [2.54572003, 3.6780519760000003],
                            'F356W': [2.529505253, 4.133416971],
                            'F360M': [2.557881113, 4.83740855],
                            'F410M': [2.5186954019999996, 4.759037127],
                            'F430M': [2.5362614100000003, 4.541488865],
                            'F444W': [2.5011293930000003, 4.899565197],
                            'F460M': [2.575447122, 4.883350419],
                            'F480M': [2.549773725, 4.899565197]}}

    # array of integers
    orders = list(filter_range.keys())
    orders.sort()

    # same filters for every order, array of strings
    wrange_selector = list(filter_range[orders[0]].keys())
    wrange_selector.sort()

    # The lists below need
    # to remain ordered to be correctly referenced
    wavelengthrange = []
    for order in orders:
        o = []
        for fname in wrange_selector:
            o.append(filter_range[order][fname])
        wavelengthrange.append(o)

    ref = wcs_ref_models.WavelengthrangeModel()
    ref.meta.update(ref_kw)
    ref.meta.exposure.p_exptype = "NRC_GRISM|NRC_TSGRISM"
    ref.meta.input_units = u.micron
    ref.meta.output_units = u.micron
    ref.wrange_selector = wrange_selector
    ref.wrange = wavelengthrange
    ref.order = orders

    entry = HistoryEntry({'description': history, 'time': datetime.datetime.utcnow()})
    sdict = Software({'name': 'nircam_reftools.py',
                      'author': author,
                      'homepage': 'https://github.com/spacetelescope/jwreftools',
                      'version': '0.7.1'})
    entry['sofware'] = sdict
    ref.history['entries'] = [entry]
    ref.to_asdf(outname)
    ref.validate()