Skip to content

Commit

Permalink
Added the example to remove cosmic ray hits (#35)
Browse files Browse the repository at this point in the history
* added reduce cr example

* fixed tox

* Fixed deps

* renamed example file

* ran linters

* Apply suggestions from code review

Co-Authored-By: Nabil Freij <[email protected]>

* added few links

* fixed docs build

* Apply suggestions from code review

Co-Authored-By: Nabil Freij <[email protected]>

* Apply suggestions from code review

Co-Authored-By: Nabil Freij <[email protected]>

* Added note for jp2

* removed jp2

* changed parameters for better results

* added parameter docs

* deleted few lines

* Apply suggestions from code review

Co-Authored-By: Nabil Freij <[email protected]>

* Update examples/remove_CR_hits.py

Co-Authored-By: Nabil Freij <[email protected]>
  • Loading branch information
vatch123 and nabobalis committed Aug 7, 2019
1 parent d95a0ab commit a0315b2
Show file tree
Hide file tree
Showing 7 changed files with 90 additions and 6 deletions.
2 changes: 1 addition & 1 deletion .circleci/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ apt-run: &apt-install
name: Install apt packages
command: |
sudo apt update
sudo apt install -y graphviz build-essential
sudo apt install -y graphviz
permission-run: &permission-run
name: Fix permssions for installing
Expand Down
1 change: 1 addition & 0 deletions changelog/35.doc.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Added an example on how to use `astroscrappy.detect_cosmics <https://astroscrappy.readthedocs.io/en/latest/api/astroscrappy.detect_cosmics.html>`__ to eliminate cosmic ray hits in solar images.
74 changes: 74 additions & 0 deletions examples/remove_CR_hits.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
"""
========================
Removing Cosmic Ray Hits
========================
This example illustrates how to remove cosmic ray hits from a LASCO C2 FITS file.
using `astroscrappy.detect_cosmics <https://astroscrappy.readthedocs.io/en/latest/api/astroscrappy.detect_cosmics.html>`__.
Astroscrappy is a separate Python package and can be installed separately using ``pip`` or ``conda``.
"""

import matplotlib.pyplot as plt

from sunpy.map import Map

import astroscrappy

###############################################################################
# For more details on how to download and plot LASCO FITS file see
# SunPy's example `Downloading and plotting LASCO C3 data <https://docs.sunpy.org/en/stable/generated/gallery/acquiring_data/skip_downloading_lascoC3.html>`__.
# To make this example work you need to have SunPy with all the "net" dependencies installed.

from sunpy.net import Fido, attrs as a
from sunpy.io.file_tools import read_file

###############################################################################
# In order to download the required FITS file, we use
# `Fido <sunpy.net.fido_factory.UnifiedDownloaderFactory>`, SunPy's downloader client.
# We need to define two search variables: a time range and the instrument.

time_range = a.Time("2000/11/09 00:06", "2000/11/09 00:07")
instrument = a.Instrument("LASCO")
detector = a.Detector("C2")
result = Fido.search(time_range, instrument)

downloaded_files = Fido.fetch(result[0])
data, header = read_file(downloaded_files[0])[0]

# Add the missing meta information to the header
header["CUNIT1"] = "arcsec"
header["CUNIT2"] = "arcsec"

###############################################################################
# With this fix we can load it into a map and plot the results.

lasco_map = Map(data, header)
fig1 = plt.figure()
lasco_map.plot()

###############################################################################
# Now we will call the `astroscrappy.detect_cosmics <https://astroscrappy.readthedocs.io/en/latest/api/astroscrappy.detect_cosmics.html>`__
# to remove the cosmic ray hits.
# This algorithm can perform well with both high and low noise levels in the original data.
# The function takes a `~numpy.ndarray` as input so we only pass the map data.
# This particular image has lots of high intensity cosmic ray hits which
# cannot be effectively removed by using the default set of parameters.
# So we reduce ``sigclip``, the Laplacian to noise ratio from 4.5 to 2 to mark more hits.
# We also reduce ``objlim``, the contrast between the Laplacian image and the fine structured image
# to clean the high intensity bright cosmic ray hits.
# We also modify the ``readnoise`` parameter to obtain better results.

mask, clean_data = astroscrappy.detect_cosmics(lasco_map.data, sigclip=2, objlim=2, readnoise=4, verbose=True)
# This returns two variables - mask is a boolean array depicting whether there is
# a cosmic ray hit at that pixel, clean_data is the cleaned image after removing those
# hits.

###############################################################################
# We can now plot the cleaned image.

clean_map1 = Map(clean_data, lasco_map.meta)

fig2 = plt.figure()
clean_map1.plot()

plt.show()
2 changes: 1 addition & 1 deletion setup.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ packages = find:
include_package_data = True
setup_requires = setuptools_scm
install_requires =
sunpy==1.0.0rc2
sunpy>=1.0.0
scikit-image

[options.extras_require]
Expand Down
1 change: 0 additions & 1 deletion sunkit_image/utils/tests/test_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
import pytest

import astropy.units as u

from astropy.tests.helper import assert_quantity_allclose

from sunkit_image.utils.utils import (
Expand Down
9 changes: 6 additions & 3 deletions sunkit_image/utils/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,14 @@
import numpy as np

import astropy.units as u
from sunpy.coordinates import frames
from sunpy.map.maputils import all_coordinates_from_map

__all__ = ["equally_spaced_bins", "bin_edge_summary", "find_pixel_radii",
"get_radial_intensity_summary"]
__all__ = [
"equally_spaced_bins",
"bin_edge_summary",
"find_pixel_radii",
"get_radial_intensity_summary",
]


def equally_spaced_bins(inner_value=1, outer_value=2, nbins=100):
Expand Down
7 changes: 7 additions & 0 deletions tox.ini
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,13 @@ commands =
[testenv:build_docs]
basepython = python3.7
extras = all,docs
deps =
astroscrappy
beautifulsoup4
drms
python-dateutil
zeep
tqdm
commands = sphinx-build docs docs/_build/html -W -b html

# This env requires tox-conda.
Expand Down

0 comments on commit a0315b2

Please sign in to comment.