def test_synchrotron(self): import naima particle_distribution = naima.models.LogParabola( amplitude=2e33 / u.eV, e_0=10 * u.TeV, alpha=1.3, beta=0.5 ) radiative_model = naima.radiative.Synchrotron(particle_distribution, B=2 * u.G) model = NaimaSpectralModel(radiative_model) for p in model.parameters: assert p._type == "spectral" val_at_2TeV = 1.0565840392550432e-24 * u.Unit("cm-2 s-1 TeV-1") integral_1_10TeV = 4.449186e-13 * u.Unit("cm-2 s-1") eflux_1_10TeV = 4.594121e-13 * u.Unit("TeV cm-2 s-1") value = model(self.energy) assert_quantity_allclose(value, val_at_2TeV) assert_quantity_allclose( model.integral(energy_min=self.energy_min, energy_max=self.energy_max), integral_1_10TeV, rtol=1e-5, ) assert_quantity_allclose( model.energy_flux(energy_min=self.energy_min, energy_max=self.energy_max), eflux_1_10TeV, rtol=1e-5, ) val = model(self.e_array) assert val.shape == self.e_array.shape model.B.value = 3 # update B val_at_2TeV = 5.1985064062296e-16 * u.Unit("cm-2 s-1 TeV-1") value = model(self.energy) assert_quantity_allclose(value, val_at_2TeV)
def test_pion_decay(self): import naima particle_distribution = naima.models.PowerLaw( amplitude=2e33 / u.eV, e_0=10 * u.TeV, alpha=2.5 ) radiative_model = naima.radiative.PionDecay( particle_distribution, nh=1 * u.cm ** -3 ) model = NaimaSpectralModel(radiative_model) for p in model.parameters: assert p._type == "spectral" val_at_2TeV = 9.725347355450884e-14 * u.Unit("cm-2 s-1 TeV-1") integral_1_10TeV = 3.530537143620737e-13 * u.Unit("cm-2 s-1") eflux_1_10TeV = 7.643559573105779e-13 * u.Unit("TeV cm-2 s-1") value = model(self.energy) assert_quantity_allclose(value, val_at_2TeV) assert_quantity_allclose( model.integral(energy_min=self.energy_min, energy_max=self.energy_max), integral_1_10TeV, ) assert_quantity_allclose( model.energy_flux(energy_min=self.energy_min, energy_max=self.energy_max), eflux_1_10TeV, ) val = model(self.e_array) assert val.shape == self.e_array.shape model.amplitude.error = 0.1 * model.amplitude.value out = model.evaluate_error(1 * u.TeV) assert_allclose(out.data, [5.266068e-13, 5.266068e-14], rtol=1e-3)
def test_ic(self): import naima particle_distribution = naima.models.ExponentialCutoffBrokenPowerLaw( amplitude=2e33 / u.eV, e_0=10 * u.TeV, alpha_1=2.5, alpha_2=2.7, e_break=900 * u.GeV, e_cutoff=10 * u.TeV, ) radiative_model = naima.radiative.InverseCompton( particle_distribution, seed_photon_fields=["CMB"] ) model = NaimaSpectralModel(radiative_model) val_at_2TeV = 4.347836316893546e-12 * u.Unit("cm-2 s-1 TeV-1") integral_1_10TeV = 1.595813e-11 * u.Unit("cm-2 s-1") eflux_1_10TeV = 2.851283e-11 * u.Unit("TeV cm-2 s-1") value = model(self.energy) assert_quantity_allclose(value, val_at_2TeV) assert_quantity_allclose( model.integral(emin=self.emin, emax=self.emax), integral_1_10TeV, rtol=1e-5 ) assert_quantity_allclose( model.energy_flux(emin=self.emin, emax=self.emax), eflux_1_10TeV, rtol=1e-5 ) val = model(self.e_array) assert val.shape == self.e_array.shape
def test_pion_decay(self): import naima particle_distribution = naima.models.PowerLaw(amplitude=2e33 / u.eV, e_0=10 * u.TeV, alpha=2.5) radiative_model = naima.radiative.PionDecay(particle_distribution, nh=1 * u.cm**-3) model = NaimaSpectralModel(radiative_model) val_at_2TeV = 9.725347355450884e-14 * u.Unit("cm-2 s-1 TeV-1") integral_1_10TeV = 3.530537143620737e-13 * u.Unit("cm-2 s-1") eflux_1_10TeV = 7.643559573105779e-13 * u.Unit("TeV cm-2 s-1") value = model(self.energy) assert_quantity_allclose(value, val_at_2TeV) assert_quantity_allclose( model.integral(emin=self.emin, emax=self.emax), integral_1_10TeV) assert_quantity_allclose( model.energy_flux(emin=self.emin, emax=self.emax), eflux_1_10TeV) val = model(self.e_array) assert val.shape == self.e_array.shape
def test_synchrotron(self): import naima particle_distribution = naima.models.LogParabola(amplitude=2e33 / u.eV, e_0=10 * u.TeV, alpha=1.3, beta=0.5) radiative_model = naima.radiative.Synchrotron(particle_distribution, B=2 * u.G) model = NaimaSpectralModel(radiative_model) val_at_2TeV = 1.0565840392550432e-24 * u.Unit("cm-2 s-1 TeV-1") integral_1_10TeV = 4.4491861907713736e-13 * u.Unit("cm-2 s-1") eflux_1_10TeV = 4.594120986691428e-13 * u.Unit("TeV cm-2 s-1") value = model(self.energy) assert_quantity_allclose(value, val_at_2TeV) assert_quantity_allclose( model.integral(emin=self.emin, emax=self.emax), integral_1_10TeV) assert_quantity_allclose( model.energy_flux(emin=self.emin, emax=self.emax), eflux_1_10TeV) val = model(self.e_array) assert val.shape == self.e_array.shape