diff --git a/cscripts/obsutils.py b/cscripts/obsutils.py index d87cfb5..d6b2052 100755 --- a/cscripts/obsutils.py +++ b/cscripts/obsutils.py @@ -690,78 +690,78 @@ def set_obs_patterns(pattern, ra=83.6331, dec=22.0145, offset=1.5): # Set model for TS fitting # # ======================== # def set_ts_model(models, srcname, ra=None, dec=None, fitspat=False, fitspec=False): - """ - Set model for TS fitting - - Parameters - ---------- - models : `~gammalib.GModels` - Input model container - srcname : str - Test source name - ra : float, optional - Right Ascension of test source (deg) - dec : float, optional - Declination of test source (deg) - fitspat : bool, optional - Fit spatial parameter? - fitspec : bool, optional - Fit spectral parameters? - - Returns - ------- - model : `~gammalib.GModels` - Model container for TS fitting - """ - # Create a clone of the input model - outmodels = models.copy() - - # Disable TS computation for all model components (will enable the - # test source later) - for model in outmodels: - model.tscalc(False) - - # Get source model and enable TS computation - model = outmodels[srcname] - model.tscalc(True) - - # If source model has no "Prefactor" parameter then raise an exception - if not model.has_par('Prefactor'): - msg = ('Model "%s" has no parameter "Prefactor". Only spectral ' - 'models with a "Prefactor" parameter are supported.' % - srcname) - raise RuntimeError(msg) - - # Set position of test source - if ra != None and dec != None: - if model.has_par('RA') and model.has_par('DEC'): - model['RA'].value(ra) - model['DEC'].value(dec) - - # Set possible spatial and spectral parameters - spatial = ['RA', 'DEC', 'Sigma', 'Radius', 'Width', 'PA', - 'MinorRadius', 'MajorRadius'] - spectral = ['Index', 'Index1', 'Index2', 'BreakEnergy', 'CutoffEnergy', - 'InverseCutoffEnergy'] - - # Fit or fix spatial parameters - for par in spatial: - if model.has_par(par): - if fitspat: - model[par].free() - else: - model[par].fix() - - # Fit or fix spectral parameters - for par in spectral: - if model.has_par(par): - if fitspec: - model[par].free() - else: - model[par].fix() - - # Return model container - return outmodels + """ + Set model for TS fitting + + Parameters + ---------- + models : `~gammalib.GModels` + Input model container + srcname : str + Test source name + ra : float, optional + Right Ascension of test source (deg) + dec : float, optional + Declination of test source (deg) + fitspat : bool, optional + Fit spatial parameter? + fitspec : bool, optional + Fit spectral parameters? + + Returns + ------- + model : `~gammalib.GModels` + Model container for TS fitting + """ + # Create a clone of the input model + outmodels = models.copy() + + # Disable TS computation for all model components (will enable the + # test source later) + for model in outmodels: + model.tscalc(False) + + # Get source model and enable TS computation + model = outmodels[srcname] + model.tscalc(True) + + # If source model has no "Prefactor" parameter then raise an exception + if not model.has_par('Prefactor'): + msg = ('Model "%s" has no parameter "Prefactor". Only spectral ' + 'models with a "Prefactor" parameter are supported.' % + srcname) + raise RuntimeError(msg) + + # Set position of test source + if ra != None and dec != None: + if model.has_par('RA') and model.has_par('DEC'): + model['RA'].value(ra) + model['DEC'].value(dec) + + # Set possible spatial and spectral parameters + spatial = ['RA', 'DEC', 'Sigma', 'Radius', 'Width', 'PA', + 'MinorRadius', 'MajorRadius'] + spectral = ['Index', 'Index1', 'Index2', 'BreakEnergy', 'CutoffEnergy', + 'InverseCutoffEnergy'] + + # Fit or fix spatial parameters + for par in spatial: + if model.has_par(par): + if fitspat: + model[par].free() + else: + model[par].fix() + + # Fit or fix spectral parameters + for par in spectral: + if model.has_par(par): + if fitspec: + model[par].free() + else: + model[par].fix() + + # Return model container + return outmodels # ==================== #