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])
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])
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
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
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)
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)
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)