Center Manifold Maps

The center module provides Poincare maps for center manifolds of collinear libration points.

Main Classes

class hiten.system.maps.center.CenterManifoldMap[source]

Bases: _HitenBase

Poincare map for a center manifold.

Parameters:
  • center_manifold (CenterManifold) – The center manifold.

  • energy (float) – The energy of the center manifold.

center_manifold

The center manifold.

Type:

CenterManifold

energy

The energy of the center manifold.

Type:

float

property center_manifold: CenterManifold

The center manifold.

property energy: float

The energy of the center manifold.

property config

Get the map configuration.

property sections: list[str]

The sections of the center manifold.

get_section(section_coord)[source]

Get the section of the center manifold.

Parameters:

section_coord (str)

Return type:

_Section

has_section(section_coord)[source]

Check if the center manifold has a section.

Parameters:

section_coord (str)

Return type:

bool

clear_sections()[source]

Clear the sections of the center manifold.

Return type:

None

compute(section_coord='q3', overrides=None, **kwargs)[source]

Compute the Poincare map.

Parameters:
  • section_coord (str, optional) – Section coordinate identifier. If None, uses the default section.

  • overrides (dict[str, Any], optional) – Overrides for the Poincare map.

  • kwargs (dict[str, Any], optional) – Keyword arguments for the Poincare map.

Returns:

The results of the Poincare map.

Return type:

CenterManifoldMapResults

get_states(section_coord='q3', axes=None)[source]

Get the states of the Poincare map.

Parameters:
  • section_coord (str, optional) – Section coordinate identifier. If None, uses the default section.

  • axes (tuple[str, str], optional) – Axes to project onto. If None, uses the section plane coordinates.

Returns:

Array of 4D states in the section plane.

Return type:

np.ndarray, shape (n, 4)

get_points(section_coord=None, axes=None)[source]

Get points from the Poincare map.

Parameters:
  • section_coord (str, optional) – Section coordinate identifier. If None, uses the default section.

  • axes (tuple[str, str], optional) – Axes to project onto. If None, uses the section plane coordinates.

Returns:

Array of 2D points in the section plane.

Return type:

ndarray, shape (n, 2)

to_synodic(pt, *, section_coord=None, tol=1e-12)[source]

Convert a plane point to initial conditions for integration.

Parameters:
  • pt (ndarray, shape (2,)) – Point on the Poincare section plane.

  • section_coord (str, optional) – Section coordinate identifier. If None, uses the default section coordinate from configuration.

  • tol (float, optional) – Tolerance for root finding. Default is 1e-12.

Returns:

Initial conditions [q1, q2, q3, p1, p2, p3] for integration.

Return type:

ndarray, shape (6,)

plot(section_coord=None, *, dark_mode=True, save=False, filepath='poincare_map.svg', axes=None, **kwargs)[source]

Plot the Poincare map.

Parameters:
  • section_coord (str, optional) – Section coordinate identifier. If None, uses the default section.

  • dark_mode (bool, default=True) – If True, use dark mode styling.

  • save (bool, default=False) – If True, save the plot to file.

  • filepath (str, default='poincare_map.svg') – File path for saving the plot.

  • axes (Sequence[str], optional) – Axes to plot. If None, uses the section plane coordinates.

  • **kwargs – Additional keyword arguments passed to the plotting function.

Returns:

The generated plot figure.

Return type:

matplotlib.figure.Figure

plot_interactive(*, steps=1000, method='adaptive', order=8, frame='rotating', dark_mode=True, axes=None, section_coord=None)[source]

Create an interactive plot of the Poincare map.

Parameters:
  • steps (int, default=1000) – Number of integration steps for trajectory propagation.

  • method ({'fixed', 'symplectic', 'adaptive'}, default='adaptive') – Integration method for trajectory propagation.

  • order (int, default=6) – Integration order for Runge-Kutta methods.

  • frame (str, default='rotating') – Reference frame for trajectory visualization.

  • dark_mode (bool, default=True) – If True, use dark mode styling.

  • axes (Sequence[str], optional) – Axes to plot. If None, uses the section plane coordinates.

  • section_coord (str, optional) – Section coordinate identifier. If None, uses the default section.

Returns:

A tuple containing: - The interactive plot figure - A dictionary with key ‘orbit’ that will contain the latest

computed orbit after clicking on a point (initially None)

Return type:

tuple[matplotlib.figure.Figure, dict]

Notes

Clicking on points in the plot will propagate trajectories from those points and display the resulting orbits. The latest orbit can be accessed via the returned dictionary.

Examples

>>> fig, orbit_container = pm.plot_interactive()
>>> # After clicking on a point in the plot
>>> latest_orbit = orbit_container['orbit']
__setstate__(state)[source]

Restore the CenterManifoldMap instance after unpickling.

The heavy, non-serialisable dynamical system is reconstructed lazily using the stored value of center_manifold and energy.

Parameters:

state (dict) – Dictionary containing the serialized state of the CenterManifoldMap.

load_inplace(filepath, **kwargs)[source]

Load orbit data from a file in place.

Parameters:

filepath (str)

Return type:

None

classmethod load(filepath, **kwargs)[source]

Load a CenterManifoldMap from a file (new instance).

Parameters:

filepath (str | Path)

Return type:

CenterManifoldMap