0.0.23 (2026-04-01)
===================

New Features
------------

- Update the QuickPUNCH products to their new definitions. (`#813 <https://github.com/punch-mission/punchbowl/pull/813>`__)
- Begin writing hashes for JP2 files. (`#813 <https://github.com/punch-mission/punchbowl/pull/813>`__)
- Allow get_database_session to take a custom credential name (`#824 <https://github.com/punch-mission/punchbowl/pull/824>`__)
- F corona models are now built per-instrument, to account for the coupling between them and stray light models. (`#830 <https://github.com/punch-mission/punchbowl/pull/830>`__)
- Crops quicklook images to a circle circumscribed within the output square dimensions. (`#834 <https://github.com/punch-mission/punchbowl/pull/834>`__)
- CAM/PAM can be configured to use *IM or *TM as input (`#836 <https://github.com/punch-mission/punchbowl/pull/836>`__)
- `!=` filters in the files dashboard now handle wildcards and multiple filters correctly. (`#840 <https://github.com/punch-mission/punchbowl/pull/840>`__)
- ShmPickleableNDArray, a shared-memory-backed numpy array that pickles and un-pickles extremely efficiently. (`#843 <https://github.com/punch-mission/punchbowl/pull/843>`__)
- The stray light model generation has been improved by running an "all-corona" background removal first, so the stray
  light being estimated is a more dominant signal. The "fall-back model" has also been removed---instead, large amounts
  of outlier images are just used to make stray light models, which tends to be a "lesser evil" approach. Alignment and
  PSF correction have been moved to L1_early to support this change. (`#843 <https://github.com/punch-mission/punchbowl/pull/843>`__)
- Change L2 X files to be cropped and contain all polarization layers, speeding up the L3 flows. (`#845 <https://github.com/punch-mission/punchbowl/pull/845>`__)
- F corona modelling is significantly faster, using cropped X files and shared memory for loading. (`#845 <https://github.com/punch-mission/punchbowl/pull/845>`__)
- Use the shared memory cache for F corona models. (`#845 <https://github.com/punch-mission/punchbowl/pull/845>`__)
- Modified velocity.py to work with Clears and Polarized; solar north made to angle zero in polarmap. (`#847 <https://github.com/punch-mission/punchbowl/pull/847>`__)


Bug Fixes
---------

- CAM/PAM scheduling no longer waits if some inputs are outlier images (`#836 <https://github.com/punch-mission/punchbowl/pull/836>`__)


Documentation
-------------

- Improves the text for the landing page for data and a few other small docs improvements. (`#837 <https://github.com/punch-mission/punchbowl/pull/837>`__)


Internal Changes
----------------

- Speedster now suppresses log messages from `httpx`. (`#841 <https://github.com/punch-mission/punchbowl/pull/841>`__)


0.0.22 (2026-03-20)
===================

New Features
------------

- Added code to forecast moon's appearance in PUNCH FOV (`#760 <https://github.com/punch-mission/punchbowl/pull/760>`__)
- Updates starfield generation and subtraction. (`#809 <https://github.com/punch-mission/punchbowl/pull/809>`__)
- Uses the lowest error WCS when aligning images. (`#811 <https://github.com/punch-mission/punchbowl/pull/811>`__)
- Improves pixel area calculation (`#814 <https://github.com/punch-mission/punchbowl/pull/814>`__)
- `reproject_cube` accepts options to pass to `reproject` and can skip reprojecting uncertainty (`#818 <https://github.com/punch-mission/punchbowl/pull/818>`__)
- `load_many_cubes` can show a progress bar. (`#818 <https://github.com/punch-mission/punchbowl/pull/818>`__)
- Per-spacecraft L2 `MS*` mask files can be provided, which are applied to images before reprojection in L2. (`#821 <https://github.com/punch-mission/punchbowl/pull/821>`__)
- Estimates angular difference between solar and celestial north at each pixel based on wcs; Improved polarization to and from celestial frame. (`#822 <https://github.com/punch-mission/punchbowl/pull/822>`__)
- Adds f-coronal model input files to provenance. (`#827 <https://github.com/punch-mission/punchbowl/pull/827>`__)
- Adds a custom Fido client with PUNCH data support. (`#828 <https://github.com/punch-mission/punchbowl/pull/828>`__)
- The files dashboard has presets, additional filters, and a "busy" indicator. (`#829 <https://github.com/punch-mission/punchbowl/pull/829>`__)
- In the files dashboard, file level is now a default group-by column, and is labeled more clearly in the graph. (`#832 <https://github.com/punch-mission/punchbowl/pull/832>`__)


Bug Fixes
---------

