GR
grburgess/pynchrotron
Implements synchrotron emission from cooling electrons
pynchrotron
Implements synchrotron emission from cooling electrons. This is the model used in Burgess et al (2019). Please cite if you find this code useful for your research.
- This code gets rid of the need for GSL which was originally relied on for a quick computation of the of the synchrotron kernel which is an integral over a Bessel function.
- This code has been ported from GSL and written directly in python as well as accelerated with numba
- An astromodels function is also supplied for direct use in 3ML.
Usage
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
%matplotlib inline
import pynchrotron/Users/jburgess/.environs/pynchro/lib/python3.7/site-packages/astromodels/core/parameter.py:555: UserWarning: We have set the min_value of K to 1e-99 because there was a postive transform
warnings.warn('We have set the min_value of %s to 1e-99 because there was a postive transform' % self.path)
/Users/jburgess/.environs/pynchro/lib/python3.7/site-packages/astromodels/core/parameter.py:555: UserWarning: We have set the min_value of xc to 1e-99 because there was a postive transform
warnings.warn('We have set the min_value of %s to 1e-99 because there was a postive transform' % self.path)
Create an astromodels model
model = pynchrotron.SynchrotronNumerical()
model
- description: Synchrotron emission from cooling electrions
- formula: $ $
- parameters:
- K:
- value: 1.0
- desc: normalization
- min_value: 0.0
- max_value: None
- unit:
- is_normalization: False
- delta: 0.1
- free: True
- B:
- value: 100.0
- desc: energy scaling
- min_value: 0.01
- max_value: None
- unit:
- is_normalization: False
- delta: 10.0
- free: True
- index:
- value: 3.5
- desc: spectral index of electrons
- min_value: 2.0
- max_value: 6.0
- unit:
- is_normalization: False
- delta: 0.35000000000000003
- free: True
- gamma_min:
- value: 500000.0
- desc: minimum electron lorentz factor
- min_value: 1.0
- max_value: None
- unit:
- is_normalization: False
- delta: 50000.0
- free: False
- gamma_cool:
- value: 90000000.0
- desc: cooling time of electrons
- min_value: None
- max_value: None
- unit:
- is_normalization: False
- delta: 9000000.0
- free: True
- gamma_max:
- value: 100000000.0
- desc: minimum electron lorentz factor
- min_value: 1000000.0
- max_value: None
- unit:
- is_normalization: False
- delta: 10000000.0
- free: False
- bulk_gamma:
- value: 1.0
- desc: bulk Lorentz factor
- min_value: 1.0
- max_value: None
- unit:
- is_normalization: False
- delta: 0.1
- free: False
- K:
Plot the model
fig, ax = plt.subplots()
ene = np.logspace(1,6,400)
ax.loglog(ene, ene**2 * model(ene))
ax.set_xlabel('energy')
ax.set_ylabel(r'$\nu F_{\nu}$')Text(0, 0.5, '$\\nu F_{\\nu}$')
fig, ax = plt.subplots()
gamma_min = 500000.
gamma_cool = np.linspace(.1 * gamma_min, 5* gamma_min, 10)
ene = np.logspace(-1,6,400)
for gc in gamma_cool:
model.gamma_cool = gc
model.gamma_min = gamma_min
ax.loglog(ene, ene**2 * model(ene))
ax.set_xlabel('energy')
ax.set_ylabel(r'$\nu F_{\nu}$')Text(0, 0.5, '$\\nu F_{\\nu}$')
On this page
Languages
Python100.0%
Latest Release
v1.0November 16, 2019GNU General Public License v3.0
Created November 16, 2019
Updated June 30, 2025


