Exemplo n.º 1
0
def _particle_model(obj, X,Y,M, src, H0inv):

    #grid_mass = obj.basis.grid_mass(X,Y,M, H0inv)
    ps = obj.basis.solution_from_data(X,Y,M, src=src, H0inv=H0inv)
    m = {'sol':      None,
         'obj,data': [[obj,ps]],
         'obj,sol':  None,
         'tagged':   False}
    for od in m['obj,data']:
        default_post_process(od)
    return m

    return ps
    #print ps.shape
    return package_solution(ps, [obj])
Exemplo n.º 2
0
def _particle_model(obj, X, Y, M, src, H0inv):

    #grid_mass = obj.basis.grid_mass(X,Y,M, H0inv)
    ps = obj.basis.solution_from_data(X, Y, M, src=src, H0inv=H0inv)
    m = {
        'sol': None,
        'obj,data': [[obj, ps]],
        'obj,sol': None,
        'tagged': False
    }
    for od in m['obj,data']:
        default_post_process(od)
    return m

    return ps
    #print ps.shape
    return package_solution(ps, [obj])
Exemplo n.º 3
0
def make_stellar_model(env):
    sm = []
    for o in env.objects:
        if not hasattr(o, 'stellar_mass'): 
            l = o.basis.offs_pix[1] - o.basis.offs_pix[0]
            s = o.basis.packaged_solution_from_array(zeros(l), [[0,0] for _ in o.sources], 1)
        else:
            s = o.basis.packaged_solution_from_array(o.stellar_mass, [[0,0] for _ in o.sources], convert('nu to H0^-1 in Gyr', env.nu[-1]))
        sm.append((o,s))

    m = {'sol':      None,
         'obj,data': sm,
         'obj,sol':  None,
         'tagged':   False}
    for od in m['obj,data']:
        default_post_process(od)
    env.stellar_models = m
Exemplo n.º 4
0
def make_stellar_model(env):
    sm = []
    for o in env.objects:
        if not hasattr(o, 'stellar_mass'):
            l = o.basis.offs_pix[1] - o.basis.offs_pix[0]
            s = o.basis.packaged_solution_from_array(zeros(l),
                                                     [[0, 0]
                                                      for _ in o.sources], 1)
        else:
            s = o.basis.packaged_solution_from_array(
                o.stellar_mass, [[0, 0] for _ in o.sources],
                convert('nu to H0^-1 in Gyr', env.nu[-1]))
        sm.append((o, s))

    m = {'sol': None, 'obj,data': sm, 'obj,sol': None, 'tagged': False}
    for od in m['obj,data']:
        default_post_process(od)
    env.stellar_models = m
Exemplo n.º 5
0
def make_ensemble_average(env):
    #   Log( "s*********" )
    #   for m in env.models:
    #       Log( m['sol'] )
    #   Log( "s*********" )

    M = [m['sol'] for m in env.models]
    sol = mean(M, axis=0) if M else None
    #sol = sol[1:]
    objs = env.objects
    #env.ensemble_average = package_solution(sol, objs)
    #env.ensemble_average = {
    #    'sol':  sol,
    #    'obj,data': zip(objs, map(lambda o: o.basis.solution_to_dict(sol), objs)),
    #    'tagged':  False
    #}

    env.ensemble_average = package_solution(sol, objs)
    for od in env.ensemble_average['obj,data']:
        if od[1]:
            default_post_process(od)
Exemplo n.º 6
0
def make_ensemble_average(env):
#   Log( "s*********" )
#   for m in env.models:
#       Log( m['sol'] )
#   Log( "s*********" )

    M = [m['sol'] for m in env.models]
    sol = mean(M, axis=0) if M else None
    #sol = sol[1:]
    objs = env.objects
    #env.ensemble_average = package_solution(sol, objs)
    #env.ensemble_average = {
    #    'sol':  sol,
    #    'obj,data': zip(objs, map(lambda o: o.basis.solution_to_dict(sol), objs)),
    #    'tagged':  False
    #}

    env.ensemble_average = package_solution(sol, objs)
    for od in env.ensemble_average['obj,data']:
        if od[1]:
            default_post_process(od)