- Uses altitude correctly in geodetic location instead of latitude for alignment. (`#801 <https://github.com/punch-mission/punchbowl/pull/801>`__)
- The files dashboard correctly handles filters without asterisks and files without date_created set. (`#805 <https://github.com/punch-mission/punchbowl/pull/805>`__)
- Fixes a bug with array indexing for multi-dimensional data, and improves memory handling for large animations. (`#806 <https://github.com/punch-mission/punchbowl/pull/806>`__)
- A missing comma was resulting in resetting unintended files by the cleaner. This fixes that. (`#808 <https://github.com/punch-mission/punchbowl/pull/808>`__)
- Fixes a missed mask usage in starfield alignment. (`#811 <https://github.com/punch-mission/punchbowl/pull/811>`__)
- Fix setting CROTA in DB for L0 files. (`#816 <https://github.com/punch-mission/punchbowl/pull/816>`__)
- Removes F-corona uncertainty placeholder calculation. (`#820 <https://github.com/punch-mission/punchbowl/pull/820>`__)
- Fixes and streamlines a few parts in quicklook data visualization. (`#826 <https://github.com/punch-mission/punchbowl/pull/826>`__)


Documentation
-------------

- Small clarifications in the docs about data usage. (`#812 <https://github.com/punch-mission/punchbowl/pull/812>`__)
- Updates example animation notebook to use CAM data, with notes on using polarized PAM data. (`#815 <https://github.com/punch-mission/punchbowl/pull/815>`__)
- Adds a few notes to animation notebook on system dependencies and workarounds for data access issues. (`#823 <https://github.com/punch-mission/punchbowl/pull/823>`__)
- Clarifies data structure in documentation. (`#825 <https://github.com/punch-mission/punchbowl/pull/825>`__)


Internal Changes
----------------

- Logging for L3_PIM mistakenly said it was looking for L3 PTM. (`#808 <https://github.com/punch-mission/punchbowl/pull/808>`__)


0.0.21 (2026-02-20)
===================

New Features
------------

- Adds new cosmic ray despiking approach. (`#659 <https://github.com/punch-mission/punchbowl/pull/659>`__)
- Adds DataLoader support for stray light models. (`#683 <https://github.com/punch-mission/punchbowl/pull/683>`__)
- Adds support for estimating and removing some dynamic stray light from WFI polarized images. (`#683 <https://github.com/punch-mission/punchbowl/pull/683>`__)
- Support F corona subtraction in the LQ pipeline (`#685 <https://github.com/punch-mission/punchbowl/pull/685>`__)
- Add additional server state data to omniheader (`#702 <https://github.com/punch-mission/punchbowl/pull/702>`__)
- Added MZP to RGB mapping code (`#704 <https://github.com/punch-mission/punchbowl/pull/704>`__)
- Adds a plotting tool into punchbowl visualization tools to plot PUNCH NDCube objects. (`#709 <https://github.com/punch-mission/punchbowl/pull/709>`__)
- Makes improvements to the PUNCH plot_punch function, allowing for more customization and updates the data guide notebook to show an example of usage. (`#714 <https://github.com/punch-mission/punchbowl/pull/714>`__)
- Updates quicklook plotting to allow more complex layer selection for polarized data, and updates default color scaling parameters. (`#716 <https://github.com/punch-mission/punchbowl/pull/716>`__)
- Stray light models are now generated by finding the center of the (lowest) peak in a histogram of data values across many images. (`#717 <https://github.com/punch-mission/punchbowl/pull/717>`__)
- Adds a simple utility function to compute total brightness from an input NDCube or datacube array. (`#769 <https://github.com/punch-mission/punchbowl/pull/769>`__)
- Moves punchpipe into punchbowl auto subpackage. (`#771 <https://github.com/punch-mission/punchbowl/pull/771>`__)
- Adds an edge trimming plot option to plot_punch, to trim the outer and/or inner edge of low-noise mosaics. (`#778 <https://github.com/punch-mission/punchbowl/pull/778>`__)
- Files dashboard now defaults to showing 1 dot per filetype per hour, so it loads much quicker when showing a large time range. (`#779 <https://github.com/punch-mission/punchbowl/pull/779>`__)
- Handles DB deadlocks better, and handles Ctrl-C better (ensures all flows that were running are set to revivable) (`#781 <https://github.com/punch-mission/punchbowl/pull/781>`__)
- Cleaner flow now understands the QL root, revivable flows even if file relationships are missing from DB. Also routinely deletes old Prefect flows to keep it from ballooning. (`#783 <https://github.com/punch-mission/punchbowl/pull/783>`__)
- Improves logging for stray light and f corona steps. (`#784 <https://github.com/punch-mission/punchbowl/pull/784>`__)
- L3 PAMs and CAMs can now be scheduled. (`#786 <https://github.com/punch-mission/punchbowl/pull/786>`__)
- Performance improvements for F corona estimation (`#787 <https://github.com/punch-mission/punchbowl/pull/787>`__)
- F corona models now have a reasonable (though not perfectly rigorous) uncertainty layer. (`#787 <https://github.com/punch-mission/punchbowl/pull/787>`__)
- Added script to reprocess PX images. (`#789 <https://github.com/punch-mission/punchbowl/pull/789>`__)
- Limit number of L0 images per flow. (`#790 <https://github.com/punch-mission/punchbowl/pull/790>`__)
- Sped up L0 queries with new database indices and limiting scope of time for query. (`#792 <https://github.com/punch-mission/punchbowl/pull/792>`__)
- Adds priority column to L0 processing. This was used to schedule reprocessing of PX images. (`#792 <https://github.com/punch-mission/punchbowl/pull/792>`__)
- The `new_L0_impossible_after_days` config value has been moved out of several flows and into a single global config value. (`#794 <https://github.com/punch-mission/punchbowl/pull/794>`__)
- Improved scheduling based on observatory. (`#796 <https://github.com/punch-mission/punchbowl/pull/796>`__)
- old_fileversion_to_filter_in_meta can be set, allowing files to have version numbers scrubbed in their metadata before writing. (`#798 <https://github.com/punch-mission/punchbowl/pull/798>`__)
- The files dashboard has been sped up, and date selections are no longer capped at the date the page was loaded. (`#799 <https://github.com/punch-mission/punchbowl/pull/799>`__)


