galpak3d_utils.py   galpak3d_utils.py 
import os import os
import configparser import configparser
from .spread_functions import *
from .model_sersic3d import ModelSersic from .model_sersic3d import ModelSersic
from .instruments import * DiskModel = DefaultModel = ModelSersic
import logging import logging
logging.basicConfig(level=logging.INFO) logging.basicConfig(level=logging.INFO)
logger = logging.getLogger('GalPaK: Utils') logger = logging.getLogger('GalPaK: Utils')
#Python3 compatibility
try:
basestring
except NameError:
basestring = str
def _save_to_file(filename, contents, clobber): def _save_to_file(filename, contents, clobber):
if not clobber and os.path.isfile(filename): if not clobber and os.path.isfile(filename):
raise IOError("The file {} already exists. Specify overwrite=True t o overwrite it.".format(filename)) raise IOError("The file {} already exists. Specify overwrite=True t o overwrite it.".format(filename))
with open(filename, 'w') as f: with open(filename, 'w') as f:
f.write(contents) f.write(contents)
def _read_file(filename): #def _read_file(filename):
with open(filename, 'r') as f: # with open(filename, 'r') as f:
contents = f.read() # contents = f.read()
return contents # return contents
def _read_psf(file_config=None):
"""
set PSF from config file
"""
psf = None
if file_config is not None:
if os.path.isfile(file_config):
config = configparser.RawConfigParser()
config.read(file_config)
else:
raise ValueError("PSF Config file %s not present! " % (file_con
fig))
else:
raise ValueError("PSF Config file not defined")
config = config['PSF']
psf_keys={}
for k in ['type', 'r0', 'C', 'amp', 'fwhm', 'alpha', 'beta', 'ba', 'pa'
, 'wvl_um', 'mode']:
if k in config.keys():
psf_keys[k] = k
elif 'psf_'+k in config.keys():
psf_keys[k] = 'psf_'+k
if 'type' in psf_keys:
psf_type = config[psf_keys['type']].lower()
logger.info("CONFIG: PSF: type {%s} found " % (psf_type))
else:
logger.error("CONFIG: PSF: type not specified")
if psf_type == 'moffat':
psf = MoffatPointSpreadFunction
elif psf_type == 'gaussian':
psf = GaussianPointSpreadFunction
elif psf_type == 'custom':
psf = ImagePointSpreadFunction
elif psf_type == 'maoppy':
psf = MAOPPYPointSpreadFunction
else:
#@fixme add other options
raise NotImplementedError("Currently only PSF type = `moffat` and `
gaussian` supported")
args = {}
import inspect
var_args = inspect.getargspec(psf).args
for k in var_args[1:]:
if k in list(config.keys()):
try:
args[k] = eval(config[k].split()[0])
except:
args[k] = config[k]
return psf(**args)
def _read_lsf(file_config=None):
"""
sets LSF from config LSF: lsf_fwhm
:return:
"""
lsf = None
if file_config is not None:
if os.path.isfile(file_config):
config =configparser.RawConfigParser()
config.read(file_config)
else:
raise ValueError("LSF Config file %s not present! " % (file_con
fig))
else:
raise ValueError("LSF Config file not defined")
config = config['LSF']
lsf_keys={}
for k in ['type', 'fwhm']:
if k in list(config.keys()):
lsf_keys[k] = k
elif 'lsf_'+k in config.keys():
lsf_keys[k] = 'lsf_'+k
if 'type' in lsf_keys:
lsf_type = config[lsf_keys['type']].lower()
else:
lsf_type = None
logger.warning("CONFIG: LSF: type not specified")
if lsf_type == 'gaussian':
lsf = GaussianLineSpreadFunction(
fwhm=float(config[lsf_keys['fwhm']].split()[0])
) # lsf_fwhm,
elif lsf_type is None:
lsf = None
else:
#@fixme
raise NotImplementedError
return lsf
def _read_instrument(file_config):
if file_config is not None:
if os.path.isfile(file_config):
config = configparser.RawConfigParser()
config.read(file_config)
else:
raise ValueError("Instrument Config file %s not present! " % (f
ile_config))
else:
raise ValueError("Instrument Config not defined")
psf = _read_psf(file_config)
try:
lsf = _read_lsf(file_config)
except:
lsf = None
logger.warning("CONFIG: LSF not found in config file")
if 'INSTRUMENT' in config.sections():
config = config['INSTRUMENT']
myinstr = config['type'].lower()
logger.info("CONFIG: INSTRUMENT: type {%s} found " % (myinstr))
if 'pixscale' in list(config.keys()):
scale = float(config['pixscale'].split()[0]) #
else:
scale = None
if 'muse' == myinstr:
instrument = MUSE(psf=psf, lsf=lsf)
elif 'musewfm' == myinstr:
instrument = MUSEWFM(psf=psf, lsf=lsf)
elif 'musenfm' == myinstr:
instrument = MUSENFM(psf=psf, lsf=lsf)
elif 'alma' in myinstr:
instrument = ALMA(psf=psf, lsf=lsf, pixscale=scale)
elif 'sinfok250' in myinstr:
instrument = SINFOK250(psf=psf, lsf=lsf)
elif 'sinfok100' in myinstr:
instrument = SINFOK100(psf=psf, lsf=lsf)
elif 'sinfoj250' in myinstr:
instrument = SINFOJ250(psf=psf, lsf=lsf)
elif 'sinfoj100' in myinstr:
instrument = SINFOJ100(psf=psf, lsf=lsf)
elif 'harmoni' in myinstr:
instrument = HARMONI(psf=psf, lsf=lsf, pixscale=scale)
elif 'kmos' in myinstr:
instrument = KMOS(psf=psf, lsf=lsf)
elif 'osiris' in myinstr:
instrument = OSIRIS(psf=psf, lsf=lsf)
elif 'generic' in myinstr:
instrument = Generic(psf=psf, lsf=lsf, default_spaxel_size=scal
e)
else:
# @fixme:generalize
raise NotImplementedError
else:
#default
logger.info("CONFIG: INSTRUMENT not present. Will use MUSE as defau
lt")
instrument = MUSE(psf=psf, lsf=lsf)
return instrument
def _read_model(file_config): def _read_model(file_config):
""" """
sets model from config MODEL sets model from config MODEL
:return: :return:
""" """
model = None model = None
if file_config is not None: if file_config is not None:
if os.path.isfile(file_config): if os.path.isfile(file_config):
logger.info("Reading model {:s}".format(file_config)) logger.info("Reading model {:s}".format(file_config))
config = configparser.RawConfigParser() config = configparser.RawConfigParser()
config.read(file_config) config.read(file_config)
else: else:
raise ValueError("Model Config file %s not present" % (file_con fig)) raise ValueError("Model Config file %s not present" % (file_con fig))
else: else:
raise ValueErrror("Model Config file not defined") raise ValueError("Model Config file not defined")
if config.has_section('MODEL'): if config.has_section('MODEL'):
config = config['MODEL'] config = config['MODEL']
else: else:
logger.warning("CONFIG file has no MODEL section") logger.warning("CONFIG file has no MODEL section")
if 'type' in list(config.keys()): if 'type' in list(config.keys()):
model_type = config['type'].lower() model_type = config['type'].lower()
else: else:
logger.error("CONFIG: Model: type not specified") logger.error("CONFIG: Model: type not specified")
skipping to change at line 215 skipping to change at line 65
args={} args={}
#try: #try:
# redshift = float(config['redshift']) # redshift = float(config['redshift'])
#except: #except:
# redshift = None # redshift = None
#args['redshift']=redshift #args['redshift']=redshift
if 'default' in model_type: if 'default' in model_type:
model = DefaultModel model = DefaultModel
elif 'sersic2d' in model_type:
model = ModelSersic2D
elif 'sersic' in model_type: elif 'sersic' in model_type:
model = ModelSersic model = ModelSersic
if 'rotation_curve' in config.keys(): if 'rotation_curve' in config.keys():
args['rotation_curve']=config['rotation_curve'] args['rotation_curve']=config['rotation_curve']
elif 'decomp' in model_type: elif 'disk' in model_type:
model = ModelDecomp model = DiskModel
else: else:
raise ValueError("Model type invalid. Must be ModelSersic2D or Mode lSersic or ModelDecomp") raise ValueError("Model type invalid. Must be DefaultModel or Model Sersic or DiskModel")
#args parameters #args parameters
import inspect import inspect
var_args = inspect.getargspec(model).args var_args = inspect.getfullargspec(model).args
for k in var_args[1:]: for k in var_args[1:]:
if k.lower() in list(config.keys()): if k.lower() in list(config.keys()):
try: try:
args[k]=eval(config[k]) args[k]=eval(config[k])
except: except:
args[k]=config[k] args[k]=config[k]
return model(**args) return model(**args)
 End of changes. 9 change blocks. 
175 lines changed or deleted 16 lines changed or added

This html diff was produced by rfcdiff 1.41. The latest version is available from http://tools.ietf.org/tools/rfcdiff/