Skip to content
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

JP-3426: Ensure proper order of bitwise operations #8916

Merged
merged 5 commits into from
Oct 31, 2024

Conversation

tapastro
Copy link
Contributor

Resolves JP-3426

Closes #8061

This PR addresses a reoccurrence of the issue initially seen in the above linked ticket, where the only pixels available for use in calculation of the background are reference pixels, which have the DO_NOT_USE flag set. The initial fix neglected to include some necessary parentheses to ensure that the bitwise operations are done in the correct order. This also exposed the lack of test coverage for this path in the code.

I found the difficulty in preparing a WFSS mock dataset, including a spec model and a source catalog for use in constructing the mask, to be high enough that a regression test seemed the simpler path forward. The new files copy the old files, except to truncate the source_catalog for faster processing and to enlarge the sky region of the first source to encompass the entire data array.

Tasks

  • request a review from someone specific, to avoid making the maintainers review every PR
  • add a build milestone, i.e. Build 11.3 (use the latest build if not sure)
  • Does this PR change user-facing code / API? (if not, label with no-changelog-entry-needed)
    • write news fragment(s) in changes/: echo "changed something" > changes/<PR#>.<changetype>.rst (see below for change types)
    • update or add relevant tests
    • update relevant docstrings and / or docs/ page
    • start a regression test and include a link to the running job (click here for instructions)
      • Do truth files need to be updated ("okified")?
        • after the reviewer has approved these changes, run okify_regtests to update the truth files
  • if a JIRA ticket exists, make sure it is resolved properly
news fragment change types...
  • changes/<PR#>.general.rst: infrastructure or miscellaneous change
  • changes/<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

@tapastro
Copy link
Contributor Author

Copy link

codecov bot commented Oct 23, 2024

Codecov Report

Attention: Patch coverage is 66.66667% with 1 line in your changes missing coverage. Please review.

Project coverage is 63.67%. Comparing base (fa9d957) to head (411843a).
Report is 424 commits behind head on main.

Files with missing lines Patch % Lines
jwst/background/background_sub.py 66.66% 1 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main    #8916      +/-   ##
==========================================
- Coverage   64.51%   63.67%   -0.84%     
==========================================
  Files         376      376              
  Lines       38733    38694      -39     
==========================================
- Hits        24990    24640     -350     
- Misses      13743    14054     +311     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

rtdata = rtdata_module

# Get the input data; load individual data files first, load ASN file last
rtdata.get_data("nircam/wfss/jw01076-o101_t002_nircam_clear-f356w_spoof_cat.ecsv")
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What's the difference between this catalog and the original catalog in the test above?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is mentioned in the submission text above - it's truncated and has one sky region expanded to cover the full frame.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks, sorry I didn't read that properly

@@ -32,6 +32,26 @@ def run_pipeline(rtdata_module):
return rtdata


@pytest.fixture(scope="module")
def run_pipeline_skip_bkg(rtdata_module):
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The name of this test is confusing because it explicitly sets bkg_subtract.skip to False, maybe specify somehow with the name that you're trying to trigger a skip condition

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I can alter the test name.

# Run the calwebb_spec2 pipeline; save results from intermediate steps
args = ["calwebb_spec2", rtdata.input,
"--output_file='skip_bkgsub'",
"--steps.bkg_subtract.skip=False"]
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is it necessary to test that the cal and x1d truth files are identical? Could you just skip all steps downstream of bkg_subtract and test that the result had bkg_subtract set to skipped?

Why is it necessary to make this test a regression test, instead of a unit test of subtract_wfss_bkg?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Mostly because the additional computation required to test the pipeline end-to-end in this skipped case doesn't seem sufficiently obtrusive to warrant truncation of the pipeline.

I considered a unit test, but mocking both the rate file and its accompanying catalog file seemed like a headache. Perhaps I was too lazy in making it a regression test.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think the choice you made is lazy. It just feels like the bugfix in this PR is very specific, affecting one line of code that checks if a skip is need, and the test coverage is very non-specific, which may make it harder to isolate this bug or a similar one if it recurred.

The test for this skip condition could be very simple: you could write a helper function that takes in an input model, mask, and min_n_pixels parameter, then unit-test it by passing in a custom-made mask.

@tapastro
Copy link
Contributor Author

After moving the change to a function and migrating the test coverage to a unit test, new RT run here: https://github.com/spacetelescope/RegressionTests/actions/runs/11578440989

Copy link
Collaborator

@emolter emolter left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, I like this structure better. Thanks

@tapastro tapastro enabled auto-merge (squash) October 31, 2024 17:03
@tapastro tapastro merged commit 2a55d5b into spacetelescope:main Oct 31, 2024
27 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

NRC_WFSS background subtraction error: index -1 is out of bounds for axis 0 with size 0
2 participants