Bug Fixes
---------

- Northern images are excluded from WFI static stray light models, to avoid eclipsed images affecting the models. (`#683 <https://github.com/punch-mission/punchbowl/pull/683>`__)
- Safeguard access to 'has_distortion' attribute. (`#693 <https://github.com/punch-mission/punchbowl/pull/693>`__)
- Fix for possible crash on import if a Prefect server isn't running. (`#706 <https://github.com/punch-mission/punchbowl/pull/706>`__)
- Prefect can fail to be reached due to Runtime error. (`#707 <https://github.com/punch-mission/punchbowl/pull/707>`__)
- Replaced incorrect uncertainty estimation of f-corona with 0 for now (`#710 <https://github.com/punch-mission/punchbowl/pull/710>`__)
- Fix despiking so images are square root decoded first. (`#712 <https://github.com/punch-mission/punchbowl/pull/712>`__)
- Fixes OBSLAYR3 issue in L3 files (`#715 <https://github.com/punch-mission/punchbowl/pull/715>`__)
- Updates uncertainty propagation in low-noise mosaics to properly add in quadrature and handle rogue values. (`#747 <https://github.com/punch-mission/punchbowl/pull/747>`__)
- Reduces artifacts of saturated pixels during despiking. (`#772 <https://github.com/punch-mission/punchbowl/pull/772>`__)
- L0 production will wait for PFW packets instead of making PX files (`#773 <https://github.com/punch-mission/punchbowl/pull/773>`__)
- Fixed filtering so P* is actually P* and not just PP, PM, PZ and PR. (`#779 <https://github.com/punch-mission/punchbowl/pull/779>`__)
- NFI polarized images now properly skip level1_middle and get produced as L1s (`#780 <https://github.com/punch-mission/punchbowl/pull/780>`__)
- Exclude bad-packet images from certain steps. (`#782 <https://github.com/punch-mission/punchbowl/pull/782>`__)
- Propagate the OUTLIER flag as a bitmask properly. (`#785 <https://github.com/punch-mission/punchbowl/pull/785>`__)
- Moved `skip_if_no_new_tlm` into configuration file because it wasn't propagating properly. (`#792 <https://github.com/punch-mission/punchbowl/pull/792>`__)
- Images with BADPKTS set no longer undergo despiking, destreaking, or saturated pixel filling (`#794 <https://github.com/punch-mission/punchbowl/pull/794>`__)
- CAM/PAMs are not scheduled if they would be empty because all the input images are outliers. (`#796 <https://github.com/punch-mission/punchbowl/pull/796>`__)
- Alters f-corona subtraction to apply to in-painted data regions. (`#797 <https://github.com/punch-mission/punchbowl/pull/797>`__)
- L2 ignore_missing_after_days is now based on date_created, not date_obs (`#798 <https://github.com/punch-mission/punchbowl/pull/798>`__)
- Stray light model generation will use a "fallback" model if a CROTA bin has too many outlier images. (`#800 <https://github.com/punch-mission/punchbowl/pull/800>`__)


Documentation
-------------

- Adds new example notebooks from bimonthly meetings and cleans up existing ones. (`#674 <https://github.com/punch-mission/punchbowl/pull/674>`__)
- Adds DOI to Level2 and Level3 metadata. (`#691 <https://github.com/punch-mission/punchbowl/pull/691>`__)
- Adds a minimalist data plotting notebook to illustrate the plot_punch function. (`#721 <https://github.com/punch-mission/punchbowl/pull/721>`__)
- Streamlines example notebooks built as part of the documentation to avoid timing out the CI. (`#722 <https://github.com/punch-mission/punchbowl/pull/722>`__)
- Add missing product codes. (`#761 <https://github.com/punch-mission/punchbowl/pull/761>`__)
- Documented v0j data release differences. (`#770 <https://github.com/punch-mission/punchbowl/pull/770>`__)
- Changes despiking documentation to reflect new algorithm. (`#772 <https://github.com/punch-mission/punchbowl/pull/772>`__)
- Add text about how to use wget to pull data directly from SDAC. (`#774 <https://github.com/punch-mission/punchbowl/pull/774>`__)


Internal Changes
----------------

- Bump Matplotlib version. (`#688 <https://github.com/punch-mission/punchbowl/pull/688>`__)
- Add Python 3.14 to testing matrix. (`#695 <https://github.com/punch-mission/punchbowl/pull/695>`__)
- Update pre-commit version. (`#701 <https://github.com/punch-mission/punchbowl/pull/701>`__)


