Example #1
0
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
    }
Example #2
0
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)
    }
Example #3
0
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.)
    }
Example #4
0
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)
    }
Example #5
0
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)
    }
Example #6
0
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
Example #8
0
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)
Example #9
0
# ----------------- 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,
Example #10
0
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)
    }