- Added a
.replicate()
method to Potential classes to enable copying potential objects but modifying some parameter values. - Added a new potential class
MN3ExponentialDiskPotential
based on Smith et al. (2015): an approximation of the potential generated by a double exponential disk using a sum of three Miyamoto-Nagai disks. - The
Orbit.estimate_period()
method now returns period estimates in all phase-space components instead of just the radial period.
- Fixed a bug where the
NFWPotential
energy was nan when evaluating at the origin, and added tests for all potentials to check for a finite value of the potential at the origin (when expected). - Fixed a bug in
NFWPotential.from_M200_c()
where the incorrect scale radius was computed (Cython does not always use Python 3 division rules for dividing integers!). - Fixed a bug in the (C-level/internal) estimation of the 2nd derivative of the potential, used to generate mock streams, that affects non-conservative force fields.
- The
Orbit.estimate_period()
method now returns period estimates in all phase-space components instead of just the radial period.
- Implemented a basic progress bar for integrating orbits and mock streams. Pass
progress=True
withIntegrator_kwargs
when calling.integrate_orbit()
, or passprogress=True
toMockStreamGenerator.run()
. - Added a new symplectic integrator: The Ruth 4th-order integrator, implemented
with the class
Ruth4Integrator
. - Added a
Orbit.animate()
method to makematplotlib
animations of orbits. - Modified
Orbit._max_helper()
to use a parabola instead of interpolation - Added functionality to transform from action-angle coordinates to Cartesian
position velocity coordinates in the Isochrone potential:
gala.dynamics.actionangle.isochrone_aa_to_xv()
. - Added a new method on
DirectNBody
to enable computing the instantaneous, mutual, N-body acceleration vectorsDirectNBody.acceleration()
.
- Fixed
find_actions()
to accept anOrbit
instance with multiple orbits. - Fixed a bug that appeared when trying to release all mock stream particles at the same timestep (e.g., pericenter).
- Fixed a bug where time arrays returned from
parse_time_specification
could come back with a non-float64 dtype. - Fixed a bug with
DirectNBody
with composite potentials where only the first potential component would move as a body / particle. - Fixed a bug with the Python implementation of Leapfrog integration
LeapfrogIntegrator
that led to incorrect orbits for non-conservative systems that were integrated backwards (i.e. withdt<<0
). - Fixed a bug with the
FlattenedNFW
potential class in which the energy and gradient functions were not using the inputted flattening (c
value) and were instead defaulting to the spherical NFW model. - Enabled pickling
Frame
instances and therefore nowHamiltonian
instances. - Fixed a bug with
autolim=True
during Orbit plotting where the axes limits were only dependent on the most recent Orbit rather than all that were present on the axis
- Renamed
gala.dynamics.actionangle.isochrone_to_aa()
togala.dynamics.actionangle.isochrone_xv_to_aa()
- Renamed
gala.dynamics.actionangle.find_actions()
togala.dynamics.actionangle.find_actions_o2gf()
- Fixed a RST bug that caused the README to fail to render.
UnitSystem
objects can now be created with custom units passed in as AstropyQuantity
objects.- Added functionality to convert Gala potential objects to Galpy potential objects, or to create Gala potential objects from a pre-existing Galpy potential.
- Added a
plot_3d()
method forOrbit
objects to make 3D plots of the orbital trajectories.
- Fixed a bug when calling
orbit.norbits
when the representation is not cartesian. - Fixed a bug with
GreatCircleICRSFrame.from_endpoints()
that caused an error when the input coordinates had associated velocity data. - Fixed a bug with the
JaffePotential
density evaluation, which was too low by a factor of two. - Implemented a density function for
LogarithmicPotential
, which was missing previously. - The analytic action-angle and
find_actions()
utilities now correctly return frequencies with angular frequency units rather than frequency.
- Removed the deprecated
gala.coordinates.get_galactocentric2019()
function.
- Added a new
.to_sympy()
classmethod for thePotential
classes to return a sympy expression and variables. - Added a method,
.to_galpy_orbit()
, to convert GalaOrbit
instances to GalpyOrbit
objects. - The
NFWPotential
can now be instantiated via a new classmethod:NFWPotential.from_M200_c()
, which accepts a virial mass and a concentration. - Added a fast way of computing the Staeckel focal length,
Delta
, using Gala potential classes,gala.dynamics.get_staeckel_fudge_delta
- Fixed a bug with
Potential
classes.replace_units()
so that classes with dimensionless unit systems cannot be replaced with physical unit systems, and vice versa. - Implemented Hessian functions for most potentials.
- Fixed
.to_latex()
to properly return a latex representation of the potential. This uses the new.to_sympy()
method under the hood. - Potential classes now validate that input positions have dimensionality that matches what is expected for each potential.
- Changed the way new
Potential
classes are defined: they now rely on defining class-levelPotentialParameter
objects, which reduces a significant amount of boilerplate code in the built-in potentials.
- Gala now builds on Windows!
- Added a coordinate frame for the Pal 13 stream,
Pal13Shipp20
.
- Fixed a bug with the mock stream machinery in which the stream would not
integrate for the specified number of timesteps if an array of
n_particles
was passed in with 0's near the end of the array.
- Potential objects now support replacing the unit system with the
.replace_units()
method, or by updating the.units
attribute on an existing instance. - Added a
DirectNBody
class that supports direct N-body orbit integration in (optional) external background potentials. - Added a coordinate frame for the Jhelum stream,
JhelumBonaca19
. - Added a function for retrieving a more modern Galactocentric reference frame,
gala.coordinates.get_galactocentric2019()
. - Added a classmethod to allow initializing a
GreatCircleICRSFrame
from a rotation matrix that specifies the transformation fromICRS
to the great circle frame.
- Fixed an issue that led to incorrect
GreatCircleICRSFrame
transformations when nora0
was provided. - Fixed a bug in the
OrphanKoposov19
transformation.
- Overhauled the mock stellar stream generation methodology to allow for more
general stream generation. See
MockStreamGenerator
and the stream distribution function classes, e.g.,FardalStreamDF
. - Removed deprecated
CartesianPhaseSpacePosition
class. - Removed long deprecated
Quaternion
class.
- Added a new coordinate frame for great circle coordinate systems defined by a pole. This frame can be created with a pole and origin, a pole and longitude zero point, by two points along a great circle, or by specifying the cartesian basis vectors of the new frame.
- Added a function to transform a proper motion covariance matrix to a new coordinate frame.
- Added support for compiling Gala with or without the GNU Scientific Library (GSL), which is needed for the new potential classes indicated below.
- Added a new
PowerLawCutoffPotential
class for a power-law density distribution with an exponential cutoff (requires GSL). - Added an implementation of the
MWPotential2014
fromgalpy
(calledBovyMWPotential2014
ingala
) (requires GSL). - Added an implementation of the Self-Consistent Field (SCF) basis function expansion method for representing potential-density pairs (requires GSL).
- Most Potential classes now support rotations and origin shifts through the
R
andorigin
arguments. - Added a
progress
argument to the Python integrators to display a progress bar when stepping the integrators. - When generating mock stellar streams and storing snapshots (rather than just
the final phase-space positions of the particles) now supports specifying the
snapshot frequency with the
output_every
argument.
- Stream frames now properly wrap the longitude (
phi1
) components to the range (-180, 180) deg.
- Stream classes have been renamed to reflect the author that defined them.
- Proper motion and coordinate velocity transformations have now been removed in favor of the implementations in Astropy.
- Added a
.data
attribute toPhaseSpacePosition
objects that returns aRepresentation
orNDRepresentation
instance with velocity data (differentials) attached.
- Added a
NullPotential
class that has 0 mass and serves as a placeholder. - Added a new
zmax()
method on theOrbit
class to compute the maximum z heights and times, or the mean maximum z height. Similar toapocenter()
andpericenter()
. - Added a new generator method on the
Orbit
class for easy iteration over orbits.
Orbit.norbits
now works...oops.apocenter()
andpericenter()
now work when more than one orbit is stored in anOrbit
class.
- Added a new coordinate frame aligned with the Palomar 5 stream.
- Added a function
gala.dynamics.combine
to combinePhaseSpacePosition
orOrbit
objects.
- Added a density function for the Kepler potential.
- Added a density function for the Long & Murali bar potential
- Added JOSS paper.
- Cleaned up some tests and documentation to use the
Hamiltonian
object.
- Array parameters are now numpy.ravel'd before being passed to the
CPotentialWrapper
class methods. - Added attribution to Bovy 2015 for disk potential in MilkyWayPotential
- Added a new potential class for the Satoh density (Satoh 1980).
- Added support for Leapfrog integration when generating mock stellar streams.
- Added new colormaps and defaults for the matplotlib style.
- Added support for non-inertial reference frames and implemented a constant rotating reference frame.
- Added a new class -
Hamiltonian
- for storing potentials with reference frames. This should be used for easy orbit integration instead of the potential classes. - Added a new argument to the mock stream generation functions t output orbits of all of the mock stream star particles to an HDF5 file.
- Cleaned up and simplified the process of subclassing a C-implemented gravitational potential.
- Gravitational potential class instances can now be composed by just adding the instances.
- Added a
MilkyWayPotential
class.
CartesianPhaseSpacePosition
andCartesianOrbit
are deprecated. UsePhaseSpacePosition
andOrbit
with a Cartesian representation instead.- Overhauled the storage of position and velocity information on
PhaseSpacePosition
andOrbit
classes. This uses new features in Astropy 2.0 that allow attaching "differential" classes to representation classes for storing velocity information..pos
and.vel
no longer point to arrays of Cartesian coordinates, but now instead point to astropy.coordinates representation and differential objects, respectively.
- Removed debug statement.
- Added 'Why' page to documentation.
- Initial release.