0.0.20 (2025-12-09)
===================

Breaking Changes
----------------

- `l1_early_core_flow` no longer writes Q files, nor does it align X files. Alignment happens in `l1_late_core_flow`, which writes Q or final L1 files depending on a flag. (`#573 <https://github.com/punch-mission/punchbowl/pull/573>`__)


New Features
------------

- Adds NFI flat-fielding module. (`#567 <https://github.com/punch-mission/punchbowl/pull/567>`__)
- Improves stray light generation to avoid banding artifacts. (`#571 <https://github.com/punch-mission/punchbowl/pull/571>`__)
- Adds an option to fill NaNs with 0 in L2 PTM construction. (`#572 <https://github.com/punch-mission/punchbowl/pull/572>`__)
- Adds 'OUTLIER' to omniheader (`#574 <https://github.com/punch-mission/punchbowl/pull/574>`__)
- Mosaics can now be made with edge trimming and with alpha scaling coefficients. (`#576 <https://github.com/punch-mission/punchbowl/pull/576>`__)
- Pointing initial guess is faster (`#580 <https://github.com/punch-mission/punchbowl/pull/580>`__)
- Adds spacecraft labeling indicator metadata in mosaics, indicating which spacecraft ingredients are present in a given mosaic data product. (`#584 <https://github.com/punch-mission/punchbowl/pull/584>`__)
- Rolls off the uncertainty by distance to edge of mask so that we seamlessly make mosaics. (`#592 <https://github.com/punch-mission/punchbowl/pull/592>`__)
- Add spacecraft data example notebooks in punchbowl/examples (`#597 <https://github.com/punch-mission/punchbowl/pull/597>`__)
- Adds inverse punch colormap to punchbowl.data.visualize. (`#600 <https://github.com/punch-mission/punchbowl/pull/600>`__)
- Adds indexing based straylight generation for polarized channel to punchbowl.level1.straylight (`#602 <https://github.com/punch-mission/punchbowl/pull/602>`__)
- Updates Level 3 processing for preliminary products. (`#603 <https://github.com/punch-mission/punchbowl/pull/603>`__)
- Implement average below percentile based indexing for polarization straylight background (`#614 <https://github.com/punch-mission/punchbowl/pull/614>`__)
- Filled saturated pixels with their neighbors and flagged their uncertainty as infinite. (`#629 <https://github.com/punch-mission/punchbowl/pull/629>`__)
- generate_vignetting_calibration_nfi accepts a maximum number of files to load. (`#634 <https://github.com/punch-mission/punchbowl/pull/634>`__)
- Updates the quicklook image generation to use a power normalization with a gamma of 2.2 rather than the original log normalization. (`#637 <https://github.com/punch-mission/punchbowl/pull/637>`__)
- A new `load_mask_file` function is available. (`#642 <https://github.com/punch-mission/punchbowl/pull/642>`__)
- A "BADPKTS" key is now included in the omniheader (`#643 <https://github.com/punch-mission/punchbowl/pull/643>`__)
- Added capability to reconstitute noise with sqrt decoding. Defaulted to always add noise. (`#647 <https://github.com/punch-mission/punchbowl/pull/647>`__)
- The `nan_percentile_2d` function has been added. (`#655 <https://github.com/punch-mission/punchbowl/pull/655>`__)
- Support interpolating between vignetting maps (`#656 <https://github.com/punch-mission/punchbowl/pull/656>`__)
- Updates PSF correction to access parameters for existing regularizepsf handling of saturated neighborhoods, and sets uncertainty appropriately (`#661 <https://github.com/punch-mission/punchbowl/pull/661>`__)
- L2 mosaic rolloffs are now configurable (`#664 <https://github.com/punch-mission/punchbowl/pull/664>`__)
- For mosaics, the location of the central pixel of each input image is recorded in the header (`#665 <https://github.com/punch-mission/punchbowl/pull/665>`__)
- Adds indexing-based f corona model generation for polarized data (`#666 <https://github.com/punch-mission/punchbowl/pull/666>`__)
- (Approximate) uncertainty is now propagated through F corona subtraction (`#669 <https://github.com/punch-mission/punchbowl/pull/669>`__)
- Adds low noise data generation functions for CAM and PAM data products. (`#678 <https://github.com/punch-mission/punchbowl/pull/678>`__)
- Polarized F-corona model generation now uses the images whose tB falls between a low and high threshold. (`#680 <https://github.com/punch-mission/punchbowl/pull/680>`__)
- Calling `str` on a `NormalizedMetadata` now returns the full contents of the header, allowing for easy printing. (`#681 <https://github.com/punch-mission/punchbowl/pull/681>`__)
- The dtype of cubes loaded with `load_ndcube_from_fits` can be set. (`#681 <https://github.com/punch-mission/punchbowl/pull/681>`__)


Bug Fixes
---------

