diff --git a/cscripts/ioutils.py b/cscripts/ioutils.py index 118c695..1c08dc5 100755 --- a/cscripts/ioutils.py +++ b/cscripts/ioutils.py @@ -65,12 +65,12 @@ def write_csv_row(outfile, row, colnames, colvalues): return -# ============================== # -# Get options from argument list # -# ============================== # -def get_arg_options(options, usage): +# ============================================ # +# Get arguments and options from argument list # +# ============================================ # +def get_args_options(options, usage): """ - Get options from argument list + Get arguments and options from argument list Parameters ---------- @@ -81,9 +81,12 @@ def get_arg_options(options, usage): Returns ------- - options : list of dict - Update list of options + args, options : tuple of list and list of dict + Arguments and updated list of options """ + # Initialise list of arguments + args = [] + # If there are no command line arguments then show usage string and # exit if len(sys.argv) < 1: @@ -96,13 +99,18 @@ def get_arg_options(options, usage): # Loop over all arguments while i < len(sys.argv): + # Initialise that no option was found + option_found = False + # Search for options for option in options: + + # Do we have an option if sys.argv[i] == option['option']: # If an option has been found then check if there is a # following parameter and extract that parameter as a - # string + # string. Quit in case that an exception occurs. if len(sys.argv) > i+1: i += 1 try: @@ -110,12 +118,23 @@ def get_arg_options(options, usage): except: print(usage) sys.exit() + + # ... there is no following parameter, hence write out usage + # and quite else: print(usage) sys.exit() + # We can break now as every option should only occur once + option_found = True + break + + # If no option was found then add the argument to list of arguments + if not option_found: + args.append(sys.argv[i]) + # Next item i += 1 - # Return options - return options + # Return arguments and options + return args, options diff --git a/examples/make_ts_distributions.py b/examples/make_ts_distributions.py index 834cbaf..d7ef009 100755 --- a/examples/make_ts_distributions.py +++ b/examples/make_ts_distributions.py @@ -89,17 +89,17 @@ if __name__ == '__main__': # Set usage string usage = 'make_ts_distributions.py [-n ntrials] [-e enumbins]'\ - ' [-d duration] [-m max_threads] [-p datadir]' + ' [-t duration] [-m max_threads] [-d datadir]' # Set default options options = [{'option': '-n', 'value': '100'}, {'option': '-e', 'value': '0'}, - {'option': '-d', 'value': '180000.0'}, + {'option': '-t', 'value': '180000.0'}, {'option': '-m', 'value': '1'}, - {'option': '-p', 'value': 'data'}] + {'option': '-d', 'value': 'data'}] - # Get options from command line arguments - options = cscripts.ioutils.get_arg_options(options, usage) + # Get arguments and options from command line arguments + args, options = cscripts.ioutils.get_args_options(options, usage) # Extract script parameters from options ntrials = int(options[0]['value']) diff --git a/examples/pipeline_binned_disk.py b/examples/pipeline_binned_disk.py index cf2948a..4bbbca8 100755 --- a/examples/pipeline_binned_disk.py +++ b/examples/pipeline_binned_disk.py @@ -1,6 +1,6 @@ #! /usr/bin/env python # ========================================================================== -# Perform binned analysis of simulated CTA data. +# Perform binned analysis of simulated CTA data # # Copyright (C) 2015-2016 Juergen Knoedlseder # @@ -18,94 +18,9 @@ # along with this program. If not, see . # # ========================================================================== -import sys import gammalib import ctools -from cscripts import obsutils - - -# ================== # -# Setup observations # -# ================== # -def setup_observations(pattern='four', ra=83.63, dec=22.01, offset=1.5, - emin=0.1, emax=100.0, rad=5.0, duration=180.0, - deadc=0.95, caldb='prod2', irf='South_0.5h'): - """ - Returns an observation container - - Parameters - ---------- - pattern : str, optional - Pointing pattern, either 'single' or 'four' - ra : float, optional - Right Ascension of pattern centre (deg) - dec : float, optional - Declination of pattern centre (deg) - offset : float, optional - Offset between observations of pattern (deg) - emin : float, optional - Minimum energy (TeV) - emax : float, optional - Maximum energy (TeV) - rad : float, optional - ROI radius used for analysis (deg) - duration : float, optional - Duration of one CTA observation (s) - deadc : float, optional - Deadtime correction factor - caldb : str, optional - Calibration database path - irf : str, optional - Instrument response function - - Returns - ------- - obs : `~gammalib.GObservations` - Observation container - """ - # Set list of observations - obs_def_list = obsutils.set_obs_patterns(pattern, - ra=ra, - dec=dec, - offset=offset) - - # Get observation container - obs = obsutils.set_obs_list(obs_def_list, - duration=duration, - emin=emin, - emax=emax, - rad=rad, - caldb=caldb, - irf=irf) - - # Return observation container - return obs - - -# =========== # -# Setup model # -# =========== # -def setup_model(obs, model='data/crab.xml'): - """ - Setup model for analysis - - Parameters - ---------- - obs : `~gammalib.GObservations` - Observation container - model : str, optional - Model definition XML file - - Returns - ------- - obs : `~gammalib.GObservations` - Observation container - """ - # Append model from file to observation container - obs.models(gammalib.GModels(model)) - - # Return observation container - return obs +import cscripts # ================================ # @@ -219,17 +134,25 @@ if __name__ == '__main__': print('* CTA binned analysis pipeline *') print('********************************************') - # Get optional arguments - if len(sys.argv) == 2: - datadir = sys.argv[1] - else: - datadir = 'data' + # Set usage string + usage = 'pipeline_binned_disk.py [-d datadir]' + + # Set default options + options = [{'option': '-d', 'value': 'data'}] + + # Get arguments and options from command line arguments + args, options = cscripts.ioutils.get_args_options(options, usage) + + # Extract script parameters from options + datadir = options[0]['value'] # Setup observations - obs = setup_observations() + obs = cscripts.obsutils.set_observations(83.63, 22.01, 5.0, 0.0, 180.0, + 0.1, 100.0, 'South_0.5h', 'prod2', + pattern='four', offset=1.5) # Setup model - obs = setup_model(obs, model=datadir+'/crab.xml') + obs.models(gammalib.GModels(datadir+'/crab.xml')) # Run analysis pipeline run_pipeline(obs, model=datadir+'/crab.xml') diff --git a/examples/pipeline_binned_mem.py b/examples/pipeline_binned_mem.py index ece32cb..9abd992 100755 --- a/examples/pipeline_binned_mem.py +++ b/examples/pipeline_binned_mem.py @@ -18,94 +18,9 @@ # along with this program. If not, see . # # ========================================================================== -import sys import gammalib import ctools -from cscripts import obsutils - - -# ================== # -# Setup observations # -# ================== # -def setup_observations(pattern='four', ra=83.63, dec=22.01, offset=1.5, - emin=0.1, emax=100.0, rad=5.0, duration=180.0, - deadc=0.95, caldb='prod2', irf='South_0.5h'): - """ - Returns an observation container - - Parameters - ---------- - pattern : str, optional - Pointing pattern, either 'single' or 'four' - ra : float, optional - Right Ascension of pattern centre (deg) - dec : float, optional - Declination of pattern centre (deg) - offset : float, optional - Offset between observations of pattern (deg) - emin : float, optional - Minimum energy (TeV) - emax : float, optional - Maximum energy (TeV) - rad : float, optional - ROI radius used for analysis (deg) - duration : float, optional - Duration of one CTA observation (s) - deadc : float, optional - Deadtime correction factor - caldb : str, optional - Calibration database path - irf : str, optional - Instrument response function - - Returns - ------- - obs : `~gammalib.GObservations` - Observation container - """ - # Set list of observations - obs_def_list = obsutils.set_obs_patterns(pattern, - ra=ra, - dec=dec, - offset=offset) - - # Get observation container - obs = obsutils.set_obs_list(obs_def_list, - duration=duration, - emin=emin, - emax=emax, - rad=rad, - caldb=caldb, - irf=irf) - - # Return observation container - return obs - - -# =========== # -# Setup model # -# =========== # -def setup_model(obs, model='data/crab.xml'): - """ - Setup model for analysis - - Parameters - ---------- - obs : `~gammalib.GObservations` - Observation container - model : str, optional - Model definition XML file - - Returns - ------- - obs : `~gammalib.GObservations` - Observation container - """ - # Append model from file to observation container - obs.models(gammalib.GModels(model)) - - # Return observation container - return obs +import cscripts # ================================ # @@ -190,17 +105,25 @@ if __name__ == '__main__': print('* CTA binned analysis pipeline *') print('********************************************') - # Get optional arguments - if len(sys.argv) == 2: - datadir = sys.argv[1] - else: - datadir = 'data' + # Set usage string + usage = 'pipeline_binned_mem.py [-d datadir]' + + # Set default options + options = [{'option': '-d', 'value': 'data'}] + + # Get arguments and options from command line arguments + args, options = cscripts.ioutils.get_args_options(options, usage) + + # Extract script parameters from options + datadir = options[0]['value'] # Setup observations - obs = setup_observations() + obs = cscripts.obsutils.set_observations(83.63, 22.01, 5.0, 0.0, 180.0, + 0.1, 100.0, 'South_0.5h', 'prod2', + pattern='four', offset=1.5) # Setup model - obs = setup_model(obs, model=datadir+'/crab.xml') + obs.models(gammalib.GModels(datadir+'/crab.xml')) # Run analysis pipeline run_pipeline(obs) diff --git a/examples/pipeline_stacked_disk.py b/examples/pipeline_stacked_disk.py index 5a5ee87..63b8951 100755 --- a/examples/pipeline_stacked_disk.py +++ b/examples/pipeline_stacked_disk.py @@ -18,94 +18,9 @@ # along with this program. If not, see . # # ========================================================================== -import sys import gammalib import ctools -from cscripts import obsutils - - -# ================== # -# Setup observations # -# ================== # -def setup_observations(pattern='four', ra=83.63, dec=22.01, offset=1.5, - emin=0.1, emax=100.0, rad=5.0, duration=180.0, - deadc=0.95, caldb='prod2', irf='South_0.5h'): - """ - Returns an observation container - - Parameters - ---------- - pattern : str, optional - Pointing pattern, either 'single' or 'four' - ra : float, optional - Right Ascension of pattern centre (deg) - dec : float, optional - Declination of pattern centre (deg) - offset : float, optional - Offset between observations of pattern (deg) - emin : float, optional - Minimum energy (TeV) - emax : float, optional - Maximum energy (TeV) - rad : float, optional - ROI radius used for analysis (deg) - duration : float, optional - Duration of one CTA observation (s) - deadc : float, optional - Deadtime correction factor - caldb : str, optional - Calibration database path - irf : str, optional - Instrument response function - - Returns - ------- - obs : `~gammalib.GObservations` - Observation container - """ - # Set list of observations - obs_def_list = obsutils.set_obs_patterns(pattern, - ra=ra, - dec=dec, - offset=offset) - - # Get observation container - obs = obsutils.set_obs_list(obs_def_list, - duration=duration, - emin=emin, - emax=emax, - rad=rad, - caldb=caldb, - irf=irf) - - # Return observation container - return obs - - -# =========== # -# Setup model # -# =========== # -def setup_model(obs, model='data/crab.xml'): - """ - Setup model for analysis - - Parameters - ---------- - obs : `~gammalib.GObservations` - Observation container - model : str, optional - Model definition XML file - - Returns - ------- - obs : `~gammalib.GObservations` - Observation container - """ - # Append model from file to observation container - obs.models(gammalib.GModels(model)) - - # Return observation container - return obs +import cscripts # ================================ # @@ -269,17 +184,25 @@ if __name__ == '__main__': print('* CTA stacked analysis pipeline *') print('********************************************') - # Get optional arguments - if len(sys.argv) == 2: - datadir = sys.argv[1] - else: - datadir = 'data' + # Set usage string + usage = 'pipeline_stacked_disk.py [-d datadir]' + + # Set default options + options = [{'option': '-d', 'value': 'data'}] + + # Get arguments and options from command line arguments + args, options = cscripts.ioutils.get_args_options(options, usage) + + # Extract script parameters from options + datadir = options[0]['value'] # Setup observations - obs = setup_observations() + obs = cscripts.obsutils.set_observations(83.63, 22.01, 5.0, 0.0, 180.0, + 0.1, 100.0, 'South_0.5h', 'prod2', + pattern='four', offset=1.5) # Setup model - obs = setup_model(obs, model=datadir+'/crab.xml') + obs.models(gammalib.GModels(datadir+'/crab.xml')) # Run analysis pipeline run_pipeline(obs, model=datadir+'/crab.xml') diff --git a/examples/pipeline_stacked_mem.py b/examples/pipeline_stacked_mem.py index 4fffe13..9e91f5b 100755 --- a/examples/pipeline_stacked_mem.py +++ b/examples/pipeline_stacked_mem.py @@ -18,94 +18,9 @@ # along with this program. If not, see . # # ========================================================================== -import sys import gammalib import ctools -from cscripts import obsutils - - -# ================== # -# Setup observations # -# ================== # -def setup_observations(pattern='four', ra=83.63, dec=22.01, offset=1.5, - emin=0.1, emax=100.0, rad=5.0, duration=180.0, - deadc=0.95, caldb='prod2', irf='South_0.5h'): - """ - Returns an observation container - - Parameters - ---------- - pattern : str, optional - Pointing pattern, either 'single' or 'four' - ra : float, optional - Right Ascension of pattern centre (deg) - dec : float, optional - Declination of pattern centre (deg) - offset : float, optional - Offset between observations of pattern (deg) - emin : float, optional - Minimum energy (TeV) - emax : float, optional - Maximum energy (TeV) - rad : float, optional - ROI radius used for analysis (deg) - duration : float, optional - Duration of one CTA observation (s) - deadc : float, optional - Deadtime correction factor - caldb : str, optional - Calibration database path - irf : str, optional - Instrument response function - - Returns - ------- - obs : `~gammalib.GObservations` - Observation container - """ - # Set list of observations - obs_def_list = obsutils.set_obs_patterns(pattern, - ra=ra, - dec=dec, - offset=offset) - - # Get observation container - obs = obsutils.set_obs_list(obs_def_list, - duration=duration, - emin=emin, - emax=emax, - rad=rad, - caldb=caldb, - irf=irf) - - # Return observation container - return obs - - -# =========== # -# Setup model # -# =========== # -def setup_model(obs, model='data/crab.xml'): - """ - Setup model for analysis - - Parameters - ---------- - obs : `~gammalib.GObservations` - Observation container - model : str, optional - Model definition XML file - - Returns - ------- - obs : `~gammalib.GObservations` - Observation container - """ - # Append model from file to observation container - obs.models(gammalib.GModels(model)) - - # Return observation container - return obs +import cscripts # ================================ # @@ -242,17 +157,25 @@ if __name__ == '__main__': print('* CTA stacked analysis pipeline *') print('********************************************') - # Get optional arguments - if len(sys.argv) == 2: - datadir = sys.argv[1] - else: - datadir = 'data' + # Set usage string + usage = 'pipeline_stacked_mem.py [-d datadir]' + + # Set default options + options = [{'option': '-d', 'value': 'data'}] + + # Get arguments and options from command line arguments + args, options = cscripts.ioutils.get_args_options(options, usage) + + # Extract script parameters from options + datadir = options[0]['value'] # Setup observations - obs = setup_observations() + obs = cscripts.obsutils.set_observations(83.63, 22.01, 5.0, 0.0, 180.0, + 0.1, 100.0, 'South_0.5h', 'prod2', + pattern='four', offset=1.5) # Setup model - obs = setup_model(obs, model=datadir+'/crab.xml') + obs.models(gammalib.GModels(datadir+'/crab.xml')) # Run analysis pipeline run_pipeline(obs) diff --git a/examples/pipeline_unbinned_disk.py b/examples/pipeline_unbinned_disk.py index 350caea..a0953ac 100755 --- a/examples/pipeline_unbinned_disk.py +++ b/examples/pipeline_unbinned_disk.py @@ -18,94 +18,9 @@ # along with this program. If not, see . # # ========================================================================== -import sys import gammalib import ctools -from cscripts import obsutils - - -# ================== # -# Setup observations # -# ================== # -def setup_observations(pattern='four', ra=83.63, dec=22.01, offset=1.5, - emin=0.1, emax=100.0, rad=5.0, duration=180.0, - deadc=0.95, caldb='prod2', irf='South_0.5h'): - """ - Returns an observation container - - Parameters - ---------- - pattern : str, optional - Pointing pattern, either 'single' or 'four' - ra : float, optional - Right Ascension of pattern centre (deg) - dec : float, optional - Declination of pattern centre (deg) - offset : float, optional - Offset between observations of pattern (deg) - emin : float, optional - Minimum energy (TeV) - emax : float, optional - Maximum energy (TeV) - rad : float, optional - ROI radius used for analysis (deg) - duration : float, optional - Duration of one CTA observation (s) - deadc : float, optional - Deadtime correction factor - caldb : str, optional - Calibration database path - irf : str, optional - Instrument response function - - Returns - ------- - obs : `~gammalib.GObservations` - Observation container - """ - # Set list of observations - obs_def_list = obsutils.set_obs_patterns(pattern, - ra=ra, - dec=dec, - offset=offset) - - # Get observation container - obs = obsutils.set_obs_list(obs_def_list, - duration=duration, - emin=emin, - emax=emax, - rad=rad, - caldb=caldb, - irf=irf) - - # Return observation container - return obs - - -# =========== # -# Setup model # -# =========== # -def setup_model(obs, model='data/crab.xml'): - """ - Setup model for analysis - - Parameters - ---------- - obs : `~gammalib.GObservations` - Observation container - model : str, optional - Model definition XML file - - Returns - ------- - obs : `~gammalib.GObservations` - Observation container - """ - # Append model from file to observation container - obs.models(gammalib.GModels(model)) - - # Return observation container - return obs +import cscripts # ================================ # @@ -193,17 +108,25 @@ if __name__ == '__main__': print('* CTA unbinned analysis pipeline *') print('********************************************') - # Get optional arguments - if len(sys.argv) == 2: - datadir = sys.argv[1] - else: - datadir = 'data' + # Set usage string + usage = 'pipeline_unbinned_disk.py [-d datadir]' + + # Set default options + options = [{'option': '-d', 'value': 'data'}] + + # Get arguments and options from command line arguments + args, options = cscripts.ioutils.get_args_options(options, usage) + + # Extract script parameters from options + datadir = options[0]['value'] # Setup observations - obs = setup_observations() + obs = cscripts.obsutils.set_observations(83.63, 22.01, 5.0, 0.0, 180.0, + 0.1, 100.0, 'South_0.5h', 'prod2', + pattern='four', offset=1.5) # Setup model - obs = setup_model(obs, model=datadir+'/crab.xml') + obs.models(gammalib.GModels(datadir+'/crab.xml')) # Run analysis pipeline run_pipeline(obs, model=datadir+'/crab.xml') diff --git a/examples/pipeline_unbinned_mem.py b/examples/pipeline_unbinned_mem.py index 6835a7c..5ee396b 100755 --- a/examples/pipeline_unbinned_mem.py +++ b/examples/pipeline_unbinned_mem.py @@ -18,94 +18,9 @@ # along with this program. If not, see . # # ========================================================================== -import sys import gammalib import ctools -from cscripts import obsutils - - -# ================== # -# Setup observations # -# ================== # -def setup_observations(pattern='four', ra=83.63, dec=22.01, offset=1.5, - emin=0.1, emax=100.0, rad=5.0, duration=180.0, - deadc=0.95, caldb='prod2', irf='South_0.5h'): - """ - Returns an observation container - - Parameters - ---------- - pattern : str, optional - Pointing pattern, either 'single' or 'four' - ra : float, optional - Right Ascension of pattern centre (deg) - dec : float, optional - Declination of pattern centre (deg) - offset : float, optional - Offset between observations of pattern (deg) - emin : float, optional - Minimum energy (TeV) - emax : float, optional - Maximum energy (TeV) - rad : float, optional - ROI radius used for analysis (deg) - duration : float, optional - Duration of one CTA observation (s) - deadc : float, optional - Deadtime correction factor - caldb : str, optional - Calibration database path - irf : str, optional - Instrument response function - - Returns - ------- - obs : `~gammalib.GObservations` - Observation container - """ - # Set list of observations - obs_def_list = obsutils.set_obs_patterns(pattern, - ra=ra, - dec=dec, - offset=offset) - - # Get observation container - obs = obsutils.set_obs_list(obs_def_list, - duration=duration, - emin=emin, - emax=emax, - rad=rad, - caldb=caldb, - irf=irf) - - # Return observation container - return obs - - -# =========== # -# Setup model # -# =========== # -def setup_model(obs, model='data/crab.xml'): - """ - Setup model for analysis - - Parameters - ---------- - obs : `~gammalib.GObservations` - Observation container - model : str, optional - Model definition XML file - - Returns - ------- - obs : `~gammalib.GObservations` - Observation container - """ - # Append model from file to observation container - obs.models(gammalib.GModels(model)) - - # Return observation container - return obs +import cscripts # ================================ # @@ -175,17 +90,25 @@ if __name__ == '__main__': print('* CTA unbinned analysis pipeline *') print('********************************************') - # Get optional arguments - if len(sys.argv) == 2: - datadir = sys.argv[1] - else: - datadir = 'data' + # Set usage string + usage = 'pipeline_unbinned_mem.py [-d datadir]' + + # Set default options + options = [{'option': '-d', 'value': 'data'}] + + # Get arguments and options from command line arguments + args, options = cscripts.ioutils.get_args_options(options, usage) + + # Extract script parameters from options + datadir = options[0]['value'] # Setup observations - obs = setup_observations() + obs = cscripts.obsutils.set_observations(83.63, 22.01, 5.0, 0.0, 180.0, + 0.1, 100.0, 'South_0.5h', 'prod2', + pattern='four', offset=1.5) # Setup model - obs = setup_model(obs, model=datadir+'/crab.xml') + obs.models(gammalib.GModels(datadir+'/crab.xml')) # Run analysis pipeline run_pipeline(obs) diff --git a/test/test_examples.py.in b/test/test_examples.py.in index 9cd1534..cc148d7 100755 --- a/test/test_examples.py.in +++ b/test/test_examples.py.in @@ -186,7 +186,7 @@ class Test(gammalib.GPythonTestSuite): """ # Execute script self._execute_python('make_ts_distributions', - args='-n 2 -e 0 -d 1800 -p '+self._datadir) + args='-n 2 -e 0 -t 1800 -d '+self._datadir) # Return return @@ -197,7 +197,7 @@ class Test(gammalib.GPythonTestSuite): Test pipeline_binned_disk """ # Execute script - self._execute_python('pipeline_binned_disk', args=self._datadir) + self._execute_python('pipeline_binned_disk', args='-d '+self._datadir) # Return return @@ -208,7 +208,7 @@ class Test(gammalib.GPythonTestSuite): Test pipeline_binned_mem """ # Execute script - self._execute_python('pipeline_binned_mem', args=self._datadir) + self._execute_python('pipeline_binned_mem', args='-d '+self._datadir) # Return return @@ -219,7 +219,7 @@ class Test(gammalib.GPythonTestSuite): Test pipeline_stacked_disk """ # Execute script - self._execute_python('pipeline_stacked_disk', args=self._datadir) + self._execute_python('pipeline_stacked_disk', args='-d '+self._datadir) # Return return @@ -230,7 +230,7 @@ class Test(gammalib.GPythonTestSuite): Test pipeline_stacked_mem """ # Execute script - self._execute_python('pipeline_stacked_mem', args=self._datadir) + self._execute_python('pipeline_stacked_mem', args='-d '+self._datadir) # Return return @@ -241,7 +241,7 @@ class Test(gammalib.GPythonTestSuite): Test pipeline_unbinned_disk """ # Execute script - self._execute_python('pipeline_unbinned_disk', args=self._datadir) + self._execute_python('pipeline_unbinned_disk', args='-d '+self._datadir) # Return return @@ -252,7 +252,7 @@ class Test(gammalib.GPythonTestSuite): Test pipeline_unbinned_mem """ # Execute script - self._execute_python('pipeline_unbinned_mem', args=self._datadir) + self._execute_python('pipeline_unbinned_mem', args='-d '+self._datadir) # Return return