From ccd74e0b5d15d3ac547f5c3e21f3c7412e922288 Mon Sep 17 00:00:00 2001 From: Marshall Perrin Date: Mon, 6 May 2024 13:24:56 -0400 Subject: [PATCH 1/3] Implement a first version of NIRCam DHS0; Thanks to E. Schlawin for input file. --- webbpsf/webbpsf_core.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/webbpsf/webbpsf_core.py b/webbpsf/webbpsf_core.py index dae390a9..76100244 100644 --- a/webbpsf/webbpsf_core.py +++ b/webbpsf/webbpsf_core.py @@ -2291,6 +2291,7 @@ def __init__(self): 'WLP8', 'WLM8', 'WLP12', + 'DHS0_07' ] self._detectors = dict() @@ -2778,6 +2779,11 @@ def _addAdditionalOptics(self, optsys, oversample=2): elif self.pupil_mask is None and self.image_mask is not None: optsys.add_pupil(poppy.ScalarTransmission(name='No Lyot Mask Selected!'), index=3) + elif self.pupil_mask == 'DHS0_07': + optsys.add_pupil(transmission=self._datapath + "/optics/NIRCam_DHS0_07_npix1024.fits.gz", name=self.pupil_mask, + flip_y=True, shift_x=shift_x, shift_y=shift_y, rotation=rotation, index=3) + optsys.planes[-1].wavefront_display_hint = 'intensity' + else: optsys.add_pupil( transmission=self._WebbPSF_basepath + '/tricontagon_oversized_4pct.fits.gz', From 57e530c3a766e55c0f1f9382c6ffac40f51938d8 Mon Sep 17 00:00:00 2001 From: Marshall Perrin Date: Mon, 6 May 2024 17:41:20 -0400 Subject: [PATCH 2/3] minor tweaks to DHS calc. Avoid unnecessary transform to/from image plane; tweak display hint --- webbpsf/webbpsf_core.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/webbpsf/webbpsf_core.py b/webbpsf/webbpsf_core.py index 76100244..9ddbdeb4 100644 --- a/webbpsf/webbpsf_core.py +++ b/webbpsf/webbpsf_core.py @@ -2666,9 +2666,10 @@ def _addAdditionalOptics(self, optsys, oversample=2): (self.pupil_mask is not None) and ('LENS' not in self.pupil_mask.upper()) and ('WL' not in self.pupil_mask.upper()) + and ('DHS' not in self.pupil_mask.upper()) ): # no occulter selected but coronagraphic mode anyway. E.g. off-axis PSF - # but don't add this image plane for weak lens calculations + # but don't add this image plane for weak lens or DHS calculations optsys.add_image(poppy.ScalarTransmission(name='No Image Mask Selected!'), index=2) trySAM = False else: @@ -2782,7 +2783,7 @@ def _addAdditionalOptics(self, optsys, oversample=2): elif self.pupil_mask == 'DHS0_07': optsys.add_pupil(transmission=self._datapath + "/optics/NIRCam_DHS0_07_npix1024.fits.gz", name=self.pupil_mask, flip_y=True, shift_x=shift_x, shift_y=shift_y, rotation=rotation, index=3) - optsys.planes[-1].wavefront_display_hint = 'intensity' + optsys.planes[3].wavefront_display_hint = 'intensity' else: optsys.add_pupil( From bf7996e3e4c8a2ddb9458a2f7e655008a4cdafcd Mon Sep 17 00:00:00 2001 From: Marshall Perrin Date: Wed, 8 May 2024 17:53:30 -0400 Subject: [PATCH 3/3] add support for all 10 DHS masks, using provided data files --- webbpsf/webbpsf_core.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/webbpsf/webbpsf_core.py b/webbpsf/webbpsf_core.py index 9ddbdeb4..8d69c906 100644 --- a/webbpsf/webbpsf_core.py +++ b/webbpsf/webbpsf_core.py @@ -2291,8 +2291,7 @@ def __init__(self): 'WLP8', 'WLM8', 'WLP12', - 'DHS0_07' - ] + ] + [f'DHS_{i+1:02d}' for i in range(10)] self._detectors = dict() det_list = ['A1', 'A2', 'A3', 'A4', 'A5', 'B1', 'B2', 'B3', 'B4', 'B5'] @@ -2780,8 +2779,8 @@ def _addAdditionalOptics(self, optsys, oversample=2): elif self.pupil_mask is None and self.image_mask is not None: optsys.add_pupil(poppy.ScalarTransmission(name='No Lyot Mask Selected!'), index=3) - elif self.pupil_mask == 'DHS0_07': - optsys.add_pupil(transmission=self._datapath + "/optics/NIRCam_DHS0_07_npix1024.fits.gz", name=self.pupil_mask, + elif self.pupil_mask.startswith('DHS'): + optsys.add_pupil(transmission=self._datapath + f"/optics/NIRCam_{self.pupil_mask}_npix1024.fits.gz", name=self.pupil_mask, flip_y=True, shift_x=shift_x, shift_y=shift_y, rotation=rotation, index=3) optsys.planes[3].wavefront_display_hint = 'intensity'