class CosThermalElectronDensityFactory(FieldFactory): """ Field factory associated with the :py:class:`CosThermalElectronDensity` class """ # Class attributes FIELD_CLASS = CosThermalElectronDensity DEFAULT_PARAMETERS = { 'n0': 1 * u.cm**-3, 'a': 0.0 / u.kpc * u.rad, 'b': 0.0 / u.kpc * u.rad, 'c': 0.0 / u.kpc * u.rad, 'alpha': 0. * u.rad, 'beta': 0. * u.rad, 'gamma': 0. * u.rad } k = FlatPrior(xmin=0.01 * u.rad / u.kpc, xmax=100 * u.rad / u.kpc) d = FlatPrior(xmin=0 * u.rad / u.kpc, xmax=2 * np.pi * u.rad / u.kpc) PRIORS = { 'n0': FlatPrior(xmin=0 * u.cm**-3, xmax=10 * u.cm**-3), 'a': k, 'b': k, 'c': k, 'alpha': d, 'beta': d, 'gamma': d }
class NaiveGaussianMagneticFieldFactory(FieldFactory): """ Field factory associated with the :py:class:`NaiveGaussianMagneticField` class """ # Class attributes FIELD_CLASS = NaiveGaussianMagneticField DEFAULT_PARAMETERS = {'a0': 1 * u.microgauss, 'b0': 0.1 * u.microgauss} PRIORS = { 'a0': FlatPrior(xmin=20 * u.microgauss, xmax=20 * u.microgauss), 'b0': FlatPrior(xmin=20 * u.microgauss, xmax=20 * u.microgauss) }
class BregLSAFactory(FieldFactory): """ Field factory that produces the dummy field :py:class:`BregLSA` (see its docs for details). """ # Class attributes FIELD_CLASS = BregLSA DEFAULT_PARAMETERS = {'b0': 6.0, 'psi0': 27.0, 'psi1': 0.9, 'chi0': 25.0} PRIORS = { 'b0': FlatPrior(xmin=0., xmax=10.), 'psi0': FlatPrior(xmin=0., xmax=50.), 'psi1': FlatPrior(xmin=0., xmax=5.), 'chi0': FlatPrior(xmin=-25., xmax=50.) }
class CREAnaFactory(FieldFactory): """ Field factory that produces the dummy field :py:class:`CREAna` (see its docs for details). """ # Class attributes FIELD_CLASS = CREAna DEFAULT_PARAMETERS = { 'alpha': 3, 'beta': 0, 'theta': 0, 'r0': 5, 'z0': 1, 'E0': 20.6, 'j0': 0.0217 } PRIORS = { 'alpha': FlatPrior(xmin=2, xmax=4), 'beta': FlatPrior(xmin=-1, xmax=1), 'theta': FlatPrior(xmin=-1, xmax=1), 'r0': FlatPrior(xmin=0.1, xmax=10), 'z0': FlatPrior(xmin=0.1, xmax=3), 'E0': FlatPrior(xmin=10, xmax=30), 'j0': FlatPrior(xmin=0, xmax=0.1) }
class FieldFactoryTemplate(FieldFactory): """Example: field factory for YourFieldClass""" # Class attributes # Field class this factory uses FIELD_CLASS = MY_FIELD_CLASS # Default values are used for inactive parameters DEFAULT_PARAMETERS = {'Parameter_A': A_std_val, 'Parameter_B': B_std_val} # All parameters need a range and a prior PRIORS = { 'Parameter_A': FlatPrior(xmin=A_min, xmax=A_max), 'Parameter_B': GaussianPrior(mu=B_std_val, sigma=B_sig) }
class BrndESFactory(FieldFactory): """ Field factory that produces the dummy field :py:class:`BrndES` (see its docs for details). """ # Class attributes FIELD_CLASS = BrndES DEFAULT_PARAMETERS = { 'rms': 2, 'k0': 10, 'a0': 1.7, 'k1': 0.1, 'a1': 0, 'rho': 0.5, 'r0': 8, 'z0': 1 } PRIORS = { 'rms': FlatPrior(xmin=0, xmax=4), 'k0': FlatPrior(xmin=0.1, xmax=1), 'a0': FlatPrior(xmin=1, xmax=3), 'k1': FlatPrior(xmin=0.01, xmax=1), 'a1': FlatPrior(xmin=0, xmax=3), 'rho': FlatPrior(xmin=0, xmax=1), 'r0': FlatPrior(xmin=2, xmax=10), 'z0': FlatPrior(xmin=0.1, xmax=3) } def __init__(self, *args, grid_nx=None, grid_ny=None, grid_nz=None, **kwargs): super().__init__(*args, **kwargs, field_kwargs={ 'grid_nx': grid_nx, 'grid_ny': grid_ny, 'grid_nz': grid_nz })
L_shift = 70 * u.pc te_factory = FieldFactory( grid=grid, field_class=img_snrs.fields.SNRThermalElectrons, active_parameters=[], #'initial_electron_density'], default_parameters={ 'initial_electron_density': 0.01 * u.cm**-3, 'shell_V0': 0.0153 * u.pc / u.yr, 'shell_a': 1.3, 'shell_b': 10, 'elapsed_time': 1300 * u.yr, 'shell_radius': 35 * u.pc }, priors={ 'initial_electron_density': FlatPrior(1e-4, 10, u.cm**-3), 'shell_V0': FlatPrior(1e-3, 0.1, u.pc / u.yr), 'shell_a': FlatPrior(0.5, 2), 'shell_b': FlatPrior(1, 50), 'elapsed_time': FlatPrior(500, 3000, u.yr), 'shell_radius': FlatPrior(10, 60, u.pc) }) B_BFM_factory = FieldFactory( grid=grid, field_class=img_snrs.fields.SNR_BFM_MagneticField, active_parameters=['B', 'period', 'x_shift', 'y_shift'], default_parameters={ 'B': 1 * u.microgauss, 'alpha': 0 * u.rad, 'beta': 0 * u.rad
def tutorial_one(): # Package imports from imagine.fields import ( CosThermalElectronDensityFactory, NaiveGaussianMagneticFieldFactory, UniformGrid) from imagine.likelihoods import EnsembleLikelihood from imagine.observables import Covariances, Measurements, TabularDataset from imagine.pipelines import UltranestPipeline from imagine.priors import FlatPrior from imagine.simulators import TestSimulator # IMAGINE-PRISM imports from imagine_prism import PRISMPipeline # Obtain data data = get_mock_data() # Create dataset mock_dataset = TabularDataset(data, name='test', data_col='meas', err_col='err') # Create measurements and covariances objects mock_data = Measurements(mock_dataset) mock_cov = Covariances(mock_dataset) # Create grid grid = UniformGrid(box=[[0, 2*np.pi]*apu.kpc, [0, 0]*apu.kpc, [0, 0]*apu.kpc], resolution=[30, 1, 1]) # Create factory for electron density field ne_factory = CosThermalElectronDensityFactory(grid=grid) ne_factory.default_parameters = {'a': 1*apu.rad/apu.kpc, 'beta': np.pi/2*apu.rad, 'gamma': np.pi/2*apu.rad} # Create factory for magnetic field B_factory = NaiveGaussianMagneticFieldFactory(grid=grid) B_factory.active_parameters = ('a0', 'b0') B_factory.priors = {'a0': FlatPrior(*[-5, 5]*apu.microgauss), 'b0': FlatPrior(*[0, 10]*apu.microgauss)} # Combine factories together factories = [ne_factory, B_factory] # Create simulator simulator = TestSimulator(mock_data) # Create likelihood likelihood = EnsembleLikelihood(mock_data, mock_cov) # Create pipeline img_pipe = UltranestPipeline(simulator=simulator, factory_list=factories, likelihood=likelihood, ensemble_size=150) # Create PRISMPipeline object pipe = PRISMPipeline(img_pipe, root_dir='tests', working_dir='imagine_1') # Return pipe return(pipe)
# ----------------- Field factories -------------------------- te_factory = FieldFactory(grid=grid, field_class=img_snrs.fields.SNRThermalElectrons, active_parameters=(), default_parameters={ 'initial_electron_density': 0.01 * u.cm**-3, 'shell_V0': 0.0153 * u.pc / u.yr, 'shell_a': 1.3, 'shell_b': 10, 'elapsed_time': 1300 * u.yr, 'shell_radius': 35 * u.pc }, priors={ 'initial_electron_density': FlatPrior(1e-4, 10, u.cm**-3), 'shell_V0': FlatPrior(1e-3, 0.1, u.pc / u.yr), 'shell_a': FlatPrior(0.5, 2), 'shell_b': FlatPrior(1, 50), 'elapsed_time': FlatPrior(500, 3000, u.yr), 'shell_radius': FlatPrior(10, 200, u.pc) }) B_uniform_factory = FieldFactory( grid=grid, field_class=img_snrs.fields.SNRUniformMagneticField,
class BrndJF12Factory(FieldFactory): """ Field factory that produces the dummy field :py:class:`BrndJF12` (see its docs for details). """ FIELD_CLASS = BrndJF12 DEFAULT_PARAMETERS = { 'rms': 1.0, 'k0': 10.0, 'k1': 0.1, 'a0': 1.7, 'a1': 0.0, 'rho': 1.0, 'b0_1': 10.81, 'b0_2': 6.96, 'b0_3': 9.59, 'b0_4': 6.96, 'b0_5': 1.96, 'b0_6': 16.34, 'b0_7': 37.29, 'b0_8': 10.35, 'b0_int': 7.63, 'z0_spiral': 0.61, 'b0_halo': 4.68, 'r0_halo': 10.97, 'z0_halo': 2.84 } PRIORS = { 'rms': FlatPrior(xmin=0.5, xmax=2.5), 'k0': FlatPrior(xmin=9.0, xmax=11.0), 'k1': FlatPrior(xmin=0.0, xmax=2.0), 'a0': FlatPrior(xmin=1.0, xmax=3.0), 'a1': FlatPrior(xmin=0.0, xmax=1.0), 'rho': FlatPrior(xmin=0.0, xmax=2.0), 'b0_1': FlatPrior(xmin=10.0, xmax=12.0), 'b0_2': FlatPrior(xmin=6.0, xmax=8.0), 'b0_3': FlatPrior(xmin=9.0, xmax=11.0), 'b0_4': FlatPrior(xmin=6.0, xmax=8.0), 'b0_5': FlatPrior(xmin=1.0, xmax=3.0), 'b0_6': FlatPrior(xmin=15.0, xmax=17.0), 'b0_7': FlatPrior(xmin=36.0, xmax=38.0), 'b0_8': FlatPrior(xmin=10.0, xmax=12.0), 'b0_int': FlatPrior(xmin=7.0, xmax=9.0), 'z0_spiral': FlatPrior(xmin=0.0, xmax=2.0), 'b0_halo': FlatPrior(xmin=4.0, xmax=6.0), 'r0_halo': FlatPrior(xmin=10.0, xmax=12.0), 'z0_halo': FlatPrior(xmin=2.0, xmax=4.0) }