Commit 3c523aecad437f4c8dd4ac4efe6d736d64047dce
1 parent
28c54e74
Add comobsconv script (#4159)
Showing
23 changed files
with
841 additions
and
3 deletions
.gitignore
ChangeLog
NEWS
1 | 1 | New Features and Important Changes in ctools 2.1.0 |
2 | 2 | |
3 | -9 November 2022 | |
3 | +18 November 2022 | |
4 | 4 | |
5 | 5 | |
6 | 6 | Introduction |
... | ... | @@ -349,6 +349,11 @@ comobsbin - Bin COMPTEL observations |
349 | 349 | None |
350 | 350 | |
351 | 351 | |
352 | +comobsconv - Convolve models with COMPTEL response | |
353 | +-------------------------------------------------- | |
354 | +New script that convolves celestial model with the COMPTEL response (#4159). | |
355 | + | |
356 | + | |
352 | 357 | comobsmodel - Generate model for binned COMPTEL observations |
353 | 358 | ------------------------------------------------------------ |
354 | 359 | None | ... | ... |
README.md
1 | 1 | ctools information |
2 | 2 | ================== |
3 | -* Version: 2.1.0.dev (9 November 2022) | |
3 | +* Version: 2.1.0.dev (18 November 2022) | |
4 | 4 | * GammaLib dependency: 2.1.0.dev |
5 | 5 | |
6 | 6 | [![Build Status](https://cta-jenkins.irap.omp.eu/buildStatus/icon?job=ctools-integrate-os)](https://cta-jenkins.irap.omp.eu/job/ctools-integrate-os/) | ... | ... |
doc/source/admin/release_history/2.1.rst
... | ... | @@ -16,6 +16,9 @@ In particular, this release provides: |
16 | 16 | Bug fixes |
17 | 17 | --------- |
18 | 18 | |
19 | +* [`4159 <https://cta-redmine.irap.omp.eu/issues/4159>`_] - | |
20 | + Add :ref:`comobsconv` script | |
21 | +* Optionally write fitted null hypothesis model in cttsmap | |
19 | 22 | * [`4096 <https://cta-redmine.irap.omp.eu/issues/4096>`_] - |
20 | 23 | Avoid Nan in :ref:`ctbutterfly` |
21 | 24 | ... | ... |
doc/source/users/reference_manual/comobsadd.rst
doc/source/users/reference_manual/comobsback.rst
doc/source/users/reference_manual/comobsbin.rst
doc/source/users/reference_manual/comobsconv.rst
0 → 100755
1 | +.. _comobsconv: | |
2 | + | |
3 | +comobsconv | |
4 | +========== | |
5 | + | |
6 | +Convolves models with COMPTEL reponse. | |
7 | + | |
8 | + | |
9 | +Synopsis | |
10 | +-------- | |
11 | + | |
12 | +This script convolves celestial models of gamma-ray emission with the COMPTEL | |
13 | +response and stores the result in a FITS file. Only model component for which | |
14 | +all spatial parameters are fixed will be considered. The response will be | |
15 | +stored in FITS files using a compressed format that is also used internally by | |
16 | +the software to cache response computations. The convolved response information | |
17 | +is attached using a ``RSP`` tag to the output observation definition XML file | |
18 | +and will be automatically used for any further processing. | |
19 | + | |
20 | +The file names of the convolved response files will be constructed from the | |
21 | +background model file names by replacing the string ``drb`` with the string | |
22 | +specified using the hidden ``filetype`` parameter. The convolved response | |
23 | +files will be stored in the folder specified by the hidden ``outfolder`` | |
24 | +parameter. Once written, a convolved response file will never be written again. | |
25 | +If a convolved response file should be rewritten, the ``filetype`` parameter | |
26 | +needs to modified so that a different filename will be used. | |
27 | + | |
28 | + | |
29 | +General parameters | |
30 | +------------------ | |
31 | + | |
32 | +``inobs [file]`` | |
33 | + Input observation definition XML file. | |
34 | + | |
35 | +``inmodel [file]`` | |
36 | + Input model definition XML file. | |
37 | + | |
38 | +``(outfolder = dri) [string]`` | |
39 | + Output folder for convolved response files. | |
40 | + | |
41 | +``outobs [file]`` | |
42 | + Output observation definition XML file. | |
43 | + | |
44 | +``(filetype = rsp) [string]`` | |
45 | + File type. | |
46 | + | |
47 | + | |
48 | +Standard parameters | |
49 | +------------------- | |
50 | + | |
51 | +``(chatter = 2) [integer]`` | |
52 | + Verbosity of the executable: | |
53 | + ``chatter = 0``: no information will be logged | |
54 | + | |
55 | + ``chatter = 1``: only errors will be logged | |
56 | + | |
57 | + ``chatter = 2``: errors and actions will be logged | |
58 | + | |
59 | + ``chatter = 3``: report about the task execution | |
60 | + | |
61 | + ``chatter = 4``: detailed report about the task execution | |
62 | + | |
63 | +``(clobber = yes) [boolean]`` | |
64 | + Specifies whether an existing energy boundaries output file should be overwritten. | |
65 | + | |
66 | +``(debug = no) [boolean]`` | |
67 | + Enables debug mode. In debug mode the executable will dump any log file output to the console. | |
68 | + | |
69 | +``(mode = ql) [string]`` | |
70 | + Mode of automatic parameters (default is ``ql``, i.e. "query and learn"). | |
71 | + | |
72 | +``(logfile = comobsconv.log) [filename]`` | |
73 | + Log filename. | |
74 | + | |
75 | + | |
76 | +Related tools or scripts | |
77 | +------------------------ | |
78 | + | |
79 | +None | ... | ... |
doc/source/users/reference_manual/comobsmodel.rst
doc/source/users/reference_manual/comobsres.rst
doc/source/users/reference_manual/comobsselect.rst
doc/source/users/reference_manual/comobssim.rst
doc/source/users/reference_manual/compulbin.rst
doc/source/users/reference_manual/comsrcdetect.rst
doc/source/users/reference_manual/index.rst
... | ... | @@ -104,6 +104,7 @@ COMPTEL analysis scripts |
104 | 104 | comobsadd --- Combine observations <comobsadd> |
105 | 105 | comobsback --- Generate background model for COMPTEL observations <comobsback> |
106 | 106 | comobsbin --- Bin COMPTEL observations <comobsbin> |
107 | + comobsconv --- Convolve models with COMPTEL response <comobsconv> | |
107 | 108 | comobsmodel --- Generate model for binned COMPTEL observations <comobsmodel> |
108 | 109 | comobsres --- Generate residuals of COMPTEL observations <comobsres> |
109 | 110 | comobsselect --- Select observations from COMPTEL database <comobsselect> | ... | ... |
modules/comscripts/Makefile.am
... | ... | @@ -27,6 +27,7 @@ pythonscripts = $(top_builddir)/modules/comscripts/__init__.py \ |
27 | 27 | $(srcdir)/comobsadd.py \ |
28 | 28 | $(srcdir)/comobsback.py \ |
29 | 29 | $(srcdir)/comobsbin.py \ |
30 | + $(srcdir)/comobsconv.py \ | |
30 | 31 | $(srcdir)/comobsmodel.py \ |
31 | 32 | $(srcdir)/comobsres.py \ |
32 | 33 | $(srcdir)/comobsselect.py \ |
... | ... | @@ -41,6 +42,7 @@ parfiles = $(srcdir)/comgendb.par \ |
41 | 42 | $(srcdir)/comobsadd.par \ |
42 | 43 | $(srcdir)/comobsback.par \ |
43 | 44 | $(srcdir)/comobsbin.par \ |
45 | + $(srcdir)/comobsconv.par \ | |
44 | 46 | $(srcdir)/comobsmodel.par \ |
45 | 47 | $(srcdir)/comobsres.par \ |
46 | 48 | $(srcdir)/comobsselect.par \ |
... | ... | @@ -55,6 +57,7 @@ linkscripts = comgendb \ |
55 | 57 | comobsadd \ |
56 | 58 | comobsback \ |
57 | 59 | comobsbin \ |
60 | + comobsconv \ | |
58 | 61 | comobsmodel \ |
59 | 62 | comobsres \ |
60 | 63 | comobsselect \ |
... | ... | @@ -71,6 +74,7 @@ testscripts = $(srcdir)/tests/__init__.py \ |
71 | 74 | $(top_srcdir)/test/test_comobsadd.py \ |
72 | 75 | $(top_srcdir)/test/test_comobsback.py \ |
73 | 76 | $(top_srcdir)/test/test_comobsbin.py \ |
77 | + $(top_srcdir)/test/test_comobsconv.py \ | |
74 | 78 | $(top_srcdir)/test/test_comobsmodel.py \ |
75 | 79 | $(top_srcdir)/test/test_comobsres.py \ |
76 | 80 | $(top_srcdir)/test/test_comobsselect.py \ |
... | ... | @@ -82,6 +86,7 @@ testscripts = $(srcdir)/tests/__init__.py \ |
82 | 86 | testdata = $(top_srcdir)/test/data/comptel/ebounds_std.fits.gz \ |
83 | 87 | $(top_srcdir)/test/data/comptel/ebounds_std1.fits.gz \ |
84 | 88 | $(top_srcdir)/test/data/comptel/models.xml \ |
89 | + $(top_srcdir)/test/data/comptel/models_fix.xml \ | |
85 | 90 | $(top_srcdir)/test/data/comptel/obs_binned.xml \ |
86 | 91 | $(top_srcdir)/test/data/comptel/obs_binned1.xml \ |
87 | 92 | $(top_srcdir)/test/data/comptel/obs_selected.xml \ | ... | ... |
modules/comscripts/__init__.py.in
... | ... | @@ -24,6 +24,7 @@ __all__ = ['comgendb', |
24 | 24 | 'comobsselect', |
25 | 25 | 'comobsback', |
26 | 26 | 'comobsbin', |
27 | + 'comobsconv', | |
27 | 28 | 'comobsmodel', |
28 | 29 | 'comobsres', |
29 | 30 | 'comobssim', |
... | ... | @@ -38,6 +39,7 @@ from comscripts.comobsadd import comobsadd |
38 | 39 | from comscripts.comobsselect import comobsselect |
39 | 40 | from comscripts.comobsback import comobsback |
40 | 41 | from comscripts.comobsbin import comobsbin |
42 | +from comscripts.comobsconv import comobsconv | |
41 | 43 | from comscripts.comobsmodel import comobsmodel |
42 | 44 | from comscripts.comobsres import comobsres |
43 | 45 | from comscripts.comobssim import comobssim | ... | ... |
modules/comscripts/comobsconv.par
0 → 100644
1 | +############################################################################# | |
2 | +# # | |
3 | +# COMPTEL Science Analysis Tools # | |
4 | +# # | |
5 | +# ------------------------------------------------------------------------- # | |
6 | +# # | |
7 | +# File: comobsconv.par # | |
8 | +# # | |
9 | +# Author: Juergen Knoedlseder # | |
10 | +# Jurgen.Knodlseder@irap.omp.eu # | |
11 | +# IRAP # | |
12 | +# # | |
13 | +# Purpose: Parameter file for the comobsconv script # | |
14 | +# # | |
15 | +############################################################################# | |
16 | +# | |
17 | +# Input and output parameters | |
18 | +#============================ | |
19 | +inobs, f, a, obs.xml,,, "Input observation definition file" | |
20 | +inmodel, f, a, models.xml,,, "Input model definition file" | |
21 | +outfolder, s, h, dri,,, "Output folder for convolved response files" | |
22 | +outobs, f, a, outobs,,, "Output observation definition file" | |
23 | +filetype, s, h, rsp,,, "File type" | |
24 | + | |
25 | +# | |
26 | +# Script parameters | |
27 | +#================== | |
28 | + | |
29 | +# | |
30 | +# Standard parameters | |
31 | +#==================== | |
32 | +chatter, i, h, 2,0,4, "Chattiness of output" | |
33 | +clobber, b, h, yes,,, "Overwrite existing output files with new output files?" | |
34 | +debug, b, h, no,,, "Activate debugging mode?" | |
35 | +mode, s, h, ql,,, "Mode of automatic parameters" | |
36 | +logfile, f, h, comobsconv.log,,, "Log filename" | ... | ... |
modules/comscripts/comobsconv.py
0 → 100755
1 | +#! /usr/bin/env python | |
2 | +# ========================================================================== | |
3 | +# Convolve models with response for COMPTEL observations | |
4 | +# | |
5 | +# Copyright (C) 2022 Juergen Knoedlseder | |
6 | +# | |
7 | +# This program is free software: you can redistribute it and/or modify | |
8 | +# it under the terms of the GNU General Public License as published by | |
9 | +# the Free Software Foundation, either version 3 of the License, or | |
10 | +# (at your option) any later version. | |
11 | +# | |
12 | +# This program is distributed in the hope that it will be useful, | |
13 | +# but WITHOUT ANY WARRANTY; without even the implied warranty of | |
14 | +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
15 | +# GNU General Public License for more details. | |
16 | +# | |
17 | +# You should have received a copy of the GNU General Public License | |
18 | +# along with this program. If not, see <http://www.gnu.org/licenses/>. | |
19 | +# | |
20 | +# ========================================================================== | |
21 | +import sys | |
22 | +import glob | |
23 | +import os | |
24 | +import gammalib | |
25 | +import ctools | |
26 | + | |
27 | + | |
28 | +# ================ # | |
29 | +# comobsconv class # | |
30 | +# ================ # | |
31 | +class comobsconv(ctools.csobservation): | |
32 | + """ | |
33 | + """ | |
34 | + # Constructor | |
35 | + def __init__(self, *argv): | |
36 | + """ | |
37 | + Constructor | |
38 | + """ | |
39 | + # Initialise application by calling the base class constructor | |
40 | + self._init_csobservation(self.__class__.__name__, ctools.__version__, argv) | |
41 | + | |
42 | + # Return | |
43 | + return | |
44 | + | |
45 | + # Private methods | |
46 | + def _get_parameters(self): | |
47 | + """ | |
48 | + Get parameters from parfile | |
49 | + """ | |
50 | + # Set observation if not done before | |
51 | + if self.obs().is_empty(): | |
52 | + self.obs().load(self['inobs'].filename()) | |
53 | + | |
54 | + # Set models if we have none | |
55 | + if self.obs().models().is_empty(): | |
56 | + self.obs().models(self['inmodel'].filename()) | |
57 | + | |
58 | + # Query parameters | |
59 | + self['outfolder'].string() | |
60 | + self['filetype'].string() | |
61 | + | |
62 | + # Query ahead output model filename | |
63 | + if self._read_ahead(): | |
64 | + self['outobs'].filename() | |
65 | + | |
66 | + # Write input parameters into logger | |
67 | + self._log_parameters(gammalib.TERSE) | |
68 | + | |
69 | + # Return | |
70 | + return | |
71 | + | |
72 | + | |
73 | + # Public methods | |
74 | + def process(self): | |
75 | + """ | |
76 | + Process the script | |
77 | + """ | |
78 | + # Get parameters | |
79 | + self._get_parameters() | |
80 | + | |
81 | + # Set parameters | |
82 | + outfolder = self['outfolder'].string() | |
83 | + filetype = self['filetype'].string() | |
84 | + | |
85 | + # Create cache file directory | |
86 | + try: | |
87 | + os.makedirs(gammalib.expand_env(outfolder)) | |
88 | + except OSError: | |
89 | + pass | |
90 | + | |
91 | + # Write input observation container into logger | |
92 | + self._log_observations(gammalib.NORMAL, self.obs(), 'Input observation') | |
93 | + | |
94 | + # Write input models into logger | |
95 | + self._log_models(gammalib.VERBOSE, self.obs().models(), 'Input model') | |
96 | + | |
97 | + # Log header | |
98 | + self._log_header1(gammalib.NORMAL, 'Set response cache names') | |
99 | + | |
100 | + # Loop over all observations | |
101 | + for obs in self.obs(): | |
102 | + | |
103 | + # Write header | |
104 | + self._log_header3(gammalib.NORMAL, self._get_obs_header(obs)) | |
105 | + | |
106 | + # Get DRB name | |
107 | + drbname = obs.drbname().url() | |
108 | + | |
109 | + # Derive response cache name from DRB name | |
110 | + rspname = '%s/%s' % (outfolder, os.path.basename(drbname.replace('drb', filetype))) | |
111 | + | |
112 | + # Set response cache name | |
113 | + obs.rspname(rspname) | |
114 | + | |
115 | + # Log DRE and cache name | |
116 | + self._log_value(gammalib.NORMAL, 'DRB name', drbname) | |
117 | + self._log_value(gammalib.NORMAL, 'Response cache name', rspname) | |
118 | + | |
119 | + # Log header | |
120 | + self._log_header1(gammalib.NORMAL, 'Convolve models with response') | |
121 | + | |
122 | + # Compute response by calling evaluation method | |
123 | + self.obs().eval() | |
124 | + | |
125 | + # Return | |
126 | + return | |
127 | + | |
128 | + def save(self): | |
129 | + """ | |
130 | + Save observation definition file | |
131 | + """ | |
132 | + # Write header | |
133 | + self._log_header1(gammalib.TERSE, 'Save observations') | |
134 | + | |
135 | + # Get output filename | |
136 | + outobs = self['outobs'].filename() | |
137 | + | |
138 | + # If file exists and clobber flag is false then raise an exception | |
139 | + if outobs.exists() and not self['clobber'].boolean(): | |
140 | + msg = ('Cannot save "'+outobs.url()+'": File already exists. ' | |
141 | + 'Use parameter clobber=yes to allow overwriting of files.') | |
142 | + raise RuntimeError(msg) | |
143 | + | |
144 | + # Otherwise log filename and save file | |
145 | + else: | |
146 | + | |
147 | + # Save observation definition file | |
148 | + self.obs().save(outobs) | |
149 | + self._log_value(gammalib.NORMAL, 'Obs. definition XML file', outobs.url()) | |
150 | + | |
151 | + # Return | |
152 | + return | |
153 | + | |
154 | + | |
155 | +# ======================== # | |
156 | +# Main routine entry point # | |
157 | +# ======================== # | |
158 | +if __name__ == '__main__': | |
159 | + | |
160 | + # Create instance of application | |
161 | + app = comobsconv(sys.argv) | |
162 | + | |
163 | + # Execute application | |
164 | + app.execute() | ... | ... |
test/data/comptel/models_fix.xml
0 → 100644
1 | +<?xml version="1.0" encoding="UTF-8" standalone="no"?> | |
2 | +<source_library title="source library"> | |
3 | + <source name="Crab" type="PointSource" tscalc="1"> | |
4 | + <spectrum type="PowerLaw"> | |
5 | + <parameter name="Prefactor" value="1" error="0" scale="0.002" min="5e-23" free="1" /> | |
6 | + <parameter name="Index" value="1" error="-0" scale="-2" min="-5" max="5" free="1" /> | |
7 | + <parameter name="PivotEnergy" value="1" scale="1" free="0" /> | |
8 | + </spectrum> | |
9 | + <spatialModel type="PointSource"> | |
10 | + <parameter name="RA" value="83.6331" error="0" scale="1" free="0" /> | |
11 | + <parameter name="DEC" value="22.0145" error="0" scale="1" free="0" /> | |
12 | + </spatialModel> | |
13 | + </source> | |
14 | + <source name="Background_vp0001_0_000750-001000keV" type="DRBPhibarNodes" instrument="COM" id="vp0001_0_000750-001000keV"> | |
15 | + <node> | |
16 | + <parameter name="Phibar" value="15" scale="1" min="0" max="50" free="0" /> | |
17 | + <parameter name="Normalization" value="1" error="0" scale="1" min="0" max="1000" free="1" /> | |
18 | + </node> | |
19 | + <node> | |
20 | + <parameter name="Phibar" value="17" scale="1" min="0" max="50" free="0" /> | |
21 | + <parameter name="Normalization" value="1" error="0" scale="1" min="0" max="1000" free="1" /> | |
22 | + </node> | |
23 | + <node> | |
24 | + <parameter name="Phibar" value="19" scale="1" min="0" max="50" free="0" /> | |
25 | + <parameter name="Normalization" value="1" error="0" scale="1" min="0" max="1000" free="1" /> | |
26 | + </node> | |
27 | + <node> | |
28 | + <parameter name="Phibar" value="21" scale="1" min="0" max="50" free="0" /> | |
29 | + <parameter name="Normalization" value="1" error="0" scale="1" min="0" max="1000" free="1" /> | |
30 | + </node> | |
31 | + <node> | |
32 | + <parameter name="Phibar" value="23" scale="1" min="0" max="50" free="0" /> | |
33 | + <parameter name="Normalization" value="1" error="0" scale="1" min="0" max="1000" free="1" /> | |
34 | + </node> | |
35 | + <node> | |
36 | + <parameter name="Phibar" value="25" scale="1" min="0" max="50" free="0" /> | |
37 | + <parameter name="Normalization" value="1" error="0" scale="1" min="0" max="1000" free="1" /> | |
38 | + </node> | |
39 | + <node> | |
40 | + <parameter name="Phibar" value="27" scale="1" min="0" max="50" free="0" /> | |
41 | + <parameter name="Normalization" value="1" error="0" scale="1" min="0" max="1000" free="1" /> | |
42 | + </node> | |
43 | + <node> | |
44 | + <parameter name="Phibar" value="29" scale="1" min="0" max="50" free="0" /> | |
45 | + <parameter name="Normalization" value="1" error="0" scale="1" min="0" max="1000" free="1" /> | |
46 | + </node> | |
47 | + <node> | |
48 | + <parameter name="Phibar" value="31" scale="1" min="0" max="50" free="0" /> | |
49 | + <parameter name="Normalization" value="1" error="0" scale="1" min="0" max="1000" free="1" /> | |
50 | + </node> | |
51 | + <node> | |
52 | + <parameter name="Phibar" value="33" scale="1" min="0" max="50" free="0" /> | |
53 | + <parameter name="Normalization" value="1" error="0" scale="1" min="0" max="1000" free="1" /> | |
54 | + </node> | |
55 | + <node> | |
56 | + <parameter name="Phibar" value="35" scale="1" min="0" max="50" free="0" /> | |
57 | + <parameter name="Normalization" value="1" error="0" scale="1" min="0" max="1000" free="1" /> | |
58 | + </node> | |
59 | + <node> | |
60 | + <parameter name="Phibar" value="37" scale="1" min="0" max="50" free="0" /> | |
61 | + <parameter name="Normalization" value="1" error="0" scale="1" min="0" max="1000" free="1" /> | |
62 | + </node> | |
63 | + <node> | |
64 | + <parameter name="Phibar" value="39" scale="1" min="0" max="50" free="0" /> | |
65 | + <parameter name="Normalization" value="1" error="0" scale="1" min="0" max="1000" free="1" /> | |
66 | + </node> | |
67 | + <node> | |
68 | + <parameter name="Phibar" value="41" scale="1" min="0" max="50" free="0" /> | |
69 | + <parameter name="Normalization" value="1" error="0" scale="1" min="0" max="1000" free="1" /> | |
70 | + </node> | |
71 | + <node> | |
72 | + <parameter name="Phibar" value="43" scale="1" min="0" max="50" free="0" /> | |
73 | + <parameter name="Normalization" value="1" error="0" scale="1" min="0" max="1000" free="1" /> | |
74 | + </node> | |
75 | + </source> | |
76 | + <source name="Background_vp0001_0_001000-003000keV" type="DRBPhibarNodes" instrument="COM" id="vp0001_0_001000-003000keV"> | |
77 | + <node> | |
78 | + <parameter name="Phibar" value="5" scale="1" min="0" max="50" free="0" /> | |
79 | + <parameter name="Normalization" value="1" error="0" scale="1" min="0" max="1000" free="1" /> | |
80 | + </node> | |
81 | + <node> | |
82 | + <parameter name="Phibar" value="7" scale="1" min="0" max="50" free="0" /> | |
83 | + <parameter name="Normalization" value="1" error="0" scale="1" min="0" max="1000" free="1" /> | |
84 | + </node> | |
85 | + <node> | |
86 | + <parameter name="Phibar" value="9" scale="1" min="0" max="50" free="0" /> | |
87 | + <parameter name="Normalization" value="1" error="0" scale="1" min="0" max="1000" free="1" /> | |
88 | + </node> | |
89 | + <node> | |
90 | + <parameter name="Phibar" value="11" scale="1" min="0" max="50" free="0" /> | |
91 | + <parameter name="Normalization" value="1" error="0" scale="1" min="0" max="1000" free="1" /> | |
92 | + </node> | |
93 | + <node> | |
94 | + <parameter name="Phibar" value="13" scale="1" min="0" max="50" free="0" /> | |
95 | + <parameter name="Normalization" value="1" error="0" scale="1" min="0" max="1000" free="1" /> | |
96 | + </node> | |
97 | + <node> | |
98 | + <parameter name="Phibar" value="15" scale="1" min="0" max="50" free="0" /> | |
99 | + <parameter name="Normalization" value="1" error="0" scale="1" min="0" max="1000" free="1" /> | |
100 | + </node> | |
101 | + <node> | |
102 | + <parameter name="Phibar" value="17" scale="1" min="0" max="50" free="0" /> | |
103 | + <parameter name="Normalization" value="1" error="0" scale="1" min="0" max="1000" free="1" /> | |
104 | + </node> | |
105 | + <node> | |
106 | + <parameter name="Phibar" value="19" scale="1" min="0" max="50" free="0" /> | |
107 | + <parameter name="Normalization" value="1" error="0" scale="1" min="0" max="1000" free="1" /> | |
108 | + </node> | |
109 | + <node> | |
110 | + <parameter name="Phibar" value="21" scale="1" min="0" max="50" free="0" /> | |
111 | + <parameter name="Normalization" value="1" error="0" scale="1" min="0" max="1000" free="1" /> | |
112 | + </node> | |
113 | + <node> | |
114 | + <parameter name="Phibar" value="23" scale="1" min="0" max="50" free="0" /> | |
115 | + <parameter name="Normalization" value="1" error="0" scale="1" min="0" max="1000" free="1" /> | |
116 | + </node> | |
117 | + <node> | |
118 | + <parameter name="Phibar" value="25" scale="1" min="0" max="50" free="0" /> | |
119 | + <parameter name="Normalization" value="1" error="0" scale="1" min="0" max="1000" free="1" /> | |
120 | + </node> | |
121 | + <node> | |
122 | + <parameter name="Phibar" value="27" scale="1" min="0" max="50" free="0" /> | |
123 | + <parameter name="Normalization" value="1" error="0" scale="1" min="0" max="1000" free="1" /> | |
124 | + </node> | |
125 | + <node> | |
126 | + <parameter name="Phibar" value="29" scale="1" min="0" max="50" free="0" /> | |
127 | + <parameter name="Normalization" value="1" error="0" scale="1" min="0" max="1000" free="1" /> | |
128 | + </node> | |
129 | + <node> | |
130 | + <parameter name="Phibar" value="31" scale="1" min="0" max="50" free="0" /> | |
131 | + <parameter name="Normalization" value="1" error="0" scale="1" min="0" max="1000" free="1" /> | |
132 | + </node> | |
133 | + <node> | |
134 | + <parameter name="Phibar" value="33" scale="1" min="0" max="50" free="0" /> | |
135 | + <parameter name="Normalization" value="1" error="0" scale="1" min="0" max="1000" free="1" /> | |
136 | + </node> | |
137 | + <node> | |
138 | + <parameter name="Phibar" value="35" scale="1" min="0" max="50" free="0" /> | |
139 | + <parameter name="Normalization" value="1" error="0" scale="1" min="0" max="1000" free="1" /> | |
140 | + </node> | |
141 | + <node> | |
142 | + <parameter name="Phibar" value="37" scale="1" min="0" max="50" free="0" /> | |
143 | + <parameter name="Normalization" value="1" error="0" scale="1" min="0" max="1000" free="1" /> | |
144 | + </node> | |
145 | + <node> | |
146 | + <parameter name="Phibar" value="39" scale="1" min="0" max="50" free="0" /> | |
147 | + <parameter name="Normalization" value="1" error="0" scale="1" min="0" max="1000" free="1" /> | |
148 | + </node> | |
149 | + <node> | |
150 | + <parameter name="Phibar" value="41" scale="1" min="0" max="50" free="0" /> | |
151 | + <parameter name="Normalization" value="1" error="0" scale="1" min="0" max="1000" free="1" /> | |
152 | + </node> | |
153 | + <node> | |
154 | + <parameter name="Phibar" value="43" scale="1" min="0" max="50" free="0" /> | |
155 | + <parameter name="Normalization" value="1" error="0" scale="1" min="0" max="1000" free="1" /> | |
156 | + </node> | |
157 | + <node> | |
158 | + <parameter name="Phibar" value="45" scale="1" min="0" max="50" free="0" /> | |
159 | + <parameter name="Normalization" value="1" error="0" scale="1" min="0" max="1000" free="1" /> | |
160 | + </node> | |
161 | + <node> | |
162 | + <parameter name="Phibar" value="47" scale="1" min="0" max="50" free="0" /> | |
163 | + <parameter name="Normalization" value="1" error="0" scale="1" min="0" max="1000" free="1" /> | |
164 | + </node> | |
165 | + <node> | |
166 | + <parameter name="Phibar" value="49" scale="1" min="0" max="50" free="0" /> | |
167 | + <parameter name="Normalization" value="1" error="0" scale="1" min="0" max="1000" free="1" /> | |
168 | + </node> | |
169 | + </source> | |
170 | + <source name="Background_vp0001_0_003000-010000keV" type="DRBPhibarNodes" instrument="COM" id="vp0001_0_003000-010000keV"> | |
171 | + <node> | |
172 | + <parameter name="Phibar" value="1" scale="1" min="0" max="50" free="0" /> | |
173 | + <parameter name="Normalization" value="1" error="0" scale="1" min="0" max="1000" free="1" /> | |
174 | + </node> | |
175 | + <node> | |
176 | + <parameter name="Phibar" value="3" scale="1" min="0" max="50" free="0" /> | |
177 | + <parameter name="Normalization" value="1" error="0" scale="1" min="0" max="1000" free="1" /> | |
178 | + </node> | |
179 | + <node> | |
180 | + <parameter name="Phibar" value="5" scale="1" min="0" max="50" free="0" /> | |
181 | + <parameter name="Normalization" value="1" error="0" scale="1" min="0" max="1000" free="1" /> | |
182 | + </node> | |
183 | + <node> | |
184 | + <parameter name="Phibar" value="7" scale="1" min="0" max="50" free="0" /> | |
185 | + <parameter name="Normalization" value="1" error="0" scale="1" min="0" max="1000" free="1" /> | |
186 | + </node> | |
187 | + <node> | |
188 | + <parameter name="Phibar" value="9" scale="1" min="0" max="50" free="0" /> | |
189 | + <parameter name="Normalization" value="1" error="0" scale="1" min="0" max="1000" free="1" /> | |
190 | + </node> | |
191 | + <node> | |
192 | + <parameter name="Phibar" value="11" scale="1" min="0" max="50" free="0" /> | |
193 | + <parameter name="Normalization" value="1" error="0" scale="1" min="0" max="1000" free="1" /> | |
194 | + </node> | |
195 | + <node> | |
196 | + <parameter name="Phibar" value="13" scale="1" min="0" max="50" free="0" /> | |
197 | + <parameter name="Normalization" value="1" error="0" scale="1" min="0" max="1000" free="1" /> | |
198 | + </node> | |
199 | + <node> | |
200 | + <parameter name="Phibar" value="15" scale="1" min="0" max="50" free="0" /> | |
201 | + <parameter name="Normalization" value="1" error="0" scale="1" min="0" max="1000" free="1" /> | |
202 | + </node> | |
203 | + <node> | |
204 | + <parameter name="Phibar" value="17" scale="1" min="0" max="50" free="0" /> | |
205 | + <parameter name="Normalization" value="1" error="0" scale="1" min="0" max="1000" free="1" /> | |
206 | + </node> | |
207 | + <node> | |
208 | + <parameter name="Phibar" value="19" scale="1" min="0" max="50" free="0" /> | |
209 | + <parameter name="Normalization" value="1" error="0" scale="1" min="0" max="1000" free="1" /> | |
210 | + </node> | |
211 | + <node> | |
212 | + <parameter name="Phibar" value="21" scale="1" min="0" max="50" free="0" /> | |
213 | + <parameter name="Normalization" value="1" error="0" scale="1" min="0" max="1000" free="1" /> | |
214 | + </node> | |
215 | + <node> | |
216 | + <parameter name="Phibar" value="23" scale="1" min="0" max="50" free="0" /> | |
217 | + <parameter name="Normalization" value="1" error="0" scale="1" min="0" max="1000" free="1" /> | |
218 | + </node> | |
219 | + <node> | |
220 | + <parameter name="Phibar" value="25" scale="1" min="0" max="50" free="0" /> | |
221 | + <parameter name="Normalization" value="1" error="0" scale="1" min="0" max="1000" free="1" /> | |
222 | + </node> | |
223 | + <node> | |
224 | + <parameter name="Phibar" value="27" scale="1" min="0" max="50" free="0" /> | |
225 | + <parameter name="Normalization" value="1" error="0" scale="1" min="0" max="1000" free="1" /> | |
226 | + </node> | |
227 | + <node> | |
228 | + <parameter name="Phibar" value="29" scale="1" min="0" max="50" free="0" /> | |
229 | + <parameter name="Normalization" value="1" error="0" scale="1" min="0" max="1000" free="1" /> | |
230 | + </node> | |
231 | + <node> | |
232 | + <parameter name="Phibar" value="31" scale="1" min="0" max="50" free="0" /> | |
233 | + <parameter name="Normalization" value="1" error="0" scale="1" min="0" max="1000" free="1" /> | |
234 | + </node> | |
235 | + <node> | |
236 | + <parameter name="Phibar" value="33" scale="1" min="0" max="50" free="0" /> | |
237 | + <parameter name="Normalization" value="1" error="0" scale="1" min="0" max="1000" free="1" /> | |
238 | + </node> | |
239 | + <node> | |
240 | + <parameter name="Phibar" value="35" scale="1" min="0" max="50" free="0" /> | |
241 | + <parameter name="Normalization" value="1" error="0" scale="1" min="0" max="1000" free="1" /> | |
242 | + </node> | |
243 | + <node> | |
244 | + <parameter name="Phibar" value="37" scale="1" min="0" max="50" free="0" /> | |
245 | + <parameter name="Normalization" value="1" error="0" scale="1" min="0" max="1000" free="1" /> | |
246 | + </node> | |
247 | + <node> | |
248 | + <parameter name="Phibar" value="39" scale="1" min="0" max="50" free="0" /> | |
249 | + <parameter name="Normalization" value="1" error="0" scale="1" min="0" max="1000" free="1" /> | |
250 | + </node> | |
251 | + <node> | |
252 | + <parameter name="Phibar" value="41" scale="1" min="0" max="50" free="0" /> | |
253 | + <parameter name="Normalization" value="1" error="0" scale="1" min="0" max="1000" free="1" /> | |
254 | + </node> | |
255 | + <node> | |
256 | + <parameter name="Phibar" value="43" scale="1" min="0" max="50" free="0" /> | |
257 | + <parameter name="Normalization" value="1" error="0" scale="1" min="0" max="1000" free="1" /> | |
258 | + </node> | |
259 | + <node> | |
260 | + <parameter name="Phibar" value="45" scale="1" min="0" max="50" free="0" /> | |
261 | + <parameter name="Normalization" value="1" error="0" scale="1" min="0" max="1000" free="1" /> | |
262 | + </node> | |
263 | + <node> | |
264 | + <parameter name="Phibar" value="47" scale="1" min="0" max="50" free="0" /> | |
265 | + <parameter name="Normalization" value="1" error="0" scale="1" min="0" max="1000" free="1" /> | |
266 | + </node> | |
267 | + <node> | |
268 | + <parameter name="Phibar" value="49" scale="1" min="0" max="50" free="0" /> | |
269 | + <parameter name="Normalization" value="1" error="0" scale="1" min="0" max="1000" free="1" /> | |
270 | + </node> | |
271 | + </source> | |
272 | + <source name="Background_vp0001_0_010000-030000keV" type="DRBPhibarNodes" instrument="COM" id="vp0001_0_010000-030000keV"> | |
273 | + <node> | |
274 | + <parameter name="Phibar" value="1" scale="1" min="0" max="50" free="0" /> | |
275 | + <parameter name="Normalization" value="1" error="0" scale="1" min="0" max="1000" free="1" /> | |
276 | + </node> | |
277 | + <node> | |
278 | + <parameter name="Phibar" value="3" scale="1" min="0" max="50" free="0" /> | |
279 | + <parameter name="Normalization" value="1" error="0" scale="1" min="0" max="1000" free="1" /> | |
280 | + </node> | |
281 | + <node> | |
282 | + <parameter name="Phibar" value="5" scale="1" min="0" max="50" free="0" /> | |
283 | + <parameter name="Normalization" value="1" error="0" scale="1" min="0" max="1000" free="1" /> | |
284 | + </node> | |
285 | + <node> | |
286 | + <parameter name="Phibar" value="7" scale="1" min="0" max="50" free="0" /> | |
287 | + <parameter name="Normalization" value="1" error="0" scale="1" min="0" max="1000" free="1" /> | |
288 | + </node> | |
289 | + <node> | |
290 | + <parameter name="Phibar" value="9" scale="1" min="0" max="50" free="0" /> | |
291 | + <parameter name="Normalization" value="1" error="0" scale="1" min="0" max="1000" free="1" /> | |
292 | + </node> | |
293 | + <node> | |
294 | + <parameter name="Phibar" value="11" scale="1" min="0" max="50" free="0" /> | |
295 | + <parameter name="Normalization" value="1" error="0" scale="1" min="0" max="1000" free="1" /> | |
296 | + </node> | |
297 | + <node> | |
298 | + <parameter name="Phibar" value="13" scale="1" min="0" max="50" free="0" /> | |
299 | + <parameter name="Normalization" value="1" error="0" scale="1" min="0" max="1000" free="1" /> | |
300 | + </node> | |
301 | + <node> | |
302 | + <parameter name="Phibar" value="15" scale="1" min="0" max="50" free="0" /> | |
303 | + <parameter name="Normalization" value="1" error="0" scale="1" min="0" max="1000" free="1" /> | |
304 | + </node> | |
305 | + <node> | |
306 | + <parameter name="Phibar" value="17" scale="1" min="0" max="50" free="0" /> | |
307 | + <parameter name="Normalization" value="1" error="0" scale="1" min="0" max="1000" free="1" /> | |
308 | + </node> | |
309 | + <node> | |
310 | + <parameter name="Phibar" value="19" scale="1" min="0" max="50" free="0" /> | |
311 | + <parameter name="Normalization" value="1" error="0" scale="1" min="0" max="1000" free="1" /> | |
312 | + </node> | |
313 | + <node> | |
314 | + <parameter name="Phibar" value="21" scale="1" min="0" max="50" free="0" /> | |
315 | + <parameter name="Normalization" value="1" error="0" scale="1" min="0" max="1000" free="1" /> | |
316 | + </node> | |
317 | + <node> | |
318 | + <parameter name="Phibar" value="23" scale="1" min="0" max="50" free="0" /> | |
319 | + <parameter name="Normalization" value="1" error="0" scale="1" min="0" max="1000" free="1" /> | |
320 | + </node> | |
321 | + <node> | |
322 | + <parameter name="Phibar" value="25" scale="1" min="0" max="50" free="0" /> | |
323 | + <parameter name="Normalization" value="1" error="0" scale="1" min="0" max="1000" free="1" /> | |
324 | + </node> | |
325 | + <node> | |
326 | + <parameter name="Phibar" value="27" scale="1" min="0" max="50" free="0" /> | |
327 | + <parameter name="Normalization" value="1" error="0" scale="1" min="0" max="1000" free="1" /> | |
328 | + </node> | |
329 | + <node> | |
330 | + <parameter name="Phibar" value="29" scale="1" min="0" max="50" free="0" /> | |
331 | + <parameter name="Normalization" value="1" error="0" scale="1" min="0" max="1000" free="1" /> | |
332 | + </node> | |
333 | + <node> | |
334 | + <parameter name="Phibar" value="31" scale="1" min="0" max="50" free="0" /> | |
335 | + <parameter name="Normalization" value="1" error="0" scale="1" min="0" max="1000" free="1" /> | |
336 | + </node> | |
337 | + <node> | |
338 | + <parameter name="Phibar" value="33" scale="1" min="0" max="50" free="0" /> | |
339 | + <parameter name="Normalization" value="1" error="0" scale="1" min="0" max="1000" free="1" /> | |
340 | + </node> | |
341 | + <node> | |
342 | + <parameter name="Phibar" value="35" scale="1" min="0" max="50" free="0" /> | |
343 | + <parameter name="Normalization" value="1" error="0" scale="1" min="0" max="1000" free="1" /> | |
344 | + </node> | |
345 | + <node> | |
346 | + <parameter name="Phibar" value="37" scale="1" min="0" max="50" free="0" /> | |
347 | + <parameter name="Normalization" value="1" error="0" scale="1" min="0" max="1000" free="1" /> | |
348 | + </node> | |
349 | + <node> | |
350 | + <parameter name="Phibar" value="39" scale="1" min="0" max="50" free="0" /> | |
351 | + <parameter name="Normalization" value="1" error="0" scale="1" min="0" max="1000" free="1" /> | |
352 | + </node> | |
353 | + <node> | |
354 | + <parameter name="Phibar" value="41" scale="1" min="0" max="50" free="0" /> | |
355 | + <parameter name="Normalization" value="1" error="0" scale="1" min="0" max="1000" free="1" /> | |
356 | + </node> | |
357 | + <node> | |
358 | + <parameter name="Phibar" value="43" scale="1" min="0" max="50" free="0" /> | |
359 | + <parameter name="Normalization" value="1" error="0" scale="1" min="0" max="1000" free="1" /> | |
360 | + </node> | |
361 | + <node> | |
362 | + <parameter name="Phibar" value="45" scale="1" min="0" max="50" free="0" /> | |
363 | + <parameter name="Normalization" value="1" error="0" scale="1" min="0" max="1000" free="1" /> | |
364 | + </node> | |
365 | + <node> | |
366 | + <parameter name="Phibar" value="47" scale="1" min="0" max="50" free="0" /> | |
367 | + <parameter name="Normalization" value="1" error="0" scale="1" min="0" max="1000" free="1" /> | |
368 | + </node> | |
369 | + <node> | |
370 | + <parameter name="Phibar" value="49" scale="1" min="0" max="50" free="0" /> | |
371 | + <parameter name="Normalization" value="1" error="0" scale="1" min="0" max="1000" free="1" /> | |
372 | + </node> | |
373 | + </source> | |
374 | +</source_library> | ... | ... |
test/test_comobsconv.py
0 → 100755
1 | +#! /usr/bin/env python | |
2 | +# ========================================================================== | |
3 | +# This scripts performs unit tests for the comobsconv script. | |
4 | +# | |
5 | +# Copyright (C) 2022 Juergen Knoedlseder | |
6 | +# | |
7 | +# This program is free software: you can redistribute it and/or modify | |
8 | +# it under the terms of the GNU General Public License as published by | |
9 | +# the Free Software Foundation, either version 3 of the License, or | |
10 | +# (at your option) any later version. | |
11 | +# | |
12 | +# This program is distributed in the hope that it will be useful, | |
13 | +# but WITHOUT ANY WARRANTY; without even the implied warranty of | |
14 | +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
15 | +# GNU General Public License for more details. | |
16 | +# | |
17 | +# You should have received a copy of the GNU General Public License | |
18 | +# along with this program. If not, see <http://www.gnu.org/licenses/>. | |
19 | +# | |
20 | +# ========================================================================== | |
21 | +import os | |
22 | +import gammalib | |
23 | +import comscripts | |
24 | +from testing import test | |
25 | + | |
26 | + | |
27 | +# =============================== # | |
28 | +# Test class for comobsconv script # | |
29 | +# =============================== # | |
30 | +class Test(test): | |
31 | + """ | |
32 | + Test class for comobsconv script | |
33 | + | |
34 | + This test class makes unit tests for the comobsconv script by using it | |
35 | + from the command line and from Python. | |
36 | + """ | |
37 | + | |
38 | + # Constructor | |
39 | + def __init__(self): | |
40 | + """ | |
41 | + Constructor | |
42 | + """ | |
43 | + # Call base class constructor | |
44 | + test.__init__(self) | |
45 | + | |
46 | + # Set test datasets and parameters | |
47 | + self._obs = self._datadir + '/comptel/obs_binned.xml' | |
48 | + self._model = self._datadir + '/comptel/models_fix.xml' | |
49 | + | |
50 | + # Delete datastores | |
51 | + os.system('rm -rf comobsconv_cmd1') | |
52 | + os.system('rm -rf comobsconv_cmd2') | |
53 | + os.system('rm -rf comobsconv_py1') | |
54 | + | |
55 | + # Return | |
56 | + return | |
57 | + | |
58 | + # Set test functions | |
59 | + def set(self): | |
60 | + """ | |
61 | + Set all test functions. | |
62 | + """ | |
63 | + # Set test name | |
64 | + self.name('comobsconv') | |
65 | + | |
66 | + # Append tests | |
67 | + self.append(self._test_cmd, 'Test comobsconv on command line') | |
68 | + self.append(self._test_python, 'Test comobsconv from Python') | |
69 | + | |
70 | + # Return | |
71 | + return | |
72 | + | |
73 | + # Test command line use | |
74 | + def _test_cmd(self): | |
75 | + """ | |
76 | + Test command line use. | |
77 | + """ | |
78 | + # Set script name | |
79 | + comobsconv = self._comscript('comobsconv') | |
80 | + | |
81 | + # Setup command | |
82 | + cmd = comobsconv+' inobs="'+self._obs+'" inmodel="'+self._model+'" '+ \ | |
83 | + 'outfolder="comobsconv_cmd1" outobs="comobsconv_cmd1.xml" '+ \ | |
84 | + 'logfile="comobsconv_cmd1.log" chatter=1' | |
85 | + | |
86 | + # Check if execution was successful | |
87 | + self.test_assert(self._execute(cmd) == 0, | |
88 | + 'Check successful execution from command line') | |
89 | + | |
90 | + # Check result | |
91 | + self._check_result('comobsconv_cmd1.xml', 'comobsconv_cmd1') | |
92 | + | |
93 | + # Setup command | |
94 | + cmd = comobsconv+' inobs="file_that_does_not_exist.xml" inmodel="'+self._model+'" '+ \ | |
95 | + 'outfolder="comobsconv_cmd2" outobs="comobsconv_cmd2.xml" '+ \ | |
96 | + 'logfile="comobsconv_cmd2.log" chatter=1' | |
97 | + | |
98 | + # Check if execution was successful | |
99 | + self.test_assert(self._execute(cmd, success=False) != 0, | |
100 | + 'Check invalid input file when executed from command line') | |
101 | + | |
102 | + # Check --help option | |
103 | + self._check_help(comobsconv) | |
104 | + | |
105 | + # Return | |
106 | + return | |
107 | + | |
108 | + # Test from Python | |
109 | + def _test_python(self): | |
110 | + """ | |
111 | + Test from Python | |
112 | + """ | |
113 | + # Set-up script | |
114 | + add = comscripts.comobsconv() | |
115 | + add['inobs'] = self._obs | |
116 | + add['inmodel'] = self._model | |
117 | + add['outfolder'] = 'comobsconv_py1' | |
118 | + add['outobs'] = 'comobsconv_py1.xml' | |
119 | + add['logfile'] = 'comobsconv_py1.log' | |
120 | + add['chatter'] = 2 | |
121 | + | |
122 | + # Run script and save result | |
123 | + add.logFileOpen() # Make sure we get a log file | |
124 | + add.run() | |
125 | + add.save() | |
126 | + | |
127 | + # Check result | |
128 | + self._check_result('comobsconv_py1.xml', 'comobsconv_py1') | |
129 | + | |
130 | + # Return | |
131 | + return | |
132 | + | |
133 | + # Check result file | |
134 | + def _check_result(self, filename, foldername, nobs=4): | |
135 | + """ | |
136 | + Check result file | |
137 | + """ | |
138 | + # Load observation definition file | |
139 | + obs = gammalib.GObservations(filename) | |
140 | + | |
141 | + # Load models and extract Crab | |
142 | + models = gammalib.GModels(self._model) | |
143 | + crab = models['Crab'] | |
144 | + | |
145 | + # Check that there is one observation | |
146 | + self.test_value(obs.size(), nobs, 'Check for %d observations' % nobs) | |
147 | + | |
148 | + # Check response | |
149 | + self.test_value(obs[0].npred(crab), 2166.4808609, 'Check number of counts in 0.75-1 MeV bin') | |
150 | + self.test_value(obs[1].npred(crab), 8775.9042976, 'Check number of counts in 1-3 MeV bin') | |
151 | + self.test_value(obs[2].npred(crab), 3388.0663193, 'Check number of counts in 3-10 MeV bin') | |
152 | + self.test_value(obs[3].npred(crab), 608.6723513, 'Check number of counts in 10-30 MeV bin') | |
153 | + | |
154 | + # Return | |
155 | + return | ... | ... |
test/test_python_comscripts.py
... | ... | @@ -27,6 +27,7 @@ import test_comgendb |
27 | 27 | import test_comobsselect |
28 | 28 | import test_comobsbin |
29 | 29 | import test_comobsback |
30 | +import test_comobsconv | |
30 | 31 | import test_comobsmodel |
31 | 32 | import test_comobsadd |
32 | 33 | import test_comobsres |
... | ... | @@ -106,6 +107,7 @@ def test(installed=False, debug=False): |
106 | 107 | test_comobsback.Test(), |
107 | 108 | test_comobsmodel.Test(), |
108 | 109 | test_comobsadd.Test(), |
110 | + test_comobsconv.Test(), | |
109 | 111 | test_comobsres.Test(), |
110 | 112 | test_comobssim.Test(), |
111 | 113 | test_comlixfit.Test(), | ... | ... |