- Tweaks around updating image stats before writing out FITS files (`#574 <https://github.com/punch-mission/punchbowl/pull/574>`__)
- Fixes a mask path bug in NFI vignetting module inputs. (`#578 <https://github.com/punch-mission/punchbowl/pull/578>`__)
- DATE is set correctly in L1 headers. (`#586 <https://github.com/punch-mission/punchbowl/pull/586>`__)
- Corrects units in polarization resolution to be compatible with solpolpy usage. (`#590 <https://github.com/punch-mission/punchbowl/pull/590>`__)
- Updates quickpunch f-corona generation for multithreading and data cube array ordering. (`#595 <https://github.com/punch-mission/punchbowl/pull/595>`__)
- Masked regions are set to 0 in level1_late and level1_quick (`#604 <https://github.com/punch-mission/punchbowl/pull/604>`__)
- Handle exceptions when loading data for F-corona model generation (`#605 <https://github.com/punch-mission/punchbowl/pull/605>`__)
- `ALL_INPUT` is set correctly for L2 files. (`#631 <https://github.com/punch-mission/punchbowl/pull/631>`__)
- `DATE` is formatted the same in stray light models as for other files. (`#631 <https://github.com/punch-mission/punchbowl/pull/631>`__)
- Masks are applied correctly when the image pixel is NaN. (`#631 <https://github.com/punch-mission/punchbowl/pull/631>`__)
- Forking is now avoided in several situations, hopefully avoiding occasional hung flows. (`#641 <https://github.com/punch-mission/punchbowl/pull/641>`__)
- Metadata for L2 and L3 files is now set more fully (`#645 <https://github.com/punch-mission/punchbowl/pull/645>`__)
- Extra care is taken with nans and infs when merging in Level 2. (`#649 <https://github.com/punch-mission/punchbowl/pull/649>`__)
- Writes the distortion header keywords for both primary and secondary WCSes. (`#651 <https://github.com/punch-mission/punchbowl/pull/651>`__)
- Properly labels the PFM and PIM obslayers. (`#653 <https://github.com/punch-mission/punchbowl/pull/653>`__)
- Fixes detection of image edges for cropping and rolloffs in L2 mosaics (`#664 <https://github.com/punch-mission/punchbowl/pull/664>`__)
- Disables `conserve_flux` during reprojection, which was being use incorrectly. (`#664 <https://github.com/punch-mission/punchbowl/pull/664>`__)
- fix nans in f corona polarized background (`#671 <https://github.com/punch-mission/punchbowl/pull/671>`__)
- Pixels in the interior of the image are no longer masked in the L2 pre-process step (`#672 <https://github.com/punch-mission/punchbowl/pull/672>`__)
- LQ CFM now runs correctly (`#672 <https://github.com/punch-mission/punchbowl/pull/672>`__)
- Decreases pointing refinement failures. (`#673 <https://github.com/punch-mission/punchbowl/pull/673>`__)


Documentation
-------------

- Adds DOI for Level 1 data. (`#583 <https://github.com/punch-mission/punchbowl/pull/583>`__)
- Update the data version documentation. (`#593 <https://github.com/punch-mission/punchbowl/pull/593>`__)
- Added PIM and CIM to product code list. (`#606 <https://github.com/punch-mission/punchbowl/pull/606>`__)
- Improved documentation on pointing and various model generation. (`#627 <https://github.com/punch-mission/punchbowl/pull/627>`__)


Internal Changes
----------------

- Fixes L3 tests by not forcing them to run first. (`#577 <https://github.com/punch-mission/punchbowl/pull/577>`__)


0.0.19 (2025-08-28)
===================

New Features
------------

- Stray light models generate more quickly using less memory (`#568 <https://github.com/punch-mission/punchbowl/pull/568>`__)
- Speeds up pointing determination by pre-computing a KDTree of distances instead of doing a search over all points. (`#570 <https://github.com/punch-mission/punchbowl/pull/570>`__)


Bug Fixes
---------

- Fix LQ CTM to run from Q* input files. (`#563 <https://github.com/punch-mission/punchbowl/pull/563>`__)
- Set DATE for stray light models (`#568 <https://github.com/punch-mission/punchbowl/pull/568>`__)
- Avoid crash in reprojection if input pixels map to NaN in output frame (`#569 <https://github.com/punch-mission/punchbowl/pull/569>`__)


Documentation
-------------

- Consolidates old and new changelogs. (`#585 <https://github.com/punch-mission/punchbowl/pull/585>`__)


Internal Changes
----------------

- Speed up L1_early if not alignment or Q file is needed (`#562 <https://github.com/punch-mission/punchbowl/pull/562>`__)
- `estimate_stray_light` reports file paths that cause loading errors. (`#564 <https://github.com/punch-mission/punchbowl/pull/564>`__)


0.0.18 (2025-08-06)
===================

Breaking Changes
----------------

- Where flows allowed an input file to be provided as a ``Callable`` that returned the required file, those flows now expect an object subclassing `DataLoader`. (`#538 <https://github.com/punch-mission/punchbowl/pull/538>`__)
- The L1 flow has been split into 'early' and 'late' phases. Early writes an X{MZPR} file and, for clear inputs, a QR file. Late writes a CR or P{MZP}. (`#554 <https://github.com/punch-mission/punchbowl/pull/554>`__)
- In stray light subtraction, mismatches in observatory or polarization state are now an error, not a warning. (`#554 <https://github.com/punch-mission/punchbowl/pull/554>`__)


