def test_tuple_fit(): parfile = pint.config.examplefile("NGC6440E.par") timfile = pint.config.examplefile("NGC6440E.tim") m, t = get_model_and_toas(parfile, timfile) f = WLSFitter(t, m) # find the best-fit f.fit_toas() bestfit = f.resids.chi2 F0 = np.linspace( f.model.F0.quantity - 3 * f.model.F0.uncertainty, f.model.F0.quantity + 3 * f.model.F0.uncertainty, 25, ) F1 = np.ones(len(F0)) * f.model.F1.quantity parnames = ("F0", "F1") parvalues = list(zip(F0, F1)) chi2, extra = pint.gridutils.tuple_chisq(f, parnames, parvalues, extraparnames=("DM", )) f.model.F0.quantity = F0[3] f.model.F1.quantity = F1[3] f.model.F0.frozen = True f.model.F1.frozen = True f.fit_toas() assert np.isclose(chi2[3], f.resids.calc_chi2()) assert np.isclose(chi2.min(), bestfit) assert np.isclose(extra["DM"][3], f.model.DM.quantity)
def test_derived_tuple_fit(): parfile = pint.config.examplefile("NGC6440E.par") timfile = pint.config.examplefile("NGC6440E.tim") m, t = get_model_and_toas(parfile, timfile) f = WLSFitter(t, m) # find the best-fit f.fit_toas() bestfit = f.resids.chi2 F0 = np.linspace( f.model.F0.quantity - 3 * f.model.F0.uncertainty, f.model.F0.quantity + 3 * f.model.F0.uncertainty, 53, ) tau = np.linspace(8.1, 8.3, 53) * 100 * u.Myr parvalues = list(zip(F0, tau)) chi2_tau, params, _ = pint.gridutils.tuple_chisq_derived( f, ("F0", "F1"), (lambda x, y: x, lambda x, y: -x / 2 / y), parvalues, # ncpu=1, ) assert np.isclose(bestfit, chi2_tau.min(), atol=3)
def test_grid_extraparams_singleprocessor(): parfile = pint.config.examplefile("NGC6440E.par") timfile = pint.config.examplefile("NGC6440E.tim") m, t = get_model_and_toas(parfile, timfile) f = WLSFitter(t, m) f.fit_toas() bestfit = f.resids.chi2 F0 = np.linspace( f.model.F0.quantity - 3 * f.model.F0.uncertainty, f.model.F0.quantity + 3 * f.model.F0.uncertainty, 5, ) F1 = np.linspace( f.model.F1.quantity - 3 * f.model.F1.uncertainty, f.model.F1.quantity + 3 * f.model.F1.uncertainty, 7, ) chi2grid, extraparams = pint.gridutils.grid_chisq(f, ("F0", "F1"), (F0, F1), ("DM", ), ncpu=1) assert np.isclose(bestfit, chi2grid.min())
def test_grid_derived_extraparam_existingexecutor(): parfile = pint.config.examplefile("NGC6440E.par") timfile = pint.config.examplefile("NGC6440E.tim") m, t = get_model_and_toas(parfile, timfile) f = WLSFitter(t, m) f.fit_toas() bestfit = f.resids.chi2 F0 = np.linspace( f.model.F0.quantity - 3 * f.model.F0.uncertainty, f.model.F0.quantity + 3 * f.model.F0.uncertainty, 15, ) tau = np.linspace(8.1, 8.3, 13) * 100 * u.Myr with concurrent.futures.ProcessPoolExecutor(max_workers=ncpu) as executor: chi2grid_tau, params, extraparams = pint.gridutils.grid_chisq_derived( f, ("F0", "F1"), (lambda x, y: x, lambda x, y: -x / 2 / y), (F0, tau), ("DM", ), executor=executor, ) assert np.isclose(bestfit, chi2grid_tau.min(), atol=1)
def test_fake_DMfit(): """ fit only for DM with fake TOAs compare the variance of that result against the uncertainties """ parfile = pint.config.examplefile("NGC6440E.par") timfile = pint.config.examplefile("NGC6440E.tim") m, t = get_model_and_toas(parfile, timfile) # pick only data for a DM fit t = t[-8:] m.RAJ.frozen = True m.DECJ.frozen = True m.F0.frozen = True m.F1.frozen = True f = GLSFitter(t, m) f.fit_toas() N = 30 DMs = np.zeros(N) * u.pc / u.cm**3 for iter in range(N): t_fake = pint.simulation.make_fake_toas(t, m, add_noise=True) f_fake = GLSFitter(t_fake, m) f_fake.fit_toas() DMs[iter] = f_fake.model.DM.quantity.astype(np.float64) assert np.isclose(DMs.std(), f.model.DM.uncertainty, rtol=0.5) assert np.abs(DMs.mean() - f.model.DM.quantity) < 5 * f.model.DM.uncertainty
def test_grid_fitters_multiprocessor(fitter): parfile = pint.config.examplefile("NGC6440E.par") timfile = pint.config.examplefile("NGC6440E.tim") m, t = get_model_and_toas(parfile, timfile) f = fitter(t, m) f.fit_toas() bestfit = f.resids.chi2 F0 = np.linspace( f.model.F0.quantity - 3 * f.model.F0.uncertainty, f.model.F0.quantity + 3 * f.model.F0.uncertainty, 7, ) chi2grid, _ = pint.gridutils.grid_chisq(f, ("F0", ), (F0, ), printprogress=False, ncpu=ncpu) assert np.isclose(bestfit, chi2grid.min())
def test_fake_from_timfile(): m, t = get_model_and_toas( pint.config.examplefile("B1855+09_NANOGrav_9yv1.gls.par"), pint.config.examplefile("B1855+09_NANOGrav_9yv1.tim"), ) # refit the data to get rid of a trend f = GLSFitter(t, m) f.fit_toas() r = pint.residuals.Residuals(t, f.model) t_sim = pint.simulation.make_fake_toas(t, f.model, add_noise=True) r_sim = pint.residuals.Residuals(t_sim, f.model) # need a generous rtol because of the small statistics assert np.isclose(r.calc_time_resids().std(), r_sim.calc_time_resids().std(), rtol=2)
def test_grid_oneparam(): parfile = pint.config.examplefile("NGC6440E.par") timfile = pint.config.examplefile("NGC6440E.tim") m, t = get_model_and_toas(parfile, timfile) f = WLSFitter(t, m) f.fit_toas() bestfit = f.resids.chi2 F0 = np.linspace( f.model.F0.quantity - 3 * f.model.F0.uncertainty, f.model.F0.quantity + 3 * f.model.F0.uncertainty, 5, ) chi2grid, _ = pint.gridutils.grid_chisq(f, ("F0", ), (F0, ), ncpu=ncpu) assert np.isclose(bestfit, chi2grid.min())
def test_grid_3param_prefix_multiprocessor(): parfile = pint.config.examplefile("NGC6440E.par") timfile = pint.config.examplefile("NGC6440E.tim") m, t = get_model_and_toas(parfile, timfile) # add a F2 to the model modelcomponent = m.components["Spindown"] p = param.prefixParameter( parameter_type="float", name="F2", value=0, units=modelcomponent.F_unit(2), uncertainty=0, description=modelcomponent.F_description(2), longdouble=True, frozen=False, ) modelcomponent.add_param(p, setup=True) m.validate() f = WLSFitter(t, m) f.fit_toas() bestfit = f.resids.chi2 F0 = np.linspace( f.model.F0.quantity - 3 * f.model.F0.uncertainty, f.model.F0.quantity + 3 * f.model.F0.uncertainty, 3, ) F1 = np.linspace( f.model.F1.quantity - 3 * f.model.F1.uncertainty, f.model.F1.quantity + 3 * f.model.F1.uncertainty, 7, ) F2 = np.linspace( f.model.F2.quantity - 3 * f.model.F2.uncertainty, f.model.F2.quantity + 3 * f.model.F2.uncertainty, 5, ) chi2grid, _ = pint.gridutils.grid_chisq(f, ("F0", "F1", "F2"), (F0, F1, F2), ncpu=ncpu) assert np.isclose(bestfit, chi2grid.min())
def test_grid_derived_multiprocessor(): parfile = pint.config.examplefile("NGC6440E.par") timfile = pint.config.examplefile("NGC6440E.tim") m, t = get_model_and_toas(parfile, timfile) f = WLSFitter(t, m) f.fit_toas() bestfit = f.resids.chi2 F0 = np.linspace( f.model.F0.quantity - 3 * f.model.F0.uncertainty, f.model.F0.quantity + 3 * f.model.F0.uncertainty, 15, ) tau = np.linspace(8.1, 8.3, 13) * 100 * u.Myr chi2grid_tau, params, _ = pint.gridutils.grid_chisq_derived( f, ("F0", "F1"), (lambda x, y: x, lambda x, y: -x / 2 / y), (F0, tau), ncpu=ncpu) assert np.isclose(bestfit, chi2grid_tau.min(), atol=1)
def test_grid_oneparam_existingexecutor(): parfile = pint.config.examplefile("NGC6440E.par") timfile = pint.config.examplefile("NGC6440E.tim") m, t = get_model_and_toas(parfile, timfile) f = WLSFitter(t, m) f.fit_toas() bestfit = f.resids.chi2 F0 = np.linspace( f.model.F0.quantity - 5 * f.model.F0.uncertainty, f.model.F0.quantity + 5 * f.model.F0.uncertainty, 21, ) with concurrent.futures.ProcessPoolExecutor( max_workers=ncpu, ) as executor: chi2grid, _ = pint.gridutils.grid_chisq(f, ("F0", ), (F0, ), executor=executor) assert np.isclose(bestfit, chi2grid.min())
from pint.fitter import WLSFitter from pint.models.model_builder import get_model, get_model_and_toas from pint.toa import get_TOAs import matplotlib.pyplot as plt from astropy.visualization import quantity_support quantity_support() import scipy.stats # %matplotlib inline # %% # Load in a basic dataset parfile = pint.config.examplefile("NGC6440E.par") timfile = pint.config.examplefile("NGC6440E.tim") m, t = get_model_and_toas(parfile, timfile) f = WLSFitter(t, m) # find the best-fit f.fit_toas() bestfit = f.resids.chi2 # %% [markdown] # What are the free parameters? # %% f.model.free_params # %% [markdown] # So we were fitting for RA, Dec, $F0$, $F1$, and $DM$. #