Exemplo n.º 7
0
def generate_models(env, objs, n, *args, **kwargs):

    #if n <= 0: return

    mode = kwargs.get('mode', 'default')

    if mode == 'particles':
        assert n == 1, 'Can only generate a single model in particles mode.'
        assert len(objs) == 1, 'Can only model a single object from particles.'
        data = kwargs.get('data', None)
        assert data is not None, 'data keyword must be given with model parameters.'
        objs[0].basis.array_offset = 1
        ps = _particle_model(objs[0], *data)

        if opts.get('solver', None):
            init_model_generator(env, n)
            check_model(objs, ps)

        yield ps

    elif mode == 'grid':
        assert n == 1, 'Can only generate a single model in grid mode.'
        assert len(objs) == 1, 'Can only model a single object from a grid.'
        data = kwargs.get('data', None)
        assert data is not None, 'data keyword must be given with model parameters.'
        objs[0].basis.array_offset = 1
        ps = _grid_model(objs[0], *data)

        if opts.get('solver', None):
            init_model_generator(env, n)
            check_model(objs, ps)

        yield ps

    elif mode == 'isothermal':
        assert n == 1, 'Can only generate a single model in isothermal mode.'
        assert len(
            objs) == 1, 'Can only model a single object from isothermal.'
        data = kwargs.get('data', None)
        assert data is not None, 'data keyword must be given with model parameters.'
        objs[0].basis.array_offset = 1

        ps = objs[0].basis.solution_isothermal(*data)
        m = {
            'sol': None,
            'obj,data': [[objs[0], ps]],
            'obj,sol': None,
            'tagged': False
        }
        for od in m['obj,data']:
            default_post_process(od)
        yield m

    elif mode != 'default':
        assert False, 'Unsupported model mode "%s"' % mode
    else:

        if opts.get('solver', None):
            init_model_generator(env, n)
            mg = env.model_gen
            mg.start()
            try:
                for sol in mg.next(n):
                    ps = package_solution(sol, objs)
                    check_model(objs, ps)
                    yield ps
            except GlassSolverError as e:
                Log('!' * 80)
                Log('Unable to generate models:', str(e))
                Log('!' * 80)
Exemplo n.º 8
0
def generate_models(env, objs, n, *args, **kwargs):

    #if n <= 0: return

    mode = kwargs.get('mode', 'default')

    if mode == 'particles':
        assert n==1, 'Can only generate a single model in particles mode.'
        assert len(objs) == 1, 'Can only model a single object from particles.'
        data = kwargs.get('data', None)
        assert data is not None, 'data keyword must be given with model parameters.'
        objs[0].basis.array_offset = 1
        ps = _particle_model(objs[0], *data)

        if opts.get('solver', None):
            init_model_generator(env, n)
            check_model(objs, ps)

        yield ps

    elif mode == 'grid':
        assert n==1, 'Can only generate a single model in grid mode.'
        assert len(objs) == 1, 'Can only model a single object from a grid.'
        data = kwargs.get('data', None)
        assert data is not None, 'data keyword must be given with model parameters.'
        objs[0].basis.array_offset = 1
        ps = _grid_model(objs[0], *data)

        if opts.get('solver', None):
            init_model_generator(env, n)
            check_model(objs, ps)

        yield ps

    elif mode == 'isothermal':
        assert n==1, 'Can only generate a single model in isothermal mode.'
        assert len(objs) == 1, 'Can only model a single object from isothermal.'
        data = kwargs.get('data', None)
        assert data is not None, 'data keyword must be given with model parameters.'
        objs[0].basis.array_offset = 1

        ps = objs[0].basis.solution_isothermal(*data)
        m = {'sol':      None,
             'obj,data': [[objs[0],ps]],
             'obj,sol':  None,
             'tagged':   False}
        for od in m['obj,data']:
            default_post_process(od)
        yield m

    elif mode != 'default':
        assert False, 'Unsupported model mode "%s"' % mode
    else:

        if opts.get('solver', None):
            init_model_generator(env, n)
            mg = env.model_gen
            mg.start()
            try:
                for sol in mg.next(n):
                    ps = package_solution(sol, objs)
                    check_model(objs, ps)
                    yield ps
            except GlassSolverError as e:
                Log( '!' * 80)
                Log( 'Unable to generate models:', str(e) )
                Log( '!' * 80)