-
Notifications
You must be signed in to change notification settings - Fork 103
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'develop' into aat_uhrf
# Conflicts: # doc/releases/1.16.1dev.rst
- Loading branch information
Showing
46 changed files
with
1,660 additions
and
266 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,118 @@ | ||
.. include:: ../include/links.rst | ||
|
||
.. _hires_config: | ||
|
||
Automated sorting of HIRES frames by instrument configuration | ||
============================================================= | ||
|
||
Version History | ||
--------------- | ||
|
||
|
||
========= ================ =========== =========== | ||
*Version* *Author* *Date* ``PypeIt`` | ||
========= ================ =========== =========== | ||
1.0 Debora Pelliccia 10 Aug 2024 1.16.1.dev | ||
========= ================ =========== =========== | ||
|
||
---- | ||
|
||
Basics | ||
------ | ||
|
||
To prepare for the data reduction, PypeIt, first, automatically associates fits | ||
files to specific :ref:`frame_types` (see :ref:`hires_frames`) and, then, | ||
collects groups of frames in unique instrument configurations (see below). This is performed | ||
by the :ref:`pypeit_setup` script, which sorts the frames and writes a | ||
:ref:`pypeit_file` for each unique configuration. See :ref:`setup_doc`. | ||
|
||
|
||
HIRES configuration identification | ||
--------------------------------- | ||
|
||
The HIRES instrument configurations are determined by the function | ||
:func:`pypeit.metadata.PypeItMetaData.unique_configurations`, | ||
which finds unique combinations of the following keywords: | ||
|
||
=============== ============ | ||
``fitstbl`` key Header Key | ||
=============== ============ | ||
``dispname`` ``XDISPERS`` | ||
``decker`` ``DECKNAME`` | ||
``binning`` ``BINNING`` | ||
``filter1`` ``FIL1NAME`` | ||
``echangle`` ``ECHANGL`` | ||
``xdangle`` ``XDANGL`` | ||
=============== ============ | ||
|
||
The unique configurations are determined by collating the relevant metadata from the headers | ||
of all frames found by a run of :ref:`pypeit_setup`, *except* those that are designated as | ||
bias and slitless_pixflat frames. Bias and slitless_pixflat frames can have header data (e.g., ``filter1``) | ||
that do not match the instrument configuration that an observer intended for their use. | ||
Therefore, PypeIt uses the ``dispname`` and ``binning`` keys to match the bias and | ||
slitless_pixflat frames to the configurations with frames taken with the same cross-disperser | ||
and same binning. | ||
Note that when using the ``echangle`` and ``xdangle`` keys to identify configurations, PypeIt | ||
uses a relative tolerance of 1e-3 and absolute tolerance of 1e-2 for ``echangle``, and a relative | ||
tolerance of 1e-2 for ``xdangle``, to account for small differences in the values of these angles. | ||
|
||
After that, :func:`pypeit.metadata.PypeItMetaData.set_configurations` associates each frame | ||
to the relevant unique configuration ("setup"), by assigning a setup identifier | ||
(e.g., A,B,C,D...) to every frames for which the values of the above keywords match the | ||
values of the specific unique configuration. | ||
|
||
HIRES calibration groups | ||
----------------------- | ||
|
||
PypeIt uses the concept of a "calibration group" to define a complete set of | ||
calibration frames (e.g., arcs, flats) and the science frames to which these calibration | ||
frames should be applied. | ||
|
||
By default, :ref:`pypeit_setup` uses the setup identifier to assign frames to a single | ||
calibration group. Frames that are in the same calibration group will have the same PypeIt | ||
keyword ``calib``. No automated procedure exists to do anything except this. | ||
However, the user can edit the :ref:`pypeit_file` to, within a given configuration, assign | ||
specific calibration frames to specific science frames using the data in the ``calib`` column | ||
of the :ref:`data_block`. | ||
|
||
Testing | ||
------- | ||
|
||
To test that PypeIt can successfully identify multiple | ||
configurations among a set of files, we have added the | ||
``test_setup_keck_hires_multiconfig()`` test to | ||
``${PYPEIT_DEV}/unit_tests/test_setups.py``. | ||
|
||
Here is an example of how to run the test: | ||
|
||
.. code-block:: bash | ||
cd ${PYPEIT_DEV}/unit_tests | ||
pytest test_setup.py::test_setup_keck_hires_multiconfig -W ignore | ||
The tests require that you have downloaded the PypeIt | ||
:ref:`dev-suite` and defined the ``PYPEIT_DEV`` environmental | ||
variable that points to the relevant directory. | ||
|
||
The algorithm for this test is as follows: | ||
|
||
1. Collect the names of all files in selected HIRES directories. | ||
|
||
2. Use :class:`~pypeit.pypeitsetup.PypeItSetup` to automatically | ||
identify the configurations for these files. | ||
|
||
3. Check that the code found two configurations and wrote the | ||
pypeit files for each. | ||
|
||
4. For each configuration: | ||
|
||
a. Read the pypeit file | ||
|
||
b. Check that the name for the setup is correct ('A' or 'B') | ||
|
||
c. Check that the calibration group is the same for all frames ('0' or '1') | ||
|
||
|
||
Because these tests are now included in the PypeIt | ||
:ref:`unit-tests`, these configuration checks are performed by the | ||
developers for every new version of the code. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,128 @@ | ||
.. include:: ../include/links.rst | ||
|
||
.. _hires_frames: | ||
|
||
Automated typing of HIRES frames | ||
================================ | ||
|
||
Version History | ||
--------------- | ||
|
||
|
||
========= ================ =========== =========== | ||
*Version* *Author* *Date* ``PypeIt`` | ||
========= ================ =========== =========== | ||
1.0 Debora Pelliccia 10 Aug 2024 1.16.1.dev | ||
========= ================ =========== =========== | ||
|
||
---- | ||
|
||
Basics | ||
------ | ||
|
||
The general procedure used to assign frames a given type is described | ||
here: :ref:`frame_types`. | ||
|
||
HIRES frame typing | ||
----------------- | ||
|
||
The primary typing of HIRES frames is performed by | ||
:func:`pypeit.spectrographs.keck_hires.KECKHIRESSpectrograph.check_frame_type`. | ||
This function checks the values of various header keywords against a | ||
set of criteria used to classify the frame type. | ||
The header cards required for the frame-typing and their associated keyword in the | ||
:class:`~pypeit.metadata.PypeItMetaData` object are: | ||
|
||
=============== ============ | ||
``fitstbl`` key Header Key | ||
=============== ============ | ||
``exptime`` ``ELAPTIME`` | ||
``hatch`` ``HATOPEN`` | ||
``lampstat01`` See below | ||
No key ``XCOVOPEN`` | ||
No key ``AUTOSHUT`` | ||
=============== ============ | ||
|
||
``lampstat01`` is defined using a combination of header keywords, which include | ||
``LAMPCAT1``, ``LAMPCAT2``, ``LAMPQTZ2``, ``LAMPNAME``. If ``LAMPCAT1 = True`` or | ||
``LAMPCAT2 = True``, ``lampstat01`` will be equal to ``'ThAr1'`` or ``'ThAr2'``, respectively. | ||
If ``LAMPQTZ2 = True`` or ``LAMPNAME = 'quartz1'``, ``lampstat01`` will be equal to ``'on'``. | ||
|
||
|
||
The criteria used to select each frame type are as follows: | ||
|
||
==================== ============ ============ ============ ====================================== ====================================================== | ||
Frame ``hatch`` ``AUTOSHUT`` ``XCOVOPEN`` ``lampstat01`` ``exptime`` | ||
==================== ============ ============ ============ ====================================== ====================================================== | ||
``science`` ``True`` ``True`` ``True`` ``'off'`` ``>601s`` | ||
``standard`` ``'open'`` ``True`` ``True`` ``'off'`` ``>1s`` & ``<600s`` | ||
``bias`` ``False`` ``False`` ``True`` ``'off'`` ``<0.001s`` | ||
``dark`` ``False`` ``True`` ``True`` ``'off'`` Not used | ||
``slitless_pixflat`` ``False`` ``True`` ``False`` ``'off'`` ``<60s`` | ||
``pixelflat`` ``False`` ``True`` ``True`` ``'on'`` ``<60s`` | ||
``trace`` ``False`` ``True`` ``True`` ``'on'`` ``<60s`` | ||
``illumflat`` ``False`` ``True`` ``True`` ``'on'`` ``<60s`` | ||
``arc`` ``False`` ``True`` ``True`` ``'ThAr1'`` or ``'ThAr2'`` Not used | ||
``tilt`` ``False`` ``True`` ``True`` ``'ThAr1'`` or ``'ThAr2'`` Not used | ||
==================== ============ ============ ============ ====================================== ====================================================== | ||
|
||
Note that PypeIt employs commonly used value of ``exptime`` to distinguish frame type; | ||
however, if needed, the user can specify a different value by | ||
using the ``exprng`` parameter in the :ref:`pypeit_file`; see also :ref:`frame_types`. | ||
|
||
The ``science`` and ``standard`` frames have identical selection criteria, except for the | ||
``exptime`` value. In order to better distinguish between the two types, the ``RA`` and ``DEC`` header | ||
keywords are also used to assign the ``standard`` type to frames with ``RA`` and ``DEC`` values that are | ||
within 10 arcmin of one of the standard stars available in PypeIt (see :ref:`standards`). | ||
|
||
The criteria used to select ``arc`` and ``tilt`` frames are identical; the same is true for | ||
``pixelflat``, ``trace``, and ``illumflat`` frames. Note that if both ``pixelflat`` and | ||
``slitless_pixflat`` frames are identified, the ``pixelflat`` assignment will be removed | ||
so that the ``slitless_pixflat`` frames will be used for the flat fielding. | ||
|
||
Finally, note that a HIRES frame is never given a ``pinhole`` type. | ||
|
||
|
||
Testing | ||
------- | ||
|
||
To test that PypeIt can successfully identify HIRES framt types | ||
among a set of files, we have added the | ||
``test_hires()`` test to ``${PYPEIT_DEV}/unit_tests/test_frametype.py``. | ||
|
||
Here is an example of how to run the test: | ||
|
||
.. code-block:: bash | ||
cd ${PYPEIT_DEV}/unit_tests | ||
pytest test_frametype.py::test_hires -W ignore | ||
The tests requires that you have downloaded the PypeIt | ||
:ref:`dev-suite` and defined the ``PYPEIT_DEV`` environmental | ||
variable that points to the relevant directory. The algorithm for | ||
all these tests is the same and is as follows: | ||
|
||
1. Find the directories in the :ref:`dev-suite` with Keck | ||
HIRES data. | ||
|
||
2. For each directory (i.e., instrument setup): | ||
|
||
a. Make sure there is a "by-hand" version of the pypeit file | ||
for this setup where a human (one of the pypeit | ||
developers) has ensured the frame types are correct. | ||
|
||
b. Effectively run :ref:`pypeit_setup` on each of the | ||
instrument setups to construct a new pypeit file with the | ||
automatically generated frame types. | ||
|
||
c. Read both the by-hand and automatically generated frame | ||
types from these two pypeit files and check that they are | ||
identical. This check is *only* performed for the | ||
calibration frames, not any ``science`` or ``standard`` | ||
frames. | ||
|
||
Because this test is now included in the ``PypeIt`` | ||
:ref:`unit-tests`, this frame-typing check is performed by the | ||
developers for every new version of the code. | ||
|
||
|
Oops, something went wrong.