pypeit.spectrographs.spectrograph module

Defines the abstract Spectrograph class, which is the parent class for all instruments served by PypeIt.

The key functionality of this base class and its derived classes are to provide instrument-specific:

  • file I/O routines

  • detector properties (see DetectorContainer)

  • telescope properties (see TelescopePar)

  • fits header keywords that are collated and injested into a metadata table that it uses throughout the reduction (see PypeItMetaData)

  • header keyword values to check to confirm a fits file has been taken with the selected instrument

  • default methods for automatically determining the type of each exposure that PypeIt was asked to reduce

  • header keywords to use when matching calibration frames to science frames

  • methods used to generate and/or read bad-pixel masks for an exposure

  • default parameters for the reduction algorithms

  • methods to access an archival sky spectrum

class pypeit.spectrographs.spectrograph.Spectrograph[source]

Bases: object

Abstract base class for all instrument-specific behavior in PypeIt.

dispname

Name of the dispersing element.

Type

str

rawdatasec_img

An image identifying the amplifier that reads each detector pixel.

Type

numpy.ndarray

oscansec_img

An image identifying the amplifier that reads each detector pixel

Type

numpy.ndarray

slitmask

Provides slit and object coordinate data for an observation. Not necessarily populated for all spectrograph instantiations.

Type

SlitMask

primary_hdrext

0-indexed number of the extension in the raw frames with the primary header data.

Type

int

meta

Instrument-specific metadata model, linking header information to metadata elements required by PypeIt.

Type

dict

__repr__()[source]

Return a string representation of the instance.

_check_extensions(filename)[source]

Check if this filename has an allowed extension

Parameters

filename (str, Path) – Input raw fits filename

_check_telescope()[source]

Check the derived class has properly defined the telescope.

allowed_extensions = None

Defines the allowed extensions for the input fits files.

property allowed_mosaics

The list of allowed detector mosaics.

For instruments with no allowed detector mosaics, this must be returned as an empty list.

bpm(filename, det, shape=None, msbias=None)[source]

Generate a default bad-pixel mask.

Even though they are both optional, either the precise shape for the image (shape) or an example file that can be read to get the shape (filename using get_image_shape()) must be provided.

Parameters
  • filename (str) – An example file to use to get the image shape. Can be None.

  • det (int, tuple) – 1-indexed detector(s) to read. An image mosaic is selected using a tuple with the detectors in the mosaic, which must be one of the allowed mosaics returned by allowed_mosaics().

  • shape (tuple, optional) – Processed image shape. If filename is None, this must be provided; otherwise, this is ignored.

  • msbias (PypeItImage, optional) – Processed bias frame. If provided, it is used by bpm_frombias() to identify bad pixels.

Returns

An integer array with a masked value set to 1 and an unmasked value set to 0.

Return type

numpy.ndarray

bpm_frombias(msbias, bpm_img, thresh=10.0)[source]

Generate a bad-pixel mask from a processed bias frame.

Parameters
  • msbias (PypeItImage) – Processed bias frame used to identify bad pixels.

  • bpm_img (numpy.ndarray) – Zeroth-order bad pixel mask; i.e., generated using empty_bpm(). Must be the same shape as msbias.

  • thresh (float, optional) – The sigma threshold used to identify bad pixels.

Returns

An integer array with a masked value set to 1 and an unmasked value set to 0. The shape of the returned image is the same as the provided msbias and bpm_img images.

Return type

numpy.ndarray

calc_pattern_freq(frame, rawdatasec_img, oscansec_img, hdu)[source]

Calculate the pattern frequency using the overscan region that covers the overscan and data sections. Using a larger range allows the frequency to be pinned down with high accuracy.

Parameters
  • frame (numpy.ndarray) – Raw data frame to be used to estimate the pattern frequency.

  • rawdatasec_img (numpy.ndarray) – Array the same shape as frame, used as a mask to identify the data pixels (0 is no data, non-zero values indicate the amplifier number).

  • oscansec_img (numpy.ndarray) – Array the same shape as frame, used as a mask to identify the overscan pixels (0 is no data, non-zero values indicate the amplifier number).

  • hdu (astropy.io.fits.HDUList) – Opened fits file.

Returns

patt_freqs – List of pattern frequencies.

Return type

list

camera = None

Name of the spectrograph camera or arm. This is used by specdb, so use that naming convention

check_disperser()[source]

Ensure that the disperser is defined.

check_frame_type(ftype, fitstbl, exprng=None)[source]

Check for frames of the provided type.

Parameters
Returns

Boolean array with the flags selecting the exposures in fitstbl that are ftype type frames.

Return type

numpy.ndarray

Raises

NotImplementedError – Raised by the base class to denote that any derived class has not been properly defined.

comment = None

