def test_array(): sim.run() dataset = processor.apply_operations(sim.methods[0].simulation) data_sum = 0 for dv in dataset.y: data_sum += dv.components[0] params = sf.make_LMFIT_params(sim, processor) a = sf.LMFIT_min_function(params, sim, processor) np.testing.assert_almost_equal(-a, data_sum, decimal=8) dat = sf.add_csdm_dvs(dataset.real) fits = sf.bestfit(sim, processor) assert sf.add_csdm_dvs(fits[0]) == dat res = sf.residuals(sim, processor) assert res[0] == -dat
# setup of the fitting parameters. params = sf.make_LMFIT_params(sim, processor) params.pop("sys_0_abundance") print(params.pretty_print(columns=["value", "min", "max", "vary", "expr"])) # %% # **Solve the minimizer using LMFIT** minner = Minimizer(sf.LMFIT_min_function, params, fcn_args=(sim, processor, sigma)) result = minner.minimize() result # %% # The best fit solution # --------------------- best_fit = sf.bestfit(sim, processor)[0].real residuals = sf.residuals(sim, processor)[0].real # Plot the spectrum plt.figure(figsize=(4.25, 3.0)) ax = plt.subplot(projection="csdm") ax.plot(experiment, "k", linewidth=1, label="Experiment") ax.plot(best_fit, "r", alpha=0.75, linewidth=1, label="Best Fit") ax.plot(residuals, alpha=0.75, linewidth=1, label="Residuals") ax.set_xlim(100, -100) plt.grid() plt.legend() plt.tight_layout() plt.show()
params = sf.make_LMFIT_params(sim, processors, include={"rotor_frequency"}) print(params.pretty_print(columns=["value", "min", "max", "vary", "expr"])) # %% # **Solve the minimizer using LMFIT** minner = Minimizer(sf.LMFIT_min_function, params, fcn_args=(sim, processors, sigmas)) result = minner.minimize() result # %% # The best fit solution # --------------------- all_best_fit = sf.bestfit(sim, processors) # a list of best fit simulations all_residuals = sf.residuals(sim, processors) # a list of residuals # Plot the spectrum fig, ax = plt.subplots(1, 3, figsize=(12, 3), subplot_kw={"projection": "csdm"}) for i, proc in enumerate(processors): ax[i].plot(experiments[i], color="black", linewidth=0.5, label="Experiment") ax[i].plot(all_residuals[i].real, color="gray", linewidth=0.5, label="Residual")