-
Notifications
You must be signed in to change notification settings - Fork 167
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Move common resample code to stcal #8986
base: main
Are you sure you want to change the base?
Conversation
adc3ca4
to
c7286ee
Compare
Codecov ReportAttention: Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## main #8986 +/- ##
==========================================
- Coverage 64.54% 64.35% -0.20%
==========================================
Files 375 375
Lines 38737 38638 -99
==========================================
- Hits 25002 24864 -138
- Misses 13735 13774 +39 ☔ View full report in Codecov by Sentry. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for putting this together.
I'd like to see the CI run and regression tests for this PR. I added one comment about psutil
which should fix one of the issues preventing the CI from running.
Would you update the pyproject.toml
to point to the source branch of spacetelescope/stcal#320? That should (hopefully) allow the CI to run so we can see the coverage and test results with this PR.
Also would you queue up a regtest run?
Regression tests pass: https://github.com/spacetelescope/RegressionTests/actions/runs/12059744878 |
jwst/resample/resample.py
Outdated
'v3yangle', 'vparity'] | ||
for key in rm_keys: | ||
if key in model.meta.wcsinfo.instance: | ||
del model.meta.wcsinfo.instance[key] | ||
|
||
|
||
class ResampleData: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm a bit confused about why the majority of ResampleData hasn't been removed, as it appears that functionality is mostly what got moved to stcal. What would it take to allow large portions (or all) of this class to be removed?
jwst/resample/resample_utils.py
Outdated
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Same question here: weren't a lot of the functions in here moved to stcal, so shouldn't they be removed from here?
3df4da3
to
3553412
Compare
1db5ba1
to
679aa51
Compare
Initial regression tests that were using the new code only for imaging are: https://github.com/spacetelescope/RegressionTests/actions/runs/12146883313 After switching spectral code to use the new class, here are the results of regression tests: https://github.com/spacetelescope/RegressionTests/actions/runs/12155412170 I most failures that I see are unrelated to my code, I think (such as |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is looking great Mihai! Thanks for all the hard work. Most of these comments are minor.
It still feels a bit sad to have to convert the datamodels into dictionaries to pass into stcal, but I can't really think of a better way to do it while maintaining the observatory-agnostic nature of stcal. So I guess I'm happy with it. Maybe it's a bit easier on the romancal side when working with asdf files as compared with fits?
in_memory = not input_models._on_disk | ||
indices_by_group = list(input_models.group_indices.values()) | ||
ngroups = len(indices_by_group) | ||
|
||
return_error = return_error and (resamp.compute_err == "driz_err") |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Perhaps it would be a good idea to have a warning if return_error is True but the other conditional is not satisfied? Otherwise a user may wonder why the error is not being returned even though they specified it
input_models : LibModelAccessBase | ||
A `LibModelAccessBase`-based object allowing iterating over | ||
all contained models of interest. | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Where is this type defined? Is there any meaningful case here where this would be anything but ModelLibrary? If not, I suggest just making the type ModelLibrary for clarity
|
||
return model_dict | ||
|
||
def create_output_jwst_model(self, ref_input_model=None): | ||
""" Create a new blank model and update it's meta with info from ``ref_input_model``. """ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
""" Create a new blank model and update it's meta with info from ``ref_input_model``. """ | |
""" Create a new blank model and update its meta with info from ``ref_input_model``. """ |
model.meta.photometry.pixelarea_arcsecsq = info_dict["pixelarea_arcsecsq"] | ||
|
||
model.meta.resample.pointings = info_dict["pointings"] | ||
# model.meta.resample.n_coadds = info_dict["n_coadds"] |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If this is not needed then remove
# else: | ||
# assign_wcs_util.update_s_region_spectral(self.output_jwst_model) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
# else: | |
# assign_wcs_util.update_s_region_spectral(self.output_jwst_model) |
@@ -386,390 +625,64 @@ def resample_many_to_many(self, input_models): | |||
asn_dict = json.loads(asn.dump()[1]) # serializes the asn and converts to dict | |||
return ModelLibrary(asn_dict, on_disk=True) | |||
|
|||
def resample_many_to_one(self, input_models): | |||
def resample_many_to_one(self): |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
this is great! it's so compact!
def input_model_to_dict(self, model): | ||
model_dict = super().input_model_to_dict(model) | ||
return model_dict |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Does this do anything different than super().input_model_to_dict()
? If not can it be removed?
# delete these to reduce the number of failures in the regression tests | ||
# TODO: this is helpful info that should be stored in products. | ||
# del model.meta.resample.pixel_scale_ratio | ||
# del model.meta.resample.pixfrac | ||
# del model.meta.resample.weight_type | ||
# del model.meta.resample.pointings | ||
# del model.meta.cal_step.resample |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can you elaborate on why these cause failures? should these be reinstated before merge?
# del model.meta.resample.pointings | ||
# del model.meta.cal_step.resample | ||
|
||
def build_nirspec_output_wcs(self, input_models, refmodel=None, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It looks to me like this never uses self
, is that true?
# with result: | ||
# if len(result) == 1: | ||
# model = result.borrow(0) | ||
# result.shelve(model, 0, modify=False) | ||
# return model |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
# with result: | |
# if len(result) == 1: | |
# model = result.borrow(0) | |
# result.shelve(model, 0, modify=False) | |
# return model |
Closes #8695
This PR add the common resample code used by both JWST and Roman pipelines to stcal. For now only imaging mode was switched to the new code. This PR supersedes #8695
This work is related to https://jira.stsci.edu/browse/AL-835
The code in this PR requires the code from spacetelescope/stcal#320
Tasks
Build 11.3
(use the latest build if not sure)no-changelog-entry-needed
)changes/
:echo "changed something" > changes/<PR#>.<changetype>.rst
(see below for change types)docs/
pageokify_regtests
to update the truth filesnews fragment change types...
changes/<PR#>.general.rst
: infrastructure or miscellaneous changechanges/<PR#>.docs.rst
changes/<PR#>.stpipe.rst
changes/<PR#>.datamodels.rst
changes/<PR#>.scripts.rst
changes/<PR#>.fits_generator.rst
changes/<PR#>.set_telescope_pointing.rst
changes/<PR#>.pipeline.rst
stage 1
changes/<PR#>.group_scale.rst
changes/<PR#>.dq_init.rst
changes/<PR#>.emicorr.rst
changes/<PR#>.saturation.rst
changes/<PR#>.ipc.rst
changes/<PR#>.firstframe.rst
changes/<PR#>.lastframe.rst
changes/<PR#>.reset.rst
changes/<PR#>.superbias.rst
changes/<PR#>.refpix.rst
changes/<PR#>.linearity.rst
changes/<PR#>.rscd.rst
changes/<PR#>.persistence.rst
changes/<PR#>.dark_current.rst
changes/<PR#>.charge_migration.rst
changes/<PR#>.jump.rst
changes/<PR#>.clean_flicker_noise.rst
changes/<PR#>.ramp_fitting.rst
changes/<PR#>.gain_scale.rst
stage 2
changes/<PR#>.assign_wcs.rst
changes/<PR#>.badpix_selfcal.rst
changes/<PR#>.msaflagopen.rst
changes/<PR#>.nsclean.rst
changes/<PR#>.imprint.rst
changes/<PR#>.background.rst
changes/<PR#>.extract_2d.rst
changes/<PR#>.master_background.rst
changes/<PR#>.wavecorr.rst
changes/<PR#>.srctype.rst
changes/<PR#>.straylight.rst
changes/<PR#>.wfss_contam.rst
changes/<PR#>.flatfield.rst
changes/<PR#>.fringe.rst
changes/<PR#>.pathloss.rst
changes/<PR#>.barshadow.rst
changes/<PR#>.photom.rst
changes/<PR#>.pixel_replace.rst
changes/<PR#>.resample_spec.rst
changes/<PR#>.residual_fringe.rst
changes/<PR#>.cube_build.rst
changes/<PR#>.extract_1d.rst
changes/<PR#>.resample.rst
stage 3
changes/<PR#>.assign_mtwcs.rst
changes/<PR#>.mrs_imatch.rst
changes/<PR#>.tweakreg.rst
changes/<PR#>.skymatch.rst
changes/<PR#>.exp_to_source.rst
changes/<PR#>.outlier_detection.rst
changes/<PR#>.tso_photometry.rst
changes/<PR#>.stack_refs.rst
changes/<PR#>.align_refs.rst
changes/<PR#>.klip.rst
changes/<PR#>.spectral_leak.rst
changes/<PR#>.source_catalog.rst
changes/<PR#>.combine_1d.rst
changes/<PR#>.ami.rst
other
changes/<PR#>.wfs_combine.rst
changes/<PR#>.white_light.rst
changes/<PR#>.cube_skymatch.rst
changes/<PR#>.engdb_tools.rst
changes/<PR#>.guider_cds.rst