A brief comment or description regarding PypeIt usage with this spectrograph.

compound_meta(headarr, meta_key)[source]

Methods to generate metadata requiring interpretation of the header data, instead of simply reading the value of a header card.

Method is undefined in this base class.

Parameters
Returns

Metadata value read from the header(s).

Return type

object

config_independent_frames()[source]

Define frame types that are independent of the fully defined instrument configuration.

By default, bias and dark frames are considered independent of a configuration; however, at the moment, these frames can only be associated with a single configuration. That is, you cannot take afternoon biases, change the instrument configuration during the night, and then use the same biases for both configurations. See set_configurations().

This method returns a dictionary where the keys of the dictionary are the list of configuration-independent frame types. The value of each dictionary element can be set to one or more metadata keys that can be used to assign each frame type to a given configuration group. See set_configurations() and how it interprets the dictionary values, which can be None.

Returns

Dictionary where the keys are the frame types that are configuration-independent and the values are the metadata keywords that can be used to assign the frames to a configuration group.

Return type

dict

config_specific_par(scifile, inp_par=None)[source]

Modify the PypeIt parameters to hard-wired values used for specific instrument configurations.

Parameters
  • scifile (str) – File to use when determining the configuration and how to adjust the input parameters.

  • inp_par (ParSet, optional) – Parameter set used for the full run of PypeIt. If None, use default_pypeit_par().

Returns

The PypeIt parameter set adjusted for configuration specific parameter values.

Return type

ParSet

configuration_keys()[source]

Return the metadata keys that define a unique instrument configuration.

This list is used by PypeItMetaData to identify the unique configurations among the list of frames read for a given reduction.

Returns

List of keywords of data pulled from file headers and used to constuct the PypeItMetaData object.

Return type

list

property default_mosaic

Return the default detector mosaic.

For instruments with no allowed detector mosaics, this must be returned as None.

classmethod default_pypeit_par()[source]

Return the default parameters to use for this instrument.

Returns

Parameters required by all of PypeIt methods.

Return type

PypeItPar

property dloglam

Return the logarithmic step in wavelength for output spectra.

ech_fixed_format = None

If an echelle spectrograph, this will be set to a boolean indicating whether it is a fixed format or tiltable echelle.

empty_bpm(filename, det, shape=None)[source]

Generate a generic (empty) bad-pixel mask.

Even though they are both optional, either the precise shape for the image (shape) or an example file that can be read to get the shape (filename) must be provided. In the latter, the file is read, trimmed, and re-oriented to get the output shape. If both shape and filename are provided, shape is ignored.

This is the generic function provided in the base class meaning that all pixels are returned as being valid/unmasked.

Parameters
  • filename (str) – An example file to use to get the image shape. Can be None, but shape must be provided, if so. Note the overhead of this function is large if you filename. You’re better off providing shape, if you know it.

  • det (int) – 1-indexed detector number to use when getting the image shape from the example file.

  • shape (tuple, optional) – Processed image shape. I.e., if the image for this instrument is re-oriented, trimmed, etc, this shape must be that of the re-oriented (trimmed, etc) image. This is required if filename is None, but ignored otherwise.

Returns

An integer array with a masked value set to 1 and an unmasked value set to 0. The shape of the returned image should be that of a trimmed and oriented PypeIt processed image. This function specifically is the generic method for the base class, meaning that all pixels are returned as unmasked (0s).

Return type

numpy.ndarray

fit_2d_det_response(det_resp, gpmask)[source]

Perform a 2D model fit to the instrument-specific detector response.

Parameters
  • det_resp (numpy.ndarray) – An image of the detector response.

  • gpmask (numpy.ndarray) – Good pixel mask (True=good), the same shape as ff_struct.

Returns

A model fit to the detector response.

Return type

numpy.ndarray

get_comb_group(fitstbl)[source]

Automatically assign combination groups and background images by parsing known dither patterns.

This method is used in set_combination_groups(), and directly modifies the comb_id and bkg_id columns in the provided table.

This method is not defined for all spectrographs. This base-class implementation simply returns the input table.

Parameters

fitstbl (astropy.table.Table) – The table with the metadata for all the frames.

Returns

modified fitstbl.

Return type

astropy.table.Table

get_datacube_bins(slitlength, minmax, num_wave)[source]

Calculate the bin edges to be used when making a datacube.

Parameters
  • slitlength (int) – Length of the slit in pixels

  • minmax (numpy.ndarray) – An array with the minimum and maximum pixel locations on each slit relative to the reference location (usually the centre of the slit). Shape must be \((N_{\rm slits},2)\), and is typically the array returned by get_radec_image().

  • num_wave (int) –

    Number of wavelength steps. Given by::

    int(round((wavemax-wavemin)/delta_wave))

Returns