New Features
------------

- Stray light models have their date_obs set to the provided reference time and require much less RAM to generate. (`#538 <https://github.com/punch-mission/punchbowl/pull/538>`__)
- Implements second order square root decoding table, using the technique from DeForest et al 2022. (`#550 <https://github.com/punch-mission/punchbowl/pull/550>`__)
- Stray light models can be interpolated or extrapolated to the image time. It will use either DATE-AVG, DATE-BEG, or DATE-END of the stray light models as the reference time for the models, so that in the quickpunch case, a 6-hour isn't extrapolated for days. (`#554 <https://github.com/punch-mission/punchbowl/pull/554>`__)
- Stray light models are written with DATE-OBS set to the reference time, DATE-AVG  set to the mean of the input files' DATE-OBS, and DATE-{BEG,END} set to the earliest/latest input DATE-OBS. (`#554 <https://github.com/punch-mission/punchbowl/pull/554>`__)


Bug Fixes
---------

- Skips PCA testing on macOS and improves git handling of test temporary sample files. (`#546 <https://github.com/punch-mission/punchbowl/pull/546>`__)
- The PSF dilation was too small and resulting in artifacts. This expands it from 1 to 3 dilations. (`#547 <https://github.com/punch-mission/punchbowl/pull/547>`__)
- Provenance wasn't getting populated. This makes sure it's fully filled for all products. (`#551 <https://github.com/punch-mission/punchbowl/pull/551>`__)
- NFI pointing was consistently failing. This improves it by changing the alignment search parameters and allowing astrometry.net to fail by falling back on the spacecraft WCS. (`#557 <https://github.com/punch-mission/punchbowl/pull/557>`__)


Documentation
-------------

- Improves the documentation about file versions. (`#553 <https://github.com/punch-mission/punchbowl/pull/553>`__)
- Updates data query example notebook to streamline download and execution. (`#556 <https://github.com/punch-mission/punchbowl/pull/556>`__)


Internal Changes
----------------

- The ``on_completion`` debugging hook is only set if debugging is enabled, avoiding log messages after every Task run when debugging isn't enabled. (`#538 <https://github.com/punch-mission/punchbowl/pull/538>`__)
- The filler WCS written in stray light models is now a valid, though arbitrary, WCS. (`#538 <https://github.com/punch-mission/punchbowl/pull/538>`__)
- Turns off ruff's EM101 check. (`#558 <https://github.com/punch-mission/punchbowl/pull/558>`__)
- Speedups to alignment and to de-spiking with many flows running at once. (`#559 <https://github.com/punch-mission/punchbowl/pull/559>`__)
- Disables Prefect task result caching (`#560 <https://github.com/punch-mission/punchbowl/pull/560>`__)

Version 0.0.17: July 23, 2025
=============================

- Adds docs button to view source in https://github.com/punch-mission/punchbowl/pull/526
- Fixes constant deficient pixel map creation in https://github.com/punch-mission/punchbowl/pull/522
- Adds a quickfix for parsing input filenames for the calibration CLI tool in https://github.com/punch-mission/punchbowl/pull/516
- Adds docstring to PSF function in https://github.com/punch-mission/punchbowl/pull/519
- Reduces memory usage of stray light model generation in https://github.com/punch-mission/punchbowl/pull/525
- Updates vignetting calibration command in https://github.com/punch-mission/punchbowl/pull/523
- Implements rolling stray light models in https://github.com/punch-mission/punchbowl/pull/531
- Add Limit/LimitSet classes in LQ PCA; support batched PCA; add seam blending for quartered PCA in https://github.com/punch-mission/punchbowl/pull/529
- Changed docstring in vignette.py #503 and transpose in destreak.py #487 in https://github.com/punch-mission/punchbowl/pull/530
- Output stray light models as NDCubes in https://github.com/punch-mission/punchbowl/pull/533
- Rewrites pointing refinement in https://github.com/punch-mission/punchbowl/pull/524
- Only pull file version from first file for LQ in https://github.com/punch-mission/punchbowl/pull/534/

Version 0.0.16: July 3, 2025
============================

- Fixed vignetting docstring in https://github.com/punch-mission/punchbowl/pull/510
- Relabels CCD halves in https://github.com/punch-mission/punchbowl/pull/493
- Adds documentation for data versions and anomalies in https://github.com/punch-mission/punchbowl/pull/495
- Separates LQ CNN and CTM into separate flows in https://github.com/punch-mission/punchbowl/pull/507
- Avoid incorrectly coping some metadata from L0 to L1, and update PIPEVRSN in https://github.com/punch-mission/punchbowl/pull/508
- Avoids mutating input cubes in `write_ndcube_to_fits` in https://github.com/punch-mission/punchbowl/pull/502
- Ensures inf values in uncertainty layers roundtrip through compression in https://github.com/punch-mission/punchbowl/pull/506
- Allow writing out L1s with stray light included in https://github.com/punch-mission/punchbowl/pull/509
- Unified L2 clear and polarized flows in https://github.com/punch-mission/punchbowl/pull/513
- Sets FILEVRSN in L2 flow in https://github.com/punch-mission/punchbowl/pull/514
- Removes unused prefect test decorator in https://github.com/punch-mission/punchbowl/pull/515
- Creates calibration creation CLI and adds hash functions as needed in https://github.com/punch-mission/punchbowl/pull/497

