diff --git a/cscripts/Makefile.am b/cscripts/Makefile.am
index 59c2670..61260a4 100644
--- a/cscripts/Makefile.am
+++ b/cscripts/Makefile.am
@@ -1,19 +1,19 @@
## Process this file with automake to produce Makefile.in
# Scripts to be distributed in bindir
-binscripts = tsmerge.py modelmerge.py
+binscripts = tsmerge.py
# Scripts to be distributed in $(pyexecdir)/cscripts
pythonscripts = __init__.py \
cspull.py cssens.py cstsdist.py cscaldb.py csresmap.py \
cshessobs.py csobsdef.py csspec.py cslightcrv.py csobsinfo.py \
- csinfo.py \
+ csinfo.py csmodelinfo.py csmodelmerge.py \
obsutils.py
# Scripts for which symbolic links will be created in bindir
linkscripts = cspull cssens cstsdist cscaldb csresmap \
- cshessobs csobsdef csspec cslightcrv csobsinfo \
- csinfo
+ cshessobs csobsdef csspec cslightcrv csobsinfo csmodelmerge \
+ csinfo csmodelinfo
# Distribute scripts
EXTRA_DIST = $(binscripts) $(pythonscripts)
diff --git a/cscripts/csmodelinfo.py b/cscripts/csmodelinfo.py
old mode 100644
new mode 100755
index ac520b5..ac520b5
--- a/cscripts/csmodelinfo.py
+++ b/cscripts/csmodelinfo.py
diff --git a/cscripts/csmodelmerge.py b/cscripts/csmodelmerge.py
new file mode 100755
index 0000000..d6d2325
--- /dev/null
+++ b/cscripts/csmodelmerge.py
@@ -0,0 +1,217 @@
+#!/usr/bin/env python
+# ==========================================================================
+# Merges model XML files into one file
+#
+# Copyright (C) 2015 Michael Mayer
+#
+# 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 gammalib
+import ctools
+import sys
+import glob
+
+
+# =============== #
+# cshessobs class #
+# =============== #
+class csmodelmerge(ctools.cscript):
+ """
+ This class merges an arbitray number of model container into one output model XML file
+ """
+ def __init__(self, *argv):
+ """
+ Constructor.
+ """
+ # Set name
+ self.name = "csmodelmerge"
+ self.version = "0.1.0"
+
+ # Make sure that parfile exists
+ file = self.parfile()
+
+ # Initialise application
+ if len(argv) == 0:
+ ctools.cscript.__init__(self, self.name, self.version)
+ elif len(argv) == 1:
+ ctools.cscript.__init__(self, self.name, self.version, *argv)
+ else:
+ raise TypeError("Invalid number of arguments given.")
+
+ # Set logger properties
+ self.log_header()
+ self.log.date(True)
+
+ # Return
+ return
+
+ def __del__(self):
+ """
+ Destructor.
+ """
+ # Return
+ return
+
+ def parfile(self):
+ """
+ Check if parfile exists. If parfile does not exist then create a
+ default parfile. This kluge avoids shipping the cscript with a parfile.
+ """
+
+ # Set parfile name
+ parfile = self.name+".par"
+
+ try:
+ pars = gammalib.GApplicationPars(parfile)
+ except:
+ # Signal that parfile was not found
+ print("Parfile \""+parfile+"\" not found. Create default parfile.")
+
+ # Create default parfile
+ pars = gammalib.GApplicationPars()
+ pars.append(gammalib.GApplicationPar("inmodels","s","a","model.xml","","","Input model XML files"))
+ pars.append(gammalib.GApplicationPar("outmodel","f","a","NONE","","","Output model file"))
+ pars.append_standard()
+ pars.append(gammalib.GApplicationPar("logfile","f","h","csmodelmerge.log","","","Log filename"))
+ pars.save(parfile)
+
+ # Return
+ return
+
+ def get_parameters(self):
+ """
+ Get parameters from parfile and setup the observation.
+ """
+ # Get input models
+ self.inmodels = self["inmodels"].string()
+
+ # Interpet inmodels string
+ # Handle ascii files
+ if "@" == self.inmodels[0]:
+ self.files = open(self.inmodels.replace("@","")).read().splitlines()
+
+ # Handle wild card strings
+ elif "*" in self.inmodels:
+ self.files = glob.glob(self.inmodels)
+
+ # Handle space-separated list
+ elif " " in self.inmodels:
+ self.files = self.inmodels.split(" ")
+
+ # Handle comma-separated list
+ elif "," in self.inmodels:
+ self.files = self.inmodels.split(",")
+
+ # Throw exception if input models cannot be decoded
+ else:
+ msg = "Parameter \"inmodels\" must contain either an @asci file, a comma-separated or space-separated list of files or a wildcard string"
+ raise gammalib.GException.invalid_argument("csmodelmerge::get_parameters", msg)
+
+ # Get output file
+ self.outmodel = self["outmodel"].filename()
+
+ # Return
+ return
+
+
+ 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 parameters into logger
+ if self.logTerse():
+ self.log_parameters()
+ self.log("\n")
+
+ if self.logTerse():
+ self.log("\n")
+ self.log.header1("Merging Models")
+ self.log("\n")
+
+
+ # Initialise output model container
+ self.models = gammalib.GModels()
+
+ # Loop over model files
+ for modelfile in self.files:
+
+ # Logging
+ self.log("Adding "+modelfile)
+ self.log("\n")
+
+ # Open models
+ model_add = gammalib.GModels(modelfile)
+
+ # Append models to container
+ for model in model_add:
+ self.models.append(model)
+
+ # Return
+ return
+
+ def save(self):
+ """
+ Save pointings to ds9 region file if required
+ """
+
+ # Logging
+ if self.logExplicit():
+ self.log("\n")
+ self.log.header1("Saving model file")
+ self.log("\n")
+
+ # Save models
+ self.models.save(self.outmodel)
+
+ # Return
+ return
+
+
+ def execute(self):
+ """
+ Execute the script.
+ """
+ # Run the script
+ self.run()
+
+ # Save ds9 file if required
+ self.save()
+
+ # Return
+ return
+
+
+# ======================== #
+# Main routine entry point #
+# ======================== #
+if __name__ == '__main__':
+ """
+ Generates caldb entry.
+ """
+ # Create instance of application
+ app = csmodelmerge(sys.argv)
+
+ # Open logfile
+ app.logFileOpen()
+
+ # Execute application
+ app.execute()
diff --git a/test/data/model_cube_background2.xml b/test/data/model_cube_background2.xml
new file mode 100644
index 0000000..82e839b
--- /dev/null
+++ b/test/data/model_cube_background2.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/test/test_cscripts.sh.in b/test/test_cscripts.sh.in
index ab5c68c..a5586ef 100755
--- a/test/test_cscripts.sh.in
+++ b/test/test_cscripts.sh.in
@@ -80,22 +80,119 @@ $ECHO -n "Test csobsinfo: "
chmod +x @abs_top_srcdir@/cscripts/csobsinfo.py
@abs_top_srcdir@/cscripts/csobsinfo.py \
inobs="obs.xml" \
- ds9file="ds9.reg" \
+ ds9file="obs.reg" \
offset=yes \
ra="83.6331" \
dec="22.01" > csobsinfo.log
$ECHO -n "."
-if [ -s "ds9.reg" ]
+if [ -s "obs.reg" ]
then
$ECHO -n "."
else
- $ECHO " ds9.reg file is not valid"
+ $ECHO " obs.reg file is not valid"
exit 1
fi
$ECHO " ok"
#
+# Test csmodelinfo
+# ==============
+$ECHO -n "Test csmodelinfo: "
+chmod +x @abs_top_srcdir@/cscripts/csmodelinfo.py
+@abs_top_srcdir@/cscripts/csmodelinfo.py \
+ inmodel="data/crab.xml" \
+ ds9file="model.reg" > csmodelinfo.log
+$ECHO -n "."
+if [ -s "model.reg" ]
+then
+ $ECHO -n "."
+else
+ $ECHO " model.reg file is not valid"
+ exit 1
+fi
+$ECHO " ok"
+
+
+#
+# Test csmodelmerge (space-separated)
+# ==============
+$ECHO -n "Test csmodelmerge: "
+chmod +x @abs_top_srcdir@/cscripts/csmodelmerge.py
+@abs_top_srcdir@/cscripts/csmodelmerge.py \
+ inmodels="data/crab.xml data/source1.xml" \
+ outmodel="merged_models.xml" > csmodelmerge.log
+$ECHO -n "."
+if [ -s "merged_models.xml" ]
+then
+ $ECHO -n "."
+else
+ $ECHO " merged_models.xml file is not valid"
+ exit 1
+fi
+$ECHO " ok"
+
+
+#
+# Test csmodelmerge (comma-separated)
+# ==============
+$ECHO -n "Test csmodelmerge: "
+chmod +x @abs_top_srcdir@/cscripts/csmodelmerge.py
+@abs_top_srcdir@/cscripts/csmodelmerge.py \
+ inmodels="data/crab.xml,data/source1.xml" \
+ outmodel="merged_models2.xml" > csmodelmerge.log
+$ECHO -n "."
+if [ -s "merged_models2.xml" ]
+then
+ $ECHO -n "."
+else
+ $ECHO " merged_models2.xml file is not valid"
+ exit 1
+fi
+$ECHO " ok"
+
+
+#
+# Test csmodelmerge (wildcard string)
+# ==============
+$ECHO -n "Test csmodelmerge: "
+chmod +x @abs_top_srcdir@/cscripts/csmodelmerge.py
+@abs_top_srcdir@/cscripts/csmodelmerge.py \
+ inmodels="data/model_cube_background*.xml" \
+ outmodel="merged_models3.xml" > csmodelmerge.log
+$ECHO -n "."
+if [ -s "merged_models3.xml" ]
+then
+ $ECHO -n "."
+else
+ $ECHO " merged_models3.xml file is not valid"
+ exit 1
+fi
+$ECHO " ok"
+
+
+#
+# Test csmodelmerge (ascii-file)
+# ==============
+ls data/model_cube_background* > models.txt
+$ECHO -n "Test csmodelmerge: "
+chmod +x @abs_top_srcdir@/cscripts/csmodelmerge.py
+@abs_top_srcdir@/cscripts/csmodelmerge.py \
+ inmodels="@models.txt" \
+ outmodel="merged_models4.xml" > csmodelmerge.log
+$ECHO -n "."
+if [ -s "merged_models4.xml" ]
+then
+ $ECHO -n "."
+else
+ $ECHO " merged_models4.xml file is not valid"
+ exit 1
+fi
+$ECHO " ok"
+rm models.txt
+
+
+#
# Test cspull
# ===========
$ECHO -n "Test cspull: "