Source code for galsim.config.input_real

# Copyright (c) 2012-2023 by the GalSim developers team on GitHub
# https://github.com/GalSim-developers
#
# This file is part of GalSim: The modular galaxy image simulation toolkit.
# https://github.com/GalSim-developers/GalSim
#
# GalSim is free software: redistribution and use in source and binary forms,
# with or without modification, are permitted provided that the following
# conditions are met:
#
# 1. Redistributions of source code must retain the above copyright notice, this
#    list of conditions, and the disclaimer given in the accompanying LICENSE
#    file.
# 2. Redistributions in binary form must reproduce the above copyright notice,
#    this list of conditions, and the disclaimer given in the documentation
#    and/or other materials provided with the distribution.
#

from .input import InputLoader, GetInputObj, RegisterInputType, GetNumInputObj
from .util import LoggerWrapper, GetIndex, GetRNG, get_cls_params
from .value import GetAllParams, SetDefaultIndex
from .gsobject import RegisterObjectType
from ..gsparams import GSParams
from ..errors import GalSimConfigError
from ..real import RealGalaxyCatalog, RealGalaxy, ChromaticRealGalaxy

# This file adds input type real_catalog and gsobject types RealGalaxy and RealGalaxyOriginal.

# The RealGalaxyCatalog doesn't need anything special other than registration as a valid
# input type.
RegisterInputType('real_catalog', InputLoader(RealGalaxyCatalog, takes_logger=True))

# There are two gsobject types that are coupled to this: RealGalaxy and RealGalaxyOriginal.

[docs]def _BuildRealGalaxy(config, base, ignore, gsparams, logger, param_name='RealGalaxy'): """Build a RealGalaxy from the real_catalog input item. """ real_cat = GetInputObj('real_catalog', config, base, param_name) # Special: if index is Sequence or Random, and max isn't set, set it to nobjects-1. # But not if they specify 'id' or have 'random=True', which overrides that. if 'id' not in config: if 'random' not in config: SetDefaultIndex(config, real_cat.nobjects) else: if not config['random']: SetDefaultIndex(config, real_cat.nobjects) # Need to do this to avoid being caught by the GetAllParams() call, which will flag # it if it has 'index' and 'random' set (but 'random' is False, so really it's OK). del config['random'] req, opt, single, _ = get_cls_params(RealGalaxy) kwargs, safe = GetAllParams(config, base, req, opt, single, ignore = ignore + ['num']) if gsparams: kwargs['gsparams'] = GSParams(**gsparams) kwargs['rng'] = GetRNG(config, base, logger, param_name) if 'index' in kwargs: index = kwargs['index'] if index >= real_cat.nobjects or index < 0: raise GalSimConfigError( "index=%s has gone past the number of entries in the RealGalaxyCatalog"%index) kwargs['real_galaxy_catalog'] = real_cat logger.debug('obj %d: %s kwargs = %s',base.get('obj_num',0),param_name,kwargs) gal = RealGalaxy(**kwargs) return gal, safe
[docs]def _BuildRealGalaxyOriginal(config, base, ignore, gsparams, logger): """Return the original image from a RealGalaxy using the real_catalog input item. """ gal, safe = _BuildRealGalaxy(config, base, ignore, gsparams, logger, param_name='RealGalaxyOriginal') return gal.original_gal, safe
def _BuildChromaticRealGalaxy(config, base, ignore, gsparams, logger): """Build a ChromaticRealGalaxy from several real_catalog input items. """ param_name = 'ChromaticRealGalaxy' ncats = GetNumInputObj('real_catalog', base) real_cats = [ GetInputObj('real_catalog', config, base, param_name, n) for n in range(ncats)] # Special: if index is Sequence or Random, and max isn't set, set it to nobjects-1. # But not if they specify 'id' or have 'random=True', which overrides that. if 'id' not in config: if 'random' not in config: SetDefaultIndex(config, real_cats[0].nobjects) else: if not config['random']: SetDefaultIndex(config, real_cats[0].nobjects) # Need to do this to avoid being caught by the GetAllParams() call, which will flag # it if it has 'index' and 'random' set (but 'random' is False, so really it's OK). del config['random'] req, opt, single, _ = get_cls_params(ChromaticRealGalaxy) kwargs, safe = GetAllParams(config, base, req, opt, single, ignore) if gsparams: kwargs['gsparams'] = GSParams(**gsparams) kwargs['rng'] = GetRNG(config, base, logger, param_name) if 'index' in kwargs: index = kwargs['index'] if index >= real_cats[0].nobjects or index < 0: raise GalSimConfigError( "index=%s has gone past the number of entries in the RealGalaxyCatalog"%index) kwargs['real_galaxy_catalogs'] = real_cats logger.debug('obj %d: %s kwargs = %s',base.get('obj_num',0),param_name,kwargs) gal = ChromaticRealGalaxy(**kwargs) return gal, safe # Register these as valid gsobject types RegisterObjectType('RealGalaxy', _BuildRealGalaxy, input_type='real_catalog') RegisterObjectType('RealGalaxyOriginal', _BuildRealGalaxyOriginal, input_type='real_catalog') RegisterObjectType('ChromaticRealGalaxy', _BuildChromaticRealGalaxy, input_type='real_catalog')