Three 1D numpy.ndarray providing the bins to use when constructing a histogram of the spec2d files. The elements are \((x,y,\lambda)\).

Return type

tuple

get_det_id(det)[source]

Return an identifying index for the detector or mosaic.

Parameters

det (int, tuple) – The 1-indexed detector number(s). If a tuple, it must include detectors designated as a viable mosaic for spectrograph; see allowed_mosaics().

Returns

Unique index for the detector or mosaic.

Return type

int

get_det_name(det)[source]

Return a name for the detector or mosaic.

This is a simple wrapper for pypeit.images.detector_container.DetectorContainer.get_name() or pypeit.images.mosaic.Mosaic.get_name(), depending on the type of det.

Parameters

det (int, tuple) – The 1-indexed detector number(s). If a tuple, it must include detectors designated as a viable mosaic for spectrograph; see allowed_mosaics().

Returns

Name for the detector or mosaic.

Return type

str

get_detector_par(det, hdu=None)[source]

Read/Set the detector metadata.

This method is needed by some instruments that require the detector metadata to be interpreted from the output files. This method is undefined in the base class.

get_echelle_angle_files()[source]

Pass back the files required to run the echelle method of wavecalib

Returns

List of files

Return type

list

get_headarr(inp, strict=True)[source]

Read the header data from all the extensions in the file.

Parameters
  • inp (str, Path, astropy.io.fits.HDUList) – Name of the file to read or the previously opened HDU list. If None, the function will simply return None.

  • strict (bool, optional) – Function will fault if fits.getheader() fails to read any of the headers. Set to False to report a warning and continue.

Returns

A list of astropy.io.fits.Header objects with the extension headers. If strict is False and inp is a file name to be opened, the function will return None if fits_open() faults for any reason.

Return type

list

get_lamps(fitstbl)[source]

Extract the list of arc lamps used from header.

This method is not defined for all spectrographs. This base-class method raises an exception.

get_lamps_status(headarr)[source]

Return a string containing the information on the lamp status.

Parameters

headarr (list) – A list of 1 or more astropy.io.fits.Header objects.

Returns

A string that uniquely represents the lamp status.

Return type

str

get_maskdef_slitedges(ccdnum=None, filename=None, debug=None, binning: Optional[str] = None, trc_path: Optional[str] = None)[source]

Provides the slit edges positions predicted by the slitmask design.

This method is not defined for all spectrographs. This base-class method raises an exception. This may be because use_maskdesign has been set to True for a spectrograph that does not support it.

Parameters
  • trc_path (str, optional) – Path to the first trace file used to generate the trace flat

  • binning (str, optional) – spec,spat binning of the flat field image

  • filename (str or list, optional) – Name of the file holding the mask design info or the maskfile and wcs_file in that order

  • debug (bool, optional) – Debug

  • ccdnum (int, optional) – detector number

get_meta_value(inp, meta_key, required=False, ignore_bad_header=False, usr_row=None, no_fussing=False)[source]

Return meta data from a given file (or its array of headers).

Parameters
  • inp (str, Path, astropy.io.fits.Header, list) – Input filename, an astropy.io.fits.Header object, or a list of astropy.io.fits.Header objects. If None, function simply returns None without issuing any warnings/errors, unless required is True.

  • meta_key (str, list) – A (list of) string(s) with the keywords to read from the file header(s).

  • required (bool, optional) – The metadata are required and must be available. If it is not, the method will raise an exception. Metadata requirements can be globally defined and/or frame-type specific for each spectrograph, which will override any value given here. See the required and required_ftype keyword in self.meta[meta_key].

  • ignore_bad_header (bool, optional) – PypeIt expects certain metadata values to have specific datatypes. If the keyword finds the appropriate data but it cannot be cast to the correct datatype, this parameter determines whether or not the method raises an exception. If True, the incorrect type is ignored. It is recommended that this be False unless you know for sure that PypeIt can proceed appropriately. This flag takes precedence over required; i.e., if ignore_bad_header is True, required is ignored.

  • usr_row (astropy.table.Table, optional) – A single row table with the user-supplied frametype. This is used to determine if the metadata value is required for each frametype. Must contain a columns called frametype; everything else is ignored.

  • no_fussing (bool, optional) – No type checking or anything. Just pass back the first value retrieved. This is mainly for bound pairs of meta, e.g. ra/dec.

Returns

Value recovered for (each) keyword. Can be None.

get_mosaic_par()[source]

Return the hard-coded parameters needed to construct detector mosaics.

get_rawimage(raw_file, det)[source]

Read raw images and generate a few other bits and pieces that are key for image processing.

Warning

  • When reading multiple detectors for a mosaic, this function expects all detector arrays to have exactly the same shape.

