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)
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()