Skip to content

v0.3.0: introduced proton particles distribution

Compare
Choose a tag to compare
@cosimoNigro cosimoNigro released this 17 Nov 14:44
· 73 commits to master since this release

v0.3.0 introduces proton particles distributions.

In the previous versions of the package, only an electron distribution was available, the latter had to be defined through a dictionary

# set the spectrum normalisation (total energy in electrons in this case)
spectrum_norm = 1e48 * u.Unit("erg")
# define the spectral function parametrisation through a dictionary
spectrum_dict = {
    "type": "PowerLaw",
    "parameters": {"p": 2.8, "gamma_min": 1e2, "gamma_max": 1e7},
}

# set the remaining quantities defining the blob
R_b = 1e16 * u.cm
B = 1 * u.G
z = Distance(1e27, unit=u.cm).z
delta_D = 10
Gamma = 10

blob = Blob(R_b, z, delta_D, Gamma, B, spectrum_norm, spectrum_dict)

This was not very handy: I have simplified - and broke - the previous blob API.
From version 0.3.0 this is how electron distribution are defined and passed to the blob

# electron distribution
n_e = BrokenPowerLaw(
    k=1e-8 * u.Unit("cm-3"),
    p1=1.9,
    p2=2.6,
    gamma_b=1e4,
    gamma_min=10,
    gamma_max=1e6,
    mass=m_e,
)

# set the quantities defining the blob
R_b = 1e16 * u.cm
z = Distance(1e27, unit=u.cm).z
delta_D = 10
Gamma = 10
B = 1 * u.G

blob = Blob(R_b, z, delta_D, Gamma, B, n_e=n_e)

The new way of defining particle distributions also allows to define proton distributions

n_p = PowerLaw(k=0.1 * u.Unit("cm-3"), p=2.3, gamma_min=10, gamma_max=1e6, mass=m_p)
blob = Blob(R_b, z, delta_D, Gamma, B, n_e=n_e, n_p=n_p)

The only difference between particle distributions is the mass argument.
This will eventually allow to describe other particle distributions.

To achieve this:

  • ElectronDistribution has been changed to ParticleDistribution. This is the base class from which all the different distributions (PowerLaw, BrokenPowerLaw etc..) inherit;

  • @dimaniad6 additionally implemented an InterpolatedDistribution to read an arbitrary input particle distribution (two arrays: one for of Lorentz factors and the other for densities);

  • the Blob class has been improved:

    • the different initialisation method available under the spectrum_norm_type argument of the Blob are now implemented in the base ParticleDistribution class. I.e. one can initialise from_total_density, from_total_energy_density, from_density_at_gamma_1, from_total_energy;
    • several quantities are now provided as properties and are evaluated on the fly from the base parameters ( $R_b$, $z$, $\delta_D$, $\Gamma$, $B$);
  • the other classes remain largely unchanged. They have just been modified internally to deal with the new definition of particle distributions;

  • note that the prefactor of the particle distribution has been renamed from k_e to k, as we are not describing exclusively electrons distributions now. This means that the corresponding parameter in the fit classes is log10_k instead of log10_k_e.