Parameters
  • raw_file (str, Path) – File to read

  • det (int, tuple) – 1-indexed detector(s) to read. An image mosaic is selected using a tuple with the detectors in the mosaic, which must be one of the allowed mosaics returned by allowed_mosaics().

Returns

  • detector_par (DetectorContainer, Mosaic) – Detector metadata parameters for one or more detectors.

  • raw_img (numpy.ndarray) – Raw image for this detector. Shape is 2D if a single detector image is read and 3D if multiple detectors are read. E.g., the image from the first detector in the tuple is accessed using raw_img[0].

  • hdu (astropy.io.fits.HDUList) – Opened fits file

  • exptime (float) – Exposure time in seconds.

  • rawdatasec_img (numpy.ndarray) – Data (Science) section of the detector as provided by setting the (1-indexed) number of the amplifier used to read each detector pixel. Pixels unassociated with any amplifier are set to 0. Shape is identical to raw_img.

  • oscansec_img (numpy.ndarray) – Overscan section of the detector as provided by setting the (1-indexed) number of the amplifier used to read each detector pixel. Pixels unassociated with any amplifier are set to 0. Shape is identical to raw_img.

get_slitmask(filename)[source]

Empty for base class. See derived classes.

get_wcs(hdr, slits, platescale, wave0, dwv, spatial_scale=None)[source]

Construct/Read a World-Coordinate System for a frame.

This is undefined in the base class.

Parameters
  • hdr (astropy.io.fits.Header) – The header of the raw frame. The information in this header will be extracted and returned as a WCS.

  • slits (SlitTraceSet) – Slit traces.

  • platescale (float) – The platescale of an unbinned pixel in arcsec/pixel (e.g. detector.platescale).

  • wave0 (float) – The wavelength zeropoint.

  • dwv (float) – Change in wavelength per spectral pixel.

  • spatial_scale (float, None, optional) – The spatial scale (units=arcsec/pixel) of the WCS to be used. This variable is fixed, and is independent of the binning. If spatial_scale is set, it will be used for the spatial size of the WCS and the platescale will be ignored. If None, then the platescale will be used.

Returns

The world-coordinate system.

Return type

astropy.wcs.wcs.WCS

header_name = None

Name of the spectrograph camera or arm from the Header. Usually the INSTRUME card.

idname(ftype)[source]

Return the idname for the selected frame type for this instrument.

Parameters

ftype (str) – Frame type, which should be one of the keys in FrameTypeBitMask.

Returns

The value of idname that should be available in the PypeItMetaData instance that identifies frames of this type.

Return type

str

Raises

NotImplementedError – Raised by the base class to denote that any derived class has not been properly defined.

init_meta()[source]

Define how metadata are derived from the spectrograph files.

That is, this associates the PypeIt-specific metadata keywords with the instrument-specific header cards using meta.

list_detectors(mosaic=False)[source]

List the names of the detectors in this spectrograph.

This is primarily used average_maskdef_offset() to measure the mean offset between the measured and expected slit locations. This method is not defined for all spectrographs.

Detectors separated along the dispersion direction should be ordered along the first axis of the returned array. For example, Keck/DEIMOS returns:

dets = np.array([['DET01', 'DET02', 'DET03', 'DET04'],
                 ['DET05', 'DET06', 'DET07', 'DET08']])

such that all the bluest detectors are in dets[0], and the slits found in detectors 1 and 5 are just from the blue and red counterparts of the same slit.

Parameters

mosaic (bool, optional) – Is this a mosaic reduction? It is used to determine how to list the detector, i.e., ‘DET’ or ‘MSC’.

Returns

The list of detectors in a numpy.ndarray. If the array is 2D, there are detectors separated along the dispersion axis.

Return type

numpy.ndarray

property loglam_minmax

Return the base-10 logarithm of the first and last wavelength for ouput spectra.

mask_to_pixel_coordinates(x=None, y=None, wave=None, order=1, filename=None, corners=False)[source]

Predict detector pixel coordinates for a given set of slit-mask coordinates.

This method is not defined for all spectrographs. This base-class method raises an exception. This may be because use_maskdesign has been set to True for a spectrograph that does not support it.

