spacetelescope / pysiaf

Handling of Science Instrument Aperture Files (SIAF) for space telescopes
https://pysiaf.readthedocs.io
BSD 3-Clause "New" or "Revised" License
13 stars 28 forks source link

Missing aperture in version 0.14.0 #211

Open bhilbert4 opened 2 years ago

bhilbert4 commented 2 years ago

I'm running into an odd error when testing version 0.14.0.

I have a package that relies on pysiaf. Within that package I have a test that uses pysiaf to generate coordinates of the corners of various apertures. (https://github.com/spacetelescope/mirage/blob/master/tests/test_siaf_interface.py) When I run this test using version 0.13.0, it completes successfully. But when I run it with version 0.14.0 it fails. It appears that the list of aperture names generated using iando.read.read_siaf_detector_layout() contains an aperture that is not present in the NIRCam Siaf instance that is created later. The aperture causing the problem is NRCA2_FULL_WEDGE_BAR, which is one of several new NIRCam apertures in version 0.14.0.

Here is a working example of the failure:

In [1]: from pysiaf import iando

In [2]: siaf_detector_layout = iando.read.read_siaf_detector_layout()

In [3]: master_aperture_names = siaf_detector_layout['AperName'].data

In [4]: master_aperture_names
Out[4]: 
array(['NRCA1_FULL', 'NRCA3_FULL', 'NRCA5_FULL', 'NRCB2_FULL',
       'NRCB4_FULL', 'NRCA2_FULL', 'NRCA4_FULL', 'NRCB1_FULL',
       'NRCB3_FULL', 'NRCB5_FULL', 'NRCA2_FULL_WEDGE_RND',
       'NRCA2_FULL_WEDGE_BAR', 'NRCA4_FULL_WEDGE_RND',
       'NRCA4_FULL_WEDGE_BAR', 'NRCA1_FULL_WEDGE_RND',
       'NRCA1_FULL_WEDGE_BAR', 'NRCA3_FULL_WEDGE_RND',
       'NRCA3_FULL_WEDGE_BAR', 'NRCA5_FULL_WEDGE_RND',
       'NRCA5_FULL_WEDGE_BAR', 'FGS1_FULL', 'FGS2_FULL', 'NIS_CEN',
       'NRS1_FULL', 'NRS2_FULL', 'MIRIM_FULL'], dtype='<U20')

In [5]: from pysiaf import Siaf

In [6]: n = Siaf('nircam')

In [7]: n['NRCA2_FULL_WEDGE_BAR']
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-7-574026bae4c4> in <module>
----> 1 n['NRCA2_FULL_WEDGE_BAR']

~/miniconda3/envs/mirage-py3.8/lib/python3.8/site-packages/pysiaf/siaf.py in __getitem__(self, key)
     56     def __getitem__(self, key):
     57         """Return aperture corresponding to name key."""
---> 58         return self.apertures[key]
     59 
     60     def __str__(self):

KeyError: 'NRCA2_FULL_WEDGE_BAR'
Witchblade101 commented 2 years ago

I can reproduce this error with PySIAF 0.14.0 and Python 3.7

mfixstsci commented 2 years ago

Hey All -- I made a mistake in the release and just updated it. It was release 0.14.0 but some folks need pysiaf to be installed via astroconda and I changed it to v0.14.0 to be in line with our releasing convention and for it to work with the astroconda channel. Let me double check pip to see if it was updated there too. I am hoping it's just as simple as a pip install pysiaf --upgrade

mfixstsci commented 2 years ago

Okay, it doesn't look like anything was effected by changing the release name... Just thought I would start there because of the timing.

Witchblade101 commented 2 years ago

For completeness I checked all of the NRC master aperture names:

Python 3.7.12 | packaged by conda-forge | (default, Oct 26 2021, 05:59:23)

Type 'copyright', 'credits' or 'license' for more information
IPython 7.31.1 -- An enhanced Interactive Python. Type '?' for help.

In [1]: from pysiaf import Siaf

In [2]: n = Siaf('nircam')

In [3]: n['NRCA1_FULL']
Out[3]: <pysiaf.Aperture object AperName=NRCA1_FULL >

In [4]: n['NRCA3_FULL']
Out[4]: <pysiaf.Aperture object AperName=NRCA3_FULL >

In [5]: n['NRCA5_FULL']
Out[5]: <pysiaf.Aperture object AperName=NRCA5_FULL >

In [6]: n['NRCB2_FULL']
Out[6]: <pysiaf.Aperture object AperName=NRCB2_FULL >

In [7]: n['NRCB4_FULL']
Out[7]: <pysiaf.Aperture object AperName=NRCB4_FULL >

In [8]: n['NRCA2_FULL']
Out[8]: <pysiaf.Aperture object AperName=NRCA2_FULL >

In [9]: n['NRCA4_FULL']
Out[9]: <pysiaf.Aperture object AperName=NRCA4_FULL >

In [10]: n['NRCB1_FULL']
Out[10]: <pysiaf.Aperture object AperName=NRCB1_FULL >

In [11]: n['NRCB3_FULL']
Out[11]: <pysiaf.Aperture object AperName=NRCB3_FULL >

In [12]: n['NRCB5_FULL']
Out[12]: <pysiaf.Aperture object AperName=NRCB5_FULL >

In [13]: n['NRCA2_FULL_WEDGE_RND']
Out[13]: <pysiaf.Aperture object AperName=NRCA2_FULL_WEDGE_RND >

In [14]: n['NRCA4_FULL_WEDGE_RND']
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-14-e0dda8d0de64> in <module>
----> 1 n['NRCA4_FULL_WEDGE_RND']

~/miniconda3/envs/pysiaf-3.7/lib/python3.7/site-packages/pysiaf/siaf.py in __getitem__(self, key)
     56     def __getitem__(self, key):
     57         """Return aperture corresponding to name key."""
---> 58         return self.apertures[key]
     59
     60     def __str__(self):

KeyError: 'NRCA4_FULL_WEDGE_RND'

In [15]: n['NRCA4_FULL_WEDGE_BAR']
Out[15]: <pysiaf.Aperture object AperName=NRCA4_FULL_WEDGE_BAR >

In [16]: n['NRCA1_FULL_WEDGE_RND']
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-16-3b9f10100442> in <module>
----> 1 n['NRCA1_FULL_WEDGE_RND']

~/miniconda3/envs/pysiaf-3.7/lib/python3.7/site-packages/pysiaf/siaf.py in __getitem__(self, key)
     56     def __getitem__(self, key):
     57         """Return aperture corresponding to name key."""
---> 58         return self.apertures[key]
     59
     60     def __str__(self):

KeyError: 'NRCA1_FULL_WEDGE_RND'

In [17]: n['NRCA1_FULL_WEDGE_BAR']
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-17-f8cb592410b9> in <module>
----> 1 n['NRCA1_FULL_WEDGE_BAR']

~/miniconda3/envs/pysiaf-3.7/lib/python3.7/site-packages/pysiaf/siaf.py in __getitem__(self, key)
     56     def __getitem__(self, key):
     57         """Return aperture corresponding to name key."""
---> 58         return self.apertures[key]
     59
     60     def __str__(self):

KeyError: 'NRCA1_FULL_WEDGE_BAR'

In [18]: n['NRCA3_FULL_WEDGE_RND']
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-18-aeb439f6f843> in <module>
----> 1 n['NRCA3_FULL_WEDGE_RND']

~/miniconda3/envs/pysiaf-3.7/lib/python3.7/site-packages/pysiaf/siaf.py in __getitem__(self, key)
     56     def __getitem__(self, key):
     57         """Return aperture corresponding to name key."""
---> 58         return self.apertures[key]
     59
     60     def __str__(self):

KeyError: 'NRCA3_FULL_WEDGE_RND'

In [19]: n['NRCA3_FULL_WEDGE_BAR']
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-19-8e29596973ae> in <module>
----> 1 n['NRCA3_FULL_WEDGE_BAR']

~/miniconda3/envs/pysiaf-3.7/lib/python3.7/site-packages/pysiaf/siaf.py in __getitem__(self, key)
     56     def __getitem__(self, key):
     57         """Return aperture corresponding to name key."""
---> 58         return self.apertures[key]
     59
     60     def __str__(self):

KeyError: 'NRCA3_FULL_WEDGE_BAR'

In [20]: n['NRCA5_FULL_WEDGE_RND']
Out[20]: <pysiaf.Aperture object AperName=NRCA5_FULL_WEDGE_RND >

In [21]: n['NRCA5_FULL_WEDGE_BAR']
Out[21]: <pysiaf.Aperture object AperName=NRCA5_FULL_WEDGE_BAR >

It looks like all 6 of the new apertures fail.

Witchblade101 commented 2 years ago

This looks like it's resolved in v15. @bhilbert4 if you can confirm that then we can close this issue.