-
-
Notifications
You must be signed in to change notification settings - Fork 47
New Coalignment API #207
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
Open
Deus1704
wants to merge
94
commits into
sunpy:main
Choose a base branch
from
Deus1704:new_coalignment_api
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
New Coalignment API #207
Changes from all commits
Commits
Show all changes
94 commits
Select commit
Hold shift + click to select a range
bb4876a
a better approach to dev
Deus1704 08a0ff9
added decorator and incorporated suggestions
Deus1704 e02eb28
Merge branch 'main' into new_coalignment_api
Deus1704 f25076b
updated the docstring
Deus1704 98c384e
added tests for majority of all funcs
Deus1704 47e1256
adds how to guide
Deus1704 73373fc
temporary de-referencing funcs and methods
Deus1704 125e78a
fix doc tree
Deus1704 53fd4d5
added refs again
Deus1704 4150115
Apply suggestions from code review
Deus1704 0ac31ab
code review and fixing minor mistakes
Deus1704 ffe357b
changed doc to ref
Deus1704 adc8bcb
Update ref
Deus1704 bc6d2e1
better linking
Deus1704 31d62fa
Merge remote-tracking branch 'upstream/main' into new_coalignment_api
Deus1704 5d67806
updated the api, now returns the map with updated metadata
Deus1704 89f6d99
updated the how_to_guide
Deus1704 963e476
docstring fix
Deus1704 ba8ec82
first try at replacing old coalign
Deus1704 fcf9eae
removing old coalignment completely, refs fixed, old example removed
Deus1704 7dba720
fix the issue of method not being registered
Deus1704 93a477b
fix the pixel pair issue
Deus1704 177173d
Apply suggestions from code review & testing bot
Deus1704 466f8e8
Merge remote-tracking branch 'upstream/main' into new_coalignment_api
Deus1704 b7ac50c
fix the order of the reference and target maps
Deus1704 573d1e3
calm down pre-commit
Deus1704 0cee8f1
Merge remote-tracking branch 'upstream/main' into new_coalignment_api
Deus1704 81b7fcb
fixed the method & added examples and tests
Deus1704 587833b
adding the eis file
Deus1704 9d6ab7f
Apply suggestions from code review
Deus1704 ff7b1b2
Merge remote-tracking branch 'upstream/main' into new_coalignment_api
Deus1704 6f0bc9d
made changes based on suggestions
Deus1704 7eb84b1
pre-commit
Deus1704 cfb93ea
Update docs/how_to_guide/using_the_coalignment_interface.rst
Deus1704 3079671
rename all please
Deus1704 8ed4173
renamed coalignment to coalign, made example plot better, removed nam…
Deus1704 f8d1f5a
here too
Deus1704 eb94a1b
Merge branch 'main' into new_coalignment_api
Deus1704 64e07ad
minor fix
Deus1704 6173e57
marked remote test
Deus1704 8e0508d
testing by including the source
Deus1704 d02b986
fixed the rst
Deus1704 1146039
Merge branch 'main' into new_coalignment_api
Deus1704 b4e54de
updated the handling of cdelt values
Deus1704 7c64024
fixed the plot bloc
Deus1704 9ceadbc
added the figure test case1/2 and clean up
Deus1704 a0e5c6e
fixed the warning list
Deus1704 40713b7
fix refs and clean
Deus1704 17998be
adding fixture
Deus1704 6255c17
trying to suppress warnings
Deus1704 df21cd6
major changes; confirm affine, fixed test case, removed a guide
Deus1704 2db2b09
added a note
Deus1704 2cabfa4
slightly changed the map observation and fig hash
Deus1704 2634cc8
fixed refs
Deus1704 49793d0
trying to fix fig hash
Deus1704 2784fd4
fixed online test, added few more tests, updated coalignment.rst
Deus1704 b8ae410
trying automodule
Deus1704 491acbf
docstring fix
Deus1704 c87a192
fix the online fail by suppressing Astropy Warning
Deus1704 fcf2ea2
one last try
Deus1704 44c5c4c
might need a better way
Deus1704 4e86bd7
for 6.1.2
Deus1704 a6c1f85
final try
Deus1704 2688e52
added the comprehensive changelog
Deus1704 374cf3e
fixed the changelog
Deus1704 a775b27
Apply suggestions from code review
Deus1704 7d130bf
fix the test fails and internalized funcs
Deus1704 33b9428
added the url for eis raster
Deus1704 2aa5e72
forgot
Deus1704 8f26dcb
clean up old raster and few lint fixes
Deus1704 c6f36c4
added a check for astropy version
Deus1704 8b4696f
Merge branch 'main' of github.com:sunpy/sunkit-image into pr/207
nabobalis 5884fc6
Nabil review
nabobalis 1be344f
Apply suggestions from code review
nabobalis da81f44
Addressed comments from Albert
nabobalis 88c4c85
Merge branch 'main' of github.com:sunpy/sunkit-image into pr/207
nabobalis 1b02285
fix import
nabobalis b455b83
Merge branch 'main' of github.com:sunpy/sunkit-image into pr/207
nabobalis 9666bf4
Added second method
nabobalis 14c4a74
Merge branch 'main' of github.com:sunpy/sunkit-image into pr/207
nabobalis ce378bd
doc
nabobalis c5a8053
bugfix
nabobalis 0062510
Merge branch 'main' into new_coalignment_api
nabobalis 5a3f0e9
in-progress refactor of order of args
wtbarnes 55986ad
don't allow rotations or scaling for now
wtbarnes 86b7428
actually fetch image
wtbarnes 5f794d6
fix example
wtbarnes 20cc8c8
update figure hashes
wtbarnes 50eee79
adjust imports
wtbarnes b473d3c
Merge branch 'main' of github.com:sunpy/sunkit-image into pr/207
nabobalis 6f72952
Tweaks to logging
nabobalis b910153
Merge branch 'main' of github.com:sunpy/sunkit-image into pr/207
nabobalis 536758e
Tweaks from Nabil
nabobalis 286b3a3
Overhaul of where stuff lives to get dict to store stuff in docs
nabobalis File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -7,3 +7,6 @@ default.extend-ignore-identifiers-re = [ | |
"iy", | ||
"BA", | ||
] | ||
|
||
[default.extend-words] | ||
eis = "eis" |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
The previous coalignment API has been deleted and replaced with a new set of imports and functions. | ||
Please see this example: :ref:`sphx_glr_generated_gallery_aligning_aia_with_eis_maps.py`. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1,20 @@ | ||
Coalignment Package | ||
******************* | ||
|
||
`sunkit_image.coalignment` provides routines to perform coalignment of solar images. | ||
|
||
The main entry point is the `~sunkit_image.coalignment.coalign` function, which accepts a reference map, a target map, and a specified method for coalignment. | ||
This method returns a new map with updated metadata reflecting the applied affine transformations, such as scaling, rotation, and translation. | ||
|
||
The module supports various transformation methods registered via the `~sunkit_image.coalignment.register.register_coalignment_method` decorator, allowing for flexible coalignment strategies based on the specific needs of the data. | ||
|
||
.. automodapi:: sunkit_image.coalignment | ||
|
||
.. automodapi:: sunkit_image.coalignment.interface | ||
:skip: coalign | ||
|
||
.. automodapi:: sunkit_image.coalignment.register | ||
|
||
.. automodapi:: sunkit_image.coalignment.match_template | ||
|
||
.. automodapi:: sunkit_image.coalignment.phase_cross_correlation |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,60 @@ | ||
.. _sunkit-image-how-to-guide-add-a-new-coalignment-method: | ||
|
||
**************************** | ||
Add a New Coalignment Method | ||
**************************** | ||
|
||
If you want to register a new coalignment method that can be used by :func:`~sunkit_image.coalignment.coalign`, you can use :func:`~sunkit_image.coalignment.register.register_coalignment_method`: | ||
|
||
.. code-block:: python | ||
|
||
from sunkit_image.coalignment.interface import AffineParams, register_coalignment_method | ||
|
||
@register_coalignment_method("my_coalign") | ||
def my_coalignment_method(input_array, target_array, **kwargs): | ||
# Your coalignment code goes here | ||
# This should encompass calculating the shifts, | ||
# handling NaN values appropriately. | ||
# Return the shifts in an affine style, such as the scale, rotation and translation. | ||
return AffineParams(scale, rotation, translation) | ||
|
||
Decorator Parameters | ||
==================== | ||
|
||
Currently the decorator takes one parameter: | ||
|
||
- ``name`` : The name of your custom coalignment method, which in the above example is "my_coalign". | ||
|
||
Function Requirements | ||
===================== | ||
|
||
Your coalignment function should: | ||
|
||
1. **Take Input Parameters**: | ||
|
||
- ``input_array`` : The 2D array to be coaligned. | ||
- ``target_array`` : The 2D array to align to. | ||
- ``**kwargs``: So extra arguments can be passed down the stack. | ||
|
||
2. **Compute Shifts** : Calculate the shifts in the x and y directions needed to align ``input_array`` with ``target_array``. | ||
|
||
3. **Determine Affine Parameters** : Decide the values of the affine parameters - translation, scale and rotation. | ||
|
||
4. **Return** : Use the ``AffineParams`` named tuple included or provide your own that exposes the three parameters as attributes. | ||
|
||
Handling NaNs and Infs | ||
====================== | ||
|
||
Proper handling of these values is expected to be included in the registered methods. | ||
The :func:`~sunkit_image.coalignment.coalign` function does not change any problematic values. | ||
|
||
Checking if the Method is Registered | ||
==================================== | ||
|
||
To check if your method is registered, you can check if it is present in the registered methods dictionary ``REGISTERED_METHODS`` using the following code: | ||
|
||
.. code-block:: python | ||
|
||
from sunkit_image.coalignment.interface import REGISTERED_METHODS | ||
|
||
print(REGISTERED_METHODS) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
.. _sunkit-image-how-to-reference: | ||
|
||
************* | ||
How To Guide | ||
************* | ||
|
||
.. toctree:: | ||
:maxdepth: 1 | ||
|
||
adding_a_coalignment_method |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -14,6 +14,7 @@ sunkit-image | |
:maxdepth: 1 | ||
|
||
code_ref/index | ||
how_to_guide/index | ||
|
||
.. grid-item-card:: Other info | ||
|
||
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,79 @@ | ||
""" | ||
===================== | ||
Coaligning EIS to AIA | ||
===================== | ||
|
||
This example shows how to coalign EIS rasters to AIA images in order correct for the pointing | ||
uncertainty in EIS. | ||
""" | ||
import matplotlib.pyplot as plt | ||
|
||
import astropy.units as u | ||
from astropy.visualization import AsinhStretch, ImageNormalize | ||
|
||
import sunpy.map | ||
|
||
from sunkit_image.coalignment import coalign | ||
|
||
################################################################################### | ||
# For this example, we will use a preprocessed EIS raster image of the Fe XII | ||
# 195.119 Å line. | ||
# This raster image was prepared using the `eispac <https://eispac.readthedocs.io/en/latest/>`__ package. | ||
|
||
nabobalis marked this conversation as resolved.
Show resolved
Hide resolved
|
||
eis_map = sunpy.map.Map("https://github.com/sunpy/data/raw/main/sunkit-image/eis_20140108_095727.fe_12_195_119.2c-0.int.fits") | ||
|
||
################################################################################### | ||
# Next, let's find the AIA data we will use as a reference image. | ||
# We will look for AIA data near the beginning of the EIS raster and we'll use the | ||
# 193 Å channel of AIA as it sees plasma at approximately the same temperature as | ||
# the 195.119 Å line in our EIS raster. | ||
|
||
# Below is the Fido query to search and download the AIA data. | ||
# from sunpy.net import Fido | ||
# from sunpy.net import attrs as a | ||
# query = Fido.search( | ||
# a.Time(start=eis_map.date-1*u.minute, near=eis_map.date, end=eis_map.date+1*u.minute), | ||
# a.Instrument.aia, | ||
# a.Wavelength(193*u.angstrom) | ||
# ) | ||
# aia_file = Fido.fetch(query, site='NSO') | ||
# For now though we have stored this file on Github so we can download it directly. | ||
aia_map = sunpy.map.Map("https://github.com/sunpy/data/raw/refs/heads/main/sunkit-image/aia.lev1.193A_2014_01_08T09_57_30.84Z.image_lev1.fits") | ||
|
||
#################################################################################### | ||
# Before coaligning the images, we first resample the AIA image to the same plate | ||
# scale as the EIS image. This will ensure better results from our coalignment. | ||
|
||
nx = (aia_map.scale.axis1 * aia_map.dimensions.x) / eis_map.scale.axis1 | ||
ny = (aia_map.scale.axis2 * aia_map.dimensions.y) / eis_map.scale.axis2 | ||
|
||
aia_downsampled = aia_map.resample(u.Quantity([nx, ny])) | ||
|
||
#################################################################################### | ||
# Now we can coalign EIS and AIA using cross-correlation. By default, this function | ||
# uses the "match_template" method. For details of the implementation refer to the | ||
# documentation of `skimage.feature.match_template`. | ||
|
||
coaligned_eis_map = coalign(eis_map, aia_downsampled) | ||
|
||
#################################################################################### | ||
# To check now effective this has been, we will plot the EIS data and | ||
# overlap the bright regions from AIA before and after the coalignment. | ||
|
||
fig = plt.figure(figsize=(15, 7.5)) | ||
ax = fig.add_subplot(121, projection=eis_map) | ||
eis_map.plot(axes=ax, | ||
title='Before coalignment', | ||
aspect=eis_map.meta['cdelt2'] / eis_map.meta['cdelt1'], | ||
cmap='Blues_r', | ||
norm=ImageNormalize(stretch=AsinhStretch())) | ||
aia_map.draw_contours([800]*aia_map.unit, axes=ax) | ||
ax = fig.add_subplot(122, projection=coaligned_eis_map) | ||
coaligned_eis_map.plot(axes=ax, | ||
title='After coalignment', | ||
aspect=coaligned_eis_map.meta['cdelt2'] / coaligned_eis_map.meta['cdelt1'], | ||
cmap='Blues_r', | ||
norm=ImageNormalize(stretch=AsinhStretch())) | ||
aia_map.draw_contours([800]*aia_map.unit, axes=ax) | ||
|
||
plt.show() |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
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 think this page still needs a bit of tweaking before this gets merged.