meta_data_model = {'airmass': {'comment': 'Airmass', 'dtype': <class 'float'>}, 'amp': {'comment': 'Amplifier used', 'dtype': <class 'str'>}, 'arm': {'comment': 'Name of arm (e.g. NIR for X-Shooter)', 'dtype': <class 'str'>}, 'binning': {'comment': '"spectral,spatial" binning', 'dtype': <class 'str'>}, 'calpos': {'comment': 'Position of calibration system (KCWI)', 'dtype': <class 'str'>}, 'cenwave': {'comment': 'Central wavelength of the disperser', 'dtype': <class 'float'>, 'rtol': 0.0}, 'datasec': {'comment': 'Data section (windowing)', 'dtype': <class 'str'>}, 'dateobs': {'comment': 'Observation date', 'dtype': <class 'str'>}, 'dec': {'comment': '(J2000) DEC in decimal degrees', 'dtype': <class 'float'>}, 'decker': {'comment': 'Slit/mask/decker name', 'dtype': <class 'str'>}, 'decker_secondary': {'comment': 'Partial Slitmask/decker name. It differs from decker. This is currently only needed for the reduction of some MOSFIRE masks, which use calibrations taken with a partially different decker name than the one used for the associated science frames.', 'dtype': <class 'str'>}, 'detector': {'comment': 'Name of detector', 'dtype': <class 'str'>}, 'dichroic': {'comment': 'Beam splitter', 'dtype': <class 'str'>}, 'dispangle': {'comment': 'Angle of the disperser', 'dtype': <class 'float'>, 'rtol': 0.0}, 'dispname': {'comment': 'Disperser name', 'dtype': <class 'str'>}, 'dither': {'comment': 'Dither amount in arcsec', 'dtype': <class 'float'>}, 'dithoff': {'comment': 'Dither offset', 'dtype': <class 'float'>}, 'dithpat': {'comment': 'Dither pattern', 'dtype': <class 'str'>}, 'dithpos': {'comment': 'Dither position', 'dtype': <class 'str'>}, 'echangle': {'comment': 'Echelle angle', 'dtype': <class 'float'>}, 'exptime': {'comment': 'Exposure time (s)', 'dtype': <class 'float'>}, 'filter1': {'comment': 'First filter in optical path', 'dtype': <class 'str'>}, 'frameno': {'comment': 'Frame number provided by instrument software', 'dtype': <class 'str'>}, 'hatch': {'comment': 'Position of instrument hatch', 'dtype': <class 'str'>}, 'humidity': {'comment': 'Relative humidity (0 to 1) at observation time', 'dtype': <class 'float'>}, 'idname': {'comment': 'Instrument supplied frametype (e.g. bias)', 'dtype': <class 'str'>}, 'instrument': {'comment': 'Header supplied instrument name', 'dtype': <class 'str'>}, 'lampshst01': {'comment': 'Status of a lamp shutter (e.g closed/open)', 'dtype': <class 'str'>}, 'lampshst02': {'comment': 'Status of a lamp shutter (e.g closed/open)', 'dtype': <class 'str'>}, 'lampshst03': {'comment': 'Status of a lamp shutter (e.g closed/open)', 'dtype': <class 'str'>}, 'lampshst04': {'comment': 'Status of a lamp shutter (e.g closed/open)', 'dtype': <class 'str'>}, 'lampshst05': {'comment': 'Status of a lamp shutter (e.g closed/open)', 'dtype': <class 'str'>}, 'lampshst06': {'comment': 'Status of a lamp shutter (e.g closed/open)', 'dtype': <class 'str'>}, 'lampshst07': {'comment': 'Status of a lamp shutter (e.g closed/open)', 'dtype': <class 'str'>}, 'lampshst08': {'comment': 'Status of a lamp shutter (e.g closed/open)', 'dtype': <class 'str'>}, 'lampshst09': {'comment': 'Status of a lamp shutter (e.g closed/open)', 'dtype': <class 'str'>}, 'lampshst10': {'comment': 'Status of a lamp shutter (e.g closed/open)', 'dtype': <class 'str'>}, 'lampshst11': {'comment': 'Status of a lamp shutter (e.g closed/open)', 'dtype': <class 'str'>}, 'lampshst12': {'comment': 'Status of a lamp shutter (e.g closed/open)', 'dtype': <class 'str'>}, 'lampshst13': {'comment': 'Status of a lamp shutter (e.g closed/open)', 'dtype': <class 'str'>}, 'lampshst14': {'comment': 'Status of a lamp shutter (e.g closed/open)', 'dtype': <class 'str'>}, 'lampshst15': {'comment': 'Status of a lamp shutter (e.g closed/open)', 'dtype': <class 'str'>}, 'lampshst16': {'comment': 'Status of a lamp shutter (e.g closed/open)', 'dtype': <class 'str'>}, 'lampshst17': {'comment': 'Status of a lamp shutter (e.g closed/open)', 'dtype': <class 'str'>}, 'lampshst18': {'comment': 'Status of a lamp shutter (e.g closed/open)', 'dtype': <class 'str'>}, 'lampshst19': {'comment': 'Status of a lamp shutter (e.g closed/open)', 'dtype': <class 'str'>}, 'lampshst20': {'comment': 'Status of a lamp shutter (e.g closed/open)', 'dtype': <class 'str'>}, 'lampstat01': {'comment': 'Status of a given lamp (e.g off/on)', 'dtype': <class 'str'>}, 'lampstat02': {'comment': 'Status of a given lamp (e.g off/on)', 'dtype': <class 'str'>}, 'lampstat03': {'comment': 'Status of a given lamp (e.g off/on)', 'dtype': <class 'str'>}, 'lampstat04': {'comment': 'Status of a given lamp (e.g off/on)', 'dtype': <class 'str'>}, 'lampstat05': {'comment': 'Status of a given lamp (e.g off/on)', 'dtype': <class 'str'>}, 'lampstat06': {'comment': 'Status of a given lamp (e.g off/on)', 'dtype': <class 'str'>}, 'lampstat07': {'comment': 'Status of a given lamp (e.g off/on)', 'dtype': <class 'str'>}, 'lampstat08': {'comment': 'Status of a given lamp (e.g off/on)', 'dtype': <class 'str'>}, 'lampstat09': {'comment': 'Status of a given lamp (e.g off/on)', 'dtype': <class 'str'>}, 'lampstat10': {'comment': 'Status of a given lamp (e.g off/on)', 'dtype': <class 'str'>}, 'lampstat11': {'comment': 'Status of a given lamp (e.g off/on)', 'dtype': <class 'str'>}, 'lampstat12': {'comment': 'Status of a given lamp (e.g off/on)', 'dtype': <class 'str'>}, 'lampstat13': {'comment': 'Status of a given lamp (e.g off/on)', 'dtype': <class 'str'>}, 'lampstat14': {'comment': 'Status of a given lamp (e.g off/on)', 'dtype': <class 'str'>}, 'lampstat15': {'comment': 'Status of a given lamp (e.g off/on)', 'dtype': <class 'str'>}, 'lampstat16': {'comment': 'Status of a given lamp (e.g off/on)', 'dtype': <class 'str'>}, 'lampstat17': {'comment': 'Status of a given lamp (e.g off/on)', 'dtype': <class 'str'>}, 'lampstat18': {'comment': 'Status of a given lamp (e.g off/on)', 'dtype': <class 'str'>}, 'lampstat19': {'comment': 'Status of a given lamp (e.g off/on)', 'dtype': <class 'str'>}, 'lampstat20': {'comment': 'Status of a given lamp (e.g off/on)', 'dtype': <class 'str'>}, 'mjd': {'comment': 'Observation MJD; Read by astropy.time.Time format=mjd', 'dtype': <class 'float'>}, 'mode': {'comment': 'Observing mode', 'dtype': <class 'str'>}, 'object': {'comment': 'Alternative object name (cf. target)', 'dtype': <class 'str'>}, 'obstime': {'comment': 'Observation time', 'dtype': <class 'str'>}, 'oscansec': {'comment': 'Overscan section (windowing)', 'dtype': <class 'str'>}, 'pressure': {'comment': 'Pressure (units.bar) at observation time', 'dtype': <class 'float'>}, 'ra': {'comment': '(J2000) RA in decimal degrees', 'dtype': <class 'float'>}, 'seq_expno': {'comment': 'Number of exposure in observing sequence', 'dtype': <class 'int'>}, 'slitlength': {'comment': 'Slit length, used only for long slits', 'dtype': <class 'float'>}, 'slitwid': {'comment': 'Slit width, sometimes distinct from decker', 'dtype': <class 'float'>}, 'target': {'comment': 'Name of the target', 'dtype': <class 'str'>}, 'temperature': {'comment': 'Temperature (units.K) at observation time', 'dtype': <class 'float'>}, 'utc': {'comment': 'UTC of observation', 'dtype': <class 'str'>}, 'xd': {'comment': 'Cross disperser (e.g. red or blue for HIRES)', 'dtype': <class 'float'>}, 'xdangle': {'comment': 'Cross disperser angle', 'dtype': <class 'float'>}}

