Fitter

class peebee.optimize.Fitter

Bases: object

Object-oriented fitter for gravitational potential models.

Provides a clean interface for fitting gravitational models to pulsar acceleration data using various optimization algorithms.

Usage:

fitter = Fitter() fitter.set_model(model) fitter.set_data(l, b, d, alos, alos_err) fitter.configure_params({“NFW.m_vir”: (1e10, 1e14), “NFW.r_s”: (5, 50)}) result = fitter.optimize(method=’differential_evolution’)

Attributes Summary

best_fit_params

Best-fit parameters from most recent optimization.

Methods Summary

configure_params(param_bounds_dict)

Configure which parameters to optimize and their bounds.

evaluate_model([print_out])

Evaluate current model fit without optimization.

optimize([method, loss])

Run optimization to fit model parameters.

set_data(l, b, d, alos, alos_err[, ...])

Set the pulsar acceleration data.

set_model(model)

Set the gravitational potential model to fit.

set_noise_model(noise_model)

Set the noise model to use in the likelihood calculation.

set_optimization_options([sun_pos, ...])

Set additional optimization options.

Attributes Documentation

best_fit_params

Best-fit parameters from most recent optimization.

Methods Documentation

configure_params(param_bounds_dict)

Configure which parameters to optimize and their bounds.

Param_bounds_dict (dict):

Dictionary of parameter names and bounds. Example: {“NFW.m_vir”: (1e10, 1e14), “NFW.r_s”: (5, 50), “noise.sigma”: (0.1, 10.0)} Note: For log parameters, provide bounds in log space (e.g., m_vir: (10, 14) for log10(1e10) to log10(1e14))

Returns:

None

evaluate_model(print_out=True)

Evaluate current model fit without optimization.

Print_out (bool, optional):

Whether to print evaluation results. Default is True.

Returns:

evaluation_dict (dict) - Dictionary containing model evaluation metrics

optimize(method='differential_evolution', loss='least_squares', **kwargs)

Run optimization to fit model parameters.

Method (str, optional):

Optimization algorithm (‘differential_evolution’ or ‘gradient_descent’). Default is ‘differential_evolution’.

Loss (str, optional):

Loss function to use (‘least_squares’ or ‘huber’). Default is ‘least_squares’.

**kwargskwargs:

Additional arguments passed to scipy optimizer

Returns:

results (FitResults) - Container with optimization results and fit statistics

set_data(l, b, d, alos, alos_err, dist_err=None, frame='gal', sun_pos=None)

Set the pulsar acceleration data.

L (array_like):

Galactic longitude (deg)

B (array_like):

Galactic latitude (deg)

D (array_like):

Heliocentric distance (kpc)

Alos (array_like):

Observed line-of-sight acceleration (mm/s/yr)

Alos_err (array_like):

Uncertainty in line-of-sight acceleration (mm/s/yr)

Dist_err (array_like, optional):

Distance error for likelihood calculation

Frame (str, optional):

Coordinate frame (‘gal’, ‘cart’, ‘icrs’, ‘ecl’). Default is ‘gal’.

Sun_pos (tuple, optional):

Solar position (kpc). Uses default if not provided.

Returns:

None

set_model(model)

Set the gravitational potential model to fit.

Model (Model or CompositeModel):

The gravitational potential model to optimize

Returns:

None

set_noise_model(noise_model)

Set the noise model to use in the likelihood calculation.

Noise_model (NoiseModel or None):

NoiseModel instance for likelihood calculation

Returns:

None

set_optimization_options(sun_pos=None, negative_mass=False, scale=1.0)

Set additional optimization options.

Sun_pos (tuple, optional):

Solar position override (kpc)

Negative_mass (bool, optional):

Allow negative mass values. Default is False.

Scale (float, optional):

Scaling factor for optimization. Default is 1.0.

Returns:

None