Version 0.0.15: June 4, 2025
============================

- Restricts the mask for NFI pointing refinement in https://github.com/punch-mission/punchbowl/pull/486
- Removes VAN product code from documentation in https://github.com/punch-mission/punchbowl/pull/489
- Changes default float writing dtype to 32 bit instead of 64 bit in https://github.com/punch-mission/punchbowl/pull/485

Version 0.0.14: June 3, 2025
============================

- Adds DOI for level 0 data products in https://github.com/punch-mission/punchbowl/pull/481
- Many processing improvements in https://github.com/punch-mission/punchbowl/pull/482

Version 0.0.13: May 22, 2025
============================

- F-corona detrending, fixes for L2 FILEVRSN and DATE-OBS, and use header's gain and exposure time in https://github.com/punch-mission/punchbowl/pull/455
- Suppress CROTA warnings in load_ndcube_from_fits in https://github.com/punch-mission/punchbowl/pull/456
- Corrects the sign in p angle when converting between helio and celestial in https://github.com/punch-mission/punchbowl/pull/454
- Changes to astroscrappy for despiking in https://github.com/punch-mission/punchbowl/pull/462
- Supports floating-point COMPBITS values in https://github.com/punch-mission/punchbowl/pull/461
- Adds data overview documentation in https://github.com/punch-mission/punchbowl/pull/458
- Flags uncertainty of saturated pixels in https://github.com/punch-mission/punchbowl/pull/471
- Prepares changes for QuickPUNCH creation in https://github.com/punch-mission/punchbowl/pull/473/f
- Improve documentation for despiking in https://github.com/punch-mission/punchbowl/pull/470
- Manages square root decoding table value overflow in https://github.com/punch-mission/punchbowl/pull/469
- LQ PCA filtering, fix for NormalizedMetadata str values, and LQ FILEVRSN propagation in https://github.com/punch-mission/punchbowl/pull/472

Version 0.0.12: May 12, 2025
============================

- L1 speedups, L2 reprojection fix, and accepting ints for `float` fields in `NormalizedMetadata` in https://github.com/punch-mission/punchbowl/pull/435
- Allows custom path for ffmpeg in quicklook movies in https://github.com/punch-mission/punchbowl/pull/438
- Allows L1 calibration files to be passed in as callables in https://github.com/punch-mission/punchbowl/pull/426
- Speedups to L1 production in https://github.com/punch-mission/punchbowl/pull/426
- Adds metadata to output jpeg2000 files in https://github.com/punch-mission/punchbowl/pull/433
- Checks for square root decompression in L1 processing in https://github.com/punch-mission/punchbowl/pull/434
- Modifies metadata for header / unit compliance in https://github.com/punch-mission/punchbowl/pull/427
- Updates L0 header generation in https://github.com/punch-mission/punchbowl/pull/444
- Doesn't set SC location for F-corona models, improvements to msb_to_dn and compute_noise, and F-corona modeling improvements in https://github.com/punch-mission/punchbowl/pull/441
- Sets quicklook images to grayscale by default, with a flag for color rendering in https://github.com/punch-mission/punchbowl/pull/447

Version 0.0.11: Apr 14, 2025
============================

- Changes error message for default overwriting in https://github.com/punch-mission/punchbowl/pull/420
- Updates code to match new regularizepsf version in https://github.com/punch-mission/punchbowl/pull/413
- Adds the scale factor to the square root decoding in https://github.com/punch-mission/punchbowl/pull/418
- Standardize square root decoding in https://github.com/punch-mission/punchbowl/pull/421
- Fixes to ensure vignetting correction runs in https://github.com/punch-mission/punchbowl/pull/423
- Adds square root decoding example notebook in https://github.com/punch-mission/punchbowl/pull/425

Version 0.0.10: Apr 2, 2025
===========================

- Changes so that vignetting is a separate step in the pipeline.
- Switches to use Prefect Dask Task Runner in https://github.com/punch-mission/punchbowl/pull/387
- Changes level 0.5 to level H in https://github.com/punch-mission/punchbowl/pull/388
- Fixes WCS conversions in https://github.com/punch-mission/punchbowl/pull/390
- Parallelize F corona model building in https://github.com/punch-mission/punchbowl/pull/392
- Fixes starfield polarization; checks times are in UTC in https://github.com/punch-mission/punchbowl/pull/328#pullrequestreview-2726230483
- Fixes issues with calibration metadata in https://github.com/punch-mission/punchbowl/pull/404
- Adds quicklook movie generation in https://github.com/punch-mission/punchbowl/pull/391
- Computes gain on two detector halves separately in https://github.com/punch-mission/punchbowl/pull/406
- Fixes a keyword typo in omniheader in https://github.com/punch-mission/punchbowl/pull/407
- Creates a uses a custom PUNCH flow in prefect in https://github.com/punch-mission/punchbowl/pull/409
- Changes default of NDCube writing to prohibit overwriting in https://github.com/punch-mission/punchbowl/pull/408