Metadata model that is generic to all spectrographs.

meta_key_map()[source]

Print the mapping of the pypeit-specific metadata keywords to the header cards used for this spectrograph.

Note

Metadata keys with header cards that are None have no simple mapping between keyword and header card; their values are set by some combination of header keywords as defined by compound_meta() specific to each spectrograph.

modify_config(row, cfg)[source]

Modify the configuration dictionary for a given frame. This method is used in set_configurations() to modify in place the configuration requirement to assign a specific frame to the current setup.

This method is not defined for all spectrographs.

Parameters
  • row (astropy.table.Row) – The table row with the metadata for one frame.

  • cfg (dict) – Dictionary with metadata associated to a specific configuration.

Returns

modified dictionary with metadata associated to a specific configuration.

Return type

dict

name = None

The name of the spectrograph. See Spectrographs for the currently supported spectrographs.

ndet = None

Number of detectors for this instrument.

property norders

Number of orders for this spectograph. Should only defined for echelle spectrographs, and it is undefined for the base class.

order_platescale(order_vec, binning=None)[source]

Return the platescale for each echelle order.

This routine is only defined for echelle spectrographs, and it is undefined in the base class.

Parameters
  • order_vec (numpy.ndarray) – The vector providing the order numbers.

  • binning (str, optional) – The string defining the spectral and spatial binning.

