What’s New in Astropy 1.2?

Overview

Astropy 1.2 is a major release that adds significant new functionality since the 1.1.x series of releases.

In particular, this release includes:

In addition to these major changes, Astropy 1.2 includes a large number of smaller improvements and bug fixes, which are described in the Full Changelog. By the numbers:

  • 615 issues have been closed since v1.1

  • 313 pull requests have been merged since v1.1

  • 191 distinct people have contributed code

Lomb-scargle periodograms

The new astropy.stats.LombScargle class implements a fast Lomb-Scargle periodogram, useful for detecting periodic signals in noisy, unevenly-spaced data. For example, here is an irregular sinusoidal signal:

>>> import numpy as np
>>> rand = np.random.RandomState(42)
>>> t = 100 * rand.rand(100)
>>> dy = 0.1
>>> y = np.sin(2 * np.pi * t) + dy * rand.randn(100)

Given this data, we can compute the Lomb-Scargle periodogram and find the frequency at which the power is maximized:

>>> from astropy.stats import LombScargle
>>> frequency, power = LombScargle(t, y, dy).autopower()
>>> frequency[np.argmax(power)]
0.99962825294969382

The maximum is very near the input frequency of 1.0 cycles per unit time.

As a more realistic example, here is a periodogram computed for six months of nightly observations of a simulated RR-Lyrae-type variable (this particular example is discussed more fully in RR-Lyrae Example):

()

../_images/1-2-1.png

For more information on astropy’s Lomb-Scargle functionality, see Lomb-Scargle Periodograms.

Other new statistics features

The Jackknife resampling method is available via the jackknife_resampling() function. Jackknife resampling generates n deterministic samples of size n-1 from a measured sample of size n. Those samples can then be used for various statistics estimation such as variance and bias using the jackknife_stats() function.

Circular statistics (circular mean, variance, etc) are now provided by the circmean(), circvar(), , circmoment(), and circcorrcoef() functions. in. The API basically follows the same conventions of R CircStats package. In addition, the circular stats are compatible with the Quantity class.

The Akaike and Bayesian information criteria are now implemented in akaike_info_criterion(), akaike_info_criterion_lsq(), bayesian_info_criterion(), and bayesian_info_criterion_lsq(). Basically, these information criteria are used to decided whether increasing the number of parameters in a model truly improves the fitting. Conversely, they are also used to verify whether improvements in fitting are due to the increasing of the number of parameters.

Solar system ephemerides

It is now possible to calculate the positions of the major solar system bodies (as well as the moon) in the coordinates sub-package. These integrate fully all the coordinate frames, allowing easy conversion to apparent (e.g. AltAz) positions or barycentric values. The positions can be calculated using either using built-in approximations or more precise values that depend on downloading JPL-provided ephemeris models derived from n-body simulations (the latter requires the additional dependency of the jplephem package). For more details, see Solar System Ephemerides.

Barycentric light-travel time corrections

The Time class has gained a new method light_travel_time() for calculating barycentric (or heliocentric) corrections. For more details, see Barycentric and Heliocentric Light Travel Time Corrections.

Sky offset coordinate frames

The coordinates sub-package now includes support for coordinate frames that are rotated in the sky to be centered on a particular object. This sort of frame is variously known as “FOV coordinates”, “offset coordinates”, or “astrometric”. It makes it easier to compute offsets from a particular reference object, and define coordinate frames that for heirarchical systems like groups or clusters of galaxies. It also enables the new spherical_offsets_to() method. For more details, see “Sky Offset” Frames.

Zscale implementation

The zscale algorithm from IRAF is now included in Astropy’s visualization sub-package, and available as a ZScaleInterval interval class. The implementation is based on Numdisplay’s one, slightly modified to expose more arguments and work with data with any number of dimensions.

Apparent/absolute bolometric magnitudes and other new units

The units sub-package now supports bolometric magnitudes, based on the bolometric flux and luminosity scales adopted in IAU 2015 resolution B2.

Furthermore, Earth and Jupiter radii have been made available as units.

NDData improvements

Arithmetic and uncertainty handling have been enhanced for astropy 1.2, and a new class, NDDataRef, has been added that should be the starting point for new users of astropy.nddata. One can now do arithmetic between an NDDataRef object and a scalar, an Quantity or another NDDataRef object (or any class that implements the nddata interface). Limited support for propagating correlated errors was added to StdDevUncertainty.

Several internal changes were made to the classes in the nddata package to make writing custom classes that implement the nddata interface more straightforward.

Automatic updates to IERS Earth rotation data

The astropy.utils.iers sub-package provides access to the tables provided by the International Earth Rotation and Reference Systems (IERS) service. These are used in the time sub-package to transform to/from UT1 values and for determining Earth orientation for celestial-to-terrestrial coordinate transformations (in the coordinates sub-package).

Starting with astropy 1.2, the latest IERS values (which include approximately one year of predictive values) are automatically downloaded from the IERS service when required. This happens when a time or coordinate transformation needs a value which is not already available via the download cache.

For details see the astropy.utils.iers sub-package documentation.

Other significant changes

Astropy now requires Numpy 1.7.0 or later.

Full change log

To see a detailed list of all changes in version v1.2, including changes in API, please see the Full Changelog.