From a2b61f982ed52465a9c76fd17a8f288c3d1253a7 Mon Sep 17 00:00:00 2001 From: Aaron LI Date: Sat, 29 Jul 2017 23:52:29 +0800 Subject: clusters/halo.py: Add method "calc_emissivity()" This method invokes ``SynchrotronEmission`` to calculate the synchrotron emissivity at specified frequencies for the derived electron spectrum. Signed-off-by: Aaron LI --- fg21sim/extragalactic/clusters/halo.py | 43 +++++++++++++++++++++++++++++----- 1 file changed, 37 insertions(+), 6 deletions(-) (limited to 'fg21sim/extragalactic/clusters/halo.py') diff --git a/fg21sim/extragalactic/clusters/halo.py b/fg21sim/extragalactic/clusters/halo.py index d7b3ec4..2cc391f 100644 --- a/fg21sim/extragalactic/clusters/halo.py +++ b/fg21sim/extragalactic/clusters/halo.py @@ -44,11 +44,11 @@ import numpy as np from . import helper from .solver import FokkerPlanckSolver +from .emission import SynchrotronEmission from ...configs import CONFIGS from ...utils import COSMO from ...utils.units import (Units as AU, - UnitConversions as AUC, - Constants as AC) + UnitConversions as AUC) logger = logging.getLogger(__name__) @@ -72,10 +72,6 @@ class RadioHalo: 4. Determine the initial electron density TODO... - after that, calculate the electron acceleration and time evolution - by solving the Fokker-Planck equation; and finally derive the radio - emission from the electron spectra. - Parameters ---------- M_obs : float @@ -223,6 +219,41 @@ class RadioHalo: tstop=tstop) return self.electron_spec + def calc_emissivity(self, frequencies, n_e=None, gamma=None): + """ + Calculate the synchrotron emissivity for the derived electron + spectrum. + + Parameters + ---------- + frequencies : float, or 1D `~numpy.ndarray` + The frequencies where to calculate the synchrotron emissivity. + Unit: [MHz] + n_e : 1D `~numpy.ndarray`, optional + The electron spectrum (w.r.t. Lorentz factors γ). + If not provided, then used the cached ``self.electron_spec`` + solved above. + Unit: [cm^-3] + gamma : 1D `~numpy.ndarray`, optional + The Lorentz factors γ of the electron spectrum. + If not provided, then used ``self.gamma``. + + Returns + ------- + emissivity : float, or 1D `~numpy.ndarray` + The calculated synchrotron emissivity at each specified + frequency. + Unit: [erg/s/cm^3/Hz] + """ + if n_e is None: + n_e = self.electron_spec + if gamma is None: + gamma = self.gamma + syncem = SynchrotronEmission(gamma=gamma, n_e=n_e, + B=self.magnetic_field) + emissivity = syncem.emissivity(frequencies) + return emissivity + def fp_injection(self, gamma, t=None): """ Electron injection (rate) term for the Fokker-Planck equation. -- cgit v1.2.2