Returns

An array with the platescale for each order provided by order.

Return type

numpy.ndarray

property order_spat_pos

Return the expected spatial position of each echelle order.

This is for fixed-format echelle spectrographs (e.g. X-Shooter) And is measured 1/2 way up the chip (spectral) and in normalized units (0-1)

Returns

An array with values. The length of the provided array much match self.norders

Return type

numpy.ndarray

property orders

Return the order number for each echelle order.

Returns

An array with values. Order number. Must have lenght of self.norders

Return type

numpy.ndarray

orient_image(detector_par, rawimage)[source]

Orient the image into the PypeIt configuration: (spectral, spatial).

Parameters
Returns

Re-oriented image.

Return type

numpy.ndarray

parse_spec_header(header)[source]

Parses an input header for key spectrograph items.

Parameters

header (astropy.io.fits.Header) – Fits header read from a file.

Returns

Dictionary with the metadata read from header.

Return type

dict

pypeit_file_keys()[source]

Define the list of keys to be output into a standard PypeIt file.

Returns

The list of keywords in the relevant PypeItMetaData() instance to print to the PypeIt Reduction File.

Return type

list

pypeline = 'MultiSlit'

String used to select the general pipeline approach for this spectrograph.

static ql_par()[source]

Return the list of parameters specific to quick-look reduction of science frames for this spectrograph.

The following parameters are set by default for any spectrograph. Derived classes may override this function.

Returns

Dictionary with a form that matches PypeItPar with the parameters to be set.

Return type

dict

ql_supported = False

Flag that PypeIt code base has been sufficiently tested with data from this spectrograph in quicklook mode that it is officially supported by the development team.

raw_header_cards()[source]

Return additional raw header cards to be propagated in downstream output files for configuration identification.

The list of raw data FITS keywords should be those used to populate the configuration_keys() or are used in config_specific_par() for a particular spectrograph, if different from the name of the PypeIt metadata keyword.

This list is used by subheader_for_spec() to include additional FITS keywords in downstream output files.

Returns

List of keywords from the raw data files that should be propagated in output files.

Return type

list

raw_is_transposed(detector_par)[source]

Check if raw image files are transposed with respect to the PypeIt convention.

Indicates that reading raw files with astropy.io.fits yields an image with the spatial dimension along the first axis of the 2D array. This means that the image must be transposed to match the PypeIt convention of having the spectral dimension along the first axis.

Parameters

detector_par (DetectorContainer) – Detector-specific metadata.

Returns

Flag that transpose is required.

Return type

bool

same_configuration(configs, check_keys=True)[source]

Check if a set of instrument setup/configurations are all the same, within the tolerance set for this spectrograph for each configuration key.

Parameters
  • configs (dict, array-like) – A list or dictionary of configuration parameters. Each list or dictionary element must be a dictionary with the values for the configuration-defining metadata parameters for this spectrograph.

  • check_keys (bool, optional) – Check that the keys in each configuration match the expected keys defined by configuration_keys(). If False, the keys are set by the first configuration in configs, not those returned by configuration_keys().

Returns

Flag that all configurations in the list are the same.

Return type

bool

select_detectors(subset=None)[source]

Vet and return a set of valid detectors or detector mosaics for this spectrograph.

By default, the method returns a list selecting all the detectors individually. A subset can be selected using one of the following .. method:: - If subset is a string, it is assumed that you’re selecting a

set of detector and spatial pixel coordinate combinations needed to reduce a single slit; see slitspatnum in the PypeItPar Keywords. The string is parsed into the list of relevant detectors.

- If ``subset`` is a list, integer, or tuple, it is parsed into a

set of single detector or detector mosaics to reduce.

Parameters

subset (int, tuple, list, str, optional) – An object used select a subset of detectors to reduce. See description above. Note detectors are 1-indexed.

Returns

List of unique detectors or detector mosaics to be reduced.

Return type

list

Raises
  • PypeItError – Raised if any of the detectors or detector mosaics

  • specified by subset are invalid.

slit_minmax(slit_spat_pos, binspectral=1)[source]

Adjust the minimum and maximum spectral pixel expected for the spectral range of each echelle order by accounting for the spectral binning.

Parameters
  • slit_spat_pos (float, numpy.ndarray) – Spatial position of each slit/order normalized by the full spatial extent of the detector.

  • binspectral (int, optional) – Number of pixels binned in the spectral direction.

Returns

