**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
python
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
python
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
python
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`.