diff --git a/cscripts/Makefile.am b/cscripts/Makefile.am
index 3eb3233..da01960 100755
--- a/cscripts/Makefile.am
+++ b/cscripts/Makefile.am
@@ -19,7 +19,10 @@
# #
#############################################################################
+
+
# Scripts to be distributed in $(pyexecdir)/cscripts
+
pythonscripts = $(top_builddir)/cscripts/__init__.py \
$(srcdir)/csbkgmodel.py \
$(srcdir)/cscaldb.py \
@@ -47,6 +50,7 @@ pythonscripts = $(top_builddir)/cscripts/__init__.py \
$(srcdir)/cstsmapmerge.py \
$(srcdir)/cstsmapsplit.py \
$(srcdir)/csviscube.py \
+ $(srcdir)/csscs.py \
$(srcdir)/csworkflow.py \
$(srcdir)/csfindobs.py \
$(srcdir)/csiactcopy.py \
@@ -58,7 +62,10 @@ pythonscripts = $(top_builddir)/cscripts/__init__.py \
$(srcdir)/ioutils.py \
$(srcdir)/mputils.py
+
+
# Parfiles to be distributed in $(prefix)/syspfiles
+
parfiles = $(srcdir)/csbkgmodel.par \
$(srcdir)/cscaldb.par \
$(srcdir)/csebins.par \
@@ -84,13 +91,17 @@ parfiles = $(srcdir)/csbkgmodel.par \
$(srcdir)/cstsmapmerge.par \
$(srcdir)/cstsmapsplit.par \
$(srcdir)/csviscube.par \
+ $(srcdir)/csscs.par \
$(srcdir)/csworkflow.par \
$(srcdir)/csfindobs.par \
$(srcdir)/csiactcopy.par \
$(srcdir)/csiactdata.par \
$(srcdir)/csiactobs.par
+
+
# Scripts for which symbolic links will be created in bindir
+
linkscripts = csbkgmodel \
cscaldb \
csebins \
@@ -117,13 +128,17 @@ linkscripts = csbkgmodel \
cstsmapmerge \
cstsmapsplit \
csviscube \
+ csscs \
csworkflow \
csfindobs \
csiactcopy \
csiactdata \
csiactobs
+
+
# Test scripts to be distributed in $(pyexecdir)/cscripts/tests
+
testscripts = $(srcdir)/tests/__init__.py \
$(top_srcdir)/test/testing.py \
$(top_srcdir)/test/test_python_cscripts.py \
@@ -155,6 +170,7 @@ testscripts = $(srcdir)/tests/__init__.py \
$(top_srcdir)/test/test_cstsmapmerge.py \
$(top_srcdir)/test/test_cstsmapsplit.py \
$(top_srcdir)/test/test_csviscube.py \
+ $(top_srcdir)/test/test_csscs.py \
$(top_srcdir)/test/test_csworkflow.py \
$(top_srcdir)/test/test_obsutils.py \
$(top_srcdir)/test/test_mputils.py \
@@ -162,7 +178,10 @@ testscripts = $(srcdir)/tests/__init__.py \
$(top_srcdir)/test/test_csiactdata.py \
$(top_srcdir)/test/test_csiactobs.py
+
+
# Test data to be distributed in $(pyexecdir)/cscripts/tests/data
+
testdata = $(top_srcdir)/test/data/crab.xml \
$(top_srcdir)/test/data/obs_unbinned.xml \
$(top_srcdir)/test/data/obs_unbinned_two.xml \
@@ -239,12 +258,18 @@ testdata = $(top_srcdir)/test/data/crab.xml \
$(top_srcdir)/test/data/viscube.fits.gz \
$(top_srcdir)/test/data/hess_bkg_lookup.fits
+
+
# Test data to be distributed in $(pyexecdir)/cscripts/tests/data/iactdata
+
testiactdata = $(top_srcdir)/test/data/iactdata/hdu-index.fits.gz \
$(top_srcdir)/test/data/iactdata/master.json \
$(top_srcdir)/test/data/iactdata/obs-index.fits.gz
+
+
# Test data to be distributed in $(pyexecdir)/cscripts/tests/data/iactdata/events
+
testiactevents = $(top_srcdir)/test/data/iactdata/events/irf_file.fits.gz \
$(top_srcdir)/test/data/iactdata/events/events_0.fits.gz \
$(top_srcdir)/test/data/iactdata/events/events_1.fits.gz \
@@ -256,9 +281,11 @@ testiactevents = $(top_srcdir)/test/data/iactdata/events/irf_file.fits.gz \
$(top_srcdir)/test/data/iactdata/events/events_7.fits.gz \
$(top_srcdir)/test/data/iactdata/events/events_8.fits.gz
+
# Install scripts, parfiles, test scripts and test data. Note that we don't
# need to prepend $(DESTDIR) here (not fully clear why, but that's the way
# it is)
+
binscriptsdir = $(bindir)
binscripts_DATA = $(binscripts)
pythonscriptsdir = $(pyexecdir)/cscripts
@@ -274,17 +301,23 @@ testiactdata_DATA = $(testiactdata)
testiacteventsdir = $(pyexecdir)/cscripts/tests/data/iactdata/events
testiactevents_DATA = $(testiactevents)
+
# Files to be distributed in the tar file
EXTRA_DIST = $(binscripts) $(pythonscripts) $(parfiles) \
$(testscripts) $(testdata) $(testiactdata) \
$(testiactevents)
+
+
# Add install hook rule to copy cscripts without .py into the bindir
+
install-data-hook:
+
@binlist='$(binscripts)';\
for p in $$binlist; do \
chmod +x "$(DESTDIR)$(bindir)/$$p"; \
done
+
@linklist='$(linkscripts)';\
for p in $$linklist; do \
rm -rf "$(DESTDIR)$(bindir)/$$p"; \
@@ -292,15 +325,23 @@ install-data-hook:
chmod +x "$(DESTDIR)$(bindir)/$$p"; \
done
+
+
# Uninstall hook rule to remove the cscripts from the bindir
+
uninstall-hook:
+
@linklist='$(linkscripts)';\
for p in $$linklist; do \
rm -rf "$(DESTDIR)$(bindir)/$$p"; \
done
+
+
# Files to be removed in build directory
+
clean-local:
+
@if ! [ '@top_srcdir@' -ef '@top_builddir@' ]; then \
rm -rf $(top_builddir)/cscripts/cs*.py; \
rm -rf $(top_builddir)/cscripts/obsutils.py; \
@@ -310,13 +351,19 @@ clean-local:
rm -rf $(top_builddir)/cscripts/mputils.py; \
rm -rf $(top_builddir)/cscripts/*.par; \
fi
+
rm -rf $(top_builddir)/cscripts/*.pyc
rm -rf $(top_builddir)/cscripts/__pycache__
+
+
# Uninstall the cscripts Python module
+
uninstall-local:
+
rm -rf $(DESTDIR)$(pyexecdir)/cscripts/*.pyc
rm -rf $(DESTDIR)$(pyexecdir)/cscripts/*.pyc
rm -rf $(DESTDIR)$(pyexecdir)/cscripts/__pycache__
rm -rf $(DESTDIR)$(pyexecdir)/cscripts/tests/*.pyc
rm -rf $(DESTDIR)$(pyexecdir)/cscripts/tests/__pycache__
+
diff --git a/cscripts/__init__.py.in b/cscripts/__init__.py.in
index 5327f27..b428d80 100755
--- a/cscripts/__init__.py.in
+++ b/cscripts/__init__.py.in
@@ -1,7 +1,7 @@
# ==========================================================================
# cscripts Python module
#
-# Copyright (C) 2015-2018 Juergen Knoedlseder
+# Copyright (C) 2015-2020 Juergen Knoedlseder
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -50,6 +50,7 @@ __all__ = [
"cstsmapmerge",
"cstsmapsplit",
"csviscube",
+ "csscs",
"csworkflow",
"obsutils",
"modutils",
@@ -90,6 +91,7 @@ from cscripts.cstsdist import cstsdist
from cscripts.cstsmapmerge import cstsmapmerge
from cscripts.cstsmapsplit import cstsmapsplit
from cscripts.csviscube import csviscube
+from cscripts.csscs import csscs
from cscripts.csworkflow import csworkflow
from cscripts import obsutils
from cscripts import modutils
@@ -116,3 +118,4 @@ def test():
# Add version
__version__ = '@PACKAGE_VERSION@'
+
diff --git a/cscripts/csphagen.py b/cscripts/csphagen.py
index aaecf00..d8d9425 100755
--- a/cscripts/csphagen.py
+++ b/cscripts/csphagen.py
@@ -287,6 +287,15 @@ class csphagen(ctools.csobservation):
self._has_exclusion = True
elif self['inexclusion'].is_valid():
inexclusion = self['inexclusion'].filename()
+ # If the user has not specified the extension to use
+ # and there is an extension called 'EXCLUSION' ...
+ if not inexclusion.has_extname()\
+ and not inexclusion.has_extno()\
+ and gammalib.GFits(inexclusion).contains('EXCLUSION'):
+ # ... choose it for the exclusion map
+ extname = inexclusion.url() + '[EXCLUSION]'
+ inexclusion = gammalib.GFilename(extname)
+ # Otherwise will pick the default (primary) HDU
self._excl_reg = gammalib.GSkyRegionMap(inexclusion)
self._has_exclusion = True
else:
diff --git a/cscripts/csscs.par b/cscripts/csscs.par
new file mode 100644
index 0000000..b8906e2
--- /dev/null
+++ b/cscripts/csscs.par
@@ -0,0 +1,70 @@
+#############################################################################
+# #
+# CTA Science Analysis Tools #
+# #
+# ------------------------------------------------------------------------- #
+# #
+# File: csscs.par #
+# #
+# Author: Luigi Tibaldo #
+# luigi.tibaldo@irap.omp.eu #
+# IRAP #
+# #
+# Purpose: Parameter file for the csscs script #
+# #
+#############################################################################
+#
+# Input and output parameters
+#============================
+inobs, f, a, events.fits,,, "Input event list, counts cube, or observation definition XML file"
+inmodel, f, a, $CTOOLS/share/models/crab.xml,,, "Input model definition XML file"
+srcnames, s, a, Crab,,, "Semicolon-separated list of sources"
+expcube, f, a, NONE,,, "Input exposure cube file"
+psfcube, f, a, NONE,,, "Input PSF cube file"
+edispcube, f, a, NONE,,, "Input energy dispersion cube file"
+bkgcube, f, a, NONE,,, "Input background cube file"
+caldb, s, a, prod2,,, "Calibration database"
+irf, s, a, South_0.5h,,, "Instrument response function"
+inexclusion, f, a, skymap.fits,,, "Exclusion regions file"
+edisp, b, h, no,,, "Apply energy dispersion?"
+outfile, f, a, maps.fits,,, "Output maps"
+
+#
+# Script parameters
+#==================
+nxpix, i, a, 20,,, "Size of the X axis in pixels"
+nypix, i, a, 20,,, "Size of the Y axis in pixels"
+binsz, r, a, 0.1,,, "Pixel size (deg/pixel)"
+coordsys, s, a, CEL,CEL|GAL,, "Coordinate System"
+proj, s, a, CAR,AIT|AZP|CAR|GLS|MER|MOL|SFL|SIN|STG|TAN,, "Projection method"
+xref, r, a, 83.63,0,360, "First coordinate of image center in degrees (RA or galactic l)"
+yref, r, a, 22.51,-90,90, "Second coordinate of image center in degrees (DEC or galactic b)"
+rad, r, a, 0.2,,, "Radius of the region for component separation (deg)"
+emin, r, a, 0.1,,, "Lower energy limit (TeV)"
+emax, r, a, 100.0,,, "Upper energy limit (TeV)"
+method, s, a, UNBINNED, UNBINNED|ONOFF,, "Analysis method"
+enumbins, i, a, 20,,, "Number of energy bins"
+bkgmethod, s, h, REFLECTED,REFLECTED,, "Method for background estimation"
+srcshape, s, h, CIRCLE,CIRCLE,, "Shape of the source region"
+bkgregmin, i, h, 2,1,1000, "Minimum number of background regions"
+bkgregskip, i, h, 1,0,10, "Number of background regions to skip next to On region"
+use_model_bkg, b, h, yes,,, "Use background model?"
+maxoffset, r, h, 4.0,,, "Maximum offset of source from camera center to accept observation"
+etruemin, r, h, 0.01,,, "Minimum true energy (TeV)"
+etruemax, r, h, 300.0,,, "Maximum true energy (TeV)"
+etruebins, i, h, 30,,, "Number of bins per decade for true energy bins"
+statistic, s, h, DEFAULT,DEFAULT|CSTAT|WSTAT|CHI2,, "Optimization statistic"
+calc_ts, b, h, yes,,, "Compute TS value for each map bin"
+calc_ulim, b, h, no,,, "Compute upper limit for each map bin"
+fix_srcs, b, h, yes,,, "Fix normalisations of other skymodels"
+fix_bkg, b, h, no,,, "Fix background normalisation"
+
+#
+# Standard parameters
+#====================
+nthreads, i, h, 0,0,1000, "Number of parallel processes (0=use all available CPUs)"
+chatter, i, h, 2,0,4, "Chattiness of output"
+clobber, b, h, yes,,, "Overwrite existing output files with new output files?"
+debug, b, h, no,,, "Activate debugging mode?"
+mode, s, h, ql,,, "Mode of automatic parameters"
+logfile, f, h, csscs.log,,, "Log filename"
diff --git a/cscripts/csscs.py b/cscripts/csscs.py
new file mode 100755
index 0000000..da45163
--- /dev/null
+++ b/cscripts/csscs.py
@@ -0,0 +1,998 @@
+#! /usr/bin/env python
+# ==========================================================================
+# Spectral component separation script
+#
+# Copyright (C) 2020 Luigi Tibaldo
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see .
+#
+# ==========================================================================
+import ctools
+import gammalib
+import math
+import sys
+from cscripts import mputils
+from cscripts import obsutils
+
+
+# =========== #
+# csscs class #
+# =========== #
+class csscs(ctools.csobservation):
+ """
+ Spectral component separation script
+ """
+
+ # Constructor
+ def __init__(self, *argv):
+ """
+ Constructor
+
+ Parameters
+ ----------
+ argv : list of str
+ List of IRAF command line parameter strings of the form
+ ``parameter=3``.
+ """
+ # Initialise application by calling the base class constructor
+ self._init_csobservation(self.__class__.__name__, ctools.__version__, argv)
+
+ # Initialise data members
+ self._nthreads = 0
+ self._srcnames = []
+ self._method = None
+ self._fits = None
+ self._excl_reg_map = None # Exclusion region map for on/off analysis
+ self._excl_reg_name = None
+
+ # Return
+ return
+
+ # State methods for pickling
+ def __getstate__(self):
+ """
+ Extend ctools.csobservation __getstate__ method
+
+ Returns
+ -------
+ state : dict
+ Pickled instance
+ """
+ # Set pickled dictionary
+ state = {'base': ctools.csobservation.__getstate__(self),
+ 'nthreads': self._nthreads,
+ 'srcnames': self._srcnames,
+ 'method': self._method,
+ 'fits': self._fits,
+ 'excl_reg_map': self._excl_reg_map,
+ 'excl_reg_name' : self._excl_reg_name}
+
+ # Return pickled dictionary
+ return state
+
+ def __setstate__(self, state):
+ """
+ Extend ctools.csobservation __setstate__ method
+
+ Parameters
+ ----------
+ state : dict
+ Pickled instance
+ """
+ # Set state
+ ctools.csobservation.__setstate__(self, state['base'])
+ self._nthreads = state['nthreads']
+ self._srcnames = state['srcnames']
+ self._method = state['method']
+ self._fits = state['fits']
+ self._excl_reg_map = state['excl_reg_map']
+ self._excl_reg_name = state['excl_reg_name']
+
+ # Return
+ return
+
+ # Private methods
+ def _get_onoff_parameters(self):
+ """
+ Get On/Off analysis parameters.
+
+ This is done here rather then in ctools.is_onoff because the exclusion
+ map needs to be handled differently as an automatic parameter but
+ queried only if not already set and we need to verify is not empty.
+ Also many parameters are already queried for all methods
+
+ TODO: verify if this can be made more uniform with other scripts
+ """
+ # Exclusion map
+ if (self._excl_reg_map is not None) and (self._excl_reg_map.map().npix() > 0):
+ # Exclusion map set and is not empty
+ pass
+ elif self['inexclusion'].is_valid():
+ self._excl_reg_name = self['inexclusion'].filename()
+ self._excl_reg_map = gammalib.GSkyRegionMap(self._excl_reg_name)
+ else:
+ msg = 'csscs in On/Off mode requires input exclusion region.'
+ raise RuntimeError(msg)
+
+ # Other csphagen parameters
+ self['enumbins'].integer()
+ if self['bkgmethod'].string() == 'REFLECTED':
+ self['bkgregmin'].integer()
+ self['bkgregskip'].integer()
+ self['maxoffset'].real()
+ self['etruemin'].real()
+ self['etruemax'].real()
+ self['etruebins'].integer()
+
+ # Return
+ return
+
+ def _get_parameters(self):
+ """
+ Get parameters from parfile
+ """
+ # Set observation if not done before
+ if self.obs().is_empty():
+ self.obs(self._get_observations())
+
+ # Set observation statistic
+ self._set_obs_statistic(gammalib.toupper(self['statistic'].string()))
+
+ # Collect number of unbinned, binned and On/Off observations in
+ # observation container
+ n_unbinned = 0
+ n_binned = 0
+ n_onoff = 0
+ for obs in self.obs():
+ if obs.classname() == 'GCTAObservation':
+ if obs.eventtype() == 'CountsCube':
+ n_binned += 1
+ else:
+ n_unbinned += 1
+ elif obs.classname() == 'GCTAOnOffObservation':
+ n_onoff += 1
+ n_cta = n_unbinned + n_binned + n_onoff
+ n_other = self.obs().size() - n_cta
+
+ # Check if there are On/Off or non-IACT observations
+ if n_onoff > 0 or n_other > 0:
+ msg = 'On/Off or non-CTA observations found. ' \
+ 'csscs does not support this type of observations.'
+ raise RuntimeError(msg)
+
+ # ... otherwise check if there is a mix of binned and unbinned
+ elif n_unbinned > 0 and n_binned > 0:
+ msg = 'Mix of unbinned and binned CTA observations ' \
+ 'found in observation container. csscs does not ' \
+ 'support this mix.'
+ raise RuntimeError(msg)
+
+ # Set models if there are none in the container
+ if self.obs().models().size() == 0:
+ self.obs().models(self['inmodel'].filename())
+
+ # Query the map definition parameters
+ self['xref'].real()
+ self['yref'].real()
+ self['coordsys'].string()
+ self['proj'].string()
+ self['nxpix'].integer()
+ self['nypix'].integer()
+ self['binsz'].real()
+
+ # Query radius of ROI for component separation
+ self['rad'].real()
+
+ # Query energy boundaries
+ self['emin'].real()
+ self['emax'].real()
+
+ # If we have unbinned observations query analysis method
+ if n_unbinned > 0:
+ self._method = self['method'].string()
+ # If method is Onoff query csphagen parameters
+ if self._method == 'ONOFF':
+ self._get_onoff_parameters()
+ # Otherwise set method to binned
+ else:
+ self._method = 'BINNED'
+
+ # Query target source names
+ srcnames = self['srcnames'].string()
+
+ # Fashion target sources into Python list. Strip leading and trailing
+ # spaces from names.
+ self._srcnames = srcnames.split(';')
+ for s, name in enumerate(self._srcnames):
+ self._srcnames[s] = name.strip()
+
+ # Verify that the target sources are in the model
+ src_in_model = True
+ for name in self._srcnames:
+ src_in_model = src_in_model and self.obs().models().contains(name)
+ if src_in_model == False:
+ msg = 'Not all target sources are present in input model.'
+ raise RuntimeError(msg)
+
+ # For On/Off analysis check the number of gamma-ray sources in the model
+ if self._method == 'ONOFF':
+
+ # Initialise number of sources
+ nsources = 0
+
+ # Loop over models and verify if model is of type GModelSky
+ for model in self.obs().models():
+ if model.classname() == 'GModelSky':
+ nsources += 1
+
+ # If there are background gamma-ray sources in the model
+ # throw runtime error
+ if nsources > len(self._srcnames):
+ msg = 'Background gamma-ray sources found in the model. ' \
+ 'On/Off analysis does not support this feature.'
+ raise RuntimeError(msg)
+
+ # ... otherwise continue
+ else:
+ pass
+
+ # Query other hidden parameters, just in case
+ self['edisp'].boolean()
+ self['calc_ulim'].boolean()
+ self['calc_ts'].boolean()
+ self['fix_bkg'].boolean()
+ self['fix_srcs'].boolean()
+
+ # Read ahead output parameters
+ if self._read_ahead():
+ self['outfile'].query()
+
+ # Write input parameters into logger
+ self._log_parameters(gammalib.TERSE)
+
+ # Set number of processes for multiprocessing
+ self._nthreads = mputils.nthreads(self)
+
+ # Return
+ return
+
+ def _create_map(self):
+ """
+ Create a gammalib.GSkyMap object to store the output
+
+ Returns
+ -------
+ skymap : `~gammalib.GSkyMap`
+ Sky map
+ """
+ # Create sky map
+ skymap = gammalib.GSkyMap(self['proj'].string(), self['coordsys'].string(),
+ self['xref'].real(), self['yref'].real(),
+ -self['binsz'].real(), self['binsz'].real(),
+ self['nxpix'].integer(), self['nypix'].integer(),
+ 1)
+
+ # Return sky map
+ return skymap
+
+ def _adjust_model_pars(self):
+ """
+ Adjust model parameters
+ """
+ # Write header
+ self._log_header1(gammalib.TERSE, 'Adjust model parameters')
+
+ # Adjust model parameters based on input user parameters
+ for model in self.obs().models():
+
+ # Initialise TS flag for all models to false
+ model.tscalc(False)
+
+ # Log model name
+ self._log_header3(gammalib.EXPLICIT, model.name())
+
+ # In On/Off mode we cannot support multiple source morphologies
+ # Thus, if we have more than one target we will set them all
+ # to isotropic
+ if self._method == 'ONOFF' and len(self._srcnames) > 1:
+
+ # Check if it is a source
+ try:
+ gammalib.GModelSky(model)
+ # In this case check if the spatial model is already isotropic
+ if model.spatial() == 'DiffuseIsotropic':
+ pass
+
+ # ... otherwise change it to isotropic
+ else:
+ msg = ' Setting spatial model to diffuse isotropic'
+ self._log_string(gammalib.EXPLICIT, msg)
+ model.spatial(gammalib.GModelSpatialDiffuseConst())
+ except:
+ pass
+
+ # Freeze all parameters except the normalization
+ # which is assumed to be the first spectral parameter
+ normpar = model.spectral()[0]
+ for par in model:
+ if par.name() == normpar.name():
+ pass
+ else:
+ if par.is_free():
+ self._log_string(gammalib.EXPLICIT, ' Fixing "' + par.name() + '"')
+ par.fix()
+
+ # Deal with the target sources
+ if model.name() in self._srcnames:
+
+ # Free the normalisation parameter which is assumed to be
+ # the first spectral parameter
+ if normpar.is_fixed():
+ self._log_string(gammalib.EXPLICIT, ' Freeing "' + normpar.name() + '"')
+ normpar.free()
+
+ # Optionally compute Test Statistic value
+ if self['calc_ts'].boolean():
+ model.tscalc(True)
+
+ # Deal with background models
+ elif self['fix_bkg'].boolean() and not model.classname() == 'GModelSky':
+
+ if normpar.is_free():
+ self._log_string(gammalib.EXPLICIT, ' Fixing "' + normpar.name() + '"')
+ normpar.fix()
+
+
+ # Deal with background sources
+ elif self['fix_srcs'].boolean() and model.classname() == 'GModelSky':
+
+ if normpar.is_free():
+ self._log_string(gammalib.EXPLICIT, ' Fixing "' + normpar.name() + '"')
+ normpar.fix()
+
+ # Return
+ return
+
+ def _mask_cube(self, obs, ra, dec, rad):
+ """
+ Mask cube observation
+
+ Parameters
+ ----------
+ obs : `gammalib.GCTAObservation`
+ Input observation of type cube
+ ra : float
+ Right Ascension (deg)
+ dec : float
+ Declination (deg)
+ rad : float
+ Radius (deg)
+
+ Returns
+ -------
+ new_obs : `gammalib.GCTAObservations`
+ Output observations with masked cubes
+ """
+ # Filter cube according to ROI and user energy range
+ cubemask = ctools.ctcubemask(obs)
+ cubemask['ra'] = ra
+ cubemask['dec'] = dec
+ cubemask['rad'] = rad
+ cubemask['regfile'] = 'NONE'
+ cubemask['emin'] = self['emin'].real()
+ cubemask['emax'] = self['emax'].real()
+
+ # If chatter level is verbose and debugging is requested then
+ # switch also on the debug model in ctcubemask
+ if self._logVerbose() and self._logDebug():
+ cubemask['debug'] = True
+
+ # Mask cube
+ cubemask.run()
+
+ # Get deep copy of filtered observations
+ new_obs = cubemask.obs().copy()
+
+ # Return
+ return new_obs
+
+ def _mask_evlist(self, obs, ra, dec, rad):
+ """
+ Mask event list
+
+ Parameters
+ ----------
+ obs : `gammalib.GCTAObservations`
+ Input observations of type event list
+ ra : float
+ Right Ascension (deg)
+ dec : float
+ Declination (deg)
+ rad : float
+ Radius (deg)
+
+ Returns
+ -------
+ new_obs : `gammalib.GCTAObservations`
+ Output observations with masked event lists
+ """
+ # Filter event list according to ROI and user energy range
+ select = ctools.ctselect(obs)
+ select['usepnt'] = False
+ select['ra'] = ra
+ select['dec'] = dec
+ select['rad'] = rad
+ select['emin'] = self['emin'].real()
+ select['emax'] = self['emax'].real()
+ select['tmin'] = 'INDEF'
+ select['tmax'] = 'INDEF'
+
+ # If chatter level is verbose and debugging is requested then
+ # switch also on the debug model in ctcubemask
+ if self._logVerbose() and self._logDebug():
+ select['debug'] = True
+
+ # Select event list
+ select.run()
+
+ # Get deep copy of filtered observation
+ new_obs = select.obs().copy()
+
+ # Return
+ return new_obs
+
+ def _mask_observations(self, ra, dec, rad):
+ """
+ Create observations restricted to circular ROI
+
+ Parameters
+ ----------
+ ra : float
+ Right Ascension (deg)
+ dec : float
+ Declination (deg)
+ rad : float
+ Radius (deg)
+
+ Returns
+ -------
+ new_obs : `~gammalib.GObservations`
+ Observations in circular ROI
+ """
+ # Determine type of masking according
+ # to observation type and analysis method
+ if self._method == 'UNBINNED':
+ new_obs = self._mask_evlist(self.obs(), ra, dec, rad)
+ elif self._method == 'BINNED':
+ new_obs = self._mask_cube(self.obs(), ra, dec, rad)
+ elif self._method == 'ONOFF':
+ new_obs = obsutils.get_onoff_obs(self, self.obs(), nthreads=1,
+ ra=ra, dec=dec,
+ srcname=self._srcnames[0])
+
+ # Return
+ return new_obs
+
+ def _pixel_analysis(self, inx):
+ """
+ Performs analysis over the region of interest corresponding to a
+ single pixel of output map
+
+ Parameters
+ ----------
+ inx : int
+ Pixel index
+
+ Returns
+ -------
+ result : dict
+ Results
+ """
+
+ # Create template for output map to extract pixel coordinates
+ outmap = self._create_map()
+
+ # Determine pixel centre coordinates
+ pixdir = outmap.inx2dir(inx)
+ ra = pixdir.ra_deg()
+ dec = pixdir.dec_deg()
+
+ # Write header for spatial bin
+ msg = 'Spatial bin (%d) centred on (R.A.,Dec) = (%f,%f) deg' % (inx, ra, dec)
+ self._log_header2(gammalib.TERSE, msg)
+
+ # Initialize results
+ result = {}
+ for name in self._srcnames:
+ result[name] = {'flux': 0.0,
+ 'flux_err': 0.0,
+ 'TS': 0.0,
+ 'ulimit': -1.0}
+
+ # Mask observations
+ self._log_header3(gammalib.NORMAL, 'Masking observations')
+ masked_obs = self._mask_observations(ra, dec, self['rad'].real())
+
+ # Continue only if we have at least one observation
+ if masked_obs.size() > 0:
+
+ # Set up likelihood analysis
+ self._log_header3(gammalib.NORMAL, 'Performing fit in region')
+ like = ctools.ctlike(masked_obs)
+ like['edisp'] = self['edisp'].boolean()
+ like['nthreads'] = 1 # Avoids OpenMP conflict
+
+ # If chatter level is verbose and debugging is requested then
+ # switch also on the debug model in ctlike
+ if self._logVerbose() and self._logDebug():
+ like['debug'] = True
+
+ # Perform maximum likelihood fit
+ like.run()
+
+ # Write model results for explicit chatter level
+ self._log_string(gammalib.EXPLICIT, str(like.obs().models()))
+
+ # Continue only if log-likelihood is non-zero
+ if like.obs().logL() != 0.0:
+
+ # Prepare objects for flux extraction
+ # ROI
+ centre = gammalib.GSkyDir()
+ centre.radec_deg(ra, dec)
+ roi = gammalib.GSkyRegionCircle(centre, self['rad'].real())
+
+ # Energy boundaries
+ emin = gammalib.GEnergy(self['emin'].real(), 'TeV')
+ emax = gammalib.GEnergy(self['emax'].real(), 'TeV')
+
+ # Loop over target sources
+ for name in self._srcnames:
+
+ # Get source
+ source = like.obs().models()[name]
+
+ # Get flux
+ # Integrate spectral model between emin and emax
+ flux = source.spectral().flux(emin, emax)
+
+ # Calculate correction factor
+ # Spatial model flux over ROI divided by ROI solid angle
+ corr_factor = source.spatial().flux(roi)
+ corr_factor /= gammalib.twopi * (1 - math.cos(math.radians(self['rad'].real())))
+
+ # Multiply flux by correction factor
+ flux *= corr_factor
+ result[name]['flux'] = flux
+
+ # Get flux error
+ # Normalization parameter
+ normpar = source.spectral()[0]
+
+ # Only normalization parameter free
+ # Relative error on flux is same as on normalization
+ # Avoid zero division error
+ if normpar.value() > 0.:
+ flux_error = flux * normpar.error() / normpar.value()
+ else:
+ flux_error = 0.
+ result[name]['flux_error'] = flux_error
+
+ # If requested get TS
+ if self['calc_ts'].boolean():
+ result[name]['TS'] = source.ts()
+
+ # If requested compute upper flux limit
+ if self['calc_ulim'].boolean():
+
+ # Logging information
+ self._log_header3(gammalib.NORMAL,
+ 'Computing upper limit for source ' + name)
+
+ # Create upper limit object
+ ulimit = ctools.ctulimit(like.obs())
+ ulimit['srcname'] = name
+ ulimit['emin'] = self['emin'].real()
+ ulimit['emax'] = self['emax'].real()
+
+ # If chatter level is verbose and debugging is requested
+ # then switch also on the debug model in ctulimit
+ if self._logVerbose() and self._logDebug():
+ ulimit['debug'] = True
+
+ # Try to run upper limit and catch exceptions
+ try:
+ ulimit.run()
+ ulimit_value = ulimit.flux_ulimit()
+ # Multiply by correction factor to get flux per solid angle in ROI
+ ulimit_value *= corr_factor
+ result[name]['ulimit'] = ulimit_value
+ except:
+ self._log_string(gammalib.NORMAL, 'Upper limit '
+ 'calculation failed.')
+
+ # if likelihood is zero
+ else:
+ value = 'Likelihood is zero. Bin is skipped.'
+ self._log_value(gammalib.TERSE, '(R.A.,Dec) = (%f,%f) deg' % (ra, dec), value)
+
+ # if observation size = 0
+ else:
+ value = 'Size of masked observations is zero. Bin is skipped.'
+ self._log_value(gammalib.TERSE, '(R.A.,Dec) = (%f,%f) deg' % (ra, dec), value)
+
+ # Return result
+ return result
+
+ def _write_hdu_keywords(self, hdu, is_flux=False):
+ """
+ Append cards to HDU
+
+ Parameters
+ ----------
+ hdu : `~gammalib.GFitsHDU`
+ HDU
+ """
+ # Flux units
+ if is_flux:
+ hdu.card('BUNIT', 'ph/cm2/s/sr', 'Photon flux')
+
+ # Minimum and maximum energy
+ hdu.card('E_MIN', self['emin'].real(), '[TeV] Lower energy boundary')
+ hdu.card('E_MAX', self['emax'].real(), '[TeV] Upper energy boundary')
+ hdu.card('EUNIT', 'TeV', 'Units for E_MIN and E_MAX')
+
+ # ROI size
+ hdu.card('ROISZ', self['rad'].real(),
+ '[deg] Size of ROI used for component separation')
+
+ # Analysis method
+ hdu.card('METHOD', self._method, 'Analysis method')
+
+ # For On/Off log information
+ if self._method == 'ONOFF':
+
+ # Exclusion map
+ if self._excl_reg_name is not None:
+ hdu.card('EXCLMAP', self._excl_reg_name.url(), 'Exclusion map name')
+
+ # Model background?
+ hdu.card('BKGMODEL', self['use_model_bkg'].boolean(), 'Use background model?')
+
+ # Fit statistic
+ hdu.card('STAT', self['statistic'].string(), 'Fit statistic')
+
+ # Return
+ return
+
+ def _fill_fits(self, results):
+ """
+ Fill FITS object to store the results
+
+ Parameters
+ ----------
+ result : `dict`
+ Results
+
+ Returns
+ -------
+ fits : `~gammalib.GFits`
+ FITS object
+ """
+ # Create new Fits object
+ fits = gammalib.GFits()
+
+ # Append empty primary HDU
+ fits.append(gammalib.GFitsImageDouble())
+
+ # Loop over target sources
+ for s, name in enumerate(self._srcnames):
+
+ # Create skymaps to store results
+ # Maps for TS and upper limits created and filled to avoid if statements
+ # Will not be saved in the end if not requested
+ fmap = self._create_map()
+ errmap = self._create_map()
+ tsmap = self._create_map()
+ ulmap = self._create_map()
+
+ # Loop over pixels and fill maps
+ for inx in range(fmap.npix()):
+ fmap[inx, 0] = results[inx][name]['flux']
+ errmap[inx, 0] = results[inx][name]['flux_error']
+ tsmap[inx, 0] = results[inx][name]['TS']
+ ulmap[inx, 0] = results[inx][name]['ulimit']
+
+ # Uppercase name to adhere to gammalib convention
+ Name = gammalib.toupper(name)
+
+ # Write maps to Fits
+ fhdu = fmap.write(fits, Name + ' FLUX')
+ self._write_hdu_keywords(fhdu, is_flux=True)
+ errhdu = errmap.write(fits, Name + ' FLUX ERROR')
+ self._write_hdu_keywords(errhdu, is_flux=True)
+
+ # If requested write TS map to fits
+ if self['calc_ts'].boolean():
+ tshdu = tsmap.write(fits, Name + ' TS')
+ self._write_hdu_keywords(tshdu)
+
+ # If requested write upper limit map to fits
+ if self['calc_ulim'].boolean():
+ ulhdu = ulmap.write(fits, Name + ' FLUX UPPER LIMIT')
+ self._write_hdu_keywords(ulhdu, is_flux=True)
+
+ # Return
+ return fits
+
+ def _get_skymap(self, name, quantity):
+ """
+ Fetches skymap from FITS container
+
+ Parameters
+ ----------
+ name : str
+ Source name
+ quantity : str
+ Quantity
+
+ Returns
+ -------
+ skymap : `~gammalib.GSkyMap`
+ Skymap
+
+ Raises
+ ------
+ NameError
+ """
+
+ # Initialise skymap object
+ skymap = None
+
+ # Proceed only if fits has been filled
+ if self._fits != None:
+
+ # Check that the name is in the list of target sources
+ if name in self._srcnames:
+
+ # Uppercase name
+ Name = gammalib.toupper(name)
+
+ # Assemble HDU name
+ hduname = Name + ' ' + quantity
+
+ # Try to fetch HDU
+ try:
+ hdu = self._fits[hduname]
+ # Convert to GSkyMap
+ skymap = gammalib.GSkyMap(hdu)
+ # Catch exception if HDU does not exist
+ except:
+ msg = 'HDU "' + hduname + '" not found in FITS container.'
+ raise RuntimeError(msg)
+
+ # ... otherwise throw name error
+ else:
+ print('ERROR: Source "' + name + '" not found in list of target sources.')
+ raise NameError(name)
+
+ # Return
+ return skymap
+
+ # Public methods
+ def run(self):
+ """
+ Run the script
+ """
+ # Switch screen logging on in debug mode
+ if self._logDebug():
+ self._log.cout(True)
+
+ # Get parameters
+ self._get_parameters()
+
+ # Write input observation container into logger
+ self._log_observations(gammalib.NORMAL, self.obs(), 'Input observation')
+
+ # Adjust model parameters based on input user parameters
+ self._adjust_model_pars()
+
+ # Compute number of pixels of output map
+ npix = self._create_map().npix()
+
+ # If more than a single thread is requested then use multiprocessing
+ if self._nthreads > 1:
+
+ # Compute values in pixels
+ args = [(self, '_pixel_analysis', i)
+ for i in range(npix)]
+ poolresults = mputils.process(self._nthreads, mputils.mpfunc, args)
+
+ # Construct results
+ results = []
+ for i in range(npix):
+ results.append(poolresults[i][0])
+ self._log_string(gammalib.TERSE, poolresults[i][1]['log'], False)
+
+ # Otherwise loop over pixels and run the pixel analysis
+ else:
+ results = []
+ for i in range(npix):
+ results.append(self._pixel_analysis(i))
+
+ # Fill output Fits
+ self._fits = self._fill_fits(results)
+
+ # Return
+ return
+
+ def save(self):
+ """
+ Save maps to Fits flie
+ """
+ # Write header
+ self._log_header1(gammalib.TERSE, 'Save maps')
+
+ # Continue only if FITS file is valid
+ if self._fits != None:
+ # Get outmap parameter
+ outfile = self['outfile'].filename()
+
+ # Log file name
+ self._log_value(gammalib.NORMAL, 'Output file', outfile.url())
+
+ # Save spectrum
+ self._fits.saveto(outfile, self['clobber'].boolean())
+
+ # Return
+ return
+
+ def exclusion_map(self, object=None):
+ """
+ Return and optionally set the exclusion regions map
+
+ Parameters
+ ----------
+ object : `~gammalib.GSkyRegion` or `~gammalib.GSkyMap` or `~gammalib.GFilename`
+ Exclusion regions object
+
+ Returns
+ -------
+ region : `~gammalib.GSkyRegionMap`
+ Exclusion regions map
+ """
+ # If a regions object is provided then set the regions
+ if object is not None:
+ self._excl_reg_map = gammalib.GSkyRegionMap(object)
+
+ # Return
+ return self._excl_reg_map
+
+ def fits(self):
+ """
+ Return copy of the fits container
+
+ Returns
+ -------
+ fits : `~gammalib.GFits`
+ FITS file containing the maps
+ """
+ # Return
+ return self._fits.copy()
+
+ def flux(self, name):
+ """
+ Return flux skymap
+
+ Parameters
+ ----------
+ name : str
+ Source name
+
+ Returns
+ -------
+ skymap : `~gammalib.GSkyMap`
+ Flux skymap
+ """
+ # Get flux skymap
+ skymap = self._get_skymap(name, 'FLUX')
+
+ # Return flux sky map
+ return skymap
+
+ def flux_error(self, name):
+ """
+ Return flux error skymap
+
+ Parameters
+ ----------
+ name : str
+ Source name
+
+ Returns
+ -------
+ skymap : `~gammalib.GSkyMap`
+ Flux error skymap
+ """
+ # Get flux error sky map
+ skymap = self._get_skymap(name, 'FLUX ERROR')
+
+ # Return flux error sky map
+ return skymap
+
+ def ts(self, name):
+ """
+ Return TS skymap
+
+ Parameters
+ ----------
+ name : str
+ Source name
+
+ Returns
+ -------
+ skymap : `~gammalib.GSkyMap`
+ TS skymap
+ """
+ # Check that TS computation is requested
+ if self['calc_ts'].boolean():
+ skymap = self._get_skymap(name, 'TS')
+
+ # ... otherwise raise error
+ else:
+ msg = 'TS computation not requested. Change user parameter ' \
+ '"calc_ts" to True to obtain TS.'
+ raise RuntimeError(msg)
+
+ # Return TS map
+ return skymap
+
+ def ulimit(self, name):
+ """
+ Return flux upper limit skymap
+
+ Parameters
+ ----------
+ name : str
+ Source name
+
+ Returns
+ -------
+ skymap : `~gammalib.GSkyMap`
+ Flux upper limit skymap
+ """
+ # Check that upper limit computation is requested
+ if self['calc_ulim'].boolean():
+ skymap = self._get_skymap(name, 'FLUX UPPER LIMIT')
+
+ # ... otherwise raise error
+ else:
+ msg = 'Upper limit computation not requested. Change user parameter ' \
+ '"calc_ulimit" to True to obtain upper limit.'
+ raise RuntimeError(msg)
+
+ # Return upper limit map
+ return skymap
+
+
+# ======================== #
+# Main routine entry point #
+# ======================== #
+if __name__ == '__main__':
+
+ # Create instance of application
+ app = csscs(sys.argv)
+
+ # Execute application
+ app.execute()
diff --git a/cscripts/obsutils.py b/cscripts/obsutils.py
index 2a1c86b..e80052b 100755
--- a/cscripts/obsutils.py
+++ b/cscripts/obsutils.py
@@ -745,7 +745,7 @@ def get_stacked_obs(cls, obs, nthreads=0):
# ================================ #
# Get On/Off observation container #
# ================================ #
-def get_onoff_obs(cls, obs, nthreads=0):
+def get_onoff_obs(cls, obs, nthreads=0, ra = None, dec = None, srcname = ''):
"""
Create On/Off observations container from given observations
@@ -757,6 +757,12 @@ def get_onoff_obs(cls, obs, nthreads=0):
Observation container
nthreads : str, optional
Number of parallel processes for On/Off spectra computation (0=all available CPUs)
+ ra : float, optional
+ R.A. of source region centre
+ dec : float, optional
+ Dec. of source region centre
+ srcname : str, optional
+ Source name
Returns
-------
@@ -767,21 +773,16 @@ def get_onoff_obs(cls, obs, nthreads=0):
if cls._logExplicit():
cls._log.header3('Creating On/Off observations')
- # Initialise inmodel, srcname, inexclusion and use_model_bkg
+ # Initialise inmodel and use_model_bkg
inmodel = 'NONE'
- srcname = ''
- inexclusion = 'NONE'
use_model_bkg = True
- # Set inmodel, srcname, inexclusion and use_model_bkg if they are available
+ # Set inmodel, srcname, and use_model_bkg if they are available
if cls.has_par('inmodel') and obs.models().size() == 0:
if cls['inmodel'].is_valid():
inmodel = cls['inmodel'].value()
- if cls.has_par('srcname'):
+ if srcname == '' and cls.has_par('srcname'):
srcname = cls['srcname'].value()
- if cls.has_par('inexclusion'):
- if cls['inexclusion'].is_valid():
- inexclusion = cls['inexclusion'].value()
if cls.has_par('use_model_bkg'):
use_model_bkg = cls['use_model_bkg'].boolean()
@@ -789,19 +790,25 @@ def get_onoff_obs(cls, obs, nthreads=0):
phagen = cscripts.csphagen(obs)
phagen['inmodel'] = inmodel
phagen['srcname'] = srcname
- phagen['inexclusion'] = inexclusion
phagen['emin'] = cls['emin'].real()
phagen['emax'] = cls['emax'].real()
phagen['enumbins'] = cls['enumbins'].integer()
phagen['ebinalg'] = 'LOG'
phagen['srcshape'] = cls['srcshape'].string()
- phagen['coordsys'] = cls['coordsys'].string()
- if cls['coordsys'].string() == 'CEL':
- phagen['ra'] = cls['xref'].real()
- phagen['dec'] = cls['yref'].real()
- elif cls['coordsys'].string() == 'GAL':
- phagen['glon'] = cls['xref'].real()
- phagen['glat'] = cls['yref'].real()
+ # User has specified custom centre for the source region
+ if ra != None and dec != None:
+ phagen['coordsys'] = 'CEL'
+ phagen['ra'] = ra
+ phagen['dec'] = dec
+ # Otherwise use default in class
+ else:
+ phagen['coordsys'] = cls['coordsys'].string()
+ if cls['coordsys'].string() == 'CEL':
+ phagen['ra'] = cls['xref'].real()
+ phagen['dec'] = cls['yref'].real()
+ elif cls['coordsys'].string() == 'GAL':
+ phagen['glon'] = cls['xref'].real()
+ phagen['glat'] = cls['yref'].real()
if cls['srcshape'].string() == 'CIRCLE':
phagen['rad'] = cls['rad'].real()
phagen['bkgmethod'] = cls['bkgmethod'].string()
@@ -818,13 +825,37 @@ def get_onoff_obs(cls, obs, nthreads=0):
phagen['debug'] = cls['debug'].boolean()
phagen['nthreads'] = nthreads
- # Pipe exclusion map
+ # Set exclusion map
+ # Initialise exclusion map flag to False
+ use_excl_map = False
+ # Initialise inexclusion par flag to False
+ use_inexclusion = False
+ # Do we have valid exclusion map in memory?
if hasattr(cls, 'exclusion_map'):
exclusion_map = cls.exclusion_map()
if exclusion_map is not None:
+ # Set use exclusion map flag to True
+ use_excl_map = True
+ # Set exclusion map
phagen.exclusion_map(exclusion_map)
-
- # Run csphagen
+ # If we do not have valid exclusion map in memory ...
+ if not use_excl_map:
+ # ... do we have an inxeclusion parameter?
+ if cls.has_par('inexclusion'):
+ # If the inexclusion parameter is valid
+ if cls['inexclusion'].is_valid():
+ # Set use inexclusion flag to True
+ use_inexclusion = True
+ # Set inexclusion parameter
+ inexclusion = cls['inexclusion'].value()
+ phagen['inexclusion'] = inexclusion
+ # If there is no valid exclusion map in memory
+ # nor valid inexclusion parameter
+ if not use_excl_map and not use_inexclusion:
+ # Set inexclusion for csphagen to None
+ phagen['inexclusion'] = 'NONE'
+
+ # Run csphagen
phagen.run()
# Clone resulting observation container
diff --git a/dev/codegen.py b/dev/codegen.py
index c5f8dc9..41627fd 100755
--- a/dev/codegen.py
+++ b/dev/codegen.py
@@ -18,12 +18,12 @@
# along with this program. If not, see .
#
# ==========================================================================
+from __future__ import print_function
import os
import sys
-import glob
-import commands
import fileinput
from datetime import date
+from builtins import input
import gammalib
@@ -47,7 +47,7 @@ def confirm(text):
# Confirmation loop
waiting = True
while waiting:
- confirmation = str(raw_input(text+' (y/n): '))
+ confirmation = str(input(text+' (y/n): '))
if confirmation == 'q':
sys.exit()
elif confirmation == 'y':
@@ -87,7 +87,7 @@ def response(text, confirm_response=False):
# Get response from input
waiting = True
while waiting:
- response = str(raw_input('%s: ' % text))
+ response = str(input('%s: ' % text))
if response == 'q':
sys.exit()
else:
@@ -275,13 +275,13 @@ def add_ctool(name, tokens, baseclass):
if 'libctools_la_LIBADD' in line.replace(' ', ''):
last = line[-2]
line = line.replace(line, line+insertline2+last+'\n')
- print line,
+ print(line,end=''),
# Update Python module
for line in fileinput.FileInput('pyext/ctools/tools.i',inplace=1):
if '%include "ctbin.i"' in line:
print('%%include "%s.i"' % (name))
- print line,
+ print(line,end=''),
# Update unit test
for line in fileinput.FileInput('test/test_python_ctools.py',inplace=1):
@@ -289,25 +289,25 @@ def add_ctool(name, tokens, baseclass):
print('import test_%s' % (name))
elif 'test_ctbin.Test()' in line:
print(' test_%s.Test(),' % (name))
- print line,
+ print(line,end=''),
# Update export of unit test
for line in fileinput.FileInput('pyext/Makefile.am',inplace=1):
if '$(top_srcdir)/test/test_ctbin.py' in line:
print(' $(top_srcdir)/test/test_%s.py \\' % (name))
- print line,
+ print(line,end=''),
# Update configure.ac
for line in fileinput.FileInput('configure.ac',inplace=1):
if 'src/ctbin/Makefile' in line:
print(' src/%s/Makefile' % (name))
- print line,
+ print(line,end=''),
# Update reference manual index file
for line in fileinput.FileInput('doc/source/users/reference_manual/index.rst',inplace=1):
if 'ctbin --- Generates counts cube ' in line:
print(' %s --- ToDo: Describe what tool is doing <%s>' % (name, name))
- print line,
+ print(line,end=''),
# Return
return
@@ -356,7 +356,7 @@ def add_cscript(name, tokens, baseclass):
print(' "%s",' % (name))
elif 'from cscripts.csworkflow import csworkflow' in line:
print('from cscripts.%s import %s' % (name, name))
- print line,
+ print(line,end=''),
# Update cscripts/Makefile.am file
for line in fileinput.FileInput('cscripts/Makefile.am',inplace=1):
@@ -368,7 +368,7 @@ def add_cscript(name, tokens, baseclass):
print(' %s \\' % (name))
elif '$(top_srcdir)/test/test_csworkflow.py' in line:
print(' $(top_srcdir)/test/test_%s.py \\' % (name))
- print line,
+ print(line,end=''),
# Update test/test_python_cscripts.py file
for line in fileinput.FileInput('test/test_python_cscripts.py',inplace=1):
@@ -376,13 +376,13 @@ def add_cscript(name, tokens, baseclass):
print('import test_%s' % (name))
elif 'test_csworkflow.Test()' in line:
print(' test_%s.Test(),' % (name))
- print line,
+ print(line,end=''),
# Update reference manual index file
for line in fileinput.FileInput('doc/source/users/reference_manual/index.rst',inplace=1):
if 'csbkgmodel --- Generates background model for 3D analysis ' in line:
print(' %s --- ToDo: Describe what script is doing <%s>' % (name, name))
- print line,
+ print(line,end=''),
# Return
return
@@ -414,7 +414,7 @@ def ctool_menu():
waiting = True
choice = 1
while waiting:
- choice = str(raw_input('Enter your choice: '))
+ choice = str(input('Enter your choice: '))
if choice == '1' or choice == '2' or choice == '3':
waiting = False
if choice == '1':
@@ -480,7 +480,7 @@ def cscript_menu():
waiting = True
choice = 1
while waiting:
- choice = str(raw_input('Enter your choice: '))
+ choice = str(input('Enter your choice: '))
if choice == '1' or choice == '2' or choice == '3':
waiting = False
if choice == '1':
@@ -535,7 +535,7 @@ def main_menu():
# Wait for the input
waiting = True
while waiting:
- choice = str(raw_input('Enter your choice: '))
+ choice = str(input('Enter your choice: '))
if choice == '1' or choice == '2' or choice == 'q':
waiting = False
diff --git a/doc/source/conf.py b/doc/source/conf.py
index 1f8adee..ff62dfd 100755
--- a/doc/source/conf.py
+++ b/doc/source/conf.py
@@ -38,6 +38,8 @@ except:
try:
import nbsphinx
extensions += ['nbsphinx','IPython.sphinxext.ipython_console_highlighting']
+ # Disable execution of notebooks at make doc step
+ nbsphinx_execute = 'never'
except:
print('WARNING: Python package `nbsphinx` not found.\n'
'WARNING: Please install it to get fully-functional Sphinx docs.\n'
diff --git a/doc/source/users/reference_manual/cslightcrv.rst b/doc/source/users/reference_manual/cslightcrv.rst
index c2ff529..5e759f7 100755
--- a/doc/source/users/reference_manual/cslightcrv.rst
+++ b/doc/source/users/reference_manual/cslightcrv.rst
@@ -62,9 +62,11 @@ General parameters
Instrumental response function.
``(inexclusion = NONE) [file]``
- Optional FITS file containing a WCS map in the first hdu that defines sky
- regions not to be used for background estimation in On/Off analysis (where
- map value != 0).
+ Optional FITS file containing a WCS map that defines sky regions
+ not to be used for background estimation (where map value !=
+ 0). If the file contains multiple extensions the user may specify
+ which one to use. Otherwise, the extention ``EXCLUSION`` will be
+ used if available, or else the primary extension will be used.
``(edisp = no) [boolean]``
Applies energy dispersion to response computation (for ``3D`` analysis only,
diff --git a/doc/source/users/reference_manual/csphagen.rst b/doc/source/users/reference_manual/csphagen.rst
index 61a5659..296b10d 100644
--- a/doc/source/users/reference_manual/csphagen.rst
+++ b/doc/source/users/reference_manual/csphagen.rst
@@ -25,9 +25,13 @@ respect to the pointing direction that are smaller than the value specified by
the ``maxoffset`` parameter. If less than ``bkgregmin`` reflected regions can be
found because the offset angle between source and pointing direction is too small,
the observation will be skipped. Regions to be excluded for background
-determination can be specified using a mask file that is specified using the
-``inexclusion`` parameter. A mask file is a sky map where all pixel values that
-differ from zero will be used as exclusion region.
+determination can be specified using a FITS mask file that is specified using the
+``inexclusion`` parameter. A mask is a sky map where all pixel values that
+differ from zero will be used as exclusion region. If the FITS file
+contains multiple extensions and the user does not specify which one
+to use, the extention ``EXCLUSION`` will be used if available (e.g.,
+if you use a skymap generated by :ref:`ctskymap`).
+Otherwise the primary extension will be used.
Alternatively, if ``bkgmethod=CUSTOM`` is specified, the source and background
regions will be specified using the ``srcregfile`` and ``bkgregfile`` parameters,
@@ -84,8 +88,11 @@ General parameters
Instrument response function.
``(inexclusion = NONE) [file]``
- Optional FITS file containing a WCS map in the first extension that defines
- sky regions not to be used for background estimation (where map value != 0).
+ Optional FITS file containing a WCS map that defines sky regions
+ not to be used for background estimation (where map value !=
+ 0). If the file contains multiple extensions the user may specify
+ which one to use. Otherwise, the extention ``EXCLUSION`` will be
+ used if available, or else the primary extension will be used.
``outobs [file]``
Output observation definition XML file.
@@ -240,4 +247,7 @@ Standard parameters
Related tools or scripts
------------------------
-None
+:doc:`ctskymap`
+:doc:`csphasecrv`
+:doc:`cslightcrv`
+
diff --git a/doc/source/users/reference_manual/csphasecrv.rst b/doc/source/users/reference_manual/csphasecrv.rst
index c7b4b7a..0020085 100755
--- a/doc/source/users/reference_manual/csphasecrv.rst
+++ b/doc/source/users/reference_manual/csphasecrv.rst
@@ -59,9 +59,11 @@ General parameters
Instrumental response function.
``(inexclusion = NONE) [file]``
- Optional FITS file containing a WCS map in the first hdu that defines sky
- regions not to be used for background estimation in On/Off analysis (where
- map value != 0).
+ Optional FITS file containing a WCS map that defines sky regions
+ not to be used for background estimation (where map value !=
+ 0). If the file contains multiple extensions the user may specify
+ which one to use. Otherwise, the extention ``EXCLUSION`` will be
+ used if available, or else the primary extension will be used.
``(edisp = no) [boolean]``
Applies energy dispersion to response computation (for ``3D`` analysis only,
diff --git a/doc/source/users/reference_manual/csscs.rst b/doc/source/users/reference_manual/csscs.rst
new file mode 100644
index 0000000..4357f9a
--- /dev/null
+++ b/doc/source/users/reference_manual/csscs.rst
@@ -0,0 +1,243 @@
+.. _csscs:
+
+csscs
+=====
+
+Performs spectral component separation.
+
+
+Synopsis
+--------
+
+This script performs a spectral component separation, that is, produces a flux
+skymap of one or multiple sources by running a likelihood analysis over multiple
+adjacent circular regions of interest (ROI) based on prior knowledge of the
+sources' spectra. The centre of the ROIs is displaced to coincide with the
+centre of each pixel in the output flux map, while the radius is set through
+the user parameter ``rad``.
+
+The model fit per ROI is performed using :doc:`ctlike`, and only the normalisations
+of the model components are treated as free parameters. The script provides the
+possibility to fix sources other than the source(s) of interest (hidden
+parameter ``fix_srcs``) or to fix the normalisation of the background model
+component(s) (hidden parameter ``fix_bkg``).
+
+The script computes the source flux and its uncertainty in each ROI/map pixel,
+as well as the significance of the source detection (for faster execution the
+significance computation can be deactivated using the hidden parameter
+``calc_ts``). Optionally, the script also computes an upper flux limit that is
+particularly useful in case that the source is not significantly detected within
+an ROI (hidden parameter ``calc_ulim``).
+
+The script accepts in input event lists, binned data, or observation definition
+XML files. Only data within an energy interval spanned by ``emin`` and ``emax`` are
+considered. For event lists two analysis methods are proposed: unbinned or
+On/Off.
+
+For the On/Off method :doc:`csphagen` is used to prepare On/Off observations for
+every ROI analysed. In On/Off mode the user is required to provide an exclusion
+map to avoid using regions of significant gamma-ray emission in the evaluation
+of the background (exclusion maps can be generate using :doc:`ctskymap`). Furthemore,
+On/Off analysis including sources other than the source(s) of interest is not
+supported, and if more than one source of interest is present the response will
+be calculated based on the hypothesis that emission from the sources of interest
+is uniform over each ROI.
+
+:ref:`csscs` generates a FITS file with empty primary extension. Additional
+extensions provide for every source of interest a skymap of flux, flux error,
+and, if requested, detection signficance and flux upper limits.
+
+General parameters
+------------------
+
+``inobs [file]``
+ Input event list, counts cube or observation definition XML file.
+
+``inmodel [file]``
+ Input model XML file.
+
+``srcnames [string]``
+ Semicolon-separated list of names of the sources in the source model XML
+ file which should be considered for the spectral component separation.
+
+``expcube [file]``
+ Input exposure cube file.
+
+``psfcube [file]``
+ Input PSF cube file.
+
+``edispcube [file]``
+ Input energy dispersion cube file.
+
+``bkgcube [file]``
+ Input background cube file.
+
+``caldb [string]``
+ Calibration database.
+
+``irf [string]``
+ Instrument response function.
+
+``inexclusion [file]``
+ FITS file containing a WCS map that defines sky regions not to be used for
+ background estimation (where map value != 0). If the file contains multiple
+ extensions the user may specify which one to use. Otherwise, the extention
+ ``EXCLUSION`` will be used if available, or else the primary extension will
+ be used.
+
+``(edisp = no) [boolean]``
+ Apply energy dispersion to response computation?
+
+``outfile [file]``
+ Output file.
+
+``nxpix [integer]``
+ Size of the Right Ascension / Galactic longitude axis (in pixels).
+
+``nypix [integer]``
+ Size of the Declination / Galactic latitude axis (in pixels).
+
+``binsz [real]``
+ Pixel size (in degrees/pixel).
+
+``coordsys [string]``
+ Coordinate system (CEL - celestial, GAL - galactic).
+
+``proj [string]``
+ Projection method.
+
+``xref [real]``
+ Right Ascension / Galactic longitude of image centre (J2000, in degrees).
+
+``yref [real]``
+ Declination / Galactic latitude of image centre (J2000, in
+ degrees).
+
+``rad [real]``
+ Radius of region of interest for component separation (deg). Sets the
+ correlation scale between neighbour pixels in the output maps. Must be at
+ least sqrt(2) times ``binsz`` for full coverage of input data.
+
+``emin [real]``
+ Minimum energy (in TeV).
+
+``emax [real]``
+ Maximum energy (in TeV).
+
+``method [string]``
+ For input event lists selects between ``UNBINNED`` analysis (3D spatial/energy
+ likelihood without binning) and ``ONOFF`` analysis (1D likelihood with
+ background from Off regions).
+
+``(statistic = DEFAULT) [string]``
+ Optimization statistic. ``DEFAULT`` uses the default statistic for all
+ observations, which is ``CSTAT`` or the statistic specified in the
+ observation definition XML file. ``CSTAT`` uses the C statistic for all
+ observations, ``WSTAT`` uses the W statistic for On/Off observations, and
+ ``CHI2`` uses the Chi squared statistic for binned or stacked observations.
+
+``(calc_ts = yes) [boolean]``
+ Compute TS value for each map bin?
+
+``(calc_ulim = no) [boolean]``
+ Compute upper limit for each map bin?
+
+``(fix_srcs = yes) [boolean]``
+ Fix other sky model parameters?
+
+``(fix_bkg = no) [boolean]``
+ Fix background model parameters?
+
+On/Off parameters
+-------------------
+
+``enumbins [integer]``
+ Number of energy bins.
+
+``(bkgmethod = REFLECTED) [string]``
+ Method for background estimation. ``REFLECTED:`` background evaluated in regions
+ with the same shape as source region reflected w.r.t. pointing direction for
+ each observation.
+
+``(srcshape = CIRCLE) [string]``
+ Shape of the source region.
+ ``CIRCLE``: circular region around given position.
+
+``(bkgregmin = 2) [integer]``
+ Minimum number of background regions that are required for an
+ observation. If this number of background regions is not available the
+ observation is skipped.
+
+``(bkgregskip = 1) [integer]``
+ Number of background regions that should be skipped next to the On regions.
+ Typically, one region is skipped so that the Off regions are taken sufficiently
+ distant from the On region, but in some cases it may be useful to keep the
+ background regions next to the On region.
+
+``(use_model_bkg = yes) [boolean]``
+ Specifies whether the background model should be used for the computation
+ of the ``alpha`` parameter and the predicted background rate in the Off
+ region that is stored in the ``BACKRESP`` column of the Off spectrum when
+ using the ``ONOFF`` method.
+
+ If the parameter is set to ``no`` the background model is not used and the
+ background rate is assumed identical within the On and Off regions. This
+ is the classical IACT analysis method that is used when using reflected Off
+ regions. In that case the ``alpha`` parameter becomes independent of energy
+ and only reflects the ratio between the solid angles of the On and Off
+ regions. The ``BACKRESP`` column in the Off spectrum will be filled with
+ the solid angle of the On region. The data need to be fitted with the ``wstat``
+ statistic, fitting with ``cstat`` will not work.
+
+``(maxoffset = 4.0) [real]``
+ Maximum offset in degrees of source from camera center to accept the
+ observation for On/Off analysis.
+
+``(etruemin = 0.01) [real]``
+ Minimum true energy to evaluate instrumental response in On/Off analysis (TeV).
+
+``(etruemax = 0.01) [real]``
+ Maximum true energy to evaluate instrumental response in On/Off analysis (TeV).
+
+``(etruebins = 30) [integer]``
+ Number of bins per decade for true energy bins to evaluate instrumental
+ response in On/Off analysis.
+
+Standard parameters
+-------------------
+
+``(nthreads = 0) [integer]``
+ Number of parallel processes (0=use all available CPUs).
+
+``(chatter = 2) [integer]``
+ Verbosity of the executable:
+ ``chatter = 0``: no information will be logged
+
+ ``chatter = 1``: only errors will be logged
+
+ ``chatter = 2``: errors and actions will be logged
+
+ ``chatter = 3``: report about the task execution
+
+ ``chatter = 4``: detailed report about the task execution
+
+``(clobber = yes) [boolean]``
+ Specifies whether an existing output file should be overwritten.
+
+``(debug = no) [boolean]``
+ Enables debug mode. In debug mode the executable will dump any log file
+ output to the console.
+
+``(mode = ql) [string]``
+ Mode of automatic parameters (default is ``ql``, i.e. "query and learn").
+
+``(logfile = csscs.log) [string]``
+ Name of log file.
+
+
+Related tools or scripts
+------------------------
+
+:doc:`ctlike`
+:doc:`ctskymap`
+:doc:`csphagen`
diff --git a/doc/source/users/reference_manual/index.rst b/doc/source/users/reference_manual/index.rst
index 9159f89..14c113d 100755
--- a/doc/source/users/reference_manual/index.rst
+++ b/doc/source/users/reference_manual/index.rst
@@ -61,6 +61,7 @@ cscripts
csresmap --- Generates residual map
csresspec --- Generates residual spectrum
csroot2caldb --- Creates a caldb entry from a ROOT file
+ csscs --- Performs spectral component separation
cssens --- Computes CTA sensitivity
csspec --- Computes spectral points
cssrcdetect --- Detects sources in sky map
@@ -87,3 +88,4 @@ Scripts to manage an IACT database
csiactobs --- Generates observation definition file for IACT data from observation IDs
csfindobs --- Generates a list of IACT observation IDs
csiactcopy --- Copies IACT data from one location to another
+
diff --git a/doc/source/users/tutorials/howto/howto_scs.ipynb b/doc/source/users/tutorials/howto/howto_scs.ipynb
new file mode 100644
index 0000000..7da1ba0
--- /dev/null
+++ b/doc/source/users/tutorials/howto/howto_scs.ipynb
@@ -0,0 +1,995 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# How to perform spectral component separation?"
+ ]
+ },
+ {
+ "cell_type": "raw",
+ "metadata": {},
+ "source": [
+ "
"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "In this tutorial you will learn how to use spectral component separation to disentangle the morphological properties of overlapping sources.\n",
+ "\n",
+ "As usual we start by importing the gammalib, ctools, and cscripts Python modules."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import gammalib\n",
+ "import ctools\n",
+ "import cscripts"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "We also import the matplotlib package for plotting."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "%matplotlib inline\n",
+ "import matplotlib.pyplot as plt"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Simulated dataset\n",
+ "\n",
+ "For the tutorial we will simulate a small CTA dataset. We start by defining the Instrument Response Functions and energy range that will be used all along."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "caldb = 'prod2'\n",
+ "irf = 'South_5h'\n",
+ "emin = 0.1 # TeV\n",
+ "emax = 160.0 # TeV"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "We will simulate an observation of the region around the famous sources HESS J1825-137 and HESS J1826-130 based on a very simple sky model. We will consider two pointings of a few hours wobbling around the sources' position.\n",
+ "\n",
+ "We start by writing the pointing directions and times to an ASCII file."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "pointing_file = 'pointings.txt'\n",
+ "\n",
+ "# open file\n",
+ "f = open(pointing_file, 'w')\n",
+ "# header\n",
+ "f.write('id,ra,dec,tmin,tmax\\n')\n",
+ "# pointings\n",
+ "f.write('0001,275.65,-13.78,0.,10800.\\n')\n",
+ "f.write('0002,277.25,-13.78,11000.,21800.\\n')\n",
+ "\n",
+ "# close file\n",
+ "f.close()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Then we use the csobsdef script to convert the list of pointings into an observation definition XML file."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "obsdef = cscripts.csobsdef()\n",
+ "obsdef['inpnt'] = pointing_file\n",
+ "obsdef['caldb'] = caldb\n",
+ "obsdef['irf'] = irf\n",
+ "obsdef['emin'] = emin\n",
+ "obsdef['emax'] = emax\n",
+ "obsdef['rad'] = 5.\n",
+ "obsdef.run()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Finally we use ctobssim to perform the observation simulation."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "obssim = ctools.ctobssim(obsdef.obs())\n",
+ "obssim['inmodel'] = '$CTOOLS/share/models/hess1825_26.xml'\n",
+ "\n",
+ "obssim.run()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Skymap inspection and preliminary likelihood fit\n",
+ "\n",
+ "*This section showcases a possible path to get to perform a spectral component separation. If you are here because you have an application in which you know the spectrum of your sources of interest, and you want just to learn how to perform the spectral component separation, please jump to the next section.*\n",
+ "\n",
+ "As usual a great way to inspect the data is making a skymap using ctskymap."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "skymap = ctools.ctskymap(obssim.obs())\n",
+ "skymap['emin'] = emin\n",
+ "skymap['emax'] = emax\n",
+ "skymap['nxpix'] = 200\n",
+ "skymap['nypix'] = 200\n",
+ "skymap['binsz'] = 0.02\n",
+ "skymap['proj'] = 'TAN'\n",
+ "skymap['coordsys'] = 'CEL'\n",
+ "skymap['xref'] = 276.45\n",
+ "skymap['yref'] = -13.78\n",
+ "skymap['bkgsubtract'] = 'NONE'\n",
+ "skymap.run()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Below we inspect the skymap by using matpltolib."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "# Slightly smooth the map for display to suppress statistical fluctuations\n",
+ "skymap.skymap().smooth('GAUSSIAN',0.1)\n",
+ "\n",
+ "fig = plt.figure()\n",
+ "ax = plt.subplot()\n",
+ "plt.imshow(skymap.skymap().array(),origin='lower',\n",
+ " extent=[276.45+0.02*100,276.45-0.02*100,-13.78-0.02*100,-13.78+0.02*100])\n",
+ " # boundaries of the coord grid\n",
+ "ax.set_xlabel('R.A. (deg)')\n",
+ "ax.set_ylabel('Dec (deg)')\n",
+ "cbar = plt.colorbar()\n",
+ "cbar.set_label('Counts')"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "A large blob of emission appears at the center of the map. It coincides with the source HESS J1825-137. Past observations have indicated that HESS J1826-130 has a harder spectrum than HESS J1825-137. Let's peek at a skymap above 10 TeV."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "skymap = ctools.ctskymap(obssim.obs())\n",
+ "skymap['emin'] = 10. #TeV\n",
+ "skymap['emax'] = emax\n",
+ "skymap['nxpix'] = 200\n",
+ "skymap['nypix'] = 200\n",
+ "skymap['binsz'] = 0.02\n",
+ "skymap['proj'] = 'TAN'\n",
+ "skymap['coordsys'] = 'CEL'\n",
+ "skymap['xref'] = 276.45\n",
+ "skymap['yref'] = -13.78\n",
+ "skymap['bkgsubtract'] = 'NONE'\n",
+ "skymap.run()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 10,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "# Slightly smooth the map for display to suppress statistical fluctuations\n",
+ "skymap.skymap().smooth('GAUSSIAN',0.1)\n",
+ "\n",
+ "fig = plt.figure()\n",
+ "ax = plt.subplot()\n",
+ "plt.imshow(skymap.skymap().array(),origin='lower',\n",
+ " extent=[276.45+0.02*100,276.45-0.02*100,-13.78-0.02*100,-13.78+0.02*100])\n",
+ " # boundaries of the coord grid\n",
+ "ax.set_xlabel('R.A. (deg)')\n",
+ "ax.set_ylabel('Dec (deg)')\n",
+ "cbar = plt.colorbar()\n",
+ "cbar.set_label('Counts')"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Indeed, emission above 10 TeV is concentrated on a spot North of the low-energy blob coincident with the position of HESS J1826-130. How can we disentangle the morphology of the two sources based on our observations?\n",
+ "\n",
+ "One of the traditional techniques to disentangle multiple overlapping sources is using a 3D likelihood analysis based on some guess of the sources' morphology and spectra. However, this often implies to choose a simplistic (analytical) model for the sources' morphology. Below we will test another approach, that consists in determining the morphology from the data using some knowledge of their spectra.\n",
+ "\n",
+ "For our exercise we guess the spectra of the two components via a preliminary likelihood analysis. For this we use a tentative sky model inspired by the skymaps we have inspected. We include in the model two disks with centre and extension eye-balled from the low-energy blob and high-energy spot. Their parameters are not fit to the data here for the sake of a shorter execution time. The morphology will be determined from the data later. However, at a cost of a longer computing time you could fit the spatial model parameters in this step.\n",
+ "\n",
+ "For both components we will assume a power-law spectrum, with and index of 2.5 for the soft component and an index of 1.5 for the hard component, and a flux at 1 TeV approximately 10% and 1% of the Crab nebula, respectively. These spectral parameters are going to be fit to the data."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 11,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ " >"
+ ]
+ },
+ "execution_count": 11,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# model container\n",
+ "models = gammalib.GModels()\n",
+ "\n",
+ "# low-energy blob\n",
+ "centre = gammalib.GSkyDir()\n",
+ "centre.radec_deg(276.5,-13.75)\n",
+ "spatial = gammalib.GModelSpatialRadialDisk(centre,0.5)\n",
+ "# free source centre\n",
+ "spatial['RA'].fix()\n",
+ "spatial['DEC'].fix()\n",
+ "spatial['Radius'].fix()\n",
+ "spectral = gammalib.GModelSpectralPlaw(4.e-18,-2.5,gammalib.GEnergy(1.,'TeV'))\n",
+ "source = gammalib.GModelSky(spatial,spectral)\n",
+ "source.name('HESS J1825-137')\n",
+ "models.append(source)\n",
+ "\n",
+ "# high-energy spot\n",
+ "centre = gammalib.GSkyDir()\n",
+ "centre.radec_deg(276.5,-13)\n",
+ "spatial = gammalib.GModelSpatialRadialDisk(centre,0.1)\n",
+ "# free source centre\n",
+ "spatial['RA'].fix()\n",
+ "spatial['DEC'].fix()\n",
+ "spatial['Radius'].fix()\n",
+ "spectral = gammalib.GModelSpectralPlaw(4.e-19,-1.5,gammalib.GEnergy(1.,'TeV'))\n",
+ "source = gammalib.GModelSky(spatial,spectral)\n",
+ "source.name('HESS J1826-130')\n",
+ "models.append(source)\n",
+ "\n",
+ "# instrumental background\n",
+ "# power law spectral correction with pivot energy at 1 TeV\n",
+ "spectral = gammalib.GModelSpectralPlaw(1, 0, gammalib.GEnergy(1, 'TeV'))\n",
+ "bkgmodel = gammalib.GCTAModelIrfBackground(spectral)\n",
+ "bkgmodel.name('Background')\n",
+ "bkgmodel.instruments('CTA')\n",
+ "# append to models\n",
+ "models.append(bkgmodel)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "We copy the simulated observations and append to them our initial sky model."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 12,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "obs = obssim.obs().copy()\n",
+ "obs.models(models)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "We are going to start with a stacked analysis. We bin the events, and then attach to the stacked observations the stacked response. Note that if the dataset is small it may be convenient to use an unbinned analysis in lieu of the stacked analysis for this step."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 13,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Bin events\n",
+ "cntcube = ctools.ctbin(obs)\n",
+ "cntcube['usepnt'] = False\n",
+ "cntcube['ebinalg'] = 'LOG'\n",
+ "cntcube['xref'] = 276.45\n",
+ "cntcube['yref'] = -13.78\n",
+ "cntcube['binsz'] = 0.02\n",
+ "cntcube['nxpix'] = 200\n",
+ "cntcube['nypix'] = 200\n",
+ "cntcube['enumbins'] = 40\n",
+ "cntcube['emin'] = emin\n",
+ "cntcube['emax'] = emax\n",
+ "cntcube['coordsys'] = 'CEL'\n",
+ "cntcube['proj'] = 'TAN'\n",
+ "cntcube.run()\n",
+ "\n",
+ "# Extract counts cube\n",
+ "cube = cntcube.cube()\n",
+ "\n",
+ "# Compute stacked response\n",
+ "response = cscripts.obsutils.get_stacked_response(obs,cube)\n",
+ "\n",
+ "# Copy stacked observations\n",
+ "stacked_obs = cntcube.obs().copy()\n",
+ "\n",
+ "# Append stacked response\n",
+ "stacked_obs[0].response(response['expcube'], response['psfcube'],response['bkgcube'])\n",
+ "\n",
+ "# Set stacked models\n",
+ "stacked_obs.models(response['models'])"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Now we can run the preliminary likelihood analysis in which the spectral parameters for the two sources are fit to the data."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 14,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "like = ctools.ctlike(stacked_obs)\n",
+ "like.run()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Let's check that the fit was successful."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 15,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "=== GOptimizerLM ===\n",
+ " Optimized function value ..: 122722.355\n",
+ " Absolute precision ........: 0.005\n",
+ " Acceptable value decrease .: 2\n",
+ " Optimization status .......: converged\n",
+ " Number of parameters ......: 18\n",
+ " Number of free parameters .: 6\n",
+ " Number of iterations ......: 6\n",
+ " Lambda ....................: 1e-09\n"
+ ]
+ }
+ ],
+ "source": [
+ "print(like.opt())"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "We also check the fitted models."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 16,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "=== GModels ===\n",
+ " Number of models ..........: 3\n",
+ " Number of parameters ......: 18\n",
+ "=== GModelSky ===\n",
+ " Name ......................: HESS J1825-137\n",
+ " Instruments ...............: all\n",
+ " Observation identifiers ...: all\n",
+ " Model type ................: ExtendedSource\n",
+ " Model components ..........: \"RadialDisk\" * \"PowerLaw\" * \"Constant\"\n",
+ " Number of parameters ......: 7\n",
+ " Number of spatial par's ...: 3\n",
+ " RA .......................: 276.5 deg (fixed,scale=1)\n",
+ " DEC ......................: -13.75 deg (fixed,scale=1)\n",
+ " Radius ...................: 0.5 [0.0002778,infty[ deg (fixed,scale=1)\n",
+ " Number of spectral par's ..: 3\n",
+ " Prefactor ................: 6.34330444443657e-18 +/- 3.01336043884925e-19 [0,infty[ ph/cm2/s/MeV (free,scale=4e-18,gradient)\n",
+ " Index ....................: -2.344118164095 +/- 0.0376367951224068 [10,-10] (free,scale=-2.5,gradient)\n",
+ " PivotEnergy ..............: 1000000 MeV (fixed,scale=1000000,gradient)\n",
+ " Number of temporal par's ..: 1\n",
+ " Normalization ............: 1 (relative value) (fixed,scale=1,gradient)\n",
+ " Number of scale par's .....: 0\n",
+ "=== GModelSky ===\n",
+ " Name ......................: HESS J1826-130\n",
+ " Instruments ...............: all\n",
+ " Observation identifiers ...: all\n",
+ " Model type ................: ExtendedSource\n",
+ " Model components ..........: \"RadialDisk\" * \"PowerLaw\" * \"Constant\"\n",
+ " Number of parameters ......: 7\n",
+ " Number of spatial par's ...: 3\n",
+ " RA .......................: 276.5 deg (fixed,scale=1)\n",
+ " DEC ......................: -13 deg (fixed,scale=1)\n",
+ " Radius ...................: 0.1 [0.0002778,infty[ deg (fixed,scale=1)\n",
+ " Number of spectral par's ..: 3\n",
+ " Prefactor ................: 2.36040613319893e-19 +/- 9.2386146949274e-20 [0,infty[ ph/cm2/s/MeV (free,scale=4e-19,gradient)\n",
+ " Index ....................: -1.6532558684395 +/- 0.144999501997818 [10,-10] (free,scale=-1.5,gradient)\n",
+ " PivotEnergy ..............: 1000000 MeV (fixed,scale=1000000,gradient)\n",
+ " Number of temporal par's ..: 1\n",
+ " Normalization ............: 1 (relative value) (fixed,scale=1,gradient)\n",
+ " Number of scale par's .....: 0\n",
+ "=== GCTAModelCubeBackground ===\n",
+ " Name ......................: BackgroundModel\n",
+ " Instruments ...............: CTA, HESS, MAGIC, VERITAS\n",
+ " Observation identifiers ...: all\n",
+ " Model type ................: \"PowerLaw\" * \"Constant\"\n",
+ " Number of parameters ......: 4\n",
+ " Number of spectral par's ..: 3\n",
+ " Prefactor ................: 1.24199768427314 +/- 0.0147414039983284 [0.01,100] ph/cm2/s/MeV (free,scale=1,gradient)\n",
+ " Index ....................: 0.103013198377256 +/- 0.00683960305372905 [-5,5] (free,scale=1,gradient)\n",
+ " PivotEnergy ..............: 1000000 MeV (fixed,scale=1000000,gradient)\n",
+ " Number of temporal par's ..: 1\n",
+ " Normalization ............: 1 (relative value) (fixed,scale=1,gradient)\n"
+ ]
+ }
+ ],
+ "source": [
+ "print(like.obs().models())"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "As guessed from the skymaps HESS J1826-130 is fainter than HESS J1825-137, but its spectrum is rather harder. We will use the values of the spectral indices obtained from this likelihood analysis to derive the source morphology below.\n",
+ "\n",
+ "However, we first check the fit residuals. Let's start by inspecting the spectral residuals using csresspec."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 17,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "resspec = cscripts.csresspec(like.obs())\n",
+ "resspec['algorithm'] = 'SIGNIFICANCE'\n",
+ "resspec['components'] = True\n",
+ "resspec['outfile'] = 'resspec.fits'\n",
+ "resspec.execute()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "We can use an example script to display the residuals."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 18,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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eXfeeSe7d+9m2rRpHDp0iJtuuomlS5fSsWPHautMACxfvpz33nuPxo0b8+CDDwLw+eefs3r1avr378/atWt96r5//3769OnDlClTuPPOO/nnP//JhAkT+M1vfsPNN9/MqFGjePzx2p0f1113Hc8++yytW7cmNTWVtm3b8v33jnfiW2+9lVGjRjF69GiefvppbrvtNl566SWvMhcvXszXX3/NRx99hKoyePBgli5dSr9+/XzqHirRHuY6G1gGnC4im0TkF6p6BLgVeB34CnhOVb+Mph5G4HjyMKZNezrsRZJmzZpl3oXh6mJavXo1ixYtYtSoUa7lLf/whz+Ql5fHxRdfzObNm9m6dStLlizhmmuuISsrC4AWLVq4ZP3pT39i165dPPnkk4gIq1evplOnTnTs2BGgloEYPHgwjRs3BqqnFT/jjDPIzs72ayDS09NdHkmvXr3YsGEDAO+//76rLU8ezoABA3jjjTeYPXs2w4cPr1a2bNkyRowY4ar73nvv+ZS5ePFiFi9ezFlnncXZZ5/N6tWriWa6oWiPYrrey/GF+AhEByA3IdJ911W8eRjeUpifd+lVLHzuGZ8yX3jhBRYtWmTeRYLg700/FvTt25ft27dTXl7OwoULKS8vZ/ny5aSlpZGTk8PBgwdRVY9pvgF69+7N8uXL2bFjBy1atPCYKtydJk2auP73dm6DBg04duyYa//gwYOu/9PS0ly6pKamVotleNMRHIalV69ePPjgg3z55ZfMnz/f67nucrylN7/rrru46aabvMqIJAkzkzoYEmHBoPqIr/kX/kZIzZs3z+ZfGNVYvXo1R48epWXLluzevZuTTjqJtLQ03n77bddQ7YKCAp577jnXmhHuXUwDBgxg3LhxDBw4kL1793LGGWewbt0615v9nDlzvLbtnj587dq1bNy4kdNPP52cnBxWrFjBsWPH+O677/joo4/8fo7zzjuPZ599FsDrPfu///u/3H///bRs2bLa8Z/85CfV6p5//vk+ZV566aU8/fTT7Nu3D4DNmze7Up1Hg6Q0EKo6X1WLMjMz461KvcNTAHzEuR18jpA679KrfMoMdIa3GZDkxxmD6NmzJ8OHD+eZZ54hNTWVwsJCSktLyc/Pp6SkhDPOOAOA7t27M378eC644AJ69OjBb3/722ryrr32Wm688UYGDx4MwN///ncGDBjA+eef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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "import sys\n",
+ "import os\n",
+ "sys.path.append(os.environ['CTOOLS']+'/share/examples/python/')\n",
+ "\n",
+ "from show_residuals import plot_residuals\n",
+ "plot_residuals('resspec.fits','',0)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "The model reproduces reasonably well the data spectrally (although not perfectly). We will also check the spatial residuals using csresmap."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 19,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "resmap = cscripts.csresmap(like.obs())\n",
+ "resmap['algorithm'] = 'SIGNIFICANCE'\n",
+ "resmap.run()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "We inspect the map to check the spatial residuals."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 20,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "# Slightly smooth the map for display to suppress statistical fluctuations\n",
+ "resid = resmap._resmap.copy()\n",
+ "resid.smooth('GAUSSIAN',0.1)\n",
+ "# Plotting\n",
+ "fig = plt.figure()\n",
+ "ax = plt.subplot()\n",
+ "plt.imshow(resid.array(),origin='lower', cmap='bwr',\n",
+ " extent=[276.45+0.02*100,276.45-0.02*100,-13.78-0.02*100,-13.78+0.02*100])\n",
+ " # Boundaries of the coord grid\n",
+ "ax.set_xlabel('R.A. (deg)')\n",
+ "ax.set_ylabel('Dec (deg)')\n",
+ "cbar = plt.colorbar()\n",
+ "cbar.set_label('Significance ($\\sigma$)')"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "The spatial residuals are small, indicating that the model is close enough to the data. However, the structures in the residuals indicate that the morphological models adopted may not accurately represent the data.\n",
+ "\n",
+ "## Stacked spectral component separation\n",
+ "\n",
+ "If we are confident that the spectral models we have at hand represent the data well, we can use this information to determine the morphology of the emission associated with each spectral component from the data by using csscs. First of all we will perform the spectral component separation using the stacked dataset. **A stacked analysis is usually the fastest option for csscs**. However, an unbinned analysis is also possible. \n",
+ "\n",
+ "As a preliminary step we will change the spatial models for the two components to be separated. The script uses the spatial model provided as prior, so for a disk the flux outside the disk radius would always be null. If you have a reasonable prior you can use it in the component separation, but **it is recommended to use a spatial model without sharp boundaries (e.g., Gaussian)**. Since in this case we do not know what the morphology of the two sources is, we will start with an isotropic distribution. "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 21,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# copy the fitted models\n",
+ "fit_obs = like.obs().copy()\n",
+ "\n",
+ "# replace disks with isotropic model\n",
+ "for model in fit_obs.models():\n",
+ " if model.name() == 'HESS J1825-137' or model.name() == 'HESS J1826-130': \n",
+ " model.spatial(gammalib.GModelSpatialDiffuseConst())"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "The essential information to be provided to csscs is:\n",
+ "\n",
+ "- the geometry of the output maps; for every bin in the output map a dedicated likelhood analysis will be used to determine the fluxes of the sources of interest; **make sure to have a region just big enough and a grid step just fine enough for your purposes** since increasing the number of bins will proportionally increase the computation time; \n",
+ "\n",
+ "- the list of the sources of interest;\n",
+ "\n",
+ "- the energy range for the analysis;\n",
+ "\n",
+ "- the radius (``rad``) of the region of interest to be used for the spectral component separation centred on each bin of the output maps; note that the value of this parameter sets the correlation scale between neighbour pixels in the output maps, and it must be at least sqrt(2) times ``binsz`` to fully cover the input dataset; furthemore, **``rad`` must be large enough to ensure that you have enough statististics to perform a likelihood fit**.\n",
+ "\n",
+ "You can decide if you want to leave free in the fit the background model (true by default) and other background gamma-ray sources (false by default, we have none in the exemple we are considering)."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 22,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "scs1 = cscripts.csscs(fit_obs)\n",
+ "scs1['srcnames'] = 'HESS J1825-137;HESS J1826-130'\n",
+ "scs1['emin'] = emin\n",
+ "scs1['emax'] = emax\n",
+ "scs1['nxpix'] = 20\n",
+ "scs1['nypix'] = 20\n",
+ "scs1['binsz'] = 0.1\n",
+ "scs1['rad'] = 0.2\n",
+ "scs1['proj'] = 'TAN'\n",
+ "scs1['coordsys'] = 'CEL'\n",
+ "scs1['xref'] = 276.45\n",
+ "scs1['yref'] = -13.78\n",
+ "scs1.run()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Now we can inspect the maps of the fluxes from the two sources. We will set a minimum flux for display to avoid being confused by noisy bins. In fact the script has calculated also the flux uncertainty in each bin (accessible through the ``flux_error`` method) and the detection significance (accessible through the ``ts`` method), that you can use to filter more intelligently the maps. We did not request this, but one could also have flux upper limits computed (``calc_ulimit`` parameter)."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 23,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "flux_1826 = scs1.flux('HESS J1826-130')\n",
+ "\n",
+ "# Plotting\n",
+ "fig = plt.figure()\n",
+ "ax = plt.subplot()\n",
+ "plt.imshow(flux_1826.array(),origin='lower', vmin = 1.e-8,\n",
+ " extent=[276.45+0.1*10,276.45-0.1*10,-13.78-0.1*10,-13.78+0.1*10])\n",
+ " # Boundaries of the coord grid\n",
+ "ax.set_xlabel('R.A. (deg)')\n",
+ "ax.set_ylabel('Dec (deg)')\n",
+ "cbar = plt.colorbar()\n",
+ "cbar.set_label('Flux (photons/cm$^2$/s/sr)')"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 24,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "flux_1825 = scs1.flux('HESS J1825-137')\n",
+ "\n",
+ "# Plotting\n",
+ "fig = plt.figure()\n",
+ "ax = plt.subplot()\n",
+ "plt.imshow(flux_1825.array(),origin='lower', vmin = 1.e-8,\n",
+ " extent=[276.45+0.1*10,276.45-0.1*10,-13.78-0.1*10,-13.78+0.1*10])\n",
+ " # Boundaries of the coord grid\n",
+ "ax.set_xlabel('R.A. (deg)')\n",
+ "ax.set_ylabel('Dec (deg)')\n",
+ "cbar = plt.colorbar()\n",
+ "cbar.set_label('Flux (photons/cm$^2$/s/sr)')"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "As you can see the hard emission is confined in the North. The soft emission blob seems to have an elongated shape.\n",
+ "\n",
+ "## On/Off spectral component separation\n",
+ "\n",
+ "What if you don't have a reliable background model to perform a 3D analysis? You can still perform a spectral component separation using the On/Off technique as long as you have a prior on the source's spectra.\n",
+ "\n",
+ "For this **we need first of all to compute an exclusion map**, i.e., a map of the region where there is significant gamma-ray emission, so that we can exclude it from background computation. We can do this by using ctskymap with the ``RING`` background subtraction method. Since we are dealing with a large source we will use rather large ROI and ring regions."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 25,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "skymap = ctools.ctskymap(obssim.obs())\n",
+ "skymap['emin'] = emin\n",
+ "skymap['emax'] = emax\n",
+ "skymap['nxpix'] = 200\n",
+ "skymap['nypix'] = 200\n",
+ "skymap['binsz'] = 0.02\n",
+ "skymap['proj'] = 'TAN'\n",
+ "skymap['coordsys'] = 'CEL'\n",
+ "skymap['xref'] = 276.45\n",
+ "skymap['yref'] = -13.78\n",
+ "skymap['bkgsubtract'] = 'RING'\n",
+ "skymap['roiradius'] = 0.5\n",
+ "skymap['inradius'] = 1.0\n",
+ "skymap['outradius'] = 1.5\n",
+ "skymap['iterations'] = 3\n",
+ "skymap['threshold'] = 5 # sigma\n",
+ "skymap.run()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Let's inspect the exclusion map."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 26,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "Text(0,0.5,'Dec (deg)')"
+ ]
+ },
+ "execution_count": 26,
+ "metadata": {},
+ "output_type": "execute_result"
+ },
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "fig = plt.figure()\n",
+ "ax = plt.subplot()\n",
+ "plt.imshow(skymap.exclusion_map().map().array(), origin='lower', cmap = 'binary',\n",
+ " extent=[276.45+0.02*100,276.45-0.02*100,-13.48-0.02*100,-13.48+0.02*100])\n",
+ " # boundaries of the coord grid\n",
+ "ax.set_xlabel('R.A. (deg)')\n",
+ "ax.set_ylabel('Dec (deg)')"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "To use csscs in On/Off mode we need to go back to using the event lists. We modify the associated models to the latest version obtained from the global likelihood fit."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 27,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "obs.models(like.obs().models())"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Note that **in On/Off mode if there are multiple sources csscs will use only the spectral models for the sources, and their emission within each ROI for component separation will be assumed by default to be isotropic**. We will not use the background model, we'll just assume that the background rate of the reflected background regions is the same as in the ROI.\n",
+ "\n",
+ "*This step is rather time consuming, and should take at least a couple of hours to complete on a normal laptop. This is a good time for you to grab lunch or to read that review paper you always meant to.*"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 28,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "scs2 = cscripts.csscs(obs)\n",
+ "scs2['srcnames'] = 'HESS J1825-137;HESS J1826-130'\n",
+ "scs2['emin'] = emin\n",
+ "scs2['emax'] = emax\n",
+ "scs2['nxpix'] = 20\n",
+ "scs2['nypix'] = 20\n",
+ "scs2['binsz'] = 0.1\n",
+ "scs2['rad'] = 0.2\n",
+ "scs2['proj'] = 'TAN'\n",
+ "scs2['coordsys'] = 'CEL'\n",
+ "scs2['xref'] = 276.45\n",
+ "scs2['yref'] = -13.78\n",
+ "scs2['method'] = 'ONOFF'\n",
+ "scs2['use_model_bkg'] = False\n",
+ "scs2['enumbins'] = 30\n",
+ "scs2.exclusion_map(skymap.exclusion_map())\n",
+ "scs2.run()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "We visualize below the flux maps, which are quite consistent with those obtained using the stacked analysis."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 29,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "flux_1826 = scs2.flux('HESS J1826-130')\n",
+ "\n",
+ "# Plotting\n",
+ "fig = plt.figure()\n",
+ "ax = plt.subplot()\n",
+ "plt.imshow(flux_1826.array(),origin='lower', vmin = 1.e-8,\n",
+ " extent=[276.45+0.1*10,276.45-0.1*10,-13.78-0.1*10,-13.78+0.1*10])\n",
+ " # Boundaries of the coord grid\n",
+ "ax.set_xlabel('R.A. (deg)')\n",
+ "ax.set_ylabel('Dec (deg)')\n",
+ "cbar = plt.colorbar()\n",
+ "cbar.set_label('Flux (photons/cm$^2$/s/sr)')"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 30,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "flux_1825 = scs1.flux('HESS J1825-137')\n",
+ "\n",
+ "# Plotting\n",
+ "fig = plt.figure()\n",
+ "ax = plt.subplot()\n",
+ "plt.imshow(flux_1825.array(),origin='lower', vmin = 1.e-8,\n",
+ " extent=[276.45+0.1*10,276.45-0.1*10,-13.78-0.1*10,-13.78+0.1*10])\n",
+ " # Boundaries of the coord grid\n",
+ "ax.set_xlabel('R.A. (deg)')\n",
+ "ax.set_ylabel('Dec (deg)')\n",
+ "cbar = plt.colorbar()\n",
+ "cbar.set_label('Flux (photons/cm$^2$/s/sr)')"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.5.4"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/doc/source/users/tutorials/howto/index.rst b/doc/source/users/tutorials/howto/index.rst
index 25326d4..2b1f60c 100755
--- a/doc/source/users/tutorials/howto/index.rst
+++ b/doc/source/users/tutorials/howto/index.rst
@@ -16,6 +16,7 @@ CTA data analysis
howto_stacked_analysis
howto_model_handling_python
howto_advanced_python_fitting
+ howto_scs
howto_connect_irfs
howto_connect_models
howto_xspec
diff --git a/doc/source/users/tutorials/notebooks.rst b/doc/source/users/tutorials/notebooks.rst
index fb9be8d..d79baf4 100644
--- a/doc/source/users/tutorials/notebooks.rst
+++ b/doc/source/users/tutorials/notebooks.rst
@@ -21,10 +21,10 @@ this page.
* :download:`How to handle models from Python? `
* :download:`How to do advanced model manipulation and fitting in Python? `
* :download:`How to generate likelihood profiles for a fitted spectrum? `
+* :download:`How to perform spectral component separation? `
* :download:`Data preparation for 1DC How-to `
* :download:`Selecting events for H.E.S.S. public data `
* :download:`Generating a sky map and finding sources for H.E.S.S. public data `
* :download:`Generating a background model from H.E.S.S. public data `
* :download:`Performing an unbinned analysis of H.E.S.S. public data `
* :download:`Classical analysis of H.E.S.S. public data `
-
diff --git a/models/Makefile.am b/models/Makefile.am
index ca18b19..94e9730 100755
--- a/models/Makefile.am
+++ b/models/Makefile.am
@@ -38,6 +38,7 @@ models = 1dc_howto.xml \
disk.xml \
gauss.xml \
shell.xml \
+ hess1825_26.xml \
hess_bkg_lookup.fits
# Install models
diff --git a/models/hess1825_26.xml b/models/hess1825_26.xml
new file mode 100644
index 0000000..432411e
--- /dev/null
+++ b/models/hess1825_26.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/test/test_csscs.py b/test/test_csscs.py
new file mode 100644
index 0000000..47b0b56
--- /dev/null
+++ b/test/test_csscs.py
@@ -0,0 +1,581 @@
+#! /usr/bin/env python
+# ==========================================================================
+# This scripts performs unit tests for the csscs script.
+#
+# Copyright (C) 2020 Luigi Tibaldo
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see .
+#
+# ==========================================================================
+import cscripts
+import gammalib
+import os
+from testing import test
+
+
+# ========================= #
+# Test class for csscs script #
+# ========================= #
+class Test(test):
+ """
+ Test class for csscs script
+
+ This test class makes unit tests for the csscs script by using it from
+ the command line and from Python.
+ """
+
+ # Constructor
+ def __init__(self):
+ """
+ Constructor
+ """
+ # Call base class constructor
+ test.__init__(self)
+
+ # Set test datasets and parameters
+ self._evs_offaxis = self._datadir + '/crab_offaxis1.fits'
+ self._exclusion = self._datadir + '/crab_exclusion.fits'
+ self._expcube = self._datadir + '/crab_expcube.fits'
+ self._psfcube = self._datadir + '/crab_psfcube.fits'
+ self._bkgcube = self._datadir + '/crab_bkgcube.fits'
+ self._bkgmodel = self._datadir + '/crab_bkgcube.xml'
+ self._edispcube = self._datadir + '/crab_edispcube.fits'
+
+ # Return
+ return
+
+ # Set test functions
+ def set(self):
+ """
+ Set all test functions
+ """
+ # Set test name
+ self.name('csscs')
+
+ # Append tests
+ self.append(self._test_cmd, 'Test csscs on command line')
+ self.append(self._test_python, 'Test csscs from Python')
+ self.append(self._test_pickeling, 'Test csscs pickeling')
+
+ # Return
+ return
+
+ # Test csscs on command line
+ def _test_cmd(self):
+ """
+ Test csscs on the command line
+ """
+ # Set script name
+ csscs = self._script('csscs')
+
+ # Setup csscs command
+ cmd = csscs + ' inobs="' + self._cntcube + '"' + \
+ ' expcube="' + self._expcube + '"' + \
+ ' psfcube="' + self._psfcube + '"' + \
+ ' bkgcube="' + self._bkgcube + '"' + \
+ ' inmodel="' + self._bkgmodel + '"' + \
+ ' srcnames="Crab"' + \
+ ' emin=1. emax=100.0 nxpix=2 nypix=2' + \
+ ' binsz=0.1 coordsys="CEL" proj="CAR"' + \
+ ' xref=83.63 yref=22.01 rad=0.2' + \
+ ' outfile="csscs_cmd1.fits"' + \
+ ' logfile="csscs_cmd1.log" chatter=1'
+
+ # Check if execution was successful
+ self.test_value(self._execute(cmd), 0,
+ 'Check successful execution from command line')
+
+ # Setup csscs command
+ cmd = csscs + ' inobs="' + self._cntcube + '"' + \
+ ' expcube="' + self._expcube + '"' + \
+ ' psfcube="' + self._psfcube + '"' + \
+ ' bkgcube="' + self._bkgcube + '"' + \
+ ' inmodel="' + self._bkgmodel + '"' + \
+ ' srcnames="Crab;source_that_is_not_in_the_model"' + \
+ ' emin=1. emax=100.0 nxpix=2 nypix=2' + \
+ ' binsz=0.1 coordsys="CEL" proj="CAR"' + \
+ ' xref=83.63 yref=22.01 rad=0.2' + \
+ ' outfile="csscs_cmd1.fits"' + \
+ ' logfile="csscs_cmd1.log" chatter=1'
+
+ # Check if execution failed
+ self.test_assert(self._execute(cmd, success=False) != 0,
+ 'Check invalid source name when executed from command line')
+
+ # Check csscs --help
+ self._check_help(csscs)
+
+ # Return
+ return
+
+ # Test csscs from Python
+ def _test_python(self):
+ """
+ Test csscs from Python
+ """
+ # Allocate csscs
+ script = cscripts.csscs()
+
+ # Check that saving does not nothing
+ script['logfile'] = 'csscs_py0.log'
+ script['outfile'] = 'csscs_py0.fits'
+ script.logFileOpen()
+ script.save()
+ self.test_assert(not os.path.isfile('csscs_py0.fits'),
+ 'Check that no FITS file has been created')
+
+ # Check that clearing does not lead to an exception or segfault
+ script.clear()
+
+ # Set up csscs for simple binned analysis
+ script['logfile'] = 'csscs_py1.log'
+ script['inobs'] = self._cntcube
+ script['expcube'] = self._expcube
+ script['psfcube'] = self._psfcube
+ script['bkgcube'] = self._bkgcube
+ script['inmodel'] = self._bkgmodel
+ script['srcnames'] = 'Crab'
+ script['emin'] = 1.
+ script['emax'] = 100.
+ script['nxpix'] = 2
+ script['nypix'] = 2
+ script['binsz'] = 0.1
+ script['coordsys'] = 'CEL'
+ script['proj'] = 'CAR'
+ script['xref'] = 83.63
+ script['yref'] = 22.01
+ script['rad'] = 0.2
+ script['outfile'] = 'csscs_py1.fits'
+ script['chatter'] = 4
+
+ # Run csscs script and save results
+ script.logFileOpen()
+ script.execute()
+
+ # Check result
+ self._check_result_file('csscs_py1.fits')
+
+ # Set up for same test without TS computation
+ script = cscripts.csscs()
+ script['logfile'] = 'csscs_py2.log'
+ script['inobs'] = self._cntcube
+ script['expcube'] = self._expcube
+ script['psfcube'] = self._psfcube
+ script['bkgcube'] = self._bkgcube
+ script['inmodel'] = self._bkgmodel
+ script['srcnames'] = 'Crab'
+ script['emin'] = 1.
+ script['emax'] = 100.
+ script['nxpix'] = 2
+ script['nypix'] = 2
+ script['binsz'] = 0.1
+ script['coordsys'] = 'CEL'
+ script['proj'] = 'CAR'
+ script['xref'] = 83.63
+ script['yref'] = 22.01
+ script['rad'] = 0.2
+ script['calc_ts'] = False
+ script['outfile'] = 'csscs_py2.fits'
+ script['chatter'] = 2
+
+ # Run csscs script and save results
+ script.logFileOpen()
+ script.execute()
+
+ # Check result
+ self._check_result_file('csscs_py2.fits', calc_ts=False)
+
+ # # Set up for same test with upper limit computation
+ script = cscripts.csscs()
+ script['logfile'] = 'csscs_py3.log'
+ script['inobs'] = self._cntcube
+ script['expcube'] = self._expcube
+ script['psfcube'] = self._psfcube
+ script['bkgcube'] = self._bkgcube
+ script['inmodel'] = self._bkgmodel
+ script['srcnames'] = 'Crab'
+ script['emin'] = 1.
+ script['emax'] = 100.
+ script['nxpix'] = 2
+ script['nypix'] = 2
+ script['binsz'] = 0.1
+ script['coordsys'] = 'CEL'
+ script['proj'] = 'CAR'
+ script['xref'] = 83.63
+ script['yref'] = 22.01
+ script['rad'] = 0.2
+ script['calc_ts'] = True
+ script['calc_ulim'] = True
+ script['outfile'] = 'csscs_py3.fits'
+ script['chatter'] = 2
+
+ # Run csscs script and save results
+ script.logFileOpen()
+ script.execute()
+
+ # Check result
+ self._check_result_file('csscs_py3.fits', calc_ulim=True)
+
+ # # Check that results can be piped in memory
+ self._check_results_mem(script, calc_ulim=True)
+
+ # Set up for test without multiprocessing
+ script = cscripts.csscs()
+ script['logfile'] = 'csscs_py4.log'
+ script['inobs'] = self._cntcube
+ script['expcube'] = self._expcube
+ script['psfcube'] = self._psfcube
+ script['bkgcube'] = self._bkgcube
+ script['inmodel'] = self._bkgmodel
+ script['srcnames'] = 'Crab'
+ script['emin'] = 1.
+ script['emax'] = 100.
+ script['nxpix'] = 2
+ script['nypix'] = 2
+ script['binsz'] = 0.1
+ script['coordsys'] = 'CEL'
+ script['proj'] = 'CAR'
+ script['xref'] = 83.63
+ script['yref'] = 22.01
+ script['rad'] = 0.2
+ script['outfile'] = 'csscs_py4.fits'
+ script['nthreads'] = 1
+ script['chatter'] = 2
+
+ # Run csscs script and save results
+ script.logFileOpen()
+ script.execute()
+
+ # Check result
+ self._check_result_file('csscs_py4.fits')
+
+ # Set up for test with energy dispersion
+ script = cscripts.csscs()
+ script['logfile'] = 'csscs_py5.log'
+ script['inobs'] = self._cntcube
+ script['expcube'] = self._expcube
+ script['psfcube'] = self._psfcube
+ script['bkgcube'] = self._bkgcube
+ script['edisp'] = True
+ script['edispcube'] = self._edispcube
+ script['inmodel'] = self._bkgmodel
+ script['srcnames'] = 'Crab'
+ script['emin'] = 1.
+ script['emax'] = 100.
+ script['nxpix'] = 2
+ script['nypix'] = 2
+ script['binsz'] = 0.1
+ script['coordsys'] = 'CEL'
+ script['proj'] = 'CAR'
+ script['xref'] = 83.63
+ script['yref'] = 22.01
+ script['rad'] = 0.2
+ script['outfile'] = 'csscs_py5.fits'
+ script['chatter'] = 2
+
+ # Run csscs script and save results
+ script.logFileOpen()
+ script.execute()
+
+ # Check result
+ self._check_result_file('csscs_py5.fits')
+
+ # Set up for test in On/Off mode with background model
+ script = cscripts.csscs()
+ script['logfile'] = 'csscs_py6.log'
+ script['inobs'] = self._evs_offaxis
+ script['caldb'] = self._caldb
+ script['irf'] = self._irf
+ script['inmodel'] = self._model
+ script['srcnames'] = 'Crab'
+ script['emin'] = 1.
+ script['emax'] = 100.
+ script['nxpix'] = 2
+ script['nypix'] = 2
+ script['binsz'] = 0.1
+ script['coordsys'] = 'CEL'
+ script['proj'] = 'CAR'
+ script['xref'] = 83.63
+ script['yref'] = 22.01
+ script['rad'] = 0.2
+ script['method'] = 'ONOFF'
+ script['inexclusion'] = self._exclusion
+ script['enumbins'] = 2
+ script['outfile'] = 'csscs_py6.fits'
+ script['chatter'] = 2
+
+ # Run csscs script and save results
+ script.logFileOpen()
+ script.execute()
+
+ # Check result
+ self._check_result_file('csscs_py6.fits')
+
+ # Same test with exclusion map piped in memory
+ script = cscripts.csscs()
+ script['logfile'] = 'csscs_py7.log'
+ script['inobs'] = self._evs_offaxis
+ script['caldb'] = self._caldb
+ script['irf'] = self._irf
+ script['inmodel'] = self._model
+ script['srcnames'] = 'Crab'
+ script['emin'] = 1.
+ script['emax'] = 100.
+ script['nxpix'] = 2
+ script['nypix'] = 2
+ script['binsz'] = 0.1
+ script['coordsys'] = 'CEL'
+ script['proj'] = 'CAR'
+ script['xref'] = 83.63
+ script['yref'] = 22.01
+ script['rad'] = 0.2
+ script['method'] = 'ONOFF'
+ script['enumbins'] = 2
+ script['outfile'] = 'csscs_py7.fits'
+ script['chatter'] = 2
+
+ # Set exclusion map
+ exclmap = gammalib.GSkyRegionMap(self._exclusion)
+ script.exclusion_map(exclmap)
+
+ # Run csscs script and save results
+ script.logFileOpen()
+ script.execute()
+
+ # Check result
+ self._check_result_file('csscs_py7.fits')
+
+ # Set up for test in On/Off mode without background model
+ script = cscripts.csscs()
+ script['logfile'] = 'csscs_py8.log'
+ script['inobs'] = self._evs_offaxis
+ script['caldb'] = self._caldb
+ script['irf'] = self._irf
+ script['inmodel'] = self._model
+ script['srcnames'] = 'Crab'
+ script['emin'] = 1.
+ script['emax'] = 100.
+ script['nxpix'] = 2
+ script['nypix'] = 2
+ script['binsz'] = 0.1
+ script['coordsys'] = 'CEL'
+ script['proj'] = 'CAR'
+ script['xref'] = 83.63
+ script['yref'] = 22.01
+ script['rad'] = 0.2
+ script['method'] = 'ONOFF'
+ script['use_model_bkg'] = False
+ script['inexclusion'] = self._exclusion
+ script['enumbins'] = 2
+ script['outfile'] = 'csscs_py8.fits'
+ script['chatter'] = 2
+
+ # Run csscs script and save results
+ script.logFileOpen()
+ script.execute()
+
+ # Check result
+ self._check_result_file('csscs_py8.fits')
+
+ # Set up for test in unbinned mode
+ script = cscripts.csscs()
+ script['logfile'] = 'csscs_py9.log'
+ script['inobs'] = self._evs_offaxis
+ script['caldb'] = self._caldb
+ script['irf'] = self._irf
+ script['inmodel'] = self._model
+ script['srcnames'] = 'Crab'
+ script['emin'] = 1.
+ script['emax'] = 100.
+ script['nxpix'] = 2
+ script['nypix'] = 2
+ script['binsz'] = 0.1
+ script['coordsys'] = 'CEL'
+ script['proj'] = 'CAR'
+ script['xref'] = 83.63
+ script['yref'] = 22.01
+ script['rad'] = 0.2
+ script['method'] = 'UNBINNED'
+ script['enumbins'] = 2
+ script['outfile'] = 'csscs_py9.fits'
+ script['chatter'] = 2
+
+ # Run csscs script and save results
+ script.logFileOpen()
+ script.execute()
+
+ # Check result
+ self._check_result_file('csscs_py9.fits')
+
+ # Return
+ return
+
+ # Test csscs pickeling
+ def _test_pickeling(self):
+ """
+ Test csscs pickeling
+ """
+ # Perform pickeling test of empty class
+ self._pickeling(cscripts.csscs())
+
+ # Setup script for pickling text
+ script = cscripts.csscs()
+ script['logfile'] = 'csscs_py1_pickle.log'
+ script['inobs'] = self._cntcube
+ script['expcube'] = self._expcube
+ script['psfcube'] = self._psfcube
+ script['bkgcube'] = self._bkgcube
+ script['inmodel'] = self._bkgmodel
+ script['srcnames'] = 'Crab'
+ script['emin'] = 1.
+ script['emax'] = 100.
+ script['nxpix'] = 2
+ script['nypix'] = 2
+ script['binsz'] = 0.1
+ script['coordsys'] = 'CEL'
+ script['proj'] = 'CAR'
+ script['xref'] = 83.63
+ script['yref'] = 22.01
+ script['rad'] = 0.2
+ script['outfile'] = 'csscs_py1_pickle.fits'
+ script['chatter'] = 2
+
+ # Perform pickeling tests of filled class
+ obj = self._pickeling(script)
+
+ # Run csscs script and save result
+ obj.logFileOpen() # Make sure we get a log file
+ obj.execute()
+
+ # Check result file
+ self._check_result_file('csscs_py1_pickle.fits')
+
+ # Return
+ return
+
+ # Check access to results in memory'
+ def _check_results_mem(self, script, srcnames=['Crab'], nx=2, ny=2, calc_ts=True,
+ calc_ulim=False):
+ """
+ Check results in memory
+
+ Parameters
+ ----------
+ script : `~cscripts.csscs`
+ csscs object
+ srcnames : list, optional
+ Source names
+ nx : int, optional
+ Number of X pixels
+ ny : int, optional
+ Number of Y pixels
+ calc_ts : bool, optional
+ Check TS HDU
+ calc_ulim : bool, optional
+ Check upper limit HDU
+ """
+
+ # Check that the entire fits container can be extracted
+ fits = script.fits()
+ # Dump to disk and verify
+ fits.saveto('csscs_py3_mem.fits', True)
+ self._check_result_file('csscs_py3_mem.fits', srcnames=srcnames, nx=nx, ny=ny,
+ calc_ts=calc_ts, calc_ulim=calc_ulim)
+
+ # Now check direct access in memory for skymaps
+ # Loop over sources
+ for name in srcnames:
+ # Check flux map
+ skymap = script.flux(name)
+ self._check_map(skymap, nx=nx, ny=ny)
+ # Check flux error map
+ skymap = script.flux_error(name)
+ self._check_map(skymap, nx=nx, ny=ny)
+ # If requested check TS map
+ if calc_ts:
+ skymap = script.ts(name)
+ self._check_map(skymap, nx=nx, ny=ny)
+ # If requested check upper limit map
+ if calc_ulim:
+ skymap = script.ulimit(name)
+ self._check_map(skymap, nx=nx, ny=ny)
+
+ return
+
+ # Check result file
+ def _check_result_file(self, filename, srcnames=['Crab'], nx=2, ny=2,
+ calc_ts=True, calc_ulim=False):
+ """
+ Check result file
+
+ Parameters
+ ----------
+ filename : str
+ Sky map file name
+ srcnames : list, optional
+ Source names
+ nx : int, optional
+ Number of X pixels
+ ny : int, optional
+ Number of Y pixels
+ calc_ts : bool, optional
+ Check TS HDU
+ calc_ulim : bool, optional
+ Check upper limit HDU
+ """
+
+ print('ho', calc_ts)
+ # Loop over source names
+ for name in srcnames:
+ # Check flux map
+ skymap = gammalib.GSkyMap(filename + '[' + name + ' FLUX]')
+ self._check_map(skymap, nx=nx, ny=ny)
+ # Check flux error map
+ skymap = gammalib.GSkyMap(filename + '[' + name + ' FLUX ERROR]')
+ self._check_map(skymap, nx=nx, ny=ny)
+ # If requested check TS map
+ if calc_ts:
+ print('hoho')
+ skymap = gammalib.GSkyMap(filename + '[' + name + ' TS]')
+ self._check_map(skymap, nx=nx, ny=ny)
+ # If requested check upper limit map
+ if calc_ulim:
+ skymap = gammalib.GSkyMap(filename + '[' + name + ' FLUX UPPER LIMIT]')
+ self._check_map(skymap, nx=nx, ny=ny)
+
+ # Return
+ return
+
+ # Check sky map
+ def _check_map(self, skymap, nx=2, ny=2):
+ """
+ Check sky map
+
+ Parameters
+ ----------
+ skymap : `~gammalib.GSkyMap`
+ Sky map
+ nx : int, optional
+ Number of X pixels
+ ny : int, optional
+ Number of Y pixels
+ """
+
+ # Check dimensions
+ self.test_value(skymap.nmaps(), 1, 'Check number of maps')
+ self.test_value(skymap.nx(), nx, 'Check for number of X pixels')
+ self.test_value(skymap.ny(), ny, 'Check for number of Y pixels')
+
+ # Return
+ return
diff --git a/test/test_python_cscripts.py b/test/test_python_cscripts.py
index 3ae5c97..18f5749 100755
--- a/test/test_python_cscripts.py
+++ b/test/test_python_cscripts.py
@@ -18,11 +18,14 @@
# along with this program. If not, see .
#
# ==========================================================================
+
+import cscripts
+import gammalib
import os
import sys
-import gammalib
-import cscripts
+
sys.path.append(os.path.dirname(os.path.abspath(__file__)))
+
import test_cscript
import test_cscaldb
import test_csbkgmodel
@@ -51,6 +54,7 @@ import test_cstsdist
import test_cstsmapmerge
import test_cstsmapsplit
import test_csviscube
+import test_csscs
import test_csworkflow
import test_obsutils
import test_mputils
@@ -60,8 +64,11 @@ import test_csiactobs
# ================== #
+
# Perform unit tests #
+
# ================== #
+
def test(installed=False, debug=False):
"""
Perform cscripts unit testing.
@@ -73,37 +80,34 @@ def test(installed=False, debug=False):
debug : bool, optional
Enables debugging
"""
+
# If we have an installed version then create a temporary directory and
# copy over all information that is needed
if installed:
-
# Create temporary working directory
import tempfile
path = tempfile.mkdtemp()
os.chdir(path)
-
# Get test directory
import inspect
testdir = inspect.getfile(cscripts.tests)
dirname = os.path.dirname(testdir)
-
# Copy test data in "data" directory
- os.system('cp -r %s %s' % (dirname+'/data', 'data'))
-
+ os.system('cp -r %s %s' % (dirname + '/data', 'data'))
# Set test data environment variable
os.environ['TEST_DATA'] = 'data'
-
# ... otherwise set the calibration database to the one shipped with the
# package; we don't need to set the 'TEST_DATA', this is done by the
# test environment
else:
os.environ['CALDB'] = '%s/caldb' % (os.environ['TEST_SRCDIR'])
-
# Create a local "pfiles" directory and set PFILES environment variable
+
try:
os.mkdir('pfiles')
except:
pass
+
os.environ['PFILES'] = 'pfiles'
# Copy the cscripts parameter files into the "pfiles" directory. For a
@@ -111,8 +115,9 @@ def test(installed=False, debug=False):
# source directory into the "pfiles" directory, for an installed version
# we get all parameter files from the "syspfiles" directory. Also make
# sure that all parameter files are writable.
+
if not installed:
- os.system('cp -r %s/cscripts/*.par pfiles/'% (os.environ['TEST_SRCDIR']))
+ os.system('cp -r %s/cscripts/*.par pfiles/' % (os.environ['TEST_SRCDIR']))
os.system('chmod u+w pfiles/*')
else:
os.system('cp -r %s/syspfiles/*.par pfiles/' % (os.environ['CTOOLS']))
@@ -146,6 +151,7 @@ def test(installed=False, debug=False):
test_cstsmapmerge.Test(),
test_cstsmapsplit.Test(),
test_csviscube.Test(),
+ test_csscs.Test(),
test_csworkflow.Test(),
test_obsutils.Test(),
test_mputils.Test()]
@@ -154,10 +160,8 @@ def test(installed=False, debug=False):
# module which is only available since Python 2.6+)
ver = sys.version.split()[0]
if ver >= '2.6.0':
-
# Check for VHEFITS environment variable
if 'VHEFITS' in os.environ:
-
# If the environment variable exists then unset it for the test
# cases. Since Python is executed in a subprocess this will not
# impact the environment variable in the parent shell.
@@ -203,9 +207,12 @@ def test(installed=False, debug=False):
# ======================== #
+
# Main routine entry point #
+
# ======================== #
-if __name__ == '__main__':
+if __name__ == '__main__':
# Run tests
+
test()