The minimum and maximum (binned) pixel that includes the valid spectra of each slit/order.

Return type

numpy.ndarray

spec1d_match_spectra(sobjs)[source]

Match up slits in a SpecObjs object.

This typically done across multiple detectors; see pypeit.specrographs.keck_deimos.spec1d_match_spectra().

Parameters

sobjs (SpecObjs) – Spec1D objects

Returns

Arrays that provide the indices of slits matched across multiple detectors.

Return type

tuple

property spec_min_max

Return the minimum and maximum spectral pixel expected for the spectral range of each order.

subheader_for_spec(row_fitstbl, raw_header, extra_header_cards=None, allow_missing=False)[source]

Generate a dict that will be added to the Header of spectra files generated by PypeIt (e.g. SpecObjs).

Parameters
  • row_fitstbl (dict-like) – Typically an astropy.table.Row or astropy.io.fits.Header with keys defined by define_core_meta().

  • raw_header (astropy.io.fits.Header) – Header that defines the instrument and detector, meaning that the header must contain the INSTRUME and DETECTOR header cards. If provided, this must also contain the header cards provided by extra_header_cards.

  • extra_header_cards (list, optional) – Additional header cards from raw_header to include in the output dictionary. Can be an empty list or None.

  • allow_missing (bool, optional) – Ignore any keywords returned by define_core_meta() are not present in row_fitstbl. Otherwise, raise PypeItError.

Returns

Dictionary with data to include an output fits header file or table downstream.

Return type

dict

supported = False

Flag that PypeIt code base has been sufficiently tested with data from this spectrograph that it is officially supported by the development team.

telescope = None

Instance of TelescopePar providing telescope-specific metadata.

tweak_standard(wave_in, counts_in, counts_ivar_in, gpm_in, meta_table)[source]

This routine is for performing instrument/disperser specific tweaks to standard stars so that sensitivity function fits will be well behaved. For example, masking second order light. For instruments that don’t require such tweaks it will just return the inputs, but for isntruments that do this function is overloaded with a method that performs the tweaks.

Parameters
  • wave_in (numpy.ndarray) – Input standard star wavelengths (float, shape = (nspec,))

  • counts_in (numpy.ndarray) – Input standard star counts (float, shape = (nspec,))

  • counts_ivar_in (numpy.ndarray) – Input inverse variance of standard star counts (float, shape = (nspec,))

  • gpm_in (numpy.ndarray) – Input good pixel mask for standard (bool, shape = (nspec,))

  • meta_table (dict) – Table containing meta data that is slupred from the SpecObjs object. See unpack_object() for the contents of this table.

Returns

  • wave_out (numpy.ndarray) – Output standard star wavelengths (float, shape = (nspec,))

  • counts_out (numpy.ndarray) – Output standard star counts (float, shape = (nspec,))

  • counts_ivar_out (numpy.ndarray) – Output inverse variance of standard star counts (float, shape = (nspec,))

  • gpm_out (numpy.ndarray) – Output good pixel mask for standard (bool, shape = (nspec,))

update_edgetracepar(par)[source]

This method is used in pypeit.edgetrace.EdgeTraceSet.maskdesign_matching() to update EdgeTraceSet parameters when the slitmask design matching is not feasible because too few slits are present in the detector.

This method is not defined for all spectrographs.

Parameters

par (pypeit.par.pypeitpar.EdgeTracePar) – The parameters used to guide slit tracing.

Returns

pypeit.par.pypeitpar.EdgeTracePar The modified parameters used to guide slit tracing.

url = None

Reference url

valid_configuration_values()[source]

Return a fixed set of valid values for any/all of the configuration keys.

Method is undefined for the base class.

Returns

A dictionary with any/all of the configuration keys and their associated discrete set of valid values. If there are no restrictions on configuration values, None is returned.

Return type

dict

validate_det(det)[source]

Validate the detector(s) provided.

Parameters

det (int, tuple) – Selection of 1-indexed detector(s). An image mosaic is selected using a tuple with the detectors in the mosaic, which must be one of the allowed mosaics returned by allowed_mosaics().

Returns

Returns the number of detectors and a tuple with the validated detectors. If det is provided as a single integer, the latter is just a one-element tuple. Otherwise, it is identical to the input det tuple, assuming the validation was successful.

Return type

tuple

validate_metadata()[source]

Validates the definitions of the Spectrograph metadata by making a series of comparisons to the metadata model defined by pypeit.core.meta.define_core_meta() and meta.

vet_instrument(meta_tbl)[source]

Confirm the metadata gathered for a set of measurements are all unique and from this spectrograph, according to the expected instrument name in the headers of its raw data files.

This function only issues warnings; no exceptions are raised.

Parameters

meta_tbl (astropy.table.Table) – Table with the meta data; see PypeItMetaData.