Version 0.0.9: Feb 28, 2025
===========================

* adds zspike blurring and parameterization by @lowderchris in https://github.com/punch-mission/punchbowl/pull/345
* [pre-commit.ci] pre-commit autoupdate by @pre-commit-ci in https://github.com/punch-mission/punchbowl/pull/349
* rename PUNCH io module by @jmbhughes in https://github.com/punch-mission/punchbowl/pull/350
* Adds sphinx gallery by @lowderchris in https://github.com/punch-mission/punchbowl/pull/352
* make binder work by @jmbhughes in https://github.com/punch-mission/punchbowl/pull/356
* Configure binder by @jmbhughes in https://github.com/punch-mission/punchbowl/pull/357
* Rename example gallery by @jmbhughes in https://github.com/punch-mission/punchbowl/pull/358
* Update binder.yaml by @jmbhughes in https://github.com/punch-mission/punchbowl/pull/360
* Separate quick punch by @jmbhughes in https://github.com/punch-mission/punchbowl/pull/361
* specify codecov path by @jmbhughes in https://github.com/punch-mission/punchbowl/pull/362
* Update issue templates by @jmbhughes in https://github.com/punch-mission/punchbowl/pull/364
* Update README.md by @jmbhughes in https://github.com/punch-mission/punchbowl/pull/365
* update copyright year by @jmbhughes in https://github.com/punch-mission/punchbowl/pull/367

Version 0.0.8: Dec 19, 2024
===========================

- Fix stellar by @jmbhughes in #344
- Updates for V4 RFR2 by @jmbhughes in #346

Version 0.0.7: Dec 11, 2024
===========================

- Reproject starfield sample and uncertainty in one fell swoop by @svank in #323
- PUNCH user guide by @lowderchris in #316
- Unpack uncertainties faster by @svank in #324
- Make mosaics faster w/ bounding boxes by @svank in #326
- Ignore warnings in unpacking uncertainty by @svank in #329
- Be a little more accurate/safe with bounding boxes by @svank in #327
- Fully implement previous change to bounding boxes by @svank in #332
- adds thresholding to spike value replacement by @lowderchris in #331
- Metadata check by @lowderchris in #330
- Fixes merging, improves f corona modeling by @jmbhughes in #333
- adds DOI badge by @lowderchris in #334
- Turn velocity plot test into a figure test by @svank in #325
- Better f corona by @svank in #335
- Document python tutorials by @lowderchris in #336
- Change despike settings by @svank in #338
- WCS array shape by @lowderchris in #337
- adds wcs keywords to ignore to prevent duplication by @lowderchris in #340
- Create starfield estimates that are less distorted by @svank in #339
- remove broken link by @jmbhughes in #341
- adds file provenance extname and test by @lowderchris in #342
- Quicklook generation by @jmbhughes in #343

Version 0.0.6: Nov 22, 2024
===========================

- Improve calculation of pixel areas by @svank in #306
- November 17th Mega Update by @jmbhughes in #310
- Confirm l2 l3 tests by @jmbhughes in #311
- flow tracking by @lowderchris in #308
- Update .pre-commit-config.yaml by @jmbhughes in #315
- Reusable celestial reprojections by @svank in #309
- Large prep for End2End by @jmbhughes in #317
- fix import by @jmbhughes in #318
- When generating WCSes, set NAXIS/array_shape/etc. by @svank in #320
- Faster star subtraction by @svank in #319
- Updated Level2/polarization by @s0larish in #322

Version 0.0.5: Nov 13, 2024
===========================

- automatically converts metafields by @jmbhughes in #305

Version 0.0.4: Nov 13, 2024
===========================

- add debug mode by @jmbhughes in #290
- fix call of remove starfield by @jmbhughes in #292
- copy over estimate stray light by @jmbhughes in #294
- update low noise generation by @jmbhughes in #295
- Improve f corona flow generation by @jmbhughes in #296
- adds visualization core by @jmbhughes in #297
- flips quicklook data vertically to the expected spatial orientation by @lowderchris in #300
- Prep work for secondary starfield removal, plus fix for F-corona estimation by @svank in #301
- Work fast! Clean up many issues. by @jmbhughes in #302
- adds new get method to normmeta by @jmbhughes in #304

Version 0.0.3: Nov 2, 2024
==========================

- Fixes figure in intro.rst by @jmbhughes in #281
- add file hashing by @jmbhughes in #276
- Delete docs/requirements.txt by @jmbhughes in #284
- Delete .github/workflows/docs.yaml by @jmbhughes in #285
- fix versions in docs by @jmbhughes in #286
- Adds polarref keyword by @jmbhughes in #277
- add new f corona model generation algorithm by @jmbhughes in #287
- update psf to new regularizepsf by @jmbhughes in #289

Version 0.0.2: Nov 1, 2024
==========================

- Bug fix

Version 0.0.1: Nov 1, 2024
==========================

- First release
