diff --git a/ChangeLog b/ChangeLog index f19d520..c290fc2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,8 +1,9 @@ -2015-07-02 Juergen Knoedlseder +2015-07-03 Juergen Knoedlseder * Version 0.10.0 released ========================= + Add csinfo script (#1489) Removed obsutils.spectrum() function (replaced by csspec) Add cterror tool Check existence of ROI in ctbin (#1476) diff --git a/NEWS b/NEWS index 9def165..ad886d0 100644 --- a/NEWS +++ b/NEWS @@ -2,7 +2,7 @@ New Features and Important Changes in ctools 0.10.0 Author(s) : Juergen Knoedlseder -2 July 2015 +3 July 2015 1. Introduction @@ -112,7 +112,8 @@ None 20. Scripts ----------- -None +Added csinfo script to provide some information about the GammaLib and ctools +installation. To be run in case of problems to help diagnostics. 21. caldb diff --git a/scripts/Makefile.am b/scripts/Makefile.am index 0bbc092..fb55b1d 100644 --- a/scripts/Makefile.am +++ b/scripts/Makefile.am @@ -5,14 +5,15 @@ binscripts = cta_kb_bkgrates.py cta_root2irf.py cta_make_nodes.py \ tsmerge.py # Scripts to be distributed in pythondir -pythonscripts = cspull.py cssens.py cstsdist.py cscaldb.py csresmap.py cshessobs.py \ - csobsdef.py csspec.py cslightcrv.py \ +pythonscripts = cspull.py cssens.py cstsdist.py cscaldb.py csresmap.py \ + cshessobs.py csobsdef.py csspec.py cslightcrv.py \ + csinfo.py \ lsmodel.py # Scripts for which symbolic links will be created in bindir linkscripts = cspull cssens cstsdist cscaldb csresmap \ - csobsdef csspec cshessobs cslightcrv \ - lsmodel + cshessobs csobsdef csspec cslightcrv \ + csinfo lsmodel # Distribute scripts EXTRA_DIST = $(binscripts) $(pythonscripts) diff --git a/scripts/csinfo.py b/scripts/csinfo.py new file mode 100755 index 0000000..9fb4219 --- /dev/null +++ b/scripts/csinfo.py @@ -0,0 +1,201 @@ +#!/usr/bin/env python +# ========================================================================== +# Print info about Gammalib / ctools to the console. +# +# Copyright (C) 2015 Christoph Deil +# +# 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 sys +import os +import commands + +# Copied and edited a bit from the `doc/source/reference_manual/index.rst` file +# The list there and here needs to be manually updated and kept in sync. +CTOOL_LIST = """ + ctbin Generates counts cube + ctbkgcube Generates background cube + ctbutterfly Compute butterfly + ctcubemask Filter counts cube + ctexpcube Generates exposure cube + ctlike Performs maximum likelihood fitting + ctmodel Computes model counts cube + ctobssim Simulate CTA observations + ctpsfcube Generates point spread function cube + ctselect Selects event data + ctskymap Generates sky map + cttsmap Generates Test Statistics map + ctulimit Calculates upper limit + cterror Calculates likelihood profile errors +""" +CSCRIPT_LIST = """ + cscaldb Lists available instrument response functions + csinfo Checks ctools and GammaLib installations + csobsdef Generates observation definition file + cslightcrv Computes lightcurve + cspull Generates pull distribution + cssens Computes CTA sensitivity + csspec Computes spectral points + csresmap Generates residual map + cstsdist Generates TS distribution +""" + +def log(text, end='\n'): + """Print text to console. + + Workaround to have an `end=''` option on old Pythons: + http://stackoverflow.com/a/493399/498873 + """ + sys.stdout.write(text + end) + + +def csinfo_list_tools(): + """Print available ctools with one-line description to the console. + """ + print('\nAvailable ctools:') + print(CTOOL_LIST) + print('Available cscripts:') + print(CSCRIPT_LIST) + + +def csinfo_setup_check(): + print('\nGammalib / ctools setup check:\n') + + all_ok = True + gammalib_environ = False + ctools_environ = False + gammalib_python = False + ctools_python = False + + log(' GAMMALIB environment variable ... ', end='') + try: + gammalib_env = os.environ['GAMMALIB'] + print('ok') + except KeyError: + print('NOT OK') + all_ok = False + gammalib_environ = True + + log(' CTOOLS environment variable ... ', end='') + try: + ctools_env = os.environ['CTOOLS'] + print('ok') + except KeyError: + print('NOT_OK') + all_ok = False + ctools_environ = True + + log(' gammalib Python import .......... ', end='') + try: + import gammalib + print('ok') + except: + print('NOT OK') + all_ok = False + gammalib_python = True + + log(' ctools Python import .......... ', end='') + try: + import ctools + print('ok') + except: + print('NOT OK') + all_ok = False + ctools_python = True + + if all_ok: + print('\n Your Gammalib / ctools setup is OK.') + else: + print('\n WARNING: Your Gammalib / ctools setup is NOT OK!\n') + if gammalib_environ: + print(' - Have you set the GAMMALIB environment variable?') + print(' - Did you source gammalib-init.sh?') + if ctools_environ: + print(' - Have you set the CTOOLS environment variable?') + print(' - Did you source ctools-init.sh ?') + if gammalib_python or ctools_python: + print(' - Are you using the correct Python ?') + + print('') + +def csinfo_setup_info(): + print('\nGammalib / ctools setup info:\n') + + log(' CTOOLS environment variable ... ', end='') + try: + ctools_env = os.environ['CTOOLS'] + print(' $CTOOLS = {0}'.format(ctools_env)) + except KeyError: + print('WARNING: $CTOOLS environment variable not set. Did you source ctools-init.sh?') + all_ok = False + + try: + import gammalib + print(' Python `gammalib` path: {0}'.format(gammalib.__path__[0])) + except: + print('WARNING: Python `gammalib` import failed. Are you using the right Python?') + + try: + import ctools + print(' Python `ctools` path: {0}'.format(ctools.__path__[0])) + except: + print('WARNING: Python `ctools` import failed. Are you using the right Python?') + + print(' GAMMALIB CFLAGS: {0}'.format(get_pkg_config_info('cflags', 'gammalib'))) + print(' CTOOLS CFLAGS: {0}'.format(get_pkg_config_info('cflags', 'ctools'))) + + print('') + + +def get_pkg_config_info(info, library): + cmd = 'pkg-config --{0} {1}'.format(info, library) + out = commands.getoutput(cmd) + if 'was not found' in out: + return 'Not available' + else: + return out + + +def csinfo_print_help(): + print('\nPrint info about Gammalib and ctools to the console.\n') + print('Available commands:') + print(' csinfo list List available ctools and cscripts') + print(' csinfo check Check Gammalib / ctools setup') + print(' csinfo info Print Gammalib / ctools setup info') + print('') + + +def csinfo(argv): + """Print info about Gammalib / ctools to the console. + """ + if len(argv) <= 1: + csinfo_print_help() + sys.exit(0) + + cmd = argv[1] + if cmd == 'list': + csinfo_list_tools() + elif cmd == 'check': + csinfo_setup_check() + elif cmd == 'info': + csinfo_setup_info() + else: + print('\nERROR: invalid command: `{0}`'.format(cmd)) + csinfo_print_help() + sys.exit(-1) + + +if __name__ == '__main__': + csinfo(sys.argv)